head 1.9; access; symbols; locks; strict; comment @ * @; 1.9 date 93.08.20.15.51.29; author jromine; state Exp; branches; next 1.8; 1.8 date 92.12.15.00.20.22; author jromine; state Exp; branches; next 1.7; 1.7 date 92.11.04.00.46.24; author jromine; state Exp; branches; next 1.6; 1.6 date 92.10.27.00.13.21; author jromine; state Exp; branches; next 1.5; 1.5 date 92.01.31.22.12.50; author jromine; state Exp; branches; next 1.4; 1.4 date 92.01.31.05.51.11; author jromine; state Exp; branches; next 1.3; 1.3 date 90.04.05.15.01.25; author sources; state Exp; branches; next 1.2; 1.2 date 90.02.06.13.21.18; author sources; state Exp; branches; next 1.1; 1.1 date 90.02.06.13.21.05; author sources; state Exp; branches; next ; desc @@ 1.9 log @added -queued to pass to post @ text @/* mhmail.c - simple mail program */ #ifndef lint static char ident[] = "@@(#)$Id: mhmail.c,v 1.8 1992/12/15 00:20:22 jromine Exp jromine $"; #endif /* lint */ #include "../h/mh.h" #include #include #ifdef LOCALE #include #endif /* */ static struct swit switches[] = { #define BODYSW 0 "body text", 0, #define CCSW 1 "cc addrs ...", 0, #define FROMSW 2 "from addr", 0, #define SUBJSW 3 "subject text", 0, #define HELPSW 4 "help", 4, #define RESNDSW 5 "resent", -6, #define QUEUESW 6 "queued", -6, NULL, 0 }; /* */ static TYPESIG intrser (); static char tmpfil[BUFSIZ]; /* */ /* ARGSUSED */ main (argc, argv) int argc; char *argv[]; { int child_id, status, i, iscc = 0, nvec, queued = 0, resent = 0, somebody; char *cp, *tolist = NULL, *cclist = NULL, *subject = NULL, *from = NULL, *body = NULL, **argp = argv + 1, buf[100], *vec[5]; FILE * out; #ifdef LOCALE setlocale(LC_ALL, ""); #endif invo_name = r1bindex (argv[0], '/'); m_foil (NULLCP); if (argc == 1) { execlp (incproc, r1bindex (incproc, '/'), NULLCP); adios (incproc, "unable to exec"); } /* */ while (cp = *argp++) { if (*cp == '-') switch (smatch (++cp, switches)) { case AMBIGSW: ambigsw (cp, switches); done (1); case UNKWNSW: adios (NULLCP, "-%s unknown", cp); case HELPSW: (void) sprintf (buf, "%s [addrs ... [switches]]", invo_name); help (buf, switches); done (1); case FROMSW: if (!(from = *argp++) || *from == '-') adios (NULLCP, "missing argument to %s", argp[-2]); continue; case BODYSW: if (!(body = *argp++) || *body == '-') adios (NULLCP, "missing argument to %s", argp[-2]); continue; case CCSW: iscc++; continue; case SUBJSW: if (!(subject = *argp++) || *subject == '-') adios (NULLCP, "missing argument to %s", argp[-2]); continue; case RESNDSW: resent++; continue; case QUEUESW: queued++; continue; } if (iscc) cclist = cclist ? add (cp, add (", ", cclist)) : getcpy (cp); else tolist = tolist ? add (cp, add (", ", tolist)) : getcpy (cp); } /* */ if (tolist == NULL) adios (NULLCP, "usage: %s addrs ... [switches]", invo_name); (void) strcpy (tmpfil, m_tmpfil (invo_name)); if ((out = fopen (tmpfil, "w")) == NULL) adios (tmpfil, "unable to write"); (void) chmod (tmpfil, 0600); setsig (SIGINT, intrser); fprintf (out, "%sTo: %s\n", resent ? "Resent-" : "", tolist); if (cclist) fprintf (out, "%scc: %s\n", resent ? "Resent-" : "", cclist); if (subject) fprintf (out, "%sSubject: %s\n", resent ? "Resent-" : "", subject); if (from) fprintf (out, "%sFrom: %s\n", resent ? "Resent-" : "", from); if (!resent) (void) fputs ("\n", out); if (body) { fprintf (out, "%s", body); if (*body && *(body + strlen (body) - 1) != '\n') fputs ("\n", out); } else { for (somebody = 0; (i = fread (buf, sizeof *buf, sizeof buf, stdin)) > 0; somebody++) if (fwrite (buf, sizeof *buf, i, out) != i) adios (tmpfil, "error writing"); if (!somebody) { (void) unlink (tmpfil); done (1); } } (void) fclose (out); /* */ nvec = 0; vec[nvec++] = r1bindex (postproc, '/'); vec[nvec++] = tmpfil; if (resent) vec[nvec++] = "-dist"; if (queued) vec[nvec++] = "-queued"; vec[nvec] = 0; for (i = 0; (child_id = fork ()) == NOTOK && i < 5; i++) sleep (5); switch (child_id) { case NOTOK: /* report failure and then send it */ admonish (NULLCP, "unable to fork"); case OK: execvp (postproc, vec); fprintf (stderr, "unable to exec "); perror (postproc); _exit (-1); default: if (status = pidXwait (child_id, postproc)) { fprintf (stderr, "Letter saved in dead.letter\n"); execl ("/bin/mv", "mv", tmpfil, "dead.letter", NULLCP); execl ("/usr/bin/mv", "mv", tmpfil, "dead.letter", NULLCP); perror ("mv"); _exit (-1); } (void) unlink (tmpfil); done (status ? 1 : 0); } } /* */ /* ARGSUSED */ static TYPESIG intrser (i) int i; { #ifndef BSD42 if (i) (void) signal (i, SIG_IGN); #endif /* BSD42 */ (void) unlink (tmpfil); done (i != 0 ? 1 : 0); } @ 1.8 log @endif sugar @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: mhmail.c,v 1.7 1992/11/04 00:46:24 jromine Exp jromine $"; d33 2 d58 2 d69 2 a70 1 buf[100]; d124 4 d176 9 d191 2 a192 3 case OK: execlp (postproc, r1bindex (postproc, '/'), tmpfil, resent ? "-dist" : NULLCP, NULLCP); @ 1.7 log @LOCALE TYPESIG @ text @d3 2 a4 2 static char ident[] = "@@(#)$Id: mhmail.c,v 1.6 1992/10/27 00:13:21 jromine Exp jromine $"; #endif lint d204 1 a204 1 #endif BSD42 @ 1.6 log @typo @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: mhmail.c,v 1.5 1992/01/31 22:12:50 jromine Exp jromine $"; d9 3 d39 1 a39 1 static int intrser (); d68 3 d198 1 a198 1 static int intrser (i) @ 1.5 log @kerberos @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: mhmail.c,v 1.4 1992/01/31 05:51:11 jromine Exp jromine $"; d23 1 a23 1 "subject", 0, @ 1.4 log @add -resent for mrose@@dbc.mtview.ca.us @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id: mhmail.c,v 1.3 1990/04/05 15:01:25 sources Exp jromine $"; d31 1 a31 1 NULL, NULL @ 1.3 log @add ID @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id:$"; d28 3 d53 1 d109 4 d131 1 a131 1 fprintf (out, "To: %s\n", tolist); d133 1 a133 1 fprintf (out, "cc: %s\n", cclist); d135 1 a135 1 fprintf (out, "Subject: %s\n", subject); d137 3 a139 2 fprintf (out, "From: %s\n", from); (void) fputs ("\n", out); d168 2 a169 1 execlp (postproc, r1bindex (postproc, '/'), tmpfil, NULLCP); @ 1.2 log @ANSI Compilance @ text @d2 3 @ 1.1 log @Initial revision @ text @d30 1 a30 1 int intrser (); @