Jeffery Honig has been unable to subscribe to the mailing list. He'd like any comments any one has about his proposed patch. You should mail the comments directly to him:
Jeffrey C Honig <[EMAIL PROTECTED]>
Index: h/fmt_scan.h =================================================================== RCS file: /cvsroot/nmh/nmh/h/fmt_scan.h,v retrieving revision 1.1.1.1 diff -u -u -r1.1.1.1 fmt_scan.h --- h/fmt_scan.h 30 Apr 1999 18:08:34 -0000 1.1.1.1 +++ h/fmt_scan.h 27 Jun 2003 22:53:59 -0000 @@ -37,6 +37,13 @@ #define CT_MYMBOX (1<<2) /* "mymbox" test being done */ #define CT_ADDRPARSE (1<<3) /* address parse being done */ +/* + * c_flags bits + */ +#define CF_TRUE (1<<0) /* usually means component is present */ +#define CF_ADDRPARSED (2<<0) /* address has been parsed */ +#define CF_DATEFAB (3<<0) /* datefield fabricated */ + extern int fmt_norm; /* Index: sbr/fmt_compile.c =================================================================== RCS file: /cvsroot/nmh/nmh/sbr/fmt_compile.c,v retrieving revision 1.5 diff -u -u -r1.5 fmt_compile.c --- sbr/fmt_compile.c 2 Jul 2002 22:09:14 -0000 1.5 +++ sbr/fmt_compile.c 27 Jun 2003 22:53:59 -0000 @@ -443,12 +443,10 @@ if (cm->c_type & CT_DATE) { CERROR("component used as both date and address"); } - if (! (cm->c_type & CT_ADDRPARSE)) { - cm->c_mn = &fmt_mnull; - fp->f_type = preprocess; - PUTCOMP(sp); - cm->c_type |= (CT_ADDR | CT_ADDRPARSE); - } + cm->c_mn = &fmt_mnull; + fp->f_type = preprocess; + PUTCOMP(sp); + cm->c_type |= (CT_ADDR | CT_ADDRPARSE); break; case FT_FORMATADDR: Index: sbr/fmt_scan.c =================================================================== RCS file: /cvsroot/nmh/nmh/sbr/fmt_scan.c,v retrieving revision 1.7 diff -u -u -r1.7 fmt_scan.c --- sbr/fmt_scan.c 2 Jul 2002 22:09:14 -0000 1.7 +++ sbr/fmt_scan.c 27 Jun 2003 22:54:00 -0000 @@ -490,7 +490,7 @@ break; case FT_LV_COMPFLAG: - value = fmt->f_comp->c_flags; + value = (fmt->f_comp->c_flags & CF_TRUE) != 0; break; case FT_LV_COMP: value = (comp = fmt->f_comp)->c_text ? atoi(comp->c_text) : 0; @@ -712,10 +712,10 @@ comp = fmt->f_comp; if ((sp = comp->c_text) && (tws = dparsetime(sp))) { *comp->c_tws = *tws; - comp->c_flags = 0; - } else if (comp->c_flags >= 0) { + comp->c_flags &= ~CF_TRUE; + } else if ((comp->c_flags & CF_DATEFAB) == 0) { memset ((char *) comp->c_tws, 0, sizeof *comp->c_tws); - comp->c_flags = 1; + comp->c_flags = CF_TRUE; } break; @@ -779,6 +779,9 @@ case FT_PARSEADDR: comp = fmt->f_comp; + if (comp->c_flags & CF_ADDRPARSED) + break; + comp->c_flags |= CF_ADDRPARSED; if (comp->c_mn != &fmt_mnull) mnfree (comp->c_mn); if ((sp = comp->c_text) && (sp = getname(sp)) && @@ -805,15 +808,22 @@ if ((sp = comp->c_text) && (sp = getname(sp)) && (mn = getm (sp, NULL, 0, AD_NAME, NULL))) { comp->c_mn = mn; - comp->c_flags = ismymbox(mn); + if (ismymbox(mn)) + comp->c_flags |= CF_TRUE; + else + comp->c_flags &= ~CF_TRUE; while ((sp = getname(sp))) - if (comp->c_flags == 0 && + if ((comp->c_flags & CF_TRUE) == 0 && (mn = getm (sp, NULL, 0, AD_NAME, NULL))) - comp->c_flags |= ismymbox(mn); + if (ismymbox(mn)) + comp->c_flags |= CF_TRUE; } else { while (getname("")) /* XXX */ ; - comp->c_flags = (comp->c_text == 0); + if (comp->c_text == 0) + comp->c_flags |= CF_TRUE; + else + comp->c_flags &= ~CF_TRUE; comp->c_mn = &fmt_mnull; } break; Index: uip/fmtdump.c =================================================================== RCS file: /cvsroot/nmh/nmh/uip/fmtdump.c,v retrieving revision 1.5 diff -u -u -r1.5 fmtdump.c --- uip/fmtdump.c 2 Jul 2002 22:09:14 -0000 1.5 +++ uip/fmtdump.c 27 Jun 2003 22:54:00 -0000 @@ -39,6 +39,7 @@ static void assignlabel(struct format *); static char *f_typestr(int); static char *c_typestr(int); +static char *c_flagsstr(int); static void litputs(char *); static void litputc(char); @@ -163,7 +164,7 @@ if (fmt->f_comp->c_type) printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); if (fmt->f_comp->c_flags) - printf(", c_flags %d", fmt->f_comp->c_flags); + printf(", c_flags %s", c_flagsstr(fmt->f_comp->c_flags)); break; case FT_LV_SEC: @@ -195,7 +196,7 @@ if (fmt->f_comp->c_type) printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); if (fmt->f_comp->c_flags) - printf(", c_flags %d", fmt->f_comp->c_flags); + printf(", c_flags %s", c_flagsstr(fmt->f_comp->c_flags)); break; case FT_LS_ADDR: @@ -217,7 +218,7 @@ if (fmt->f_comp->c_type) printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); if (fmt->f_comp->c_flags) - printf(", c_flags %d", fmt->f_comp->c_flags); + printf(", c_flags %s", c_flagsstr(fmt->f_comp->c_flags)); break; case FT_COMPF: @@ -228,7 +229,7 @@ if (fmt->f_comp->c_type) printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); if (fmt->f_comp->c_flags) - printf(", c_flags %d", fmt->f_comp->c_flags); + printf(", c_flags %s", c_flagsstr(fmt->f_comp->c_flags)); break; case FT_STRF: @@ -462,8 +463,26 @@ FNORD(CT_ADDRPARSE, "ADDRPARSE"); strcat(buf, ">"); return(buf); -#undef FNORD } + +static char * +c_flagsstr(int t) +{ + register int i; + static char buf[64]; + + buf[0] = '\0'; + if (t & ~(CF_TRUE|CF_ADDRPARSED|CF_DATEFAB)) + printf(buf, "0x%x ", t); + strcat(buf, "<"); + i = 0; + FNORD(CF_TRUE, "TRUE"); + FNORD(CF_ADDRPARSED, "ADDRPARSED"); + FNORD(CF_DATEFAB, "DATEFAM"); + strcat(buf, ">"); + return(buf); +} +#undef FNORD static void litputs(char *s) Index: uip/scansbr.c =================================================================== RCS file: /cvsroot/nmh/nmh/uip/scansbr.c,v retrieving revision 1.5 diff -u -u -r1.5 scansbr.c --- uip/scansbr.c 2 Jul 2002 22:09:15 -0000 1.5 +++ uip/scansbr.c 27 Jun 2003 22:54:00 -0000 @@ -331,9 +331,9 @@ if (datecomp->c_tws == NULL) adios (NULL, "unable to allocate tws buffer"); *datecomp->c_tws = *dlocaltime ((time_t *) &st.st_mtime); - datecomp->c_flags = -1; + datecomp->c_flags |= CF_DATEFAB|CF_TRUE; } else { - datecomp->c_flags = 0; + datecomp->c_flags &= ~CF_DATEFAB; } } }