head 1.24; access; symbols; locks; strict; comment @ * @; 1.24 date 95.12.06.21.04.47; author jromine; state Exp; branches; next 1.23; 1.23 date 95.12.06.19.20.22; author jromine; state Exp; branches; next 1.22; 1.22 date 94.04.21.19.23.38; author jromine; state Exp; branches; next 1.21; 1.21 date 92.12.15.00.20.22; author jromine; state Exp; branches; next 1.20; 1.20 date 92.12.11.22.16.54; author jromine; state Exp; branches; next 1.19; 1.19 date 92.12.02.18.51.07; author jromine; state Exp; branches; next 1.18; 1.18 date 92.11.04.02.28.36; author jromine; state Exp; branches; next 1.17; 1.17 date 92.10.16.21.37.53; author jromine; state Exp; branches; next 1.16; 1.16 date 92.10.16.16.52.13; author jromine; state Exp; branches; next 1.15; 1.15 date 92.02.10.17.33.44; author jromine; state Exp; branches; next 1.14; 1.14 date 92.01.31.22.29.48; author jromine; state Exp; branches; next 1.13; 1.13 date 92.01.31.16.35.44; author jromine; state Exp; branches; next 1.12; 1.12 date 92.01.30.22.39.58; author jromine; state Exp; branches; next 1.11; 1.11 date 92.01.29.16.55.19; author jromine; state Exp; branches; next 1.10; 1.10 date 91.01.23.15.43.31; author mh; state Exp; branches; next 1.9; 1.9 date 91.01.23.14.44.00; author mh; state Exp; branches; next 1.8; 1.8 date 90.12.27.16.07.11; author mh; state Exp; branches; next 1.7; 1.7 date 90.12.18.14.01.05; author mh; state Exp; branches; next 1.6; 1.6 date 90.04.05.14.59.26; author sources; state Exp; branches; next 1.5; 1.5 date 90.03.22.23.17.17; author sources; state Exp; branches; next 1.4; 1.4 date 90.02.06.13.38.03; author sources; state Exp; branches; next 1.3; 1.3 date 90.02.05.15.31.31; author sources; state Exp; branches; next 1.2; 1.2 date 90.01.29.16.28.13; author sources; state Exp; branches; next 1.1; 1.1 date 90.01.29.16.27.52; author sources; state Exp; branches; next ; desc @@ 1.24 log @add hidden -queued (for post?) @ text @/* whatnowsbr.c - the WhatNow shell */ #ifndef lint static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.23 1995/12/06 19:20:22 jromine Exp jromine $"; #endif /* lint */ #include "../h/mh.h" #include #include #include #include #ifndef MIME #define MIMEminc(a) (a) #else #define MIMEminc(a) 0 #endif static int editfile(), copyf(), sendfile(), sendit(), whomfile(); #ifdef MIME static int mhnfile(); #endif /* */ static struct swit whatnowswitches[] = { #define DFOLDSW 0 "draftfolder +folder", 0, #define DMSGSW 1 "draftmessage msg", 0, #define NDFLDSW 2 "nodraftfolder", 0, #define EDITRSW 3 "editor editor", 0, #define NEDITSW 4 "noedit", 0, #define PRMPTSW 5 "prompt string", 4, #define HELPSW 6 "help", 4, NULL, 0 }; /* */ static struct swit aleqs[] = { #define DISPSW 0 "display []", 0, #define EDITSW 1 "edit [ ]", 0, #define LISTSW 2 "list []", 0, #define PUSHSW 3 "push []", 0, #define QUITSW 4 "quit [-delete]", 0, #define REFILEOPT 5 "refile [] +folder", 0, #define SENDSW 6 "send []", 0, #define WHOMSW 7 "whom []", 0, NULL, 0 }; /* */ static char *myprompt = "\nWhat now? "; /* */ /* ARGSUSED */ int WhatNow (argc, argv) int argc; char **argv; { int isdf = 0, nedit = 0, use = 0; char *cp, *dfolder = NULL, *dmsg = NULL, *ed = NULL, *drft = NULL, *msgnam = NULL, buf[100], prompt[BUFSIZ], **ap, **argp, *arguments[MAXARGS]; struct stat st; invo_name = r1bindex (argv[0], '/'); if ((cp = m_find (invo_name)) != NULL) { ap = brkstring (cp = getcpy (cp), " ", "\n"); ap = copyip (ap, arguments); } else ap = arguments; (void) copyip (argv + 1, ap); argp = arguments; /* */ while (cp = *argp++) { if (*cp == '-') switch (smatch (++cp, whatnowswitches)) { case AMBIGSW: ambigsw (cp, whatnowswitches); done (1); case UNKWNSW: adios (NULLCP, "-%s unknown", cp); case HELPSW: (void) sprintf (buf, "%s [switches] [file]", invo_name); help (buf, whatnowswitches); done (1); case DFOLDSW: if (dfolder) adios (NULLCP, "only one draft folder at a time!"); if (!(cp = *argp++) || *cp == '-') adios (NULLCP, "missing argument to %s", argp[-2]); dfolder = path (*cp == '+' || *cp == '@@' ? cp + 1 : cp, *cp != '@@' ? TFOLDER : TSUBCWF); continue; case DMSGSW: if (dmsg) adios (NULLCP, "only one draft message at a time!"); if (!(dmsg = *argp++) || *dmsg == '-') adios (NULLCP, "missing argument to %s", argp[-2]); continue; case NDFLDSW: dfolder = NULL; isdf = NOTOK; continue; case EDITRSW: if (!(ed = *argp++) || *ed == '-') adios (NULLCP, "missing argument to %s", argp[-2]); nedit = 0; continue; case NEDITSW: nedit++; continue; case PRMPTSW: if (!(myprompt = *argp++) || *myprompt == '-') adios (NULLCP, "missing argument to %s", argp[-2]); continue; } if (drft) adios (NULLCP, "only one draft at a time!"); else drft = cp; } /* */ if (drft == NULL && (drft = getenv ("mhdraft")) == NULL || *drft == 0) drft = getcpy (m_draft (dfolder, dmsg, 1, &isdf)); msgnam = (cp = getenv ("mhaltmsg")) && *cp ? getcpy (cp) : NULLCP; if (ed == NULL && ((ed = getenv ("mheditor")) == NULL || *ed == 0)) ed = NULL, nedit++; if ((cp = getenv ("mhuse")) && *cp) use = atoi (cp); if (!nedit && editfile (&ed, NULLVP, drft, use, NULLMP, msgnam, NULLCP) < 0) done (1); /* */ (void) sprintf (prompt, myprompt, invo_name); for (;;) { if (!(argp = getans (prompt, aleqs))) { (void) unlink (LINK); done (1); } switch (smatch (*argp, aleqs)) { case DISPSW: if (msgnam) (void) showfile (++argp, msgnam); else advise (NULLCP, "no alternate message to display"); break; case EDITSW: if (*++argp) ed = *argp++; if (editfile (&ed, argp, drft, NOUSE, NULLMP, msgnam, NULLCP) == NOTOK) done (1); break; case LISTSW: (void) showfile (++argp, drft); break; case WHOMSW: (void) whomfile (++argp, drft); break; case QUITSW: if (*++argp && (*argp[0] == 'd' || ((*argp)[0] == '-' && (*argp)[1] == 'd'))) { if (unlink (drft) == NOTOK) adios (drft, "unable to unlink"); } else if (stat (drft, &st) != NOTOK) advise (NULLCP, "draft left on %s", drft); done (1); case PUSHSW: if (sendfile (++argp, drft, 1)) done (1); break; case SENDSW: (void) sendfile (++argp, drft, 0); break; case REFILEOPT: if (refile (++argp, drft) == 0) done (0); break; default: advise (NULLCP, "say what?"); break; } } /*NOTREACHED*/ } /* EDIT */ static int reedit = 0; static char *edsave = NULL; /* ARGSUSED */ static int editfile (ed, arg, file, use, mp, altmsg, cwd) register struct msgs *mp; register char **ed, **arg, *file, *altmsg, *cwd; register int use; { int pid, status; register int vecp; register char *cp; char altpath[BUFSIZ], linkpath[BUFSIZ], *vec[MAXARGS]; struct stat st; #ifdef BSD42 #ifdef notdef int oumask; /* PJS: for setting permissions on symlinks. */ #endif int slinked; #endif /* BSD42 */ if (!reedit) { /* set initial editor */ if (*ed == NULL && (*ed = m_find ("editor")) == NULL) *ed = sysed; } else if (!*ed) { /* no explicit editor */ *ed = edsave; if ((cp = r1bindex (*ed, '/')) == NULL) cp = *ed; cp = concat (cp, "-next", NULLCP); if ((cp = m_find (cp)) != NULL) *ed = cp; } if (altmsg) { if (mp == NULL || *altmsg == '/' || cwd == NULL) (void) strcpy (altpath, altmsg); else (void) sprintf (altpath, "%s/%s", mp -> foldpath, altmsg); if (cwd == NULL) (void) strcpy (linkpath, LINK); else (void) sprintf (linkpath, "%s/%s", cwd, LINK); } if (altmsg) { (void) unlink (linkpath); #ifdef BSD42 if (link (altpath, linkpath) == NOTOK) { #ifdef notdef /* I don't think permission on symlinks matters /JLR */ oumask = umask(0044); /* PJS: else symlinks are world 'r' */ #endif (void) symlink (altpath, linkpath); #ifdef notdef umask(oumask); /* PJS: else symlinks are world 'r' */ #endif slinked = 1; } else slinked = 0; #else /* not BSD42 */ (void) link (altpath, linkpath); #endif /* not BSD42 */ } m_update (); (void) fflush (stdout); switch (pid = vfork ()) { case NOTOK: advise ("fork", "unable to"); status = NOTOK; break; case OK: if (cwd) (void) chdir (cwd); if (altmsg) { if (mp) (void) m_putenv ("mhfolder", mp -> foldpath); (void) m_putenv ("editalt", altpath); } vecp = 0; vec[vecp++] = r1bindex (*ed, '/'); if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp++] = file; vec[vecp] = NULL; execvp (*ed, vec); fprintf (stderr, "unable to exec "); perror (*ed); _exit (-1); default: if (status = pidwait (pid, NOTOK)) { #ifdef ATTVIBUG if ((cp = r1bindex (*ed, '/')) && strcmp (cp, "vi") == 0 && (status & 0x00ff) == 0) status = 0; else { #endif if (((status & 0xff00) != 0xff00) && (!reedit || (status & 0x00ff))) if (!use && (status & 0xff00) && (rename (file, cp = m_backup (file)) != NOTOK)) { advise (NULLCP, "problems with edit--draft left in %s", cp); } else advise (NULLCP, "problems with edit--%s preserved", file); status = -2; /* maybe "reedit ? -2 : -1"? */ break; #ifdef ATTVIBUG } #endif } reedit++; #ifdef BSD42 if (altmsg && mp && (!mp -> msgflags & READONLY) && (slinked ? lstat (linkpath, &st) != NOTOK && (st.st_mode & S_IFMT) == S_IFREG && copyf (linkpath, altpath) == NOTOK : stat (linkpath, &st) != NOTOK && st.st_nlink == 1 && (unlink (altpath) == NOTOK || link (linkpath, altpath) == NOTOK))) advise (linkpath, "unable to update %s from", altmsg); #else /* not BSD42 */ if (altmsg && mp && (!mp -> msgflags & READONLY) && stat (linkpath, &st) != NOTOK && st.st_nlink == 1 && (unlink (altpath) == NOTOK || link (linkpath, altpath) == NOTOK)) advise (linkpath, "unable to update %s from", altmsg); #endif /* not BSD42 */ } edsave = getcpy (*ed); *ed = NULL; if (altmsg) (void) unlink (linkpath); return status; } /* */ #ifdef BSD42 static int copyf (ifile, ofile) register char *ifile, *ofile; { register int i; int in, out; char buffer[BUFSIZ]; if ((in = open (ifile, 0)) == NOTOK) return NOTOK; if ((out = open (ofile, 1)) == NOTOK || ftruncate (out, 0) == NOTOK) { if (out != NOTOK) { admonish (ofile, "unable to truncate"); (void) close (out); } (void) close (in); return NOTOK; } while ((i = read (in, buffer, sizeof buffer)) > OK) if (write (out, buffer, i) != i) { advise (ofile, "may have damaged"); i = NOTOK; break; } (void) close (in); (void) close (out); return i; } #endif /* BSD42 */ /* SEND */ static sendfile (arg, file, pushsw) register char **arg, *file; int pushsw; { register int child_id, i, vecp; char *cp, *sp, *vec[MAXARGS]; #ifdef MIME if ((cp = m_find ("automhnproc")) && !getenv ("NOMHNPROC") && mhnfile (file) && (i = editfile (&cp, NULLVP, file, NOUSE, NULLMP, NULLCP, NULLCP))) return 0; #endif if (strcmp (sp = r1bindex (sendproc, '/'), "send") == 0) { cp = invo_name; sendit (invo_name = sp, arg, file, pushsw); invo_name = cp; return 1; } m_update (); (void) fflush (stdout); for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++) sleep (5); switch (child_id) { case NOTOK: advise (NULLCP, "unable to fork, so sending directly..."); case OK: vecp = 0; vec[vecp++] = invo_name; if (pushsw) vec[vecp++] = "-push"; if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp++] = file; vec[vecp] = NULL; execvp (sendproc, vec); fprintf (stderr, "unable to exec "); perror (sendproc); _exit (-1); default: if (pidwait (child_id, OK) == 0) done (0); return 1; } } /* */ #ifdef MIME #include "../h/mhn.h" static int mhnfile (msgnam) char *msgnam; { int state; char buf[BUFSIZ], name[NAMESZ]; FILE *fp; if ((fp = fopen (msgnam, "r")) == NULL) return 0; for (state = FLD;;) switch (state = m_getfld (state, name, buf, sizeof buf, fp)) { case FLD: case FLDPLUS: case FLDEOF: if (uleq (name, VRSN_FIELD) || uprf (name, XXX_FIELD_PRF)) { (void) fclose (fp); return 0; } while (state == FLDPLUS) state = m_getfld (state, name, buf, sizeof buf, fp); break; case BODY: do { register char *bp; for (bp = buf; *bp; bp++) if (*bp != ' ' && *bp != '\t' && *bp != '\n') { (void) fclose (fp); return 1; } state = m_getfld (state, name, buf, sizeof buf, fp); } while (state == BODY); /* and fall... */ default: (void) fclose (fp); return 0; } } #endif /* MIME */ /* */ static struct swit sendswitches[] = { #define ALIASW 0 "alias aliasfile", 0, #define DEBUGSW 1 "debug", -5, #define ENCRSW 2 "encrypt", #ifndef TMA -7, #else /* TMA */ 0, #endif /* TMA */ #define NENCRSW 3 "noencrypt", #ifndef TMA -9, #else /* TMA */ 0, #endif /* TMA */ #define FILTSW 4 "filter filterfile", 0, #define NFILTSW 5 "nofilter", 0, #define FRMTSW 6 "format", 0, #define NFRMTSW 7 "noformat", 0, #define FORWSW 8 "forward", 0, #define NFORWSW 9 "noforward", 0, #define MIMESW 10 "mime", MIMEminc(-4), #define NMIMESW 11 "nomime", MIMEminc(-6), #define MSGDSW 12 "msgid", 0, #define NMSGDSW 13 "nomsgid", 0, #define SPSHSW 14 "push", 0, #define NSPSHSW 15 "nopush", 0, #define SPLITSW 16 "split seconds", MIMEminc(-5), #define UNIQSW 17 "unique", -6, #define NUNIQSW 18 "nounique", -8, #define VERBSW 19 "verbose", 0, #define NVERBSW 20 "noverbose", 0, #define WATCSW 21 "watch", 0, #define NWATCSW 22 "nowatch", 0, #define WIDTHSW 23 "width columns", 0, #define SHELPSW 24 "help", 4, #define MAILSW 25 "mail", -4, #define SAMLSW 26 "saml", -4, #define SSNDSW 27 "send", -4, #define SOMLSW 28 "soml", -4, #define CLIESW 29 "client host", -6, #define SERVSW 30 "server host", -6, #define SNOOPSW 31 "snoop", -5, #define SDRFSW 32 "draftfolder +folder", -6, #define SDRMSW 33 "draftmessage msg", -6, #define SNDRFSW 34 "nodraftfolder", -3, #define QUEUESW 35 "queued", -6, #define RECORSW 36 "record program", -6, #define NRECOSW 37 "norecord", -8, NULL, 0 }; /* */ extern int debugsw; /* from sendsbr.c */ extern int forwsw; extern int inplace; extern int pushsw; extern int splitsw; extern int unique; extern int verbsw; extern char *altmsg; /* .. */ extern char *annotext; extern char *distfile; /* */ static sendit (sp, arg, file, pushed) register char *sp, **arg, *file; int pushed; { #ifndef lint int distsw = 0; #endif /* not lint */ int vecp = 1; char *cp, buf[100], **ap, **argp, *arguments[MAXARGS], *vec[MAXARGS]; struct stat st; #ifdef UCI FILE *fp; #endif /* UCI */ if (arg) (void) copyip (arg, vec); if ((cp = m_find (sp)) != NULL) { ap = brkstring (cp = getcpy (cp), " ", "\n"); ap = copyip (ap, arguments); } else ap = arguments; if (arg) (void) copyip (vec, ap); argp = arguments; debugsw = 0, forwsw = 1, inplace = 0, unique = 0; altmsg = annotext = distfile = NULL; vec[vecp++] = "-library"; vec[vecp++] = getcpy (m_maildir ("")); /* */ while (cp = *argp++) { if (*cp == '-') switch (smatch (++cp, sendswitches)) { case AMBIGSW: ambigsw (cp, sendswitches); return; case UNKWNSW: advise (NULLCP, "-%s unknown\n", cp); return; case SHELPSW: (void) sprintf (buf, "%s [switches]", sp); help (buf, sendswitches); return; case SPSHSW: pushed++; continue; case NSPSHSW: pushed = 0; continue; case SPLITSW: if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1) { advise (NULLCP, "missing argument to %s", argp[-2]); return; } continue; case UNIQSW: unique++; continue; case NUNIQSW: unique = 0; continue; case FORWSW: forwsw++; continue; case NFORWSW: forwsw = 0; continue; case VERBSW: verbsw++; vec[vecp++] = --cp; continue; case NVERBSW: verbsw = 0; vec[vecp++] = --cp; continue; case DEBUGSW: debugsw++; /* fall */ case NFILTSW: case FRMTSW: case NFRMTSW: case MIMESW: case NMIMESW: case MSGDSW: case NMSGDSW: case WATCSW: case NWATCSW: case MAILSW: case SAMLSW: case SSNDSW: case SOMLSW: case ENCRSW: case NENCRSW: case SNOOPSW: case QUEUESW: case NRECOSW: vec[vecp++] = --cp; continue; case ALIASW: case FILTSW: case WIDTHSW: case CLIESW: case SERVSW: case RECORSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') { advise (NULLCP, "missing argument to %s", argp[-2]); return; } vec[vecp++] = cp; continue; case SDRFSW: case SDRMSW: if (!(cp = *argp++) || *cp == '-') { advise (NULLCP, "missing argument to %s", argp[-2]); return; } case SNDRFSW: continue; } advise (NULLCP, "usage: %s [switches]", sp); return; } if (cp = m_find ("Aliasfile")) { /* allow Aliasfile: profile entry */ char *dp = NULL; for (ap = brkstring(dp = getcpy(cp), " ", "\n"); ap && *ap; ap++) { vec[vecp++] = "-alias"; vec[vecp++] = *ap; } } /* */ #ifdef TMA if ((cp = getenv ("KDS")) == NULL || *cp == NULL) if ((cp = m_find ("kdsproc")) && *cp) (void) m_putenv ("KDS", cp); if ((cp = getenv ("TMADB")) == NULL || *cp == NULL) if ((cp = m_find ("tmadb")) && *cp) (void) m_putenv ("TMADB", m_maildir (cp)); #endif /* TMA */ if ((cp = getenv ("SIGNATURE")) == NULL || *cp == 0) if ((cp = m_find ("signature")) && *cp) (void) m_putenv ("SIGNATURE", cp); #ifdef UCI else { (void) sprintf (buf, "%s/.signature", mypath); if ((fp = fopen (buf, "r")) != NULL && fgets (buf, sizeof buf, fp) != NULL) { (void) fclose (fp); if (cp = index (buf, '\n')) *cp = 0; (void) m_putenv ("SIGNATURE", buf); } } #endif /* UCI */ if ((annotext = getenv ("mhannotate")) == NULL || *annotext == 0) annotext = NULL; if ((altmsg = getenv ("mhaltmsg")) == NULL || *altmsg == 0) altmsg = NULL; if (annotext && ((cp = getenv ("mhinplace")) != NULL && *cp != 0)) inplace = atoi (cp); if ((cp = getenv ("mhdist")) && *cp #ifndef lint && (distsw = atoi (cp)) #endif /* not lint */ && altmsg) { vec[vecp++] = "-dist"; distfile = getcpy (m_scratch (altmsg, invo_name)); if (link (altmsg, distfile) == NOTOK) adios (distfile, "unable to link %s to", altmsg); } else distfile = NULL; if (altmsg == NULL || stat (altmsg, &st) == NOTOK) st.st_mtime = 0, st.st_dev = 0, st.st_ino = 0; if (pushsw = pushed) push (); vec[0] = r1bindex (postproc, '/'); closefds (3); if (sendsbr (vec, vecp, file, &st) == OK) done (0); } /* WHOM */ static int whomfile (arg, file) register char **arg, *file; { int pid; register int vecp; char *vec[MAXARGS]; m_update (); (void) fflush (stdout); switch (pid = vfork ()) { case NOTOK: advise ("fork", "unable to"); return 1; case OK: vecp = 0; vec[vecp++] = r1bindex (whomproc, '/'); vec[vecp++] = file; if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp] = NULL; execvp (whomproc, vec); fprintf (stderr, "unable to exec "); perror (whomproc); _exit (-1); /* NOTREACHED */ default: return (pidwait (pid, NOTOK) & 0377 ? 1 : 0); } } @ 1.23 log @fixes from mtr @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.22 1994/04/21 19:23:38 jromine Exp jromine $"; d656 4 a659 1 #define RECORSW 35 d661 1 a661 1 #define NRECOSW 36 d791 1 @ 1.22 log @mhn fixes from MTR @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.21 1992/12/15 00:20:22 jromine Exp jromine $"; d656 5 d788 1 d797 1 @ 1.21 log @endif sugar @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.20 1992/12/11 22:16:54 jromine Exp jromine $"; d526 1 a526 1 if (uprf (name, XXX_FIELD_PRF)) { @ 1.20 log @notreached @ text @d3 2 a4 2 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.19 1992/12/02 18:51:07 jromine Exp jromine $"; #endif lint d269 1 a269 1 #endif BSD42 d311 1 a311 1 #else not BSD42 d313 1 a313 1 #endif not BSD42 d387 1 a387 1 #else not BSD42 d396 1 a396 1 #endif not BSD42 d442 1 a442 1 #endif BSD42 d568 1 a568 1 #else TMA d570 1 a570 1 #endif TMA d575 1 a575 1 #else TMA d577 1 a577 1 #endif TMA d683 1 a683 1 #endif not lint d694 1 a694 1 #endif UCI d829 1 a829 1 #endif TMA d845 1 a845 1 #endif UCI d858 1 a858 1 #endif not lint @ 1.19 log @add decl @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.18 1992/11/04 02:28:36 jromine Exp jromine $"; d236 1 a913 1 break; @ 1.18 log @m_putenv @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.17 1992/10/16 21:37:53 jromine Exp jromine $"; d19 3 @ 1.17 log @MIME changes @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.16 1992/10/16 16:52:13 jromine Exp jromine $"; d326 2 a327 2 (void) putenv ("mhfolder", mp -> foldpath); (void) putenv ("editalt", altpath); d821 1 a821 1 (void) putenv ("KDS", cp); d824 1 a824 1 (void) putenv ("TMADB", m_maildir (cp)); d829 1 a829 1 (void) putenv ("SIGNATURE", cp); d838 1 a838 1 (void) putenv ("SIGNATURE", buf); @ 1.16 log @MIME ifdefs @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.15 1992/02/10 17:33:44 jromine Exp jromine $"; d12 6 d215 3 a217 2 sendfile (++argp, drft, 1); done (1); d220 1 a220 1 sendfile (++argp, drft, 0); d454 9 d467 1 a467 1 return; d497 1 a497 1 return; d503 50 d590 6 a595 1 #define MSGDSW 10 d597 1 a597 1 #define NMSGDSW 11 d600 1 a600 1 #define SPSHSW 12 d602 1 a602 1 #define NSPSHSW 13 d605 2 a606 7 #define SPLITSW 14 "split seconds", #ifndef MIME -5, #else /* MIME */ 0, #endif /* MIME */ d608 1 a608 1 #define UNIQSW 15 d610 1 a610 1 #define NUNIQSW 16 d613 1 a613 1 #define VERBSW 17 d615 1 a615 1 #define NVERBSW 18 d618 1 a618 1 #define WATCSW 19 d620 1 a620 1 #define NWATCSW 20 d623 1 a623 1 #define WIDTHSW 21 d626 1 a626 1 #define SHELPSW 22 d629 1 a629 1 #define MAILSW 23 d631 1 a631 1 #define SAMLSW 24 d633 1 a633 1 #define SSNDSW 25 d635 1 a635 1 #define SOMLSW 26 d638 1 a638 1 #define CLIESW 27 d640 1 a640 1 #define SERVSW 28 d642 1 a642 1 #define SNOOPSW 29 d645 1 a645 1 #define SDRFSW 30 d647 1 a647 1 #define SDRMSW 31 d649 1 a649 1 #define SNDRFSW 32 d766 2 @ 1.15 log @allow "Aliasfile" to be multiple files @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.14 1992/01/31 22:29:48 jromine Exp jromine $"; d535 6 a540 1 "split seconds", 0, @ 1.14 log @kerberos @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.13 1992/01/31 16:35:44 jromine Exp jromine $"; d735 6 a740 2 vec[vecp++] = "-alias"; vec[vecp++] = getcpy(cp); @ 1.13 log @Multimedia MH @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.12 1992/01/30 22:39:58 jromine Exp $"; d34 1 a34 1 NULL, NULL d57 1 a57 1 NULL, NULL d154 1 a154 1 if (drft == NULL && (drft = getenv ("mhdraft")) == NULL || *drft == NULL) d157 1 a157 1 if (ed == NULL && ((ed = getenv ("mheditor")) == NULL || *ed == NULL)) d581 1 a581 1 NULL, NULL d750 1 a750 1 if ((cp = getenv ("SIGNATURE")) == NULL || *cp == NULL) d760 1 a760 1 *cp = NULL; d766 1 a766 1 if ((annotext = getenv ("mhannotate")) == NULL || *annotext == NULL) d768 1 a768 1 if ((altmsg = getenv ("mhaltmsg")) == NULL || *altmsg == NULL) d770 1 a770 1 if (annotext && ((cp = getenv ("mhinplace")) != NULL && *cp != NULL)) @ 1.12 log @remove WP @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.11 1992/01/29 16:55:19 jromine Exp jromine $"; d534 4 a537 1 #define UNIQSW 14 d539 1 a539 1 #define NUNIQSW 15 d542 1 a542 1 #define VERBSW 16 d544 1 a544 1 #define NVERBSW 17 d547 1 a547 1 #define WATCSW 18 d549 1 a549 1 #define NWATCSW 19 d552 1 a552 1 #define WIDTHSW 20 d555 1 a555 1 #define SHELPSW 21 d558 1 a558 1 #define MAILSW 22 d560 1 a560 1 #define SAMLSW 23 d562 1 a562 1 #define SSNDSW 24 d564 1 a564 1 #define SOMLSW 25 d567 1 a567 1 #define CLIESW 26 d569 1 a569 1 #define SERVSW 27 d571 1 a571 1 #define SNOOPSW 28 d574 1 a574 1 #define SDRFSW 29 d576 1 a576 1 #define SDRMSW 30 d578 1 a578 1 #define SNDRFSW 31 d590 1 d592 1 d661 7 d681 9 a696 2 case VERBSW: case NVERBSW: @ 1.11 log @SUNVIBUG -> ATTVIBUG @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.10 1991/01/23 15:43:31 mh Exp jromine $"; a788 5 #ifdef WP char *cp, draft[BUFSIZ], backup[BUFSIZ]; #endif a789 4 #ifdef WP (void) strcpy (draft, m_scratch (file, invo_name)); #endif a804 4 #ifdef WP vec[vecp++] = "-fill-in"; vec[vecp++] = draft; #endif a812 1 #ifndef WP a813 5 #else if (pidwait (pid, NOTOK)) { (void) unlink (draft); return 1; } a814 1 #endif a815 14 #ifdef WP if (rename (file, cp = m_backup (file)) == NOTOK) { advise (cp, "unable to rename %s to", file); (void) unlink (draft); return 1; } if (rename (draft, file) == NOTOK) { advise (file, "unable to rename %s to ", draft); return 1; } return 0; #endif @ 1.10 log @fixup SUNVIBUG @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.9 91/01/23 14:44:00 mh Exp Locker: mh $"; d338 1 a338 1 #ifdef SUNVIBUG d357 1 a357 1 #ifdef SUNVIBUG @ 1.9 log @add SUNVIBUG @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.8 90/12/27 16:07:11 mh Exp Locker: mh $"; a307 4 #ifdef SUNVIBUG if (cp = r1bindex (*ed, '/') && strcmp (cp, "vi") == 0) reedit++; #endif d338 7 d355 1 a355 1 status = -2; d357 3 @ 1.8 log @jlr @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.7 90/12/18 14:01:05 mh Exp Locker: mh $"; d308 4 @ 1.7 log @give name of failed draft jlr @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: whatnowsbr.c,v 1.6 90/04/05 14:59:26 sources Exp Locker: mh $"; d342 2 a343 2 advise (NULLCP, "problems with edit--%s left in %s", file, cp); @ 1.6 log @add ID @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id:$"; d341 3 a343 2 (rename (file, m_backup (file)) != NOTOK)) { advise (NULLCP, "problems with edit--%s deleted", file); @ 1.5 log @add Aliasfile: stuff for built-in "send" @ text @d2 3 @ 1.4 log @ANSI Compilance @ text @d701 4 @ 1.3 log @WP Changes @ text @d9 1 d251 3 d286 3 d290 3 @ 1.2 log @when edit fails, delete draft by renaming to m_backup(draft) @ text @d761 5 d767 4 d786 4 d798 1 d800 7 d808 14 @ 1.1 log @Initial revision @ text @d327 2 a328 2 if (!use && (status & 0xff00)) { (void) unlink (file); @