From 4877596410e850f2295f1015738bd8ca6e86ee0f Mon Sep 17 00:00:00 2001 From: Ken Hornstein Date: Fri, 17 Feb 2012 15:56:08 -0500 Subject: [PATCH] Beginning support for mh-format support in comp(1). Includes changes to default component file. --- Makefile.am | 1 + etc/components | 1 + man/comp.man | 11 +++++++++++ uip/comp.c | 39 ++++++++++++++++++++++++++++++++++----- 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6417e11..dc63866 100644 --- a/Makefile.am +++ b/Makefile.am @@ -209,6 +209,7 @@ uip_burst_SOURCES = uip/burst.c uip_comp_SOURCES = uip/comp.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c +uip_comp_LDADD = $(LDADD) $(ICONVLIB) uip_dist_SOURCES = uip/dist.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c diff --git a/etc/components b/etc/components index 7f255ea..95be90c 100644 --- a/etc/components +++ b/etc/components @@ -1,3 +1,4 @@ +From: %(localmbox) To: cc: Fcc: +outbox diff --git a/man/comp.man b/man/comp.man index bfb78b3..643c056 100644 --- a/man/comp.man +++ b/man/comp.man @@ -96,6 +96,17 @@ The .I file switch says to use the named file as the message draft. .PP +Forms that are selected via the +.B \-form +switch are processed via the mh template system; see +.BR mh\-format (5) +for details. Drafts constructed from another mssage or with the +.B \-use +or +.B \-file +switchs will NOT be processed with +.BR mh\-format (5). +.PP If the draft already exists, .B comp will ask you as to the disposition diff --git a/uip/comp.c b/uip/comp.c index 5ebce6e..6882372 100644 --- a/uip/comp.c +++ b/uip/comp.c @@ -9,6 +9,7 @@ #include #include +#include #include static struct swit switches[] = { @@ -71,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 @@ -195,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. @@ -226,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)); @@ -284,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: -- 1.7.10.4