|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 3868 (0xf1c) Types: TextFile Names: »mail.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Uip/mail/mail.c«
/* mail: very dumb mail interface */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Uip/mail/RCS/mail.c,v 5.0 90/09/20 16:33:02 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Uip/mail/RCS/mail.c,v 5.0 90/09/20 16:33:02 pp Exp Locker: pp $ * * $Log: mail.c,v $ * Revision 5.0 90/09/20 16:33:02 pp * rcsforce : 5.0 public release * */ #include "util.h" #include "retcode.h" #include <varargs.h> #define TO 1 #define CC 2 #define SUBJECT 3 #define MAX_TO 100 #define MAX_CC 100 static char *to[MAX_TO], *cc[MAX_CC], subject[BUFSIZ], *invo_name; static int param = TO, /* initial state */ lastparam = TO, toptr, ccptr; static RP_Buf rps, *rp = &rps; static void do_text (); static void mail_init (); static void do_addrs (); /* --------------------- Start Routines -------------------------------- */ main (argc, argv) int argc; char **argv; { uip_init (invo_name = argv[0]); if (argc <= 1 ) user_err (1, "Usage: %s to [-c cc] [-s subject] [-t to]\n", argv[0]); while (--argc > 0) { argv ++; if (**argv == '-') switch (argv[0][1]) { case 't': lastparam = param = TO; break; case 'c': lastparam = param = CC; break; case 's': param = SUBJECT; break; default: user_err (1, "Unknown switch %s\n", *argv); break; } /* -- end of switch -- */ else { switch (param) { case TO: if (toptr >= MAX_TO) user_err (1, "Too many 'to' addresses\n"); to[toptr++] = *argv; break; case CC: if (ccptr >= MAX_TO) user_err (1, "Too many 'cc' addresses\n"); cc[ccptr++] = *argv; break; case SUBJECT: (void) strcat (subject, *argv); (void) strcat (subject, " "); param = lastparam; break; } /* -- end of switch -- */ } /* -- end of else -- */ } /* -- end of while -- */ if (toptr == 0 && ccptr == 0) user_err (1, "No recipients given\n"); mail_init(); do_addrs(); do_text(); exit (0); } /* --------------------- Start Routines -------------------------------- */ static void mail_init() { if (pps_init (subject, rp) == NOTOK) sys_err (1, "pps_init", rp, "Initialisation failed"); } static void do_addrs() { int i; for (i = 0; i < toptr; i++) if (pps_adr (to[i], rp) == NOTOK) sys_err (1, "pps_adr", rp, "Address %s failed", to[i]); if (pps_cc(rp) == NOTOK) sys_err (1, "pps_cc", rp, "CC list failed"); for (i = 0; i < ccptr; i++) if (pps_adr (cc[i], rp) == NOTOK) sys_err (1, "pps_adr", rp, "Address %s failed", cc[i]); if (pps_aend(rp) == NOTOK) sys_err (1, "pps_adend", rp, "Address end failed"); } static void do_text() { if (pps_tinit(rp) == NOTOK) sys_err (1, "pps_tinit", rp, "Can't initalise for text"); if (pps_file (stdin, rp) == NOTOK) sys_err (1, "pps_file", rp, "Text copy failed"); if (pps_end (OK, rp) == NOTOK) sys_err (1, "pps_end", rp, "Termination phase failed"); } /* --------------------- Error Routines -------------------------------- */ #ifdef lint /*VARARGS2*/ user_err (n, fmt) int n; char *fmt; { user_err (n, fmt); } #else user_err (va_alist) va_dcl { char buf[BUFSIZ]; va_list ap; int n; va_start (ap); n = va_arg (ap, int); _asprintf (buf, NULLCP, ap); fprintf (stderr, "%s: %s\n", invo_name, buf); va_end (ap); exit (n); } #endif #ifdef lint /*VARARGS4*/ sys_err (n, proc, rp, fmt) int n; RP_Buf *rp; char *proc, *fmt; { sys_err (n, proc, rp, fmt); } #else sys_err (va_alist) va_dcl { int n; char buf[BUFSIZ]; RP_Buf *rp; char *proc; va_list ap; va_start (ap); n = va_arg (ap, int); proc = va_arg (ap, char *); rp = va_arg (ap, RP_Buf *); _asprintf (buf, NULLCP, ap); fprintf (stderr, "%s: %s %s [%s]\n", invo_name, proc, buf, rp -> rp_line); va_end (ap); exit (n); } #endif