SRI-NOSC/mmdf/mailsubs.c
#include "mailer.h"
int fout;
char logfile[];
struct iobuf logbuf;
initlog (handle)
int handle;
{
long ltime;
int tmp;
int *tpt;
if (handle <= 0)
return (FALSE);
zero (&logbuf, sizeof logbuf);
flush ();
tmp = fout;
time (<ime);
tpt = localtime (<ime);
logbuf.fildes = handle;
seek (handle, 0, 2);
fout = handle;
printf ("\n*** %2d/%2d %2d:%2d:%2d - LOG OPENED ***\n",
tpt[4] + 1, tpt[3], tpt[2], tpt[1], tpt[0]);
flush ();
fout = tmp;
return (TRUE);
}
getlogfd ()
{
return (logbuf.fildes);
}
clslog ()
{
if (logbuf.fildes > 0)
{
fflush (&logbuf);
close (logbuf.fildes);
logbuf.fildes = 0;
}
}
log (format, a1, a2, a3, a4, a5, a6, a7)
char *format, *a1, *a2, *a3, *a4, *a5, *a6, *a7;
{
extern int *localtime();
long ltime;
int tmp;
int *tpt;
char numstr[6];
char logherald;
register int *ap;
register char c, *fmt;
time (<ime);
tpt = localtime (<ime);
logherald = FALSE;
switch (logbuf.fildes)
{case NOTOK:
return (FALSE);
case 0:
if (logfile[0] == '\0')
{
logbuf.fildes = NOTOK;
return (FALSE);
}
if ((tmp = open (&logfile, 1)) <= OK)
{
logbuf.fildes = NOTOK;
if (logfile[0] != '\0')
printx ("Unable to open log file; continuing...\n");
return (FALSE);
}
initlog (tmp);
}
if (*(fmt = format) == 0)
{
fflush (&logbuf);
return;
}
flush ();
tmp = fout;
fout = logbuf.fildes;
printf ("%2d:%2d ", tpt[1], tpt[0]);
printf (format, a1, a2, a3, a4, a5, a6, a7);
putchar ('\n');
flush ();
fout = tmp;
#ifdef NVRCOMPIL
for (;;)
{
for (ap = &a1; (c = *fmt++) != '%'; putc (c, &logbuf))
{
if (c == '\0')
{
/* * */ fflush (&logbuf);
return;
}
/* if (c == '\\') */
/* c = *fmt++; */
}
for (tmp = 0; digit (c = *fmt++); tmp =* 10, tmp =+ c - '0');
switch (c)
{
case 'c':
putc (*ap++, &logbuf);
continue;
case 'd':
itoa (*ap++, &numstr);
for (tmp = tmp - strlen (numstr); tmp-- > 0;
putc (' ', &logbuf));
puts (numstr, &logbuf);
continue;
case 's':
puts (*ap++, &logbuf);
continue;
}
}
#endif
}
char dbgmode;
dbglog (a, b, c, d, e, f)
char *a,
*b,
*c,
*d,
*e,
*f;
{
if (dbgmode)
log (a, b, c, d, e, f);
}
perror (a, b, c, d, e, f)
char *a,
*b,
*c,
*d,
*e,
*f;
{
extern int sys_nerr;
extern char *sys_errlist[];
extern int errno;
log (a, b, c, d, e, f);
log ("\t[ (%d) %s]", errno, errno >= 0 && errno <= sys_nerr
? sys_errlist[errno]
: " <- Illegal errno");
}
int domsg;
printx (a, b, c, d,e,f)
char a[],
b[],
c[],
d[];
char e[],
f[];
{
if (domsg)
printf (a, b, c, d,e,f);
flush (); /* DBG */
}
int savenv;
timeout ()
{
signal (SIGCLK, &timeout);
log ("Timeout\n");
envrest (&savenv);
}
sig1 ()
{
perror ("Dying on signal 1");
abort ();
}
sig2 ()
{
perror ("Dying on signal 2");
abort ();
}
sig4 ()
{
perror ("Dying on signal 4");
abort ();
}
sig10 ()
{
perror ("Dying on signal 10");
abort ();
}
sig12 ()
{
perror ("Dying on signal 12");
abort ();
}
sig13 ()
{
perror ("Dying on signal 13");
abort ();
}
siginit ()
{
signal (1, &sig1);
signal (2, &sig2);
signal (4, &sig4);
signal (10, &sig10);
signal (12, &sig12);
signal (13, &sig13);
}