DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦d7263c661⟧ TextFile

    Length: 3868 (0xf1c)
    Types: TextFile
    Names: »mail.c«

Derivation

└─⟦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« 

TextFile

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