|
|
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 s
Length: 7480 (0x1d38)
Types: TextFile
Names: »statp.c«
└─⟦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«
/* 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