X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/d244d8703e3d0edbd492dca367d74db166e8a687..b73be50683a3c1fd39e040a3adad95ed21ef8594:/arithmetic/arithmetic.c diff --git a/arithmetic/arithmetic.c b/arithmetic/arithmetic.c index aa342de1..3150717e 100644 --- a/arithmetic/arithmetic.c +++ b/arithmetic/arithmetic.c @@ -1,6 +1,8 @@ +/* $NetBSD: arithmetic.c,v 1.10 1998/02/03 05:33:32 perry Exp $ */ + /* - * Copyright (c) 1989 The Regents of the University of California. - * All rights reserved. + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Eamonn McManus of Trinity College Dublin. @@ -34,14 +36,18 @@ * SUCH DAMAGE. */ +#include #ifndef lint -char copyright[] = -"@(#) Copyright (c) 1989 The Regents of the University of California.\n\ - All rights reserved.\n"; +__COPYRIGHT("@(#) Copyright (c) 1989, 1993\n\ + The Regents of the University of California. All rights reserved.\n"); #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)arithmetic.c 5.5 (Berkeley) 2/27/91"; +#if 0 +static char sccsid[] = "@(#)arithmetic.c 8.1 (Berkeley) 5/31/93"; +#else +__RCSID("$NetBSD: arithmetic.c,v 1.10 1998/02/03 05:33:32 perry Exp $"); +#endif #endif /* not lint */ /* @@ -73,11 +79,23 @@ static char sccsid[] = "@(#)arithmetic.c 5.5 (Berkeley) 2/27/91"; */ #include -#include +#include #include +#include #include +#include #include #include +#include + +int getrandom __P((int, int, int)); +void intr __P((int)); +int main __P((int, char *[])); +int opnum __P((int)); +void penalise __P((int, int, int)); +int problem __P((void)); +void showstats __P((void)); +void usage __P((void)); char keylist[] = "+-x/"; char defaultkeys[] = "+-"; @@ -95,7 +113,7 @@ time_t qtime; * bound is 10. After every NQUESTS questions, statistics on the performance * so far are printed. */ -void +int main(argc, argv) int argc; char **argv; @@ -103,28 +121,21 @@ main(argc, argv) extern char *optarg; extern int optind; int ch, cnt; - void intr(); - while ((ch = getopt(argc, argv, "r:o:")) != EOF) + while ((ch = getopt(argc, argv, "r:o:")) != -1) switch(ch) { case 'o': { - register char *p; + char *p; for (p = keys = optarg; *p; ++p) - if (!index(keylist, *p)) { - (void)fprintf(stderr, - "arithmetic: unknown key.\n"); - exit(1); - } + if (!strchr(keylist, *p)) + errx(1, "arithmetic: unknown key."); nkeys = p - optarg; break; } case 'r': - if ((rangemax = atoi(optarg)) <= 0) { - (void)fprintf(stderr, - "arithmetic: invalid range.\n"); - exit(1); - } + if ((rangemax = atoi(optarg)) <= 0) + errx(1, "arithmetic: invalid range."); break; case '?': default: @@ -150,13 +161,15 @@ main(argc, argv) /* Handle interrupt character. Print score and exit. */ void -intr() +intr(dummy) + int dummy; { showstats(); exit(0); } /* Print score. Original `arithmetic' had a delay after printing it. */ +void showstats() { if (nright + nwrong > 0) { @@ -177,13 +190,15 @@ showstats() * answer causes the numbers in the problem to be penalised, so that they are * more likely to appear in subsequent problems. */ +int problem() { - register char *p; + char *p; time_t start, finish; int left, op, right, result; char line[80]; + right = left = result = 0; op = keys[random() % nkeys]; if (op != '/') right = getrandom(rangemax + 1, op, 1); @@ -288,11 +303,11 @@ struct penalty { * operand number `operand' (0 or 1). If we run out of memory, we just * forget about the penalty (how likely is this, anyway?). */ +void penalise(value, op, operand) int value, op, operand; { struct penalty *p; - char *malloc(); op = opnum(op); if ((p = (struct penalty *)malloc((u_int)sizeof(*p))) == NULL) @@ -309,11 +324,12 @@ penalise(value, op, operand) * as a value, or represents a position in the penalty list. If the latter, * we find the corresponding value and return that, decreasing its penalty. */ +int getrandom(maxval, op, operand) int maxval, op, operand; { int value; - register struct penalty **pp, *p; + struct penalty **pp, *p; op = opnum(op); value = random() % (maxval + penalty[op][operand]); @@ -348,28 +364,30 @@ getrandom(maxval, op, operand) * correspond to the actual sum of penalties in the list. Provide an * obscure message. */ - (void)fprintf(stderr, "arithmetic: bug: inconsistent penalties\n"); - exit(1); + errx(1, "arithmetic: bug: inconsistent penalties."); /* NOTREACHED */ } /* Return an index for the character op, which is one of [+-x/]. */ +int opnum(op) int op; { char *p; - if (op == 0 || (p = index(keylist, op)) == NULL) { - (void)fprintf(stderr, - "arithmetic: bug: op %c not in keylist %s\n", op, keylist); - exit(1); - } + if (op == 0 || (p = strchr(keylist, op)) == NULL) + errx(1, "arithmetic: bug: op %c not in keylist %s", + op, keylist); return(p - keylist); } /* Print usage message and quit. */ +void usage() { - (void)fprintf(stderr, "usage: arithmetic [-o +-x/] [-r range]\n"); + extern char *__progname; /* from crt0.o */ + + (void)fprintf(stderr, "usage: %s [-o +-x/] [-r range]\n", + __progname); exit(1); }