X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fcomp.c;h=6882372e6e2e316a49a6e047225068d51860ae7a;hb=6ce3e60f25c94b31e5d090ea03dee09d70dc1f7b;hp=7e741383413d0361f156b12e051e82379261d240;hpb=017a82124bf2ea39ced5aa4c8f969c18b3c2fb90;p=mmh diff --git a/uip/comp.c b/uip/comp.c index 7e74138..6882372 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[] = { @@ -68,12 +72,14 @@ int main (int argc, char **argv) { int use = NOUSE, nedit = 0, nwhat = 0; - int i, in, isdf = 0, out; + int i, in, isdf = 0, out, dat[5], ncomps, format_len; + int outputlinelen = OUTPUTLINELEN; char *cp, *cwd, *maildir, *dfolder = NULL; char *ed = NULL, *file = NULL, *form = NULL; char *folder = NULL, *msg = NULL, buf[BUFSIZ]; char drft[BUFSIZ], **argp, **arguments; struct msgs *mp = NULL; + struct format *fmt; struct stat st; #ifdef LOCALE @@ -167,7 +173,7 @@ main (int argc, char **argv) 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 +198,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 +232,14 @@ main (int argc, char **argv) if ((in = open (form = getcpy (m_name (mp->lowsel)), O_RDONLY)) == NOTOK) adios (form, "unable to open message"); } else { - /* - * Open a component or forms file - */ - 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"); + 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"); } } @@ -292,8 +298,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, dat); + write(out, scanl, strlen(scanl)); + free(scanl); + } else { + cpydata (in, out, form, drft); + close (in); + } close (out); edit_it: @@ -302,5 +323,6 @@ edit_it: if (nwhat) done (0); what_now (ed, nedit, use, drft, NULL, 0, NULLMP, NULL, 0, cwd); - return done (1); + done (1); + return 1; }