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++] = r1bindex (whatnowproc, '/');
38 m_putenv ("mhdraft", file);
40 m_putenv ("mhfolder", mp->foldpath);
42 unputenv ("mhfolder");
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);
52 unputenv ("mhaltmsg");
54 if ((bp = getenv ("mhaltmsg")))/* XXX */
55 m_putenv ("editalt", bp);
56 snprintf (buffer, sizeof(buffer), "%d", dist);
57 m_putenv ("mhdist", buffer);
59 unputenv ("mheditor");
61 m_putenv ("mheditor", ed ? ed : (ed = context_find ("editor"))
62 ? ed : defaulteditor);
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",
83 for (k = msgnum + 1; k <= mp->hghmsg && is_selected(mp, k); k++)
86 snprintf (bp, buflen, "-%s",
97 m_putenv ("mhmessages", buffer);
98 m_putenv ("mhannotate", text);
99 snprintf (buffer, sizeof(buffer), "%d", inplace);
100 m_putenv ("mhinplace", buffer);
104 context_save (); /* save the context file */
111 ** If the "whatnowproc" is the nmh command "whatnow",
112 ** we run it internally, rather than exec'ing it.
114 if (strcmp (vec[0], "whatnow") == 0) {
119 execvp (whatnowproc, vec);
120 fprintf (stderr, "unable to exec ");
121 perror (whatnowproc);