Beginning support for mh-format support in comp(1). Includes changes to
authorKen Hornstein <kenh@pobox.com>
Fri, 17 Feb 2012 20:56:08 +0000 (15:56 -0500)
committerKen Hornstein <kenh@pobox.com>
Fri, 17 Feb 2012 20:56:08 +0000 (15:56 -0500)
default component file.

Makefile.am
etc/components
man/comp.man
uip/comp.c

index 6417e11..dc63866 100644 (file)
@@ -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
index 7f255ea..95be90c 100644 (file)
@@ -1,3 +1,4 @@
+From: %(localmbox)
 To:
 cc:
 Fcc: +outbox
index bfb78b3..643c056 100644 (file)
@@ -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
index 5ebce6e..6882372 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <h/mh.h>
 #include <h/utils.h>
+#include <h/fmt_scan.h>
 #include <fcntl.h>
 
 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: