1: /* m_whatnow.c - exec whatnowproc */ 2: 3: #include "../h/mh.h" 4: #include <stdio.h> 5: 6: m_whatnow (ed, nedit, use, file, altmsg, dist, mp, text, inplace, cwd) 7: struct msgs *mp; 8: char *ed, 9: *file, 10: *altmsg, 11: *text, 12: *cwd; 13: int nedit, 14: use, 15: dist, 16: inplace; 17: { 18: int found, 19: k, 20: msgnum, 21: vecp; 22: register char *bp; 23: char buffer[BUFSIZ], 24: *vec[MAXARGS]; 25: 26: vecp = 0; 27: vec[vecp++] = r1bindex (whatnowproc, '/'); 28: vec[vecp] = NULL; 29: 30: (void) putenv ("mhdraft", file); 31: if (mp) 32: (void) putenv ("mhfolder", mp -> foldpath); 33: else 34: (void) unputenv ("mhfolder"); 35: if (altmsg) 36: if (mp == NULL || *altmsg == '/' || cwd == NULL) 37: (void) putenv ("mhaltmsg", altmsg); 38: else { 39: (void) sprintf (buffer, "%s/%s", mp -> foldpath, altmsg); 40: (void) putenv ("mhaltmsg", buffer); 41: } 42: else 43: (void) unputenv ("mhaltmsg"); 44: if (bp = getenv ("mhaltmsg"))/* XXX */ 45: (void) putenv ("editalt", bp); 46: (void) sprintf (buffer, "%d", dist); 47: (void) putenv ("mhdist", buffer); 48: if (nedit) 49: (void) unputenv ("mheditor"); 50: else 51: (void) putenv ("mheditor", ed ? ed : (ed = m_find ("editor")) ? ed : sysed); 52: (void) sprintf (buffer, "%d", use); 53: (void) putenv ("mhuse", buffer); 54: 55: (void) unputenv ("mhmessages"); 56: (void) unputenv ("mhannotate"); 57: (void) unputenv ("mhinplace"); 58: if (text && mp && !(mp -> msgflags & READONLY)) { 59: found = 0; 60: bp = buffer; 61: for (msgnum = mp -> lowmsg; msgnum <= mp -> hghmsg; msgnum++) 62: if (mp -> msgstats[msgnum] & SELECTED) { 63: (void) sprintf (bp, "%s%s", found ? " " : "", m_name (msgnum)); 64: bp += strlen (bp); 65: for (k = msgnum + 1; 66: k <= mp -> hghmsg && mp -> msgstats[k] & SELECTED; 67: k++) 68: continue; 69: if (--k > msgnum) { 70: (void) sprintf (bp, "-%s", m_name (k)); 71: bp += strlen (bp); 72: } 73: msgnum = k + 1; 74: found++; 75: } 76: if (found) { 77: (void) putenv ("mhmessages", buffer); 78: (void) putenv ("mhannotate", text); 79: (void) sprintf (buffer, "%d", inplace); 80: (void) putenv ("mhinplace", buffer); 81: } 82: } 83: 84: m_update (); 85: (void) fflush (stdout); 86: 87: if (cwd) 88: (void) chdir (cwd); 89: 90: if (strcmp (vec[0], "whatnow") == 0) { 91: WhatNow (vecp, vec); 92: done (0); 93: } 94: 95: execvp (whatnowproc, vec); 96: fprintf (stderr, "unable to exec "); 97: perror (whatnowproc); 98: 99: return 0; 100: }