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_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
 
 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
 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
 .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
 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/mh.h>
 #include <h/utils.h>
+#include <h/fmt_scan.h>
 #include <fcntl.h>
 
 static struct swit switches[] = {
 #include <fcntl.h>
 
 static struct swit switches[] = {
@@ -71,12 +72,14 @@ int
 main (int argc, char **argv)
 {
     int use = NOUSE, nedit = 0, nwhat = 0;
 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;
     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
     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");
 
     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.
     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");
 
        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));
 
 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");
 
     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:
     close (out);
 
 edit_it: