guy@sun.uucp (Guy Harris) (07/19/85)
Index: games/mille/init.c games/mille/mille.c games/mille/misc.c games/mille/move.c games/mille/roll.c games/mille/save.c games/mille/varpush.c 4.2BSD (probably 4.3BSD also) Description: 1) The 'o' command toggles a flag indicating whether to order the hand or not. The version supplied in binary form, both in 4.1BSD and 4.2BSD, also toggled the menu item for 'o' between "order hand" and "stop ordering". Neither the source supplied with 4.1BSD nor the source supplied with 4.2BSD built this version; the versions built with the source left the menu item as "order hand". 2) Several "lint" errors show up when "mille" is "lint"ed. There are a couple of unused variables, and several cases where an integer is passed to a routine expecting a pointer. This causes problems on machines with 16-bit "int"s and 32-bit pointers. There are a couple of "char" variables which should be "int"s, which might cause problems on machines with no signed "char"s (like the AT&T 3B machines). The time of day is declared as a "struct tm" rather than a "long" or "time_t" which causes considerable confusion, as well as forcing the module to include <time.h> which, for no good reason, is not present on 4.2BSD (it's moved to <sys/time.h> with no <time.h> left around). 3) "rand" is assumed to return a number in the range 0 to 2^31 - 1 on VAXes and a number in the range 0 to 2^15 - 1 on all other machines. On 4.2BSD machines other than the VAX "rand" also returns numbers in the range 0 to 2^31 - 1. We add a #define constant BSD, and assume 31-bit random numbers if it's defined and 15-bit random number otherwise. (Make sure you #define this if building for 4.xBSD, including 4.1BSD.) Repeat-By: 1) Just try using the 'o' key and notice that the menu item doesn't change. 2) Just try porting "mille" to a 16-bit-"int"/32-bit-pointer machine (like, to pick a random example, a CCI Power 5/20). 3) Just try porting "mille" to a 4.2BSD machine other than a VAX (like, to pick a random example, a Sun or a CCI Power 6/32). Fix: *** init.c.orig Mon Jul 15 14:30:13 1985 --- init.c Mon Jul 15 14:34:42 1985 *************** *** 152,158 mvaddstr(13, 2, "d: discard #"); mvaddstr(14, 2, "w: toggle window"); mvaddstr(11, 21, "q: quit"); ! mvaddstr(12, 21, "o: order hand"); mvaddstr(13, 21, "s: save"); mvaddstr(14, 21, "r: reprint"); } --- 152,161 ----- mvaddstr(13, 2, "d: discard #"); mvaddstr(14, 2, "w: toggle window"); mvaddstr(11, 21, "q: quit"); ! if (!Order) ! mvaddstr(12, 21, "o: order hand"); ! else ! mvaddstr(12, 21, "o: stop ordering"); mvaddstr(13, 21, "s: save"); mvaddstr(14, 21, "r: reprint"); } *** mille.c.orig Mon Jul 15 14:30:37 1985 --- mille.c Mon Jul 15 14:35:47 1985 *************** *** 21,27 if (strcmp(av[0], "a.out") == 0) { outf = fopen("q", "w"); ! setbuf(outf, 0); Debug = TRUE; } restore = FALSE; --- 21,27 ----- if (strcmp(av[0], "a.out") == 0) { outf = fopen("q", "w"); ! setbuf(outf, (char *)0); Debug = TRUE; } restore = FALSE; *************** *** 116,122 */ rub() { ! signal(SIGINT, 1); if (getyn("Really? ")) die(); signal(SIGINT, rub); --- 116,122 ----- */ rub() { ! signal(SIGINT, SIG_IGN); if (getyn("Really? ")) die(); signal(SIGINT, rub); *************** *** 127,133 */ die() { ! signal(SIGINT, 1); if (outf) fflush(outf); mvcur(0, COLS - 1, LINES - 1, 0); --- 127,133 ----- */ die() { ! signal(SIGINT, SIG_IGN); if (outf) fflush(outf); mvcur(0, COLS - 1, LINES - 1, 0); *** misc.c.orig Mon Jul 15 14:30:27 1985 --- misc.c Mon Jul 15 14:33:31 1985 *************** *** 26,32 CARD getcard() { ! reg char c, c1; for (;;) { while ((c = readch()) == '\n' || c == '\r' || c == ' ') --- 26,32 ----- CARD getcard() { ! reg int c, c1; for (;;) { while ((c = readch()) == '\n' || c == '\r' || c == ' ') *** move.c.orig Mon Jul 15 14:30:35 1985 --- move.c Mon Jul 15 14:36:34 1985 *************** *** 324,329 goto ret; case 'O': /* Order */ Order = !Order; Movetype = M_ORDER; goto ret; case 'Q': /* Quit */ --- 324,334 ----- goto ret; case 'O': /* Order */ Order = !Order; + if (!Order) + mvwaddstr(Score, 12, 21, "o: order hand"); + else + mvwaddstr(Score, 12, 21, "o: stop ordering"); + wclrtoeol(Score); Movetype = M_ORDER; goto ret; case 'Q': /* Quit */ *************** *** 396,402 leaveok(Board, TRUE); if ((outf = fopen(buf, "w")) == NULL) perror(buf); ! setbuf(outf, 0); } Debug = !Debug; break; --- 401,407 ----- leaveok(Board, TRUE); if ((outf = fopen(buf, "w")) == NULL) perror(buf); ! setbuf(outf, (char *)0); } Debug = !Debug; break; *************** *** 461,467 reg CARD *hand; { reg CARD *cp, *tp; - reg int j; reg CARD temp; cp = hand; --- 466,471 ----- reg CARD *hand; { reg CARD *cp, *tp; reg CARD temp; cp = hand; *** roll.c.orig Mon Jul 15 14:30:28 1985 --- roll.c Mon Jul 15 14:33:35 1985 *************** *** 7,13 # define reg register ! # ifndef vax # define MAXRAND 32767L roll(ndie, nsides) --- 7,13 ----- # define reg register ! # ifndef BSD # define MAXRAND 32767L roll(ndie, nsides) *************** *** 14,20 int ndie, nsides; { reg long tot; ! reg unsigned n, r; tot = 0; n = ndie; --- 14,20 ----- int ndie, nsides; { reg long tot; ! reg unsigned n; tot = 0; n = ndie; *** save.c.orig Mon Jul 15 14:30:38 1985 --- save.c Mon Jul 15 14:50:35 1985 *************** *** 1,7 #include "mille.h" #include <sys/types.h> #include <sys/stat.h> - #include <sys/time.h> # ifdef attron # include <term.h> # define _tty cur_term->Nttyb --- 1,6 ----- #include "mille.h" #include <sys/types.h> #include <sys/stat.h> # ifdef attron # include <term.h> # define _tty cur_term->Nttyb *************** *** 12,18 */ typedef struct stat STAT; - typedef struct tm TIME; char *ctime(); --- 11,16 ----- */ typedef struct stat STAT; char *ctime(); *************** *** 28,34 reg char *sp; reg int outf; ! reg TIME *tp; char buf[80]; TIME tme; STAT junk; --- 26,32 ----- reg char *sp; reg int outf; ! reg long *tp; char buf[80]; long tme; STAT junk; *************** *** 30,36 reg int outf; reg TIME *tp; char buf[80]; ! TIME tme; STAT junk; tp = &tme; --- 28,34 ----- reg int outf; reg long *tp; char buf[80]; ! long tme; STAT junk; tp = &tme; *** varpush.c.orig Mon Jul 15 14:30:23 1985 --- varpush.c Mon Jul 15 14:37:47 1985 *************** *** 16,34 int temp; ! (*func)(file, &Debug, sizeof Debug); ! (*func)(file, &Finished, sizeof Finished); ! (*func)(file, &Order, sizeof Order); ! (*func)(file, &End, sizeof End); ! (*func)(file, &On_exit, sizeof On_exit); ! (*func)(file, &Handstart, sizeof Handstart); ! (*func)(file, &Numgos, sizeof Numgos); ! (*func)(file, Numseen, sizeof Numseen); ! (*func)(file, &Play, sizeof Play); ! (*func)(file, &Window, sizeof Window); ! (*func)(file, Deck, sizeof Deck); ! (*func)(file, &Discard, sizeof Discard); ! (*func)(file, Player, sizeof Player); if (func == read) { read(file, &temp, sizeof temp); Topcard = &Deck[temp]; --- 16,34 ----- int temp; ! (*func)(file, (char *)&Debug, sizeof Debug); ! (*func)(file, (char *)&Finished, sizeof Finished); ! (*func)(file, (char *)&Order, sizeof Order); ! (*func)(file, (char *)&End, sizeof End); ! (*func)(file, (char *)&On_exit, sizeof On_exit); ! (*func)(file, (char *)&Handstart, sizeof Handstart); ! (*func)(file, (char *)&Numgos, sizeof Numgos); ! (*func)(file, (char *)Numseen, sizeof Numseen); ! (*func)(file, (char *)&Play, sizeof Play); ! (*func)(file, (char *)&Window, sizeof Window); ! (*func)(file, (char *)Deck, sizeof Deck); ! (*func)(file, (char *)&Discard, sizeof Discard); ! (*func)(file, (char *)Player, sizeof Player); if (func == read) { read(file, (char *)&temp, sizeof temp); Topcard = &Deck[temp]; *************** *** 30,36 (*func)(file, &Discard, sizeof Discard); (*func)(file, Player, sizeof Player); if (func == read) { ! read(file, &temp, sizeof temp); Topcard = &Deck[temp]; if (Debug) { char buf[80]; --- 30,36 ----- (*func)(file, (char *)&Discard, sizeof Discard); (*func)(file, (char *)Player, sizeof Player); if (func == read) { ! read(file, (char *)&temp, sizeof temp); Topcard = &Deck[temp]; if (Debug) { char buf[80]; *************** *** 42,48 goto over; } if (strcmp(buf, "/dev/null") != 0) ! setbuf(outf, 0); } } else { --- 42,48 ----- goto over; } if (strcmp(buf, "/dev/null") != 0) ! setbuf(outf, (char *)0); } } else { *************** *** 47,52 } else { temp = Topcard - Deck; ! write(file, &temp, sizeof temp); } } --- 47,52 ----- } else { temp = Topcard - Deck; ! write(file, (char *)&temp, sizeof temp); } }