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;
}
}
}