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 s

⟦46c39c878⟧ TextFile

    Length: 7480 (0x1d38)
    Types: TextFile
    Names: »statp.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Tools/statgen/statp.c« 

TextFile

/* program/subroutines name: brief description of what this is */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Tools/statgen/RCS/statp.c,v 5.0 90/09/20 16:31:18 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Tools/statgen/RCS/statp.c,v 5.0 90/09/20 16:31:18 pp Exp Locker: pp $
 *
 * $Log:	statp.c,v $
 * Revision 5.0  90/09/20  16:31:18  pp
 * rcsforce : 5.0 public release
 * 
 */



#include "util.h"
#include <varargs.h>

char	*myname;
int	lineno;
static char *curfile;

static void process ();
static int parseline ();
static void adios (), advise ();

main (argc, argv)
int	argc;
char	**argv;
{
	extern char	*optarg;
	extern int	optind;
	int	opt;

	myname = argv[0];
	while((opt = getopt(argc, argv, "")) != EOF)
		switch (opt) {
		    default:
			fprintf (stderr, "Usage: %s\n", myname);
			break;
		}
	argc -= optind;
	argv += optind;
	if (argc > 0) {
		while (argc > 0) {
			FILE	*fp;

			if ((fp =fopen (*argv, "r")) == NULL)
				adios (*argv, "Can't open file");
			process (fp, *argv);
			fclose (fp);
			argv ++; argc --;
		}
	}
	else
		process (stdin, "standard input");
	exit (0);
}

static void process (fp, name)
FILE	*fp;
char	*name;
{
	char	linebuf[BUFSIZ*4];

	curfile = name;
	lineno = 1;
	while (fgets (linebuf, sizeof linebuf, fp)) {
		parseline (linebuf);
		lineno ++;
	}
}

static int parseline (line)
char	*line;
{
	int	month, day;
	char	*cp, *p;
	char	*argv[100];
	int	argc, n;

	month = atoi (line);
	if ((cp = index(line, '/')) == NULL)
		return badline (line, "No / date separator");

	day = atoi (++cp);

	if ((cp = index (line, ')')) == NULL)
		return badline (line, "No ')' in line");

	cp ++;
	if (index (cp, '|'))
		return badline (cp, "Line contains a '|'");


	printf ("%d|%d|", month, day);


	if ((p = index (cp, '>')) != NULL && p[-1] == '-')
		p[-1] = *p = ' ';
	argc = sstr2arg (cp, 100, argv, " \t\n=");

	if (lexequ (argv[0], "DR") == 0 )
		return do_dr (argc, argv);
	else if ( lexequ (argv[0], "totalDR") == 0)
		return do_totalDR (argc, argv);
	else if (lexequ (argv[0], "DR_good") == 0)
		return do_good_dr (argc, argv);
	else if (lexequ (argv[0], "ok") == 0 ||
		 lexequ (argv[0], "failed") == 0 ||
		 lexequ (argv[0], "ok-testfailed") == 0)
		return do_basic (argc, argv);
	else if (lexequ (argv[0], "dr_ok") == 0 ||
		 lexequ (argv[0], "dr_failed") == 0)
		return do_drok (argc, argv);
	else 
		return badline (argv[0], "unknown key");
}

do_basic (argc, argv)
int	argc;
char	**argv;
{
	int n;

#define NF_NORM	14
	if (argc != NF_NORM) {
		char	buf[BUFSIZ];
		(void) sprintf (buf,
				"Incorrect number of fields %d, expecting %d",
				argc, NF_NORM);
		return badline (argv[0], buf);
	}

	printf ("%s|%s|%s|%s|",
		argv[0], argv[1], argv[2], argv[3]);

	n = 4;
	if (lexequ(argv[n], "size"))
		return badline(argv[n], "size missing");
	printf ("%s|", argv[++n]);
	n++;

	if (lexequ (argv[n], "sender"))
		return badline (argv[n], "sender missing");
	printf ("%s|%s|", argv[n+1], argv[n+2]);
	n += 3;

	if (lexnequ (argv[n], "recip", 5))
		return badline (argv[n], "recip missing");
	printf ("%s|%s|%s\n", argv[n+1], argv[n+2], argv[n+3]);

	return OK;
}	

do_drok (argc, argv)
int	argc;
char	**argv;
{
	int n;

#define NF_DROK	9
	if (argc != NF_DROK) {
		char	buf[BUFSIZ];
		(void) sprintf (buf,
				"Incorrect number of fields %d, expecting %d",
				argc, NF_DROK);
		return badline (argv[0], buf);
	}

	printf ("%s|%s|%s|",
		argv[0], argv[1], argv[2]);

	n = 3;
	if (lexequ(argv[n], "size"))
		return badline(argv[n], "size missing");
	printf ("%s|", argv[++n]);
	n++;

	if (lexnequ (argv[n], "recip", 5))
		return badline (argv[n], "recip missing");
	printf ("%s|%s\n", argv[n+1], argv[n+2]);

	return OK;
}	

do_dr (argc, argv)
int	argc;
char	**argv;
{
	int	n;

#define NF_DR	20
	if (argc != NF_DR) {
		char	buf[BUFSIZ];
		(void) sprintf (buf,
				"Incorrect number of fields %d, expecting %d",
				argc, NF_DR);
		return badline (argv[0], buf);
	}
	printf ("%s|", argv[0]);

	n = 1;
	if (lexequ (argv[n], "chan"))
		return badline (argv[n], "chan expected");
	printf ("%s|", argv[++n]);
	n++;

	if (lexequ (argv[n], "sender"))
		return badline (argv[n], "sender expected");
	printf ("%s|", argv[++n]);
	n++;

	printf ("%s|", argv[n++]);

	if (lexequ (argv[n], "recip"))
		return badline (argv[n], "recip expected");
	printf ("%s|", argv[++n]);
	n+= 3;

	printf ("%s|", argv[n++]);
	if (lexequ (argv[n], "channel"))
		return badline (argv[n], "channel expected");
	printf ("%s|", argv[++n]);
	n ++;

	if (lexequ (argv[n], "reason"))
		return badline (argv[n], "reason expected");
	printf ("%s|", argv[++n]);
	n ++;

	if (lexequ (argv[n], "reason-code"))
		return badline (argv[n], "reason-code expected");
	printf ("%s|", argv[++n]);
	n++;

	if (lexequ (argv[n], "diag-code"))
		return badline (argv[n], "diag-code expected");
	printf ("%s\n", argv[++n]);
	return OK;
	
}

do_totalDR (argc, argv)
int	argc;
char	**argv;
{
	int	n;

#define NF_DR_TOT	10
	if (argc != NF_DR_TOT) {
		char	buf[BUFSIZ];
		(void) sprintf (buf,
				"Incorrect number of fields %d, expecting %d",
				argc, NF_DR_TOT);
		return badline (argv[0], buf);
	}
	printf ("%s|", argv[0]);

	n = 1;
	if (lexequ (argv[n], "chan"))
		return badline (argv[n], "chan expected");
	printf ("%s|", argv[++n]);
	n++;

	if (lexequ (argv[n], "sender"))
		return badline (argv[n], "sender expected");
	printf ("%s|", argv[++n]);
	n++;

	printf ("%s|", argv[n++]);

	if (lexequ (argv[n], "reason-code"))
		return badline (argv[n], "reason-code expected");
	printf ("%s|", argv[++n]);
	n++;

	if (lexequ (argv[n], "diag-code"))
		return badline (argv[n], "diag-code expected");
	printf ("%s\n", argv[++n]);
	return OK;
	
}

do_good_dr (argc, argv)
int	argc;
char	**argv;
{
	int	n;

#define NF_DR_GOOD	14
	if (argc != NF_DR_GOOD) {
		char	buf[BUFSIZ];
		(void) sprintf (buf,
				"Incorrect number of fields %d, expecting %d",
				argc, NF_DR_GOOD);
		return badline (argv[0], buf);
	}
	printf ("%s|", argv[0]);

	n = 1;
	if (lexequ (argv[n], "chan"))
		return badline (argv[n], "chan expected");
	printf ("%s|", argv[++n]);
	n++;

	if (lexequ (argv[n], "sender"))
		return badline (argv[n], "sender expected");
	printf ("%s|", argv[++n]);
	n++;

	printf ("%s|", argv[n++]);

	if (lexequ (argv[n], "recip"))
		return badline (argv[n], "recip expected");
	printf ("%s|", argv[++n]);
	n+= 3;

	printf ("%s|", argv[n++]);
	if (lexequ (argv[n], "channel"))
		return badline (argv[n], "channel expected");
	printf ("%s\n", argv[++n]);

	return OK;
	
}

int	badline (line, mesg)
char	*line, *mesg;
{
	putchar ('\n');
	advise (NULLCP, "Bad stat line '%s' line %d in %s: %s",
		line, lineno, curfile, mesg);
	return NOTOK;
}

#ifndef	lint
static void	_advise ();


static void	adios (va_alist)
va_dcl
{
    va_list ap;

    va_start (ap);

    _advise (ap);

    va_end (ap);

    _exit (1);
}
#else
/* VARARGS */

static void	adios (what, fmt)
char   *what,
       *fmt;
{
    adios (what, fmt);
}
#endif


#ifndef	lint
static void	advise (va_alist)
va_dcl
{
    va_list ap;

    va_start (ap);

    _advise (ap);

    va_end (ap);
}


static void  _advise (ap)
va_list	ap;
{
    char    buffer[BUFSIZ];

    asprintf (buffer, ap);

    (void) fflush (stdout);

    fprintf (stderr, "%s: ", myname);
    (void) fputs (buffer, stderr);
    (void) fputc ('\n', stderr);

    (void) fflush (stderr);
}
#else
/* VARARGS */

static void	advise (what, fmt)
char   *what,
       *fmt;
{
    advise (what, fmt);
}
#endif