diff -uw old/hdrline.c new/hdrline.c --- old/hdrline.c 2010-10-04 12:12:37.000000000 +0100 +++ new/hdrline.c 2010-10-04 12:13:19.000000000 +0100 @@ -414,6 +414,97 @@ const char *cp; struct tm *tm, *TM; time_t t, T; + int i = 0, invert = 0; + + if (optional && (op == '[' || op == '(')) { + char *is, res = 's'; + T = time(NULL); + tm = localtime(&T); + + is = (char *)prefix; + if( *is == '>' ) { + invert = 1; + ++is; + } + + while( *is && *is != '?' ) { + int t = strtol (is, &is, 10); + switch (*(is++)) { + case '?': + break; + case 'y': + t *= 365 * 24 * 60 * 60; + res = 'y'; + break; + case 'M': + t *= 30 * 24 * 60 * 60; + res = 'M'; + break; + case 'w': + t *= 7 * 24 * 60 * 60; + res = 'w'; + break; + case 'd': + t *= 24 * 60 * 60; + res = 'd'; + break; + case 'h': + t *= 60 * 60; + res = 'h'; + break; + case 'm': + t *= 60; + res = 'm'; + break; + } + i += t; + } + + /* if (i < 0) */ + /* i *= -1; */ + + switch (res) { + case 'y': + case 'M': + case 'w': + case 'd': + switch (res) { + case 'y': + T = T - (tm->tm_yday - 1) * 24 * 60 * 60; + i = i - 365 * 24 * 60 * 60; + break; + case 'M': + T = T - (tm->tm_mday - 1) * 24 * 60 * 60; + i = i - 30 * 24 * 60 * 60; + break; + case 'w': + T = T - (tm->tm_wday - 1) * 24 * 60 * 60; + i = i - 7 * 24 * 60 * 60; + break; + case 'd': + i = i - 24 * 60 * 60; + break; + } + T = T - tm->tm_hour * 60 * 60 + tm->tm_min * 60 + tm->tm_sec; + break; + + case 'h': + T = T - tm->tm_min * 60 + tm->tm_sec; + i = i - 60 * 60; + break; + + case 'm': + T = T - tm->tm_sec; + i = i - 60; + break; + } + + /* T -= (op == '(') ? hdr->received : hdr->date_sent; */ + if( T - ((op == '(') ? hdr->received : hdr->date_sent) > i ) + optional = 0; + break; + } + p = dest; diff -uw old/muttlib.c new/muttlib.c --- old/muttlib.c 2010-10-04 12:11:02.000000000 +0100 +++ new/muttlib.c 2010-10-04 12:12:53.000000000 +0100 @@ -1228,7 +1228,16 @@ if (*src == '?') { flags |= M_FORMAT_OPTIONAL; - src++; + ch = *(++src); /* save the character to switch on */ + cp = prefix; + ++src; + count = 0; + while (count < sizeof (prefix) && *src != '?') + { + *cp++ = *src++; + count++; + } + *cp = 0; } else { @@ -1244,12 +1253,12 @@ count++; } *cp = 0; - } if (!*src) break; /* bad format */ ch = *src++; /* save the character to switch on */ + } if (flags & M_FORMAT_OPTIONAL) { diff -uw old/PATCHES new/PATCHES --- old/PATCHES 2010-10-04 12:12:00.000000000 +0100 +++ new/PATCHES 2010-10-04 12:12:53.000000000 +0100 @@ -1,4 +1,5 @@ sidebar +patch-1.5.0.ats.date_conditional.1 dgc.deepif.1 dgc.subjrx fg.smarttime