Fixed formatting glitch in msh.man.
[mmh] / uip / comp.c
index 6882372..65b213a 100644 (file)
@@ -39,6 +39,18 @@ static struct swit switches[] = {
     { "version", 0 },
 #define        HELPSW                12
     { "help", 0 },
+#define TOSW                  13
+    { "to address", 0 },
+#define CCSW                  14
+    { "cc address", 0 },
+#define FROMSW                15
+    { "from address", 0 },
+#define FCCSW                 16
+    { "fcc mailbox", 0 },
+#define WIDTHSW                      17
+    { "width colums", 0 },
+#define SUBJECTSW             18
+    { "subject text", 0 },
     { NULL, 0 }
 };
 
@@ -67,16 +79,17 @@ static struct swit aqrul[] = {
     { NULL, 0 }
 };
 
-
 int
 main (int argc, char **argv)
 {
     int use = NOUSE, nedit = 0, nwhat = 0;
-    int i, in, isdf = 0, out, dat[5], ncomps, 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;
@@ -106,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 == '-')
@@ -167,6 +180,48 @@ main (int argc, char **argv)
                    dfolder = NULL;
                    isdf = NOTOK;
                    continue;
+
+               case TOSW:
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   to = addlist(to, cp);
+                   continue;
+
+               case CCSW:
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   cc = addlist(cc, cp);
+                   continue;
+
+               case FROMSW:
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   from = addlist(from, cp);
+                   continue;
+
+               case FCCSW:
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   dp = NULL;
+                   if (*cp == '@')
+                       cp = dp = path(cp + 1, TSUBCWF);
+                   fcc = addlist(fcc, cp);
+                   if (dp)
+                       free(dp);
+                   continue;
+
+               case WIDTHSW:
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   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 == '@') {
@@ -232,14 +287,43 @@ main (int argc, char **argv)
        if ((in = open (form = getcpy (m_name (mp->lowsel)), O_RDONLY)) == NOTOK)
            adios (form, "unable to open message");
     } else {
+       struct comp *cptr;
+
        if (! form)
            form = components;
 
         cp = new_fs(form, NULL, NULL);
        format_len = strlen(cp);
-       ncomps = fmt_compile(cp, &fmt);
-       if (ncomps > 0) {
-           adios(NULL, "format components not supported when using comp");
+       fmt_compile(cp, &fmt, 1);
+
+       /*
+        * Set up any components that were fed to us on the command line
+        */
+
+       if (from) {
+           cptr = fmt_findcomp("from");
+           if (cptr)
+               cptr->c_text = from;
+       }
+       if (to) {
+           cptr = fmt_findcomp("to");
+           if (cptr)
+               cptr->c_text = to;
+       }
+       if (cc) {
+           cptr = fmt_findcomp("cc");
+           if (cptr)
+               cptr->c_text = cc;
+       }
+       if (fcc) {
+           cptr = fmt_findcomp("fcc");
+           if (cptr)
+               cptr->c_text = fcc;
+       }
+       if (subject) {
+           cptr = fmt_findcomp("subject");
+           if (cptr)
+               cptr->c_text = subject;
        }
     }
 
@@ -308,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 {
@@ -322,7 +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;
 }