Fixed formatting glitch in msh.man.
[mmh] / uip / comp.c
index 812f596..65b213a 100644 (file)
@@ -49,6 +49,8 @@ static struct swit switches[] = {
     { "fcc mailbox", 0 },
 #define WIDTHSW                      17
     { "width colums", 0 },
+#define SUBJECTSW             18
+    { "subject text", 0 },
     { NULL, 0 }
 };
 
@@ -77,22 +79,17 @@ static struct swit aqrul[] = {
     { NULL, 0 }
 };
 
-/*
- * Add an item to a comma seperated list
- */
-
-static char *addlist(char *, char *); 
-
 int
 main (int argc, char **argv)
 {
     int use = NOUSE, nedit = 0, nwhat = 0;
-    int i, in = NOTOK, isdf = 0, out, dat[5], format_len;
+    int i, in = NOTOK, isdf = 0, out, dat[5], format_len = 0;
     int outputlinelen = OUTPUTLINELEN;
     char *cp, *cwd, *maildir, *dfolder = NULL;
     char *ed = NULL, *file = NULL, *form = NULL;
     char *folder = NULL, *msg = NULL, buf[BUFSIZ];
     char *to = NULL, *from = NULL, *cc = NULL, *fcc = NULL, *dp;
+    char *subject = NULL;
     char drft[BUFSIZ], **argp, **arguments;
     struct msgs *mp = NULL;
     struct format *fmt;
@@ -122,10 +119,10 @@ main (int argc, char **argv)
                    snprintf (buf, sizeof(buf), "%s [+folder] [msg] [switches]",
                        invo_name);
                    print_help (buf, switches, 1);
-                   done (1);
+                   done (0);
                case VERSIONSW:
                    print_version(invo_name);
-                   done (1);
+                   done (0);
 
                case EDITRSW: 
                    if (!(ed = *argp++) || *ed == '-')
@@ -219,6 +216,12 @@ main (int argc, char **argv)
                    if ((outputlinelen = atoi(cp)) < 10)
                        adios (NULL, "impossible width %d", outputlinelen);
                    continue;
+
+               case SUBJECTSW:
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   subject = cp;
+                   continue;
            }
        }
        if (*cp == '+' || *cp == '@') {
@@ -291,32 +294,37 @@ main (int argc, char **argv)
 
         cp = new_fs(form, NULL, NULL);
        format_len = strlen(cp);
-       fmt_compile(cp, &fmt);
+       fmt_compile(cp, &fmt, 1);
 
        /*
         * Set up any components that were fed to us on the command line
         */
 
        if (from) {
-           FINDCOMP(cptr, "from");
+           cptr = fmt_findcomp("from");
            if (cptr)
                cptr->c_text = from;
        }
        if (to) {
-           FINDCOMP(cptr, "to");
+           cptr = fmt_findcomp("to");
            if (cptr)
                cptr->c_text = to;
        }
        if (cc) {
-           FINDCOMP(cptr, "cc");
+           cptr = fmt_findcomp("cc");
            if (cptr)
                cptr->c_text = cc;
        }
        if (fcc) {
-           FINDCOMP(cptr, "fcc");
+           cptr = fmt_findcomp("fcc");
            if (cptr)
                cptr->c_text = fcc;
        }
+       if (subject) {
+           cptr = fmt_findcomp("subject");
+           if (cptr)
+               cptr->c_text = subject;
+       }
     }
 
 try_it_again:
@@ -384,7 +392,7 @@ try_it_again:
        dat[2] = 0;
        dat[3] = outputlinelen;
        dat[4] = 0;
-       fmt_scan(fmt, scanl, i, dat);
+       fmt_scan(fmt, scanl, i + 1, i, dat);
        write(out, scanl, strlen(scanl));
        free(scanl);
     } else {
@@ -398,20 +406,7 @@ edit_it:
 
     if (nwhat)
        done (0);
-    what_now (ed, nedit, use, drft, NULL, 0, NULLMP, NULL, 0, cwd);
+    what_now (ed, nedit, use, drft, NULL, 0, NULLMP, NULL, 0, cwd, 0);
     done (1);
     return 1;
 }
-
-/*
- * Append an item to a comma separated list
- */
-
-static char *
-addlist (char *list, char *item)
-{
-    if (list)
-       list = add (", ", list);
-
-    return add (item, list);
-}