Removed now unused dependencies (distsbr.o) in makefile.
[mmh] / uip / picksbr.c
index c0692a8..872e18a 100644 (file)
@@ -206,11 +206,11 @@ static int TWSaction();
 
 
 int
-pcompile (char **vec, char *date)
+pcompile(char **vec, char *date)
 {
        register char *cp;
 
-       if ((cp = getenv ("MHPDEBUG")) && *cp)
+       if ((cp = getenv("MHPDEBUG")) && *cp)
                pdebug++;
 
        argp = vec;
@@ -218,11 +218,11 @@ pcompile (char **vec, char *date)
                datesw = "date";
        talked = 0;
 
-       if ((head = parse ()) == NULL)
+       if ((head = parse()) == NULL)
                return (talked ? 0 : 1);
 
        if (*argp) {
-               padvise (NULL, "%s unexpected", *argp);
+               padvise(NULL, "%s unexpected", *argp);
                return 0;
        }
 
@@ -231,141 +231,141 @@ pcompile (char **vec, char *date)
 
 
 static struct nexus *
-parse (void)
+parse(void)
 {
        register char  *cp;
        register struct nexus *n, *o;
 
-       if ((n = nexp1 ()) == NULL || (cp = nxtarg ()) == NULL)
+       if ((n = nexp1()) == NULL || (cp = nxtarg()) == NULL)
                return n;
 
        if (*cp != '-') {
-               padvise (NULL, "%s unexpected", cp);
+               padvise(NULL, "%s unexpected", cp);
                return NULL;
        }
 
        if (*++cp == '-')
                goto header;
-       switch (smatch (cp, parswit)) {
-               case AMBIGSW:
-                       ambigsw (cp, parswit);
-                       talked++;
-                       return NULL;
-               case UNKWNSW:
-                       fprintf (stderr, "-%s unknown\n", cp);
-                       talked++;
-                       return NULL;
+       switch (smatch(cp, parswit)) {
+       case AMBIGSW:
+               ambigsw(cp, parswit);
+               talked++;
+               return NULL;
+       case UNKWNSW:
+               fprintf(stderr, "-%s unknown\n", cp);
+               talked++;
+               return NULL;
 
-               case PROR:
-                       o = newnexus (ORaction);
-                       o->n_L_child = n;
-                       if ((o->n_R_child = parse ()))
-                               return o;
-                       padvise (NULL, "missing disjunctive");
-                       return NULL;
+       case PROR:
+               o = newnexus(ORaction);
+               o->n_L_child = n;
+               if ((o->n_R_child = parse()))
+                       return o;
+               padvise(NULL, "missing disjunctive");
+               return NULL;
 
 header: ;
-               default:
-                       prvarg ();
-                       return n;
+       default:
+               prvarg();
+               return n;
        }
 }
 
 static struct nexus *
-nexp1 (void)
+nexp1(void)
 {
        register char *cp;
        register struct nexus *n, *o;
 
-       if ((n = nexp2 ()) == NULL || (cp = nxtarg ()) == NULL)
+       if ((n = nexp2()) == NULL || (cp = nxtarg()) == NULL)
                return n;
 
        if (*cp != '-') {
-               padvise (NULL, "%s unexpected", cp);
+               padvise(NULL, "%s unexpected", cp);
                return NULL;
        }
 
        if (*++cp == '-')
                goto header;
-       switch (smatch (cp, parswit)) {
-               case AMBIGSW:
-                       ambigsw (cp, parswit);
-                       talked++;
-                       return NULL;
-               case UNKWNSW:
-                       fprintf (stderr, "-%s unknown\n", cp);
-                       talked++;
-                       return NULL;
+       switch (smatch(cp, parswit)) {
+       case AMBIGSW:
+               ambigsw(cp, parswit);
+               talked++;
+               return NULL;
+       case UNKWNSW:
+               fprintf(stderr, "-%s unknown\n", cp);
+               talked++;
+               return NULL;
 
-               case PRAND:
-                       o = newnexus (ANDaction);
-                       o->n_L_child = n;
-                       if ((o->n_R_child = nexp1 ()))
-                               return o;
-                       padvise (NULL, "missing conjunctive");
-                       return NULL;
+       case PRAND:
+               o = newnexus(ANDaction);
+               o->n_L_child = n;
+               if ((o->n_R_child = nexp1()))
+                       return o;
+               padvise(NULL, "missing conjunctive");
+               return NULL;
 
 header: ;
-               default:
-                       prvarg ();
-                       return n;
+       default:
+               prvarg();
+               return n;
        }
 }
 
 
 static struct nexus *
-nexp2 (void)
+nexp2(void)
 {
        register char *cp;
        register struct nexus *n;
 
-       if ((cp = nxtarg ()) == NULL)
+       if ((cp = nxtarg()) == NULL)
                return NULL;
 
        if (*cp != '-') {
-               prvarg ();
-               return nexp3 ();
+               prvarg();
+               return nexp3();
        }
 
        if (*++cp == '-')
                goto header;
-       switch (smatch (cp, parswit)) {
-               case AMBIGSW:
-                       ambigsw (cp, parswit);
-                       talked++;
-                       return NULL;
-               case UNKWNSW:
-                       fprintf (stderr, "-%s unknown\n", cp);
-                       talked++;
-                       return NULL;
+       switch (smatch(cp, parswit)) {
+       case AMBIGSW:
+               ambigsw(cp, parswit);
+               talked++;
+               return NULL;
+       case UNKWNSW:
+               fprintf(stderr, "-%s unknown\n", cp);
+               talked++;
+               return NULL;
 
-               case PRNOT:
-                       n = newnexus (NOTaction);
-                       if ((n->n_L_child = nexp3 ()))
-                               return n;
-                       padvise (NULL, "missing negation");
-                       return NULL;
+       case PRNOT:
+               n = newnexus(NOTaction);
+               if ((n->n_L_child = nexp3()))
+                       return n;
+               padvise(NULL, "missing negation");
+               return NULL;
 
 header: ;
-               default:
-                       prvarg ();
-                       return nexp3 ();
+       default:
+               prvarg();
+               return nexp3();
        }
 }
 
 static struct nexus *
-nexp3 (void)
+nexp3(void)
 {
        int i;
        register char *cp, *dp;
        char buffer[BUFSIZ], temp[64];
        register struct nexus *n;
 
-       if ((cp = nxtarg ()) == NULL)
+       if ((cp = nxtarg()) == NULL)
                return NULL;
 
        if (*cp != '-') {
-               padvise (NULL, "%s unexpected", cp);
+               padvise(NULL, "%s unexpected", cp);
                return NULL;
        }
 
@@ -373,111 +373,105 @@ nexp3 (void)
                dp = ++cp;
                goto header;
        }
-       switch (i = smatch (cp, parswit)) {
-               case AMBIGSW:
-                       ambigsw (cp, parswit);
-                       talked++;
-                       return NULL;
-               case UNKWNSW:
-                       fprintf (stderr, "-%s unknown\n", cp);
-                       talked++;
-                       return NULL;
+       switch (i = smatch(cp, parswit)) {
+       case AMBIGSW:
+               ambigsw(cp, parswit);
+               talked++;
+               return NULL;
+       case UNKWNSW:
+               fprintf(stderr, "-%s unknown\n", cp);
+               talked++;
+               return NULL;
 
-               case PRLBR:
-                       if ((n = parse ()) == NULL) {
-                               padvise (NULL, "missing group");
-                               return NULL;
-                       }
-                       if ((cp = nxtarg ()) == NULL) {
-                               padvise (NULL, "missing -rbrace");
-                               return NULL;
-                       }
-                       if (*cp++ == '-' && smatch (cp, parswit) == PRRBR)
-                               return n;
-                       padvise (NULL, "%s unexpected", --cp);
+       case PRLBR:
+               if ((n = parse()) == NULL) {
+                       padvise(NULL, "missing group");
                        return NULL;
-
-               default:
-                       prvarg ();
+               }
+               if ((cp = nxtarg()) == NULL) {
+                       padvise(NULL, "missing -rbrace");
                        return NULL;
+               }
+               if (*cp++ == '-' && smatch(cp, parswit) == PRRBR)
+                       return n;
+               padvise(NULL, "%s unexpected", --cp);
+               return NULL;
+
+       default:
+               prvarg();
+               return NULL;
 
-               case PRCC:
-               case PRDATE:
-               case PRFROM:
-               case PRTO:
-               case PRSUBJ:
-                       strncpy(temp, parswit[i].sw, sizeof(temp));
-                       temp[sizeof(temp) - 1] = '\0';
-                       dp = *brkstring (temp, " ", NULL);
+       case PRCC:
+       case PRDATE:
+       case PRFROM:
+       case PRTO:
+       case PRSUBJ:
+               strncpy(temp, parswit[i].sw, sizeof(temp));
+               temp[sizeof(temp) - 1] = '\0';
+               dp = *brkstring(temp, " ", NULL);
 header: ;
-                       if (!(cp = nxtarg ())) {  /* allow -xyz arguments */
-                               padvise (NULL, "missing argument to %s",
-                                               argp[-2]);
-                               return NULL;
-                       }
-                       n = newnexus (GREPaction);
-                       n->n_header = 1;
-                       snprintf (buffer, sizeof(buffer), "^%s[ \t]*:.*%s",
-                                       dp, cp);
-                       dp = buffer;
-                       goto pattern;
-
-               case PRSRCH:
-                       n = newnexus (GREPaction);
-                       n->n_header = 0;
-                       if (!(cp = nxtarg ())) {  /* allow -xyz arguments */
-                               padvise (NULL, "missing argument to %s",
-                                               argp[-2]);
-                               return NULL;
-                       }
-                       dp = cp;
+               if (!(cp = nxtarg())) {  /* allow -xyz arguments */
+                       padvise(NULL, "missing argument to %s", argp[-2]);
+                       return NULL;
+               }
+               n = newnexus(GREPaction);
+               n->n_header = 1;
+               snprintf(buffer, sizeof(buffer), "^%s[ \t]*:.*%s", dp, cp);
+               dp = buffer;
+               goto pattern;
+
+       case PRSRCH:
+               n = newnexus(GREPaction);
+               n->n_header = 0;
+               if (!(cp = nxtarg())) {  /* allow -xyz arguments */
+                       padvise(NULL, "missing argument to %s", argp[-2]);
+                       return NULL;
+               }
+               dp = cp;
 pattern: ;
-                       if (!gcompile (n, dp)) {
-                               padvise (NULL, "pattern error in %s %s",
-                                               argp[-2], cp);
-                               return NULL;
-                       }
-                       n->n_patbuf = getcpy (dp);
-                       return n;
+               if (!gcompile(n, dp)) {
+                       padvise(NULL, "pattern error in %s %s", argp[-2], cp);
+                       return NULL;
+               }
+               n->n_patbuf = getcpy(dp);
+               return n;
+
+       case PROTHR:
+               padvise(NULL, "internal error!");
+               return NULL;
 
-               case PROTHR:
-                       padvise (NULL, "internal error!");
+       case PRDATF:
+               if (!(datesw = nxtarg()) || *datesw == '-') {
+                       padvise(NULL, "missing argument to %s",
+                                       argp[-2]);
                        return NULL;
+               }
+               return nexp3();
 
-               case PRDATF:
-                       if (!(datesw = nxtarg ()) || *datesw == '-') {
-                               padvise (NULL, "missing argument to %s",
-                                               argp[-2]);
-                               return NULL;
-                       }
-                       return nexp3 ();
-
-               case PRAFTR:
-               case PRBEFR:
-                       if (!(cp = nxtarg ())) {  /* allow -xyz arguments */
-                               padvise (NULL, "missing argument to %s",
-                                               argp[-2]);
-                               return NULL;
-                       }
-                       n = newnexus (TWSaction);
-                       n->n_datef = datesw;
-                       if (!tcompile (cp, &n->n_tws, n->n_after = i == PRAFTR)) {
-                               padvise (NULL, "unable to parse %s %s",
-                                               argp[-2], cp);
-                               return NULL;
-                       }
-                       return n;
+       case PRAFTR:
+       case PRBEFR:
+               if (!(cp = nxtarg())) {  /* allow -xyz arguments */
+                       padvise(NULL, "missing argument to %s", argp[-2]);
+                       return NULL;
+               }
+               n = newnexus(TWSaction);
+               n->n_datef = datesw;
+               if (!tcompile(cp, &n->n_tws, n->n_after = i == PRAFTR)) {
+                       padvise(NULL, "unable to parse %s %s", argp[-2], cp);
+                       return NULL;
+               }
+               return n;
        }
 }
 
 
 static struct nexus *
-newnexus (int (*action)())
+newnexus(int (*action)())
 {
        register struct nexus *p;
 
-       if ((p = (struct nexus *) calloc ((size_t) 1, sizeof *p)) == NULL)
-               adios (NULL, "unable to allocate component storage");
+       if ((p = (struct nexus *) calloc((size_t) 1, sizeof *p)) == NULL)
+               adios(NULL, "unable to allocate component storage");
 
        p->n_action = action;
        return p;
@@ -485,7 +479,7 @@ newnexus (int (*action)())
 
 
 #define args(a)  a, fp, msgnum, start, stop
-#define params   args (n)
+#define params   args(n)
 #define plist    \
        register struct nexus  *n; \
        register FILE *fp; \
@@ -494,89 +488,89 @@ newnexus (int (*action)())
        stop;
 
 int
-pmatches (FILE *fp, int msgnum, long start, long stop)
+pmatches(FILE *fp, int msgnum, long start, long stop)
 {
        if (!head)
                return 1;
 
        if (!talked++ && pdebug)
-               PRaction (head, 0);
+               PRaction(head, 0);
 
-       return (*head->n_action) (args (head));
+       return (*head->n_action) (args(head));
 }
 
 
 static void
-PRaction (struct nexus *n, int level)
+PRaction(struct nexus *n, int level)
 {
        register int i;
 
        for (i = 0; i < level; i++)
-               fprintf (stderr, "| ");
+               fprintf(stderr, "| ");
 
        if (n->n_action == ORaction) {
-               fprintf (stderr, "OR\n");
-               PRaction (n->n_L_child, level + 1);
-               PRaction (n->n_R_child, level + 1);
+               fprintf(stderr, "OR\n");
+               PRaction(n->n_L_child, level + 1);
+               PRaction(n->n_R_child, level + 1);
                return;
        }
        if (n->n_action == ANDaction) {
-               fprintf (stderr, "AND\n");
-               PRaction (n->n_L_child, level + 1);
-               PRaction (n->n_R_child, level + 1);
+               fprintf(stderr, "AND\n");
+               PRaction(n->n_L_child, level + 1);
+               PRaction(n->n_R_child, level + 1);
                return;
        }
        if (n->n_action == NOTaction) {
-               fprintf (stderr, "NOT\n");
-               PRaction (n->n_L_child, level + 1);
+               fprintf(stderr, "NOT\n");
+               PRaction(n->n_L_child, level + 1);
                return;
        }
        if (n->n_action == GREPaction) {
-               fprintf (stderr, "PATTERN(%s) %s\n",
+               fprintf(stderr, "PATTERN(%s) %s\n",
                                n->n_header ? "header" : "body", n->n_patbuf);
                return;
        }
        if (n->n_action == TWSaction) {
-               fprintf (stderr, "TEMPORAL(%s) %s: %s\n",
+               fprintf(stderr, "TEMPORAL(%s) %s: %s\n",
                                n->n_after ? "after" : "before", n->n_datef,
-                               dasctime (&n->n_tws, TW_NULL));
+                               dasctime(&n->n_tws, TW_NULL));
                return;
        }
-       fprintf (stderr, "UNKNOWN(0x%x)\n",
+       fprintf(stderr, "UNKNOWN(0x%x)\n",
                         (unsigned int)(unsigned long) (*n->n_action));
 }
 
 
 static int
-ORaction (params)
+ORaction(params)
 plist
 {
-       if ((*n->n_L_child->n_action) (args (n->n_L_child)))
+       if ((*n->n_L_child->n_action) (args(n->n_L_child)))
                return 1;
-       return (*n->n_R_child->n_action) (args (n->n_R_child));
+       return (*n->n_R_child->n_action) (args(n->n_R_child));
 }
 
 
 static int
-ANDaction (params)
+ANDaction(params)
 plist
 {
-       if (!(*n->n_L_child->n_action) (args (n->n_L_child)))
+       if (!(*n->n_L_child->n_action) (args(n->n_L_child)))
                return 0;
-       return (*n->n_R_child->n_action) (args (n->n_R_child));
+       return (*n->n_R_child->n_action) (args(n->n_R_child));
 }
 
 
 static int
-NOTaction (params)
+NOTaction(params)
 plist
 {
-       return (!(*n->n_L_child->n_action) (args (n->n_L_child)));
+       return (!(*n->n_L_child->n_action) (args(n->n_L_child)));
 }
 
 
 static int
-gcompile (struct nexus *n, char *astr)
+gcompile(struct nexus *n, char *astr)
 {
        register int c;
        int cclcnt;
@@ -596,66 +590,66 @@ gcompile (struct nexus *n, char *astr)
                if ((c = *sp++) != '*')
                        lastep = ep;
                switch (c) {
-                       case '\0':
-                               *ep++ = CEOF;
-                               return 1;
+               case '\0':
+                       *ep++ = CEOF;
+                       return 1;
 
-                       case '.':
-                               *ep++ = CDOT;
-                               continue;
+               case '.':
+                       *ep++ = CDOT;
+                       continue;
 
-                       case '*':
-                               if (lastep == 0)
-                                       goto defchar;
-                               *lastep |= STAR;
-                               continue;
+               case '*':
+                       if (lastep == 0)
+                               goto defchar;
+                       *lastep |= STAR;
+                       continue;
 
-                       case '$':
-                               if (*sp != '\0')
-                                       goto defchar;
-                               *ep++ = CDOL;
-                               continue;
+               case '$':
+                       if (*sp != '\0')
+                               goto defchar;
+                       *ep++ = CDOL;
+                       continue;
 
-                       case '[':
-                               *ep++ = CCL;
-                               *ep++ = 0;
-                               cclcnt = 0;
-                               if ((c = *sp++) == '^') {
-                                       c = *sp++;
-                                       ep[-2] = NCCL;
-                               }
-                               if (c == '-') {
-                                       *ep++ = c;
-                                       cclcnt++;
-                                       c = *sp++;
-                               }
-                               do {
-                                       if (c == '-' && *sp != '\0' && *sp != ']') {
-                                               for (c = ep[-1]+1; c < *sp; c++) {
-                                                               *ep++ = c;
-                                                               cclcnt++;
-                                                       if (c == '\0' || ep >= dp)
-                                                               goto cerror;
-                                               }
-                                       } else {
-                                               *ep++ = c;
-                                               cclcnt++;
+               case '[':
+                       *ep++ = CCL;
+                       *ep++ = 0;
+                       cclcnt = 0;
+                       if ((c = *sp++) == '^') {
+                               c = *sp++;
+                               ep[-2] = NCCL;
+                       }
+                       if (c == '-') {
+                               *ep++ = c;
+                               cclcnt++;
+                               c = *sp++;
+                       }
+                       do {
+                               if (c == '-' && *sp != '\0' && *sp != ']') {
+                                       for (c = ep[-1]+1; c < *sp; c++) {
+                                                       *ep++ = c;
+                                                       cclcnt++;
                                                if (c == '\0' || ep >= dp)
                                                        goto cerror;
                                        }
-                               } while ((c = *sp++) != ']');
-                               if (cclcnt > 255)
-                                       goto cerror;
-                               lastep[1] = cclcnt;
-                               continue;
+                               } else {
+                                       *ep++ = c;
+                                       cclcnt++;
+                                       if (c == '\0' || ep >= dp)
+                                               goto cerror;
+                               }
+                       } while ((c = *sp++) != ']');
+                       if (cclcnt > 255)
+                               goto cerror;
+                       lastep[1] = cclcnt;
+                       continue;
 
                        case '\\':
                                if ((c = *sp++) == '\0')
-                                       goto cerror;
-               defchar:
-                       default:
-                               *ep++ = CCHR;
-                               *ep++ = c;
+                               goto cerror;
+defchar:
+               default:
+                       *ep++ = CCHR;
+                       *ep++ = c;
                }
        }
 
@@ -665,7 +659,7 @@ cerror: ;
 
 
 static int
-GREPaction (params)
+GREPaction(params)
 plist
 {
        int c, body, lf;
@@ -673,7 +667,7 @@ plist
        register char *p1, *p2, *ebp, *cbp;
        char ibuf[BUFSIZ];
 
-       fseek (fp, start, SEEK_SET);
+       fseek(fp, start, SEEK_SET);
        body = 0;
        ebp = cbp = ibuf;
        for (;;) {
@@ -684,15 +678,15 @@ plist
                lf = 0;
                for (;;) {
                        if (p2 >= ebp) {
-                               if (fgets (ibuf, sizeof ibuf, fp) == NULL
+                               if (fgets(ibuf, sizeof ibuf, fp) == NULL
                                                || (stop && pos >= stop)) {
                                        if (lf)
                                                break;
                                        return 0;
                                }
-                               pos += (long) strlen (ibuf);
+                               pos += (long) strlen(ibuf);
                                p2 = ibuf;
-                               ebp = ibuf + strlen (ibuf);
+                               ebp = ibuf + strlen(ibuf);
                        }
                        c = *p2++;
                        if (lf && c != '\n') {
@@ -725,7 +719,7 @@ plist
                p2 = n->n_expbuf;
 
                if (n->n_circf) {
-                       if (advance (p1, p2))
+                       if (advance(p1, p2))
                                return 1;
                        continue;
                }
@@ -734,14 +728,14 @@ plist
                        c = p2[1];
                        do {
                                if (*p1 == c || cc[(unsigned char)*p1] == c)
-                                       if (advance (p1, p2))
+                                       if (advance(p1, p2))
                                                return 1;
                        } while (*p1++);
                        continue;
                }
 
                do {
-                       if (advance (p1, p2))
+                       if (advance(p1, p2))
                                return 1;
                } while (*p1++);
        }
@@ -749,7 +743,7 @@ plist
 
 
 static int
-advance (char *alp, char *aep)
+advance(char *alp, char *aep)
 {
        register unsigned char *lp, *ep, *curlp;
 
@@ -757,79 +751,79 @@ advance (char *alp, char *aep)
        ep = (unsigned char *)aep;
        for (;;)
                switch (*ep++) {
-                       case CCHR:
-                               if (*ep++ == *lp++ || ep[-1] == cc[lp[-1]])
-                                       continue;
-                               return 0;
-
-                       case CDOT:
-                               if (*lp++)
-                                       continue;
-                               return 0;
-
-                       case CDOL:
-                               if (*lp == 0)
-                                       continue;
-                               return 0;
-
-                       case CEOF:
-                               return 1;
+               case CCHR:
+                       if (*ep++ == *lp++ || ep[-1] == cc[lp[-1]])
+                               continue;
+                       return 0;
 
-                       case CCL:
-                               if (cclass (ep, *lp++, 1)) {
-                                       ep += *ep + 1;
-                                       continue;
-                               }
-                               return 0;
+               case CDOT:
+                       if (*lp++)
+                               continue;
+                       return 0;
 
-                       case NCCL:
-                               if (cclass (ep, *lp++, 0)) {
-                                       ep += *ep + 1;
-                                       continue;
-                               }
-                               return 0;
-
-                       case CDOT | STAR:
-                               curlp = lp;
-                               while (*lp++)
-                                       continue;
-                               goto star;
-
-                       case CCHR | STAR:
-                               curlp = lp;
-                               while (*lp++ == *ep || cc[lp[-1]] == *ep)
-                                       continue;
-                               ep++;
-                               goto star;
-
-                       case CCL | STAR:
-                       case NCCL | STAR:
-                               curlp = lp;
-                               while (cclass (ep, *lp++, ep[-1] == (CCL | STAR)))
-                                       continue;
+               case CDOL:
+                       if (*lp == 0)
+                               continue;
+                       return 0;
+
+               case CEOF:
+                       return 1;
+
+               case CCL:
+                       if (cclass(ep, *lp++, 1)) {
+                               ep += *ep + 1;
+                               continue;
+                       }
+                       return 0;
+
+               case NCCL:
+                       if (cclass(ep, *lp++, 0)) {
                                ep += *ep + 1;
-                               goto star;
-
-               star:
-                               do {
-                                       lp--;
-                                       if (advance (lp, ep))
-                                               return (1);
-                               } while (lp > curlp);
-                               return 0;
-
-                       default:
-                               admonish (NULL, "advance() botch -- you lose big");
-                               return 0;
+                               continue;
+                       }
+                       return 0;
+
+               case CDOT | STAR:
+                       curlp = lp;
+                       while (*lp++)
+                               continue;
+                       goto star;
+
+               case CCHR | STAR:
+                       curlp = lp;
+                       while (*lp++ == *ep || cc[lp[-1]] == *ep)
+                               continue;
+                       ep++;
+                       goto star;
+
+               case CCL | STAR:
+               case NCCL | STAR:
+                       curlp = lp;
+                       while (cclass(ep, *lp++, ep[-1] == (CCL | STAR)))
+                               continue;
+                       ep += *ep + 1;
+                       goto star;
+
+star:
+                       do {
+                               lp--;
+                               if (advance(lp, ep))
+                                       return (1);
+                       } while (lp > curlp);
+                       return 0;
+
+               default:
+                       admonish(NULL, "advance() botch -- you lose big");
+                       return 0;
                }
 }
 
 
 static int
-cclass (unsigned char *aset, int ac, int af)
+cclass(unsigned char *aset, int ac, int af)
 {
        register unsigned int n;
-       register unsigned char   c, *set;
+       register unsigned char c, *set;
 
        set = aset;
        if ((c = ac) == 0)
@@ -845,53 +839,53 @@ cclass (unsigned char *aset, int ac, int af)
 
 
 static int
-tcompile (char *ap, struct tws *tb, int isafter)
+tcompile(char *ap, struct tws *tb, int isafter)
 {
        register struct tws *tw;
 
-       if ((tw = tws_parse (ap, isafter)) == NULL)
+       if ((tw = tws_parse(ap, isafter)) == NULL)
                return 0;
 
-       twscopy (tb, tw);
+       twscopy(tb, tw);
        return 1;
 }
 
 
 static struct tws *
-tws_parse (char *ap, int isafter)
+tws_parse(char *ap, int isafter)
 {
        char buffer[BUFSIZ];
        register struct tws *tw, *ts;
 
-       if ((tw = tws_special (ap)) != NULL) {
+       if ((tw = tws_special(ap)) != NULL) {
                tw->tw_sec = tw->tw_min = isafter ? 59 : 0;
                tw->tw_hour = isafter ? 23 : 0;
                return tw;
        }
-       if ((tw = dparsetime (ap)) != NULL)
+       if ((tw = dparsetime(ap)) != NULL)
                return tw;
 
-       if ((ts = dlocaltimenow ()) == NULL)
+       if ((ts = dlocaltimenow()) == NULL)
                return NULL;
 
-       snprintf (buffer, sizeof(buffer), "%s %s", ap, dtwszone (ts));
-       if ((tw = dparsetime (buffer)) != NULL)
+       snprintf(buffer, sizeof(buffer), "%s %s", ap, dtwszone(ts));
+       if ((tw = dparsetime(buffer)) != NULL)
                return tw;
 
-       snprintf (buffer, sizeof(buffer), "%s %02d:%02d:%02d %s", ap,
-                       ts->tw_hour, ts->tw_min, ts->tw_sec, dtwszone (ts));
-       if ((tw = dparsetime (buffer)) != NULL)
+       snprintf(buffer, sizeof(buffer), "%s %02d:%02d:%02d %s", ap,
+                       ts->tw_hour, ts->tw_min, ts->tw_sec, dtwszone(ts));
+       if ((tw = dparsetime(buffer)) != NULL)
                return tw;
 
-       snprintf (buffer, sizeof(buffer), "%02d %s %04d %s",
+       snprintf(buffer, sizeof(buffer), "%02d %s %04d %s",
                        ts->tw_mday, tw_moty[ts->tw_mon], ts->tw_year, ap);
-       if ((tw = dparsetime (buffer)) != NULL)
+       if ((tw = dparsetime(buffer)) != NULL)
                return tw;
 
-       snprintf (buffer, sizeof(buffer), "%02d %s %04d %s %s",
+       snprintf(buffer, sizeof(buffer), "%02d %s %04d %s %s",
                        ts->tw_mday, tw_moty[ts->tw_mon], ts->tw_year,
-                       ap, dtwszone (ts));
-       if ((tw = dparsetime (buffer)) != NULL)
+                       ap, dtwszone(ts));
+       if ((tw = dparsetime(buffer)) != NULL)
                return tw;
 
        return NULL;
@@ -899,29 +893,29 @@ tws_parse (char *ap, int isafter)
 
 
 static struct tws *
-tws_special (char *ap)
+tws_special(char *ap)
 {
        int i;
        time_t clock;
        register struct tws *tw;
 
-       time (&clock);
-       if (!mh_strcasecmp (ap, "today"))
-               return dlocaltime (&clock);
-       if (!mh_strcasecmp (ap, "yesterday")) {
+       time(&clock);
+       if (!mh_strcasecmp(ap, "today"))
+               return dlocaltime(&clock);
+       if (!mh_strcasecmp(ap, "yesterday")) {
                clock -= (long) (60 * 60 * 24);
-               return dlocaltime (&clock);
+               return dlocaltime(&clock);
        }
-       if (!mh_strcasecmp (ap, "tomorrow")) {
+       if (!mh_strcasecmp(ap, "tomorrow")) {
                clock += (long) (60 * 60 * 24);
-               return dlocaltime (&clock);
+               return dlocaltime(&clock);
        }
 
        for (i = 0; tw_ldotw[i]; i++)
-               if (!mh_strcasecmp (ap, tw_ldotw[i]))
+               if (!mh_strcasecmp(ap, tw_ldotw[i]))
                        break;
        if (tw_ldotw[i]) {
-               if ((tw = dlocaltime (&clock)) == NULL)
+               if ((tw = dlocaltime(&clock)) == NULL)
                        return NULL;
                if ((i -= tw->tw_wday) > 0)
                        i -= 7;
@@ -930,15 +924,15 @@ tws_special (char *ap)
                if (*ap != '-')
                        return NULL;
                else  /* -ddd days ago */
-                       i = atoi (ap);  /* we should error check this */
+                       i = atoi(ap);  /* we should error check this */
 
        clock += (long) ((60 * 60 * 24) * i);
-       return dlocaltime (&clock);
+       return dlocaltime(&clock);
 }
 
 
 static int
-TWSaction (params)
+TWSaction(params)
 plist
 {
        int state;
@@ -946,50 +940,52 @@ plist
        char buf[BUFSIZ], name[NAMESZ];
        register struct tws *tw;
 
-       fseek (fp, start, SEEK_SET);
+       fseek(fp, start, SEEK_SET);
        for (state = FLD, bp = NULL;;) {
-               switch (state = m_getfld (state, name, buf, sizeof buf, fp)) {
-                       case FLD:
-                       case FLDEOF:
-                       case FLDPLUS:
-                               if (bp != NULL)
-                                       free (bp), bp = NULL;
-                               bp = add (buf, NULL);
-                               while (state == FLDPLUS) {
-                                       state = m_getfld (state, name, buf,
-                                                       sizeof buf, fp);
-                                       bp = add (buf, bp);
-                               }
-                               if (!mh_strcasecmp (name, n->n_datef))
-                                       break;
-                               if (state != FLDEOF)
-                                       continue;
-
-                       case BODY:
-                       case BODYEOF:
-                       case FILEEOF:
-                       case LENERR:
-                       case FMTERR:
-                               if (state == LENERR || state == FMTERR)
-                                       advise (NULL, "format error in message %d", msgnum);
-                               if (bp != NULL)
-                                       free (bp);
-                               return 0;
-
-                       default:
-                               adios (NULL, "internal error -- you lose");
+               switch (state = m_getfld(state, name, buf, sizeof buf, fp)) {
+               case FLD:
+               case FLDEOF:
+               case FLDPLUS:
+                       if (bp != NULL) {
+                               free(bp);
+                               bp = NULL;
+                       }
+                       bp = getcpy(buf);
+                       while (state == FLDPLUS) {
+                               state = m_getfld(state, name, buf,
+                                               sizeof buf, fp);
+                               bp = add(buf, bp);
+                       }
+                       if (!mh_strcasecmp(name, n->n_datef))
+                               break;
+                       if (state != FLDEOF)
+                               continue;
+
+               case BODY:
+               case BODYEOF:
+               case FILEEOF:
+               case LENERR:
+               case FMTERR:
+                       if (state == LENERR || state == FMTERR)
+                               advise(NULL, "format error in message %d", msgnum);
+                       if (bp != NULL)
+                               free(bp);
+                       return 0;
+
+               default:
+                       adios(NULL, "internal error -- you lose");
                }
                break;
        }
 
-       if ((tw = dparsetime (bp)) == NULL)
-               advise (NULL, "unable to parse %s field in message %d, matching...",
+       if ((tw = dparsetime(bp)) == NULL)
+               advise(NULL, "unable to parse %s field in message %d, matching...",
                                n->n_datef, msgnum), state = 1;
        else
-               state = n->n_after ? (twsort (tw, &n->n_tws) > 0)
-                       : (twsort (tw, &n->n_tws) < 0);
+               state = n->n_after ? (twsort(tw, &n->n_tws) > 0)
+                       : (twsort(tw, &n->n_tws) < 0);
 
        if (bp != NULL)
-               free (bp);
+               free(bp);
        return state;
 }