X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fcomp.c;h=65b213aef9b84f7b36bba619d313bbb435f5b2ca;hb=e69044f7624abe5cb2cb796d528c0cc5f29515f7;hp=7e741383413d0361f156b12e051e82379261d240;hpb=017a82124bf2ea39ced5aa4c8f969c18b3c2fb90;p=mmh diff --git a/uip/comp.c b/uip/comp.c index 7e74138..65b213a 100644 --- a/uip/comp.c +++ b/uip/comp.c @@ -2,10 +2,14 @@ /* * comp.c -- compose a message * - * $Id$ + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #include +#include +#include #include static struct swit switches[] = { @@ -35,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 } }; @@ -63,17 +79,20 @@ 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; + 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; struct stat st; #ifdef LOCALE @@ -100,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 == '-') @@ -161,13 +180,55 @@ 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 == '@') { if (folder) adios (NULL, "only one folder at a time!"); else - folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF); + folder = pluspath (cp); } else { if (msg) adios (NULL, "only one message at a time!"); @@ -192,6 +253,8 @@ main (int argc, char **argv) if (form && (folder || msg)) adios (NULL, "can't mix forms and folders/msgs"); + cp = NULL; + if (folder || msg) { /* * Use a message as the "form" for the new message. @@ -224,16 +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); + fmt_compile(cp, &fmt, 1); + /* - * Open a component or forms file + * Set up any components that were fed to us on the command line */ - if (form) { - if ((in = open (etcpath (form), O_RDONLY)) == NOTOK) - adios (form, "unable to open form file"); - } else { - if ((in = open (etcpath (components), O_RDONLY)) == NOTOK) - adios (components, "unable to open default components file"); - form = components; + + 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; } } @@ -292,8 +382,23 @@ try_it_again: if ((out = creat (drft, m_gmprot ())) == NOTOK) adios (drft, "unable to create"); - cpydata (in, out, form, drft); - close (in); + if (cp) { + char *scanl; + + i = format_len + 1024; + scanl = mh_xmalloc((size_t) i + 2); + dat[0] = 0; + dat[1] = 0; + dat[2] = 0; + dat[3] = outputlinelen; + dat[4] = 0; + fmt_scan(fmt, scanl, i + 1, i, dat); + write(out, scanl, strlen(scanl)); + free(scanl); + } else { + cpydata (in, out, form, drft); + close (in); + } close (out); edit_it: @@ -301,6 +406,7 @@ edit_it: if (nwhat) done (0); - what_now (ed, nedit, use, drft, NULL, 0, NULLMP, NULL, 0, cwd); - return done (1); + what_now (ed, nedit, use, drft, NULL, 0, NULLMP, NULL, 0, cwd, 0); + done (1); + return 1; }