2 ** whatnowproc.c -- exec the "whatnowproc"
4 ** This code is Copyright (c) 2002, by the authors of nmh. See the
5 ** COPYRIGHT file in the root directory of the nmh distribution for
6 ** complete copyright information.
13 ** This routine is used by comp, repl, forw, and dist to exec
14 ** the "whatnowproc". It first sets up all the environment
15 ** variables that the "whatnowproc" will need to check, and
16 ** then execs the command. As an optimization, if the
17 ** "whatnowproc" is the nmh command "whatnow" (typical case),
18 ** it will call this routine directly without exec'ing it.
21 /* from whatnowsbr.c */
22 int WhatNow(int, char **);
26 what_now(char *ed, int nedit, int use, char *file, char *altmsg, int dist,
27 struct msgs *mp, char *text, int inplace, char *cwd)
29 int found, k, msgnum, vecp;
32 char buffer[BUFSIZ], *vec[MAXARGS];
35 vec[vecp++] = mhbasename(whatnowproc);
38 m_putenv("mhdraft", file);
40 m_putenv("mhfolder", mp->foldpath);
44 if (mp == NULL || *altmsg == '/' || cwd == NULL)
45 m_putenv("mhaltmsg", altmsg);
47 snprintf(buffer, sizeof(buffer), "%s/%s",
48 mp->foldpath, altmsg);
49 m_putenv("mhaltmsg", buffer);
54 if ((bp = getenv("mhaltmsg")))/* XXX */
55 m_putenv("editalt", bp);
56 snprintf(buffer, sizeof(buffer), "%d", dist);
57 m_putenv("mhdist", buffer);
61 m_putenv("mheditor", ed ? ed : (ed = context_find("editor")) ?
64 snprintf(buffer, sizeof(buffer), "%d", use);
65 m_putenv("mhuse", buffer);
67 unputenv("mhmessages");
68 unputenv("mhannotate");
69 unputenv("mhinplace");
71 if (text && mp && !is_readonly(mp)) {
74 buflen = sizeof(buffer);
75 for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++) {
76 if (is_selected(mp, msgnum)) {
77 snprintf(bp, buflen, "%s%s", found ? " " : "",
82 for (k = msgnum + 1; k <= mp->hghmsg && is_selected(mp, k); k++)
85 snprintf(bp, buflen, "-%s", m_name(k));
95 m_putenv("mhmessages", buffer);
96 m_putenv("mhannotate", text);
97 snprintf(buffer, sizeof(buffer), "%d", inplace);
98 m_putenv("mhinplace", buffer);
102 context_save(); /* save the context file */
109 ** If the "whatnowproc" is the nmh command "whatnow",
110 ** we run it internally, rather than exec'ing it.
112 if (strcmp(vec[0], "whatnow") == 0) {
117 execvp(whatnowproc, vec);
118 fprintf(stderr, "unable to exec ");