source: trunk/third/nmh/uip/whatnowproc.c @ 12455

Revision 12455, 2.8 KB checked in by danw, 26 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r12454, which included commits to RCS files with non-trunk default branches.
Line 
1
2/*
3 * whatnowproc.c -- exec the "whatnowproc"
4 *
5 * $Id: whatnowproc.c,v 1.1.1.1 1999-02-07 18:14:17 danw Exp $
6 */
7
8#include <h/mh.h>
9
10
11/*
12 * This routine is used by comp, repl, forw, and dist to exec
13 * the "whatnowproc".  It first sets up all the environment
14 * variables that the "whatnowproc" will need to check, and
15 * then execs the command.  As an optimization, if the
16 * "whatnowproc" is the nmh command "whatnow" (typical case),
17 * it will call this routine directly without exec'ing it.
18 */
19
20int
21what_now (char *ed, int nedit, int use, char *file, char *altmsg, int dist,
22          struct msgs *mp, char *text, int inplace, char *cwd)
23{
24    int found, k, msgnum, vecp;
25    int len, buflen;
26    register char *bp;
27    char buffer[BUFSIZ], *vec[MAXARGS];
28
29    vecp = 0;
30    vec[vecp++] = r1bindex (whatnowproc, '/');
31    vec[vecp] = NULL;
32
33    m_putenv ("mhdraft", file);
34    if (mp)
35        m_putenv ("mhfolder", mp->foldpath);
36    else
37        unputenv ("mhfolder");
38    if (altmsg) {
39        if (mp == NULL || *altmsg == '/' || cwd == NULL)
40            m_putenv ("mhaltmsg", altmsg);
41        else {
42            snprintf (buffer, sizeof(buffer), "%s/%s", mp->foldpath, altmsg);
43            m_putenv ("mhaltmsg", buffer);
44        }
45    } else {
46        unputenv ("mhaltmsg");
47    }
48    if ((bp = getenv ("mhaltmsg")))/* XXX */
49        m_putenv ("editalt", bp);
50    snprintf (buffer, sizeof(buffer), "%d", dist);
51    m_putenv ("mhdist", buffer);
52    if (nedit) {
53        unputenv ("mheditor");
54    } else {
55        m_putenv ("mheditor", ed ? ed : (ed = context_find ("editor"))
56            ? ed : defaulteditor);
57    }
58    snprintf (buffer, sizeof(buffer), "%d", use);
59    m_putenv ("mhuse", buffer);
60
61    unputenv ("mhmessages");
62    unputenv ("mhannotate");
63    unputenv ("mhinplace");
64
65    if (text && mp && !is_readonly(mp)) {
66        found = 0;
67        bp = buffer;
68        buflen = sizeof(buffer);
69        for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++) {
70            if (is_selected(mp, msgnum)) {
71                snprintf (bp, buflen, "%s%s", found ? " " : "", m_name (msgnum));
72                len = strlen (bp);
73                bp += len;
74                buflen -= len;
75                for (k = msgnum + 1; k <= mp->hghmsg && is_selected(mp, k); k++)
76                    continue;
77                if (--k > msgnum) {
78                    snprintf (bp, buflen, "-%s", m_name (k));
79                    len = strlen (bp);
80                    bp += len;
81                    buflen -= len;
82                }
83                msgnum = k + 1;
84                found++;
85            }
86        }
87        if (found) {
88            m_putenv ("mhmessages", buffer);
89            m_putenv ("mhannotate", text);
90            snprintf (buffer, sizeof(buffer), "%d", inplace);
91            m_putenv ("mhinplace", buffer);
92        }
93    }
94
95    context_save ();    /* save the context file */
96    fflush (stdout);
97
98    if (cwd)
99        chdir (cwd);
100
101    /*
102     * If the "whatnowproc" is the nmh command "whatnow",
103     * we run it internally, rather than exec'ing it.
104     */
105    if (strcmp (vec[0], "whatnow") == 0) {
106        WhatNow (vecp, vec);
107        done (0);
108    }
109
110    execvp (whatnowproc, vec);
111    fprintf (stderr, "unable to exec ");
112    perror (whatnowproc);
113
114    return 0;
115}
Note: See TracBrowser for help on using the repository browser.