]> diplodocus.org Git - nmh/blobdiff - uip/picksbr.c
Tweaked check of -outfile in test-mhstore.
[nmh] / uip / picksbr.c
index 5fa731890b25d79e71fce1f13891dfbfa9f55040..6035470341e86573124c5113c6bdef3a84a51f68 100644 (file)
 #endif
 #include <time.h>
 
-static struct swit parswit[] = {
-#define        PRAND                   0
-    { "and", 0 },
-#define        PROR                    1
-    { "or", 0 },
-#define        PRNOT                   2
-    { "not", 0 },
-#define        PRLBR                   3
-    { "lbrace", 0 },
-#define        PRRBR                   4
-    { "rbrace", 0 },
-#define        PRCC                    5
-    { "cc  pattern", 0 },
-#define        PRDATE                  6
-    { "date  pattern", 0 },
-#define        PRFROM                  7
-    { "from  pattern", 0 },
-#define        PRSRCH                  8
-    { "search  pattern", 0 },
-#define        PRSUBJ                  9
-    { "subject  pattern", 0 },
-#define        PRTO                   10
-    { "to  pattern", 0 },
-#define        PROTHR                 11
-    { "-othercomponent  pattern", 15 },
-#define        PRAFTR                 12
-    { "after date", 0 },
-#define        PRBEFR                 13
-    { "before date", 0 },
-#define        PRDATF                 14
-    { "datefield field", 5 },
-    { NULL, 0 }
-};
+#define PARSE_SWITCHES \
+    X("and", 0, PRAND) \
+    X("or", 0, PROR) \
+    X("not", 0, PRNOT) \
+    X("lbrace", 0, PRLBR) \
+    X("rbrace", 0, PRRBR) \
+    X("cc  pattern", 0, PRCC) \
+    X("date  pattern", 0, PRDATE) \
+    X("from  pattern", 0, PRFROM) \
+    X("search  pattern", 0, PRSRCH) \
+    X("subject  pattern", 0, PRSUBJ) \
+    X("to  pattern", 0, PRTO) \
+    X("-othercomponent  pattern", 15, PROTHR) \
+    X("after date", 0, PRAFTR) \
+    X("before date", 0, PRBEFR) \
+    X("datefield field", 5, PRDATF) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(PARSE);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(PARSE, parswit);
+#undef X
 
 /* DEFINITIONS FOR PATTERN MATCHING */
 
@@ -571,8 +562,8 @@ gcompile (struct nexus *n, char *astr)
     int cclcnt;
     register unsigned char *ep, *dp, *sp, *lastep = 0;
 
-    dp = (ep = n->n_expbuf) + sizeof n->n_expbuf;
-    sp = astr;
+    dp = (ep = (unsigned char *) n->n_expbuf) + sizeof n->n_expbuf;
+    sp = (unsigned char *) astr;
     if (*sp == '^') {
        n->n_circf = 1;
        sp++;
@@ -811,7 +802,7 @@ advance (char *alp, char *aep)
        star: 
                do {
                    lp--;
-                   if (advance (lp, ep))
+                   if (advance ((char *) lp, (char *) ep))
                        return (1);
                } while (lp > curlp);
                return 0;
@@ -904,19 +895,19 @@ tws_special (char *ap)
     register struct tws *tw;
 
     time (&clock);
-    if (!mh_strcasecmp (ap, "today"))
+    if (!strcasecmp (ap, "today"))
        return dlocaltime (&clock);
-    if (!mh_strcasecmp (ap, "yesterday")) {
+    if (!strcasecmp (ap, "yesterday")) {
        clock -= (long) (60 * 60 * 24);
        return dlocaltime (&clock);
     }
-    if (!mh_strcasecmp (ap, "tomorrow")) {
+    if (!strcasecmp (ap, "tomorrow")) {
        clock += (long) (60 * 60 * 24);
        return dlocaltime (&clock);
     }
 
     for (i = 0; tw_ldotw[i]; i++)
-       if (!mh_strcasecmp (ap, tw_ldotw[i]))
+       if (!strcasecmp (ap, tw_ldotw[i]))
            break;
     if (tw_ldotw[i]) {
        if ((tw = dlocaltime (&clock)) == NULL)
@@ -943,12 +934,13 @@ plist
     register char *bp;
     char buf[BUFSIZ], name[NAMESZ];
     register struct tws *tw;
+    m_getfld_state_t gstate = 0;
     NMH_UNUSED (stop);
 
     fseek (fp, start, SEEK_SET);
-    for (state = FLD, bp = NULL;;) {
+    for (bp = NULL;;) {
        int bufsz = sizeof buf;
-       switch (state = m_getfld (state, name, buf, &bufsz, fp)) {
+       switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) {
            case FLD: 
            case FLDPLUS: 
                if (bp != NULL)
@@ -956,10 +948,10 @@ plist
                bp = add (buf, NULL);
                while (state == FLDPLUS) {
                    bufsz = sizeof buf;
-                   state = m_getfld (state, name, buf, &bufsz, fp);
+                   state = m_getfld (&gstate, name, buf, &bufsz, fp);
                    bp = add (buf, bp);
                }
-               if (!mh_strcasecmp (name, n->n_datef))
+               if (!strcasecmp (name, n->n_datef))
                    break;
                continue;
 
@@ -978,6 +970,7 @@ plist
        }
        break;
     }
+    m_getfld_state_destroy (&gstate);
 
     if ((tw = dparsetime (bp)) == NULL)
        advise (NULL, "unable to parse %s field in message %d, matching...",