X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fcomp.c;h=6882372e6e2e316a49a6e047225068d51860ae7a;hb=4877596410e850f2295f1015738bd8ca6e86ee0f;hp=67cf83bb502199f9e23733d462d20b489cddf188;hpb=0569d6d1631dc90d4f2f2df6bdd0599c7ecc7814;p=mmh diff --git a/uip/comp.c b/uip/comp.c index 67cf83b..6882372 100644 --- a/uip/comp.c +++ b/uip/comp.c @@ -2,8 +2,6 @@ /* * 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. @@ -11,6 +9,7 @@ #include #include +#include #include static struct swit switches[] = { @@ -73,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 @@ -197,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. @@ -228,8 +231,17 @@ main (int argc, char **argv) if ((in = open (form = getcpy (m_name (mp->lowsel)), O_RDONLY)) == NOTOK) adios (form, "unable to open message"); - } else - in = open_form(&form, components); + } else { + 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"); + } + } try_it_again: strncpy (drft, m_draft (dfolder, file, use, &isdf), sizeof(drft)); @@ -286,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: @@ -296,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; }