/*
* 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 <h/mh.h>
+#include <h/utils.h>
+#include <h/fmt_scan.h>
#include <fcntl.h>
static struct swit switches[] = {
#define VERSIONSW 11
{ "version", 0 },
#define HELPSW 12
- { "help", 4 },
+ { "help", 0 },
{ NULL, 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;
+ struct format *fmt;
struct stat st;
#ifdef LOCALE
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!");
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 ((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");
}
}
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:
done (0);
what_now (ed, nedit, use, drft, NULL, 0, NULLMP, NULL, 0, cwd);
done (1);
+ return 1;
}