|
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