|
|
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