{ "format", 5 },
#define NFRMTSW 7
{ "noformat", 7 },
-#define INPLSW 8
- { "inplace", 0 },
-#define NINPLSW 9
- { "noinplace", 0 },
-#define MIMESW 10
+#define MIMESW 8
{ "mime", 0 },
-#define NMIMESW 11
+#define NMIMESW 9
{ "nomime", 0 },
-#define DGSTSW 12
+#define DGSTSW 10
{ "digest list", 0 },
-#define ISSUESW 13
+#define ISSUESW 11
{ "issue number", 0 },
-#define VOLUMSW 14
+#define VOLUMSW 12
{ "volume number", 0 },
-#define WHATSW 15
+#define WHATSW 13
{ "whatnowproc program", 0 },
-#define NWHATSW 16
+#define NWHATSW 14
{ "nowhatnowproc", 0 },
-#define BITSTUFFSW 17
- { "dashstuffing", 0 }, /* interface to mhl */
-#define NBITSTUFFSW 18
- { "nodashstuffing", 0 },
-#define VERSIONSW 19
+#define VERSIONSW 15
{ "version", 0 },
-#define HELPSW 20
+#define HELPSW 16
{ "help", 0 },
-#define FILESW 21
- { "file file", 4 }, /* interface from msh */
#ifdef MHE
-#define BILDSW 22
+#define BILDSW 17
{ "build", 5 }, /* interface from mhe */
#endif /* MHE */
/*
** static prototypes
*/
-static void mhl_draft(int, char *, int, int, char *, char *, int);
-static void copy_draft(int, char *, char *, int, int, int);
-static void copy_mime_draft(int);
+static void mhl_draft(int, char *, int, int, char *, char *);
+static void copy_draft(int, char *, char *, int, int);
+static void add_forw_hdr(char *);
static int build_form(char *, char *, int, int);
int
main(int argc, char **argv)
{
- int msgp = 0, anot = 0, inplace = 1, mime = 0;
- int issue = 0, volume = 0, dashstuff = 0;
+ int msgp = 0, anot = 0, mime = 0;
+ int issue = 0, volume = 0;
int nedit = 0, nwhat = 0, in;
int out, msgnum;
char *cp, *cwd, *maildir;
char *digest = NULL, *ed = NULL;
- char *file = NULL, *filter = NULL, *folder = NULL;
+ char *filter = NULL, *folder = NULL;
char *form = NULL, buf[BUFSIZ], value[10];
char **argp, **arguments, *msgs[MAXARGS];
nwhat++;
continue;
- case FILESW:
- if (file)
- adios(NULL, "only one file at a time!");
- if (!(cp = *argp++) || *cp == '-')
- adios(NULL, "missing argument to %s",
- argp[-2]);
- file = getcpy(expanddir(cp));
- continue;
case FILTSW:
if (!(cp = *argp++) || *cp == '-')
adios(NULL, "missing argument to %s",
filter = NULL;
continue;
- case INPLSW:
- inplace++;
- continue;
- case NINPLSW:
- inplace = 0;
- continue;
-
case MIMESW:
mime++;
filter = NULL;
adios(NULL, "bad argument %s %s",
argp[-2], cp);
continue;
-
- case BITSTUFFSW:
- dashstuff = 1; /* trinary logic */
- continue;
- case NBITSTUFFSW:
- dashstuff = -1; /* trinary logic */
- continue;
}
}
if (*cp == '+' || *cp == '@') {
cwd = getcpy(pwd());
- if (file && (msgp || folder))
- adios(NULL, "can't mix files and folders/msgs");
-
#ifdef MHE
strncpy(drft, buildsw ? toabsdir("draft")
- : m_draft("new"), sizeof(drft));
+ : m_draft(seq_beyond), sizeof(drft));
#else
- strncpy(drft, m_draft("new"), sizeof(drft));
+ strncpy(drft, m_draft(seq_beyond), sizeof(drft));
#endif /* MHE */
- if (file) {
- /*
- ** Forwarding a file.
- */
- anot = 0; /* don't want to annotate a file */
- } else {
- /*
- ** Forwarding a message.
- */
- if (!msgp)
- msgs[msgp++] = "cur";
- if (!folder)
- folder = getcurfol();
- maildir = toabsdir(folder);
-
- if (chdir(maildir) == NOTOK)
- adios(maildir, "unable to change directory to");
-
- /* read folder and create message structure */
- if (!(mp = folder_read(folder)))
- adios(NULL, "unable to read folder %s", folder);
-
- /* check for empty folder */
- if (mp->nummsg == 0)
- adios(NULL, "no messages in %s", folder);
-
- /* parse all the message ranges/sequences and set SELECTED */
- for (msgnum = 0; msgnum < msgp; msgnum++)
- if (!m_convert(mp, msgs[msgnum]))
- done(1);
- seq_setprev(mp); /* set the previous sequence */
- }
+ /*
+ ** Forwarding a message.
+ */
+ if (!msgp)
+ msgs[msgp++] = seq_cur;
+ if (!folder)
+ folder = getcurfol();
+ maildir = toabsdir(folder);
+
+ if (chdir(maildir) == NOTOK)
+ adios(maildir, "unable to change directory to");
+
+ /* read folder and create message structure */
+ if (!(mp = folder_read(folder)))
+ adios(NULL, "unable to read folder %s", folder);
+
+ /* check for empty folder */
+ if (mp->nummsg == 0)
+ adios(NULL, "no messages in %s", folder);
+
+ /* parse all the message ranges/sequences and set SELECTED */
+ for (msgnum = 0; msgnum < msgp; msgnum++)
+ if (!m_convert(mp, msgs[msgnum]))
+ done(1);
+ seq_setprev(mp); /* set the previous sequence */
if (filter && access(filter, R_OK) == NOTOK)
adios(filter, "unable to read");
- /*
- ** Open form (component) file.
- */
+ /* Open form (component) file. */
if (digest) {
if (issue == 0) {
snprintf(buf, sizeof(buf), IFORMAT, digest);
cpydata(in, out, form, drft);
close(in);
- if (file) {
- /* just copy the file into the draft */
- if ((in = open(file, O_RDONLY)) == NOTOK)
- adios(file, "unable to open");
- cpydata(in, out, file, drft);
- close(in);
+ /*
+ ** If filter file is defined, then format the
+ ** messages into the draft using mhlproc.
+ */
+ if (filter) {
+ mhl_draft(out, digest, volume, issue, drft, filter);
close(out);
+ } else if (mime) {
+ close(out);
+ add_forw_hdr(drft);
} else {
- /*
- ** If filter file is defined, then format the
- ** messages into the draft using mhlproc.
- */
- if (filter)
- mhl_draft(out, digest, volume, issue, drft, filter,
- dashstuff);
- else if (mime)
- copy_mime_draft(out);
- else
- copy_draft(out, digest, drft, volume, issue,
- dashstuff);
+ copy_draft(out, digest, drft, volume, issue);
close(out);
+ }
- if (digest) {
- snprintf(buf, sizeof(buf), IFORMAT, digest);
- snprintf(value, sizeof(value), "%d", issue);
- context_replace(buf, getcpy(value));
- snprintf(buf, sizeof(buf), VFORMAT, digest);
- snprintf(value, sizeof(value), "%d", volume);
- context_replace(buf, getcpy(value));
- }
-
- context_replace(curfolder, folder); /* update current folder */
- seq_setcur(mp, mp->lowsel); /* update current message */
- seq_save(mp); /* synchronize sequences */
- context_save(); /* save the context file */
+ if (digest) {
+ snprintf(buf, sizeof(buf), IFORMAT, digest);
+ snprintf(value, sizeof(value), "%d", issue);
+ context_replace(buf, getcpy(value));
+ snprintf(buf, sizeof(buf), VFORMAT, digest);
+ snprintf(value, sizeof(value), "%d", volume);
+ context_replace(buf, getcpy(value));
}
+ context_replace(curfolder, folder); /* update current folder */
+ seq_setcur(mp, mp->lowsel); /* update current message */
+ seq_save(mp); /* synchronize sequences */
+ context_save(); /* save the context file */
+
if (nwhat)
done(0);
what_now(ed, nedit, NOUSE, drft, NULL, 0, mp,
- anot ? "Forwarded" : NULL, inplace, cwd);
+ anot ? "Forwarded" : NULL, cwd);
done(1);
return 1;
}
** draft calling the mhlproc, and reading its output
** from a pipe.
*/
-
static void
mhl_draft(int out, char *digest, int volume, int issue,
- char *file, char *filter, int dashstuff)
+ char *file, char *filter)
{
pid_t child_id;
int i, msgnum, pd[2];
vec[i++] = buf2;
}
- /*
- ** Are we dashstuffing (quoting) the lines that begin
- ** with `-'. We use the mhl default (don't add any
- ** flag) unless the user has specified a specific flag.
- */
- if (dashstuff > 0)
- vec[i++] = "-dashstuffing";
- else if (dashstuff < 0)
- vec[i++] = "-nodashstuffing";
-
if (mp->numsel >= MAXARGS - i)
adios(NULL, "more than %d messages for %s exec",
MAXARGS - i, vec[0]);
/*
** Copy the messages into the draft. The messages are
-** not filtered through the mhlproc. Do dashstuffing if
-** necessary.
+** not filtered through the mhlproc. Do dashstuffing.
*/
-
static void
-copy_draft(int out, char *digest, char *file, int volume, int issue,
- int dashstuff)
+copy_draft(int out, char *digest, char *file, int volume, int issue)
{
int fd,i, msgcnt, msgnum;
int len, buflen;
/*
** Copy the message. Add RFC934 quoting (dashstuffing)
- ** unless given the -nodashstuffing flag.
*/
- if (dashstuff >= 0)
- cpydgst(fd, out, msgnam, file);
- else
- cpydata(fd, out, msgnam, file);
+ cpydgst(fd, out, msgnam, file);
close(fd);
msgcnt++;
/*
-** Create a mhbuild composition file for forwarding message.
+** Create an attachment header for the to be forward messages.
*/
-
static void
-copy_mime_draft(int out)
+add_forw_hdr(char *draft)
{
int msgnum;
char buffer[BUFSIZ];
- snprintf(buffer, sizeof(buffer), "#forw [forwarded message%s] +%s",
- mp->numsel == 1 ? "" : "s", mp->foldpath);
- write(out, buffer, strlen(buffer));
- for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
- if (is_selected(mp, msgnum)) {
- snprintf(buffer, sizeof(buffer), " %s",
- m_name(msgnum));
- write(out, buffer, strlen(buffer));
+ snprintf(buffer, sizeof(buffer), "+%s", mp->foldpath);
+ for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
+ if (!is_selected(mp, msgnum)) {
+ continue;
}
- write(out, "\n", 1);
+ /* TODO: improve the code */
+ strncat(buffer, " ", sizeof(buffer)-strlen(buffer)-1);
+ strncat(buffer, m_name(msgnum),
+ sizeof(buffer)-strlen(buffer)-1);
+ }
+ annotate(draft, attach_hdr, buffer, 0, -2, 1);
}