From 3942e87cd1495128dd47259f70e4e9ff729484e4 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Wed, 23 Apr 2014 20:02:02 -0700 Subject: [PATCH 01/16] Compiled atc game. Fixed include file for curses library. --- Makefile | 6 +- include/curses.h | 2 + src/games/Makefile | 4 +- src/games/atc/.gitignore | 2 + src/games/atc/Makefile | 39 +++-- src/games/atc/extern.c | 2 +- src/games/atc/extern.h | 28 +++- src/games/atc/grammar.y | 39 ++--- src/games/atc/graphics.c | 73 +++++---- src/games/atc/include.h | 25 +-- src/games/atc/input.c | 192 +++++++++++------------ src/games/atc/lex.l | 4 + src/games/atc/list.c | 6 +- src/games/atc/log.c | 56 +++---- src/games/atc/main.c | 325 +++++++++++++++++++-------------------- src/games/atc/update.c | 94 ++++++----- 16 files changed, 454 insertions(+), 443 deletions(-) create mode 100644 src/games/atc/.gitignore diff --git a/Makefile b/Makefile index 7a82752..91b5fc4 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ ALLDIRS = games/ sbin/ bin/ dev/ etc/ tmp/ lib/ libexec/ share/ include/ var/run/ var/log/ var/lock/ games/ games/lib/ include/sys/ \ include/machine/ include/arpa/ include/smallc/ \ include/smallc/sys/ share/misc/ share/smallc/ include/sys/ \ - games/lib/ + games/lib/ games/lib/atc/ BDEVS = dev/rd0!b0:0 dev/rd0a!b0:1 dev/rd0b!b0:2 dev/rd0c!b0:3 dev/rd0d!b0:4 BDEVS += dev/rd1!b1:0 dev/rd1a!b1:1 dev/rd1b!b1:2 dev/rd1c!b1:3 dev/rd1d!b1:4 BDEVS += dev/rd2!b2:0 dev/rd2a!b2:1 dev/rd2b!b2:2 dev/rd2c!b2:3 dev/rd2d!b2:4 @@ -194,11 +194,11 @@ else endif # TODO: make it relative to Target -installflash: +installflash: sudo pic32prog sys/pic32/fubarino/unix.hex # TODO: make it relative to Target -installboot: +installboot: sudo pic32prog sys/pic32/fubarino/bootloader.hex .profile: etc/root/dot.profile diff --git a/include/curses.h b/include/curses.h index 0370865..ba1e5e3 100644 --- a/include/curses.h +++ b/include/curses.h @@ -181,6 +181,8 @@ int waddstr (WINDOW *, char *); int wgetstr (WINDOW *, char *); int wdeleteln (WINDOW *); void mvcur(int ly, int lx, int y, int x); +void overwrite(WINDOW *win1, WINDOW *win2); +void wclrtobot(WINDOW *win); /* * Used to be in unctrl.h. diff --git a/src/games/Makefile b/src/games/Makefile index e20f0dc..130d803 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -11,8 +11,8 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # -SUBDIR = adventure backgammon battlestar rogue sail trek -# TODO: atc boggle btlgammon cribbage +SUBDIR = adventure atc backgammon battlestar rogue sail trek +# TODO: boggle btlgammon cribbage # fortune hangman hunt mille monop phantasia quiz robots # sail snake warp diff --git a/src/games/atc/.gitignore b/src/games/atc/.gitignore new file mode 100644 index 0000000..8130118 --- /dev/null +++ b/src/games/atc/.gitignore @@ -0,0 +1,2 @@ +atc +y.tab.h diff --git a/src/games/atc/Makefile b/src/games/atc/Makefile index 285e11c..95e5999 100644 --- a/src/games/atc/Makefile +++ b/src/games/atc/Makefile @@ -5,26 +5,31 @@ # # @(#)Makefile 5.1.2 (2.11BSD) 1999/10/25 # +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk -DESTDIR = -CFLAGS = -O -DSYSV -DDEST=\"${DESTDIR}/usr/games/lib/atc/\" -YFLAGS = -d -LIBS = -ll -lm -lcurses -ltermcap -OBJS = extern.o grammar.o input.o lex.o list.o log.o main.o tunable.o \ - graphics.o update.o +CFLAGS = -Os -g -Werror -Wall +CFLAGS += -DBSD -DDEST=\"/games/lib/atc/\" +#CFLAGS += -DSYSV -DDEST=\"games/\" +YFLAGS = -d +LEX = lex +LIBS = -lm -lcurses -ltermcap +OBJS = extern.o grammar.o input.o lex.o list.o log.o main.o tunable.o \ + graphics.o update.o -all: atc +all: atc -atc: ${OBJS} - ${CC} ${OBJS} ${LIBS} -o $@ +atc: $(OBJS) + $(CC) $(LDFLAGS) -o atc.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S atc.elf > atc.dis + $(SIZE) atc.elf + $(ELF2AOUT) atc.elf $@ && rm atc.elf clean: - rm -f *.o core atc grammar.c y.tab.h y.tab.c lex.yy.c lex.c + rm -f *.o *.0 *.elf atc *.elf *.dis tags *~ grammar.c lex.c y.tab.h -install: - -[ -d ${DESTDIR}/usr/games/lib/atc ] || mkdir ${DESTDIR}/usr/games/lib/atc - chmod 700 ${DESTDIR}/usr/games/lib/atc - chown games.bin ${DESTDIR}/usr/games/lib/atc - (cd games; install -c -o games -g bin -m 600 * ${DESTDIR}/usr/games/lib/atc) - install -s -o games -g bin -m 4700 atc ${DESTDIR}/usr/games/hide/atc - (cd ${DESTDIR}/usr/games; rm -f atc; ln -s dm atc; chown games.bin atc) +install: all + install atc $(DESTDIR)/games/ + mkdir -p ${DESTDIR}/games/lib/atc + cp -p games/* ${DESTDIR}/games/lib/atc diff --git a/src/games/atc/extern.c b/src/games/atc/extern.c index 203ee8b..94376e2 100644 --- a/src/games/atc/extern.c +++ b/src/games/atc/extern.c @@ -12,7 +12,7 @@ char GAMES[] = "Game_List", LOG[] = "ATC_scores"; -int clock, safe_planes, start_time, test_mode; +int clocktick, safe_planes, start_time, test_mode; char *file; diff --git a/src/games/atc/extern.h b/src/games/atc/extern.h index c4ef642..3590f1c 100644 --- a/src/games/atc/extern.h +++ b/src/games/atc/extern.h @@ -9,7 +9,7 @@ extern char GAMES[], LOG[], *file; -extern int clock, safe_planes, start_time, test_mode; +extern int clocktick, safe_planes, start_time, test_mode; extern FILE *filein, *fileout; @@ -22,3 +22,29 @@ extern struct sgttyb tty_start, tty_new; extern DISPLACEMENT displacement[MAXDIR]; extern PLANE *findplane(), *newplane(); + +int dir_no(int ch); +void ioclrtoeol(int pos); +void iomove(int pos); +void ioaddstr(int pos, char *str); +void ioclrtobot(void); +int getAChar(void); +void done_screen(void); +void redraw(void); +void ioerror(int pos, int len, char *str); +int number(int l); +void loser(PLANE *p, char *s); +void init_gr(void); +int yyparse(void); +void setup_screen(C_SCREEN *scp); +int addplane(void); +void log_score(int list_em); +void quit(int sig); +void update(int sig); +int getcommand(void); +void planewin(void); +int name(PLANE *p); +void erase_all(void); +void append(LIST *l, PLANE *p); +void delete(LIST *l, PLANE *p); +void draw_all(void); diff --git a/src/games/atc/grammar.y b/src/games/atc/grammar.y index 519bfd7..5290f5e 100644 --- a/src/games/atc/grammar.y +++ b/src/games/atc/grammar.y @@ -27,12 +27,15 @@ int errors = 0; int line = 1; + +int yylex(void); +int yyerror(char *s); %} %% file: bunch_of_defs { if (checkdefs() < 0) return (errors); } bunch_of_lines - { + { if (sp->num_exits + sp->num_airports < 2) yyerror("Need at least 2 airports and/or exits."); return (errors); @@ -83,7 +86,7 @@ hdef: else if ($3 < 3) return (yyerror("'height' is too small.")); else - sp->height = $3; + sp->height = $3; } ; @@ -95,7 +98,7 @@ wdef: else if ($3 < 3) return (yyerror("'width' is too small.")); else - sp->width = $3; + sp->width = $3; } ; @@ -133,7 +136,7 @@ Bpoint: + REALLOC) * sizeof (BEACON)); else sp->beacon = (BEACON *) realloc(sp->beacon, - (sp->num_beacons + REALLOC) * + (sp->num_beacons + REALLOC) * sizeof (BEACON)); if (sp->beacon == NULL) return (yyerror("No memory available.")); @@ -159,11 +162,11 @@ Epoint: if (sp->num_exits % REALLOC == 0) { if (sp->exit == NULL) - sp->exit = (EXIT *) malloc((sp->num_exits + + sp->exit = (EXIT *) malloc((sp->num_exits + REALLOC) * sizeof (EXIT)); else sp->exit = (EXIT *) realloc(sp->exit, - (sp->num_exits + REALLOC) * + (sp->num_exits + REALLOC) * sizeof (EXIT)); if (sp->exit == NULL) return (yyerror("No memory available.")); @@ -196,7 +199,7 @@ Apoint: + REALLOC) * sizeof(AIRPORT)); else sp->airport = (AIRPORT *) realloc(sp->airport, - (sp->num_airports + REALLOC) * + (sp->num_airports + REALLOC) * sizeof(AIRPORT)); if (sp->airport == NULL) return (yyerror("No memory available.")); @@ -223,7 +226,7 @@ Lline: { if (sp->num_lines % REALLOC == 0) { if (sp->line == NULL) - sp->line = (LINE *) malloc((sp->num_lines + + sp->line = (LINE *) malloc((sp->num_lines + REALLOC) * sizeof (LINE)); else sp->line = (LINE *) realloc(sp->line, @@ -242,14 +245,14 @@ Lline: ; %% -check_edge(x, y) +void check_edge(x, y) { - if (!(x == 0) && !(x == sp->width - 1) && + if (!(x == 0) && !(x == sp->width - 1) && !(y == 0) && !(y == sp->height - 1)) yyerror("edge value not on edge."); } -check_point(x, y) +void check_point(x, y) { if (x < 1 || x >= sp->width - 1) yyerror("X value out of range."); @@ -257,7 +260,7 @@ check_point(x, y) yyerror("Y value out of range."); } -check_linepoint(x, y) +void check_linepoint(x, y) { if (x < 0 || x >= sp->width) yyerror("X value out of range."); @@ -265,7 +268,7 @@ check_linepoint(x, y) yyerror("Y value out of range."); } -check_line(x1, y1, x2, y2) +void check_line(x1, y1, x2, y2) { int d1, d2; @@ -279,7 +282,7 @@ check_line(x1, y1, x2, y2) yyerror("Bad line endpoints."); } -yyerror(s) +int yyerror(char *s) { fprintf(stderr, "\"%s\": line %d: %s\n", file, line, s); errors++; @@ -287,7 +290,7 @@ yyerror(s) return (errors); } -check_edir(x, y, dir) +void check_edir(x, y, dir) { int bad = 0; @@ -299,7 +302,7 @@ check_edir(x, y, dir) y = 2; else if (y != 0) y = 1; - + switch (x * 10 + y) { case 00: if (dir != 3) bad++; break; case 01: if (dir < 1 || dir > 3) bad++; break; @@ -318,11 +321,11 @@ check_edir(x, y, dir) yyerror("Bad direction for entrance at exit."); } -check_adir(x, y, dir) +void check_adir(x, y, dir) { } -checkdefs() +int checkdefs() { int err = 0; diff --git a/src/games/atc/graphics.c b/src/games/atc/graphics.c index f655f89..d72a0b9 100644 --- a/src/games/atc/graphics.c +++ b/src/games/atc/graphics.c @@ -22,7 +22,7 @@ WINDOW *radar, *cleanradar, *credit, *input, *planes; -getAChar() +int getAChar() { #ifdef BSD return (getchar()); @@ -35,7 +35,7 @@ getAChar() #endif } -erase_all() +void erase_all() { PLANE *pp; @@ -49,7 +49,7 @@ erase_all() } } -draw_all() +void draw_all() { PLANE *pp; @@ -68,19 +68,37 @@ draw_all() fflush(stdout); } -init_gr() +void init_gr() { static char buffer[BUFSIZ]; initscr(); setbuf(stdout, buffer); input = newwin(INPUT_LINES, COLS - PLANE_COLS, LINES - INPUT_LINES, 0); - credit = newwin(INPUT_LINES, PLANE_COLS, LINES - INPUT_LINES, + credit = newwin(INPUT_LINES, PLANE_COLS, LINES - INPUT_LINES, COLS - PLANE_COLS); planes = newwin(LINES - INPUT_LINES, PLANE_COLS, 0, COLS - PLANE_COLS); } -setup_screen(scp) +void draw_line(w, x, y, lx, ly, s) + WINDOW *w; + char *s; +{ + int dx, dy; + + dx = SGN(lx - x); + dy = SGN(ly - y); + for (;;) { + wmove(w, y, x * 2); + waddstr(w, s); + if (x == lx && y == ly) + break; + x += dx; + y += dy; + } +} + +void setup_screen(scp) C_SCREEN *scp; { register int i, j; @@ -164,32 +182,14 @@ setup_screen(scp) wmove(radar, scp->airport[i].y, scp->airport[i].x * 2); waddstr(radar, str); } - + overwrite(radar, cleanradar); wrefresh(radar); wrefresh(credit); fflush(stdout); } -draw_line(w, x, y, lx, ly, s) - WINDOW *w; - char *s; -{ - int dx, dy; - - dx = SGN(lx - x); - dy = SGN(ly - y); - for (;;) { - wmove(w, y, x * 2); - waddstr(w, s); - if (x == lx && y == ly) - break; - x += dx; - y += dy; - } -} - -ioclrtoeol(pos) +void ioclrtoeol(pos) { wmove(input, 0, pos); wclrtoeol(input); @@ -197,14 +197,14 @@ ioclrtoeol(pos) fflush(stdout); } -iomove(pos) +void iomove(pos) { wmove(input, 0, pos); wrefresh(input); fflush(stdout); } -ioaddstr(pos, str) +void ioaddstr(pos, str) char *str; { wmove(input, 0, pos); @@ -213,14 +213,14 @@ ioaddstr(pos, str) fflush(stdout); } -ioclrtobot() +void ioclrtobot() { wclrtobot(input); wrefresh(input); fflush(stdout); } -ioerror(pos, len, str) +void ioerror(pos, len, str) char *str; { int i; @@ -234,7 +234,7 @@ ioerror(pos, len, str) fflush(stdout); } -quit() +void quit(int sig) { int c, y, x; #ifdef BSD @@ -271,10 +271,9 @@ quit() wmove(input, y, x); wrefresh(input); fflush(stdout); - return; } -planewin() +void planewin() { PLANE *pp; char *command(); @@ -289,7 +288,7 @@ planewin() #ifdef SYSV wclrtobot(planes); #endif - wprintw(planes, "Time: %-4d Safe: %d", clock, safe_planes); + wprintw(planes, "Time: %-4d Safe: %d", clocktick, safe_planes); wmove(planes, 2, 0); waddstr(planes, "pl dt comm"); @@ -317,7 +316,7 @@ planewin() fflush(stdout); } -loser(p, s) +void loser(p, s) PLANE *p; char *s; { @@ -351,7 +350,7 @@ loser(p, s) exit(0); } -redraw() +void redraw() { clear(); refresh(); @@ -370,7 +369,7 @@ redraw() } -done_screen() +void done_screen() { clear(); refresh(); diff --git a/src/games/atc/include.h b/src/games/atc/include.h index 084a3e5..66e3858 100644 --- a/src/games/atc/include.h +++ b/src/games/atc/include.h @@ -8,11 +8,20 @@ */ #include +#include #include -#ifdef SYSV +#include +#include +#include #include +#include +#include +#include +#ifdef SYSV +#include #endif #include +#include #ifdef BSD #include @@ -21,25 +30,17 @@ #endif #ifdef SYSV -#include -#include -#include -#include +#include #endif #include #include - #include -#ifdef SYSV -#define index strchr -#define rindex strrchr #define bcopy(a,b,c) memcpy((b), (a), (c)) #define bzero(a,b) memset((a), '\0', (b)) -#define srandom srand -#define random rand -#define sgttyb termio +#ifdef SYSV +#define sgttyb termios #define sg_erase c_cc[2] #define sg_kill c_cc[3] #endif diff --git a/src/games/atc/input.c b/src/games/atc/input.c index 7a31b54..6965900 100644 --- a/src/games/atc/input.c +++ b/src/games/atc/input.c @@ -6,11 +6,6 @@ * * For more info on this and all of my stuff, mail edjames@berkeley.edu. */ - -#ifndef lint -static char sccsid[] = "@(#)input.c 1.2 (Berkeley) 10/22/87"; -#endif not lint - #include "include.h" #define MAXRULES 6 @@ -56,8 +51,8 @@ typedef struct { #define NUMSTATES NUMELS(st) -char *setplane(), *circle(), *left(), *right(), *Left(), *Right(), - *beacon(), *ex_it(), *climb(), *descend(), *setalt(), *setrelalt(), +char *setplane(), *circle(), *left(), *right(), *Left(), *Right(), + *beacon(), *ex_it(), *climb(), *descend(), *setalt(), *setrelalt(), *benum(), *to_dir(), *rel_dir(), *delayb(), *mark(), *unmark(), *airport(), *turn(), *ignore(); @@ -67,17 +62,17 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane}, { CRTOKEN, -1, "", NULL }, #endif { HELPTOKEN, 12, " [a-z]", NULL }}, - state1[] = { { 't', 2, " turn", turn }, - { 'a', 3, " altitude:", NULL }, + state1[] = { { 't', 2, " turn", turn }, + { 'a', 3, " altitude:", NULL }, { 'c', 4, " circle", circle }, { 'm', 7, " mark", mark }, { 'u', 7, " unmark", unmark }, { 'i', 7, " ignore", ignore }, { HELPTOKEN, 12, " tacmui", NULL }}, - state2[] = { { 'l', 6, " left", left }, - { 'r', 6, " right", right }, + state2[] = { { 'l', 6, " left", left }, + { 'r', 6, " right", right }, { 'L', 4, " left 90", Left }, - { 'R', 4, " right 90", Right }, + { 'R', 4, " right 90", Right }, { 't', 11, " towards", NULL }, { 'w', 4, " to 0", to_dir }, { 'e', 4, " to 45", to_dir }, @@ -88,14 +83,14 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane}, { 'a', 4, " to 270", to_dir }, { 'q', 4, " to 315", to_dir }, { HELPTOKEN, 12, " lrLRt", NULL }}, - state3[] = { { '+', 10, " climb", climb }, - { 'c', 10, " climb", climb }, - { '-', 10, " descend", descend }, - { 'd', 10, " descend", descend }, + state3[] = { { '+', 10, " climb", climb }, + { 'c', 10, " climb", climb }, + { '-', 10, " descend", descend }, + { 'd', 10, " descend", descend }, { NUMTOKEN, 7, " %c000 feet", setalt }, { HELPTOKEN, 12, " +-cd[0-9]", NULL }}, - state4[] = { { '@', 9, " at", NULL }, - { 'a', 9, " at", NULL }, + state4[] = { { '@', 9, " at", NULL }, + { 'a', 9, " at", NULL }, { RETTOKEN, -1, "", NULL }, #ifdef SYSV { CRTOKEN, -1, "", NULL }, @@ -113,9 +108,9 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane}, { 'z', 4, " 225", rel_dir }, { 'a', 4, " 270", rel_dir }, { 'q', 4, " 315", rel_dir }, - { RETTOKEN, -1, "", NULL }, + { RETTOKEN, -1, "", NULL }, #ifdef SYSV - { CRTOKEN, -1, "", NULL }, + { CRTOKEN, -1, "", NULL }, #endif { HELPTOKEN, 12, " @a",NULL }}, state7[] = { { RETTOKEN, -1, "", NULL }, @@ -130,7 +125,7 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane}, { HELPTOKEN, 12, " b*", NULL }}, state10[] = { { NUMTOKEN, 7, " %c000 ft", setrelalt}, { HELPTOKEN, 12, " [0-9]", NULL }}, - state11[] = { { 'b', 8, " beacon #", beacon }, + state11[] = { { 'b', 8, " beacon #", beacon }, { '*', 8, " beacon #", beacon }, { 'e', 8, " exit #", ex_it }, { 'a', 8, " airport #", airport }, @@ -153,7 +148,7 @@ int level; int tval; int dest_type, dest_no, dir; -pop() +int pop() { if (level == 0) return (-1); @@ -167,7 +162,7 @@ pop() return (0); } -rezero() +void rezero() { iomove(0); @@ -179,7 +174,7 @@ rezero() strcpy(T_STR, ""); } -push(ruleno, ch) +void push(ruleno, ch) { int newstate, newpos; @@ -200,7 +195,77 @@ push(ruleno, ch) strcpy(T_STR, ""); } -getcommand() +int gettoken() +{ + while ((tval = getAChar()) == REDRAWTOKEN || tval == SHELLTOKEN) + { + if (tval == SHELLTOKEN) + { +#ifdef BSD + struct itimerval itv; + itv.it_value.tv_sec = 0; + itv.it_value.tv_usec = 0; + setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + int aval; + aval = alarm(0); +#endif + if (fork() == 0) /* child */ + { + char *shell, *base, *getenv(), *strrchr(); + + setuid(getuid()); /* turn off setuid bit */ + done_screen(); + + /* run user's favorite shell */ + if ((shell = getenv("SHELL")) != NULL) + { + base = strrchr(shell, '/'); + if (base == NULL) + base = shell; + else + base++; + execl(shell, base, (char*)0); + } + else + execl("/bin/sh", "sh", (char*)0); + + exit(0); /* oops */ + } + + wait(0); +#ifdef BSD + ioctl(fileno(stdin), TIOCSETP, &tty_new); + itv.it_value.tv_sec = 0; + itv.it_value.tv_usec = 1; + itv.it_interval.tv_sec = sp->update_secs; + itv.it_interval.tv_usec = 0; + setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + ioctl(fileno(stdin), TCSETAW, &tty_new); + alarm(aval); +#endif + } + redraw(); + } + + if (isdigit(tval)) + return (NUMTOKEN); + else if (isalpha(tval)) + return (ALPHATOKEN); + else + return (tval); +} + +void noise() +{ + putchar('\07'); + fflush(stdout); +} + +int getcommand() { int c, i, done; char *s, *(*func)(); @@ -235,7 +300,7 @@ getcommand() return (1); /* forced update */ dest_type = T_NODEST; - + for (i = 0; i < level; i++) { func = st[stack[i].state].rule[stack[i].rule].func; if (func != NULL) @@ -258,76 +323,6 @@ getcommand() return (0); } -noise() -{ - putchar('\07'); - fflush(stdout); -} - -gettoken() -{ - while ((tval = getAChar()) == REDRAWTOKEN || tval == SHELLTOKEN) - { - if (tval == SHELLTOKEN) - { -#ifdef BSD - struct itimerval itv; - itv.it_value.tv_sec = 0; - itv.it_value.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); -#endif -#ifdef SYSV - int aval; - aval = alarm(0); -#endif - if (fork() == 0) /* child */ - { - char *shell, *base, *getenv(), *strrchr(); - - setuid(getuid()); /* turn off setuid bit */ - done_screen(); - - /* run user's favorite shell */ - if ((shell = getenv("SHELL")) != NULL) - { - base = strrchr(shell, '/'); - if (base == NULL) - base = shell; - else - base++; - execl(shell, base, 0); - } - else - execl("/bin/sh", "sh", 0); - - exit(0); /* oops */ - } - - wait(0); -#ifdef BSD - ioctl(fileno(stdin), TIOCSETP, &tty_new); - itv.it_value.tv_sec = 0; - itv.it_value.tv_usec = 1; - itv.it_interval.tv_sec = sp->update_secs; - itv.it_interval.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); -#endif -#ifdef SYSV - ioctl(fileno(stdin), TCSETAW, &tty_new); - alarm(aval); -#endif - } - redraw(); - } - - if (isdigit(tval)) - return (NUMTOKEN); - else if (isalpha(tval)) - return (ALPHATOKEN); - else - return (tval); -} - char * setplane(c) { @@ -604,10 +599,9 @@ ignore(c) return (NULL); } -dir_no(ch) - char ch; +int dir_no(ch) { - int dir; + int dir = 0; switch (ch) { case 'w': dir = 0; break; diff --git a/src/games/atc/lex.l b/src/games/atc/lex.l index dde6315..d0b0520 100644 --- a/src/games/atc/lex.l +++ b/src/games/atc/lex.l @@ -8,9 +8,13 @@ * For more info on this and all of my stuff, mail edjames@berkeley.edu. */ +#define YY_NO_INPUT +#define YY_SKIP_YYWRAP #include "y.tab.h" +#define yywrap() 0 extern int line; %} +%option nounput %% [0-9]+ { yylval.ival = atoi(yytext); return(ConstOp); } height { return(HeightOp); } diff --git a/src/games/atc/list.c b/src/games/atc/list.c index 5498e59..d9d6f4f 100644 --- a/src/games/atc/list.c +++ b/src/games/atc/list.c @@ -15,7 +15,7 @@ newplane() return ((PLANE *) calloc(1, sizeof (PLANE))); } -append(l, p) +void append(l, p) LIST *l; PLANE *p; { @@ -53,13 +53,13 @@ append(l, p) } } -delete(l, p) +void delete(l, p) LIST *l; PLANE *p; { if (l->head == NULL) loser(p, "deleted a non-existant plane! Get help!"); - + if (l->head == p && l->tail == p) l->head = l->tail = NULL; else if (l->head == p) { diff --git a/src/games/atc/log.c b/src/games/atc/log.c index cf92d85..9f96c4e 100644 --- a/src/games/atc/log.c +++ b/src/games/atc/log.c @@ -6,14 +6,9 @@ * * For more info on this and all of my stuff, mail edjames@berkeley.edu. */ - -#ifndef lint -static char sccsid[] = "@(#)log.c 1.4 (Berkeley) 12/26/87"; -#endif not lint - #include "include.h" -compar(a, b) +int compar(a, b) SCORE *a, *b; { if (b->planes == a->planes) @@ -51,16 +46,14 @@ timestr(t) return (s); } -log_score(list_em) +void log_score(list_em) { register int i, fd, num_scores = 0, good, changed = 0, found = 0; struct passwd *pw; FILE *fp; - char *cp, logstr[BUFSIZ], *index(), *rindex(); + char *cp, logstr[BUFSIZ]; SCORE score[100], thisscore; -#ifdef SYSV struct utsname name; -#endif strcpy(logstr, SPECIAL_DIR); strcat(logstr, LOG); @@ -69,16 +62,16 @@ log_score(list_em) fd = open(logstr, O_CREAT|O_RDWR, 0644); if (fd < 0) { perror(logstr); - return (-1); + return; } /* - * This is done to take advantage of stdio, while still + * This is done to take advantage of stdio, while still * allowing a O_CREAT during the open(2) of the log file. */ fp = fdopen(fd, "r+"); if (fp == NULL) { perror(logstr); - return (-1); + return; } #ifdef BSD if (flock(fileno(fp), LOCK_EX) < 0) @@ -88,14 +81,14 @@ log_score(list_em) #endif { perror("flock"); - return (-1); + return; } for (;;) { good = fscanf(fp, "%s %s %s %d %d %d", - score[num_scores].name, - score[num_scores].host, + score[num_scores].name, + score[num_scores].host, score[num_scores].game, - &score[num_scores].planes, + &score[num_scores].planes, &score[num_scores].time, &score[num_scores].real_time); if (good != 6 || ++num_scores >= NUM_SCORES) @@ -103,32 +96,24 @@ log_score(list_em) } if (!test_mode && !list_em) { if ((pw = (struct passwd *) getpwuid(getuid())) == NULL) { - fprintf(stderr, + fprintf(stderr, "getpwuid failed for uid %d. Who are you?\n", getuid()); - return (-1); + return; } strcpy(thisscore.name, pw->pw_name); -#ifdef BSD - if (gethostname(thisscore.host, sizeof (thisscore.host)) < 0) { - perror("gethostname"); - return (-1); - } -#endif -#ifdef SYSV uname(&name); strcpy(thisscore.host, name.sysname); -#endif - cp = rindex(file, '/'); + cp = strrchr(file, '/'); if (cp == NULL) { fprintf(stderr, "log: where's the '/' in %s?\n", file); - return (-1); + return; } cp++; strcpy(thisscore.game, cp); - thisscore.time = clock; + thisscore.time = clocktick; thisscore.planes = safe_planes; thisscore.real_time = time(0) - start_time; @@ -153,7 +138,7 @@ log_score(list_em) if (num_scores < NUM_SCORES) num_scores++; bcopy(&score[i], - &score[num_scores - 1], + &score[num_scores - 1], sizeof (score[i])); bcopy(&thisscore, &score[i], sizeof (score[i])); @@ -163,7 +148,7 @@ log_score(list_em) } } if (!found && !changed && num_scores < NUM_SCORES) { - bcopy(&thisscore, &score[num_scores], + bcopy(&thisscore, &score[num_scores], sizeof (score[num_scores])); num_scores++; changed++; @@ -178,7 +163,7 @@ log_score(list_em) rewind(fp); for (i = 0; i < num_scores; i++) fprintf(fp, "%s %s %s %d %d %d\n", - score[i].name, score[i].host, + score[i].name, score[i].host, score[i].game, score[i].planes, score[i].time, score[i].real_time); } else { @@ -196,11 +181,11 @@ log_score(list_em) /* lock will evaporate upon close */ #endif fclose(fp); - printf("%2s: %-8s %-8s %-18s %4s %9s %4s\n", "#", "name", "host", + printf("%2s: %-8s %-8s %-18s %4s %9s %4s\n", "#", "name", "host", "game", "time", "real time", "planes safe"); puts("-------------------------------------------------------------------------------"); for (i = 0; i < num_scores; i++) { - cp = index(score[i].host, '.'); + cp = strchr(score[i].host, '.'); if (cp != NULL) *cp = '\0'; printf("%2d: %-8s %-8s %-18s %4d %9s %4d\n", i + 1, @@ -209,5 +194,4 @@ log_score(list_em) score[i].planes); } putchar('\n'); - return (0); } diff --git a/src/games/atc/main.c b/src/games/atc/main.c index 24218d7..a104595 100644 --- a/src/games/atc/main.c +++ b/src/games/atc/main.c @@ -9,169 +9,7 @@ #include "include.h" -main(ac, av) - char *av[]; -{ - int seed; - int f_usage = 0, f_list = 0, f_showscore = 0; - int f_printpath = 0; - char *file = NULL; - char *name, *ptr; -#ifdef BSD - struct itimerval itv; -#endif - extern int update(), quit(), log_score(); - extern char *default_game(), *okay_game(); - - start_time = seed = time(0); - - name = *av++; - while (*av) { -#ifndef SAVEDASH - if (**av == '-') - *++*av; - else - break; -#endif - ptr = *av++; - while (*ptr) { - switch (*ptr) { - case '?': - case 'u': - f_usage++; - break; - case 'l': - f_list++; - break; - case 's': - case 't': - f_showscore++; - break; - case 'p': - f_printpath++; - break; - case 'r': - seed = atoi(*av); - av++; - break; - case 'f': - case 'g': - file = *av; - av++; - break; - default: - fprintf(stderr, "Unknown option '%c'\n", *ptr, - name); - f_usage++; - break; - } - ptr++; - } - } - srandom(seed); - - if (f_usage) - fprintf(stderr, - "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n", - name); - if (f_showscore) - log_score(1); - if (f_list) - list_games(); - if (f_printpath) { - char buf[100]; - - strcpy(buf, SPECIAL_DIR); - buf[strlen(buf) - 1] = '\0'; - puts(buf); - } - - if (f_usage || f_showscore || f_list || f_printpath) - exit(0); - - if (file == NULL) - file = default_game(); - else - file = okay_game(file); - - if (file == NULL || read_file(file) < 0) - exit(1); - - init_gr(); - setup_screen(sp); - - addplane(); - - signal(SIGINT, quit); - signal(SIGQUIT, quit); -#ifdef BSD - signal(SIGTSTP, SIG_IGN); - signal(SIGSTOP, SIG_IGN); -#endif - signal(SIGHUP, log_score); - signal(SIGTERM, log_score); - -#ifdef BSD - ioctl(fileno(stdin), TIOCGETP, &tty_start); - bcopy(&tty_start, &tty_new, sizeof(tty_new)); - tty_new.sg_flags |= CBREAK; - tty_new.sg_flags &= ~ECHO; - ioctl(fileno(stdin), TIOCSETP, &tty_new); -#endif - -#ifdef SYSV - ioctl(fileno(stdin), TCGETA, &tty_start); - bcopy(&tty_start, &tty_new, sizeof(tty_new)); - tty_new.c_lflag &= ~ICANON; - tty_new.c_lflag &= ~ECHO; - tty_new.c_cc[VMIN] = 1; - tty_new.c_cc[VTIME] = 0; - ioctl(fileno(stdin), TCSETAW, &tty_new); -#endif - - signal(SIGALRM, update); - -#ifdef BSD - itv.it_value.tv_sec = 0; - itv.it_value.tv_usec = 1; - itv.it_interval.tv_sec = sp->update_secs; - itv.it_interval.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); -#endif -#ifdef SYSV - alarm(sp->update_secs); -#endif - - for (;;) { - if (getcommand() != 1) - planewin(); - else { -#ifdef BSD - itv.it_value.tv_sec = 0; - itv.it_value.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); -#endif -#ifdef SYSV - alarm(0); -#endif - - update(); - -#ifdef BSD - itv.it_value.tv_sec = sp->update_secs; - itv.it_value.tv_usec = 0; - itv.it_interval.tv_sec = sp->update_secs; - itv.it_interval.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); -#endif -#ifdef SYSV - alarm(sp->update_secs); -#endif - } - } -} - -read_file(s) +int read_file(s) char *s; { extern FILE *yyin; @@ -252,7 +90,7 @@ okay_game(s) return (ret); } -list_games() +int list_games() { FILE *fp; char line[256], games[256]; @@ -277,3 +115,162 @@ list_games() } return (0); } + +int main(ac, av) + char *av[]; +{ + int seed; + int f_usage = 0, f_list = 0, f_showscore = 0; + int f_printpath = 0; + char *file = NULL; + char *name, *ptr; +#ifdef BSD + struct itimerval itv; +#endif + + start_time = seed = time(0); + + name = *av++; + while (*av) { +#ifndef SAVEDASH + if (**av == '-') + (*av)++; + else + break; +#endif + ptr = *av++; + while (*ptr) { + switch (*ptr) { + case '?': + case 'u': + f_usage++; + break; + case 'l': + f_list++; + break; + case 's': + case 't': + f_showscore++; + break; + case 'p': + f_printpath++; + break; + case 'r': + seed = atoi(*av); + av++; + break; + case 'f': + case 'g': + file = *av; + av++; + break; + default: + fprintf(stderr, "Unknown option '%c'\n", *ptr); + f_usage++; + break; + } + ptr++; + } + } + srandom(seed); + + if (f_usage) + fprintf(stderr, + "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n", + name); + if (f_showscore) + log_score(1); + if (f_list) + list_games(); + if (f_printpath) { + char buf[100]; + + strcpy(buf, SPECIAL_DIR); + buf[strlen(buf) - 1] = '\0'; + puts(buf); + } + + if (f_usage || f_showscore || f_list || f_printpath) + exit(0); + + if (file == NULL) + file = default_game(); + else + file = okay_game(file); + + if (file == NULL || read_file(file) < 0) + exit(1); + + init_gr(); + setup_screen(sp); + + addplane(); + + signal(SIGINT, quit); + signal(SIGQUIT, quit); +#ifdef BSD + signal(SIGTSTP, SIG_IGN); + signal(SIGSTOP, SIG_IGN); +#endif + signal(SIGHUP, log_score); + signal(SIGTERM, log_score); + +#ifdef BSD + ioctl(fileno(stdin), TIOCGETP, &tty_start); + bcopy(&tty_start, &tty_new, sizeof(tty_new)); + tty_new.sg_flags |= CBREAK; + tty_new.sg_flags &= ~ECHO; + ioctl(fileno(stdin), TIOCSETP, &tty_new); +#endif + +#ifdef SYSV + ioctl(fileno(stdin), TCGETA, &tty_start); + bcopy(&tty_start, &tty_new, sizeof(tty_new)); + tty_new.c_lflag &= ~ICANON; + tty_new.c_lflag &= ~ECHO; + tty_new.c_cc[VMIN] = 1; + tty_new.c_cc[VTIME] = 0; + ioctl(fileno(stdin), TCSETAW, &tty_new); +#endif + + signal(SIGALRM, update); + +#ifdef BSD + itv.it_value.tv_sec = 0; + itv.it_value.tv_usec = 1; + itv.it_interval.tv_sec = sp->update_secs; + itv.it_interval.tv_usec = 0; + setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + alarm(sp->update_secs); +#endif + + for (;;) { + if (getcommand() != 1) + planewin(); + else { +#ifdef BSD + itv.it_value.tv_sec = 0; + itv.it_value.tv_usec = 0; + setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + alarm(0); +#endif + + update(0); + +#ifdef BSD + itv.it_value.tv_sec = sp->update_secs; + itv.it_value.tv_usec = 0; + itv.it_interval.tv_sec = sp->update_secs; + itv.it_interval.tv_usec = 0; + setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + alarm(sp->update_secs); +#endif + } + } +} diff --git a/src/games/atc/update.c b/src/games/atc/update.c index cd8713a..9d9d84b 100644 --- a/src/games/atc/update.c +++ b/src/games/atc/update.c @@ -6,24 +6,29 @@ * * For more info on this and all of my stuff, mail edjames@berkeley.edu. */ - -#if !defined(lint) && defined(DOSCCS) -static char sccsid[] = "@(#)update.c 1.3.1 (2.11BSD) 1999/10/25"; -#endif - #include "include.h" -update() +int too_close(p1, p2, dist) + PLANE *p1, *p2; +{ + if (ABS(p1->altitude - p2->altitude) <= dist && + ABS(p1->xpos - p2->xpos) <= dist && ABS(p1->ypos - p2->ypos) <= dist) + return (1); + else + return (0); +} + +void update(int sig) { int i, dir_diff, unclean; - PLANE *pp, *p1, *p2, *p; + PLANE *pp, *p1, *p2; sigset_t set, oset; sigemptyset(&set); sigaddset(&set, SIGINT); (void)sigprocmask(SIG_BLOCK, &set, &oset); - clock++; + clocktick++; erase_all(); /* put some planes in the air */ @@ -42,7 +47,7 @@ update() /* do altitude change and basic movement */ for (pp = air.head; pp != NULL; pp = pp->next) { /* type 0 only move every other turn */ - if (pp->plane_type == 0 && clock & 1) + if (pp->plane_type == 0 && clocktick & 1) continue; pp->fuel--; @@ -117,10 +122,10 @@ update() if (pp->xpos == sp->airport[i].x && pp->ypos == sp->airport[i].y) { if (pp->dest_type == T_AIRPORT) - loser(pp, + loser(pp, "landed at the wrong airport."); else - loser(pp, + loser(pp, "landed instead of exited."); } loser(pp, "crashed on the ground."); @@ -131,10 +136,10 @@ update() if (pp->xpos == sp->exit[i].x && pp->ypos == sp->exit[i].y) { if (pp->dest_type == T_EXIT) - loser(pp, + loser(pp, "exited via the wrong exit."); else - loser(pp, + loser(pp, "exited instead of landed."); } loser(pp, "illegally left the flight arena."); @@ -174,20 +179,35 @@ update() (void)sigprocmask(SIG_SETMASK, &oset, NULL); } +int dir_deg(d) +{ + switch (d) { + case 0: return (0); + case 1: return (45); + case 2: return (90); + case 3: return (135); + case 4: return (180); + case 5: return (225); + case 6: return (270); + case 7: return (315); + default: + return (-1); + } +} + char * command(pp) PLANE *pp; { static char buf[50], *bp, *comm_start; - char *index(); buf[0] = '\0'; bp = buf; - (void)sprintf(bp, "%c%d%c%c%d: ", name(pp), pp->altitude, + (void)sprintf(bp, "%c%d%c%c%d: ", name(pp), pp->altitude, (pp->fuel < LOWFUEL) ? '*' : ' ', (pp->dest_type == T_AIRPORT) ? 'A' : 'E', pp->dest_no); - comm_start = bp = index(buf, '\0'); + comm_start = bp = strchr(buf, '\0'); if (pp->altitude == 0) (void)sprintf(bp, "Holding @ A%d", pp->orig_no); else if (pp->new_dir >= MAXDIR || pp->new_dir < 0) @@ -195,19 +215,19 @@ command(pp) else if (pp->new_dir != pp->dir) (void)sprintf(bp, "%d", dir_deg(pp->new_dir)); - bp = index(buf, '\0'); + bp = strchr(buf, '\0'); if (pp->delayd) (void)sprintf(bp, " @ B%d", pp->delayd_no); - bp = index(buf, '\0'); - if (*comm_start == '\0' && + bp = strchr(buf, '\0'); + if (*comm_start == '\0' && (pp->status == S_UNMARKED || pp->status == S_IGNORED)) strcpy(bp, "---------"); return (buf); } /* char */ -name(p) +int name(p) PLANE *p; { if (p->plane_type == 0) @@ -216,17 +236,17 @@ name(p) return ('a' + p->plane_no); } -number(l) +int number(l) { if (l < 'a' && l > 'z' && l < 'A' && l > 'Z') return (-1); else if (l >= 'a' && l <= 'z') return (l - 'a'); - else + else return (l - 'A'); } -next_plane() +int next_plane() { static int last_plane = -1; PLANE *pp; @@ -254,7 +274,7 @@ next_plane() return (last_plane); } -addplane() +int addplane() { PLANE p, *pp, *p1; int i, num_starts, close, rnd, rnd2, pnum; @@ -337,29 +357,3 @@ findplane(n) return (pp); return (NULL); } - -too_close(p1, p2, dist) - PLANE *p1, *p2; -{ - if (ABS(p1->altitude - p2->altitude) <= dist && - ABS(p1->xpos - p2->xpos) <= dist && ABS(p1->ypos - p2->ypos) <= dist) - return (1); - else - return (0); -} - -dir_deg(d) -{ - switch (d) { - case 0: return (0); - case 1: return (45); - case 2: return (90); - case 3: return (135); - case 4: return (180); - case 5: return (225); - case 6: return (270); - case 7: return (315); - default: - return (-1); - } -} From d8305bc3742a31ca09a4968bae8187434013e671 Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 9 May 2014 21:00:43 -0700 Subject: [PATCH 02/16] Added words file - needed for games. --- share/dict/words | 25486 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 25486 insertions(+) create mode 100644 share/dict/words diff --git a/share/dict/words b/share/dict/words new file mode 100644 index 0000000..b810c33 --- /dev/null +++ b/share/dict/words @@ -0,0 +1,25486 @@ +a +AAA +AAAS +aardvark +Aarhus +Aaron +ABA +Ababa +aback +abacus +abalone +abandon +abase +abash +abate +abbas +abbe +abbey +abbot +Abbott +abbreviate +abc +abdicate +abdomen +abdominal +abduct +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberrate +abet +abetted +abetting +abeyance +abeyant +abhor +abhorred +abhorrent +abide +Abidjan +Abigail +abject +abjure +ablate +ablaze +able +ablution +abnegation +Abner +abnormal +Abo +aboard +abode +abolish +abolition +abominable +abominate +aboriginal +aborigine +aborning +abort +abound +about +above +aboveboard +aboveground +abovementioned +abrade +Abraham +Abram +Abramson +abrasion +abrasive +abreact +abreast +abridge +abridgment +abroad +abrogate +abrupt +abscess +abscissa +abscissae +abscond +absent +absentee +absenteeism +absentia +absentminded +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstinent +abstract +abstractor +abstruse +absurd +absurdum +abuilding +abundant +abusable +abuse +abusive +abut +abutted +abutting +abysmal +abyss +Abyssinia +AC +acacia +academia +academic +academician +academy +Acadia +acanthus +Acapulco +accede +accelerate +accelerometer +accent +accentual +accentuate +accept +acceptant +acceptor +access +accessible +accession +accessory +accident +accidental +accipiter +acclaim +acclamation +acclimate +accolade +accommodate +accompaniment +accompanist +accompany +accomplice +accomplish +accord +accordant +accordion +accost +account +accountant +accouter +Accra +accredit +accreditation +accretion +accrual +accrue +acculturate +accumulate +accuracy +accurate +accusation +accusative +accusatory +accuse +accustom +ace +acerbic +acerbity +acetaminophen +acetate +acetic +acetone +acetylene +Achaean +ache +achieve +Achilles +aching +achromatic +acid +acidic +acidify +acidulate +acidulous +Ackerman +Ackley +acknowledge +acknowledgeable +ACM +acme +acolyte +acorn +acoustic +acquaint +acquaintance +acquiesce +acquiescent +acquire +acquisition +acquisitive +acquit +acquittal +acquitting +acre +acreage +acrid +acrimonious +acrimony +acrobacy +acrobat +acrobatic +acronym +acrophobia +acrophobic +acropolis +across +acrylate +acrylic +act +Actaeon +actinic +actinide +actinium +actinolite +actinometer +activate +Acton +actor +actress +actual +actuarial +actuate +acuity +acumen +acupuncture +acute +acyclic +ad +Ada +adage +adagio +Adair +Adam +adamant +Adamson +adapt +adaptation +adaptive +add +addend +addenda +addendum +addict +Addis +Addison +addition +additive +addle +address +addressee +Addressograph +adduce +Adelaide +Adele +Adelia +Aden +adenine +adenoma +adenosine +adept +adequacy +adequate +adhere +adherent +adhesion +adhesive +adiabatic +adieu +adipic +Adirondack +adjacent +adject +adjectival +adjoin +adjoint +adjourn +adjudge +adjudicate +adjunct +adjust +adjutant +Adkins +Adler +Adlerian +administer +administrable +administrate +administratrix +admiral +admiralty +admiration +admire +admissible +admission +admit +admittance +admitted +admitting +admix +admixture +admonish +admonition +ado +adobe +adolescent +Adolph +Adolphus +Adonis +adopt +adoption +adoptive +adoration +adore +adorn +adposition +adrenal +adrenalin +adrenaline +Adrian +Adriatic +Adrienne +adrift +adroit +adsorb +adsorbate +adsorption +adsorptive +adulate +adult +adulterate +adulterous +adultery +advance +advantage +advantageous +advent +adventitious +adventure +adventurous +adverb +adverbial +adversary +adverse +advert +advertise +advice +advisable +advise +advisee +advisor +advisory +advocacy +advocate +Aegean +aegis +Aeneas +Aeneid +aeolian +Aeolus +aerate +aerial +aerie +Aerobacter +aerobic +aerodynamic +aerofoil +aerogene +aeronautic +aerosol +aerospace +Aeschylus +Aesop +aesthete +aesthetic +afar +affable +affair +affect +affectate +affectionate +afferent +affiance +affidavit +affiliate +affine +affirm +affirmation +affirmative +affix +afflict +affluent +afford +afforest +afforestation +affricate +affront +Afghan +Afghanistan +aficionado +afield +afire +aflame +afloat +afoot +aforementioned +aforesaid +aforethought +afraid +afreet +afresh +Africa +Afrikaans +Afrikaner +afro +aft +afterbirth +aftereffect +afterglow +afterimage +afterlife +aftermath +afternoon +afterthought +afterward +afterword +again +against +Agamemnon +agar +agate +Agatha +agave +age +Agee +agenda +agent +agglomerate +agglutinate +agglutinin +aggravate +aggregate +aggression +aggressive +aggressor +aggrieve +aghast +agile +agitate +agleam +Agnes +Agnew +agnomen +agnostic +ago +agog +agone +agony +agouti +agrarian +agree +agreeable +agreeing +agribusiness +Agricola +agricultural +agriculture +agrimony +agronomist +agronomy +ague +Agway +ah +ahead +ahem +Ahmedabad +ahoy +aid +Aida +aide +Aides +Aiken +ail +ailanthus +aile +aileron +aim +ain't +Ainu +air +airborne +airbrush +aircraft +airdrop +airedale +Aires +airfare +airfield +airflow +airframe +airlift +airline +airlock +airmail +airman +airmass +airmen +airpark +airplane +airport +airspeed +airstrip +airtight +airway +airy +aisle +Aitken +ajar +Ajax +AK +Akers +akin +Akron +AL +ala +Alabama +Alabamian +alabaster +alacrity +Aladdin +alai +Alameda +Alamo +alan +alarm +Alasdair +Alaska +Alastair +alb +alba +albacore +Albania +Albany +albatross +albeit +Alberich +Albert +Alberta +Alberto +albino +Albrecht +Albright +album +albumin +Albuquerque +Alcestis +alchemist +alchemy +Alcmena +Alcoa +alcohol +alcoholic +Alcott +alcove +Aldebaran +aldehyde +Alden +alder +alderman +aldermen +Aldrich +aldrin +ale +Alec +Aleck +aleph +alert +Aleutian +alewife +Alex +Alexander +Alexandra +Alexandre +Alexandria +Alexei +Alexis +alfalfa +alfonso +Alfred +Alfredo +alfresco +alga +algae +algaecide +algal +algebra +algebraic +Algenib +Alger +Algeria +Algiers +alginate +Algol +Algonquian +Algonquin +algorithm +algorithmic +Alhambra +Ali +alia +alias +alibi +Alice +Alicia +alien +alienate +alight +align +alike +alimentary +alimony +aliphatic +aliquot +Alison +Alistair +alive +alizarin +alkali +alkaline +alkaloid +all +Allah +Allan +allay +allegate +allege +Allegheny +allegiant +allegoric +allegory +Allegra +allegro +allele +allemand +Allen +Allentown +allergic +allergy +alleviate +alley +alleyway +alliance +alligator +Allis +Allison +alliterate +allmsgs +allocable +allocate +allot +allotropic +allotted +allotting +allow +allowance +alloy +allspice +Allstate +allude +allure +allusion +allusive +alluvial +alluvium +ally +allyl +Allyn +alma +Almaden +almagest +almanac +almighty +almond +almost +aloe +aloft +aloha +alone +along +alongside +aloof +aloud +alp +alpaca +alpenstock +Alpert +alpha +alphabet +alphabetic +alphanumeric +Alpheratz +Alphonse +alpine +already +Alsatian +also +Alsop +Altair +altar +alter +alterate +altercate +altern +alternate +althea +although +altimeter +altitude +alto +altogether +Alton +altruism +altruist +alum +alumina +aluminate +alumna +alumnae +alumni +alumnus +alundum +Alva +Alvarez +alveolar +alveoli +alveolus +Alvin +alway +alyssum +A&M +am +AMA +Amadeus +amalgam +amalgamate +amanita +amanuensis +amaranth +Amarillo +amass +amateur +amateurish +amatory +amaze +Amazon +ambassador +amber +ambiance +ambidextrous +ambient +ambiguity +ambiguous +ambition +ambitious +ambivalent +amble +ambrose +ambrosia +ambrosial +ambulant +ambulatory +ambuscade +ambush +Amelia +ameliorate +amen +amend +amende +Amerada +America +Americana +americium +Ames +amethyst +amethystine +Amharic +Amherst +ami +amicable +amid +amide +amidst +amigo +amino +aminobenzoic +amiss +amity +Amman +Ammerman +ammeter +ammo +ammonia +ammoniac +ammonite +ammonium +ammunition +amnesia +amnesiac +amnesty +amniocentesis +amniotic +Amoco +amoeba +amoebae +amoeboid +amok +among +amongst +amoral +amorphous +amort +Amos +amount +amp +amperage +ampere +ampersand +Ampex +amphetamine +amphibian +amphibious +amphibole +amphibology +amphioxis +ample +amplify +amplitude +amply +amputate +amra +Amsterdam +Amtrak +amulet +amuse +amy +amygdaloid +an +ana +Anabaptist +Anabel +anachronism +anachronistic +anaconda +Anacreon +anaerobic +anaglyph +anagram +Anaheim +Analects +analeptic +analgesic +analogous +analogue +analogy +analyses +analysis +analyst +analytic +anamorphic +anaphora +anaphoric +anaplasmosis +anarch +anarchic +anarchy +Anastasia +anastigmat +anastigmatic +anastomosis +anastomotic +anathema +Anatole +anatomic +anatomist +anatomy +ancestor +ancestral +ancestry +anchor +anchorage +anchorite +anchovy +ancient +ancillary +and +Andalusia +Andean +Andersen +Anderson +Andes +andesine +andesite +Andorra +Andover +Andre +Andrea +Andrei +Andrew +androgen +Andromache +Andromeda +Andy +anecdotal +anecdote +anemone +anent +anew +angel +Angela +Angeles +angelfish +angelic +Angelica +Angelina +Angeline +Angelo +anger +Angie +angiosperm +angle +Angles +Anglican +Anglo +Anglophobia +Angola +Angora +angry +angst +angstrom +anguish +angular +Angus +anharmonic +Anheuser +anhydride +anhydrite +anhydrous +ani +aniline +animadversion +animadvert +animal +animate +animism +animist +animosity +anion +anionic +anise +aniseikonic +anisotropic +anisotropy +Anita +Ankara +ankle +Ann +Anna +annal +Annale +Annalen +Annapolis +Anne +anneal +annelid +Annette +annex +Annie +annihilate +anniversary +annotate +announce +annoy +annoyance +annual +annuity +annul +annular +annuli +annulled +annulling +annulus +annum +annunciate +anode +anodic +anoint +anomalous +anomaly +anomie +anonymity +anonymous +anorexia +anorthic +anorthite +anorthosite +another +Anselm +Anselmo +ANSI +answer +ant +antacid +Antaeus +antagonism +antagonist +antarctic +Antarctica +Antares +ante +anteater +antebellum +antecedent +antedate +antelope +antenna +antennae +anterior +anthem +anther +anthology +Anthony +anthracite +anthracnose +anthropocentric +anthropogenic +anthropoid +anthropology +anthropomorphic +anthropomorphism +anti +antic +anticipate +anticipatory +anticonvulsant +Antietam +antigen +Antigone +antigorite +Antilles +antimony +Antioch +antipasto +antipathy +antiperspirant +antiphonal +antipodal +antipode +antiquarian +antiquary +antiquated +antique +antiquity +antisemite +antisemitic +antithetic +antivenin +antler +Antoine +Antoinette +Anton +Antonio +Antony +antonym +Antwerp +anus +anvil +anxiety +anxious +any +anybody +anybody'd +anyhow +anyone +anyplace +anything +anyway +anywhere +aorta +A&P +apache +apart +apartheid +apathetic +apathy +apatite +ape +aperiodic +aperture +apex +aphasia +aphasic +aphelion +aphid +aphorism +aphrodisiac +Aphrodite +apiary +apical +apices +apiece +aplomb +apocalypse +apocalyptic +Apocrypha +apocryphal +apogee +Apollo +Apollonian +apologetic +apologia +apology +apoplectic +apoplexy +apostasy +apostate +apostle +apostolic +apostrophe +apothecary +apothegm +apotheosis +Appalachia +appall +appanage +apparatus +apparel +apparent +apparition +appeal +appear +appearance +appeasable +appease +appellant +appellate +append +appendage +appendices +appendix +appertain +appetite +Appian +applaud +applause +apple +Appleby +applejack +Appleton +appliance +applicable +applicant +applicate +applique +apply +appoint +appointe +appointee +apport +apposite +apposition +appraisal +appraise +appreciable +appreciate +apprehend +apprehension +apprehensive +apprentice +apprise +approach +approbation +appropriable +appropriate +approval +approve +approximable +approximant +approximate +apricot +April +apron +apropos +apse +apt +aptitude +aqua +aquarium +Aquarius +aquatic +aqueduct +aqueous +aquifer +Aquila +Aquinas +AR +Arab +arabesque +Arabia +Arabic +Araby +Arachne +arachnid +Arapaho +arbiter +arbitrage +arbitrary +arbitrate +arboreal +arborescent +arboretum +arbutus +arc +arcade +Arcadia +arcana +arcane +arccos +arccosine +arch +archae +archaic +archaism +archangel +archbishop +archdiocese +archenemy +archery +archetype +archetypical +archfool +Archibald +Archimedes +archipelago +architect +architectonic +architectural +architecture +archival +archive +arcing +arclength +arcsin +arcsine +arctan +arctangent +arctic +Arcturus +Arden +ardent +arduous +are +area +areaway +areawide +arena +arenaceous +aren't +Arequipa +Ares +Argentina +Argentine +Argentinian +argillaceous +arginine +Argive +argo +argon +Argonaut +Argonne +argot +argue +argument +argumentation +argumentative +Argus +arhat +aria +Ariadne +Arianism +arid +Aries +arise +arisen +aristocracy +aristocrat +aristocratic +Aristotelean +Aristotelian +Aristotle +arithmetic +Arizona +ark +Arkansan +Arkansas +Arlen +Arlene +Arlington +arm +armada +armadillo +Armageddon +armament +Armata +armature +armchair +Armco +Armenia +armful +armhole +armillaria +armistice +armload +armoire +Armonk +Armour +armpit +Armstrong +army +Arnold +aroma +aromatic +arose +around +arousal +arouse +ARPA +arpeggio +arrack +Arragon +arraign +arrange +arrangeable +array +arrear +arrest +Arrhenius +arrival +arrive +arrogant +arrogate +arrow +arrowhead +arrowroot +arroyo +arsenal +arsenate +arsenic +arsenide +arsine +arson +art +Artemis +artemisia +arterial +arteriole +arteriolosclerosis +arteriosclerosis +artery +artful +arthritis +arthropod +Arthur +artichoke +article +articulate +articulatory +Artie +artifact +artifice +artificial +artillery +artisan +artistry +Arturo +artwork +arty +Aruba +arum +aryl +a's +as +asbestos +ascend +ascendant +ascension +ascent +ascertain +ascetic +ascii +ascomycetes +ascribe +ascription +aseptic +ash +ashame +ashen +Asher +Asheville +Ashland +Ashley +ashman +ashmen +Ashmolean +ashore +ashram +ashtray +ashy +Asia +Asiatic +aside +Asilomar +asinine +ask +askance +askew +asleep +asocial +asparagine +asparagus +aspartic +aspect +aspen +asperity +aspersion +asphalt +aspheric +asphyxiate +aspidistra +aspirant +aspirate +aspire +aspirin +asplenium +ass +assai +assail +assailant +Assam +assassin +assassinate +assault +assay +assemblage +assemble +assent +assert +assess +assessor +asset +assiduity +assiduous +assign +assignation +assignee +assimilable +assimilate +assist +assistant +associable +associate +assonant +assort +assuage +assume +assumption +assurance +assure +Assyria +Assyriology +Astarte +astatine +aster +asteria +asterisk +asteroid +asteroidal +asthma +astigmat +astigmatic +ASTM +astonish +Astor +Astoria +astound +astraddle +astral +astray +astride +astringent +astrologer +astrology +astronaut +astronautic +astronomer +astronomic +astronomy +astrophysical +astrophysicist +astrophysics +astute +Asuncion +asunder +asylum +asymmetry +asymptomatic +asymptote +asymptotic +asynchronous +asynchrony +at +Atalanta +atavism +atavistic +Atchison +ate +Athabascan +atheism +atheist +Athena +Athenian +Athens +athlete +athletic +athwart +Atkins +Atkinson +Atlanta +atlantes +atlantic +Atlantis +atlas +atmosphere +atmospheric +atoll +atom +atomic +atonal +atone +atonic +atop +Atreus +atrocious +atrocity +atrophic +atrophy +Atropos +AT&T +attach +attache +attack +attain +attainder +attempt +attend +attendant +attendee +attention +attentive +attenuate +attest +attestation +attic +Attica +attire +attitude +Attlee +attorney +attract +attribute +attribution +attributive +attrition +attune +Atwater +Atwood +atypic +Auberge +Aubrey +auburn +Auckland +auction +auctioneer +audacious +audacity +audible +audience +audio +audiotape +audiovisual +audit +audition +auditor +auditorium +auditory +Audrey +Audubon +Auerbach +Aug +Augean +auger +augite +augment +augmentation +augur +august +Augusta +Augustine +Augustus +auk +aunt +auntie +aura +aural +Aurelius +aureomycin +auric +Auriga +aurochs +aurora +Auschwitz +auspice +auspices +auspicious +austenite +austere +Austin +austral +Australia +Australis +australite +Austria +authentic +authenticate +author +authoritarian +authoritative +autism +autistic +auto +autobiography +autochthonous +autoclave +autocollimate +autocorrelate +autocracy +autocrat +autocratic +autograph +automat +automata +automate +automatic +automaton +automobile +automorphism +automotive +autonomic +autonomous +autonomy +autopilot +autopsy +autosuggestible +autotransformer +autumn +autumnal +auxiliary +auxin +avail +avalanche +avarice +avaricious +Ave +avenge +Aventine +avenue +aver +average +Avernus +averred +averring +averse +aversion +avert +Avery +Avesta +avian +aviary +aviate +aviatrix +avid +Avignon +avionic +Avis +Aviv +avocado +avocate +avocet +Avogadro +avoid +avoidance +Avon +avow +avowal +await +awake +awaken +award +aware +awash +away +awe +awesome +awful +awhile +awkward +awl +awn +awoke +awry +ax +axe +axial +axiology +axiom +axiomatic +axis +axisymmetric +axle +axolotl +axon +aye +Ayers +Aylesbury +AZ +azalea +Azerbaijan +azimuth +azimuthal +Azores +Aztec +Aztecan +azure +b +babbitt +babble +Babcock +babe +Babel +baboon +baby +Babylon +babysat +babysit +babysitting +baccalaureate +baccarat +bacchanalian +Bacchus +Bach +bachelor +bacilli +bacillus +back +backboard +backbone +backdrop +backfill +backgammon +background +backhand +backlash +backlog +backorder +backpack +backpedal +backplane +backplate +backscatter +backside +backslash +backslide +backspace +backstage +backstitch +backstop +backtrack +backup +backward +backwash +backwater +backwood +backyard +bacon +bacteria +bacterial +bacterium +bad +bade +Baden +badge +badinage +badland +badminton +Baffin +baffle +bag +bagatelle +baggage +bagging +baggy +Baghdad +Bagley +bagpipe +bah +Bahama +Bahrein +bail +Bailey +bailiff +bainite +Baird +bait +Baja +bake +Bakelite +Bakersfield +bakery +Bakhtiari +baklava +Baku +balance +Balboa +balcony +bald +baldpate +Baldwin +baldy +bale +baleen +baleful +Balfour +Bali +Balinese +balk +Balkan +balky +ball +ballad +Ballard +ballast +ballerina +ballet +balletomane +ballfield +balloon +ballot +ballroom +ballyhoo +balm +balmy +balsa +balsam +Baltic +Baltimore +Baltimorean +balustrade +Balzac +bam +Bamako +Bamberger +Bambi +bamboo +ban +Banach +banal +banana +Banbury +band +bandage +bandgap +bandit +bandpass +bandstand +bandstop +bandwagon +bandwidth +bandy +bane +baneberry +baneful +bang +bangkok +Bangladesh +bangle +Bangor +Bangui +banish +banister +banjo +bank +bankrupt +bankruptcy +bannock +banquet +banshee +bantam +banter +Bantu +Bantus +baobab +baptism +baptismal +Baptist +Baptiste +baptistery +bar +barb +Barbados +Barbara +barbarian +barbaric +barbarism +barbarous +barbecue +barbell +barber +barberry +barbital +barbiturate +Barbour +barbudo +Barcelona +Barclay +bard +bare +bareback +barefaced +barefoot +barfly +bargain +barge +baritone +barium +bark +barkeep +barley +Barlow +barn +Barnabas +barnacle +Barnard +Barnes +Barnet +Barnett +Barney +Barnhard +barnstorm +Barnum +barnyard +barometer +baron +baroness +baronet +baronial +barony +baroque +Barr +barrack +barracuda +barrage +barre +barrel +barren +Barrett +barrette +barricade +barrier +Barrington +barrow +Barry +Barrymore +Barstow +bartend +bartender +barter +Barth +Bartholomew +Bartlett +Bartok +Barton +barycentric +baryon +basal +basalt +basaltic +base +baseball +baseband +baseboard +Basel +baseline +baseman +basemen +baseplate +basepoint +bash +bashaw +bashful +basic +basidiomycetes +basil +basilar +basilica +basilisk +basin +basis +bask +basket +basketball +basketry +basophilic +Basque +bass +Bassett +bassi +bassinet +basso +bassoon +basswood +bastard +baste +bastion +bat +Batavia +batch +Batchelder +bate +bateau +Bateman +bater +bath +bathe +bathos +bathrobe +bathroom +bathtub +Bathurst +batik +baton +Bator +batt +battalion +Battelle +batten +battery +battle +battlefield +battlefront +battleground +batwing +bauble +baud +Baudelaire +Bauer +Bauhaus +Bausch +bauxite +Bavaria +bawd +bawdy +bawl +Baxter +bay +bayberry +Bayda +Bayesian +Baylor +bayonet +Bayonne +bayou +Bayport +Bayreuth +bazaar +be +beach +beachhead +beacon +bead +beadle +beady +beagle +beak +beam +bean +bear +bearberry +beard +Beardsley +bearish +beast +beastie +beat +beaten +beater +beatific +beatify +beatitude +beatnik +Beatrice +beau +Beaujolais +Beaumont +Beauregard +beauteous +beautiful +beautify +beauty +beaux +beaver +bebop +becalm +became +because +Bechtel +beck +becket +Beckman +beckon +Becky +become +bed +bedazzle +bedbug +bedevil +bedfast +bedfellow +Bedford +bedim +bedimmed +bedimming +bedlam +bedpost +bedraggle +bedridden +bedrock +bedroom +bedside +bedspread +bedspring +bedstraw +bedtime +bee +Beebe +beebread +beech +Beecham +beechwood +beef +beefsteak +beefy +beehive +been +beep +beer +beeswax +beet +Beethoven +beetle +befall +befallen +befell +befit +befitting +befog +befogging +before +beforehand +befoul +befriend +befuddle +beg +began +begat +beget +begetting +beggar +beggary +begging +begin +beginner +beginning +begonia +begot +begotten +begrudge +beguile +begun +behalf +behave +behead +beheld +behind +behold +beige +Beijing +being +Beirut +bel +Bela +belate +belch +Belfast +belfry +Belgian +Belgium +Belgrade +belie +belief +believe +belittle +Belize +bell +Bella +belladonna +Bellamy +Bellatrix +bellboy +belle +bellflower +bellhop +bellicose +belligerent +Bellingham +Bellini +bellman +bellmen +bellow +bellum +bellwether +belly +bellyache +bellyaching +bellyful +Belmont +Beloit +belong +belove +below +Belshazzar +belt +Beltsville +beluga +belvedere +BEMA +bemadden +beman +bemoan +bemuse +Ben +Benares +bench +benchmark +bend +Bendix +beneath +Benedict +Benedictine +benediction +Benedikt +benefactor +benefice +beneficent +beneficial +beneficiary +benefit +Benelux +benevolent +Bengal +Bengali +benight +benign +Benjamin +Bennett +Bennington +Benny +Benson +bent +Bentham +benthic +Bentley +Benton +Benz +Benzedrine +benzene +Beograd +Beowulf +beplaster +bequeath +bequest +berate +Berea +bereave +bereft +Berenices +Beresford +beret +berg +bergamot +Bergen +Bergland +Berglund +Bergman +Bergson +Bergstrom +beribbon +beriberi +Berkeley +berkelium +Berkowitz +Berkshire +Berlin +Berlioz +Berlitz +Berman +Bermuda +Bern +Bernadine +Bernard +Bernardino +Bernardo +berne +Bernet +Bernhard +Bernice +Bernie +Berniece +Bernini +Bernoulli +Bernstein +Berra +berry +berserk +Bert +berth +Bertha +Bertie +Bertram +Bertrand +Berwick +beryl +beryllium +beseech +beset +besetting +beside +besiege +besmirch +besotted +bespeak +bespectacled +bespoke +Bess +Bessel +Bessemer +Bessie +best +bestial +bestiary +bestir +bestirring +bestow +bestowal +bestseller +bestselling +bestubble +bet +beta +betatron +betel +Betelgeuse +beth +bethel +Bethesda +Bethlehem +bethought +betide +betoken +betony +betray +betrayal +betroth +betrothal +Betsey +Betsy +Bette +bettor +Betty +between +betwixt +bevel +beverage +Beverly +bevy +bewail +beware +bewhisker +bewilder +bewitch +bey +beyond +bezel +Bhagavadgita +bhoy +Bhutan +Bialystok +bianco +bias +biaxial +bib +bibb +Bible +biblical +bibliography +bibliophile +bicameral +bicarbonate +bicep +bichromate +bicker +biconcave +biconnected +bicycle +bid +bidden +biddy +bide +bidiagonal +bidirectional +bien +biennial +biennium +bifocal +bifurcate +big +bigamy +Bigelow +Biggs +bighorn +bigot +bigotry +biharmonic +bijection +bijective +bijouterie +bike +bikini +bilabial +bilateral +bilayer +Bilbao +bile +bilge +bilharziasis +bilinear +bilingual +bilk +bill +billboard +billet +billfold +billiard +Billie +Billiken +billion +billionth +billow +billy +Biltmore +bimetallic +bimetallism +Bimini +bimodal +bimolecular +bimonthly +bin +binary +binaural +bind +bindery +bindle +bindweed +bing +binge +Bingham +Binghamton +bingle +Bini +binocular +binomial +binuclear +biochemic +biography +biology +biometry +biopsy +biota +biotic +biotite +bipartisan +bipartite +bipedal +biplane +bipolar +biracial +birch +bird +birdbath +birdcage +birdie +birdseed +birdwatch +birefringent +Birgit +Birmingham +birth +birthday +birthplace +birthrate +birthright +biscuit +bisect +bisexual +bishop +bishopric +Bismarck +Bismark +bismuth +bison +bisque +Bissau +bistable +bistate +bit +bitch +bite +bitnet +bitt +bitten +bittern +bitternut +bitterroot +bittersweet +bitumen +bituminous +bitwise +bivalve +bivariate +bivouac +biz +bizarre +Bizet +blab +black +blackball +blackberry +blackbird +blackboard +blackbody +Blackburn +blacken +Blackfeet +Blackfoot +blackguard +blackjack +blackmail +Blackman +blackout +blacksmith +Blackstone +blacktop +Blackwell +bladder +bladdernut +bladderwort +blade +Blaine +Blair +Blake +blame +blameworthy +blanc +blanch +Blanchard +Blanche +bland +blandish +blank +blanket +blare +blaspheme +blasphemous +blasphemy +blast +blastula +blat +blatant +blather +Blatz +blaze +blazon +bleach +bleak +bleary +bleat +bled +bleed +Bleeker +blemish +blend +Blenheim +bless +blest +blew +blight +blimp +blind +blindfold +blink +Blinn +blip +bliss +blissful +blister +blithe +blitz +blitzkrieg +blizzard +bloat +blob +bloc +Bloch +block +blockade +blockage +blockhouse +blocky +bloke +Blomberg +Blomquist +blond +blonde +blood +bloodbath +bloodhound +bloodletting +bloodline +bloodroot +bloodshed +bloodshot +bloodstain +bloodstone +bloodstream +bloody +bloom +Bloomfield +Bloomington +bloop +blossom +blot +blotch +blouse +blow +blowfish +blown +blowup +blubber +bludgeon +blue +blueback +blueberry +bluebill +bluebird +bluebonnet +bluebook +bluebush +bluefish +bluegill +bluegrass +bluejacket +blueprint +bluestocking +bluet +bluff +bluish +Blum +Blumenthal +blunder +blunderbuss +blunt +blur +blurb +blurry +blurt +blush +bluster +blustery +blutwurst +Blvd +Blythe +BMW +boa +boar +board +boardinghouse +boast +boastful +boat +boathouse +boatload +boatman +boatmen +boatswain +boatyard +bob +Bobbie +bobbin +bobble +bobby +bobcat +bobolink +Boca +bock +bode +bodhisattva +bodice +Bodleian +body +bodybuilder +bodybuilding +bodyguard +Boeing +Boeotia +bog +bogey +bogeyman +bogeymen +bogging +boggle +boggy +Bogota +bogus +bogy +Bohemia +Bohr +boil +Bois +Boise +boisterous +bold +boldface +bole +boletus +bolivar +Bolivia +bolo +Bologna +bolometer +Bolshevik +Bolshevism +Bolshevist +Bolshoi +bolster +bolt +Bolton +Boltzmann +bomb +bombard +bombast +bombastic +Bombay +bombproof +bon +bona +bonanza +Bonaparte +Bonaventure +bond +bondage +bondsman +bondsmen +bone +bonfire +bong +bongo +Boniface +bonito +Bonn +bonnet +Bonneville +Bonnie +bonus +bony +bonze +boo +booby +boogie +book +bookbind +bookcase +bookend +bookie +bookish +bookkeep +booklet +bookmark +bookplate +bookseller +bookshelf +bookshelves +bookstore +bookworm +booky +boolean +boom +boomerang +boon +Boone +boor +boorish +boost +boot +Bootes +booth +bootleg +bootlegger +bootlegging +bootstrap +bootstrapping +booty +booze +bop +borate +borax +Bordeaux +bordello +Borden +border +borderland +borderline +bore +boreal +Borealis +Boreas +boredom +Borg +boric +Boris +born +borne +Borneo +boron +borosilicate +borough +Borroughs +borrow +Bosch +Bose +bosom +boson +bosonic +Bosporus +boss +bossy +Boston +Boswell +botanic +botanist +botany +botch +botfly +both +bothersome +Botswana +bottle +bottlecap +bottleneck +bottom +bottommost +botulin +botulism +Boucher +bouffant +bough +bought +bouillabaisse +bouillon +boulder +boulevard +bounce +bouncy +bound +boundary +bountiful +bounty +bouquet +Bourbaki +bourbon +bourgeois +bourgeoisie +bourn +boustrophedon +bout +boutique +bovine +bow +Bowditch +Bowdoin +bowel +Bowen +bowerbird +bowfin +bowie +bowl +bowline +bowman +bowmen +bowstring +box +boxcar +boxwood +boxy +boy +boyar +Boyce +boycott +Boyd +boyish +Boyle +Boylston +BP +brace +bracelet +bracken +bracket +brackish +bract +brad +Bradbury +Bradford +Bradley +Bradshaw +Brady +brae +brag +Bragg +bragging +Brahmaputra +Brahms +Brahmsian +braid +Braille +brain +Brainard +brainchild +brainstorm +brainwash +brainy +brake +brakeman +brakemen +bramble +bran +branch +brand +Brandeis +Brandenburg +brandish +Brandon +Brandt +brandy +brandywine +Braniff +brant +brash +Brasilia +brass +brassiere +brassy +bratwurst +Braun +bravado +brave +bravery +bravo +bravura +brawl +bray +brazen +brazier +Brazil +Brazilian +Brazzaville +breach +bread +breadboard +breadfruit +breadroot +breadth +break +breakage +breakaway +breakdown +breakfast +breakneck +breakoff +breakpoint +breakthrough +breakup +breakwater +bream +breast +breastplate +breastwork +breath +breathe +breathtaking +breathy +breccia +bred +breech +breed +breeze +breezy +Bremen +bremsstrahlung +Brenda +Brendan +Brennan +Brenner +Brent +Brest +brethren +Breton +Brett +breve +brevet +brevity +brew +brewery +Brewster +Brian +briar +bribe +bribery +Brice +brick +brickbat +bricklayer +bricklaying +bridal +bride +bridegroom +bridesmaid +bridge +bridgeable +bridgehead +Bridgeport +Bridget +Bridgetown +Bridgewater +bridgework +bridle +Brie +brief +briefcase +brig +brigade +brigadier +brigand +brigantine +Briggs +Brigham +bright +brighten +Brighton +brilliant +Brillouin +brim +brimful +brimstone +Brindisi +brindle +brine +bring +brink +brinkmanship +briny +Brisbane +brisk +bristle +bristlecone +bristly +Bristol +Britain +Britannic +Britannica +britches +British +Briton +Brittany +Britten +brittle +broach +broad +broadcast +broaden +broadloom +broadminded +broadside +Broadway +brocade +broccoli +brochure +Brock +brockle +Broglie +broil +broke +broken +brokerage +Bromfield +bromide +bromine +Bromley +bronchi +bronchial +bronchiolar +bronchiole +bronchitis +bronchus +bronco +Brontosaurus +Bronx +bronze +bronzy +brood +broody +brook +Brooke +Brookhaven +Brookline +Brooklyn +brookside +broom +broomcorn +broth +brothel +brother +brought +brouhaha +brow +browbeaten +brown +Browne +Brownell +Brownian +brownie +brownish +browse +Bruce +brucellosis +Bruckner +Bruegel +bruise +bruit +Brumidi +brunch +brunette +Brunhilde +Bruno +Brunswick +brunt +brush +brushfire +brushstroke +brushwork +brushy +brusque +Brussels +brutal +brute +Bryan +Bryant +Bryce +Bryn +bryophyta +bryophyte +bryozoa +b's +BSTJ +BTL +bub +bubble +bubonic +buccaneer +Buchanan +Bucharest +Buchenwald +Buchwald +buck +buckaroo +buckboard +bucket +bucketful +buckeye +buckhorn +buckle +Buckley +Bucknell +buckshot +buckskin +buckthorn +buckwheat +bucolic +bud +Budapest +Budd +Buddha +Buddhism +Buddhist +buddy +budge +budget +budgetary +Budweiser +Buena +Buenos +buff +buffalo +buffet +bufflehead +buffoon +bug +bugaboo +bugeyed +bugging +buggy +bugle +Buick +build +buildup +built +builtin +Bujumbura +bulb +bulblet +bulbous +Bulgaria +bulge +bulk +bulkhead +bulky +bull +bulldog +bulldoze +bullet +bulletin +bullfinch +bullfrog +bullhead +bullhide +bullish +bullock +bullrush +bullseye +bullwhack +bully +bullyboy +bulrush +bulwark +bum +bumble +bumblebee +bump +bumpkin +bumptious +bumpy +bun +bunch +Bundestag +bundle +Bundoora +bundy +bungalow +bungle +bunk +bunkmate +bunny +Bunsen +bunt +Bunyan +buoy +buoyant +burbank +Burch +burden +burdensome +burdock +bureau +bureaucracy +bureaucrat +bureaucratic +buret +burette +burg +burgeon +burgess +burgher +burglar +burglarproof +burglary +Burgundian +Burgundy +burial +Burke +burl +burlap +burlesque +burley +Burlington +burly +Burma +Burmese +burn +Burnett +Burnham +burnish +burnout +Burnside +burnt +burp +Burr +burro +Burroughs +burrow +bursitis +burst +bursty +Burt +Burton +Burtt +Burundi +bury +bus +busboy +Busch +bush +bushel +bushland +bushmaster +Bushnell +bushwhack +bushy +business +businessman +businessmen +businesswoman +businesswomen +busload +buss +bust +bustard +bustle +busy +busywork +but +butadiene +butane +butch +butchery +butene +buteo +butler +butt +butte +butterball +buttercup +butterfat +Butterfield +butterfly +buttermilk +butternut +butterscotch +buttery +buttock +button +buttonhole +buttonweed +buttress +Buttrick +butyl +butyrate +butyric +buxom +Buxtehude +Buxton +buy +buzz +buzzard +buzzing +buzzword +buzzy +by +bye +bygone +bylaw +byline +bypass +bypath +byproduct +Byrd +Byrne +byroad +Byron +Byronic +bystander +byte +byway +byword +Byzantine +Byzantium +c +CA +cab +cabal +cabana +cabaret +cabbage +cabdriver +cabin +cabinet +cabinetmake +cabinetry +cable +Cabot +cacao +cachalot +cache +caching +cackle +CACM +cacophonist +cacophonous +cacophony +cacti +cactus +cadaver +cadaverous +caddis +caddy +cadent +cadenza +cadet +Cadillac +cadmium +cadre +Cady +Caesar +Caesarian +cafe +cafeteria +cage +cagey +Cahill +cahoot +caiman +Cain +Caine +cairn +Cairo +cajole +Cajun +cake +Cal +calabash +Calais +calamitous +calamity +calamus +calcareous +calcify +calcite +calcium +calculable +calculate +calculi +calculus +Calcutta +Calder +caldera +Caldwell +Caleb +calendar +calendrical +calf +calfskin +Calgary +Calhoun +caliber +calibrate +calibre +calico +California +californium +caliper +caliph +caliphate +calisthenic +Calkins +call +calla +Callaghan +Callahan +calligraph +calligraphy +calliope +Callisto +callosity +callous +callus +calm +caloric +calorie +calorimeter +Calumet +calumniate +calumny +Calvary +calve +Calvert +Calvin +calypso +calyx +cam +camaraderie +camber +Cambodia +Cambrian +cambric +Cambridge +Camden +came +camel +camelback +camellia +camelopard +Camelot +Camembert +cameo +camera +cameraman +cameramen +Cameron +Cameroon +Cameroun +camilla +Camille +Camino +camouflage +camp +campaign +campanile +Campbell +campfire +campground +campion +campsite +campus +can +Canaan +Canada +Canadian +canal +canary +Canaveral +Canberra +cancel +cancellate +cancelled +cancelling +cancer +cancerous +candela +candelabra +candid +candidacy +candidate +Candide +candle +candlelight +candlestick +candlewick +candy +cane +Canfield +canine +Canis +canister +canker +cankerworm +canna +cannabis +cannel +cannery +cannibal +cannister +cannon +cannonball +cannot +canny +canoe +canoeist +Canoga +canon +canonic +Canopus +canopy +can't +cant +Cantabrigian +cantaloupe +canteen +Canterbury +canterelle +canticle +cantilever +cantle +canto +canton +Cantonese +cantor +canvas +canvasback +canvass +canyon +cap +capacious +capacitance +capacitate +capacitive +capacitor +capacity +cape +capella +caper +Capetown +capillary +Capistrano +capita +capital +capitol +Capitoline +capitulate +capo +caprice +capricious +Capricorn +capsize +capstan +capstone +capsule +captain +captaincy +caption +captious +captivate +captive +captor +capture +capuchin +Caputo +capybara +car +carabao +Caracas +caramel +carapace +caravan +caraway +carbide +carbine +carbohydrate +Carboloy +carbon +carbonaceous +carbonate +Carbondale +Carbone +carbonic +Carboniferous +carbonium +carbonyl +carborundum +carboxy +carboxylic +carboy +carbuncle +carcass +carcinogen +carcinogenic +carcinoma +card +cardamom +cardboard +cardiac +Cardiff +cardigan +cardinal +cardioid +cardiology +cardiovascular +care +careen +career +carefree +careful +caress +caret +caretaker +careworn +Carey +Cargill +cargo +cargoes +Carib +Caribbean +caribou +caricature +Carl +Carla +Carleton +Carlin +Carlisle +Carlo +carload +Carlsbad +Carlson +Carlton +Carlyle +Carmela +Carmen +Carmichael +carmine +carnage +carnal +carnation +carne +Carnegie +carney +carnival +carob +carol +Carolina +Caroline +Carolingian +Carolinian +Carolyn +carouse +carousel +carp +carpal +Carpathia +carpenter +carpentry +carpet +carpetbag +carpetbagger +carpetbagging +carport +Carr +carrageen +Carrara +carrel +carriage +Carrie +carrion +Carroll +carrot +Carruthers +carry +carryover +Carson +cart +carte +cartel +Cartesian +Carthage +cartilage +cartilaginous +cartographer +cartography +carton +cartoon +cartridge +cartwheel +Caruso +carve +carven +Casanova +casbah +cascade +cascara +case +casebook +casein +casework +Casey +cash +cashew +cashier +cashmere +casino +cask +casket +Cassandra +cassava +casserole +cassette +Cassiopeia +Cassius +cassock +cast +castanet +caste +casteth +castigate +Castillo +castle +castor +castrate +Castro +casual +casualty +cat +cataclysmic +cataleptic +Catalina +catalogue +Catalonia +catalpa +catalysis +catalyst +catalytic +catapult +cataract +catastrophe +catastrophic +catatonia +catatonic +catawba +catbird +catch +catchup +catchword +catchy +catechism +categoric +category +catenate +cater +caterpillar +catfish +catharsis +cathedral +Catherine +Catherwood +catheter +cathode +cathodic +catholic +Cathy +cation +cationic +catkin +catnip +Catskill +catsup +cattail +cattle +cattleman +cattlemen +catwalk +Caucasian +Caucasus +Cauchy +caucus +caudal +caught +cauliflower +caulk +causal +causate +cause +caustic +caution +cautionary +cautious +cavalcade +cavalier +cavalry +cave +caveat +caveman +cavemen +Cavendish +cavern +cavernous +caviar +cavil +cavilling +Caviness +cavort +caw +cayenne +Cayley +Cayuga +CBS +CDC +cease +ceasefire +Cecil +Cecilia +Cecropia +cedar +cede +cedilla +Cedric +ceil +celandine +Celanese +Celebes +celebrant +celebrate +celebratory +celebrity +celerity +celery +celesta +celestial +Celia +cell +cellar +cellophane +cellular +celluloid +cellulose +Celsius +Celt +Celtic +cement +cemetery +Cenozoic +censor +censorial +censure +census +cent +centaur +centenary +centennial +centerline +centerpiece +centigrade +centipede +central +centrex +centric +centrifugal +centrifugate +centrifuge +centripetal +centrist +centroid +centum +century +Cepheus +ceramic +ceramium +Cerberus +cereal +cerebellum +cerebral +cerebrate +ceremonial +ceremonious +ceremony +Ceres +cereus +cerise +cerium +CERN +certain +certainty +certificate +certify +certiorari +certitude +cerulean +Cervantes +cervix +Cesare +cesium +cessation +cession +Cessna +cetacean +cetera +Cetus +Ceylon +Cezanne +cf +Chablis +Chad +Chadwick +chafe +chaff +chagrin +chain +chair +chairlady +chairman +chairmen +chairperson +chairwoman +chairwomen +chaise +chalcedony +chalcocite +chalice +chalk +chalkline +chalky +challenge +Chalmers +chamber +chamberlain +chambermaid +chameleon +chamfer +chamois +chamomile +champ +champagne +Champaign +champion +Champlain +chance +chancel +chancellor +chancery +chancy +chandelier +Chandigarh +chandler +Chang +change +changeable +changeover +channel +chanson +chant +chantey +Chantilly +chantry +Chao +chaos +chaotic +chap +chaparral +chapati +chapel +chaperon +chaperone +chaplain +Chaplin +Chapman +chapter +char +character +characteristic +charcoal +charcuterie +chard +charge +chargeable +chariot +charisma +charismatic +charitable +charity +Charlemagne +Charles +Charleston +Charley +Charlie +Charlotte +Charlottesville +charm +Charon +chart +Charta +Chartres +chartreuse +chartroom +Charybdis +chase +chasm +chassis +chaste +chastise +chastity +chat +chateau +chateaux +Chatham +Chattanooga +chattel +chatty +Chaucer +chauffeur +Chauncey +Chautauqua +chauvinism +chauvinist +chaw +cheap +cheat +cheater +check +checkbook +checkerberry +checkerboard +checklist +checkout +checkpoint +checksum +checksummed +checksumming +checkup +Cheddar +cheek +cheekbone +cheeky +cheer +cheerful +cheerleader +cheery +cheese +cheesecake +cheesecloth +cheesemaking +cheesy +cheetah +chef +chelate +Chelsea +chemic +chemise +chemisorb +chemisorption +chemist +chemistry +chemotherapy +Chen +Cheney +chenille +cherish +Cherokee +cherry +chert +cherub +cherubim +Cheryl +Chesapeake +Cheshire +chess +chest +Chester +Chesterton +chestnut +chevalier +Chevrolet +chevron +chevy +chew +chewy +Cheyenne +chi +Chiang +chianti +chic +Chicago +Chicagoan +chicanery +Chicano +chick +chickadee +chicken +chickpea +chickweed +chicory +chide +chief +chiefdom +chieftain +chiffon +chigger +chignon +chilblain +child +childbearing +childbirth +childish +childrearing +children +Chile +chili +chill +chilly +chime +chimera +chimeric +Chimique +chimney +chimpanzee +chin +china +Chinaman +Chinamen +Chinatown +chinch +chinchilla +chine +Chinese +chink +Chinook +chinquapin +chintz +chintzy +chip +chipboard +chipmunk +Chippendale +chiropractor +chirp +chisel +Chisholm +chit +chitin +chitinous +chiton +chivalrous +chivalry +chive +Chloe +chlorate +chlordane +chloride +chlorine +chloroform +chlorophyll +chloroplast +chloroplatinate +chock +chocolate +Choctaw +choice +choir +choirmaster +choke +chokeberry +cholera +cholesterol +choline +cholinesterase +chomp +Chomsky +chondrite +choose +choosy +chop +Chopin +choppy +chopstick +choral +chorale +chord +chordal +chordata +chordate +chore +choreograph +choreography +chorine +chortle +chorus +choryza +chose +chosen +Chou +chow +chowder +Chris +Christ +christen +Christendom +Christensen +Christenson +Christian +Christiana +Christianson +Christie +Christina +Christine +Christmas +Christoffel +Christoph +Christopher +Christy +chromate +chromatic +chromatin +chromatogram +chromatograph +chromatography +chrome +chromic +chromium +chromosomal +chromosome +chromosphere +chronic +chronicle +chronograph +chronography +chronology +chrysalis +chrysanthemum +Chrysler +chrysolite +chub +chubby +chuck +chuckle +chuckwalla +chuff +chug +chugging +chum +chummy +chump +Chungking +chunk +chunky +church +churchgoer +churchgoing +Churchill +Churchillian +churchman +churchmen +churchwoman +churchwomen +churchyard +churn +chute +chutney +CIA +cicada +Cicero +Ciceronian +cider +cigar +cigarette +cilia +ciliate +cinch +Cincinnati +cinder +Cinderella +Cindy +cinema +cinematic +Cinerama +cinnabar +cinnamon +cinquefoil +cipher +circa +circadian +Circe +circle +circlet +circuit +circuitous +circuitry +circulant +circular +circulate +circulatory +circumcircle +circumcise +circumcision +circumference +circumferential +circumflex +circumlocution +circumpolar +circumscribe +circumscription +circumspect +circumsphere +circumstance +circumstantial +circumvent +circumvention +circus +cistern +cit +citadel +citation +cite +citizen +citizenry +citrate +citric +Citroen +citron +citrus +city +cityscape +citywide +civet +civic +civil +civilian +clad +cladophora +claim +claimant +Claire +clairvoyant +clam +clamber +clammy +clamp +clamshell +clan +clandestine +clang +clank +clannish +clap +clapboard +Clapeyron +Clara +Clare +Claremont +Clarence +Clarendon +claret +clarify +clarinet +clarity +Clark +Clarke +clash +clasp +class +classic +classificatory +classify +classmate +classroom +classy +clatter +clattery +Claude +Claudia +Claudio +Claus +clause +Clausen +Clausius +claustrophobia +claustrophobic +clavicle +claw +clay +Clayton +clean +cleanse +cleanup +clear +clearance +clearheaded +Clearwater +cleat +cleavage +cleave +clef +cleft +Clemens +clement +Clemson +clench +clergy +clergyman +clergymen +cleric +clerk +Cleveland +clever +cliche +click +client +clientele +cliff +cliffhang +Clifford +Clifton +climactic +climate +climatic +climatology +climax +climb +clime +clinch +cling +clinic +clinician +clink +Clint +Clinton +Clio +clip +clipboard +clique +clitoris +Clive +cloaca +cloacal +cloak +cloakroom +clobber +clock +clockwatcher +clockwise +clockwork +clod +cloddish +clog +clogging +cloister +clomp +clone +clonic +close +closet +closeup +closure +clot +cloth +clothbound +clothe +clothesbrush +clotheshorse +clothesline +clothesman +clothesmen +clothier +Clotho +cloture +cloud +cloudburst +cloudy +clout +clove +clown +clownish +cloy +club +clubhouse +clubroom +cluck +clue +Cluj +clump +clumsy +clung +cluster +clutch +clutter +Clyde +Clytemnestra +CO +co +coach +coachman +coachmen +coachwork +coadjutor +coagulable +coagulate +coal +coalesce +coalescent +coalition +coarse +coarsen +coast +coastal +coastline +coat +Coates +coattail +coauthor +coax +coaxial +cob +cobalt +Cobb +cobble +cobblestone +Cobol +cobra +cobweb +coca +cocaine +coccidiosis +cochineal +cochlea +Cochran +Cochrane +cock +cockatoo +cockcrow +cockeye +cockfight +cockle +cocklebur +cockleshell +cockpit +cockroach +cocksure +cocktail +cocky +coco +cocoa +coconut +cocoon +cod +coda +Coddington +coddle +code +codebreak +codeposit +codetermine +codeword +codex +codfish +codicil +codify +codomain +codon +codpiece +Cody +coed +coeditor +coeducation +coefficient +coequal +coerce +coercible +coercion +coercive +coevolution +coexist +coexistent +coextensive +cofactor +coffee +coffeecup +coffeepot +coffer +Coffey +coffin +Coffman +cog +cogent +cogitate +cognac +cognate +cognition +cognitive +cognoscenti +Cohen +cohere +coherent +cohesion +cohesive +Cohn +cohomology +cohort +cohosh +coiffure +coil +coin +coinage +coincide +coincident +coincidental +coke +col +cola +colander +colatitude +Colby +cold +coldhearted +Cole +Coleman +Coleridge +Colette +coleus +Colgate +colic +colicky +coliform +coliseum +collaborate +collage +collagen +collapse +collapsible +collar +collarbone +collard +collate +collateral +colleague +collect +collectible +collector +college +collegian +collegiate +collet +collide +collie +Collier +collimate +collinear +Collins +collision +collocate +colloidal +Colloq +colloquia +colloquial +colloquium +colloquy +collude +collusion +cologne +Colombia +Colombo +colon +colonel +colonial +colonist +colonnade +colony +Colorado +colorate +coloratura +colorimeter +colossal +Colosseum +colossi +colossus +colt +coltish +coltsfoot +Columbia +columbine +Columbus +column +columnar +colza +coma +Comanche +comatose +comb +combat +combatant +combatted +combinate +combinatorial +combinatoric +combine +combustible +combustion +come +comeback +comedian +comedy +comestible +comet +cometary +cometh +comfort +comic +Cominform +comma +command +commandant +commandeer +commando +commemorate +commend +commendation +commendatory +commensal +commensurable +commensurate +comment +commentary +commentator +commerce +commercial +commingle +commiserate +commissariat +commissary +commission +commit +committable +committal +committed +committee +committeeman +committeemen +committeewoman +committeewomen +committing +commodious +commodity +commodore +common +commonality +commonplace +commonweal +commonwealth +commotion +communal +commune +communicable +communicant +communicate +communion +communique +commutate +commute +compact +compactify +Compagnie +companion +companionway +company +comparative +comparator +compare +comparison +compartment +compass +compassion +compassionate +compatible +compatriot +compel +compellable +compelled +compelling +compendia +compendium +compensable +compensate +compensatory +compete +competent +competition +competitive +competitor +compilation +compile +complacent +complain +complainant +complaint +complaisant +complement +complementarity +complementary +complementation +complete +completion +complex +complexion +compliant +complicate +complicity +compliment +complimentary +compline +comply +component +componentry +comport +compose +composite +composition +compositor +compost +composure +compote +compound +comprehend +comprehensible +comprehension +comprehensive +compress +compressible +compression +compressive +compressor +comprise +compromise +Compton +comptroller +compulsion +compulsive +compulsory +compunction +computation +compute +comrade +con +Conakry +Conant +concatenate +concave +conceal +concede +conceit +conceive +concentrate +concentric +concept +conception +conceptual +concern +concert +concerti +concertina +concertmaster +concerto +concession +concessionaire +conch +concierge +conciliate +conciliatory +concise +concision +conclave +conclude +conclusion +conclusive +concoct +concomitant +concord +concordant +concourse +concrete +concretion +concubine +concur +concurred +concurrent +concurring +concussion +condemn +condemnate +condemnatory +condensate +condense +condensible +condescend +condescension +condiment +condition +condolence +condominium +condone +conduce +conducive +conduct +conductance +conductor +conduit +cone +coneflower +Conestoga +coney +confabulate +confect +confectionery +confederacy +confederate +confer +conferee +conference +conferrable +conferred +conferring +confess +confession +confessor +confidant +confidante +confide +confident +confidential +configuration +configure +confine +confirm +confirmation +confirmatory +confiscable +confiscate +confiscatory +conflagrate +conflict +confluent +confocal +conform +conformal +conformance +conformation +confound +confrere +confront +confrontation +Confucian +Confucius +confuse +confusion +confute +congeal +congener +congenial +congenital +congest +congestion +congestive +conglomerate +Congo +Congolese +congratulate +congratulatory +congregate +congress +congressional +congressman +congressmen +congresswoman +congresswomen +congruent +conic +conifer +coniferous +conjectural +conjecture +conjoin +conjoint +conjugacy +conjugal +conjugate +conjunct +conjuncture +conjure +Conklin +Conley +conn +Connally +connect +Connecticut +connector +Conner +Connie +connivance +connive +connoisseur +Connors +connotation +connotative +connote +connubial +conquer +conqueror +conquest +conquistador +Conrad +Conrail +consanguine +consanguineous +conscience +conscientious +conscionable +conscious +conscript +conscription +consecrate +consecutive +consensus +consent +consequent +consequential +conservation +conservatism +conservative +conservator +conservatory +conserve +consider +considerate +consign +consignee +consignor +consist +consistent +consolation +console +consolidate +consonant +consonantal +consort +consortium +conspecific +conspicuous +conspiracy +conspirator +conspiratorial +conspire +constant +Constantine +Constantinople +constellate +consternate +constipate +constituent +constitute +constitution +constitutive +constrain +constraint +constrict +constrictor +construal +construct +constructible +constructor +construe +consul +consular +consulate +consult +consultant +consultation +consultative +consume +consummate +consumption +consumptive +contact +contagion +contagious +contain +contaminant +contaminate +contemplate +contemporaneous +contemporary +contempt +contemptible +contemptuous +contend +content +contention +contentious +contest +contestant +context +contextual +contiguity +contiguous +continent +continental +contingent +continua +continual +continuant +continuation +continue +continuity +continuo +continuous +continuum +contort +contour +contraband +contrabass +contraception +contraceptive +contract +contractor +contractual +contradict +contradictory +contradistinct +contradistinguish +contraindicate +contralateral +contralto +contrapositive +contraption +contrariety +contrary +contrast +contravariant +contravene +contravention +contretemps +contribute +contribution +contributor +contributory +contrite +contrition +contrivance +contrive +control +controllable +controlled +controller +controlling +controversial +controversy +controvertible +contumacy +contusion +conundrum +Convair +convalesce +convalescent +convect +convene +convenient +convent +convention +converge +convergent +conversant +conversation +converse +conversion +convert +convertible +convex +convey +conveyance +conveyor +convict +convince +convivial +convocate +convoke +convolute +convolution +convolve +convoy +convulse +convulsion +convulsive +Conway +cony +coo +cook +cookbook +Cooke +cookery +cookie +cooky +cool +coolant +Cooley +coolheaded +Coolidge +coon +coop +cooperate +coordinate +Coors +coot +cop +cope +Copeland +Copenhagen +Copernican +Copernicus +copious +coplanar +copolymer +copperas +Copperfield +copperhead +coppery +copra +coprinus +coprocessor +coproduct +copter +copulate +copy +copybook +copyright +copywriter +coquette +coquina +coral +coralberry +coralline +corbel +Corbett +Corcoran +cord +cordage +cordial +cordite +cordon +corduroy +core +Corey +coriander +Corinth +Corinthian +Coriolanus +cork +corkscrew +cormorant +corn +cornbread +cornea +Cornelia +Cornelius +Cornell +cornerstone +cornet +cornfield +cornflower +cornish +cornmeal +cornstarch +cornucopia +Cornwall +corny +corolla +corollary +corona +Coronado +coronary +coronate +coroner +coronet +coroutine +Corp +corpora +corporal +corporate +corporeal +corps +corpse +corpsman +corpsmen +corpulent +corpus +corpuscle +corpuscular +corral +corralled +correct +corrector +correlate +correspond +correspondent +corridor +corrigenda +corrigendum +corrigible +corroborate +corroboree +corrode +corrodible +corrosion +corrosive +corrugate +corrupt +corruptible +corruption +corsage +corset +Corsica +cortege +cortex +Cortez +cortical +Cortland +corundum +coruscate +Corvallis +corvette +Corvus +cos +cosec +coset +Cosgrove +cosh +cosine +cosmetic +cosmic +cosmology +cosmopolitan +cosmos +cosponsor +Cossack +cost +Costa +Costello +costume +cosy +cot +cotangent +coterie +cotillion +cotman +cotoneaster +cotta +cottage +cotton +cottonmouth +cottonseed +cottontail +cottonwood +cottony +Cottrell +cotty +cotyledon +couch +cougar +cough +could +couldn't +coulomb +Coulter +council +councilman +councilmen +councilwoman +councilwomen +counsel +counselor +count +countdown +countenance +counteract +counterargument +counterattack +counterbalance +counterclockwise +counterexample +counterfeit +counterflow +counterintuitive +counterman +countermand +countermeasure +countermen +counterpart +counterpoint +counterpoise +counterproductive +counterproposal +counterrevolution +counterrevolutionary +countersink +countersunk +counterthreat +countervail +counterweight +countrify +country +countryman +countrymen +countryside +countrywide +county +countywide +coup +coupe +couple +couplet +coupon +courage +courageous +courier +course +court +courteous +courtesan +courtesy +courthouse +courtier +Courtney +courtroom +courtyard +couscous +cousin +couturier +covalent +covariant +covariate +covary +cove +coven +covenant +Coventry +cover +coverage +coverall +coverlet +covert +covet +covetous +cow +Cowan +coward +cowardice +cowbell +cowbird +cowboy +cowhand +cowherd +cowhide +cowl +cowlick +cowman +cowmen +coworker +cowpea +cowpoke +cowpony +cowpox +cowpunch +cowry +cowslip +cox +coxcomb +coy +coyly +coyote +coypu +cozen +cozy +CPA +cpu +crab +crabapple +crack +crackle +crackpot +cradle +craft +craftsman +craftsmen +craftspeople +craftsperson +crafty +crag +craggy +Craig +cram +Cramer +cramp +crampon +cranberry +Crandall +crane +Cranford +crania +cranium +crank +crankcase +crankshaft +cranky +cranny +Cranston +crap +crappie +crash +crass +crate +crater +cravat +crave +craven +craw +Crawford +crawl +crawlspace +crayfish +crayon +craze +crazy +creak +creaky +cream +creamery +creamy +crease +create +creature +creche +credent +credential +credenza +credible +credit +creditor +credo +credulity +credulous +creed +creedal +creek +creekside +creep +creepy +cremate +crematory +Creole +Creon +creosote +crepe +crept +crescendo +crescent +cress +crest +crestfallen +Crestview +Cretaceous +Cretan +Crete +cretin +cretinous +crevice +crew +crewcut +crewel +crewman +crewmen +crib +cribbage +cricket +crime +Crimea +criminal +crimp +crimson +cringe +crinkle +crinoid +cripple +crises +crisis +crisp +Crispin +criss +crisscross +criteria +criterion +critic +critique +critter +croak +Croatia +crochet +crock +crockery +Crockett +crocodile +crocodilian +crocus +croft +Croix +Cromwell +Cromwellian +crone +crony +crook +croon +crop +cropland +crore +Crosby +cross +crossarm +crossbar +crossbill +crosscut +crosshatch +crosslink +crossover +crosspoint +crossroad +crosstalk +crosswalk +crossway +crosswise +crossword +crosswort +crotch +crotchety +crouch +croupier +crow +crowbait +crowbar +crowberry +crowd +crowfoot +Crowley +crown +croydon +CRT +crucial +crucible +crucifix +crucifixion +crucify +crud +cruddy +crude +cruel +cruelty +Cruickshank +cruise +crumb +crumble +crummy +crump +crumple +crunch +crunchy +crupper +crusade +crush +Crusoe +crust +crustacean +crusty +crutch +crux +Cruz +cry +cryogenic +cryostat +crypt +cryptanalysis +cryptanalyst +cryptanalytic +cryptic +crypto +cryptogram +cryptographer +cryptography +crystal +crystalline +crystallite +crystallographer +crystallography +c's +csnet +CT +cub +Cuba +cubby +cubbyhole +cube +cubic +cubicle +cubit +cuckoo +cucumber +cud +cuddle +cuddly +cudgel +cue +cuff +cufflink +cuisine +Culbertson +culinary +cull +culminate +culpa +culpable +culprit +cult +cultivable +cultivar +cultivate +cultural +culture +Culver +culvert +Cumberland +cumbersome +cumin +Cummings +Cummins +cumulate +cumulus +Cunard +cuneiform +cunning +Cunningham +CUNY +cup +cupboard +cupful +Cupid +cupidity +cupric +cuprous +cur +curate +curb +curbside +curd +curdle +cure +curfew +curia +curie +curio +curiosity +curious +curium +curl +curlew +curlicue +curmudgeon +Curran +currant +current +curricula +curricular +curriculum +curry +curse +cursive +cursor +cursory +curt +curtail +curtain +Curtis +curtsey +curvaceous +curvature +curve +curvilinear +Cushing +cushion +Cushman +cusp +Custer +custodial +custodian +custody +custom +customary +customhouse +cut +cutaneous +cutback +cute +cutlass +cutler +cutlet +cutoff +cutout +cutover +cutset +cutthroat +cuttlebone +cuttlefish +cutworm +Cuvier +Cuzco +Cyanamid +cyanate +cyanic +cyanide +cybernetic +cycad +Cyclades +cycle +cyclic +cyclist +cyclone +cyclopean +Cyclops +cyclorama +cyclotomic +cyclotron +cygnet +Cygnus +cylinder +cylindric +cymbal +cynic +Cynthia +cypress +Cyprian +Cypriot +Cyprus +Cyril +Cyrillic +Cyrus +cyst +cysteine +cytochemistry +cytolysis +cytoplasm +cytosine +CZ +czar +czarina +Czech +Czechoslovakia +Czerniak +d +dab +dabble +Dacca +dachshund +dactyl +dactylic +dad +Dada +daddy +Dade +Daedalus +daemon +daffodil +daffy +dagger +daguerreotype +Dahl +dahlia +Dahomey +Dailey +Daimler +dainty +dairy +Dairylea +dairyman +dairymen +dais +daisy +Dakar +Dakota +dal +dale +Daley +Dalhousie +Dallas +dally +Dalton +Daly +Dalzell +dam +damage +Damascus +damask +dame +damn +damnation +Damocles +Damon +damp +dampen +damsel +damselfly +Dan +Dana +Danbury +dance +dandelion +dandy +Dane +dang +danger +dangerous +dangle +Daniel +Danielson +Danish +dank +Danny +Dante +Danube +Danubian +Danzig +Daphne +dapper +dapple +Dar +dare +Darius +dark +darken +darkle +Darlene +darling +darn +DARPA +Darrell +Darry +d'art +dart +Dartmouth +Darwin +Darwinian +dash +dashboard +dastard +data +database +date +dateline +dater +Datsun +datum +datura +daub +Daugherty +daughter +daunt +dauphin +dauphine +Dave +davenport +David +Davidson +Davies +Davis +Davison +davit +Davy +dawdle +dawn +Dawson +day +daybed +daybreak +daydream +daylight +daytime +Dayton +Daytona +daze +dazzle +DC +de +deacon +deaconess +deactivate +dead +deaden +deadhead +deadline +deadlock +deadwood +deaf +deafen +deal +deallocate +dealt +dean +Deane +Deanna +dear +Dearborn +dearie +dearth +death +deathbed +deathward +debacle +debar +debarring +debase +debate +debater +debauch +debauchery +Debbie +Debby +debenture +debilitate +debility +debit +debonair +Deborah +Debra +debrief +debris +debt +debtor +debug +debugged +debugger +debugging +debunk +Debussy +debut +debutante +Dec +decade +decadent +decal +decant +decapitate +decapod +decathlon +Decatur +decay +Decca +decease +decedent +deceit +deceitful +deceive +decelerate +December +decennial +decent +deception +deceptive +decertify +decibel +decide +deciduous +decile +decimal +decimate +decipher +decision +decisive +deck +declaim +declamation +declamatory +declaration +declarative +declarator +declaratory +declare +declassify +declination +decline +declivity +decode +decolletage +decollimate +decompile +decomposable +decompose +decomposition +decompress +decompression +decontrol +decontrolled +decontrolling +deconvolution +deconvolve +decor +decorate +decorous +decorticate +decorum +decouple +decoy +decrease +decree +decreeing +decrement +decry +decrypt +decryption +dedicate +deduce +deducible +deduct +deductible +Dee +deed +deem +deep +deepen +deer +Deere +deerskin +deerstalker +deface +default +defeat +defecate +defect +defector +defend +defendant +defensible +defensive +defer +deferent +deferrable +deferred +deferring +defiant +deficient +deficit +define +definite +definition +definitive +deflate +deflater +deflect +deflector +defocus +defoliate +deforest +deforestation +deform +deformation +defraud +defray +defrost +deft +defunct +defy +degas +degassing +degeneracy +degenerate +degradation +degrade +degrease +degree +degum +degumming +dehumidify +dehydrate +deify +deign +Deimos +Deirdre +deity +deja +deject +Del +Delaney +Delano +Delaware +delay +delectable +delectate +delegable +delegate +delete +deleterious +deletion +Delft +Delhi +Delia +deliberate +delicacy +delicate +delicatessen +delicious +delicti +delight +delightful +Delilah +delimit +delimitation +delineament +delineate +delinquent +deliquesce +deliquescent +delirious +delirium +deliver +deliverance +delivery +deliveryman +deliverymen +dell +Della +Delmarva +delouse +Delphi +Delphic +delphine +delphinium +Delphinus +delta +deltoid +delude +deluge +delusion +delusive +deluxe +delve +demagnify +demagogue +demand +demarcate +demark +demean +demented +dementia +demerit +Demeter +demi +demigod +demijohn +demiscible +demise +demit +demitted +demitting +democracy +democrat +democratic +demodulate +demographer +demography +demolish +demolition +demon +demoniac +demonic +demonstrable +demonstrate +demote +demountable +Dempsey +demultiplex +demur +demure +demurred +demurrer +demurring +demystify +den +denature +dendrite +dendritic +Deneb +Denebola +deniable +denial +denigrate +denizen +Denmark +Dennis +Denny +denominate +denotation +denotative +denote +denouement +denounce +dense +densitometer +dent +dental +dentistry +dentition +Denton +denture +denudation +denude +denumerable +denunciate +Denver +deny +deodorant +deoxyribonucleic +deoxyribose +depart +departure +depend +dependent +depict +deplane +deplete +depletion +deplore +deploy +deport +deportation +deportee +depose +deposit +depositary +deposition +depositor +depository +depot +deprave +deprecate +deprecatory +depreciable +depreciate +depredation +depress +depressant +depressible +depression +depressive +depressor +deprivation +deprive +depth +deputation +depute +deputy +derail +derange +derate +derby +Derbyshire +dereference +deregulate +Derek +derelict +deride +derision +derisive +derivate +derive +dermatology +derogate +derogatory +derrick +derriere +dervish +Des +descant +Descartes +descend +descendant +descendent +descent +describe +description +descriptive +descriptor +desecrate +desecrater +desegregate +desert +deserve +desiccant +desiccate +desiderata +desideratum +design +designate +desire +desirous +desist +desk +Desmond +desolate +desolater +desorption +despair +desperado +desperate +despicable +despise +despite +despoil +despond +despondent +despot +despotic +dessert +destinate +destine +destiny +destitute +destroy +destruct +destructor +desuetude +desultory +detach +detail +detain +d'etat +detect +detector +detent +detente +detention +deter +detergent +deteriorate +determinacy +determinant +determinate +determine +deterred +deterrent +deterring +detest +detestation +detonable +detonate +detour +detoxify +detract +detractor +detriment +detritus +Detroit +deuce +deus +deuterate +deuterium +deuteron +devastate +develop +deviant +deviate +device +devil +devilish +devious +devise +devisee +devoid +devolve +Devon +Devonshire +devote +devotee +devotion +devour +devout +dew +dewar +dewdrop +Dewey +Dewitt +dewy +dexter +dexterity +dextrose +dextrous +dey +Dhabi +dharma +diabase +diabetes +diabetic +diabolic +diachronic +diacritic +diadem +diagnosable +diagnose +diagnosis +diagnostic +diagnostician +diagonal +diagram +diagrammatic +diagrammed +diagramming +dial +dialect +dialectic +dialogue +dialup +dialysis +diamagnetic +diamagnetism +diameter +diamond +Diana +Diane +Dianne +diaper +diaphanous +diaphragm +diary +diathermy +diathesis +diatom +diatomaceous +diatomic +diatonic +diatribe +dibble +dice +dichloride +dichondra +dichotomy +dick +dickcissel +dickens +Dickerson +dickey +Dickinson +Dickson +dicotyledon +dicta +dictate +dictatorial +diction +dictionary +dictum +did +didactic +diddle +didn't +Dido +die +Diebold +Diego +diehard +dieldrin +dielectric +diem +dieresis +diesel +diet +dietary +dietetic +diethylstilbestrol +dietician +Dietrich +diety +Dietz +diffeomorphic +diffeomorphism +differ +different +differentiable +differential +differentiate +difficult +difficulty +diffident +diffract +diffractometer +diffuse +diffusible +diffusion +diffusive +difluoride +dig +digamma +digest +digestible +digestion +digestive +digging +digit +digital +digitalis +dignify +dignitary +dignity +digram +digress +digression +dihedral +dilapidate +dilatation +dilate +dilatory +dilemma +dilettante +diligent +dill +Dillon +dilogarithm +diluent +dilute +dilution +dim +dime +dimension +dimethyl +diminish +diminuendo +diminution +diminutive +dimorphic +dimorphism +dimple +din +Dinah +dine +ding +dinghy +dingo +dingy +dinnertime +dinnerware +dinosaur +dint +diocesan +diocese +Diocletian +diode +Diogenes +Dionysian +Dionysus +Diophantine +diopter +diorama +diorite +dioxide +dip +diphtheria +diphthong +diploid +diploidy +diploma +diplomacy +diplomat +diplomatic +dipole +Dirac +dire +direct +director +directorate +directory +directrices +directrix +dirge +Dirichlet +dirt +dirty +Dis +disaccharide +disambiguate +disastrous +disburse +disc +discern +discernible +disciple +disciplinary +discipline +discoid +discomfit +discordant +discovery +discreet +discrepant +discrete +discretion +discretionary +discriminable +discriminant +discriminate +discriminatory +discus +discuss +discussant +discussion +disdain +disdainful +disembowel +disgruntle +disgustful +dish +dishevel +dishwasher +dishwater +disjunct +disk +dismal +dismissal +Disney +Disneyland +disparage +disparate +dispel +dispelled +dispelling +dispensable +dispensary +dispensate +dispense +dispersal +disperse +dispersible +dispersion +dispersive +disposable +disposal +disputant +dispute +disquietude +disquisition +disrupt +disruption +disruptive +dissemble +disseminate +dissension +dissertation +dissident +dissipate +dissociate +dissuade +distaff +distal +distant +distillate +distillery +distinct +distinguish +distort +distraught +distribution +distributive +distributor +district +disturb +disturbance +disulfide +disyllable +ditch +dither +ditto +ditty +diurnal +diva +divalent +divan +dive +diverge +divergent +diverse +diversify +diversion +diversionary +divert +divest +divestiture +divide +dividend +divination +divine +divisible +division +divisive +divisor +divorce +divorcee +divulge +Dixie +dixieland +Dixon +dizzy +Djakarta +DNA +Dnieper +do +Dobbin +Dobbs +doberman +dobson +docile +dock +docket +dockside +dockyard +doctor +doctoral +doctorate +doctrinaire +doctrinal +doctrine +document +documentary +documentation +DOD +Dodd +doddering +dodecahedra +dodecahedral +dodecahedron +dodge +dodo +Dodson +doe +doesn't +d'oeuvre +doff +dog +dogbane +dogberry +Doge +dogfish +dogging +doggone +doghouse +dogleg +dogma +dogmatic +dogmatism +dogmatist +dogtooth +dogtrot +dogwood +Doherty +Dolan +dolce +doldrum +dole +doleful +doll +dollar +dollop +dolly +dolomite +dolomitic +Dolores +dolphin +dolt +doltish +domain +dome +Domenico +Domesday +domestic +domesticate +domicile +dominant +dominate +domineer +Domingo +Dominic +Dominican +Dominick +dominion +Dominique +domino +don +Donahue +Donald +Donaldson +donate +done +Doneck +donkey +Donna +Donnelly +Donner +donnybrook +donor +Donovan +don't +doodle +Dooley +Doolittle +doom +doomsday +door +doorbell +doorkeep +doorkeeper +doorknob +doorman +doormen +doorstep +doorway +dopant +dope +Doppler +Dora +Dorado +Dorcas +Dorchester +Doreen +Doria +Doric +Doris +dormant +dormitory +dormouse +Dorothea +Dorothy +dorsal +Dorset +Dortmund +dosage +dose +dosimeter +dossier +Dostoevsky +dot +dote +double +Doubleday +doubleheader +doublet +doubleton +doubloon +doubt +doubtful +douce +Doug +dough +Dougherty +doughnut +Douglas +Douglass +dour +douse +dove +dovekie +dovetail +Dow +dowager +dowel +dowitcher +Dowling +down +downbeat +downcast +downdraft +Downey +downfall +downgrade +downhill +downplay +downpour +downright +downside +downslope +downspout +downstairs +downstream +downtown +downtrend +downtrodden +downturn +downward +downwind +downy +dowry +Doyle +doze +dozen +Dr +drab +drably +Draco +Draconian +draft +draftee +draftsman +draftsmen +draftsperson +drafty +drag +dragging +dragnet +dragon +dragonfly +dragonhead +dragoon +drain +drainage +drake +dram +drama +dramatic +dramatist +dramaturgy +drank +drape +drapery +drastic +draught +Dravidian +draw +drawback +drawbridge +drawl +drawn +drawstring +drayman +dread +dreadful +dreadnought +dream +dreamboat +dreamt +dreamy +dreary +dredge +dreg +drench +dress +dressmake +dressy +drew +Drexel +Dreyfuss +drib +dribble +drift +driftwood +drill +drink +drip +drippy +Driscoll +drive +driven +driveway +drizzle +drizzly +droll +dromedary +drone +drool +droop +droopy +drop +drophead +droplet +dropout +drosophila +dross +drought +drove +drown +drowse +drowsy +drub +drudge +drudgery +drug +drugging +drugstore +druid +drum +drumhead +drumlin +Drummond +drunk +drunkard +drunken +drupe +Drury +dry +dryad +Dryden +d's +du +dual +Duane +dub +Dubhe +dubious +dubitable +Dublin +ducat +duchess +duck +duckbilled +duckling +duckweed +duct +ductile +ductwork +dud +Dudley +due +duel +duet +duff +duffel +Duffy +dug +Dugan +dugong +dugout +duke +dulcet +dull +dully +dulse +Duluth +duly +Duma +dumb +dumbbell +dumbly +dummy +dump +dumpling +dumpster +Dumpty +dumpy +dun +Dunbar +Duncan +dunce +dune +Dunedin +dung +dungeon +Dunham +dunk +Dunkirk +Dunlap +Dunlop +Dunn +duodenal +duodenum +duopolist +duopoly +dupe +duplex +duplicable +duplicate +duplicity +DuPont +Duquesne +durable +durance +Durango +duration +Durer +duress +Durham +during +Durkee +Durkin +Durrell +Durward +Dusenberg +Dusenbury +dusk +dusky +Dusseldorf +dust +dustbin +dusty +Dutch +dutchess +Dutchman +Dutchmen +dutiable +dutiful +Dutton +duty +dwarf +dwarves +dwell +dwelt +Dwight +dwindle +Dwyer +dyad +dyadic +dye +dyeing +dyestuff +dying +Dyke +Dylan +dynamic +dynamism +dynamite +dynamo +dynast +dynastic +dynasty +dyne +dysentery +dyspeptic +dysplasia +dysprosium +dystrophy +e +each +Eagan +eager +eagle +ear +eardrum +earl +earmark +earn +earnest +earphone +earring +earshot +earsplitting +earth +earthen +earthenware +Earthman +Earthmen +earthmover +earthmoving +earthquake +earthworm +earthy +earwig +ease +easel +east +eastbound +eastern +easternmost +Eastland +Eastman +eastward +Eastwood +easy +easygoing +eat +eaten +eater +Eaton +eave +eavesdrop +eavesdropping +ebb +Eben +ebony +ebullient +eccentric +Eccles +ecclesiastic +echelon +echidna +echinoderm +echo +echoes +echolocation +eclat +eclectic +eclipse +ecliptic +eclogue +Ecole +ecology +econometric +economic +economist +economy +ecosystem +ecstasy +ecstatic +ectoderm +ectopic +Ecuador +ecumenic +ecumenist +Ed +Eddie +eddy +edelweiss +edematous +Eden +Edgar +edge +Edgerton +edgewise +edgy +edible +edict +edifice +edify +Edinburgh +Edison +edit +Edith +edition +editor +editorial +Edmonds +Edmondson +Edmonton +Edmund +Edna +EDT +Eduardo +educable +educate +Edward +Edwardian +Edwardine +Edwin +Edwina +eel +eelgrass +EEOC +e'er +eerie +eerily +efface +effaceable +effect +effectual +effectuate +effeminate +efferent +effete +efficacious +efficacy +efficient +Effie +effloresce +efflorescent +effluent +effluvia +effluvium +effort +effusion +effusive +eft +e.g +egalitarian +Egan +egg +egghead +eggplant +eggshell +ego +egocentric +egotism +egotist +egregious +egress +egret +Egypt +Egyptian +Egyptology +eh +Ehrlich +eider +eidetic +eigenfunction +eigenspace +eigenstate +eigenvalue +eigenvector +eight +eighteen +eighteenth +eightfold +eighth +eightieth +eighty +eightyfold +Eileen +Einstein +Einsteinian +einsteinium +Eire +Eisenhower +Eisner +either +ejaculate +eject +ejector +eke +Ekstrom +Ektachrome +el +elaborate +Elaine +elan +elapse +elastic +elastomer +elate +Elba +elbow +elder +eldest +Eldon +Eleanor +Eleazar +elect +elector +electoral +electorate +Electra +electress +electret +electric +electrician +electrify +electro +electrocardiogram +electrocardiograph +electrode +electroencephalogram +electroencephalograph +electroencephalography +electrolysis +electrolyte +electrolytic +electron +electronic +electrophoresis +electrophorus +elegant +elegiac +elegy +element +elementary +Elena +elephant +elephantine +elevate +eleven +elevenfold +eleventh +elfin +Elgin +Eli +elicit +elide +eligible +Elijah +eliminable +eliminate +Elinor +Eliot +Elisabeth +Elisha +elision +elite +Elizabeth +Elizabethan +elk +Elkhart +ell +Ella +Ellen +Elliot +Elliott +ellipse +ellipsis +ellipsoid +ellipsoidal +ellipsometer +elliptic +Ellis +Ellison +Ellsworth +Ellwood +elm +Elmer +Elmhurst +Elmira +Elmsford +Eloise +elongate +elope +eloquent +else +Elsevier +elsewhere +Elsie +Elsinore +Elton +eluate +elucidate +elude +elusive +elute +elution +elver +elves +Ely +Elysee +elysian +em +emaciate +emacs +emanate +emancipate +Emanuel +emasculate +embalm +embank +embarcadero +embargo +embargoes +embark +embarrass +embassy +embattle +embed +embeddable +embedded +embedder +embedding +embellish +ember +embezzle +embitter +emblazon +emblem +emblematic +embodiment +embody +embolden +emboss +embouchure +embower +embrace +embraceable +embrittle +embroider +embroidery +embroil +embryo +embryology +embryonic +emcee +emendable +emerald +emerge +emergent +emeriti +emeritus +Emerson +Emery +emetic +emigrant +emigrate +emigre +emigree +Emil +Emile +Emilio +Emily +eminent +emirate +emissary +emission +emissive +emit +emittance +emitted +emitter +emitting +emma +Emmanuel +Emmett +emolument +Emory +emotion +empathic +empathy +emperor +emphases +emphasis +emphatic +emphysema +emphysematous +empire +empiric +emplace +employ +employee +emporium +empower +empress +empty +emptyhanded +emulate +emulsify +emulsion +en +enamel +encapsulate +encephalitis +enchantress +enclave +encomia +encomium +encore +encroach +encryption +encumber +encumbrance +encyclopedic +end +endemic +endgame +Endicott +endoderm +endogamous +endogamy +endogenous +endometrial +endometriosis +endomorphism +endorse +endosperm +endothelial +endothermic +endow +endpoint +endure +enemy +energetic +energy +enervate +enfant +enforceable +enforcible +Eng +engage +Engel +engine +engineer +England +Englander +Engle +Englewood +English +Englishman +Englishmen +enhance +Enid +enigma +enigmatic +enjoinder +enlargeable +enmity +Enoch +enol +enormity +enormous +Enos +enough +enquire +enquiry +Enrico +enrollee +ensconce +ensemble +enstatite +entendre +enter +enterprise +entertain +enthalpy +enthusiasm +enthusiast +enthusiastic +entice +entire +entirety +entity +entomology +entourage +entranceway +entrant +entrepreneur +entrepreneurial +entropy +entry +enumerable +enumerate +enunciable +enunciate +envelop +envelope +enviable +envious +environ +envoy +envy +enzymatic +enzyme +enzymology +Eocene +eohippus +eosine +EPA +epaulet +ephemeral +ephemerides +ephemeris +Ephesian +Ephesus +Ephraim +epic +epicure +Epicurean +epicycle +epicyclic +epidemic +epidemiology +epidermic +epidermis +epigenetic +epigram +epigrammatic +epigraph +epilepsy +epileptic +epilogue +epimorphism +Epiphany +epiphany +epiphyseal +epiphysis +epiphyte +epiphytic +episcopal +Episcopalian +episcopate +episode +episodic +epistemology +epistle +epistolatory +epitaph +epitaxial +epitaxy +epithelial +epithelium +epithet +epitome +epoch +epochal +eponymous +epoxy +epsilon +Epsom +Epstein +equable +equal +equanimity +equate +equatorial +equestrian +equidistant +equilateral +equilibrate +equilibria +equilibrium +equine +equinoctial +equinox +equip +equipoise +equipotent +equipped +equipping +equitable +equitation +equity +equivalent +equivocal +equivocate +era +eradicable +eradicate +erasable +erase +Erasmus +Erastus +erasure +Erato +Eratosthenes +erbium +ERDA +ere +erect +erg +ergative +ergodic +Eric +Erich +Erickson +Ericsson +Erie +Erik +Erlenmeyer +ermine +Ernest +Ernestine +Ernie +Ernst +erode +erodible +Eros +erosible +erosion +erosive +erotic +erotica +err +errand +errant +errantry +errata +erratic +erratum +Errol +erroneous +error +ersatz +Erskine +erudite +erudition +erupt +eruption +Ervin +Erwin +e's +escadrille +escalate +escapade +escape +escapee +escarpment +escheat +Escherichia +eschew +escort +escritoire +escrow +escutcheon +Eskimo +Esmark +esophagi +esoteric +especial +espionage +esplanade +Esposito +espousal +espouse +esprit +esquire +essay +Essen +essence +essential +Essex +EST +establish +estate +esteem +Estella +ester +Estes +Esther +estimable +estimate +Estonia +estop +estoppal +estrange +estrogen +estrous +estrus +estuarine +estuary +et +eta +etc +etch +eternal +eternity +Ethan +ethane +ethanol +Ethel +ether +ethereal +ethernet +ethic +Ethiopia +ethnic +ethnography +ethnology +ethnomusicology +ethology +ethos +ethyl +ethylene +etiology +etiquette +Etruria +Etruscan +etude +etymology +eucalyptus +Eucharist +Euclid +Euclidean +eucre +Eugene +Eugenia +eugenic +euglena +eukaryote +eukaryotic +Euler +Eulerian +eulogy +Eumenides +Eunice +euphemism +euphemist +euphonious +euphony +euphorbia +euphoria +euphoric +Euphrates +Eurasia +eureka +Euridyce +Euripides +Europa +Europe +European +europium +Eurydice +eutectic +Euterpe +euthanasia +eutrophication +Eva +evacuate +evade +evaluable +evaluate +evanescent +evangel +evangelic +Evans +Evanston +Evansville +evaporate +evasion +evasive +eve +Evelyn +even +evenhanded +evensong +event +eventful +eventide +eventual +eventuate +Eveready +Everett +Everglade +evergreen +Everhart +everlasting +every +everybody +everyday +everyman +everyone +everything +everywhere +evict +evident +evidential +evil +evildoer +evince +eviscerate +evocable +evocate +evoke +evolution +evolutionary +evolve +evzone +ewe +ex +exacerbate +exact +exactitude +exaggerate +exalt +exaltation +exam +examination +examine +example +exasperate +exasperater +excavate +exceed +excel +excelled +excellent +excelling +excelsior +except +exception +excerpt +excess +excessive +exchange +exchangeable +exchequer +excisable +excise +excision +excitation +excitatory +excite +exciton +exclaim +exclamation +exclamatory +exclude +exclusion +exclusionary +exclusive +excommunicate +excoriate +excrement +excrescent +excrete +excretion +excretory +excruciate +exculpate +exculpatory +excursion +excursus +excusable +excuse +exec +execrable +execrate +execute +execution +executive +executor +executrix +exegesis +exegete +exemplar +exemplary +exemplify +exempt +exemption +exercisable +exercise +exert +Exeter +exfoliate +exhale +exhaust +exhaustible +exhaustion +exhaustive +exhibit +exhibition +exhibitor +exhilarate +exhort +exhortation +exhumation +exhume +exigent +exile +exist +existent +existential +exit +exodus +exogamous +exogamy +exogenous +exonerate +exorbitant +exorcise +exorcism +exorcist +exoskeleta +exoskeleton +exothermic +exotic +exotica +expand +expanse +expansible +expansion +expansive +expatiate +expatriate +expect +expectant +expectation +expectorant +expectorate +expedient +expedite +expedition +expeditious +expel +expellable +expelled +expelling +expend +expenditure +expense +expensive +experience +experiential +experiment +experimentation +expert +expertise +expiable +expiate +expiration +expire +expiry +explain +explanation +explanatory +expletive +explicable +explicate +explicit +explode +exploit +exploitation +exploration +exploratory +explore +explosion +explosive +exponent +exponential +exponentiate +export +exportation +expose +exposit +exposition +expositor +expository +exposure +expound +express +expressible +expression +expressive +expressway +expropriate +expulsion +expunge +expurgate +exquisite +extant +extemporaneous +extempore +extend +extendible +extensible +extension +extensive +extensor +extent +extenuate +exterior +exterminate +external +extinct +extinguish +extirpate +extol +extolled +extoller +extolling +extort +extra +extracellular +extract +extractor +extracurricular +extradite +extradition +extralegal +extramarital +extramural +extraneous +extraordinary +extrapolate +extraterrestrial +extraterritorial +extravagant +extravaganza +extrema +extremal +extreme +extremum +extricable +extricate +extrinsic +extroversion +extrovert +extrude +extrusion +extrusive +exuberant +exudate +exude +exult +exultant +exultation +Exxon +eye +eyeball +eyebright +eyebrow +eyeful +eyeglass +eyelash +eyelet +eyelid +eyepiece +eyesight +eyesore +eyewitness +Ezekiel +Ezra +f +FAA +Faber +Fabian +fable +fabric +fabricate +fabulous +facade +face +faceplate +facet +facetious +facial +facile +facilitate +facsimile +fact +factious +facto +factor +factorial +factory +factual +faculty +fad +fade +fadeout +faery +Fafnir +fag +Fahey +Fahrenheit +faience +fail +failsafe +failsoft +failure +fain +faint +fair +Fairchild +Fairfax +Fairfield +fairgoer +Fairport +fairway +fairy +faith +faithful +fake +falcon +falconry +Falkland +fall +fallacious +fallacy +fallen +fallible +falloff +Fallopian +fallout +fallow +Falmouth +false +falsetto +falsify +Falstaff +falter +fame +familial +familiar +familism +family +famine +famish +famous +fan +fanatic +fanciful +fancy +fanfare +fanfold +fang +fangled +Fanny +fanout +fantasia +fantasist +fantastic +fantasy +fantod +far +farad +Faraday +Farber +farce +farcical +fare +farewell +farfetched +Fargo +farina +Farkas +Farley +farm +farmhouse +Farmington +farmland +Farnsworth +faro +Farrell +farsighted +farther +farthest +fascicle +fasciculate +fascinate +fascism +fascist +fashion +fast +fasten +fastidious +fat +fatal +fate +fateful +father +fathom +fatigue +Fatima +fatten +fatty +fatuous +faucet +Faulkner +fault +faulty +faun +fauna +faunal +Faust +Faustian +Faustus +fawn +fay +Fayette +Fayetteville +faze +FBI +FCC +FDA +Fe +fealty +fear +fearful +fearsome +feasible +feast +feat +feather +featherbed +featherbedding +featherbrain +feathertop +featherweight +feathery +feature +Feb +febrile +February +fecal +feces +feckless +fecund +fed +federal +federate +Fedora +fee +feeble +feed +feedback +feel +Feeney +feet +feign +feint +feisty +Feldman +feldspar +Felice +Felicia +felicitous +felicity +feline +Felix +fell +fellow +felon +felonious +felony +felsite +felt +female +feminine +feminism +feminist +femoral +femur +fence +fencepost +fend +fennec +fennel +Fenton +fenugreek +Ferber +Ferdinand +Ferguson +Fermat +ferment +fermentation +Fermi +fermion +fermium +fern +Fernando +fernery +ferocious +ferocity +Ferreira +Ferrer +ferret +ferric +ferris +ferrite +ferroelectric +ferromagnet +ferromagnetic +ferrous +ferruginous +ferrule +ferry +fertile +fervent +fervid +fescue +fest +festival +festive +festoon +fetal +fetch +fete +fetid +fetish +fetter +fettle +fetus +feud +feudal +feudatory +fever +feverish +few +fiance +fiancee +fiasco +fiat +fib +fiberboard +Fiberglas +Fibonacci +fibration +fibrin +fibrosis +fibrous +fiche +fickle +fiction +fictitious +fictive +fiddle +fiddlehead +fiddlestick +fide +fidelity +fidget +fiducial +fief +fiefdom +field +fieldstone +fieldwork +fiend +fiendish +fierce +fiery +fiesta +fife +FIFO +fifteen +fifteenth +fifth +fiftieth +fifty +fiftyfold +fig +figaro +fight +figural +figurate +figure +figurine +Fiji +Fijian +filament +filamentary +filamentous +filbert +filch +file +filet +filial +filibuster +filigree +Filipino +fill +fillet +fillip +filly +film +filmdom +filmmake +filmstrip +filmy +filter +filth +filthy +filtrate +fin +final +finale +finance +financial +financier +finch +find +fine +finery +finesse +finessing +finger +fingerling +fingernail +fingerprint +fingertip +finial +finicky +finish +finite +finitude +fink +Finland +Finley +Finn +Finnegan +Finnish +finny +fir +fire +firearm +fireboat +firebreak +firebug +firecracker +firefly +firehouse +firelight +fireman +firemen +fireplace +firepower +fireproof +fireside +Firestone +firewall +firewood +firework +firm +firmware +first +firsthand +fiscal +Fischbein +Fischer +fish +fisherman +fishermen +fishery +fishmonger +fishpond +fishy +Fisk +Fiske +fissile +fission +fissure +fist +fisticuff +fit +Fitch +Fitchburg +fitful +Fitzgerald +Fitzpatrick +Fitzroy +five +fivefold +fix +fixate +fixture +Fizeau +fizzle +fjord +FL +flabbergast +flack +flag +flagellate +flageolet +flagging +Flagler +flagpole +flagrant +Flagstaff +flagstone +flail +flair +flak +flake +flaky +flam +flamboyant +flame +flamingo +flammable +flan +Flanagan +Flanders +flange +flank +flannel +flap +flare +flash +flashback +flashlight +flashy +flask +flat +flatbed +flathead +flatiron +flatland +flatten +flattery +flatulent +flatus +flatworm +flaunt +flautist +flaw +flax +flaxen +flaxseed +flea +fleabane +fleawort +fleck +fled +fledge +fledgling +flee +fleece +fleeing +fleet +Fleming +flemish +flesh +fleshy +fletch +Fletcher +flew +flex +flexible +flexural +flexure +flick +flight +flimsy +flinch +fling +flint +flintlock +flinty +flip +flipflop +flippant +flirt +flirtation +flirtatious +flit +Flo +float +floc +flocculate +flock +floe +flog +flogging +flood +floodgate +floodlight +floodlit +floodwater +floor +floorboard +flop +floppy +flora +floral +Florence +Florentine +florican +florid +Florida +Floridian +florin +florist +floruit +flotation +flotilla +flounce +flounder +flour +flourish +floury +flout +flow +flowchart +flowerpot +flowery +flown +Floyd +flu +flub +fluctuate +flue +fluent +fluff +fluffy +fluid +fluke +flung +flunk +flunky +fluoresce +fluorescein +fluorescent +fluoridate +fluoride +fluorine +fluorite +fluorocarbon +fluorspar +flurry +flush +fluster +flute +flutter +flux +fly +flycatcher +flyer +Flynn +flyway +FM +FMC +foal +foam +foamflower +foamy +fob +focal +foci +focus +focussed +fodder +foe +fog +Fogarty +fogging +foggy +fogy +foible +foil +foist +fold +foldout +Foley +foliage +foliate +folic +folio +folk +folklore +folksinger +folksinging +folksong +folksy +folktale +follicle +follicular +follow +followeth +folly +Fomalhaut +foment +fond +fondle +font +Fontaine +Fontainebleau +food +foodstuff +fool +foolhardy +foolish +foolproof +foolscap +foot +footage +football +footbridge +Foote +footfall +foothill +foothold +footman +footmen +footnote +footpad +footpath +footprint +footstep +footstool +footwear +footwork +fop +foppish +for +forage +foraminifera +foray +forbade +forbear +forbearance +Forbes +forbid +forbidden +forbidding +forbore +forborne +force +forceful +forcible +ford +Fordham +fore +foreign +forensic +forest +forestry +forever +forfeit +forfeiture +forfend +forgather +forgave +forge +forgery +forget +forgetful +forgettable +forgetting +forgive +forgiven +forgo +forgone +forgot +forgotten +fork +forklift +forlorn +form +formal +formaldehyde +formant +format +formate +formatted +formatting +formic +Formica +formidable +Formosa +formula +formulae +formulaic +formulate +forsake +forsaken +forsook +forswear +forswore +forsworn +Forsythe +fort +forte +Fortescue +forth +forthcome +forthcoming +forthright +forthwith +fortieth +fortify +fortin +fortiori +fortitude +fortnight +fortran +fortress +fortuitous +fortunate +fortune +forty +fortyfold +forum +forward +forwent +Foss +fossil +fossiliferous +foster +fosterite +fought +foul +foulmouth +found +foundation +foundling +foundry +fount +fountain +fountainhead +four +fourfold +Fourier +foursome +foursquare +fourteen +fourteenth +fourth +fovea +fowl +fox +foxglove +Foxhall +foxhole +foxhound +foxtail +foxtrot +foxy +foyer +FPC +fractal +fraction +fractionate +fractious +fracture +fragile +fragment +fragmentary +fragmentation +fragrant +frail +frailty +frambesia +frame +framework +Fran +franc +franca +France +Frances +franchise +Francine +Francis +Franciscan +Francisco +francium +franco +Francoise +frangipani +frank +Frankel +Frankfort +Frankfurt +frankfurter +franklin +frantic +Franz +Fraser +fraternal +fraternity +Frau +fraud +fraudulent +fraught +fray +Frazier +frazzle +freak +freakish +freckle +Fred +Freddie +Freddy +Frederic +Frederick +Fredericksburg +Fredericton +Fredholm +Fredrickson +free +freeboot +freedman +freedmen +freedom +freehand +freehold +freeing +freeload +freeman +freemen +Freeport +freestone +freethink +Freetown +freeway +freewheel +freeze +freight +French +Frenchman +Frenchmen +frenetic +frenzy +freon +frequent +fresco +frescoes +fresh +freshen +freshman +freshmen +freshwater +Fresnel +Fresno +fret +Freud +Freudian +Frey +Freya +friable +friar +fricative +Frick +friction +Friday +fridge +Friedman +Friedrich +friend +Friesland +frieze +frigate +Frigga +fright +frighten +frightful +frigid +Frigidaire +frill +frilly +fringe +Frisian +frisky +fritillary +fritter +Fritz +frivolity +frivolous +frizzle +frizzy +fro +frock +frog +frolic +frolicked +frolicking +from +frond +front +frontage +frontal +frontier +frontiersman +frontiersmen +frost +frostbite +frostbitten +frosty +froth +frothy +frown +frowzy +froze +frozen +fructose +Fruehauf +frugal +fruit +fruitful +fruition +frustrate +frustrater +frustum +fry +Frye +f's +Ft +FTC +Fuchs +Fuchsia +fudge +fuel +fugal +fugitive +fugue +Fuji +Fujitsu +Fulbright +fulcrum +fulfill +full +fullback +Fullerton +fully +fulminate +fulsome +Fulton +fum +fumarole +fumble +fume +fumigant +fumigate +fun +function +functionary +functor +functorial +fund +fundamental +fundraiser +fundraising +funeral +funerary +funereal +fungal +fungi +fungible +fungicide +fungoid +fungus +funk +funky +funnel +funny +fur +furbish +furious +furl +furlong +furlough +Furman +furnace +furnish +furniture +furrier +furrow +furry +further +furthermore +furthermost +furthest +furtive +fury +furze +fuse +fuselage +fusible +fusiform +fusillade +fusion +fuss +fussy +fusty +futile +future +fuzz +fuzzy +g +GA +gab +gabardine +gabble +gabbro +Gaberones +gable +Gabon +Gabriel +Gabrielle +gad +gadfly +gadget +gadgetry +gadolinium +gadwall +Gaelic +gaff +gaffe +gag +gage +gagging +gaggle +gagwriter +gaiety +Gail +gaillardia +gain +Gaines +Gainesville +gainful +gait +Gaithersburg +gal +gala +galactic +galactose +Galapagos +Galatea +Galatia +galaxy +Galbreath +gale +Galen +galena +galenite +Galilean +Galilee +Galileo +gall +Gallagher +gallant +gallantry +gallberry +gallery +galley +gallinule +gallium +gallivant +gallon +gallonage +gallop +Galloway +gallows +gallstone +Gallup +gallus +Galois +Galt +galvanic +galvanism +galvanometer +Galveston +Galway +gam +Gambia +gambit +gamble +gambol +game +gamecock +gamesmanship +gamete +gamin +gamma +gamut +gander +Gandhi +Gandhian +gang +Ganges +gangland +gangling +ganglion +gangplank +gangster +gangway +gannet +Gannett +gantlet +gantry +Ganymede +GAO +gap +gape +gar +garage +garb +garbage +garble +Garcia +garden +gardenia +Gardner +Garfield +gargantuan +gargle +Garibaldi +garish +garland +garlic +garner +garnet +garnish +Garrett +garrison +Garrisonian +garrulous +Garry +garter +Garth +Garvey +Gary +gas +Gascony +gaseous +gases +gash +gasify +gasket +gaslight +gasoline +gasp +Gaspee +gassy +Gaston +gastrointestinal +gastronome +gastronomic +gastronomy +gate +gatekeeper +Gates +gateway +gather +Gatlinburg +gator +gauche +gaucherie +gaudy +gauge +gaugeable +Gauguin +Gaul +gauleiter +Gaulle +gaunt +gauntlet +gaur +gauss +Gaussian +Gautama +gauze +gauzy +gave +gavel +Gavin +gavotte +gawk +gawky +gay +Gaylord +gaze +gazebo +gazelle +gazette +gazpacho +GE +gear +gecko +gee +geese +Gegenschein +Geiger +Geigy +geisha +gel +gelable +gelatin +gelatine +gelatinous +geld +gem +geminate +Gemini +Geminid +Gemma +gemsbok +gemstone +gender +gene +genealogy +genera +general +generate +generic +generosity +generous +Genesco +genesis +genetic +Geneva +Genevieve +genial +genie +genii +genital +genitive +genius +Genoa +genotype +genre +gent +genteel +gentian +gentile +gentle +gentleman +gentlemen +gentlewoman +gentlewomen +gentry +genuflect +genuine +genus +geocentric +geochemical +geochemistry +geochronology +geode +geodesic +geodesy +geodetic +geoduck +Geoffrey +geographer +geography +geology +geometer +geometrician +geophysical +geophysics +geopolitic +George +Georgetown +Georgia +geothermal +Gerald +Geraldine +geranium +Gerard +Gerber +gerbil +Gerhard +Gerhardt +geriatric +germ +German +germane +Germanic +germanium +Germantown +Germany +germicidal +germicide +germinal +germinate +Gerry +Gershwin +Gertrude +gerund +gerundial +gerundive +gestalt +Gestapo +gestation +gesticulate +gestural +gesture +get +getaway +Getty +Gettysburg +geyser +Ghana +Ghanian +ghastly +Ghent +gherkin +ghetto +ghost +ghoul +ghoulish +Giacomo +giant +giantess +gibberellin +gibberish +gibbet +gibbon +gibbous +Gibbs +gibby +gibe +giblet +Gibraltar +Gibson +giddap +giddy +Gideon +Gifford +gift +gig +gigacycle +gigahertz +gigantic +gigavolt +gigawatt +gigging +giggle +Gil +gila +gilbert +Gilbertson +Gilchrist +gild +Gilead +Giles +gill +Gillespie +Gillette +Gilligan +Gilmore +gilt +gimbal +Gimbel +gimlet +gimpy +gin +Gina +ginger +gingham +ginkgo +ginmill +Ginn +Gino +Ginsberg +Ginsburg +ginseng +Giovanni +giraffe +gird +girdle +girl +girlie +girlish +girt +girth +gist +Giuliano +Giuseppe +give +giveaway +given +giveth +gizmo +gizzard +gjetost +glacial +glaciate +glacier +glacis +glad +gladden +gladdy +glade +gladiator +gladiolus +Gladstone +Gladys +glamor +glamorous +glamour +glance +gland +glandular +glans +glare +Glasgow +glass +glassine +glassware +glasswort +glassy +Glaswegian +glaucoma +glaucous +glaze +gleam +glean +Gleason +glee +gleeful +glen +Glenda +Glendale +Glenn +glib +glibly +Glidden +glide +glimmer +glimpse +glint +glissade +glisten +glitch +glitter +gloat +glob +global +globe +globular +globule +globulin +glom +glomerular +gloom +gloomy +Gloria +Gloriana +glorify +glorious +glory +gloss +glossary +glossolalia +glossy +glottal +glottis +Gloucester +glove +glow +glucose +glue +gluey +glum +glut +glutamate +glutamic +glutamine +gluten +glutinous +glutton +gluttonous +gluttony +glyceride +glycerin +glycerinate +glycerine +glycerol +glycine +glycogen +glycol +glyph +GM +GMT +gnarl +gnash +gnat +gnaw +gneiss +gnome +gnomon +gnomonic +gnostic +GNP +gnu +go +Goa +goad +goal +goat +gob +gobble +gobbledygook +Gobi +goblet +god +Goddard +goddess +godfather +Godfrey +godhead +godkin +godmother +godparent +godsend +godson +Godwin +godwit +goes +Goethe +Goff +gog +goggle +Gogh +gogo +gold +Goldberg +golden +goldeneye +goldenrod +goldenseal +goldfinch +goldfish +Goldman +goldsmith +Goldstein +Goldstine +Goldwater +Goleta +golf +Goliath +golly +gonad +gonadotropic +gondola +gone +gong +Gonzales +Gonzalez +goober +good +goodbye +Goode +Goodman +Goodrich +goodwill +Goodwin +goody +Goodyear +goof +goofy +goose +gooseberry +GOP +gopher +Gordian +Gordon +gore +Goren +gorge +gorgeous +gorgon +Gorham +gorilla +Gorky +gorse +Gorton +gory +gosh +goshawk +gosling +gospel +gossamer +gossip +got +Gotham +Gothic +gotten +Gottfried +Goucher +Gouda +gouge +Gould +gourd +gourmet +gout +govern +governance +governess +governor +gown +GPO +grab +grace +graceful +gracious +grackle +grad +gradate +grade +gradient +gradual +graduate +Grady +Graff +graft +graham +grail +grain +grainy +grammar +grammarian +grammatic +gramophone +granary +grand +grandchild +grandchildren +granddaughter +grandeur +grandfather +grandiloquent +grandiose +grandma +grandmother +grandnephew +grandniece +grandpa +grandparent +grandson +grandstand +granite +granitic +granny +granola +grant +grantee +grantor +granular +granulate +granule +Granville +grape +grapefruit +grapevine +graph +grapheme +graphic +graphite +grapple +grasp +grass +grasshopper +grassland +grassy +grata +grate +grateful +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +gravestone +graveyard +gravid +gravitate +gravitometer +graviton +gravy +Grayson +graze +grease +greasy +great +greatcoat +greater +grebe +Grecian +Greece +greed +greedy +Greek +green +Greenbelt +Greenberg +Greenblatt +Greenbriar +Greene +greenery +Greenfield +greengrocer +greenhouse +greenish +Greenland +Greensboro +greensward +greenware +Greenwich +greenwood +Greer +greet +Greg +gregarious +Gregg +Gregory +gremlin +grenade +Grendel +Grenoble +grep +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +gridlock +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grillwork +grim +grimace +Grimaldi +grime +Grimm +grimy +grin +grind +grindstone +grip +gripe +grippe +grisly +grist +gristmill +Griswold +grit +gritty +grizzle +grizzly +groan +groat +grocer +grocery +groggy +groin +grommet +groom +groove +grope +grosbeak +gross +Grosset +Grossman +Grosvenor +grotesque +Groton +grotto +grottoes +grouch +grouchy +ground +groundhog +groundsel +groundskeep +groundwork +group +groupoid +grouse +grout +grove +grovel +Grover +grow +growl +grown +grownup +growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grump +grumpy +grunt +Gruyere +gryphon +g's +GSA +GU +Guam +guanidine +guanine +guano +guarantee +guaranteeing +guaranty +guard +guardhouse +Guardia +guardian +Guatemala +gubernatorial +Guelph +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guignol +guild +guildhall +guile +Guilford +guillemot +guillotine +guilt +guilty +guinea +Guinevere +guise +guitar +Gujarat +Gujarati +gulch +gules +gulf +gull +Gullah +gullet +gullible +gully +gulp +gum +gumbo +gumdrop +gummy +gumption +gumshoe +gun +Gunderson +gunfight +gunfire +gunflint +gunk +gunky +gunman +gunmen +gunnery +gunny +gunplay +gunpoint +gunpowder +gunshot +gunsling +Gunther +gurgle +Gurkha +guru +Gus +gush +gusset +gust +Gustafson +Gustav +Gustave +Gustavus +gusto +gusty +gut +Gutenberg +Guthrie +gutsy +guttural +guy +Guyana +guzzle +Gwen +Gwyn +gym +gymnasium +gymnast +gymnastic +gymnosperm +gyp +gypsite +gypsum +gypsy +gyrate +gyrfalcon +gyro +gyrocompass +gyroscope +h +ha +Haag +Haas +habeas +haberdashery +Haberman +Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +hackney +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +Hagen +Hager +haggard +haggis +haggle +hagiography +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +haircut +hairdo +hairpin +hairspring +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +halfhearted +halftone +halfway +halibut +halide +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallucinatory +hallucinogen +hallucinogenic +hallway +halma +halo +halocarbon +halogen +Halpern +Halsey +Halstead +halt +halvah +halve +Halverson +ham +Hamal +Hamburg +hamburger +Hamilton +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +Hampton +hamster +hamstrung +Han +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handful +handgun +handhold +handicap +handicapped +handicapper +handicapping +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handpicked +handprint +handset +handshake +handsome +handspike +handstand +handwaving +handwrite +handwritten +handy +handyman +handymen +Haney +Hanford +hang +hangable +hangar +hangdog +hangman +hangmen +hangnail +hangout +hangover +hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +haphazard +haploid +haploidy +haplology +happen +happenstance +happy +Hapsburg +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +hardbound +hardcopy +hardcover +harden +hardhat +hardhearted +Hardin +hardscrabble +hardtack +hardtop +hardware +hardwire +hardwood +hardworking +hardy +hare +harebrained +harelip +harem +hark +harken +Harlan +Harlem +Harley +harm +harmful +Harmon +harmonic +harmonica +harmonious +harmony +harness +Harold +harp +harpoon +harpsichord +harpy +Harriet +Harriman +Harrington +Harris +Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +harvest +harvestman +Harvey +has +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +hatchery +hatchet +hatchway +hate +hateful +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Hattiesburg +Haugen +haughty +haul +haulage +haunch +haunt +Hausa +Hausdorff +Havana +have +haven +haven't +haversack +Havilland +havoc +haw +Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +haystack +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +head +headache +headboard +headcount +headdress +headland +headlight +headline +headlong +headman +headmaster +headmen +headphone +headquarter +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthful +healthy +Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +heartland +heartrending +heartthrob +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +heaven +heavenward +heavy +heavyset +heavyweight +Hebe +hebephrenic +Hebraic +Hebrew +Hebrides +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +he'd +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidegger +Heidelberg +heifer +heigh +height +heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +he'll +hell +hellbender +hellebore +Hellenic +Hellespont +hellfire +hellgrammite +hellish +hello +helm +helmet +Helmholtz +helmsman +helmsmen +Helmut +help +helpful +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemp +Hempstead +hen +henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +herbarium +Herbert +herbicide +herbivore +herbivorous +Herculean +Hercules +herd +herdsman +herdsmen +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +Herkimer +Herman +Hermann +hermaphrodite +hermaphroditic +hermeneutic +Hermes +hermetic +hermit +hermitage +Hermite +hermitian +Hermosa +Hernandez +hernia +hero +Herodotus +heroes +heroic +heroin +heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +hesitant +hesitate +hesitater +Hesperus +Hess +Hesse +Hessian +Hester +heterocyclic +heterodyne +heterogamous +heterogeneity +heterogeneous +heterosexual +heterostructure +heterozygous +Hetman +Hettie +Hetty +Heublein +heuristic +Heusen +Heuser +hew +Hewett +Hewitt +Hewlett +hewn +hex +hexachloride +hexadecimal +hexafluoride +hexagon +hexagonal +hexameter +hexane +hey +heyday +hi +Hiatt +hiatus +Hiawatha +hibachi +Hibbard +hibernate +Hibernia +hick +Hickey +Hickman +hickory +hid +hidalgo +hidden +hide +hideaway +hidebound +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highfalutin +highhanded +highland +highlight +highroad +hightail +highway +highwayman +highwaymen +hijack +hike +hilarious +hilarity +Hilbert +Hildebrand +hill +hillbilly +Hillcrest +Hillel +hillman +hillmen +hillock +hillside +hilltop +hilly +hilt +Hilton +hilum +him +Himalaya +himself +hind +Hindi +hindmost +hindquarters +hindrance +hindsight +Hindu +Hindustan +Hines +hinge +Hinman +hint +hinterland +hip +hippie +hippo +Hippocrates +Hippocratic +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +hiss +histamine +histidine +histochemic +histochemistry +histogram +histology +historian +historic +historiography +history +histrionic +hit +Hitachi +hitch +Hitchcock +hither +hitherto +Hitler +hive +ho +hoagie +Hoagland +hoagy +hoar +hoard +hoarfrost +hoarse +hoax +hob +Hobart +Hobbes +hobble +Hobbs +hobby +hobbyhorse +hobo +Hoboken +hoc +hock +hockey +hodge +hodgepodge +Hodges +Hodgkin +hoe +Hoff +Hoffman +hog +hogan +hogging +hoi +Hokan +Holbrook +Holcomb +hold +holden +holdover +holdup +hole +holeable +holiday +Holland +hollandaise +holler +Hollerith +Hollingsworth +Hollister +hollow +Holloway +hollowware +holly +hollyhock +Hollywood +Holm +Holman +Holmdel +Holmes +holmium +holocaust +Holocene +hologram +holography +Holst +Holstein +holster +holt +Holyoke +holystone +Hom +homage +home +homebound +homebuilder +homebuilding +homecoming +homeland +homemade +homemake +homeobox +homeomorph +homeomorphic +homeopath +homeopathic +homeowner +Homeric +homesick +homespun +homestead +homeward +homework +homicidal +homicide +homily +hominid +homo +homogenate +homogeneity +homogeneous +homologous +homologue +homology +homomorphic +homomorphism +homonym +homophobia +homosexual +homotopy +homozygous +homunculus +Honda +hondo +Honduras +hone +honest +honesty +honey +honeybee +honeycomb +honeydew +honeymoon +honeysuckle +Honeywell +hong +honk +honky +Honolulu +honoraria +honorarium +honorary +honoree +honorific +Honshu +hooch +hood +hoodlum +hoof +hoofmark +hoofprint +hook +hookup +hookworm +hooligan +hoop +hoopla +hoosegow +Hoosier +hoot +Hoover +hooves +hop +hope +hopeful +Hopi +Hopkins +Hopkinsian +hopple +hopscotch +Horace +Horatio +horde +horehound +horizon +horizontal +hormonal +hormone +horn +hornbeam +hornblende +Hornblower +hornet +hornmouth +hornpipe +horntail +hornwort +horny +horology +horoscope +Horowitz +horrendous +horrible +horrid +horrify +horror +horse +horseback +horsedom +horseflesh +horsefly +horsehair +horseman +horsemen +horseplay +horsepower +horseshoe +horsetail +horsewoman +horsewomen +horticulture +Horton +Horus +hose +hosiery +hospice +hospitable +hospital +host +hostage +hostelry +hostess +hostile +hostler +hot +hotbed +hotbox +hotel +hotelman +hotfoot +hothead +hothouse +hotrod +Hottentot +Houdaille +Houdini +hough +Houghton +hound +hour +hourglass +house +houseboat +housebreak +housebroken +housefly +household +housekeep +housemate +housewife +housewives +housework +Houston +hove +hovel +hover +how +Howard +howdy +Howe +Howell +however +howl +howsoever +howsomever +hoy +hoyden +hoydenish +Hoyt +Hrothgar +h's +hub +Hubbard +Hubbell +hubbub +hubby +hubcap +Huber +Hubert +hubris +huck +huckleberry +huckster +huddle +Hudson +hue +huff +Huffman +hug +huge +hugging +Huggins +Hugh +Hughes +Hugo +huh +hulk +hull +hullaballoo +hullabaloo +hum +human +humane +humanitarian +humble +Humboldt +humdrum +humerus +humid +humidify +humidistat +humiliate +humility +Hummel +hummingbird +hummock +humorous +hump +humpback +Humphrey +humpty +humus +Hun +hunch +hunchback +hundred +hundredfold +hundredth +hung +Hungarian +Hungary +hungry +hunk +hunt +Huntington +Huntley +Huntsville +Hurd +hurdle +hurl +hurley +Huron +hurrah +hurray +hurricane +hurry +Hurst +hurt +hurtle +hurty +Hurwitz +husband +husbandman +husbandmen +husbandry +hush +husky +hustle +Huston +hut +hutch +Hutchins +Hutchinson +Hutchison +Huxley +Huxtable +huzzah +hyacinth +Hyades +hyaline +Hyannis +hybrid +Hyde +hydra +hydrangea +hydrant +hydrate +hydraulic +hydride +hydro +hydrocarbon +hydrochemistry +hydrochloric +hydrochloride +hydrocyanic +hydrodynamic +hydroelectric +hydrofluoric +hydrogen +hydrogenate +hydrology +hydrolysis +hydrometer +hydronium +hydrophilic +hydrophobia +hydrophobic +hydrophone +hydrosphere +hydrostatic +hydrothermal +hydrous +hydroxide +hydroxy +hydroxyl +hydroxylate +hyena +hygiene +hygrometer +hygroscopic +hying +Hyman +hymen +hymn +hymnal +hyper +hyperbola +hyperbolic +hyperboloid +hyperboloidal +hypertensive +hyperthermia +hyphen +hyphenate +hypnosis +hypnotic +hypoactive +hypochlorite +hypochlorous +hypocrisy +hypocrite +hypocritic +hypocycloid +hypodermic +hypophyseal +hypotenuse +hypothalamic +hypothalamus +hypothalmus +hypothermia +hypotheses +hypothesis +hypothetic +hypothyroid +hypotonic +hysterectomy +hysteresis +hysteria +hysteric +hysteron +i +IA +iambic +Ian +Iberia +ibex +ibid +ibis +IBM +Ibn +Icarus +ICC +ice +iceberg +icebox +icecap +iceland +Icelandic +iceman +ichneumon +icicle +icky +icon +iconoclasm +iconoclast +iconography +icosahedra +icosahedral +icosahedron +icy +I'd +id +Ida +Idaho +idea +ideal +ideate +idempotent +identical +identify +identity +ideogram +ideolect +ideology +idetic +idiocy +idiom +idiomatic +idiosyncrasy +idiosyncratic +idiot +idiotic +idle +idly +idol +idolatry +idyll +idyllic +i.e +IEEE +if +iffy +Ifni +igloo +igneous +ignite +ignition +ignoble +ignominious +ignominy +ignoramus +ignorant +ignore +Igor +ii +iii +Ike +IL +ileum +iliac +Iliad +I'll +ill +illegal +illegible +illegitimacy +illegitimate +illicit +illimitable +Illinois +illiteracy +illiterate +illogic +illume +illuminate +illumine +illusion +illusionary +illusive +illusory +illustrate +illustrious +Ilona +Ilyushin +I'm +image +imagen +imagery +imaginary +imaginate +imagine +imbalance +imbecile +imbibe +Imbrium +imbroglio +imbrue +imbue +imitable +imitate +immaculate +immanent +immaterial +immature +immeasurable +immediacy +immediate +immemorial +immense +immerse +immersion +immigrant +immigrate +imminent +immiscible +immobile +immobility +immoderate +immodest +immodesty +immoral +immortal +immovable +immune +immunoelectrophoresis +immunology +immutable +imp +impact +impair +impale +impalpable +impart +impartation +impartial +impassable +impasse +impassion +impassive +impatient +impeach +impeccable +impedance +impede +impediment +impel +impelled +impeller +impelling +impend +impenetrable +imperate +imperceivable +imperceptible +imperfect +imperial +imperil +imperious +imperishable +impermeable +impermissible +impersonal +impersonate +impertinent +imperturbable +impervious +impetuous +impetus +impiety +impinge +impious +impish +implacable +implant +implantation +implausible +implement +implementation +implementer +implementor +implicant +implicate +implicit +implore +impolite +impolitic +imponderable +import +important +importation +importunate +importune +impose +imposition +impossible +impost +imposture +impotent +impound +impoverish +impracticable +impractical +imprecate +imprecise +impregnable +impregnate +impresario +impress +impressible +impression +impressive +imprimatur +imprint +imprison +improbable +impromptu +improper +impropriety +improve +improvident +improvisate +improvise +imprudent +impudent +impugn +impulse +impulsive +impunity +impure +imputation +impute +in +inability +inaccessible +inaccuracy +inaccurate +inaction +inactivate +inactive +inadequacy +inadequate +inadmissible +inadvertent +inadvisable +inalienable +inalterable +inane +inanimate +inappeasable +inapplicable +inappreciable +inapproachable +inappropriate +inapt +inaptitude +inarticulate +inasmuch +inattention +inattentive +inaudible +inaugural +inaugurate +inauspicious +inauthentic +inboard +inborn +inbred +inbreed +Inc +Inca +incalculable +incandescent +incant +incantation +incapable +incapacitate +incapacity +incarcerate +incarnate +incautious +incendiary +incense +incentive +inception +inceptor +incessant +incest +incestuous +inch +inchoate +inchworm +incident +incidental +incinerate +incipient +incise +incisive +incisor +incite +inclement +inclination +incline +inclose +include +inclusion +inclusive +incognito +incoherent +incombustible +income +incommensurable +incommensurate +incommunicable +incommutable +incomparable +incompatible +incompetent +incomplete +incompletion +incomprehensible +incomprehension +incompressible +incomputable +inconceivable +inconclusive +incondensable +incongruity +incongruous +inconsequential +inconsiderable +inconsiderate +inconsistent +inconsolable +inconspicuous +inconstant +incontestable +incontrollable +incontrovertible +inconvenient +inconvertible +incorporable +incorporate +incorrect +incorrigible +incorruptible +increasable +increase +incredible +incredulity +incredulous +increment +incriminate +incubate +incubi +incubus +inculcate +inculpable +incumbent +incur +incurred +incurrer +incurring +incursion +indebted +indecent +indecipherable +indecision +indecisive +indecomposable +indeed +indefatigable +indefensible +indefinable +indefinite +indelible +indelicate +indemnity +indent +indentation +indenture +independent +indescribable +indestructible +indeterminable +indeterminacy +indeterminate +index +India +Indiana +Indianapolis +indicant +indicate +indices +indict +Indies +indifferent +indigene +indigenous +indigent +indigestible +indigestion +indignant +indignation +indignity +indigo +Indira +indirect +indiscernible +indiscoverable +indiscreet +indiscretion +indiscriminate +indispensable +indispose +indisposition +indisputable +indissoluble +indistinct +indistinguishable +indium +individual +individuate +indivisible +Indo +Indochina +Indochinese +indoctrinate +Indoeuropean +indolent +indomitable +Indonesia +indoor +indorse +indubitable +induce +inducible +induct +inductance +inductee +inductor +indulge +indulgent +Indus +industrial +industrious +industry +indwell +indy +inebriate +inedible +ineducable +ineffable +ineffective +ineffectual +inefficacy +inefficient +inelastic +inelegant +ineligible +ineluctable +inept +inequality +inequitable +inequity +inequivalent +ineradicable +inert +inertance +inertia +inertial +inescapable +inessential +inestimable +inevitable +inexact +inexcusable +inexhaustible +inexorable +inexpedient +inexpensive +inexperience +inexpert +inexpiable +inexplainable +inexplicable +inexplicit +inexpressible +inextinguishable +inextricable +infallible +infamous +infamy +infant +infanticide +infantile +infantry +infantryman +infantrymen +infarct +infatuate +infeasible +infect +infectious +infelicitous +infelicity +infer +inference +inferential +inferior +infernal +inferno +inferred +inferring +infertile +infest +infestation +infidel +infield +infighting +infiltrate +infima +infimum +infinite +infinitesimal +infinitive +infinitude +infinitum +infinity +infirm +infirmary +infix +inflame +inflammable +inflammation +inflammatory +inflate +inflater +inflationary +inflect +inflexible +inflict +inflorescent +inflow +influence +influent +influential +influenza +influx +info +inform +informal +informant +information +informative +infra +infract +infrared +infrastructure +infrequent +infringe +infuriate +infuse +infusible +infusion +infusoria +ingather +ingenious +ingenuity +ingenuous +Ingersoll +ingest +ingestible +ingestion +inglorious +ingot +ingrained +Ingram +ingrate +ingratiate +ingratitude +ingredient +ingrown +inhabit +inhabitant +inhabitation +inhalation +inhale +inharmonious +inhere +inherent +inherit +inheritance +inheritor +inhibit +inhibition +inhibitor +inhibitory +inholding +inhomogeneity +inhomogeneous +inhospitable +inhuman +inhumane +inimical +inimitable +iniquitous +iniquity +initial +initiate +inject +injudicious +Injun +injunct +injure +injurious +injury +injustice +ink +inkling +inlaid +inland +inlay +inlet +Inman +inmate +inn +innard +innate +innermost +innkeeper +innocent +innocuous +innovate +innuendo +innumerable +inoculate +inoperable +inoperative +inopportune +inordinate +inorganic +input +inputting +inquest +inquire +inquiry +inquisition +inquisitive +inquisitor +inroad +insane +insatiable +inscribe +inscription +inscrutable +insect +insecticide +insectivore +insectivorous +insecure +inseminate +insensible +insensitive +inseparable +insert +inset +inshore +inside +insidious +insight +insightful +insignia +insignificant +insincere +insinuate +insipid +insist +insistent +insofar +insolate +insolent +insoluble +insolvable +insolvent +insomnia +insomniac +insouciant +inspect +inspector +inspiration +inspire +instable +install +installation +instant +instantaneous +instantiate +instar +instead +instep +instigate +instill +instillation +instinct +instinctual +institute +institution +instruct +instructor +instrument +instrumentation +insubordinate +insubstantial +insufferable +insufficient +insular +insulate +insulin +insult +insuperable +insupportable +insuppressible +insurance +insure +insurgent +insurmountable +insurrect +intact +intake +intangible +integer +integrable +integral +integrand +integrate +integrity +integument +intellect +intellectual +intelligent +intelligentsia +intelligible +intemperance +intemperate +intend +intendant +intense +intensify +intensive +intent +intention +inter +intercalate +intercept +interception +interceptor +intercom +interdict +interdigitate +interest +interfere +interference +interferometer +interferon +interim +interior +interject +interlude +intermediary +intermit +intermittent +intern +internal +internescine +Interpol +interpolate +interpolatory +interpret +interpretation +interpretive +interregnum +interrogate +interrogatory +interrupt +interruptible +interruption +intersect +intersperse +interstice +interstitial +interval +intervene +intervenor +intervention +interviewee +intestate +intestinal +intestine +intimacy +intimal +intimate +intimater +intimidate +into +intolerable +intolerant +intonate +intone +intoxicant +intoxicate +intra +intractable +intransigent +intransitive +intrepid +intricacy +intricate +intrigue +intrinsic +introduce +introduction +introductory +introit +introject +introspect +introversion +introvert +intrude +intrusion +intrusive +intuit +intuition +intuitive +inundate +inure +invade +invalid +invalidate +invaluable +invariable +invariant +invasion +invasive +invective +inveigh +inveigle +invent +invention +inventive +inventor +inventory +Inverness +inverse +inversion +invert +invertebrate +invertible +invest +investigate +investigatory +investor +inveterate +inviable +invidious +invigorate +invincible +inviolable +inviolate +invisible +invitation +invite +invitee +invocable +invocate +invoice +invoke +involuntary +involute +involution +involutorial +involve +invulnerable +inward +Io +iodate +iodide +iodinate +iodine +ion +ionic +ionosphere +ionospheric +iota +Iowa +ipecac +ipsilateral +ipso +IQ +IR +Ira +Iran +Iranian +Iraq +Iraqi +irate +ire +Ireland +Irene +iridium +iris +Irish +Irishman +Irishmen +irk +irksome +Irma +iron +ironbound +ironic +ironside +ironstone +ironwood +irony +Iroquois +irradiate +irrational +Irrawaddy +irreclaimable +irreconcilable +irreconciliable +irrecoverable +irredeemable +irredentism +irredentist +irreducible +irrefutable +irregular +irrelevant +irremediable +irremovable +irreparable +irreplaceable +irrepressible +irreproachable +irreproducible +irresistible +irresolute +irresolution +irresolvable +irrespective +irresponsible +irretrievable +irreverent +irreversible +irrevocable +irrigate +irritable +irritant +irritate +irruption +IRS +Irvin +Irvine +Irving +Irwin +i's +is +Isaac +Isaacson +Isabel +Isabella +Isadore +Isaiah +isentropic +Isfahan +Ising +isinglass +Isis +Islam +Islamabad +Islamic +island +isle +islet +isn't +isochronal +isochronous +isocline +isolate +Isolde +isomer +isomorph +isomorphic +isopleth +isotherm +isotope +isotropy +Israel +Israeli +Israelite +issuant +issue +Istanbul +isthmus +Istvan +it +Italian +italic +Italy +itch +itchy +it'd +item +iterate +Ithaca +itinerant +itinerary +it'll +Ito +itself +IT&T +ITT +iv +Ivan +Ivanhoe +I've +Iverson +ivory +ivy +ix +Izvestia +j +jab +Jablonsky +jack +jackal +jackanapes +jackass +jackboot +jackdaw +jacket +Jackie +jackknife +Jackman +jackpot +Jackson +Jacksonville +Jacky +JACM +Jacob +Jacobean +Jacobi +Jacobian +Jacobite +Jacobsen +Jacobson +Jacobus +Jacqueline +Jacques +jade +Jaeger +jag +jagging +jaguar +Jaime +Jakarta +jake +jalopy +jam +Jamaica +jamboree +James +Jamestown +Jan +Jane +Janeiro +Janet +jangle +Janice +janissary +janitor +janitorial +Janos +Jansenist +January +Janus +Japan +Japanese +jar +jargon +Jarvin +Jason +jasper +jaundice +jaunty +Java +java +javelin +jaw +jawbone +jay +jazz +jazzy +jealous +jealousy +jean +Jeannie +Jed +jeep +Jeff +Jefferson +Jeffrey +Jehovah +jejune +jejunum +jelly +jellyfish +Jenkins +Jennie +Jennifer +Jennings +jenny +Jensen +jeopard +jeopardy +Jeremiah +Jeremy +Jeres +Jericho +jerk +jerky +Jeroboam +Jerome +jerry +jersey +Jerusalem +jess +Jesse +Jessica +Jessie +jest +Jesuit +Jesus +jet +jetliner +jettison +Jew +jewel +Jewell +jewelry +Jewett +Jewish +jibe +jiffy +jig +jigging +jiggle +jigsaw +Jill +jilt +Jim +Jimenez +Jimmie +jimmy +jingle +jinx +jitter +jitterbug +jittery +jive +Jo +Joan +Joanna +Joanne +Joaquin +job +jobholder +jock +jockey +jockstrap +jocose +jocular +jocund +Joe +Joel +joey +jog +jogging +joggle +Johann +Johanna +Johannes +Johannesburg +Johansen +Johanson +John +Johnny +Johnsen +Johnson +Johnston +Johnstown +join +joint +joke +Joliet +Jolla +jolly +jolt +Jon +Jonas +Jonathan +Jones +jonquil +Jordan +Jorge +Jorgensen +Jorgenson +Jose +Josef +Joseph +Josephine +Josephson +Josephus +Joshua +Josiah +joss +jostle +jot +joule +jounce +journal +journalese +journey +journeyman +journeymen +joust +Jovanovich +Jove +jovial +Jovian +jowl +jowly +joy +Joyce +joyful +joyous +joyride +joystick +Jr +j's +Juan +Juanita +jubilant +jubilate +Judaica +Judaism +Judas +Judd +Jude +judge +judicable +judicatory +judicature +judicial +judiciary +judicious +Judith +judo +Judson +Judy +jug +jugate +juggernaut +jugging +juggle +Jugoslavia +juice +juicy +juju +jujube +juke +jukebox +Jukes +julep +Jules +Julia +Julie +Juliet +Julio +Julius +July +jumble +jumbo +jump +jumpy +junco +junction +junctor +juncture +June +Juneau +Jung +Jungian +jungle +junior +juniper +junk +junkerdom +junketeer +junky +Juno +junta +Jupiter +Jura +Jurassic +jure +juridic +jurisdiction +jurisprudent +jurisprudential +juror +jury +just +justice +justiciable +justify +Justine +Justinian +jut +jute +Jutish +Jutland +juvenile +juxtapose +juxtaposition +k +Kabuki +Kabul +Kaddish +Kafka +Kafkaesque +Kahn +kaiser +Kajar +Kalamazoo +kale +kaleidescope +kaleidoscope +kalmia +Kalmuk +Kamchatka +kamikaze +Kampala +Kampuchea +Kane +kangaroo +Kankakee +Kannada +Kansas +Kant +kaolin +kaolinite +Kaplan +kapok +kappa +Karachi +Karamazov +karate +Karen +Karl +karma +Karol +Karp +karyatid +Kashmir +Kaskaskia +Kate +Katharine +Katherine +Kathleen +Kathy +Katie +Katmandu +Katowice +katydid +Katz +Kauffman +Kaufman +kava +Kay +kayo +kazoo +Keaton +Keats +keddah +keel +keelson +keen +Keenan +keep +keeshond +keg +Keith +Keller +Kelley +Kellogg +kelly +kelp +Kelsey +Kelvin +Kemp +ken +Kendall +Kennan +Kennecott +Kennedy +kennel +Kenneth +Kenney +keno +Kensington +Kent +Kenton +Kentucky +Kenya +Kenyon +Kepler +kept +kerchief +Kermit +kern +kernel +Kernighan +kerosene +Kerouac +Kerr +kerry +kerygma +Kessler +kestrel +ketch +ketchup +keto +ketone +ketosis +Kettering +kettle +Kevin +key +keyboard +Keyes +keyhole +Keynes +Keynesian +keynote +keypunch +keystone +keyword +khaki +khan +Khartoum +Khmer +Khrushchev +kibbutzim +kibitz +kick +kickback +kickoff +kid +Kidde +kiddie +kidnap +kidnapped +kidnapping +kidney +Kieffer +Kiev +Kiewit +Kigali +Kikuyu +Kilgore +Kilimanjaro +kill +killdeer +killjoy +kilohm +Kim +Kimball +Kimberly +kimono +kin +kind +kindergarten +kindle +kindred +kinematic +kinesic +kinetic +king +kingbird +kingdom +kingfisher +kinglet +kingpin +Kingsbury +Kingsley +Kingston +kink +kinkajou +kinky +Kinney +Kinshasha +kinsman +kinsmen +kiosk +Kiowa +Kipling +Kirby +Kirchner +Kirchoff +kirk +Kirkland +Kirkpatrick +Kirov +kiss +kit +Kitakyushu +kitchen +kitchenette +kite +kitten +kittenish +kittle +kitty +kiva +kivu +Kiwanis +kiwi +Klan +Klaus +klaxon +kleenex +Klein +Kline +Klux +klystron +knack +Knapp +knapsack +Knauer +knead +knee +kneecap +kneel +knelt +knew +knick +Knickerbocker +knife +knight +Knightsbridge +knit +knives +knob +knobby +knock +knockdown +knockout +knoll +Knossos +knot +Knott +knotty +know +knoweth +knowhow +knowledge +knowledgeable +Knowles +Knowlton +known +Knox +Knoxville +knuckle +knuckleball +Knudsen +Knudson +knurl +Knutsen +Knutson +koala +Kobayashi +Koch +Kochab +Kodachrome +kodak +Kodiak +Koenig +Koenigsberg +kohlrabi +koinonia +kola +kolkhoz +kombu +Kong +Konrad +Koppers +Koran +Korea +kosher +Kovacs +Kowalewski +Kowalski +Kowloon +kraft +Krakatoa +Krakow +Kramer +Krause +kraut +Krebs +Kremlin +Kresge +Krieger +krill +Krishna +Kristin +Kronecker +Krueger +Kruger +krummholz +Kruse +krypton +KS +k's +Ku +kudo +kudzu +Kuhn +kulak +Kumar +kumquat +Kurd +Kurt +Kuwait +kwashiorkor +KY +Kyle +Kyoto +l +la +lab +Laban +label +labia +labial +labile +lability +labium +laboratory +laborious +labour +Labrador +labradorite +labyrinth +lac +lace +lacerate +Lacerta +lacewing +Lachesis +lachrymose +lack +lackadaisic +lackey +laconic +lacquer +lacrosse +lactate +lactose +lacuna +lacunae +lacustrine +lacy +lad +laden +ladle +lady +ladybird +ladybug +ladyfern +Lafayette +lag +lager +lagging +lagoon +Lagos +Lagrange +Lagrangian +Laguerre +Lahore +laid +Laidlaw +lain +lair +laissez +laity +lake +Lakehurst +lakeside +lakh +lam +lama +Lamar +Lamarck +lamb +lambda +lambert +lame +lamellar +lament +lamentation +laminar +laminate +lamp +lampblack +lamplight +lampoon +lamprey +Lana +Lancashire +Lancaster +lance +Lancelot +lancet +land +landau +landfill +landhold +Landis +landlady +landlocked +landlord +landlubber +landmark +landmass +landowner +landowning +landscape +landslide +lane +Lang +Lange +Langley +Langmuir +language +languid +languish +langur +Lanka +lanky +Lansing +lantern +lanthanide +lanthanum +Lao +Laocoon +Laos +Laotian +lap +lapel +lapelled +lapidary +Laplace +lappet +lapse +Laramie +larceny +larch +lard +Laredo +Lares +large +largemouth +largesse +lariat +lark +Larkin +larkspur +Larry +Lars +Larsen +Larson +larva +larvae +larval +laryngeal +larynges +larynx +lascar +lascivious +lase +lash +lass +lasso +last +Laszlo +latch +late +latent +later +latera +lateral +Lateran +laterite +latex +lath +lathe +Lathrop +Latin +Latinate +latitude +latitudinal +latitudinary +Latrobe +latter +lattice +latus +Latvia +laud +laudanum +laudatory +Lauderdale +Laue +laugh +laughingstock +Laughlin +laughter +launch +launder +laundry +laura +laureate +laurel +Lauren +Laurent +Laurentian +Laurie +Lausanne +lava +lavabo +lavatory +lavender +lavish +Lavoisier +law +lawbreaker +lawbreaking +lawful +lawgiver +lawgiving +lawmake +lawman +lawmen +lawn +Lawrence +lawrencium +Lawson +lawsuit +lawyer +lax +laxative +lay +layette +layman +laymen +layoff +layout +layperson +Layton +layup +Lazarus +laze +lazy +lazybones +lea +leach +leachate +lead +leaden +leadeth +leadsman +leadsmen +leaf +leaflet +leafy +league +leak +leakage +leaky +lean +Leander +leap +leapfrog +leapt +Lear +learn +lease +leasehold +leash +least +leather +leatherback +leatherneck +leatherwork +leathery +leave +leaven +Leavenworth +Lebanese +Lebanon +lebensraum +Lebesgue +lecher +lechery +lectern +lectionary +lecture +led +ledge +lee +leech +Leeds +leek +leer +leery +Leeuwenhoek +leeward +leeway +left +leftmost +leftover +leftward +lefty +leg +legacy +legal +legate +legatee +legato +legend +legendary +Legendre +legerdemain +legging +leggy +leghorn +legible +legion +legislate +legislature +legitimacy +legitimate +legume +leguminous +Lehigh +Lehman +Leibniz +Leigh +Leighton +Leila +leisure +leitmotif +leitmotiv +Leland +lemma +lemming +lemon +lemonade +Lemuel +lemur +Len +Lena +lend +length +lengthen +lengthwise +lengthy +lenient +Lenin +Leningrad +Lennox +Lenny +Lenore +lens +lent +Lenten +lenticular +lentil +Leo +Leon +Leona +Leonard +Leonardo +Leone +Leonid +leonine +leopard +Leopold +leper +lepidolite +lepidopterist +leprosy +Leroy +Lesbian +lesion +Leslie +Lesotho +less +lessee +lessen +lesson +lessor +lest +Lester +let +lethal +lethargy +Lethe +Letitia +letterhead +letterman +lettermen +lettuce +leucine +Lev +levee +level +lever +leverage +Levi +leviathan +Levin +Levine +Levis +levitate +Leviticus +Levitt +levity +levulose +levy +lew +lewd +lewis +lexical +lexicographer +lexicography +lexicon +Lexington +Leyden +liable +liaison +liana +liar +libation +libel +libelous +liberal +liberate +Liberia +libertarian +libertine +liberty +libidinous +libido +Libra +librarian +library +librate +librettist +libretto +Libreville +Libya +lice +licensable +licensee +licensor +licentious +lichen +lick +licorice +lid +lie +Lieberman +Liechtenstein +lien +lieu +lieutenant +life +lifeblood +lifeboat +lifeguard +lifelong +lifespan +lifestyle +lifetime +LIFO +lift +ligament +ligand +ligature +Ligget +Liggett +light +lighten +lightface +lightfooted +lighthearted +lighthouse +lightning +lightproof +lightweight +lignite +lignum +like +likeable +liken +likewise +Lila +lilac +Lilian +Lillian +Lilliputian +Lilly +lilt +lily +lim +Lima +limb +limbic +limbo +lime +limelight +limerick +limestone +limit +limitate +limnology +limousine +limp +limpet +limpid +limpkin +Lin +linchpin +Lincoln +Lind +Linda +Lindberg +Lindbergh +linden +Lindholm +Lindquist +Lindsay +Lindsey +Lindstrom +line +lineage +lineal +linear +linebacker +lineman +linemen +linen +lineprinter +lineup +linger +lingerie +lingo +lingua +lingual +linguist +liniment +link +linkage +Linnaeus +linoleic +linoleum +Linotype +linseed +lint +Linton +Linus +lion +Lionel +lioness +lip +lipid +Lippincott +Lipschitz +Lipscomb +lipstick +Lipton +liquefaction +liquefy +liqueur +liquid +liquidate +liquor +Lisa +Lisbon +Lise +lisle +lisp +Lissajous +list +listen +lit +litany +literacy +literal +literary +literate +literature +lithe +lithic +lithium +lithograph +lithography +lithology +lithosphere +lithospheric +Lithuania +litigant +litigate +litigious +litmus +litterbug +littermate +little +littleneck +Littleton +Litton +littoral +liturgic +liturgy +live +liven +Livermore +Liverpool +Liverpudlian +liverwort +livery +livestock +liveth +livid +Livingston +livre +Liz +lizard +Lizzie +llama +Lloyd +lo +load +loaf +loam +loamy +loan +loanword +loath +loathe +loathsome +loaves +lob +lobar +lobby +lobe +Lobelia +loblolly +lobo +lobscouse +lobster +lobular +lobule +local +locale +locate +loch +loci +lock +Locke +Lockhart +Lockheed +Lockian +locknut +lockout +locksmith +lockup +Lockwood +locomote +locomotion +locomotive +locomotor +locomotory +locoweed +locus +locust +locutor +lodestone +lodge +lodgepole +Lodowick +Loeb +l'oeil +loess +loft +lofty +log +Logan +logarithm +logarithmic +loge +loggerhead +logging +logic +logician +login +logistic +logjam +loin +loincloth +Loire +Lois +loiter +Loki +Lola +loll +lollipop +lolly +Lomb +Lombard +Lombardy +Lome +London +lone +lonesome +long +longevity +Longfellow +longhand +longhorn +longish +longitude +longitudinal +longleg +longstanding +longtime +longue +longwinded +look +lookout +lookup +loom +Loomis +loon +loop +loophole +loose +looseleaf +loosen +loosestrife +loot +lop +lope +Lopez +lopseed +lopsided +loquacious +loquacity +loquat +lord +lordosis +lore +Lorelei +Loren +Lorenz +Lorinda +loris +Lorraine +lorry +losable +lose +loss +lossy +lost +lot +lotion +Lotte +lottery +Lottie +lotus +Lou +loud +loudspeaker +loudspeaking +Louis +Louisa +Louise +Louisiana +Louisville +lounge +Lounsbury +Lourdes +louse +lousewort +lousy +Louvre +love +lovebird +Lovelace +Loveland +lovelorn +low +lowboy +lowdown +Lowe +Lowell +lowland +Lowry +lox +loy +loyal +loyalty +lozenge +l's +LSI +LTV +Lubbock +Lubell +lubricant +lubricate +lubricious +lubricity +Lucas +Lucerne +Lucia +Lucian +lucid +Lucifer +Lucille +Lucius +luck +lucky +lucrative +lucre +Lucretia +Lucretius +lucy +ludicrous +Ludlow +Ludwig +Lufthansa +Luftwaffe +lug +luge +luger +luggage +lugging +lugubrious +Luis +luke +lukewarm +lull +lullaby +lulu +lumbago +lumbar +lumber +lumberjack +lumberman +lumbermen +lumen +luminance +luminary +luminescent +luminosity +luminous +lummox +lump +lumpish +Lumpur +lumpy +lunacy +lunar +lunary +lunate +lunatic +lunch +luncheon +lunchroom +lunchtime +Lund +Lundberg +Lundquist +lung +lunge +lupine +Lura +lurch +lure +lurid +lurk +Lusaka +luscious +lush +lust +lustful +lustrous +lusty +lutanist +lute +lutetium +Luther +Lutheran +Lutz +lux +luxe +Luxembourg +luxuriant +luxuriate +luxurious +luxury +Luzon +L'vov +lycee +lycopodium +Lydia +lye +lying +Lykes +Lyle +Lyman +lymph +lymphocyte +lymphoma +lynch +Lynchburg +Lynn +lynx +Lyon +Lyra +lyre +lyrebird +lyric +Lysenko +lysergic +lysine +m +ma +Mabel +Mac +macabre +Macadamia +macaque +MacArthur +Macassar +macaw +Macbeth +MacDonald +MacDougall +mace +Macedon +Macedonia +macerate +MacGregor +Mach +machete +Machiavelli +machination +machine +machinery +machismo +macho +macintosh +mack +MacKenzie +mackerel +Mackey +Mackinac +Mackinaw +mackintosh +MacMahon +MacMillan +Macon +macro +macromolecular +macromolecule +macrophage +macroscopic +macrostructure +mad +Madagascar +madam +Madame +madcap +madden +Maddox +made +Madeira +Madeleine +Madeline +madhouse +Madhya +Madison +madman +madmen +Madonna +Madras +Madrid +madrigal +Madsen +madstone +Mae +maelstrom +maestro +Mafia +Mafioso +magazine +Magdalene +Magellanic +magenta +Maggie +maggot +maggoty +magi +magic +magician +magisterial +magistrate +magma +magna +magnanimity +magnanimous +magnate +magnesia +magnesite +magnesium +magnet +magnetic +magnetite +magneto +magnetron +magnificent +magnify +magnitude +magnolia +magnum +Magnuson +Magog +magpie +Magruder +maharaja +Maharashtra +Mahayana +Mahayanist +mahogany +Mahoney +maid +maiden +maidenhair +maidservant +Maier +mail +mailbox +mailman +mailmen +maim +main +Maine +mainframe +mainland +mainline +mainstay +mainstream +maintain +maintenance +maitre +majestic +majesty +major +Majorca +make +makeshift +makeup +Malabar +maladapt +maladaptive +maladjust +maladroit +malady +Malagasy +malaise +malaprop +malaria +malarial +Malawi +Malay +Malaysia +Malcolm +malconduct +malcontent +Malden +maldistribute +Maldive +male +maledict +malevolent +malfeasant +malformation +malformed +malfunction +Mali +malice +malicious +malign +malignant +mall +mallard +malleable +mallet +Mallory +mallow +malnourished +malnutrition +malocclusion +Malone +Maloney +malposed +malpractice +Malraux +malt +Malta +Maltese +Malthus +Malthusian +Malton +maltose +maltreat +maltster +mambo +mamma +mammal +mammalian +mammary +mammoth +man +mana +manage +manageable +managerial +Managua +Manama +manatee +Manchester +Manchuria +mandamus +mandarin +mandate +mandatory +mandible +mandrake +mandrel +mandrill +mane +maneuver +Manfred +manganese +mange +mangel +mangle +mango +mangrove +mangy +Manhattan +manhole +mania +maniac +maniacal +manic +manicure +manifest +manifestation +manifesto +manifold +manikin +Manila +manioc +manipulable +manipulate +Manitoba +mankind +Manley +Mann +manna +mannequin +mannitol +manometer +manor +manpower +manse +manservant +Mansfield +mansion +manslaughter +mantel +mantelpiece +mantic +mantis +mantissa +mantle +mantrap +manual +Manuel +manufacture +manumission +manumit +manumitted +manure +manuscript +Manville +many +manzanita +Mao +Maori +map +maple +mar +marathon +maraud +marble +Marc +Marceau +Marcel +Marcello +march +Marcia +Marco +Marcus +Marcy +Mardi +mare +Margaret +margarine +Margery +margin +marginal +marginalia +Margo +Marguerite +maria +Marianne +Marie +Marietta +marigold +marijuana +Marilyn +marimba +Marin +marina +marinade +marinate +marine +Marino +Mario +Marion +marionette +marital +maritime +marjoram +Marjorie +Marjory +mark +market +marketeer +marketplace +marketwise +Markham +Markov +Markovian +marksman +marksmen +Marlboro +Marlborough +Marlene +marlin +Marlowe +marmalade +marmoset +marmot +maroon +marque +marquee +marquess +Marquette +marquis +marriage +marriageable +Marrietta +Marriott +marrow +marrowbone +marry +Marseilles +marsh +Marsha +marshal +Marshall +marshland +marshmallow +marshy +marsupial +mart +marten +martensite +Martha +martial +Martian +martin +Martinez +martingale +martini +Martinique +Martinson +Marty +martyr +martyrdom +marvel +marvelous +Marvin +Marx +Mary +Maryland +marzipan +mascara +masculine +maser +Maseru +mash +mask +masochism +masochist +mason +Masonic +Masonite +masonry +masque +masquerade +mass +Massachusetts +massacre +massage +masseur +Massey +massif +massive +mast +masterful +mastermind +masterpiece +mastery +mastic +mastiff +mastodon +mat +match +matchbook +matchmake +mate +Mateo +mater +material +materiel +maternal +maternity +math +mathematic +mathematician +Mathews +Mathewson +Mathias +Mathieu +Matilda +matinal +matinee +matins +Matisse +matriarch +matriarchal +matriarchy +matrices +matriculate +matrilineal +matrimonial +matrimony +matrix +matroid +matron +Matson +Matsumoto +matte +Matthew +mattock +mattress +Mattson +maturate +mature +maudlin +maul +Maureen +Maurice +Mauricio +Maurine +Mauritania +Mauritius +mausoleum +mauve +maverick +Mavis +maw +mawkish +Mawr +max +maxim +maxima +maximal +Maximilian +maximum +Maxine +maxwell +Maxwellian +may +Maya +mayapple +maybe +Mayer +Mayfair +Mayflower +mayfly +mayhem +Maynard +Mayo +mayonnaise +mayor +mayoral +mayst +Mazda +maze +mazurka +MBA +Mbabane +McAdams +McAllister +McBride +McCabe +McCall +McCallum +McCann +McCarthy +McCarty +McCauley +McClain +McClellan +McClure +McCluskey +McConnel +McConnell +McCormick +McCoy +McCracken +McCullough +McDaniel +McDermott +McDonald +McDonnell +McDougall +McDowell +McElroy +McFadden +McFarland +McGee +McGill +McGinnis +McGovern +McGowan +McGrath +McGraw +McGregor +McGuire +McHugh +McIntosh +McIntyre +McKay +McKee +McKenna +McKenzie +McKeon +McKesson +McKinley +McKinney +McKnight +McLaughlin +McLean +McLeod +McMahon +McMillan +McMullen +McNally +McNaughton +McNeil +McNulty +McPherson +MD +me +mead +meadow +meadowland +meadowlark +meadowsweet +meager +meal +mealtime +mealy +mean +meander +meaningful +meant +meantime +meanwhile +measle +measure +meat +meaty +Mecca +mechanic +mechanism +mechanist +mecum +medal +medallion +meddle +Medea +Medford +media +medial +median +mediate +medic +medicate +Medici +medicinal +medicine +medico +mediocre +mediocrity +meditate +Mediterranean +medium +medlar +medley +Medusa +meek +meet +meetinghouse +Meg +megabit +megabyte +megahertz +megalomania +megalomaniac +megalopolis +megaton +megavolt +megawatt +megaword +megohm +Meier +Meiji +meiosis +Meistersinger +Mekong +Mel +melamine +melancholy +Melanesia +melange +Melanie +melanin +melanism +melanoma +Melbourne +Melcher +meld +melee +Melinda +meliorate +Melissa +Mellon +mellow +melodic +melodious +melodrama +melodramatic +melody +melon +Melpomene +melt +meltdown +Melville +Melvin +member +membrane +memento +memo +memoir +memorabilia +memorable +memoranda +memorandum +memorial +memory +Memphis +men +menace +menagerie +menarche +mend +mendacious +mendacity +Mendel +mendelevium +Mendelian +Mendelssohn +Menelaus +menfolk +menhaden +menial +meningitis +meniscus +Menlo +Mennonite +menopausal +menopause +Menorca +menstrual +menstruate +mensurable +mensuration +mental +mention +mentor +menu +Menzies +meow +Mephistopheles +mercantile +Mercator +Mercedes +mercenary +mercer +merchandise +merchant +merciful +Merck +mercurial +mercuric +mercury +mercy +mere +Meredith +meretricious +merganser +merge +meridian +meridional +meringue +merit +meritorious +Merle +merlin +mermaid +Merriam +Merrill +Merrimack +merriment +Merritt +merry +merrymake +Mervin +mesa +mescal +mescaline +mesenteric +mesh +mesmeric +mesoderm +meson +Mesopotamia +Mesozoic +mesquite +mess +message +messenger +Messiah +messiah +messianic +messieurs +Messrs +messy +mestizo +met +metabole +metabolic +metabolism +metabolite +metal +metallic +metalliferous +metallography +metalloid +metallurgic +metallurgist +metallurgy +metalwork +metamorphic +metamorphism +metamorphose +metamorphosis +metaphor +metaphoric +metazoa +metazoan +Metcalf +mete +meteor +meteoric +meteorite +meteoritic +meteorology +meter +methacrylate +methane +methanol +methionine +method +methodic +methodology +Methuen +Methuselah +methyl +methylene +meticulous +metier +metonymy +metric +metro +metronome +metropolis +metropolitan +mettle +mettlesome +Metzler +mew +Mexican +Mexico +Meyer +mezzanine +mezzo +mi +Miami +miaow +miasma +miasmal +mica +mice +Michael +Michaelangelo +Michel +Michelangelo +Michele +Michelin +Michelson +michigan +Mickelson +Mickey +Micky +micro +microbe +microbial +microcosm +micrography +micron +Micronesia +microscopy +mid +Midas +midband +midday +middle +Middlebury +middleman +middlemen +Middlesex +Middleton +Middletown +middleweight +midge +midget +midland +midmorn +midnight +midpoint +midrange +midscale +midsection +midshipman +midshipmen +midspan +midst +midstream +midterm +midway +midweek +Midwest +Midwestern +midwife +midwinter +midwives +midyear +mien +miff +mig +might +mightn't +mighty +mignon +migrant +migrate +migratory +Miguel +mike +mila +Milan +milch +mild +mildew +Mildred +mile +mileage +Miles +milestone +milieu +militant +militarism +militarist +military +militate +militia +militiaman +militiamen +milk +milkweed +milky +mill +Millard +millenarian +millenia +millennia +millennium +millet +Millie +Millikan +millinery +million +millionaire +millionfold +millionth +millipede +millstone +milord +milt +Milton +Miltonic +Milwaukee +mimeograph +mimesis +mimetic +Mimi +mimic +mimicked +mimicking +mimicry +mimosa +min +minaret +mince +mincemeat +mind +Mindanao +mindful +mine +minefield +mineral +mineralogy +Minerva +minestrone +minesweeper +mingle +mini +miniature +minicomputer +minim +minima +minimal +minimax +minimum +minion +ministerial +ministry +mink +Minneapolis +Minnesota +Minnie +minnow +Minoan +minor +Minos +minot +Minotaur +Minsk +Minsky +minstrel +minstrelsy +mint +minuend +minuet +minus +minuscule +minute +minuteman +minutemen +minutiae +Miocene +Mira +miracle +miraculous +mirage +Miranda +mire +Mirfak +Miriam +mirror +mirth +misanthrope +misanthropic +miscegenation +miscellaneous +miscellany +mischievous +miscible +miscreant +miser +misery +misnomer +misogynist +misogyny +miss +misshapen +missile +mission +missionary +Mississippi +Mississippian +missive +Missoula +Missouri +Missy +mist +mistletoe +mistress +misty +MIT +Mitchell +mite +miterwort +mitigate +mitochondria +mitosis +mitral +mitre +mitt +mitten +mix +mixture +mixup +Mizar +MN +mnemonic +MO +moan +moat +mob +mobcap +Mobil +mobile +mobility +mobster +moccasin +mocha +mock +mockernut +mockery +mockingbird +mockup +modal +mode +model +modem +moderate +modern +modest +Modesto +modesty +modicum +modify +modish +modular +modulate +module +moduli +modulo +modulus +Moe +Moen +Mogadiscio +Moghul +Mohammed +Mohammedan +Mohawk +Mohr +moiety +Moines +moire +Moiseyev +moist +moisten +moisture +molal +molar +molasses +mold +Moldavia +moldboard +moldy +mole +molecular +molecule +molehill +molest +Moliere +Moline +Moll +Mollie +mollify +mollusk +Molly +mollycoddle +Moloch +molt +molten +Moluccas +molybdate +molybdenite +molybdenum +moment +momenta +momentary +momentous +momentum +mommy +Mona +Monaco +monad +monadic +monarch +monarchic +monarchy +Monash +monastery +monastic +monaural +Monday +monel +monetarism +monetary +money +moneymake +moneywort +Mongolia +mongoose +monic +Monica +monies +monitor +monitory +monk +monkey +monkeyflower +monkish +Monmouth +Monoceros +monochromator +monocular +monogamous +monogamy +monolith +monologist +monologue +monomer +monomeric +monomial +Monongahela +monopoly +monotonous +monotreme +monoxide +Monroe +Monrovia +Monsanto +monsieur +monsoon +monster +monstrosity +monstrous +Mont +montage +Montague +Montana +Montclair +monte +Montenegrin +Monterey +Monteverdi +Montevideo +Montgomery +month +Monticello +Montmartre +Montpelier +Montrachet +Montreal +Monty +monument +moo +mooch +mood +moody +moon +moonbeam +Mooney +moonlight +moonlit +moor +Moore +Moorish +moose +moot +mop +moraine +moral +morale +Moran +morass +moratorium +Moravia +morbid +more +morel +Moreland +moreover +Moresby +Morgan +morgen +morgue +Moriarty +moribund +Morley +Mormon +morn +Moroccan +Morocco +moron +morose +morpheme +morphemic +morphine +morphism +morphology +morphophonemic +Morrill +morris +Morrison +Morrissey +Morristown +morrow +Morse +morsel +mort +mortal +mortar +mortem +mortgage +mortgagee +mortgagor +mortician +mortify +mortise +Morton +mortuary +mosaic +Moscow +Moser +Moses +Moslem +mosque +mosquito +mosquitoes +moss +mossy +most +mot +motel +motet +moth +mother +motherland +motif +motion +motivate +motive +motley +motor +motorcade +motorcar +motorcycle +Motorola +mottle +motto +mould +Moulton +mound +mount +mountain +mountaineer +mountainous +mountainside +mountaintop +mountebank +mourn +mournful +mouse +mousse +moustache +mousy +mouth +mouthful +mouthpart +mouthpiece +Mouton +move +movie +mow +Moyer +Mozart +mozzarella +MPH +Mr +Mrs +Ms +m's +Mt +mu +much +mucilage +muck +mucosa +mucus +mud +Mudd +muddle +muddlehead +muddy +mudguard +mudhole +mudsling +Mueller +Muenster +muezzin +muff +muffin +muffle +mug +mugging +muggy +mugho +Muir +Mukden +mukluk +mulatto +mulberry +mulch +mulct +mule +mulish +mull +mullah +mullein +Mullen +mulligan +mulligatawny +mullion +multi +Multics +multifarious +multinomial +multiple +multiplet +multiplex +multiplexor +multiplicand +multiplication +multiplicative +multiplicity +multitude +multitudinous +mum +mumble +Mumford +mummify +mummy +munch +Muncie +mundane +mung +Munich +municipal +munificent +munition +Munson +muon +Muong +mural +murder +murderous +muriatic +Muriel +murk +murky +murmur +Murphy +Murray +murre +Muscat +muscle +Muscovite +Muscovy +muscular +musculature +muse +museum +mush +mushroom +mushy +music +musicale +musician +musicology +musk +Muskegon +muskellunge +musket +muskmelon +muskox +muskoxen +muskrat +musky +muslim +muslin +mussel +must +mustache +mustachio +mustang +mustard +mustn't +musty +mutagen +mutandis +mutant +mutate +mutatis +mute +mutilate +mutineer +mutiny +mutt +mutter +mutton +mutual +mutuel +Muzak +Muzo +muzzle +my +Mycenae +Mycenaean +mycobacteria +mycology +mycoplasma +mycorrhiza +myel +myeline +myeloid +Myers +mylar +mynah +Mynheer +myocardial +myocardium +myofibril +myoglobin +myopia +myopic +myosin +Myra +myriad +Myron +myrrh +myrtle +myself +Mysore +mysterious +mystery +mystic +mystify +mystique +myth +mythic +mythology +n +NAACP +nab +Nabisco +Nadine +nadir +nag +Nagasaki +nagging +Nagoya +Nagy +naiad +nail +Nair +Nairobi +naive +naivete +Nakayama +naked +name +nameable +nameplate +namesake +Nan +Nancy +Nanette +Nanking +nanosecond +Nantucket +Naomi +nap +napkin +Naples +Napoleon +Napoleonic +Narbonne +narcissist +narcissus +narcosis +narcotic +Narragansett +narrate +narrow +narrowminded +narwhal +nary +NASA +nasal +nascent +Nash +Nashua +Nashville +Nassau +nasturtium +nasty +Nat +natal +Natalie +Natchez +Nate +Nathan +Nathaniel +nation +nationwide +native +NATO +natty +natural +nature +naturopath +naughty +nausea +nauseate +nauseum +nautical +nautilus +Navajo +naval +nave +navel +navigable +navigate +navy +nawab +nay +Nazarene +Nazareth +Nazi +Nazism +NBC +NBS +NC +NCAA +NCO +NCR +ND +Ndjamena +ne +Neal +Neanderthal +Neapolitan +near +nearby +nearsighted +neat +neater +neath +Nebraska +Nebuchadnezzar +nebula +nebulae +nebular +nebulous +necessary +necessitate +necessity +neck +necklace +neckline +necktie +necromancer +necromancy +necromantic +necropsy +necrosis +necrotic +nectar +nectareous +nectarine +nectary +Ned +nee +need +needful +needham +needle +needlepoint +needn't +needy +nefarious +Neff +negate +neglect +negligee +negligent +negligible +negotiable +negotiate +Negro +Negroes +Negroid +Nehru +neigh +Neil +neither +Nell +Nellie +Nelsen +Nelson +nematocyst +nematode +nemesis +neo +neoclassic +neodymium +neolithic +neologism +neon +neonatal +neonate +neophyte +neoprene +neoteny +Nepal +nepenthe +nephew +nepotism +nepotistic +Neptune +neptunium +nereid +Nero +nerve +nervous +Ness +nest +nestle +Nestor +net +nether +Netherlands +netherworld +nettle +nettlesome +network +Neumann +neural +neuralgia +neurasthenic +neuritis +neuroanatomic +neuroanatomy +neuroanotomy +neurology +neuromuscular +neuron +neuronal +neuropathology +neurophysiology +neuropsychiatric +neuroses +neurosis +neurotic +neuter +neutral +neutrino +neutron +neutronium +Neva +Nevada +neve +nevertheless +Nevins +new +Newark +Newbold +newborn +Newcastle +newcomer +newel +Newell +newfound +Newfoundland +newline +newlywed +Newman +Newport +newsboy +newscast +newsletter +newsman +newsmen +newspaper +newspaperman +newspapermen +newsreel +newsstand +Newsweek +newt +newton +Newtonian +next +Nguyen +NH +niacin +Niagara +Niamey +nib +nibble +Nibelung +Nicaragua +nice +nicety +niche +Nicholas +Nicholls +Nichols +Nicholson +nichrome +nick +nickel +nickname +Nicodemus +Nicosia +nicotinamide +nicotine +niece +Nielsen +Nielson +Nietzsche +nifty +Niger +Nigeria +niggardly +nigger +niggle +nigh +night +nightcap +nightclub +nightdress +nightfall +nightgown +nighthawk +nightingale +nightmare +nightmarish +nightshade +nightshirt +nighttime +NIH +nihilism +nihilist +Nikko +Nikolai +nil +Nile +nilpotent +nimble +nimbus +NIMH +Nina +nine +ninebark +ninefold +nineteen +nineteenth +ninetieth +ninety +ninetyfold +Nineveh +ninth +Niobe +niobium +nip +nipple +Nippon +nirvana +nit +nitpick +nitrate +nitric +nitride +nitrite +nitrogen +nitrogenous +nitroglycerine +nitrous +nitty +Nixon +NJ +NM +NNE +NNW +no +NOAA +Noah +nob +Nobel +nobelium +noble +nobleman +noblemen +noblesse +nobody +nobody'd +nocturnal +nocturne +nod +nodal +node +nodular +nodule +Noel +Noetherian +noise +noisemake +noisome +noisy +Nolan +Noll +nolo +nomad +nomadic +nomenclature +nominal +nominate +nominee +nomogram +nomograph +non +nonce +nonchalant +nondescript +none +nonetheless +nonogenarian +nonsensic +noodle +nook +noon +noontime +noose +nor +Nora +Nordhoff +Nordic +Nordstrom +Noreen +Norfolk +norm +Norma +normal +normalcy +Norman +Normandy +normative +Norris +Norse +north +Northampton +northbound +northeast +northeastern +northerly +northern +northernmost +northland +Northrop +Northrup +Northumberland +northward +northwest +northwestern +Norton +Norwalk +Norway +Norwegian +Norwich +nose +nosebag +nosebleed +nostalgia +nostalgic +Nostradamus +Nostrand +nostril +nosy +not +notary +notate +notch +note +notebook +noteworthy +nothing +notice +noticeable +notify +notion +notocord +notoriety +notorious +Notre +Nottingham +notwithstanding +Nouakchott +nought +noun +nourish +nouveau +Nov +nova +novae +Novak +novel +novelty +November +novice +novitiate +novo +Novosibirsk +now +nowaday +nowhere +nowise +noxious +nozzle +NRC +nroff +n's +NSF +NTIS +nu +nuance +Nubia +nubile +nucleant +nuclear +nucleate +nuclei +nucleic +nucleoli +nucleolus +nucleon +nucleotide +nucleus +nuclide +nude +nudge +nudibranch +nugatory +nugget +nuisance +null +nullify +Nullstellensatz +numb +numbly +numerable +numeral +numerate +numeric +numerology +numerous +numinous +numismatic +numismatist +nun +nuptial +nurse +nursery +nurturant +nurture +nut +nutate +nutcrack +nuthatch +nutmeg +nutria +nutrient +nutrition +nutritious +nutritive +nutshell +nuzzle +NV +NW +NY +NYC +nylon +nymph +nymphomania +nymphomaniac +Nyquist +NYU +o +oaf +oak +oaken +Oakland +Oakley +oakwood +oar +oases +oasis +oat +oatcake +oath +oatmeal +obduracy +obdurate +obedient +obeisant +obelisk +Oberlin +obese +obey +obfuscate +obfuscatory +obituary +object +objectify +objector +objet +oblate +obligate +obligatory +oblige +oblique +obliterate +oblivion +oblivious +oblong +obnoxious +oboe +oboist +O'Brien +obscene +obscure +obsequious +obsequy +observant +observation +observatory +observe +obsess +obsession +obsessive +obsidian +obsolescent +obsolete +obstacle +obstetric +obstetrician +obstinacy +obstinate +obstruct +obstruent +obtain +obtrude +obtrusive +obtuse +obverse +obviate +obvious +ocarina +occasion +occident +occidental +occipital +occlude +occlusion +occlusive +occult +occultate +occupant +occupation +occupy +occur +occurred +occurrent +occurring +ocean +Oceania +oceanic +oceanographer +oceanography +oceanside +ocelot +o'clock +O'Connell +O'Connor +Oct +octagon +octagonal +octahedra +octahedral +octahedron +octal +octane +octant +octave +Octavia +octennial +octet +octile +octillion +October +octogenarian +octopus +octoroon +ocular +odd +oddball +ode +O'Dell +Odessa +Odin +odious +odium +odometer +O'Donnell +odorous +O'Dwyer +Odysseus +odyssey +oedipal +Oedipus +oenology +o'er +oersted +of +off +offal +offbeat +Offenbach +offend +offensive +offer +offertory +offhand +office +officeholder +officemate +official +officialdom +officiate +officio +officious +offload +offprint +offsaddle +offset +offsetting +offshoot +offshore +offspring +offstage +oft +often +oftentimes +Ogden +ogle +ogre +ogress +oh +O'Hare +Ohio +ohm +ohmic +ohmmeter +oil +oilcloth +oilman +oilmen +oilseed +oily +oint +Ojibwa +OK +okapi +okay +Okinawa +Oklahoma +okra +Olaf +Olav +old +olden +Oldenburg +Oldsmobile +oldster +Olduvai +oldy +oleander +O'Leary +olefin +oleomargarine +olfactory +Olga +oligarchic +oligarchy +Oligocene +oligoclase +oligopoly +Olin +olive +Olivetti +Olivia +Olivier +olivine +Olsen +Olson +Olympia +Olympic +Omaha +Oman +ombudsman +ombudsperson +omega +omelet +omen +omicron +ominous +omission +omit +omitted +omitting +omnibus +omnipotent +omnipresent +omniscient +omnivore +omnivorous +on +once +oncology +oncoming +one +Oneida +O'Neill +onerous +oneself +onetime +oneupmanship +ongoing +onion +onlooker +onlooking +only +onomatopoeia +onomatopoeic +Onondaga +onrush +onrushing +onset +onslaught +Ontario +onto +ontogeny +ontology +onus +onward +onyx +oocyte +oodles +ooze +opacity +opal +opalescent +opaque +OPEC +Opel +open +opera +operable +operand +operant +operate +operatic +operetta +operon +Ophiucus +opiate +opinion +opinionate +opium +opossum +Oppenheimer +opponent +opportune +opposable +oppose +opposite +opposition +oppress +oppression +oppressive +oppressor +opprobrium +opt +opthalmic +opthalmology +optic +optima +optimal +optimism +optimist +optimum +option +optoacoustic +optoisolate +optometrist +optometry +opulent +opus +or +oracle +oracular +oral +orange +orangeroot +orangutan +orate +oratoric +oratorio +oratory +orb +orbit +orbital +Orca +orchard +orchestra +orchestral +orchestrate +orchid +orchis +ordain +ordeal +order +ordinal +ordinance +ordinary +ordinate +ordnance +ore +oregano +Oregon +Oresteia +Orestes +organ +organdy +organic +organismic +organometallic +orgasm +orgiastic +orgy +orient +oriental +orifice +origami +origin +original +originate +Orin +Orinoco +oriole +Orion +Orkney +Orlando +Orleans +ornament +ornamentation +ornate +ornery +ornithology +orography +Orono +orphan +orphanage +Orpheus +Orphic +Orr +Ortega +orthant +orthicon +orthoclase +orthodontic +orthodontist +orthodox +orthodoxy +orthogonal +orthography +orthonormal +orthopedic +orthophosphate +orthorhombic +Orville +Orwell +Orwellian +o's +Osaka +Osborn +Osborne +Oscar +oscillate +oscillatory +oscilloscope +Osgood +O'Shea +Oshkosh +osier +Osiris +Oslo +osmium +osmosis +osmotic +osprey +osseous +ossify +ostensible +ostentation +ostentatious +osteology +osteopath +osteopathic +osteopathy +osteoporosis +ostracism +ostracod +Ostrander +ostrich +O'Sullivan +Oswald +Othello +other +otherwise +otherworld +otiose +Otis +Ott +Ottawa +otter +Otto +Ottoman +Ouagadougou +ouch +ought +oughtn't +ounce +our +ourselves +oust +out +outermost +outlandish +outlawry +outrageous +ouvre +ouzel +ouzo +ova +oval +ovary +ovate +oven +ovenbird +over +overt +overture +Ovid +oviduct +oviform +oviparous +ovipositor +ovoviviparous +ovulate +ovum +ow +owe +Owens +owl +owlet +owly +own +ox +oxalate +oxalic +oxbow +oxcart +oxen +oxeye +Oxford +oxidant +oxidate +oxide +Oxnard +Oxonian +oxygen +oxygenate +oyster +Ozark +ozone +p +pa +Pablo +Pabst +pace +pacemake +pacesetting +pacific +pacifism +pacifist +pacify +pack +package +Packard +packet +pact +pad +paddle +paddock +paddy +padlock +padre +paean +pagan +page +pageant +pageantry +paginate +pagoda +paid +pail +pain +Paine +painful +painstaking +paint +paintbrush +pair +pairwise +Pakistan +Pakistani +pal +palace +palaeontology +palate +Palatine +palazzi +palazzo +pale +paleoanthropology +Paleolithic +Paleozoic +Palermo +Palestine +palette +palfrey +palindrome +palindromic +palisade +pall +palladia +Palladian +palladium +pallet +palliate +pallid +palm +palmate +palmetto +Palmolive +Palmyra +Palo +Palomar +palp +palpate +palsy +Pam +Pamela +pampa +pamper +pamphlet +pan +panacea +panama +Panamanian +pancake +Pancho +pancreas +pancreatic +panda +Pandanus +pandemic +pandemonium +pander +Pandora +pane +panel +pang +Pangaea +panhandle +panic +panicked +panicking +panicky +panicle +panjandrum +panoply +panorama +panoramic +pansy +pant +pantaloon +pantheism +pantheist +pantheon +panther +pantomime +pantomimic +pantothenic +pantry +panty +Paoli +pap +papa +papacy +papal +papaw +paper +paperback +paperweight +paperwork +papery +papillary +papoose +Pappas +pappy +paprika +Papua +papyri +papyrus +par +parabola +parabolic +paraboloid +paraboloidal +parachute +parade +paradigm +paradigmatic +paradise +paradox +paradoxic +paraffin +paragon +paragonite +paragraph +Paraguay +Paraguayan +parakeet +paralinguistic +parallax +parallel +parallelepiped +parallelogram +paralysis +paralytic +paramagnet +paramagnetic +parameter +paramilitary +paramount +Paramus +paranoia +paranoiac +paranoid +paranormal +parapet +paraphernalia +paraphrase +parapsychology +parasite +parasitic +parasol +parasympathetic +paratroop +paraxial +parboil +parcel +parch +pardon +pare +paregoric +parent +parentage +parental +parentheses +parenthesis +parenthetic +Pareto +pariah +parimutuel +Paris +parish +parishioner +Parisian +park +parka +Parke +Parkinson +parkish +parkland +parkway +parlance +parlay +parley +parliament +parliamentarian +parliamentary +Parmesan +parochial +parody +parole +parolee +paroxysm +parquet +Parr +Parrish +parrot +parry +parse +Parsi +Parsifal +parsimonious +parsimony +parsley +parsnip +parson +parsonage +part +partake +Parthenon +Parthia +partial +participant +participate +participle +particle +particular +particulate +partisan +partition +partner +partook +partridge +party +parvenu +Pasadena +Pascal +paschal +pasha +Paso +pass +passage +passageway +Passaic +passarine +passband +passbook +passe +passenger +passerby +passim +passion +passionate +passivate +passive +Passover +passport +password +past +paste +pasteboard +pastel +pasteup +Pasteur +pastiche +pastime +pastor +pastoral +pastry +pasture +pasty +pat +Patagonia +patch +patchwork +patchy +pate +patent +patentee +pater +paternal +paternoster +Paterson +path +pathbreaking +pathetic +pathogen +pathogenesis +pathogenic +pathology +pathos +pathway +patient +patina +patio +patois +patriarch +patriarchal +patriarchy +Patrice +Patricia +patrician +Patrick +patrilineage +patrilineal +patrimonial +patrimony +patriot +patriotic +patristic +patrol +patrolled +patrolling +patrolman +patrolmen +patron +patronage +patroness +Patsy +pattern +Patterson +Patti +Patton +patty +paucity +Paul +Paula +Paulette +Pauli +Pauline +Paulo +Paulsen +Paulson +Paulus +paunch +paunchy +pauper +pause +pavanne +pave +pavilion +Pavlov +Pavlovian +paw +pawn +pawnbroker +pawnshop +pawpaw +Pawtucket +pax +pay +paycheck +payday +payload +paymaster +Payne +payoff +payroll +Paz +PBS +PDP +pea +Peabody +peace +peaceable +peaceful +peacemake +peacetime +peach +Peachtree +peacock +peafowl +peahen +peak +peaky +peal +Peale +peanut +pear +Pearce +pearl +pearlite +pearlstone +Pearson +peasant +Pease +peat +pebble +pecan +peccary +peck +Pecos +pectoral +pectoralis +peculate +peculiar +pecuniary +pedagogic +pedagogue +pedagogy +pedal +pedant +pedantic +pedantry +peddle +pedestal +pedestrian +pediatric +pediatrician +pedigree +pediment +Pedro +pee +peek +peel +peep +peephole +peepy +peer +peg +Pegasus +pegboard +pegging +Peggy +pejorative +Peking +pelagic +Pelham +pelican +pellagra +pellet +pellucid +Peloponnese +pelt +peltry +pelvic +pelvis +Pembroke +pemmican +pen +penal +penalty +penance +penates +pence +penchant +pencil +pencilled +pend +pendant +pendulous +pendulum +Penelope +penetrable +penetrate +penguin +Penh +penicillin +peninsula +peninsular +penis +penitent +penitential +penitentiary +penman +penmen +Penn +penna +pennant +Pennsylvania +penny +pennyroyal +Penrose +Pensacola +pension +pensive +pent +pentagon +pentagonal +pentagram +pentane +Pentateuch +pentatonic +Pentecost +pentecostal +penthouse +penultimate +penumbra +penumbral +penurious +penury +peon +peony +people +Peoria +pep +peppercorn +peppergrass +peppermint +pepperoni +peppery +peppy +Pepsi +PepsiCo +peptide +per +perceive +percent +percentage +percentile +percept +perceptible +perception +perceptive +perceptual +perch +perchance +perchlorate +Percival +percolate +percussion +percussive +Percy +perdition +peregrine +peremptory +perennial +Perez +perfect +perfectible +perfidious +perfidy +perforate +perforce +perform +performance +perfume +perfumery +perfunctory +perfusion +Pergamon +perhaps +Periclean +Pericles +peridotite +perigee +perihelion +peril +Perilla +perilous +perimeter +period +periodic +peripatetic +peripheral +periphery +periphrastic +periscope +perish +peritectic +periwinkle +perjure +perjury +perk +Perkins +perky +Perle +permafrost +permalloy +permanent +permeable +permeate +Permian +permissible +permission +permissive +permit +permitted +permitting +permutation +permute +pernicious +peroxide +perpendicular +perpetrate +perpetual +perpetuate +perpetuity +perplex +perquisite +Perry +persecute +persecution +persecutory +Perseid +Persephone +Perseus +perseverant +persevere +Pershing +Persia +persiflage +persimmon +persist +persistent +person +persona +personage +personal +personify +personnel +perspective +perspicacious +perspicacity +perspicuity +perspicuous +perspiration +perspire +persuade +persuasion +persuasive +pert +pertain +Perth +pertinacious +pertinent +perturb +perturbate +Peru +perusal +peruse +Peruvian +pervade +pervasion +pervasive +perverse +perversion +pervert +pessimal +pessimism +pessimist +pessimum +pest +peste +pesticide +pestilent +pestilential +pestle +pet +petal +Pete +peter +Petersburg +Petersen +Peterson +petiole +petit +petite +petition +petrel +petri +petrify +petrochemical +petroglyph +petrol +petroleum +petrology +petticoat +petty +petulant +petunia +Peugeot +pew +pewee +pewter +pfennig +Pfizer +pH +phage +phagocyte +phalanger +phalanges +phalanx +phalarope +phantasm +phantasy +phantom +pharmaceutic +pharmacist +pharmacology +pharmacopoeia +pharmacy +phase +Ph.D +PhD +pheasant +Phelps +phenol +phenolic +phenomena +phenomenal +phenomenology +phenomenon +phenotype +phenyl +phenylalanine +pheromone +phi +Phil +Philadelphia +philanthrope +philanthropic +philanthropy +philharmonic +Philip +Philippine +Philistine +Phillip +philodendron +philology +philosoph +philosophic +philosophy +Phipps +phloem +phlox +phobic +Phobos +phoebe +Phoenicia +phoenix +phon +phone +phoneme +phonemic +phonetic +phonic +phonograph +phonology +phonon +phony +phosgene +phosphate +phosphide +phosphine +phosphite +phosphor +phosphoresce +phosphorescent +phosphoric +phosphorous +phosphorus +phosphorylate +photo +photogenic +photography +photolysis +photolytic +photometry +photon +phrase +phrasemake +phraseology +phthalate +phycomycetes +phyla +Phyllis +phylogenetic +phylogeny +phylum +physic +physician +physiochemical +physiognomy +physiology +physiotherapist +physiotherapy +physique +phytoplankton +pi +pianissimo +pianist +piano +pianoforte +piazza +pica +Picasso +picayune +Piccadilly +piccolo +pick +pickaxe +pickerel +Pickering +picket +Pickett +Pickford +pickle +Pickman +pickoff +pickup +picky +picnic +picnicked +picnicker +picnicking +picofarad +picojoule +picosecond +Pict +pictorial +picture +picturesque +piddle +pidgin +pie +piece +piecemeal +piecewise +Piedmont +pier +pierce +Pierre +Pierson +pietism +piety +piezoelectric +pig +pigeon +pigeonberry +pigeonfoot +pigeonhole +pigging +piggish +piggy +pigment +pigmentation +pigpen +pigroot +pigskin +pigtail +pike +Pilate +pile +pilewort +pilfer +pilferage +pilgrim +pilgrimage +pill +pillage +pillar +pillory +pillow +Pillsbury +piloerection +pilot +pimp +pimple +pin +pinafore +pinball +pincer +pinch +pincushion +pine +pineapple +Pinehurst +ping +pinhead +pinhole +pinion +pink +pinkie +pinkish +pinnacle +pinnate +pinniped +pinochle +pinpoint +pinscher +Pinsky +pint +pintail +pinto +pinwheel +pinxter +pion +pioneer +Piotr +pious +pip +pipe +pipeline +pipette +pipetting +pipsissewa +piquant +pique +piracy +Piraeus +pirate +pirogue +pirouette +pirouetting +Piscataway +Pisces +piss +pistachio +pistol +pistole +piston +pit +pitch +pitchblende +pitchfork +pitchstone +piteous +pitfall +pith +pithy +pitiable +pitiful +pitman +Pitney +Pitt +Pittsburgh +Pittsfield +Pittston +pituitary +pity +Pius +pivot +pivotal +pixel +pixy +Pizarro +pizza +pizzicato +Pl +placate +placater +place +placeable +placebo +placeholder +placemat +placenta +placental +placid +plagiarism +plagiarist +plagioclase +plague +plaguey +plaid +plain +Plainfield +plaintiff +plaintive +plait +plan +planar +Planck +plane +planeload +planet +planetaria +planetarium +planetary +planetesimal +planetoid +plank +plankton +planoconcave +planoconvex +plant +plantain +plantation +plaque +plasm +plasma +plasmid +plasmon +plaster +plastic +plastisol +plastron +plat +plate +plateau +platelet +platen +platform +platinum +platitude +platitudinous +Plato +platonic +Platonism +Platonist +platoon +Platte +platypus +plaudit +plausible +play +playa +playback +playboy +playful +playground +playhouse +playmate +playoff +playpen +playroom +plaything +playtime +playwright +playwriting +plaza +plea +plead +pleasant +please +pleasure +pleat +plebeian +plebian +plebiscite +plectrum +pledge +Pleiades +Pleistocene +plenary +plenipotentiary +plenitude +plentiful +plenty +plenum +plethora +pleura +pleural +pleurisy +Plexiglas +pliable +pliant +plight +Pliny +Pliocene +plod +plop +plot +plover +plow +plowman +plowmen +plowshare +ploy +pluck +plucky +plug +plugboard +pluggable +plugging +plum +plumage +plumb +plumbago +plumbate +plume +plummet +plump +plunder +plunge +plunk +pluperfect +plural +plus +plush +plushy +Plutarch +Pluto +pluton +plutonium +ply +Plymouth +plyscore +plywood +PM +pneumatic +pneumococcus +pneumonia +Po +poach +POBox +pocket +pocketbook +pocketful +Pocono +pod +podge +podia +podium +Poe +poem +poesy +poet +poetic +poetry +pogo +pogrom +poi +poignant +Poincare +poinsettia +point +pointwise +poise +poison +poisonous +Poisson +poke +pokerface +pol +Poland +polar +polarimeter +Polaris +polariscope +polariton +polarogram +polarograph +polarography +Polaroid +polaron +pole +polecat +polemic +police +policeman +policemen +policewoman +policy +polio +poliomyelitis +polis +polish +Politburo +polite +politic +politician +politicking +politico +Polk +polka +polkadot +poll +Pollard +pollen +pollinate +pollock +polloi +pollutant +pollute +pollution +Pollux +pollywog +polo +polonaise +polonium +polopony +polyandrous +polyandry +polygamous +polygamy +polygon +polygonal +polygynous +polygyny +polyhedra +polyhedral +polyhedron +Polyhymnia +polymer +polymerase +polymeric +polymorph +polymorphic +Polynesia +polynomial +Polyphemus +polyphony +polyploidy +polysaccharide +polysemous +polysemy +polytechnic +polytope +polytypy +pomade +pomegranate +pomelo +pomology +Pomona +pomp +pompadour +pompano +Pompeii +pompey +pompon +pomposity +pompous +Ponce +Ponchartrain +poncho +pond +ponder +ponderosa +ponderous +pong +pont +Pontiac +pontiff +pontific +pontificate +pontification +pony +pooch +poodle +pooh +pool +Poole +poop +poor +pop +pope +popish +poplar +poplin +poppy +populace +popular +populate +populism +populist +populous +porcelain +porch +porcine +porcupine +pore +pork +pornographer +pornography +porosity +porous +porphyry +porpoise +porridge +port +portage +portal +Porte +portend +portent +portentous +porterhouse +portfolio +Portia +portico +portland +portmanteau +Porto +portrait +portraiture +portray +portrayal +Portsmouth +Portugal +Portuguese +portulaca +posable +pose +Poseidon +poseur +posey +posh +posit +position +positive +positron +Posner +posse +posseman +possemen +possess +possession +possessive +possessor +possible +possum +post +postage +postal +postcard +postcondition +postdoctoral +posterior +posteriori +posterity +postfix +postgraduate +posthumous +postlude +postman +postmark +postmaster +postmen +postmodern +postmortem +postmultiply +postoperative +postorder +postpone +postposition +postprocess +postprocessor +postscript +postulate +posture +postwar +posy +pot +potable +potash +potassium +potato +potatoes +potbelly +potboil +potent +potentate +potential +potentiometer +pothole +potion +potlatch +Potomac +potpourri +potsherd +pottery +Potts +pouch +Poughkeepsie +poultice +poultry +pounce +pound +pour +pout +poverty +pow +powder +powderpuff +powdery +Powell +power +powerful +powerhouse +Poynting +ppm +PR +practicable +practical +practice +practise +practitioner +Pradesh +Prado +praecox +pragmatic +pragmatism +pragmatist +Prague +prairie +praise +praiseworthy +praline +pram +prance +prank +praseodymium +Pratt +Pravda +pray +prayerful +pre +preach +preachy +Precambrian +precarious +precedent +precept +precess +precinct +precious +precipice +precipitable +precipitate +precipitous +precise +precision +preclude +precocious +precocity +predacious +predatory +predecessor +predicament +predicate +predict +predictor +predilect +preempt +preemption +preemptive +preemptor +preen +prefab +prefatory +prefect +prefecture +prefer +preference +preferential +preferred +preferring +pregnant +prehensile +prejudice +preliminary +prelude +premier +premiere +premise +premium +premonition +Prentice +prep +preparation +preparative +preparator +preparatory +prepare +preponderant +preponderate +preposterous +prerogative +Presbyterian +Prescott +prescription +prescriptive +presentation +preservation +preside +president +presidential +press +pressure +prestidigitate +prestige +prestigious +presto +Preston +presume +presumption +presumptive +pretentious +Pretoria +pretty +prevail +prevalent +prevention +preventive +previous +prexy +prey +Priam +price +prick +prickle +pride +priest +priestess +Priestley +prig +priggish +prim +prima +primacy +primal +primary +primate +prime +primeval +primitive +primordial +primp +primrose +prince +princess +Princeton +principal +Principia +principle +print +printmake +printout +prior +priori +priory +Priscilla +prism +prismatic +prison +prissy +pristine +Pritchard +privacy +private +privet +privilege +privy +prize +prizewinning +pro +probabilist +probate +probationary +probe +problem +problematic +probosces +proboscis +procaine +procedural +procedure +proceed +process +procession +processor +proclaim +proclamation +proclivity +procrastinate +procreate +procrustean +Procrustes +Procter +proctor +procure +Procyon +prod +prodigal +prodigious +prodigy +produce +producible +product +Prof +profane +profess +profession +professor +professorial +proffer +proficient +profile +profit +profiteer +profligate +profound +profundity +profuse +profusion +progenitor +progeny +prognosis +prognosticate +programmable +programmatic +programmed +programmer +programming +progress +progression +progressive +prohibit +prohibition +prohibitive +prohibitory +project +projectile +projector +prokaryote +prokaryotic +Prokofieff +prolate +proletariat +proliferate +prolific +proline +prolix +prologue +prolong +prolongate +prolusion +prom +promenade +Promethean +Prometheus +promethium +prominent +promiscuity +promiscuous +promise +promote +promotion +prompt +promptitude +promulgate +prone +prong +pronghorn +pronominal +pronoun +pronounce +pronounceable +pronto +pronunciation +proof +proofread +prop +propaganda +propagandist +propagate +propane +propel +propellant +propelled +propeller +propelling +propensity +proper +property +prophecy +prophesy +prophet +prophetic +propionate +propitiate +propitious +proponent +proportion +proportionate +propos +proposal +propose +proposition +proprietary +proprietor +propriety +proprioception +proprioceptive +propulsion +propyl +propylene +prorate +prorogue +prosaic +proscenium +prosciutto +proscribe +proscription +prose +prosecute +prosecution +prosecutor +proselyte +Proserpine +prosodic +prosody +prosopopoeia +prospect +prospector +prospectus +prosper +prosperous +prostaglandin +prostate +prosthetic +prostitute +prostitution +prostrate +protactinium +protagonist +protean +protease +protect +protector +protectorate +protege +protein +proteolysis +proteolytic +protest +protestant +protestation +prothonotary +Protista +proto +protocol +proton +Protophyta +protoplasm +protoplasmic +prototype +prototypic +Protozoa +protozoan +protract +protractor +protrude +protrusion +protrusive +protuberant +proud +Proust +prove +proven +provenance +Provence +proverb +proverbial +provide +provident +providential +province +provincial +provision +proviso +provocateur +provocation +provocative +provoke +provost +prow +prowess +prowl +proximal +proximate +proximity +proxy +prude +prudent +prudential +prudish +prune +prurient +Prussia +prussic +pry +p's +psalm +psalter +pseudo +pseudonym +pseudonymous +psi +psych +psyche +psychiatric +psychiatrist +psychiatry +psychic +psycho +psychoacoustic +psychoanalysis +psychoanalyst +psychoanalytic +psychobiology +psychology +psychometry +psychopath +psychopathic +psychophysic +psychophysiology +psychopomp +psychoses +psychosis +psychosomatic +psychotherapeutic +psychotherapist +psychotherapy +psychotic +psyllium +PTA +ptarmigan +pterodactyl +Ptolemaic +Ptolemy +pub +puberty +pubescent +public +publication +publish +Puccini +puck +puckish +pudding +puddingstone +puddle +puddly +pueblo +puerile +Puerto +puff +puffball +puffery +puffin +puffy +pug +Pugh +puissant +puke +Pulaski +Pulitzer +pull +pullback +pulley +Pullman +pullover +pulmonary +pulp +pulpit +pulsar +pulsate +pulse +pulverable +puma +pumice +pummel +pump +pumpkin +pumpkinseed +pun +punch +punctilio +punctilious +punctual +punctuate +puncture +pundit +punditry +pungent +Punic +punish +punitive +Punjab +Punjabi +punk +punky +punster +punt +puny +pup +pupa +pupae +pupal +pupate +pupil +puppet +puppeteer +puppy +puppyish +Purcell +purchasable +purchase +Purdue +pure +puree +purgation +purgative +purgatory +purge +purify +Purina +purine +Puritan +puritanic +purl +purloin +purple +purport +purpose +purposeful +purposive +purr +purse +purslane +pursuant +pursue +pursuit +purvey +purveyor +purview +pus +Pusan +Pusey +push +pushbutton +pushout +pushover +pushpin +pushy +pussy +pussycat +put +putative +putdown +Putnam +putrefaction +putrefy +putrid +putt +putty +puzzle +PVC +Pygmalion +pygmy +pyknotic +Pyle +Pyongyang +pyracanth +pyramid +pyramidal +pyre +Pyrex +pyridine +pyridoxine +pyrimidine +pyrite +pyroelectric +pyrolyse +pyrolysis +pyrometer +pyrophosphate +pyrotechnic +pyroxene +pyroxenite +Pyrrhic +Pythagoras +Pythagorean +python +q +Qatar +QED +q's +qua +quack +quackery +quad +quadrangle +quadrangular +quadrant +quadratic +quadrature +quadrennial +quadric +quadriceps +quadrilateral +quadrille +quadrillion +quadripartite +quadrivium +quadrupedal +quadruple +quadruplet +quadrupole +quaff +quagmire +quahog +quail +quaint +quake +Quakeress +qualify +qualitative +quality +qualm +quandary +quanta +Quantico +quantify +quantile +quantitative +quantity +quantum +quarantine +quark +quarrel +quarrelsome +quarry +quarryman +quarrymen +quart +quarterback +quartermaster +quartet +quartic +quartile +quarto +quartz +quartzite +quasar +quash +quasi +quasiparticle +quaternary +quatrain +quaver +quay +queasy +Quebec +queen +Queensland +queer +quell +quench +quern +querulous +query +quest +question +questionnaire +quetzal +queue +queueing +Quezon +quibble +Quichua +quick +quicken +quickie +quicklime +quicksand +quicksilver +quickstep +quid +quiescent +quiet +quietus +quill +quillwort +quilt +quince +quinine +Quinn +quint +quintessence +quintessential +quintet +quintic +quintillion +quintuplet +quintus +quip +quipped +quipping +Quirinal +quirk +quirky +quirt +quit +quite +Quito +quitter +quitting +quiver +Quixote +quixotic +quiz +quizzed +quizzes +quizzical +quizzing +quo +quod +quonset +quorum +quota +quotation +quote +quotient +r +rabat +rabbet +rabbi +rabbinate +rabbinical +rabbit +rabble +rabid +rabies +Rabin +raccoon +race +racemose +racetrack +raceway +Rachel +Rachmaninoff +racial +rack +racket +racketeer +rackety +racy +radar +Radcliffe +radial +radian +radiant +radiate +radical +radices +radii +radio +radioactive +radioastronomy +radiocarbon +radiochemical +radiochemistry +radiography +radiology +radiometer +radiophysics +radiosonde +radiotherapy +radish +radium +radius +radix +radon +Rae +Rafael +Rafferty +raffia +raffish +raft +rag +rage +ragging +ragout +Ragusan +ragweed +raid +rail +railbird +railhead +raillery +railroad +railway +rain +rainbow +raincoat +raindrop +rainfall +rainstorm +rainwater +rainy +raise +raisin +raj +rajah +rake +rakish +Raleigh +rally +Ralph +Ralston +ram +Ramada +Raman +ramble +rambunctious +ramify +Ramo +ramp +rampage +rampant +rampart +ramrod +Ramsey +ramshackle +ran +ranch +rancho +rancid +rancorous +Rand +Randall +Randolph +random +randy +rang +range +rangeland +Rangoon +rangy +Ranier +rank +Rankin +Rankine +rankle +ransack +ransom +rant +Raoul +rap +rapacious +rapacity +rape +Raphael +rapid +rapier +rapport +rapprochement +rapt +raptor +raptorial +rapture +rare +rarefy +Raritan +rasa +rascal +rash +Rasmussen +rasp +raspberry +raster +Rastus +rat +rata +rate +rater +rather +ratify +ratio +ratiocinate +rationale +rattail +rattle +rattlesnake +raucous +Raul +raunchy +ravage +rave +ravel +raven +ravenous +ravine +ravish +raw +rawboned +rawhide +Rawlinson +ray +Rayleigh +Raymond +Raytheon +raze +razor +razorback +RCA +R&D +Rd +re +reach +reactant +reactionary +read +readout +ready +Reagan +real +realm +realtor +realty +ream +reap +rear +reason +reave +reb +Rebecca +rebel +rebellion +rebellious +rebuke +rebuttal +recalcitrant +receipt +receive +receptacle +reception +receptive +receptor +recess +recessive +recherche +Recife +recipe +recipient +reciprocal +reciprocate +reciprocity +recital +recitative +reck +reckon +reclamation +recline +recluse +reclusive +recompense +reconcile +recondite +reconnaissance +recovery +recriminate +recrudescent +recruit +rectangle +rectangular +rectifier +rectify +rectilinear +rectitude +rector +rectory +recumbent +recuperate +recursion +recusant +recuse +red +redact +redactor +redbird +redbud +redcoat +redden +reddish +redemption +redemptive +redhead +Redmond +redneck +redolent +redound +redpoll +redshank +redstart +Redstone +redtop +reduce +reducible +reductio +redundant +redwood +reed +reedbuck +reedy +reef +reek +reel +Reese +refectory +refer +referee +refereeing +referenda +referendum +referent +referential +referral +referred +referring +reflect +reflectance +reflector +reflexive +reformatory +refract +refractometer +refractory +refrain +refrigerate +refuge +refugee +refusal +refutation +refute +regal +regalia +regard +regatta +regent +regime +regimen +regiment +regimentation +Regina +Reginald +region +Regis +registrable +registrant +registrar +registration +registry +regress +regression +regressive +regret +regretful +regrettable +regretted +regretting +regular +regulate +regulatory +Regulus +regurgitate +rehabilitate +rehearsal +Reich +Reid +reign +Reilly +reimbursable +reimburse +rein +reindeer +reinforce +Reinhold +reinstate +reject +rejoice +rejoinder +relaxation +releasable +relevant +reliant +relic +relict +relief +relieve +religion +religiosity +religious +relinquish +reliquary +relish +reluctant +remainder +remand +Rembrandt +remediable +remedy +remembrance +Remington +reminisce +reminiscent +remit +remittance +remnant +remonstrate +remorse +remorseful +remote +removal +remunerate +Rena +renaissance +renal +Renault +rend +render +rendezvous +rendition +Rene +renewal +rennet +Renoir +renounce +renovate +renown +Rensselaer +rent +rental +renunciate +rep +repairman +repairmen +reparation +repartee +repeater +repel +repelled +repellent +repelling +repentant +repertoire +repertory +repetitious +repetitive +replenish +replete +replica +replicate +reportorial +repository +reprehensible +representative +repression +repressive +reprieve +reprimand +reprisal +reprise +reproach +reptile +reptilian +republican +repudiate +repugnant +repulsion +repulsive +reputation +repute +require +requisite +requisition +rescind +rescue +resemblant +resemble +resentful +reserpine +reservation +reservoir +resident +residential +residual +residuary +residue +residuum +resignation +resilient +resiny +resist +resistant +resistible +resistive +resistor +resonate +resorcinol +resourceful +respect +respectful +respiration +respirator +respiratory +resplendent +respond +respondent +response +responsible +responsive +rest +restaurant +restaurateur +restful +restitution +restive +restoration +restorative +restraint +restroom +result +resultant +resume +resumption +resurgent +resurrect +resuscitate +ret +retain +retaliate +retaliatory +retard +retardant +retardation +retch +retention +retentive +reticent +reticulate +reticulum +retina +retinal +retinue +retiree +retribution +retrieval +retrieve +retroactive +retrofit +retrofitted +retrofitting +retrograde +retrogress +retrogressive +retrorocket +retrospect +retrovision +returnee +Reub +Reuben +Reuters +rev +revel +revelation +revelatory +revelry +revenge +revenue +rever +reverberate +revere +reverend +reverent +reverie +reversal +reversible +revert +revisable +revisal +revival +revive +revocable +revoke +revolution +revolutionary +revolve +revulsion +revved +revving +Rex +Reykjavik +Reynolds +rhapsodic +rhapsody +Rhea +Rhenish +rhenium +rheology +rheostat +rhesus +rhetoric +rhetorician +rheum +rheumatic +rheumatism +Rhine +rhinestone +rhino +rhinoceros +rhizome +rho +Rhoda +Rhode +Rhodes +Rhodesia +rhodium +rhododendron +rhodolite +rhodonite +rhombi +rhombic +rhombus +rhubarb +rhyme +rhythm +rhythmic +RI +rib +ribald +ribbon +riboflavin +ribonucleic +ribose +ribosome +Rica +rice +rich +Richard +Richardson +Richfield +Richmond +Richter +rick +rickets +Rickettsia +rickety +rickshaw +Rico +ricochet +ricotta +rid +riddance +ridden +riddle +ride +ridge +ridgepole +Ridgway +ridicule +ridiculous +Riemann +Riemannian +rife +riffle +rifle +rifleman +riflemen +rift +rig +Riga +Rigel +rigging +Riggs +right +righteous +rightful +rightmost +rightward +rigid +rigorous +Riley +rill +rilly +rim +rime +rimy +Rinehart +ring +ringlet +ringside +rink +rinse +Rio +Riordan +riot +riotous +rip +riparian +ripe +ripen +Ripley +ripoff +ripple +rise +risen +risible +risk +risky +Ritchie +rite +Ritter +ritual +Ritz +rival +rivalry +riven +river +riverbank +riverfront +riverine +riverside +rivet +Riviera +rivulet +Riyadh +RNA +roach +road +roadbed +roadblock +roadhouse +roadrunner +roadside +roadster +roadway +roam +roar +roast +rob +robbery +robbin +robe +Robert +Roberta +Roberto +Robertson +robin +Robinson +robot +robotics +robust +Rochester +rock +rockabye +rockaway +rockbound +Rockefeller +rocket +Rockford +Rockies +Rockland +Rockwell +rocky +rococo +rod +rode +rodent +rodeo +Rodgers +Rodney +Rodriguez +roe +roebuck +Roentgen +Roger +rogue +roguish +roil +roister +Roland +role +roll +rollback +rollick +Rollins +Roman +romance +Romanesque +Romania +Romano +romantic +Rome +Romeo +romp +Romulus +Ron +Ronald +rondo +Ronnie +rood +roof +rooftop +rooftree +rook +rookie +rooky +room +roomful +roommate +roomy +Roosevelt +Rooseveltian +roost +root +rootstock +rope +ropy +Rosa +Rosalie +rosary +rose +rosebud +rosebush +Roseland +rosemary +Rosen +Rosenberg +Rosenblum +Rosenthal +Rosenzweig +Rosetta +rosette +Ross +roster +rostrum +rosy +rot +Rotarian +rotary +rotate +ROTC +rote +rotenone +Roth +Rothschild +rotogravure +rotor +rototill +rotten +rotund +rotunda +rouge +rough +roughcast +roughen +roughish +roughneck +roughshod +roulette +round +roundabout +roundhead +roundhouse +roundoff +roundtable +roundup +roundworm +rouse +Rousseau +roustabout +rout +route +routine +rove +row +rowboat +rowdy +Rowe +Rowena +Rowland +Rowley +Roxbury +Roy +royal +royalty +Royce +RPM +r's +RSVP +Ruanda +rub +Rubaiyat +rubbery +rubbish +rubble +rubdown +Rube +Ruben +rubicund +rubidium +Rubin +rubric +ruby +ruckus +rudder +ruddy +rude +rudiment +rudimentary +Rudolf +Rudolph +Rudy +Rudyard +rue +rueful +ruffian +ruffle +rufous +Rufus +rug +ruin +ruination +ruinous +rule +rum +Rumania +rumble +rumen +Rumford +ruminant +ruminate +rummage +rummy +rump +rumple +rumpus +run +runabout +runaway +rundown +rune +rung +Runge +runic +runneth +runny +Runnymede +runoff +runt +runty +runway +Runyon +rupee +rupture +rural +ruse +rush +Rushmore +rusk +Russ +Russell +russet +Russia +Russo +russula +rust +rustic +rustle +rustproof +rusty +rut +rutabaga +Rutgers +Ruth +ruthenium +Rutherford +ruthless +rutile +Rutland +Rutledge +rutty +Rwanda +Ryan +Rydberg +Ryder +rye +s +sa +sabbath +sabbatical +Sabina +Sabine +sable +sabotage +sabra +sac +saccharine +sachem +Sachs +sack +sacral +sacrament +Sacramento +sacred +sacrifice +sacrificial +sacrilege +sacrilegious +sacristan +sacrosanct +sad +sadden +saddle +saddlebag +Sadie +sadism +sadist +Sadler +safari +safe +safeguard +safekeeping +safety +saffron +sag +saga +sagacious +sagacity +sage +sagebrush +sagging +Saginaw +sagittal +Sagittarius +sago +saguaro +Sahara +said +Saigon +sail +sailboat +sailfish +sailor +saint +sake +Sal +salaam +salacious +salad +salamander +salami +salary +sale +Salem +Salerno +salesgirl +Salesian +saleslady +salesman +salesmen +salesperson +salient +Salina +saline +Salisbury +Salish +saliva +salivary +salivate +Salk +Salle +sallow +sally +salmon +salmonberry +salmonella +salon +saloon +saloonkeep +salsify +salt +saltbush +Salton +saltwater +salty +salubrious +salutary +salutation +salute +salutory +Salvador +salvage +salvageable +salvation +Salvatore +salve +salvo +Sam +samarium +samba +same +Sammy +Samoa +samovar +sample +Sampson +Samson +Samuel +Samuelson +samurai +San +Sana +sanatoria +sanatorium +Sanborn +Sanchez +Sancho +sanctify +sanctimonious +sanction +sanctity +sanctuary +sand +sandal +sandalwood +sandbag +sandblast +Sandburg +sanderling +Sanderson +sandhill +Sandia +sandman +sandpaper +sandpile +sandpiper +Sandra +sandstone +Sandusky +sandwich +sandy +sane +Sanford +sang +sangaree +sanguinary +sanguine +sanguineous +Sanhedrin +sanicle +sanitarium +sanitary +sanitate +sank +sans +Sanskrit +Santa +Santayana +Santiago +Santo +Sao +sap +sapiens +sapient +sapling +saponify +sapphire +Sappho +sappy +saprophyte +saprophytic +sapsucker +Sara +Saracen +Sarah +Saran +Sarasota +Saratoga +sarcasm +sarcastic +sarcoma +sarcophagus +sardine +Sardinia +sardonic +Sargent +sari +sarong +sarsaparilla +sarsparilla +sash +sashay +sashimi +Saskatchewan +Saskatoon +sassafras +sat +satan +satanic +satellite +satiable +satiate +satiety +satin +satire +satiric +satisfaction +satisfactory +satisfy +saturable +saturate +saturater +Saturday +Saturn +Saturnalia +saturnine +satyr +sauce +saucepan +saucy +Saud +Saudi +sauerkraut +Saul +Sault +sauna +Saunders +saunter +sausage +saute +sauterne +savage +savagery +savanna +Savannah +savant +save +Saviour +Savonarola +savoy +Savoyard +savvy +saw +sawbelly +sawdust +sawfish +sawfly +sawmill +sawtimber +sawtooth +sawyer +sax +saxifrage +Saxon +Saxony +saxophone +say +SC +scab +scabbard +scabious +scabrous +scad +scaffold +Scala +scalar +scald +scale +scallop +scalp +scaly +scam +scamp +scan +scandal +scandalous +Scandinavia +scandium +scant +scanty +scapegoat +scapula +scapular +scar +Scarborough +scarce +scare +scarecrow +scarf +scarface +scarify +Scarlatti +scarlet +scarp +Scarsdale +scarves +scary +scat +scathe +scathing +scatterbrain +scattergun +scaup +scavenge +scenario +scene +scenery +scenic +scent +sceptic +Schaefer +Schafer +Schantz +schedule +Scheherazade +schelling +schema +schemata +schematic +scheme +Schenectady +scherzo +Schiller +schism +schist +schizoid +schizomycetes +schizophrenia +schizophrenic +Schlesinger +schlieren +Schlitz +Schloss +Schmidt +Schmitt +Schnabel +schnapps +Schneider +Schoenberg +Schofield +scholar +scholastic +school +schoolbook +schoolboy +schoolgirl +schoolgirlish +schoolhouse +schoolmarm +schoolmaster +schoolmate +schoolroom +schoolteacher +schoolwork +schoolyard +schooner +Schottky +Schroeder +Schroedinger +Schubert +Schultz +Schulz +Schumacher +Schumann +Schuster +Schuyler +Schuylkill +Schwab +Schwartz +Schweitzer +Sci +sciatica +science +scientific +scientist +scimitar +scintillate +scion +scissor +sclerosis +sclerotic +SCM +scoff +scold +scoop +scoot +scope +scopic +scops +scorch +score +scoreboard +scorecard +scoria +scorn +scornful +Scorpio +scorpion +Scot +scotch +Scotia +Scotland +Scotsman +Scotsmen +Scott +Scottish +Scottsdale +Scotty +scoundrel +scour +scourge +scout +scowl +scrabble +scraggly +scram +scramble +Scranton +scrap +scrapbook +scrape +scrappy +scratch +scratchy +scrawl +scrawny +scream +screech +screechy +screed +screen +screenful +screenplay +screw +screwball +screwbean +screwdriver +screwworm +screwy +scribble +scribe +Scribners +scrim +scrimmage +Scripps +script +scription +scriptural +scripture +scriptwriter +scriven +scroll +scrooge +scrotum +scrounge +scrub +scrubby +scruffy +scrumptious +scruple +scrupulosity +scrupulous +scrutable +scrutiny +scuba +scud +scuff +scuffle +scull +sculpin +sculpt +sculptor +sculptural +sculpture +scum +scurrilous +scurry +scurvy +scuttle +scutum +Scylla +scythe +Scythia +SD +SE +sea +seabed +seaboard +Seaborg +seacoast +seafare +seafood +Seagram +seagull +seahorse +seal +sealant +seam +seaman +seamen +seamstress +seamy +Sean +seance +seaport +seaquake +sear +search +searchlight +seashell +seashore +seaside +season +seasonal +seat +seater +Seattle +seaward +seawater +seaweed +seaworthy +sebaceous +Sebastian +sec +secant +secede +secession +seclude +seclusion +second +secondary +secondhand +secrecy +secret +secretarial +secretariat +secretary +secrete +secretion +secretive +sect +sectarian +section +sector +secular +secure +sedan +sedate +sedentary +seder +sedge +sediment +sedimentary +sedimentation +sedition +seditious +seduce +seduction +seductive +sedulous +see +seeable +seed +seedbed +seedling +seedy +seeing +seek +seem +seen +seep +seepage +seersucker +seethe +seething +segment +segmentation +Segovia +segregant +segregate +Segundo +Seidel +seismic +seismograph +seismography +seismology +seize +seizure +seldom +select +selectman +selectmen +selector +Selectric +Selena +selenate +selenite +selenium +self +selfadjoint +selfish +Selfridge +Selkirk +sell +sellout +Selma +seltzer +selves +Selwyn +semantic +semaphore +semblance +semester +semi +seminal +seminar +seminarian +seminary +Seminole +Semiramis +Semite +Semitic +semper +sen +senate +senatorial +send +Seneca +Senegal +senescent +senile +senior +senor +Senora +senorita +sensate +sense +sensible +sensitive +sensor +sensory +sensual +sensuous +sent +sentence +sentential +sentient +sentiment +sentinel +sentry +Seoul +sepal +separable +separate +sepia +Sepoy +sept +septa +septate +September +septennial +septic +septillion +septuagenarian +septum +sepulchral +seq +sequel +sequent +sequential +sequester +sequestration +sequin +sequitur +Sequoia +sera +seraglio +serape +seraphim +Serbia +serenade +serendipitous +serendipity +serene +serf +serge +sergeant +Sergei +serial +seriatim +sericulture +series +serif +serine +serious +sermon +serology +Serpens +serpent +serpentine +serum +servant +serve +service +serviceable +serviceberry +serviceman +servicemen +serviette +servile +servitor +servitude +servo +servomechanism +sesame +session +set +setback +Seth +Seton +setscrew +settle +setup +seven +sevenfold +seventeen +seventeenth +seventh +seventieth +seventy +seventyfold +sever +several +severalfold +severalty +severe +Severn +Seville +sew +sewage +Seward +sewerage +sewn +sex +Sextans +sextet +sextic +sextillion +sexton +sextuple +sextuplet +sexual +sexy +Seychelle +Seymour +sforzando +shabby +shack +shackle +shad +shadbush +shade +shadflower +shadow +shadowy +shady +Shafer +Shaffer +shaft +shag +shagbark +shagging +shaggy +shah +shake +shakeable +shakedown +shaken +Shakespeare +Shakespearean +Shakespearian +shako +shaky +shale +shall +shallot +shallow +shalom +sham +shaman +shamble +shame +shameface +shameful +shampoo +shamrock +Shanghai +shank +Shannon +shan't +Shantung +shanty +shape +Shapiro +shard +share +sharecrop +sharecropper +shareholder +Shari +shark +Sharon +sharp +Sharpe +sharpen +sharpshoot +Shasta +shatter +shatterproof +Shattuck +shave +shaven +shaw +shawl +Shawnee +shay +she +Shea +sheaf +shear +Shearer +sheath +sheathe +sheave +shebang +she'd +shed +Shedir +Sheehan +sheen +sheep +sheepherder +sheepskin +sheer +sheet +Sheffield +sheik +Sheila +Shelby +Sheldon +shelf +she'll +shell +Shelley +shellfish +shelter +Shelton +shelve +Shenandoah +shenanigan +Shepard +shepherd +shepherdess +Sheppard +Sheraton +sherbet +Sheridan +sheriff +Sherlock +Sherman +Sherrill +sherry +Sherwin +Sherwood +shibboleth +shield +shift +shifty +shill +Shiloh +shim +shimmy +shin +shinbone +shine +shingle +Shinto +shiny +ship +shipboard +shipbuild +shipbuilding +shiplap +Shipley +shipload +shipman +shipmate +shipmen +shipshape +shipwreck +shipyard +shire +shirk +Shirley +shirt +shirtmake +shish +shitepoke +shiv +Shiva +shiver +shivery +Shmuel +shoal +shock +Shockley +shod +shoddy +shoe +shoehorn +shoelace +shoemake +shoestring +shoji +shone +shoo +shoofly +shook +shoot +shop +shopkeep +shopworn +shore +shorebird +shorefront +shoreline +short +shortage +shortcake +shortcoming +shortcut +shorten +shortfall +shorthand +shortish +shortsighted +shortstop +Shoshone +shot +shotbush +shotgun +should +shoulder +shouldn't +shout +shove +shovel +show +showboat +showcase +showdown +showman +showmen +shown +showpiece +showplace +showroom +showy +shrank +shrapnel +shred +Shreveport +shrew +shrewd +shrewish +shriek +shrift +shrike +shrill +shrilly +shrimp +shrine +shrink +shrinkage +shrive +shrivel +shroud +shrove +shrub +shrubbery +shrug +shrugging +shrunk +shrunken +Shu +shuck +shudder +shuddery +shuffle +shuffleboard +Shulman +shun +shunt +shut +shutdown +shutoff +shutout +shuttle +shuttlecock +shy +Shylock +shyly +sial +SIAM +Siamese +Sian +sib +Siberia +sibilant +Sibley +sibling +sibyl +sic +Sicilian +Sicily +sick +sickbed +sicken +sickish +sickle +sicklewort +sickroom +side +sidearm +sideband +sideboard +sidecar +sidelight +sideline +sidelong +sideman +sidemen +sidereal +siderite +sidesaddle +sideshow +sidestep +sidestepped +sidestepping +sidetrack +sidewalk +sidewall +sideway +sidewinder +sidewise +sidle +Sidney +siege +Siegel +Siegfried +Sieglinda +Siegmund +Siemens +Siena +sienna +sierra +siesta +sieve +sift +sigh +sight +sightsee +sightseeing +sightseer +sigma +Sigmund +sign +signal +signature +signboard +signet +significant +signify +Signor +Signora +signpost +Sikh +Sikkim +Sikorsky +silage +silane +Silas +silent +silhouette +silica +silicate +siliceous +silicic +silicide +silicon +silicone +silicosis +silk +silken +silkworm +silky +sill +silly +silo +silt +siltation +siltstone +silty +silver +Silverman +silversmith +silverware +silvery +sima +simian +similar +simile +similitude +Simla +simmer +Simmons +Simon +Simonson +simper +simple +simplectic +simpleminded +simpleton +simplex +simplicial +simplicity +simplify +simplistic +simply +Simpson +Sims +simulate +simulcast +simultaneity +simultaneous +sin +Sinai +Sinbad +since +sincere +Sinclair +sine +sinew +sinewy +sinful +sing +singable +Singapore +singe +single +singlehanded +singleminded +singlet +singleton +singsong +singular +sinh +sinister +sinistral +sink +sinkhole +Sino +Sinology +sinter +sinuous +sinus +sinusoid +sinusoidal +Sioux +sip +sir +sire +siren +Sirius +sis +sisal +siskin +sister +Sistine +Sisyphean +Sisyphus +sit +site +situ +situate +situs +siva +six +sixfold +sixgun +sixteen +sixteenth +sixth +sixtieth +sixty +sixtyfold +size +sizzle +skat +skate +skateboard +skater +skeet +skein +skeleta +skeletal +skeleton +skeptic +sketch +sketchbook +sketchpad +sketchy +skew +ski +skid +skiddy +skiff +skill +skillet +skillful +skim +skimp +skimpy +skin +skindive +skinflint +skinny +skintight +skip +skipjack +Skippy +skirmish +skirt +skit +skittle +Skopje +skulk +skull +skullcap +skullduggery +skunk +sky +Skye +skyhook +skyjack +skylark +skylight +skyline +skyrocket +skyscrape +skyward +skywave +skyway +slab +slack +slacken +sladang +slag +slain +slake +slam +slander +slanderous +slang +slant +slap +slapdash +slapstick +slash +slat +slate +slater +slaughter +slaughterhouse +Slav +slave +slavery +Slavic +slavish +Slavonic +slay +sleazy +sled +sledge +sledgehammer +sleek +sleep +sleepwalk +sleepy +sleet +sleety +sleeve +sleigh +sleight +slender +slept +sleuth +slew +slice +slick +slid +slide +slight +slim +slime +slimy +sling +slingshot +slink +slip +slippage +slippery +slipshod +slit +slither +sliver +slivery +Sloan +Sloane +slob +Slocum +sloe +slog +slogan +sloganeer +slogging +sloop +slop +slope +sloppy +slosh +slot +sloth +slothful +slouch +slough +Slovakia +sloven +Slovenia +slow +slowdown +sludge +slug +slugging +sluggish +sluice +slum +slumber +slump +slung +slunk +slur +slurp +slurry +slush +slushy +sly +smack +small +Smalley +smallish +smallpox +smalltime +smart +smash +smattering +smear +smell +smelly +smelt +smile +smirk +smite +smith +smithereens +Smithfield +Smithson +smithy +smitten +smog +smoke +smokehouse +smokescreen +smokestack +smoky +smolder +smooch +smooth +smoothbore +smote +smother +Smucker +smudge +smudgy +smug +smuggle +smut +smutty +Smyrna +Smythe +snack +snafu +snag +snagging +snail +snake +snakebird +snakebite +snakeroot +snap +snapback +snapdragon +snappish +snappy +snapshot +snare +snark +snarl +snatch +snazzy +sneak +sneaky +sneer +sneeze +snell +snick +Snider +sniff +sniffle +snifter +snigger +snip +snipe +snippet +snippy +snivel +snob +snobbery +snobbish +snook +snoop +snoopy +snore +snorkel +snort +snotty +snout +snow +snowball +snowbank +snowfall +snowflake +snowshoe +snowstorm +snowy +snub +snuff +snuffle +snug +snuggle +snuggly +Snyder +so +soak +soap +soapstone +soapsud +soapy +soar +sob +sober +sobriety +sobriquet +Soc +soccer +sociable +social +societal +Societe +society +socioeconomic +sociolinguistic +sociology +sociometry +sock +socket +sockeye +Socrates +Socratic +sod +soda +sodden +sodium +sofa +soffit +Sofia +soft +softball +softcover +soften +software +softwood +soggy +soignee +soil +soiree +sojourn +Sol +solace +solar +sold +solder +soldier +soldiery +sole +solecism +solemn +solenoid +solicit +solicitation +solicitor +solicitous +solicitude +solid +solidarity +solidify +soliloquy +solipsism +solitary +soliton +solitude +solo +Solomon +Solon +solstice +soluble +solute +solution +solvate +solve +solvent +soma +somal +Somali +Somalia +somatic +somber +sombre +some +somebody +somebody'll +someday +somehow +someone +someone'll +someplace +Somers +somersault +Somerset +Somerville +something +sometime +somewhat +somewhere +sommelier +Sommerfeld +somnolent +son +sonant +sonar +sonata +song +songbag +songbird +songbook +songful +sonic +sonnet +sonny +Sonoma +Sonora +sonorant +sonority +sonorous +Sony +soon +soot +sooth +soothe +soothsay +soothsayer +sop +sophia +Sophie +sophism +sophisticate +sophistry +Sophoclean +Sophocles +sophomore +sophomoric +soprano +sora +sorb +sorcery +sordid +sore +Sorensen +Sorenson +sorghum +sorority +sorption +sorrel +sorrow +sorrowful +sorry +sort +sortie +sou +souffle +sough +sought +soul +soulful +sound +soundproof +soup +soupy +sour +sourberry +source +sourdough +sourwood +Sousa +soutane +south +Southampton +southbound +southeast +southeastern +southern +southernmost +Southey +southland +southpaw +southward +southwest +southwestern +souvenir +sovereign +sovereignty +soviet +sovkhoz +sow +sowbelly +sowbug +sown +soy +soya +soybean +spa +space +spacecraft +spacesuit +spacetime +spacious +spade +spaghetti +Spain +spalding +span +spandrel +spangle +Spaniard +spaniel +Spanish +spar +spare +sparge +spark +sparkle +Sparkman +sparky +sparling +sparrow +sparse +Sparta +spartan +spasm +spasmodic +spastic +spat +spate +spatial +spatlum +spatterdock +spatula +Spaulding +spavin +spawn +spay +speak +speakeasy +spear +spearhead +spearmint +spec +special +speciate +specie +species +specific +specify +specimen +specious +speck +speckle +spectacle +spectacular +spectator +Spector +spectra +spectral +spectrogram +spectrograph +spectrography +spectrometer +spectrophotometer +spectroscope +spectroscopic +spectroscopy +spectrum +specular +speculate +sped +speech +speed +speedboat +speedometer +speedup +speedwell +speedy +spell +spellbound +Spencer +Spencerian +spend +spent +sperm +spermatophyte +spermatozoa +spermatozoon +Sperry +spew +sphagnum +sphalerite +sphere +spheric +spheroid +spheroidal +spherule +sphinx +sphygmomanometer +Spica +spice +spicebush +spicy +spider +spiderwort +spidery +Spiegel +spigot +spike +spikenard +spiky +spill +spillover +spilt +spin +spinach +spinal +spindle +spindly +spine +spinel +spinnaker +spinneret +spinodal +spinoff +spinster +spiny +spiral +spire +spirit +spiritual +Spiro +spirochaete +Spirogyra +spit +spite +spiteful +spitfire +spittle +spitz +splash +splashy +splat +splay +spleen +spleenwort +splendid +splenetic +splice +spline +splint +splintery +split +splotch +splotchy +splurge +splutter +spoil +spoilage +Spokane +spoke +spoken +spokesman +spokesmen +spokesperson +sponge +spongy +sponsor +spontaneity +spontaneous +spoof +spook +spooky +spool +spoon +spoonful +sporadic +spore +sport +sportsman +sportsmen +sportswear +sportswriter +sportswriting +sporty +spot +spotlight +spotty +spouse +spout +Sprague +sprain +sprang +sprawl +spray +spread +spree +sprig +sprightly +spring +springboard +springe +Springfield +springtail +springtime +springy +sprinkle +sprint +sprite +sprocket +Sproul +sprout +spruce +sprue +sprung +spud +spume +spumoni +spun +spunk +spunky +spur +spurge +spurious +spurn +spurt +sputnik +sputter +spy +spyglass +squabble +squad +squadron +squalid +squall +squamous +squander +square +squash +squashberry +squashy +squat +squatted +squatter +squatting +squaw +squawbush +squawk +squawroot +squeak +squeaky +squeal +squeamish +squeegee +squeeze +squelch +Squibb +squid +squill +squint +squire +squirm +squirmy +squirrel +squirt +squishy +Sri +s's +SSE +SST +SSW +St +stab +stabile +stable +stableman +stablemen +staccato +stack +Stacy +stadia +stadium +staff +Stafford +stag +stage +stagecoach +stagnant +stagnate +stagy +Stahl +staid +stain +stair +staircase +stairway +stairwell +stake +stalactite +stalagmite +stale +stalemate +Staley +Stalin +stalk +stall +stallion +stalwart +stamen +Stamford +stamina +staminate +stammer +stamp +stampede +Stan +stance +stanch +stanchion +stand +standard +standby +standeth +Standish +standoff +standpoint +standstill +Stanford +Stanhope +stank +Stanley +stannic +stannous +Stanton +stanza +staph +staphylococcus +staple +Stapleton +star +starboard +starch +starchy +stardom +stare +starfish +stargaze +stark +Starkey +starlet +starlight +starling +Starr +starry +start +startle +startup +starvation +starve +stash +stasis +state +Staten +stater +stateroom +statesman +statesmen +statewide +static +stationarity +stationary +stationery +stationmaster +statistician +Statler +stator +statuary +statue +statuesque +statuette +stature +status +statute +statutory +Stauffer +staunch +Staunton +stave +stay +stead +steadfast +steady +steak +steal +stealth +stealthy +steam +steamboat +steamy +stearate +stearic +Stearns +steed +steel +Steele +steelmake +steely +Steen +steep +steepen +steeple +steeplebush +steeplechase +steer +steeve +Stefan +Stegosaurus +stein +Steinberg +Steiner +stella +stellar +stem +stench +stencil +stenographer +stenography +stenotype +step +stepchild +Stephanie +stephanotis +Stephen +Stephenson +stepmother +steppe +steprelation +stepson +stepwise +steradian +stereo +stereography +stereoscopy +sterile +sterling +stern +sternal +Sternberg +Sterno +sternum +steroid +stethoscope +Stetson +Steuben +Steve +stevedore +Steven +Stevenson +stew +steward +stewardess +Stewart +stick +stickle +stickleback +stickpin +sticktight +sticky +stiff +stiffen +stifle +stigma +stigmata +stile +stiletto +still +stillbirth +stillwater +stilt +stimulant +stimulate +stimulatory +stimuli +stimulus +sting +stingray +stingy +stink +stinkbug +stinkpot +stinky +stint +stipend +stipple +stipulate +stir +Stirling +stirrup +stitch +stoat +stochastic +stock +stockade +stockbroker +stockholder +Stockholm +stockpile +stockroom +Stockton +stocky +stodgy +stoic +stoichiometry +stoke +Stokes +stole +stolen +stolid +stomach +stomp +stone +stonecrop +Stonehenge +stonewall +stoneware +stonewort +stony +stood +stooge +stool +stoop +stop +stopband +stopcock +stopgap +stopover +stoppage +stopwatch +storage +store +storefront +storehouse +storekeep +storeroom +Storey +stork +storm +stormbound +stormy +story +storyboard +storyteller +storytelling +stout +stove +stow +stowage +stowaway +strabismic +strabismus +straddle +strafe +straggle +straight +straightaway +straighten +straightforward +straightway +strain +strait +strand +strange +strangle +strangulate +strap +strata +stratagem +strategic +strategist +strategy +Stratford +stratify +stratosphere +stratospheric +Stratton +stratum +stratus +Strauss +straw +strawberry +strawflower +stray +streak +stream +streamline +streamside +street +streetcar +strength +strengthen +strenuous +streptococcus +streptomycin +stress +stressful +stretch +strewn +striate +stricken +Strickland +strict +stricture +stride +strident +strife +strike +strikebreak +string +stringent +stringy +strip +stripe +striptease +strive +striven +strobe +stroboscopic +strode +stroke +stroll +Strom +Stromberg +strong +stronghold +strongroom +strontium +strop +strophe +strove +struck +structural +structure +struggle +strum +strung +strut +strychnine +Stuart +stub +stubble +stubborn +stubby +stucco +stuck +stud +Studebaker +student +studio +studious +study +stuff +stuffy +stultify +stumble +stump +stumpage +stumpy +stun +stung +stunk +stunt +stupa +stupefy +stupendous +stupid +stupor +Sturbridge +sturdy +sturgeon +Sturm +stutter +Stuttgart +Stuyvesant +Stygian +style +styli +stylish +stylites +stylus +stymie +styrene +Styrofoam +Styx +suave +sub +subject +subjunctive +sublimate +subliminal +submersible +submit +submittal +submitted +submitting +subpoena +subrogation +subservient +subsidiary +subsidy +subsist +subsistent +substantial +substantiate +substantive +substituent +substitute +substitution +substitutionary +substrate +subsume +subterfuge +subterranean +subtle +subtlety +subtly +subtrahend +suburb +suburbia +subversive +subvert +succeed +success +successful +succession +successive +successor +succinct +succubus +succumb +such +suck +suckle +sucrose +suction +sud +Sudan +Sudanese +sudden +sudorific +suds +sue +suet +suey +Suez +suffer +suffice +sufficient +suffix +suffocate +Suffolk +suffrage +suffragette +suffuse +sugar +sugary +suggest +suggestible +suggestion +suggestive +suicidal +suicide +suit +suitcase +suite +suitor +sukiyaki +sulfa +sulfanilamide +sulfate +sulfide +sulfite +sulfonamide +sulfur +sulfuric +sulfurous +sulk +sulky +sullen +Sullivan +sully +sulphur +sultan +sultry +sum +sumac +Sumatra +Sumeria +summand +summary +summate +summertime +summit +summitry +summon +Sumner +sumptuous +Sumter +sun +sunbeam +sunbonnet +sunburn +sunburnt +Sunday +sunder +sundew +sundial +sundown +sundry +sunfish +sunflower +sung +sunglasses +sunk +sunken +sunlight +sunlit +sunny +Sunnyvale +sunrise +sunscreen +sunset +sunshade +sunshine +sunshiny +sunspot +suntan +suntanned +suntanning +SUNY +sup +super +superannuate +superb +superbly +supercilious +superficial +superfluity +superfluous +superintendent +superior +superlative +superlunary +supernatant +supersede +superstition +superstitious +supervene +supervisory +supine +supplant +supple +supplementary +supplicant +supplicate +supply +support +supposable +suppose +supposition +suppress +suppressible +suppression +suppressor +supra +supranational +supremacy +supreme +supremum +surah +surcease +surcharge +sure +surefire +surety +surf +surface +surfactant +surfeit +surge +surgeon +surgery +surgical +surjection +surjective +surly +surmise +surmount +surname +surpass +surplus +surprise +surreal +surrender +surreptitious +surrey +surrogate +surround +surtax +surtout +surveillant +survey +surveyor +survival +survive +survivor +Sus +Susan +Susanne +susceptance +susceptible +sushi +Susie +suspect +suspend +suspense +suspension +suspensor +suspicion +suspicious +Sussex +sustain +sustenance +Sutherland +Sutton +suture +Suzanne +suzerain +suzerainty +Suzuki +svelte +Svetlana +SW +swab +swabby +swag +Swahili +swain +swallow +swallowtail +swam +swami +swamp +swampland +swampy +swan +swank +swanky +Swanson +swap +swarm +swart +Swarthmore +Swarthout +swarthy +swastika +swat +swatch +swath +swathe +sway +Swaziland +swear +sweat +sweatband +sweater +sweatpants +sweatshirt +sweatshop +sweatsocks +sweaty +Swede +Sweden +Swedish +Sweeney +sweep +sweepstake +sweet +sweetbread +sweeten +sweetheart +sweetie +sweetish +swell +swelt +swelter +Swenson +swept +swerve +swidden +swift +swig +swigging +swill +swim +swimsuit +swindle +swine +swing +swingable +swingy +swipe +swirl +swirly +swish +swishy +swiss +switch +switchback +switchblade +switchboard +switchgear +switchman +switchmen +Switzer +Switzerland +swivel +swizzle +swollen +swoop +sword +swordfish +swordplay +swordtail +swore +sworn +swum +swung +sybarite +Sybil +sycamore +sycophant +sycophantic +Sydney +syenite +Sykes +syllabi +syllabic +syllabify +syllable +syllabus +syllogism +syllogistic +Sylow +sylvan +Sylvania +Sylvester +Sylvia +symbiont +symbiosis +symbiote +symbiotic +symbol +symbolic +symmetry +sympathetic +sympathy +symphonic +symphony +symplectic +symposia +symposium +symptom +symptomatic +synagogue +synapse +synaptic +synchronism +synchronous +synchrony +synchrotron +syncopate +syndic +syndicate +syndrome +synecdoche +synergism +synergistic +synergy +Synge +synod +synonym +synonymous +synonymy +synopses +synopsis +synoptic +syntactic +syntax +synthesis +synthetic +syphilis +syphilitic +Syracuse +Syria +syringa +syringe +syrinx +syrup +syrupy +system +systematic +systemic +systemwide +syzygy +Szilard +t +TA +tab +tabernacle +table +tableau +tableaux +tablecloth +tableland +tablespoon +tablespoonful +tablet +tabletop +tabloid +taboo +tabu +tabula +tabular +tabulate +tachinid +tachometer +tachyon +tacit +taciturn +Tacitus +tack +tackle +tacky +Tacoma +tact +tactful +tactic +tactile +tactual +tad +tadpole +taffeta +taffy +taft +tag +tagging +Tahiti +Tahoe +taiga +tail +tailgate +taillight +tailor +tailspin +tailwind +taint +Taipei +Taiwan +take +taken +takeoff +takeover +talc +talcum +tale +talent +talisman +talismanic +talk +talkative +talkie +talky +tall +Tallahassee +tallow +tally +tallyho +Talmud +Talmudic +talon +talus +tam +tamale +tamarack +tamarind +tamarisk +tambourine +tame +Tamil +Tammany +tamp +Tampa +tampon +tan +tanager +Tanaka +Tananarive +tandem +tang +Tanganyika +tangent +tangential +tangerine +tangible +tangle +tango +tangy +tanh +tank +tankard +tannin +tansy +tantalum +Tantalus +tantamount +Tantric +tantrum +Tanya +Tanzania +tao +tap +tapa +tape +taper +tapestry +tapeworm +tapioca +tapir +tapis +tappa +tappet +taproot +tar +tara +tarantara +tarantula +Tarbell +tardy +target +tariff +tarnish +taro +tarpaper +tarpaulin +tarpon +tarry +Tarrytown +tarsier +tart +tartar +Tartary +Tarzan +task +taskmaster +Tasmania +Tass +tassel +taste +tasteful +tasting +tasty +tat +tate +tater +tattle +tattler +tattletale +tattoo +tatty +tau +taught +taunt +Taurus +taut +tautology +tavern +taverna +tawdry +tawny +tax +taxa +taxation +taxi +taxicab +taxidermist +taxidermy +taxied +taxiway +taxon +taxonomic +taxonomist +taxonomy +taxpayer +taxpaying +Taylor +tea +teacart +teach +teacup +teahouse +teak +teakettle +teakwood +teal +team +teammate +teamster +teamwork +teapot +tear +teardrop +tearful +tease +teasel +teaspoon +teaspoonful +teat +tech +technetium +technic +technician +Technion +technique +technology +tectonic +tecum +Ted +Teddy +tedious +tedium +tee +teeing +teem +teen +teenage +teensy +teet +teeth +teethe +teetotal +Teflon +Tegucigalpa +Teheran +Tehran +tektite +Tektronix +Tel +telecommunicate +teleconference +Teledyne +Telefunken +telegram +telegraph +telegraphy +telekinesis +telemeter +teleology +teleost +telepathic +telepathy +telephone +telephonic +telephony +telephoto +telephotography +teleprinter +teleprocessing +teleprompter +telescope +telescopic +teletype +teletypesetting +teletypewrite +televise +television +Telex +tell +telltale +tellurium +temerity +temper +tempera +temperance +temperate +temperature +tempest +tempestuous +template +temple +Templeton +tempo +temporal +temporary +tempt +temptation +temptress +ten +tenable +tenacious +tenacity +tenant +tend +tendency +tenderfoot +tenderhearted +tenderloin +tendon +tenebrous +tenement +tenet +tenfold +Tenneco +Tennessee +Tenney +tennis +Tennyson +tenon +tenor +tense +tensile +tension +tensor +tenspot +tent +tentacle +tentative +tenth +tenuous +tenure +tepee +tepid +teratogenic +teratology +terbium +tercel +Teresa +term +termcap +terminable +terminal +terminate +termini +terminology +terminus +termite +tern +ternary +Terpsichore +terpsichorean +Terra +terrace +terrain +terramycin +terrapin +Terre +terrestrial +terrible +terrier +terrific +terrify +territorial +territory +terror +terry +terse +tertiary +Tess +tessellate +test +testament +testamentary +testate +testes +testicle +testicular +testify +testimonial +testimony +testosterone +testy +tetanus +tete +tether +tetrachloride +tetrafluoride +tetragonal +tetrahedra +tetrahedral +tetrahedron +tetravalent +Teutonic +TEX +Texaco +Texan +Texas +text +textbook +textile +Textron +textual +textural +texture +Thai +Thailand +Thalia +thallium +thallophyte +than +thank +thankful +thanksgiving +that +thatch +that'd +that'll +thaw +Thayer +the +Thea +theatric +Thebes +thee +theft +their +theism +theist +Thelma +them +thematic +theme +themselves +then +thence +thenceforth +theocracy +theocratic +Theodore +Theodosian +theologian +theology +theorem +theoretic +theoretician +theorist +theory +therapeutic +therapist +therapy +there +thereabouts +thereafter +thereat +thereby +there'd +therefor +therefore +therefrom +therein +there'll +thereof +thereon +Theresa +thereto +theretofore +thereunder +thereupon +therewith +thermal +thermionic +thermistor +thermo +Thermofax +thermophilic +thermostat +thesaurus +these +theses +Theseus +thesis +thespian +Thessalonian +Thessaly +theta +Thetis +they +they'd +they'll +they're +they've +thiamin +thick +thicken +thicket +thickish +thief +thieves +thieving +thigh +thimble +thimbleful +Thimbu +thin +thine +thing +think +thinnish +thiocyanate +thiouracil +third +thirdhand +thirst +thirsty +thirteen +thirteenth +thirtieth +thirty +thirtyfold +this +this'll +thistle +thistledown +thither +Thomas +Thomistic +Thompson +Thomson +thong +Thor +thoracic +thorax +Thoreau +thoriate +thorium +thorn +Thornton +thorny +thorough +thoroughbred +thoroughfare +thoroughgoing +Thorpe +Thorstein +those +thou +though +thought +thoughtful +thousand +thousandfold +thousandth +Thrace +Thracian +thrall +thrash +thread +threadbare +threat +threaten +three +threefold +threesome +threonine +thresh +threshold +threw +thrice +thrift +thrifty +thrill +thrips +thrive +throat +throaty +throb +throes +thrombosis +throne +throng +throttle +through +throughout +throughput +throw +throwback +thrown +thrum +thrush +thrust +Thruway +Thuban +thud +thug +thuggee +Thule +thulium +thumb +thumbnail +thumbprint +thump +thunder +thunderclap +thundercloud +thunderflower +thunderous +thundershower +thunderstorm +Thurman +Thursday +thus +thwack +thwart +thy +thyme +thymine +thymus +thyratron +thyroglobulin +thyroid +thyroidal +thyronine +thyrotoxic +thyroxine +thyself +ti +Tiber +tibet +Tibetan +tibia +tic +tick +ticket +tickle +ticklish +tid +tidal +tidbit +tide +tideland +tidewater +tidy +tie +Tientsin +tier +Tiffany +tift +tiger +tight +tighten +tightwad +tigress +Tigris +til +tilde +tile +till +tilt +tilth +Tim +timber +timberland +timbre +time +timeout +timepiece +timeshare +timetable +timeworn +Timex +timid +Timon +timothy +tin +Tina +tincture +tinder +tine +tinfoil +tinge +tingle +tinker +tinkle +tinny +tinsel +tint +tintype +tiny +Tioga +tip +tipoff +Tipperary +tipple +tippy +tipsy +tiptoe +tirade +Tirana +tire +tiresome +tissue +tit +Titan +titanate +titanic +titanium +tithe +tithing +titian +titillate +title +titmice +titmouse +Tito +titrate +titular +Titus +tizzy +TN +TNT +to +toad +toady +toast +tobacco +Tobago +Toby +toccata +today +today'll +Todd +toddle +toddy +toe +TOEFL +toehold +toenail +toffee +tofu +tog +together +togging +toggle +Togo +togs +toil +toilet +toilsome +tokamak +token +Tokyo +told +Toledo +tolerable +tolerant +tolerate +toll +tollbooth +tollgate +tollhouse +Tolstoy +toluene +Tom +tomahawk +tomato +tomatoes +tomb +tombstone +tome +Tomlinson +Tommie +tommy +tomography +tomorrow +Tompkins +ton +tonal +tone +tong +tongue +Toni +tonic +tonight +tonk +tonnage +tonsil +tonsillitis +tony +too +toodle +took +tool +toolkit +toolmake +toolsmith +toot +tooth +toothache +toothbrush +toothpaste +toothpick +toothy +tootle +top +topaz +topcoat +Topeka +topgallant +topheavy +topic +topmost +topnotch +topocentric +topography +topology +toponym +toponymy +topple +topsoil +Topsy +tor +torah +torch +tore +tori +torn +tornado +toroid +toroidal +Toronto +torpedo +torpedoes +torpid +torpor +torque +torr +Torrance +torrent +torrential +torrid +torsion +torso +tort +tortoise +tortoiseshell +tortuous +torture +torus +tory +Toshiba +toss +tot +total +totalitarian +tote +totem +totemic +toto +touch +touchdown +touchstone +touchy +tough +tour +tournament +tousle +tout +tow +toward +towboat +towel +tower +towhead +towhee +town +townhouse +Townsend +townsman +townsmen +toxic +toxicology +toxin +toy +Toyota +trace +traceable +tracery +trachea +tracheae +track +trackage +tract +tractor +Tracy +trade +trademark +tradeoff +tradesman +tradesmen +tradition +traffic +trafficked +trafficker +trafficking +trag +tragedian +tragedy +tragic +tragicomic +trail +trailblazer +trailblazing +trailhead +trailside +train +trainee +trainload +trainman +trainmen +traipse +trait +traitor +traitorous +trajectory +tram +trammel +tramp +trample +tramway +trance +tranquil +tranquillity +trans +transact +transalpine +transatlantic +transceiver +transcend +transcendent +transcendental +transconductance +transcontinental +transcribe +transcript +transcription +transducer +transduction +transect +transept +transfer +transferee +transference +transferor +transferral +transferred +transferring +transfinite +transfix +transform +transformation +transfusable +transfuse +transfusion +transgress +transgression +transgressor +transient +transistor +transit +Transite +transition +transitive +transitory +translate +transliterate +translucent +transmissible +transmission +transmit +transmittable +transmittal +transmittance +transmitted +transmitter +transmitting +transmutation +transmute +transoceanic +transom +transonic +transpacific +transparent +transpiration +transpire +transplant +transplantation +transport +transportation +transposable +transpose +transposition +transship +transshipping +transudate +Transvaal +transversal +transverse +transvestite +Transylvania +trap +trapezium +trapezoid +trapezoidal +trash +trashy +Trastevere +trauma +traumatic +travail +travel +travelogue +traversable +traversal +traverse +travertine +travesty +Travis +trawl +tray +treacherous +treachery +tread +treadle +treadmill +treason +treasonous +treasure +treasury +treat +treatise +treaty +treble +tree +treetop +trefoil +trek +trellis +tremble +tremendous +tremolo +tremor +tremulous +trench +trenchant +trencherman +trenchermen +trend +trendy +Trenton +trepidation +trespass +tress +trestle +Trevelyan +triable +triad +trial +triangle +triangular +triangulate +Triangulum +Trianon +Triassic +triatomic +tribal +tribe +tribesman +tribesmen +tribulate +tribunal +tribune +tributary +tribute +Triceratops +Trichinella +trichloroacetic +trichloroethane +trichrome +trick +trickery +trickle +trickster +tricky +trident +tridiagonal +triennial +trifle +trifluoride +trig +trigonal +trigonometry +trigram +trilingual +trill +trillion +trillium +trilobite +trilogy +trim +trimer +trimester +Trinidad +trinitarian +trinity +trinket +trio +triode +trioxide +trip +tripartite +tripe +triphammer +triphenylphosphine +triple +triplet +Triplett +triplex +triplicate +triploid +triploidy +tripod +tripoli +triptych +trisodium +Tristan +tristate +trisyllable +trite +tritium +triton +triumph +triumphal +triumphant +triune +trivalent +trivia +trivial +trivium +Trobriand +trod +trodden +troff +troglodyte +troika +Trojan +troll +trolley +trollop +trombone +trompe +troop +trophic +trophy +tropic +tropopause +troposphere +tropospheric +trot +trouble +troubleshoot +troublesome +trough +trounce +troupe +trouser +trout +Troutman +troy +truant +truce +truck +truckload +truculent +trudge +Trudy +true +truffle +truism +Truk +truly +Truman +Trumbull +trump +trumpery +trumpet +truncate +trundle +trunk +trunkful +truss +trust +trustee +trustful +trustworthy +trusty +truth +truthful +TRW +try +trypsin +trytophan +t's +tsar +tsarina +tset +tsunami +TTL +TTY +tty +tub +tuba +tube +tuberculin +tuberculosis +tuberous +tubular +tubule +tuck +Tucson +Tudor +Tuesday +tuff +tuft +tug +tugboat +tugging +tuition +Tulane +tularemia +tulip +tulle +Tulsa +tum +tumble +tumbrel +tumult +tumultuous +tun +tuna +tundra +tune +tuneful +tung +tungstate +tungsten +tunic +Tunis +Tunisia +tunnel +tupelo +tuple +turban +turbid +turbidity +turbinate +turbine +turbofan +turbojet +turbulent +turf +Turin +Turing +turk +turkey +Turkish +turmeric +turmoil +turn +turnabout +turnaround +turnery +turnip +turnkey +turnoff +turnout +turnover +turnpike +turnstone +turntable +turpentine +turpitude +turquoise +turret +turtle +turtleback +turtleneck +turvy +Tuscaloosa +Tuscan +Tuscany +Tuscarora +tusk +Tuskegee +tussle +tussock +Tutankhamen +tutelage +Tutenkhamon +tutor +tutorial +Tuttle +tutu +tuxedo +TV +TVA +TWA +twaddle +twain +tweak +tweed +tweedy +tweeze +twelfth +twelve +twelvefold +twentieth +twenty +twentyfold +twice +twiddle +twig +twigging +twilight +twill +twin +twine +twinge +twinkle +twirl +twirly +twist +twisty +twit +twitch +twitchy +two +twofold +Twombly +twosome +TWX +TX +Tyburn +tycoon +tying +tyke +Tyler +tympanum +type +typeface +typescript +typeset +typesetter +typesetting +typewrite +typewritten +typhoid +Typhon +typhoon +typhus +typic +typify +typo +typographer +typography +typology +tyrannic +tyrannicide +Tyrannosaurus +tyranny +tyrant +tyrosine +Tyson +Tzeltal +u +ubiquitous +ubiquity +UCLA +Uganda +ugh +ugly +UK +Ukraine +Ukrainian +Ulan +ulcer +ulcerate +Ullman +ulna +Ulster +ulterior +ultimate +ultimatum +ultra +Ulysses +umber +umbilical +umbilici +umbilicus +umbra +umbrage +umbrella +umpire +UN +un +unanimity +unanimous +unary +unbeknownst +unchristian +uncle +uncouth +unction +unctuous +under +underclassman +underclassmen +underivable +underived +underling +undulate +UNESCO +ungulate +uniaxial +unicorn +unidimensional +unidirectional +uniform +unify +unilateral +unimodal +uninominal +union +uniplex +unipolar +uniprocessor +unique +Uniroyal +unisex +unison +unit +unital +unitarian +unitary +unite +unity +Univac +univalent +univariate +universal +universe +Unix +unkempt +unruly +until +unwieldy +up +upbeat +upbraid +upbring +upcome +update +updraft +upend +upgrade +upheaval +upheld +uphill +uphold +upholster +upholstery +upkeep +upland +uplift +upon +upperclassman +upperclassmen +uppercut +uppermost +upraise +upright +uprise +upriver +uproar +uproarious +uproot +upset +upsetting +upshot +upside +upsilon +upslope +upstage +upstair +upstand +upstart +upstate +upstater +upstream +upsurge +upswing +uptake +Upton +uptown +uptrend +upturn +upward +upwell +upwind +uracil +urania +uranium +Uranus +uranyl +urban +Urbana +urbane +urbanite +urchin +Urdu +urea +uremia +urethane +urethra +urge +urgent +Uri +urinal +urinary +urinate +urine +Uris +urn +urology +Urquhart +Ursa +Ursula +Ursuline +Uruguay +urushiol +U.S +u's +us +U.S.A +USA +usable +USAF +usage +USC +USC&GS +USDA +use +useful +USGS +usher +USIA +USN +USPS +USSR +usual +usurer +usurious +usurp +usurpation +usury +UT +Utah +utensil +uterine +uterus +Utica +utile +utilitarian +utility +utmost +utopia +utopian +Utrecht +utter +utterance +uttermost +v +VA +vacant +vacate +vacationland +vaccinate +vaccine +vacillate +vacua +vacuo +vacuolate +vacuole +vacuous +vacuum +vade +Vaduz +vagabond +vagary +vagina +vaginal +vagrant +vague +Vail +vain +vainglorious +vale +valedictorian +valedictory +valent +valentine +Valerie +Valery +valet +valeur +Valhalla +valiant +valid +validate +valine +Valkyrie +Valletta +valley +Valois +Valparaiso +valuate +value +valve +vamp +vampire +van +vanadium +Vance +Vancouver +vandal +Vandenberg +Vanderbilt +Vanderpoel +vane +vanguard +vanilla +vanish +vanity +vanquish +vantage +variable +variac +Varian +variant +variate +variegate +variety +various +varistor +Varitype +varnish +varsity +vary +vascular +vase +vasectomy +vasoconstriction +Vasquez +vassal +Vassar +vast +vat +Vatican +vaudeville +Vaudois +Vaughan +Vaughn +vault +veal +vector +vectorial +Veda +vee +veer +veery +Vega +vegetable +vegetarian +vegetate +vehement +vehicle +vehicular +veil +vein +velar +Velasquez +veldt +Vella +vellum +velocity +velours +velvet +velvety +venal +vend +vendetta +vendible +vendor +veneer +venerable +venerate +venereal +Venetian +venetian +Veneto +Venezuela +vengeance +vengeful +venial +Venice +venison +venom +venomous +venous +vent +ventilate +ventral +ventricle +ventriloquism +ventriloquist +venture +venturesome +venturi +Venus +Venusian +Vera +veracious +veracity +veranda +verandah +verb +verbal +verbatim +verbena +verbiage +verbose +verdant +Verde +Verdi +verdict +verge +veridic +verify +verisimilitude +veritable +verity +Verlag +vermeil +vermiculite +vermilion +vermin +Vermont +vermouth +Verna +vernacular +vernal +Verne +vernier +Vernon +Verona +Veronica +versa +Versailles +versatec +versatile +verse +version +versus +vertebra +vertebrae +vertebral +vertebrate +vertex +vertical +vertices +vertigo +verve +very +vesicular +vesper +vessel +vest +vestal +vestibule +vestige +vestigial +vestry +Vesuvius +vet +vetch +veteran +veterinarian +veterinary +veto +vex +vexation +vexatious +vi +via +viaduct +vial +vibrant +vibrate +vibrato +viburnum +vicar +vicarious +vice +viceroy +Vichy +vicinal +vicinity +vicious +vicissitude +Vicksburg +Vicky +victim +victor +Victoria +victorious +victory +victrola +victual +Vida +video +videotape +vie +Vienna +Viennese +Vientiane +Viet +Vietnam +Vietnamese +view +viewpoint +vigil +vigilant +vigilante +vignette +vigorous +vii +viii +Viking +Vikram +vile +vilify +villa +village +villain +villainous +villein +vinaigrette +Vincent +Vinci +vindicate +vindictive +vine +vinegar +vineyard +Vinson +vintage +vintner +vinyl +viola +violate +violent +violet +violin +viper +viral +Virgil +virgin +virginal +Virginia +Virgo +virgule +virile +virtual +virtue +virtuosi +virtuosity +virtuoso +virtuous +virulent +virus +visa +visage +viscera +visceral +viscid +viscoelastic +viscometer +viscosity +viscount +viscous +vise +Vishnu +visible +Visigoth +vision +visionary +visit +visitation +visitor +visor +vista +visual +vita +vitae +vital +vitamin +vitiate +Vito +vitreous +vitrify +vitriol +vitriolic +vitro +viva +vivace +vivacious +vivacity +Vivaldi +Vivian +vivid +vivify +viviparous +vivisection +vivo +vixen +viz +Vladimir +Vladivostok +vocable +vocabularian +vocabulary +vocal +vocalic +vocate +vociferous +vodka +Vogel +vogue +voice +voiceband +void +volatile +volcanic +volcanism +volcano +volcanoes +vole +volition +Volkswagen +volley +volleyball +Volstead +volt +Volta +voltage +voltaic +Voltaire +Volterra +voltmeter +voluble +volume +volumetric +voluminous +voluntary +volunteer +voluptuous +Volvo +vomit +von +voodoo +voracious +voracity +vortex +vortices +vorticity +Voss +votary +vote +votive +vouch +vouchsafe +Vought +vow +vowel +voyage +Vreeland +v's +vs +VT +Vulcan +vulgar +vulnerable +vulpine +vulture +vying +w +WA +Waals +Wabash +WAC +wack +wacke +wacky +Waco +wad +waddle +wade +wadi +Wadsworth +wafer +waffle +wag +wage +wagging +waggle +Wagner +wagoneer +wagonload +wah +Wahl +wail +wainscot +Wainwright +waist +waistcoat +waistline +wait +Waite +waitress +waive +wake +Wakefield +wakeful +waken +wakerobin +wakeup +Walcott +Walden +Waldo +Waldorf +Waldron +wale +Walgreen +walk +walkie +walkout +walkover +walkway +wall +walla +wallaby +Wallace +wallboard +Waller +wallet +Wallis +wallop +wallow +wallpaper +wally +walnut +Walpole +walrus +Walsh +Walt +Walter +Waltham +Walton +waltz +wan +wand +wander +wane +Wang +wangle +want +wanton +wapato +wapiti +Wappinger +war +warble +Warburton +ward +warden +wardrobe +wardroom +ware +warehouse +warehouseman +warehousemen +warfare +warhead +Waring +warm +warmhearted +warmish +warmonger +warmth +warmup +warn +warp +warplane +warrant +warranty +warren +warrior +Warsaw +wart +wartime +warty +Warwick +wary +was +wash +washbasin +washboard +washbowl +Washburn +Washington +washout +washy +wasn't +wasp +waspish +Wasserman +wast +wastage +waste +wastebasket +wasteful +wasteland +wastewater +wasting +wastrel +Watanabe +watch +watchband +watchdog +watchful +watchmake +watchman +watchmen +watchword +watchworks +water +Waterbury +watercourse +watercress +waterfall +waterfowl +waterfront +Watergate +waterhole +Waterhouse +waterline +Waterloo +Waterman +watermelon +waterproof +watershed +waterside +watertight +Watertown +waterway +watery +Watkins +Watson +watt +wattage +wattle +wave +waveform +wavefront +waveguide +wavelength +wavenumber +wavy +wax +waxen +waxwing +waxwork +waxy +way +waybill +waylaid +waylay +Wayne +wayside +wayward +we +weak +weaken +weal +wealth +wealthy +wean +weapon +weaponry +wear +wearisome +weary +weasel +weather +weatherbeaten +weatherproof +weatherstrip +weatherstripping +weave +web +Webb +weber +Webster +WECo +we'd +wed +wedge +wedlock +Wednesday +wee +weed +weedy +week +weekday +weekend +weep +Wehr +Wei +Weierstrass +weigh +weight +weighty +Weinberg +Weinstein +weir +weird +Weiss +Welch +welcome +weld +Weldon +welfare +we'll +well +wellbeing +Weller +Welles +Wellesley +wellington +wellwisher +welsh +welt +Wendell +Wendy +went +wept +we're +were +weren't +Werner +wert +Werther +Wesley +Wesleyan +west +westbound +Westchester +westerly +western +westernmost +Westfield +Westinghouse +Westminster +Weston +westward +wet +wetland +we've +Weyerhauser +whack +whale +whalebone +Whalen +wham +wharf +Wharton +wharves +what +what'd +whatever +Whatley +whatnot +what're +whatsoever +wheat +Wheatstone +whee +wheedle +wheel +wheelbarrow +wheelbase +wheelchair +wheelhouse +wheeze +wheezy +Whelan +whelk +Wheller +whelm +whelp +when +whence +whenever +where +whereabout +whereas +whereby +where'd +wherefore +wherein +whereof +whereon +where're +wheresoever +whereupon +wherever +wherewith +whet +whether +whey +which +whichever +whiff +whig +while +whim +whimper +whimsey +whimsic +whimsy +whine +whinny +whip +whiplash +Whippany +whippet +Whipple +whipsaw +whir +whirl +whirligig +whirlpool +whirlwind +whisk +whisper +whistle +whistleable +whit +Whitaker +Whitcomb +white +whiteface +Whitehall +whitehead +Whitehorse +whiten +whitetail +whitewash +whither +whitish +Whitlock +Whitman +Whitney +Whittaker +Whittier +whittle +whiz +whizzing +who +whoa +who'd +whodunit +whoever +whole +wholehearted +wholesale +wholesome +who'll +wholly +whom +whomever +whomsoever +whoop +whoopee +whoosh +whop +whore +whorl +whose +whosoever +whup +why +WI +Wichita +wick +wicket +wide +widen +widespread +widgeon +widget +widow +width +widthwise +wield +wiener +Wier +wife +wig +wigging +Wiggins +wiggle +wiggly +Wightman +wigmake +wigwam +Wilbur +Wilcox +wild +wildcat +wildcatter +wildebeest +wilderness +wildfire +wildflower +wildlife +wile +Wiley +Wilfred +wilful +Wilhelm +Wilhelmina +Wilkes +Wilkie +Wilkins +Wilkinson +will +Willa +Willard +willful +William +Williamsburg +Williamson +Willie +Willis +Willoughby +willow +willowy +Wilma +Wilmington +Wilshire +Wilson +wilt +wily +win +wince +winch +Winchester +wind +windbag +windblown +windbreak +windfall +windmill +window +windowpane +windowsill +windshield +Windsor +windstorm +windsurf +windswept +windup +windward +windy +wine +winemake +winemaster +winery +wineskin +Winfield +wing +wingback +wingbeat +wingman +wingmen +wingspan +wingspread +wingtip +Winifred +wink +winkle +Winnetka +Winnie +Winnipeg +Winnipesaukee +winnow +wino +Winslow +winsome +Winston +winter +wintergreen +wintertime +Winthrop +wintry +winy +wipe +wire +wireman +wiremen +wiry +Wisconsin +wisdom +wise +wiseacre +wisecrack +wisenheimer +wish +wishbone +wishful +wishy +wisp +wispy +wistful +wit +witch +witchcraft +with +withal +withdraw +withdrawal +withdrawn +withdrew +withe +wither +withheld +withhold +within +without +withstand +withstood +withy +witness +Witt +Wittgenstein +witty +wive +wizard +wobble +woe +woebegone +woeful +wok +woke +Wolcott +wold +wolf +Wolfe +Wolff +Wolfgang +wolfish +wolve +wolverine +woman +womb +wombat +women +won +wonder +wonderful +wonderland +wondrous +Wong +won't +wont +woo +wood +Woodard +Woodbury +woodcarver +woodchuck +woodcock +woodcut +wooden +woodgrain +woodhen +woodland +Woodlawn +woodlot +woodpeck +woodrow +woodruff +woodshed +woodside +Woodstock +woodward +woodwind +woodwork +woody +woodyard +wool +woolgather +Woolworth +Wooster +wop +Worcester +Worcestershire +word +Wordsworth +wordy +wore +work +workbench +workbook +workday +workforce +workhorse +workload +workman +workmen +workout +workpiece +workplace +worksheet +workshop +workspace +workstation +worktable +world +worldwide +worm +wormy +worn +worrisome +worry +worse +worsen +worship +worshipful +worst +worth +Worthington +worthwhile +worthy +Wotan +would +wouldn't +wound +wove +woven +wow +wrack +wraith +wrangle +wrap +wraparound +wrapup +wrasse +wrath +wrathful +wreak +wreath +wreathe +wreck +wreckage +wren +wrench +wrest +wrestle +wretch +wriggle +wright +Wrigley +wring +wrinkle +wrist +wristband +wristwatch +writ +write +writeup +writhe +writhing +written +wrong +wrongdoer +wrongdoing +wrongful +Wronskian +wrote +wrought +wry +w's +Wu +Wuhan +WV +WY +Wyandotte +Wyatt +Wyeth +Wylie +Wyman +Wyner +wynn +Wyoming +wysiwyg +x +Xavier +xenon +xenophobia +xerography +xerox +Xerxes +Xhosa +xi +x's +xylem +xylene +xylophone +y +yacht +yachtsman +yachtsmen +yah +yak +Yakima +Yale +Yalta +yam +Yamaha +yang +yank +Yankee +Yankton +Yaounde +yap +yapping +Yaqui +yard +yardage +yardstick +Yarmouth +yarmulke +yarn +yarrow +Yates +yaw +yawl +yawn +ye +yea +Yeager +yeah +year +yearbook +yearn +yeast +yeasty +Yeats +yell +yellow +yellowish +Yellowknife +Yellowstone +yelp +Yemen +yen +yeoman +yeomanry +yeomen +yeshiva +yesterday +yesteryear +yet +yew +Yiddish +yield +yin +yip +yipping +YMCA +yodel +Yoder +yoga +yoghurt +yogi +yogurt +yoke +yokel +Yokohama +Yokuts +yolk +yon +yond +Yonkers +yore +York +Yorkshire +Yorktown +Yosemite +Yost +you +you'd +you'll +young +youngish +youngster +Youngstown +your +you're +yourself +yourselves +youth +youthful +you've +yow +Ypsilanti +y's +ytterbium +yttrium +Yucatan +yucca +yuck +Yugoslav +Yugoslavia +yuh +Yuki +Yukon +yule +Yves +Yvette +YWCA +z +Zachary +zag +zagging +Zagreb +Zaire +Zambia +Zan +Zanzibar +zap +zazen +zeal +Zealand +zealot +zealous +zebra +Zeiss +Zellerbach +Zen +zenith +zero +zeroes +zeroth +zest +zesty +zeta +Zeus +Ziegler +zig +zigging +zigzag +zigzagging +zilch +zillion +Zimmerman +zinc +zing +zinnia +Zion +zip +zircon +zirconium +zither +zloty +zodiac +zodiacal +Zoe +Zomba +zombie +zone +zoo +zoology +zoom +zooplankton +Zorn +Zoroaster +Zoroastrian +zounds +z's +zucchini +Zulu +Zurich +zygote From 8423492f33031a107b68e5cf3191aa68abe16f05 Mon Sep 17 00:00:00 2001 From: Sergey Date: Fri, 9 May 2014 23:39:23 -0700 Subject: [PATCH 03/16] More games ported: boggle, btlgammon, cribbage. Simulator modified to allow CR in UART output. --- src/games/Makefile | 6 +- src/games/atc/Makefile | 2 +- src/games/boggle/.gitignore | 3 + src/games/boggle/Makefile | 44 +- src/games/boggle/boggle.c | 104 ++- src/games/boggle/comp.c | 18 +- src/games/btlgammon/.gitignore | 1 + src/games/btlgammon/Makefile | 47 +- src/games/btlgammon/btlgammon.c | 1084 ++++++++++++++-------------- src/games/cribbage/.gitignore | 1 + src/games/cribbage/Makefile | 55 +- src/games/cribbage/cards.c | 48 +- src/games/cribbage/crib.c | 872 +++++++++++----------- src/games/cribbage/cribbage.h | 30 +- src/games/cribbage/deck.h | 17 +- src/games/cribbage/extern.c | 16 +- src/games/cribbage/io.c | 430 +++++------ src/games/cribbage/score.c | 198 +++-- src/games/cribbage/support.c | 188 ++--- src/games/cribbage/test.c | 25 +- tools/virtualmips/pic32_dev_uart.c | 6 +- 21 files changed, 1546 insertions(+), 1649 deletions(-) create mode 100644 src/games/boggle/.gitignore create mode 100644 src/games/btlgammon/.gitignore create mode 100644 src/games/cribbage/.gitignore diff --git a/src/games/Makefile b/src/games/Makefile index 130d803..45e87b3 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -11,9 +11,9 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # -SUBDIR = adventure atc backgammon battlestar rogue sail trek -# TODO: boggle btlgammon cribbage -# fortune hangman hunt mille monop phantasia quiz robots +SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ + cribbage rogue sail trek +# TODO: fortune hangman hunt mille monop phantasia quiz robots # sail snake warp # C programs that live in the current directory and do not need diff --git a/src/games/atc/Makefile b/src/games/atc/Makefile index 95e5999..9c0ca6c 100644 --- a/src/games/atc/Makefile +++ b/src/games/atc/Makefile @@ -14,7 +14,7 @@ CFLAGS += -DBSD -DDEST=\"/games/lib/atc/\" #CFLAGS += -DSYSV -DDEST=\"games/\" YFLAGS = -d LEX = lex -LIBS = -lm -lcurses -ltermcap +LIBS = -lm -lcurses -ltermcap -lc OBJS = extern.o grammar.o input.o lex.o list.o log.o main.o tunable.o \ graphics.o update.o diff --git a/src/games/boggle/.gitignore b/src/games/boggle/.gitignore new file mode 100644 index 0000000..3b54c6b --- /dev/null +++ b/src/games/boggle/.gitignore @@ -0,0 +1,3 @@ +bogdict +boggle +comp diff --git a/src/games/boggle/Makefile b/src/games/boggle/Makefile index b3179aa..16ac5b9 100644 --- a/src/games/boggle/Makefile +++ b/src/games/boggle/Makefile @@ -5,28 +5,36 @@ # # @(#)Makefile 5.3 (Berkeley) 9/7/85 # -DESTDIR= -CC = /bin/cc -SEPFLAG= -i -CFLAGS = -O +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk -all: boggle bogdict +CFLAGS += -O +OBJS = boggle.o +MAN = boggle.0 +MANSRC = boggle.6 -bogdict: comp sfile - -if [ -f /usr/local/lib/w2a ]; \ - then dict=/usr/local/lib/w2a; \ - else dict=/usr/dict/words; fi; \ - sed -f sfile $$dict | uniq | ./comp >bogdict +all: boggle bogdict ${MAN} -install: all - install -s boggle ${DESTDIR}/usr/games/boggle - install -m 644 bogdict ${DESTDIR}/usr/games/lib/bogdict +boggle: ${OBJS} + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf -boggle: boggle.c - cc ${SEPFLAG} -o boggle ${CFLAGS} boggle.c +bogdict: comp sfile + sed -f sfile ../../../share/dict/words | uniq | ./comp > bogdict -comp: comp.c - cc ${SEPFLAG} -o comp ${CFLAGS} comp.c +comp: comp.c + cc -O comp.c -o comp + +${MAN}: ${MANSRC} + ${MANROFF} $< > $@ clean: - rm -f bogdict boggle comp *.o + rm -f *.o core boggle comp bogdict + +install: + install boggle $(DESTDIR)/games/ + install -m 644 bogdict $(DESTDIR)/games/lib/bogdict + cp ${MAN} $(DESTDIR)/share/man/cat6/ diff --git a/src/games/boggle/boggle.c b/src/games/boggle/boggle.c index c56553e..eaa0046 100644 --- a/src/games/boggle/boggle.c +++ b/src/games/boggle/boggle.c @@ -3,15 +3,6 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#if !defined(lint) && defined(DOSCCS) -char copyright[] = -"@(#) Copyright (c) 1980 Regents of the University of California.\n\ - All rights reserved.\n"; - -static char sccsid[] = "@(#)boggle.c 5.1.1 (2.11BSD) 1997/10/2"; -#endif - #include #include #include @@ -19,7 +10,11 @@ static char sccsid[] = "@(#)boggle.c 5.1.1 (2.11BSD) 1997/10/2"; #include #include #include +#include +#include #include +#include +#include /* basic parameters */ #define N 4 @@ -62,7 +57,7 @@ long logloc; char logbuff[100] = {"inst\t"}; /* dictionary interface */ -char defname[] = "/usr/games/lib/bogdict"; +char defname[] = "/games/lib/bogdict"; char *dictname = &defname[0]; FILE *dict; @@ -89,14 +84,13 @@ char *cube [BSIZE] = { "anedvz", "pinesh", "abilyt", "gkyleu" }; - /* storage for words found */ int ubotch, ustart, wcount; char *word [MAXWORDS]; char *freesp; char space[10000]; -endline () +void endline () { if (column != 0) { putchar('\n'); @@ -104,7 +98,7 @@ endline () } } -timeout () +void timeout () { if (*timept > 0) { signal (SIGALRM, timeout); @@ -113,7 +107,7 @@ timeout () putchar('\007'); } -interrupt () +void interrupt () { signal(SIGINT, interrupt); if (delct++ >= 1) @@ -121,7 +115,7 @@ interrupt () timept = &zero; } -goodbye (stat) +void goodbye (stat) int stat; { if (master != 0) { @@ -134,19 +128,13 @@ int stat; exit(stat); } -clearscreen () +void clearscreen () { stty (fileno(stdin), &tempttyb); printf("\n\f\r"); } -compare (a, b) -char **a, **b; -{ - return(wordcomp(*a, *b)); -} - -wordcomp (p, q) +int wordcomp (p, q) register char *p, *q; { if (*p=='0' && *q!='0') @@ -161,7 +149,13 @@ register char *p, *q; return(*p-*q); } -printinst () +int compare (a, b) +char **a, **b; +{ + return(wordcomp(*a, *b)); +} + +void printinst () { stty (fileno(stdin), &tempttyb); printf("instructions?"); @@ -177,10 +171,10 @@ printinst () printf(" This program is intended for people wishing to sharpen their\n"); printf("skills at Boggle. If you invoke the program with 4 arguments of 4\n"); printf("letters each, (e.g. \"boggle appl epie moth erhd\") the program forms the\n"); - printf("obvious Boggle grid and lists all the words from /usr/dict/words found\n"); + printf("obvious Boggle grid and lists all the words from /share/dict/words found\n"); printf("therein. If you invoke the program without arguments, it will generate\n"); printf("a board for you, let you enter words for 3 minutes, and then tell you\n"); - printf("how well you did relative to /usr/dict/words.\n"); + printf("how well you did relative to /share/dict/words.\n"); printf(" In interactive play, enter your words separated by spaces, tabs,\n"); printf("or newlines. A bell will ring when there is 2:00, 1:00, 0:10, 0:02,\n"); printf("0:01, and 0:00 time left. You may complete any word started before the\n"); @@ -198,7 +192,7 @@ printinst () stty (fileno(stdin), &tempttyb); } -setup () +void setup () { register int i, j; int rd, cd, k; @@ -229,7 +223,7 @@ setup () level[1] = &stack[1]; } -makelists () +void makelists () { register int i, c; for (i=0; i<26; i++) @@ -241,7 +235,7 @@ makelists () } } -genboard () +void genboard () { register int i, j; for (i=0; i=10 ? '*' : '0'+ways; } -aputword (ways) +void aputword (ways) int ways; { /* store (wbuff, ways) in next slot in space */ @@ -333,16 +327,7 @@ int ways; word[++wcount] = freesp; } -tputword (ways) -int ways; -{ - /* print (wbuff, ways) on terminal */ - wbuff[wlength+1] = '0'; - wbuff[0] = ways>=10 ? '*' : '0'+ways; - outword(&wbuff[0]); -} - -outword (p) +void outword (p) register char *p; { register int newcol; @@ -371,7 +356,16 @@ register char *p; } } -printdiff () +void tputword (ways) +int ways; +{ + /* print (wbuff, ways) on terminal */ + wbuff[wlength+1] = '0'; + wbuff[0] = ways>=10 ? '*' : '0'+ways; + outword(&wbuff[0]); +} + +void printdiff () { register int c, d, u; char both, donly, uonly; @@ -423,7 +417,7 @@ printdiff () } } -numways (leaf, last) +int numways (leaf, last) register struct frame *leaf; struct frame *last; { @@ -444,8 +438,9 @@ struct frame *last; return(count); } -evalboard (getword, putword) -int (*getword)(), (*putword)(); +int evalboard (getword, putword) +int (*getword)(); +void (*putword)(); { register struct frame *top; register int l, q; @@ -461,7 +456,7 @@ int (*getword)(), (*putword)(); if (!(*getword) ()) break; top = level[l+1]; - + while (1) { level[l+1] = lastparent = top; /* wbuff[1]...wbuff[l] have been matched */ @@ -501,7 +496,7 @@ int (*getword)(), (*putword)(); return(found); } -main (argc, argv) +int main (argc, argv) int argc; char **argv; { @@ -516,13 +511,13 @@ char **argv; goodbye(0); signal (SIGINT, interrupt); timein = time(0L); - if (argv[0][0] != 'a' && (logfile = open("/usr/games/lib/boglog", 1)) >= 0) { + if (argv[0][0] != 'a' && (logfile = open("/games/lib/boglog", 1)) >= 0) { p = &logbuff[5]; q = getlogin(); - while (*p++ = *q++); + while ((*p++ = *q++)); p[-1] = '\t'; q = ctime(&timein); - while (*p++ = *q++); + while ((*p++ = *q++)); logloc = lseek(logfile, 0L, 2); write(logfile, &logbuff[0], p-&logbuff[1]); } @@ -612,11 +607,12 @@ char **argv; evalboard(getdword, aputword); p = freesp; while ((i = read(pipefd[0], freesp, 512)) != 0) { - if (i < 0) + if (i < 0) { if (errno != EINTR) break; else i = 0; + } freesp += i; } close(pipefd[0]); diff --git a/src/games/boggle/comp.c b/src/games/boggle/comp.c index 874f0a2..d61eec6 100644 --- a/src/games/boggle/comp.c +++ b/src/games/boggle/comp.c @@ -3,35 +3,27 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1980 Regents of the University of California.\n\ - All rights reserved.\n"; -#endif not lint - -#ifndef lint -static char sccsid[] = "@(#)comp.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - #include + #define MAX ' ' char new[MAX], old[MAX]; -main () +int main () { register int i, j; + old[0] = '\0'; while (fgets(&new[0], MAX, stdin) != NULL) { for (i=0; i= MAX) { fprintf(stderr, "long word\n"); - exit(1); + return 1; } putc(i, stdout); for (j=0; (old[j]=new[j]) != '\n'; j++); old[j] = '\0'; fputs(&old[i], stdout); } + return 0; } diff --git a/src/games/btlgammon/.gitignore b/src/games/btlgammon/.gitignore new file mode 100644 index 0000000..af6974d --- /dev/null +++ b/src/games/btlgammon/.gitignore @@ -0,0 +1 @@ +btlgammon diff --git a/src/games/btlgammon/Makefile b/src/games/btlgammon/Makefile index d0724c0..1ddaf11 100644 --- a/src/games/btlgammon/Makefile +++ b/src/games/btlgammon/Makefile @@ -1,36 +1,23 @@ -# @(#)Makefile 4.2 (Berkeley) 9/7/85 +# @(#)Makefile 4.2 (Berkeley) 9/7/85 # -DESTDIR= -CFLAGS= -O -SEPFLAG= -i +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk -btlgammon: btlgammon.c - cc ${SEPFLAG} ${CFLAGS} -o btlgammon btlgammon.c +CFLAGS = -O +OBJS = btlgammon.o -install: btlgammon backrules - install -s btlgammon ${DESTDIR}/usr/games/btlgammon - install -c backrules ${DESTDIR}/usr/games/lib/backrules +all: btlgammon + +btlgammon: ${OBJS} + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf clean: - rm -f a.out core *.s *.o btlgammon - -depend: - cat x.c - for i in btlgammon; do \ - (echo $$i: $$i.c >>makedep; \ - /bin/grep '^#[ ]*include' x.c $$i.c | sed \ - -e 's,<\(.*\)>,"/usr/include/\1",' \ - -e 's/:[^"]*"\([^"]*\)".*/: \1/' \ - -e 's/\.c//' >>makedep); done - echo '/^# DO NOT DELETE THIS LINE/+2,$$d' >eddep - echo '$$r makedep' >>eddep - echo 'w' >>eddep - cp Makefile Makefile.bak - ed - Makefile < eddep - rm eddep makedep x.c - echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile - echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile - echo '# see make depend above' >> Makefile - -# DO NOT DELETE THIS LINE -- make depend uses it + rm -f *.o core btlgammon +install: + install btlgammon $(DESTDIR)/games/ + install -m 644 backrules $(DESTDIR)/games/lib/backrules diff --git a/src/games/btlgammon/btlgammon.c b/src/games/btlgammon/btlgammon.c index e1acba8..c3c62e1 100644 --- a/src/games/btlgammon/btlgammon.c +++ b/src/games/btlgammon/btlgammon.c @@ -1,18 +1,18 @@ - -static char sccsid[] = " backgammon.c 4.1 82/10/24 "; - /* -** The game of Backgammon -*/ - -#include + * The game of Backgammon + */ +#include +#include +#include +#include +#include #define WHITE 0 #define BROWN 1 #define NIL (-1) #define MAXGMOV 10 #define MAXIMOVES 1000 -#define RULES "/usr/games/lib/backrules" +#define RULES "/games/lib/backrules" char level; /*'b'=beginner, 'i'=intermediate, 'e'=expert*/ @@ -30,19 +30,19 @@ int goodmoves[MAXGMOV]; int probmoves[MAXGMOV]; int brown[] = { /* brown position table */ - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int white[] = { /* white position table */ - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int probability[] = { - 0, 11, 12, 13, 14, 15, 16, + 0, 11, 12, 13, 14, 15, 16, 06, 05, 04, 03, 02, 01 }; @@ -51,9 +51,541 @@ struct { int mov[4]; } moves[MAXIMOVES]; -main() +int piececount(player,startrow,endrow) +int *player,startrow,endrow; { - int go[5], tvec[2]; + int sum; + + sum=0; + while(startrow <= endrow) + sum += player[startrow++]; + return(sum); +} + +int play(player,playee,pos) +int *player,*playee,pos[]; +{ + int k, n, die, ipos; + + for(k=0; k < player[0]; k++){ /*blots on player[0] must be moved first*/ + if(pos[k] == NIL) + break; + if(pos[k] != 0){ + fprintf(stdout, "Stone on bar must be moved first.\n"); + return(NIL); + } + } + for(k = 0; (ipos=pos[k]) != NIL; k++){ + die = k?die2:die1; + n = 25-ipos-die; + if(player[ipos] == 0) + goto badmove; + if(n > 0 && playee[n] >= 2) + goto badmove; + if(n <= 0){ + if(piececount(player,0,18) != 0) + goto badmove; + if((ipos+die) != 25 && piececount(player,19,24-die)!=0) + goto badmove; + } + player[ipos]--; + player[ipos+die]++; + } + for(k = 0; pos[k] != NIL; k++){ + die = k?die2:die1; + n = 25-pos[k]-die; + if(n>0 && playee[n]==1){ + playee[n]=0; + playee[0]++; + } + } + return(0); + +badmove: + fprintf(stdout, "Move %d illegal.\n", ipos); + while(k--){ + die=k?die2:die1; + player[pos[k]]++; + player[pos[k]+die]--; + } + return(NIL); +} + +void moverecord(mover) +int *mover; +{ + int t; + + if(imoves < MAXIMOVES) { + for(t = 0; t <= 3; t++) + moves[imoves].pos[t] = NIL; + switch(count) { + case 4: + moves[imoves].pos[3]=m; + moves[imoves].mov[3]=die1; + + case 3: + moves[imoves].pos[2]=l; + moves[imoves].mov[2]=die1; + + case 2: + moves[imoves].pos[1]=j; + moves[imoves].mov[1]=die2; + + case 1: + moves[imoves].pos[0]=i; + moves[imoves].mov[0]=die1; + imoves++; + } + } + switch(count) { + case 4: + break; + + case 3: + mover[l]++; + mover[l+die1]--; + break; + + case 2: + mover[j]++; + mover[j+die2]--; + break; + + case 1: + mover[i]++; + mover[i+die1]--; + } +} + +void movegen(mover,movee) +int *mover,*movee; +{ + int k; + + for(i = 0; i <= 24; i++){ + count = 0; + if(mover[i] == 0) + continue; + if((k=25-i-die1) > 0 && movee[k] >= 2) { + if(mover[0] > 0) + break; + } else + continue; + if(k <= 0){ + if(piececount(mover, 0, 18) != 0) + break; + if((i+die1) != 25 && piececount(mover,19,i-1) != 0) + break; + } + mover[i]--; + mover[i+die1]++; + count = 1; + for(j = 0; j <= 24; j++){ + if(mover[j]==0) + continue; + if((k=25-j-die2) > 0 && movee[k] >= 2) { + if(mover[0] > 0) + break; + } else + continue; + if(k <= 0){ + if(piececount(mover,0,18) != 0) + break; + if((j+die2) != 25 && piececount(mover,19,j-1) != 0) + break; + } + mover[j]--; + mover[j+die2]++; + count = 2; + if(die1 != die2){ + moverecord(mover); + if(mover[0] > 0) + break; + else + continue; + } + for(l = 0; l <= 24; l++){ + if(mover[l] == 0) + continue; + if((k=25-l-die1) > 0 && movee[k] >= 2) { + if(mover[0] > 0) + break; + } else + continue; + if(k <= 0){ + if(piececount(mover, 0, 18) != 0) + break; + if((l+die2) != 25 && piececount(mover,19,l-1) != 0) + break; + } + mover[l]--; + mover[l+die1]++; + count=3; + for(m=0;m<=24;m++){ + if(mover[m]==0) + continue; + if((k=25-m-die1) >= 0 && movee[k] >= 2) { + if(mover[0] > 0) + break; + } else + continue; + if(k <= 0){ + if(piececount(mover,0,18) != 0) + break; + if((m+die2) != 25 && piececount(mover,19,m-1) != 0) + break; + } + count=4; + moverecord(mover); + if(mover[0] > 0) + break; + } + if(count == 3) + moverecord(mover); + else{ + mover[l]++; + mover[l+die1]--; + } + if(mover[0] > 0) + break; + } + if(count == 2) + moverecord(mover); + else{ + mover[j]++; + mover[j+die1]--; + } + if(mover[0] > 0) + break; + } + if(count == 1) + moverecord(mover); + else{ + mover[i]++; + mover[i+die1]--; + } + if(mover[0] > 0) + break; + } +} + +int getprob(player,playee,start,finish) +int *player,*playee,start,finish; +{ /*returns the probability (times 102) that any + pieces belonging to 'player' and lying between + his points 'start' and 'finish' will be hit + by a piece belonging to playee + */ + int k, n, sum; + + sum = 0; + for(; start <= finish; start++){ + if(player[start] == 1){ + for(k = 1; k <= 12; k++){ + if((n=25-start-k) < 0) + break; + if(playee[n] != 0) + sum += probability[k]; + } + } + } + return(sum); +} + +int eval(player,playee,k,prob) +int *player,*playee,k,*prob; +{ + int newtry[31], newother[31], *r, *q, *p, n, sum, first; + int ii, lastwhite, lastbrown; + + *prob = sum = 0; + r = player+25; + p = newtry; + q = newother; + while(player6) { + for(sum = 1000; lastwhite > 6; lastwhite--) + sum = sum-lastwhite*newtry[25-lastwhite]; + } + for(first = 0; first < 25; first++) + if(newother[first] != 0) /*find other's first piece*/ + break; + q = newtry+25; + for(p = newtry+1; p < q;) /* blocked points are good */ + if(*p++ > 1) + sum++; + if(first > 5) { /* only stress removing pieces if */ + /* homeboard cannot be hit */ + q = newtry+31; + p=newtry+25; + for(n = 6; p < q; n--) + sum += *p++ * n; /*remove pieces, but just barely*/ + } + if(level != 'b'){ + r = newtry+25-first; /*singles past this point can't be hit*/ + for(p = newtry+7; p < r; ) + if(*p++ == 1) /*singles are bad after 1st 6 points if they can be hit*/ + sum--; + q = newtry+3; + for(p = newtry; p < q; ) /*bad to be on 1st three points*/ + sum -= *p++; + } + + for(n = 1; n <= 4; n++) + *prob += n*getprob(newtry,newother,6*n-5,6*n); + return(sum); +} + +int strategy(player,playee) +int *player,*playee; +{ + int k, n, nn, bestval, moveval, prob; + + n = 0; + if(imoves == 0) + return(NIL); + goodmoves[0] = NIL; + bestval = -32000; + for(k = 0; k < imoves; k++){ + if((moveval=eval(player,playee,k,&prob)) < bestval) + continue; + if(moveval > bestval){ + bestval = moveval; + n = 0; + } + if(n1){ + nn=n; + n=0; + prob=32000; + for(k = 0; k < nn; k++){ + if((moveval=probmoves[k]) > prob) + continue; + if(moveval>4)%n]); +} + +void prtmov(k) +int k; +{ + int n; + + if(k == NIL) + fprintf(stdout, "No move possible\n"); + else for(n = 0; n < 4; n++){ + if(moves[k].pos[n] == NIL) + break; + fprintf(stdout, " %d, %d",25-moves[k].pos[n],moves[k].mov[n]); + } + fprintf(stdout, "\n"); +} + +void update(player,playee,k) +int *player,*playee,k; +{ + int n,t; + + for(n = 0; n < 4; n++){ + if(moves[k].pos[n] == NIL) + break; + player[moves[k].pos[n]]--; + player[moves[k].pos[n]+moves[k].mov[n]]++; + t=25-moves[k].pos[n]-moves[k].mov[n]; + if(t>0 && playee[t]==1){ + playee[0]++; + playee[t]--; + } + } +} + +int nextmove(player,playee) +int *player,*playee; +{ + int k; + + imoves=0; + movegen(player,playee); + if(die1!=die2){ + k=die1; + die1=die2; + die2=k; + movegen(player,playee); + } + if(imoves==0){ + fprintf(stdout, "no move possible.\n"); + return(NIL); + } + k = strategy(player, playee); /*select kth possible move*/ + prtmov(k); + update(player,playee,k); + return(0); +} + +void pmoves() +{ + int i1, i2; + + fprintf(stdout, "Possible moves are:\n"); + for(i1 = 0; i1 < imoves; i1++){ + fprintf(stdout, "\n%d",i1); + for (i2 = 0; i2<4; i2++){ + if(moves[i1].pos[i2] == NIL) + break; + fprintf(stdout, "%d, %d",moves[i1].pos[i2],moves[i1].mov[i2]); + } + } + fprintf(stdout, "\n"); +} + +void roll(who) +{ + register int n; + char s[10]; + + if(who == BROWN && nobroll) { + fprintf(stdout, "Roll? "); + gets(s); + n = sscanf(s, "%d%d", &die1, &die2); + if(n != 2 || die1 < 1 || die1 > 6 || die2 < 1 || die2 > 6) + fprintf(stdout, "Illegal - I'll do it!\n"); + else + return; + } + die1 = ((rand()>>8) % 6) + 1; + die2 = ((rand()>>8) % 6) + 1; +} + +void instructions() +{ + register int fd, r; + char buf[BUFSIZ]; + + if((fd = open(RULES, 0)) < 0) { + fprintf(stderr, "back: cannot open %s\n", RULES); + return; + } + while((r = read(fd, buf, BUFSIZ)) > 0) + write(1, buf, r); +} + +void numline(upcol,downcol,start,fin) +int *upcol,*downcol,start,fin; +{ + int k, n; + + for(k = start; k <= fin; k++){ + if((n = upcol[k]) != 0 || (n = downcol[25-k]) != 0) + fprintf(stdout, "%4d", n); + else + fprintf(stdout, " "); + } +} + +void colorline(upcol,c1,downcol,c2,start,fin) +int *upcol,*downcol,start,fin; +char c1,c2; +{ + int k; + char c; + + for(k = start; k <= fin; k++){ + c = ' '; + if(upcol[k] != 0) + c = c1; + if(downcol[25-k] != 0) + c = c2; + fprintf(stdout, " %c",c); + } +} + +void prtbrd() +{ + int k; + static char undersc[]="______________________________________________________"; + + fprintf(stdout, "White's Home\n"); + for(k = 1; k <= 6; k++) + fprintf(stdout, "%4d",k); + fprintf(stdout, " "); + for(k = 7; k <= 12; k++) + fprintf(stdout, "%4d",k); + fprintf(stdout, "\n%s\n",undersc); + numline(brown, white, 1, 6); + fprintf(stdout, " "); + numline(brown, white, 7, 12); + putchar('\n'); + colorline(brown, 'B', white, 'W', 1, 6); + fprintf(stdout, " "); + colorline(brown, 'B', white, 'W', 7, 12); + putchar('\n'); + if(white[0] != 0) + fprintf(stdout, "%28dW\n",white[0]); + else + putchar('\n'); + if(brown[0] != 0) + fprintf(stdout, "%28dB\n", brown[0]); + else + putchar('\n'); + colorline(white, 'W', brown, 'B', 1, 6); + fprintf(stdout, " "); + colorline(white, 'W', brown, 'B', 7, 12); + fprintf(stdout, "\n"); + numline(white, brown, 1, 6); + fprintf(stdout, " "); + numline(white, brown, 7, 12); + fprintf(stdout, "\n%s\n",undersc); + for(k = 24; k >= 19; k--) + fprintf(stdout, "%4d",k); + fprintf(stdout, " "); + for(k = 18; k >= 13; k--) + fprintf(stdout, "%4d",k); + fprintf(stdout, "\nBrown's Home\n\n\n\n\n"); +} + +int main() +{ + int go[6], tvec[2]; int k, n, pid, ret, rpid, t; char s[100]; @@ -193,525 +725,3 @@ retry: } goto whitesmv; } - -play(player,playee,pos) -int *player,*playee,pos[]; -{ - int k, n, die, ipos; - - for(k=0; k < player[0]; k++){ /*blots on player[0] must be moved first*/ - if(pos[k] == NIL) - break; - if(pos[k] != 0){ - fprintf(stdout, "Stone on bar must be moved first.\n"); - return(NIL); - } - } - for(k = 0; (ipos=pos[k]) != NIL; k++){ - die = k?die2:die1; - n = 25-ipos-die; - if(player[ipos] == 0) - goto badmove; - if(n > 0 && playee[n] >= 2) - goto badmove; - if(n <= 0){ - if(piececount(player,0,18) != 0) - goto badmove; - if((ipos+die) != 25 && piececount(player,19,24-die)!=0) - goto badmove; - } - player[ipos]--; - player[ipos+die]++; - } - for(k = 0; pos[k] != NIL; k++){ - die = k?die2:die1; - n = 25-pos[k]-die; - if(n>0 && playee[n]==1){ - playee[n]=0; - playee[0]++; - } - } - return(0); - -badmove: - fprintf(stdout, "Move %d illegal.\n", ipos); - while(k--){ - die=k?die2:die1; - player[pos[k]]++; - player[pos[k]+die]--; - } - return(NIL); -} -nextmove(player,playee) -int *player,*playee; -{ - int k; - - imoves=0; - movegen(player,playee); - if(die1!=die2){ - k=die1; - die1=die2; - die2=k; - movegen(player,playee); - } - if(imoves==0){ - fprintf(stdout, "no move possible.\n"); - return(NIL); - } - k=strategy(player,playee); /*select kth possible move*/ - prtmov(k); - update(player,playee,k); - return(0); -} -prtmov(k) -int k; -{ - int n; - - if(k == NIL) - fprintf(stdout, "No move possible\n"); - else for(n = 0; n < 4; n++){ - if(moves[k].pos[n] == NIL) - break; - fprintf(stdout, " %d, %d",25-moves[k].pos[n],moves[k].mov[n]); - } - fprintf(stdout, "\n"); -} -update(player,playee,k) -int *player,*playee,k; -{ - int n,t; - - for(n = 0; n < 4; n++){ - if(moves[k].pos[n] == NIL) - break; - player[moves[k].pos[n]]--; - player[moves[k].pos[n]+moves[k].mov[n]]++; - t=25-moves[k].pos[n]-moves[k].mov[n]; - if(t>0 && playee[t]==1){ - playee[0]++; - playee[t]--; - } - } -} -piececount(player,startrow,endrow) -int *player,startrow,endrow; -{ - int sum; - - sum=0; - while(startrow <= endrow) - sum += player[startrow++]; - return(sum); -} -pmoves() -{ - int i1, i2; - - fprintf(stdout, "Possible moves are:\n"); - for(i1 = 0; i1 < imoves; i1++){ - fprintf(stdout, "\n%d",i1); - for (i2 = 0; i2<4; i2++){ - if(moves[i1].pos[i2] == NIL) - break; - fprintf(stdout, "%d, %d",moves[i1].pos[i2],moves[i1].mov[i2]); - } - } - fprintf(stdout, "\n"); -} - -roll(who) -{ - register n; - char s[10]; - - if(who == BROWN && nobroll) { - fprintf(stdout, "Roll? "); - gets(s); - n = sscanf(s, "%d%d", &die1, &die2); - if(n != 2 || die1 < 1 || die1 > 6 || die2 < 1 || die2 > 6) - fprintf(stdout, "Illegal - I'll do it!\n"); - else - return; - } - die1 = ((rand()>>8) % 6) + 1; - die2 = ((rand()>>8) % 6) + 1; -} - -movegen(mover,movee) -int *mover,*movee; -{ - int k; - - for(i = 0; i <= 24; i++){ - count = 0; - if(mover[i] == 0) - continue; - if((k=25-i-die1) > 0 && movee[k] >= 2) - if(mover[0] > 0) - break; - else - continue; - if(k <= 0){ - if(piececount(mover, 0, 18) != 0) - break; - if((i+die1) != 25 && piececount(mover,19,i-1) != 0) - break; - } - mover[i]--; - mover[i+die1]++; - count = 1; - for(j = 0; j <= 24; j++){ - if(mover[j]==0) - continue; - if((k=25-j-die2) > 0 && movee[k] >= 2) - if(mover[0] > 0) - break; - else - continue; - if(k <= 0){ - if(piececount(mover,0,18) != 0) - break; - if((j+die2) != 25 && piececount(mover,19,j-1) != 0) - break; - } - mover[j]--; - mover[j+die2]++; - count = 2; - if(die1 != die2){ - moverecord(mover); - if(mover[0] > 0) - break; - else - continue; - } - for(l = 0; l <= 24; l++){ - if(mover[l] == 0) - continue; - if((k=25-l-die1) > 0 && movee[k] >= 2) - if(mover[0] > 0) - break; - else - continue; - if(k <= 0){ - if(piececount(mover, 0, 18) != 0) - break; - if((l+die2) != 25 && piececount(mover,19,l-1) != 0) - break; - } - mover[l]--; - mover[l+die1]++; - count=3; - for(m=0;m<=24;m++){ - if(mover[m]==0) - continue; - if((k=25-m-die1) >= 0 && movee[k] >= 2) - if(mover[0] > 0) - break; - else - continue; - if(k <= 0){ - if(piececount(mover,0,18) != 0) - break; - if((m+die2) != 25 && piececount(mover,19,m-1) != 0) - break; - } - count=4; - moverecord(mover); - if(mover[0] > 0) - break; - } - if(count == 3) - moverecord(mover); - else{ - mover[l]++; - mover[l+die1]--; - } - if(mover[0] > 0) - break; - } - if(count == 2) - moverecord(mover); - else{ - mover[j]++; - mover[j+die1]--; - } - if(mover[0] > 0) - break; - } - if(count == 1) - moverecord(mover); - else{ - mover[i]++; - mover[i+die1]--; - } - if(mover[0] > 0) - break; - } -} -moverecord(mover) -int *mover; -{ - int t; - - if(imoves < MAXIMOVES) { - for(t = 0; t <= 3; t++) - moves[imoves].pos[t] = NIL; - switch(count) { - case 4: - moves[imoves].pos[3]=m; - moves[imoves].mov[3]=die1; - - case 3: - moves[imoves].pos[2]=l; - moves[imoves].mov[2]=die1; - - case 2: - moves[imoves].pos[1]=j; - moves[imoves].mov[1]=die2; - - case 1: - moves[imoves].pos[0]=i; - moves[imoves].mov[0]=die1; - imoves++; - } - } - switch(count) { - case 4: - break; - - case 3: - mover[l]++; - mover[l+die1]--; - break; - - case 2: - mover[j]++; - mover[j+die2]--; - break; - - case 1: - mover[i]++; - mover[i+die1]--; - } -} - -strategy(player,playee) -int *player,*playee; -{ - int k, n, nn, bestval, moveval, prob; - - n = 0; - if(imoves == 0) - return(NIL); - goodmoves[0] = NIL; - bestval = -32000; - for(k = 0; k < imoves; k++){ - if((moveval=eval(player,playee,k,&prob)) < bestval) - continue; - if(moveval > bestval){ - bestval = moveval; - n = 0; - } - if(n1){ - nn=n; - n=0; - prob=32000; - for(k = 0; k < nn; k++){ - if((moveval=probmoves[k]) > prob) - continue; - if(moveval>4)%n]); -} - -eval(player,playee,k,prob) -int *player,*playee,k,*prob; -{ - int newtry[31], newother[31], *r, *q, *p, n, sum, first; - int ii, lastwhite, lastbrown; - - *prob = sum = 0; - r = player+25; - p = newtry; - q = newother; - while(player6) { - for(sum = 1000; lastwhite > 6; lastwhite--) - sum = sum-lastwhite*newtry[25-lastwhite]; - } - for(first = 0; first < 25; first++) - if(newother[first] != 0) /*find other's first piece*/ - break; - q = newtry+25; - for(p = newtry+1; p < q;) /* blocked points are good */ - if(*p++ > 1) - sum++; - if(first > 5) { /* only stress removing pieces if */ - /* homeboard cannot be hit */ - q = newtry+31; - p=newtry+25; - for(n = 6; p < q; n--) - sum += *p++ * n; /*remove pieces, but just barely*/ - } - if(level != 'b'){ - r = newtry+25-first; /*singles past this point can't be hit*/ - for(p = newtry+7; p < r; ) - if(*p++ == 1) /*singles are bad after 1st 6 points if they can be hit*/ - sum--; - q = newtry+3; - for(p = newtry; p < q; ) /*bad to be on 1st three points*/ - sum -= *p++; - } - - for(n = 1; n <= 4; n++) - *prob += n*getprob(newtry,newother,6*n-5,6*n); - return(sum); -} -instructions() -{ - register fd, r; - char buf[BUFSIZ]; - - if((fd = open(RULES, 0)) < 0) { - fprintf(stderr, "back: cannot open %s\n", RULES); - return; - } - while(r = read(fd, buf, BUFSIZ)) - write(1, buf, r); -} - -getprob(player,playee,start,finish) -int *player,*playee,start,finish; -{ /*returns the probability (times 102) that any - pieces belonging to 'player' and lying between - his points 'start' and 'finish' will be hit - by a piece belonging to playee - */ - int k, n, sum; - - sum = 0; - for(; start <= finish; start++){ - if(player[start] == 1){ - for(k = 1; k <= 12; k++){ - if((n=25-start-k) < 0) - break; - if(playee[n] != 0) - sum += probability[k]; - } - } - } - return(sum); -} -prtbrd() -{ - int k; - static char undersc[]="______________________________________________________"; - - fprintf(stdout, "White's Home\n%s\r",undersc); - for(k = 1; k <= 6; k++) - fprintf(stdout, "%4d",k); - fprintf(stdout, " "); - for(k = 7; k <= 12; k++) - fprintf(stdout, "%4d",k); - putchar('\n'); - numline(brown, white, 1, 6); - fprintf(stdout, " "); - numline(brown, white, 7, 12); - putchar('\n'); - colorline(brown, 'B', white, 'W', 1, 6); - fprintf(stdout, " "); - colorline(brown, 'B', white, 'W', 7, 12); - putchar('\n'); - if(white[0] != 0) - fprintf(stdout, "%28dW\n",white[0]); - else - putchar('\n'); - if(brown[0] != 0) - fprintf(stdout, "%28dB\n", brown[0]); - else - putchar('\n'); - colorline(white, 'W', brown, 'B', 1, 6); - fprintf(stdout, " "); - colorline(white, 'W', brown, 'B', 7, 12); - fprintf(stdout, "\n%s\r",undersc); - numline(white, brown, 1, 6); - fprintf(stdout, " "); - numline(white, brown, 7, 12); - putchar('\n'); - for(k = 24; k >= 19; k--) - fprintf(stdout, "%4d",k); - fprintf(stdout, " "); - for(k = 18; k >= 13; k--) - fprintf(stdout, "%4d",k); - fprintf(stdout, "\nBrown's Home\n\n\n\n\n"); -} -numline(upcol,downcol,start,fin) -int *upcol,*downcol,start,fin; -{ - int k, n; - - for(k = start; k <= fin; k++){ - if((n = upcol[k]) != 0 || (n = downcol[25-k]) != 0) - fprintf(stdout, "%4d", n); - else - fprintf(stdout, " "); - } -} -colorline(upcol,c1,downcol,c2,start,fin) -int *upcol,*downcol,start,fin; -char c1,c2; -{ - int k; - char c; - - for(k = start; k <= fin; k++){ - c = ' '; - if(upcol[k] != 0) - c = c1; - if(downcol[25-k] != 0) - c = c2; - fprintf(stdout, " %c",c); - } -} diff --git a/src/games/cribbage/.gitignore b/src/games/cribbage/.gitignore new file mode 100644 index 0000000..4e4ed63 --- /dev/null +++ b/src/games/cribbage/.gitignore @@ -0,0 +1 @@ +cribbage diff --git a/src/games/cribbage/Makefile b/src/games/cribbage/Makefile index d0d3525..376a32e 100644 --- a/src/games/cribbage/Makefile +++ b/src/games/cribbage/Makefile @@ -7,45 +7,30 @@ # # make file for cribbage # -HDRS= cribbage.h deck.h cribcur.h -OBJS= extern.o crib.o support.o cards.o score.o io.o -CFILES= extern.c crib.c support.c cards.c score.c io.c -TOBJS= test.o cards.o score.o io.o extern.o -MAN= crib.0 -SEPFLAG= -i -CFLAGS= -O -DESTDIR= +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk +#CFLAGS = -O -Werror -DCROSS -all: cribbage ${MAN} +OBJS = extern.o crib.o support.o cards.o score.o io.o +TOBJS = test.o cards.o score.o io.o extern.o +MAN = crib.0 +LIBS = -lcurses -ltermcap -lc -cribbage: ${OBJS} - ${CC} ${SEPFLAG} ${CFLAGS} -o cribbage ${OBJS} -lcurses -ltermlib +all: cribbage ${MAN} -all: cribbage ${MAN} +cribbage: ${OBJS} + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf -crib.o io.o support.o: cribcur.h - -test: ${TOBJS} - ${CC} ${SEPFLAG} ${CFLAGS} -o test ${TOBJS} -lcurses -ltermlib - -crib.0: cribbage.n macro - nroff cribbage.n > crib.0 - -tags: ${HDRS} ${CFILES} - ctags -u $? - ed - tags < :ctfix - sort tags -o tags +${MAN}: cribbage.n macro + nroff cribbage.n > $@ clean: - rm -f ${OBJS} ? a.out core crib.0 cribbage errs + rm -f *.o core cribbage ${MAN} -crib.o: deck.h cribbage.h cribcur.h -support.o: deck.h cribbage.h cribcur.h -test.o: deck.h -cards.o: deck.h -score.o: deck.h -io.o: deck.h cribcur.h - -install: cribbage crib.0 - install -s cribbage $(DESTDIR)/usr/games - install -m 644 crib.0 $(DESTDIR)/usr/games/lib/crib.instr +install: + install cribbage $(DESTDIR)/games/ + install -m 644 crib.0 $(DESTDIR)/games/lib/crib.instr diff --git a/src/games/cribbage/cards.c b/src/games/cribbage/cards.c index e7805b3..a3e9a39 100644 --- a/src/games/cribbage/cards.c +++ b/src/games/cribbage/cards.c @@ -3,21 +3,14 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)cards.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - #include +#include #include "deck.h" - /* * initialize a deck of cards to contain one of each type */ - -makedeck( d ) - +void makedeck( d ) CARD d[]; { register int i, j, k; @@ -35,15 +28,11 @@ makedeck( d ) } } - - /* * given a deck of cards, shuffle it -- i.e. randomize it * see Knuth, vol. 2, page 125 */ - -shuffle( d ) - +void shuffle( d ) CARD d[]; { register int j, k; @@ -57,27 +46,19 @@ shuffle( d ) } } - - /* * return true if the two cards are equal... */ - -eq( a, b ) - +int eq( a, b ) CARD a, b; { return( ( a.rank == b.rank ) && ( a.suit == b.suit ) ); } - - /* * isone returns TRUE if a is in the set of cards b */ - -isone( a, b, n ) - +BOOLEAN isone( a, b, n ) CARD a, b[]; int n; { @@ -89,16 +70,12 @@ isone( a, b, n ) return( FALSE ); } - - /* * remove the card a from the deck d of n cards */ - -remove( a, d, n ) - - CARD a, d[]; - int n; +void cremove( a, d, n ) + CARD a, d[]; + int n; { register int i, j; @@ -109,15 +86,13 @@ remove( a, d, n ) if( j < n ) d[j].suit = d[j].rank = EMPTY; } - - /* * sorthand: * Sort a hand of n cards */ -sorthand(h, n) -register CARD h[]; -int n; +void sorthand(h, n) + register CARD h[]; + int n; { register CARD *cp, *endp; CARD c; @@ -131,4 +106,3 @@ int n; *cp = c; } } - diff --git a/src/games/cribbage/crib.c b/src/games/cribbage/crib.c index e853239..87ad237 100644 --- a/src/games/cribbage/crib.c +++ b/src/games/cribbage/crib.c @@ -3,120 +3,36 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1980 Regents of the University of California.\n\ - All rights reserved.\n"; -#endif not lint - -#ifndef lint -static char sccsid[] = "@(#)crib.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include +# include # include # include "deck.h" # include "cribbage.h" # include "cribcur.h" +# define LOGFILE "/games/lib/criblog" +# define INSTRCMD "more /games/lib/crib.instr" -# define LOGFILE "/usr/games/lib/criblog" -# define INSTRCMD "more /usr/games/lib/crib.instr" - - -main(argc, argv) -int argc; -char *argv[]; +/* + * gamescore: + * Print out the current game score + */ +void gamescore() { - register char *p; - BOOLEAN playing; - char *s; /* for reading arguments */ - char bust; /* flag for arg reader */ - FILE *f; - FILE *fopen(); - char *getline(); - int bye(); + extern int Lastscore[]; - while (--argc > 0) { - if ((*++argv)[0] != '-') { - fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); - exit(1); - } - bust = FALSE; - for (s = argv[0] + 1; *s != NULL; s++) { - switch (*s) { - case 'e': - explain = TRUE; - break; - case 'q': - quiet = TRUE; - break; - case 'r': - rflag = TRUE; - break; - default: - fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); - exit(2); - break; - } - if (bust) - break; - } - } - - initscr(); - signal(SIGINT, bye); - crmode(); - noecho(); - Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); - Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); - Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); - Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1); - leaveok(Playwin, TRUE); - leaveok(Tablewin, TRUE); - leaveok(Compwin, TRUE); - clearok(stdscr, FALSE); - - if (!quiet) { - msg("Do you need instructions for cribbage? "); - if (getuchar() == 'Y') { - endwin(); - fflush(stdout); - system(INSTRCMD); - crmode(); - noecho(); - clear(); - refresh(); - msg("For the rules of this program, do \"man cribbage\""); - } - } - playing = TRUE; - do { - wclrtobot(Msgwin); - msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); - if (glimit == SGAME) - glimit = (getuchar() == 'L' ? LGAME : SGAME); - else - glimit = (getuchar() == 'S' ? SGAME : LGAME); - game(); - msg("Another game? "); - playing = (getuchar() == 'Y'); - } while (playing); - - if ((f = fopen(LOGFILE, "a")) != NULL) { - fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames); - fclose(f); - } - - bye(); + if (pgames || cgames) { + mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames); + mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames); + } + Lastscore[0] = -1; + Lastscore[1] = -1; } /* * makeboard: * Print out the initial board on the screen */ -makeboard() +void makeboard() { mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+"); mvaddstr(SCORE_Y + 1, SCORE_X, "| Score: 0 YOU |"); @@ -131,19 +47,345 @@ makeboard() } /* - * gamescore: - * Print out the current game score + * deal cards to both players from deck */ -gamescore() +int deal( mycrib ) { - extern int Lastscore[]; + register int i, j; - if (pgames || cgames) { - mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames); - mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames); - } - Lastscore[0] = -1; - Lastscore[1] = -1; + j = 0; + for( i = 0; i < FULLHAND; i++ ) { + if( mycrib ) { + phand[i] = deck[j++]; + chand[i] = deck[j++]; + } + else { + chand[i] = deck[j++]; + phand[i] = deck[j++]; + } + } + return( j ); +} + +/* + * prcrib: + * Print out the turnover card with crib indicator + */ +void prcrib(mycrib, blank) +BOOLEAN mycrib, blank; +{ + register int y, cardx; + + if (mycrib) + cardx = CRIB_X; + else + cardx = 0; + + mvaddstr(CRIB_Y, cardx + 1, "CRIB"); + prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank); + + if (mycrib) + cardx = 0; + else + cardx = CRIB_X; + + for (y = CRIB_Y; y <= CRIB_Y + 5; y++) + mvaddstr(y, cardx, " "); +} + +/* + * discard: + * Handle players discarding into the crib... + * Note: we call cdiscard() after prining first message so player doesn't wait + */ +void discard(mycrib) +BOOLEAN mycrib; +{ + register char *prompt; + CARD crd; + + prcrib(mycrib, TRUE); + prompt = (quiet ? "Discard --> " : "Discard a card --> "); + cdiscard(mycrib); /* puts best discard at end */ + crd = phand[infrom(phand, FULLHAND, prompt)]; + cremove(crd, phand, FULLHAND); + prhand(phand, FULLHAND, Playwin, FALSE); + crib[0] = crd; +/* next four lines same as last four except for cdiscard() */ + crd = phand[infrom(phand, FULLHAND - 1, prompt)]; + cremove(crd, phand, FULLHAND - 1); + prhand(phand, FULLHAND, Playwin, FALSE); + crib[1] = crd; + crib[2] = chand[4]; + crib[3] = chand[5]; + chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; +} + +/* + * cut: + * Cut the deck and set turnover. Actually, we only ASK the + * player what card to turn. We do a random one, anyway. + */ +BOOLEAN cut(mycrib, pos) +BOOLEAN mycrib; +int pos; +{ + register int i, cardx; + BOOLEAN win = FALSE; + + if (mycrib) { + if (!rflag) { /* random cut */ + msg(quiet ? "Cut the deck? " : + "How many cards down do you wish to cut the deck? "); + getlin(); + } + i = (rand() >> 4) % (CARDS - pos); + turnover = deck[i + pos]; + addmsg(quiet ? "You cut " : "You cut the "); + msgcard(turnover, FALSE); + endmsg(); + if (turnover.rank == JACK) { + msg("I get two for his heels"); + win = chkscr(&cscore,2 ); + } + } + else { + i = (rand() >> 4) % (CARDS - pos) + pos; + turnover = deck[i]; + addmsg(quiet ? "I cut " : "I cut the "); + msgcard(turnover, FALSE); + endmsg(); + if (turnover.rank == JACK) { + msg("You get two for his heels"); + win = chkscr(&pscore, 2); + } + } + makeknown(&turnover, 1); + prcrib(mycrib, FALSE); + return win; +} + +static CARD Table[14]; + +static int Tcnt; + +/* + * prtable: + * Print out the table with the current score + */ +void prtable(score) +int score; +{ + prhand(Table, Tcnt, Tablewin, FALSE); + mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); + wrefresh(Tablewin); +} + +/* + * peg: + * Handle all the pegging... + */ +BOOLEAN peg(mycrib) +BOOLEAN mycrib; +{ + static CARD ch[CINHAND], ph[CINHAND]; + CARD crd; + register int i, j, k; + register int l; + register int cnum, pnum, sum; + register BOOLEAN myturn, mego, ugo, last, played; + + cnum = pnum = CINHAND; + for (i = 0; i < CINHAND; i++) { /* make copies of hands */ + ch[i] = chand[i]; + ph[i] = phand[i]; + } + Tcnt = 0; /* index to table of cards played */ + sum = 0; /* sum of cards played */ + mego = ugo = FALSE; + myturn = !mycrib; + for (;;) { + last = TRUE; /* enable last flag */ + prhand(ph, pnum, Playwin, FALSE); + prhand(ch, cnum, Compwin, TRUE); + prtable(sum); + if (myturn) { /* my tyrn to play */ + if (!anymove(ch, cnum, sum)) { /* if no card to play */ + if (!mego && cnum) { /* go for comp? */ + msg("GO"); + mego = TRUE; + } + if (anymove(ph, pnum, sum)) /* can player move? */ + myturn = !myturn; + else { /* give him his point */ + msg(quiet ? "You get one" : "You get one point"); + if (chkscr(&pscore, 1)) + return TRUE; + sum = 0; + mego = ugo = FALSE; + Tcnt = 0; + } + } + else { + played = TRUE; + j = -1; + k = 0; + for (i = 0; i < cnum; i++) { /* maximize score */ + l = pegscore(ch[i], Table, Tcnt, sum); + if (l > k) { + k = l; + j = i; + } + } + if (j < 0) /* if nothing scores */ + j = cchose(ch, cnum, sum); + crd = ch[j]; + cremove(crd, ch, cnum--); + sum += VAL(crd.rank); + Table[Tcnt++] = crd; + if (k > 0) { + addmsg(quiet ? "I get %d playing " : + "I get %d points playing ", k); + msgcard(crd, FALSE); + endmsg(); + if (chkscr(&cscore, k)) + return TRUE; + } + myturn = !myturn; + } + } + else { + if (!anymove(ph, pnum, sum)) { /* can player move? */ + if (!ugo && pnum) { /* go for player */ + msg("You have a GO"); + ugo = TRUE; + } + if (anymove(ch, cnum, sum)) /* can computer play? */ + myturn = !myturn; + else { + msg(quiet ? "I get one" : "I get one point"); + do_wait(); + if (chkscr(&cscore, 1)) + return TRUE; + sum = 0; + mego = ugo = FALSE; + Tcnt = 0; + } + } + else { /* player plays */ + played = FALSE; + if (pnum == 1) { + crd = ph[0]; + msg("You play your last card"); + } + else + for (;;) { + prhand(ph, pnum, Playwin, FALSE); + crd = ph[infrom(ph, pnum, "Your play: ")]; + if (sum + VAL(crd.rank) <= 31) + break; + else + msg("Total > 31 -- try again"); + } + makeknown(&crd, 1); + cremove(crd, ph, pnum--); + i = pegscore(crd, Table, Tcnt, sum); + sum += VAL(crd.rank); + Table[Tcnt++] = crd; + if (i > 0) { + msg(quiet ? "You got %d" : "You got %d points", i); + if (chkscr(&pscore, i)) + return TRUE; + } + myturn = !myturn; + } + } + if (sum >= 31) { + if (!myturn) + do_wait(); + sum = 0; + mego = ugo = FALSE; + Tcnt = 0; + last = FALSE; /* disable last flag */ + } + if (!pnum && !cnum) + break; /* both done */ + } + prhand(ph, pnum, Playwin, FALSE); + prhand(ch, cnum, Compwin, TRUE); + prtable(sum); + if (last) { + if (played) { + msg(quiet ? "I get one for last" : "I get one point for last"); + do_wait(); + if (chkscr(&cscore, 1)) + return TRUE; + } else { + msg(quiet ? "You get one for last" : + "You get one point for last"); + if (chkscr(&pscore, 1)) + return TRUE; + } + } + return FALSE; +} + +/* + * score: + * Handle the scoring of the hands + */ +BOOLEAN score(mycrib) +BOOLEAN mycrib; +{ + sorthand(crib, CINHAND); + if (mycrib) { + if (plyrhand(phand, "hand")) + return TRUE; + if (comphand(chand, "hand")) + return TRUE; + do_wait(); + if (comphand(crib, "crib")) + return TRUE; + } + else { + if (comphand(chand, "hand")) + return TRUE; + if (plyrhand(phand, "hand")) + return TRUE; + if (plyrhand(crib, "crib")) + return TRUE; + } + return FALSE; +} + +/* + * playhand: + * Do up one hand of the game + */ +BOOLEAN playhand(mycrib) +BOOLEAN mycrib; +{ + register int deckpos; + extern char Msgbuf[]; + + werase(Compwin); + + knownum = 0; + deckpos = deal(mycrib); + sorthand(chand, FULLHAND); + sorthand(phand, FULLHAND); + makeknown(chand, FULLHAND); + prhand(phand, FULLHAND, Playwin, FALSE); + discard(mycrib); + if (cut(mycrib, deckpos)) + return TRUE; + if (peg(mycrib)) + return TRUE; + werase(Tablewin); + wrefresh(Tablewin); + if (score(mycrib)) + return TRUE; + return FALSE; } /* @@ -151,7 +393,7 @@ gamescore() * Play one game up to glimit points. Actually, we only ASK the * player what card to turn. We do a random one, anyway. */ -game() +void game() { register int i, j; BOOLEAN flag; @@ -167,7 +409,7 @@ game() if (!rflag) { /* player cuts deck */ msg(quiet ? "Cut for crib? " : "Cut to see whose crib it is -- low card wins? "); - getline(); + getlin(); } i = (rand() >> 4) % CARDS; /* random cut */ do { /* comp cuts deck */ @@ -240,348 +482,86 @@ game() gamescore(); } -/* - * playhand: - * Do up one hand of the game - */ -playhand(mycrib) -BOOLEAN mycrib; +int main(argc, argv) +int argc; +char *argv[]; { - register int deckpos; - extern char Msgbuf[]; + register char *p; + BOOLEAN playing; + char *s; /* for reading arguments */ + char bust; /* flag for arg reader */ + FILE *f; - werase(Compwin); - - knownum = 0; - deckpos = deal(mycrib); - sorthand(chand, FULLHAND); - sorthand(phand, FULLHAND); - makeknown(chand, FULLHAND); - prhand(phand, FULLHAND, Playwin, FALSE); - discard(mycrib); - if (cut(mycrib, deckpos)) - return TRUE; - if (peg(mycrib)) - return TRUE; - werase(Tablewin); - wrefresh(Tablewin); - if (score(mycrib)) - return TRUE; - return FALSE; -} - - - -/* - * deal cards to both players from deck - */ - -deal( mycrib ) -{ - register int i, j; - - j = 0; - for( i = 0; i < FULLHAND; i++ ) { - if( mycrib ) { - phand[i] = deck[j++]; - chand[i] = deck[j++]; + while (--argc > 0) { + if ((*++argv)[0] != '-') { + fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); + exit(1); } - else { - chand[i] = deck[j++]; - phand[i] = deck[j++]; - } - } - return( j ); -} - -/* - * discard: - * Handle players discarding into the crib... - * Note: we call cdiscard() after prining first message so player doesn't wait - */ -discard(mycrib) -BOOLEAN mycrib; -{ - register char *prompt; - CARD crd; - - prcrib(mycrib, TRUE); - prompt = (quiet ? "Discard --> " : "Discard a card --> "); - cdiscard(mycrib); /* puts best discard at end */ - crd = phand[infrom(phand, FULLHAND, prompt)]; - remove(crd, phand, FULLHAND); - prhand(phand, FULLHAND, Playwin, FALSE); - crib[0] = crd; -/* next four lines same as last four except for cdiscard() */ - crd = phand[infrom(phand, FULLHAND - 1, prompt)]; - remove(crd, phand, FULLHAND - 1); - prhand(phand, FULLHAND, Playwin, FALSE); - crib[1] = crd; - crib[2] = chand[4]; - crib[3] = chand[5]; - chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; -} - -/* - * cut: - * Cut the deck and set turnover. Actually, we only ASK the - * player what card to turn. We do a random one, anyway. - */ -cut(mycrib, pos) -BOOLEAN mycrib; -int pos; -{ - register int i, cardx; - BOOLEAN win = FALSE; - - if (mycrib) { - if (!rflag) { /* random cut */ - msg(quiet ? "Cut the deck? " : - "How many cards down do you wish to cut the deck? "); - getline(); - } - i = (rand() >> 4) % (CARDS - pos); - turnover = deck[i + pos]; - addmsg(quiet ? "You cut " : "You cut the "); - msgcard(turnover, FALSE); - endmsg(); - if (turnover.rank == JACK) { - msg("I get two for his heels"); - win = chkscr(&cscore,2 ); - } - } - else { - i = (rand() >> 4) % (CARDS - pos) + pos; - turnover = deck[i]; - addmsg(quiet ? "I cut " : "I cut the "); - msgcard(turnover, FALSE); - endmsg(); - if (turnover.rank == JACK) { - msg("You get two for his heels"); - win = chkscr(&pscore, 2); - } - } - makeknown(&turnover, 1); - prcrib(mycrib, FALSE); - return win; -} - -/* - * prcrib: - * Print out the turnover card with crib indicator - */ -prcrib(mycrib, blank) -BOOLEAN mycrib, blank; -{ - register int y, cardx; - - if (mycrib) - cardx = CRIB_X; - else - cardx = 0; - - mvaddstr(CRIB_Y, cardx + 1, "CRIB"); - prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank); - - if (mycrib) - cardx = 0; - else - cardx = CRIB_X; - - for (y = CRIB_Y; y <= CRIB_Y + 5; y++) - mvaddstr(y, cardx, " "); -} - -/* - * peg: - * Handle all the pegging... - */ - -static CARD Table[14]; - -static int Tcnt; - -peg(mycrib) -BOOLEAN mycrib; -{ - static CARD ch[CINHAND], ph[CINHAND]; - CARD crd; - register int i, j, k; - register int l; - register int cnum, pnum, sum; - register BOOLEAN myturn, mego, ugo, last, played; - - cnum = pnum = CINHAND; - for (i = 0; i < CINHAND; i++) { /* make copies of hands */ - ch[i] = chand[i]; - ph[i] = phand[i]; - } - Tcnt = 0; /* index to table of cards played */ - sum = 0; /* sum of cards played */ - mego = ugo = FALSE; - myturn = !mycrib; - for (;;) { - last = TRUE; /* enable last flag */ - prhand(ph, pnum, Playwin, FALSE); - prhand(ch, cnum, Compwin, TRUE); - prtable(sum); - if (myturn) { /* my tyrn to play */ - if (!anymove(ch, cnum, sum)) { /* if no card to play */ - if (!mego && cnum) { /* go for comp? */ - msg("GO"); - mego = TRUE; - } - if (anymove(ph, pnum, sum)) /* can player move? */ - myturn = !myturn; - else { /* give him his point */ - msg(quiet ? "You get one" : "You get one point"); - if (chkscr(&pscore, 1)) - return TRUE; - sum = 0; - mego = ugo = FALSE; - Tcnt = 0; - } - } - else { - played = TRUE; - j = -1; - k = 0; - for (i = 0; i < cnum; i++) { /* maximize score */ - l = pegscore(ch[i], Table, Tcnt, sum); - if (l > k) { - k = l; - j = i; - } - } - if (j < 0) /* if nothing scores */ - j = cchose(ch, cnum, sum); - crd = ch[j]; - remove(crd, ch, cnum--); - sum += VAL(crd.rank); - Table[Tcnt++] = crd; - if (k > 0) { - addmsg(quiet ? "I get %d playing " : - "I get %d points playing ", k); - msgcard(crd, FALSE); - endmsg(); - if (chkscr(&cscore, k)) - return TRUE; - } - myturn = !myturn; + bust = FALSE; + for (s = argv[0] + 1; *s != 0; s++) { + switch (*s) { + case 'e': + explain = TRUE; + break; + case 'q': + quiet = TRUE; + break; + case 'r': + rflag = TRUE; + break; + default: + fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); + exit(2); + break; } + if (bust) + break; } - else { - if (!anymove(ph, pnum, sum)) { /* can player move? */ - if (!ugo && pnum) { /* go for player */ - msg("You have a GO"); - ugo = TRUE; - } - if (anymove(ch, cnum, sum)) /* can computer play? */ - myturn = !myturn; - else { - msg(quiet ? "I get one" : "I get one point"); - do_wait(); - if (chkscr(&cscore, 1)) - return TRUE; - sum = 0; - mego = ugo = FALSE; - Tcnt = 0; - } - } - else { /* player plays */ - played = FALSE; - if (pnum == 1) { - crd = ph[0]; - msg("You play your last card"); - } - else - for (;;) { - prhand(ph, pnum, Playwin, FALSE); - crd = ph[infrom(ph, pnum, "Your play: ")]; - if (sum + VAL(crd.rank) <= 31) - break; - else - msg("Total > 31 -- try again"); - } - makeknown(&crd, 1); - remove(crd, ph, pnum--); - i = pegscore(crd, Table, Tcnt, sum); - sum += VAL(crd.rank); - Table[Tcnt++] = crd; - if (i > 0) { - msg(quiet ? "You got %d" : "You got %d points", i); - if (chkscr(&pscore, i)) - return TRUE; - } - myturn = !myturn; - } - } - if (sum >= 31) { - if (!myturn) - do_wait(); - sum = 0; - mego = ugo = FALSE; - Tcnt = 0; - last = FALSE; /* disable last flag */ - } - if (!pnum && !cnum) - break; /* both done */ } - prhand(ph, pnum, Playwin, FALSE); - prhand(ch, cnum, Compwin, TRUE); - prtable(sum); - if (last) - if (played) { - msg(quiet ? "I get one for last" : "I get one point for last"); - do_wait(); - if (chkscr(&cscore, 1)) - return TRUE; - } - else { - msg(quiet ? "You get one for last" : - "You get one point for last"); - if (chkscr(&pscore, 1)) - return TRUE; - } - return FALSE; -} -/* - * prtable: - * Print out the table with the current score - */ -prtable(score) -int score; -{ - prhand(Table, Tcnt, Tablewin, FALSE); - mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); - wrefresh(Tablewin); -} + initscr(); + signal(SIGINT, bye); + crmode(); + noecho(); + Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); + Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); + Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); + Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1); + leaveok(Playwin, TRUE); + leaveok(Tablewin, TRUE); + leaveok(Compwin, TRUE); + clearok(stdscr, FALSE); -/* - * score: - * Handle the scoring of the hands - */ -score(mycrib) -BOOLEAN mycrib; -{ - sorthand(crib, CINHAND); - if (mycrib) { - if (plyrhand(phand, "hand")) - return TRUE; - if (comphand(chand, "hand")) - return TRUE; - do_wait(); - if (comphand(crib, "crib")) - return TRUE; + if (!quiet) { + msg("Do you need instructions for cribbage? "); + if (getuchar() == 'Y') { + endwin(); + fflush(stdout); + system(INSTRCMD); + crmode(); + noecho(); + clear(); + refresh(); + msg("For the rules of this program, do \"man cribbage\""); + } } - else { - if (comphand(chand, "hand")) - return TRUE; - if (plyrhand(phand, "hand")) - return TRUE; - if (plyrhand(crib, "crib")) - return TRUE; + playing = TRUE; + do { + wclrtobot(Msgwin); + msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); + if (glimit == SGAME) + glimit = (getuchar() == 'L' ? LGAME : SGAME); + else + glimit = (getuchar() == 'S' ? SGAME : LGAME); + game(); + msg("Another game? "); + playing = (getuchar() == 'Y'); + } while (playing); + + if ((f = fopen(LOGFILE, "a")) != NULL) { + fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames); + fclose(f); } - return FALSE; + + bye(0); } diff --git a/src/games/cribbage/cribbage.h b/src/games/cribbage/cribbage.h index 9c0d793..4744abd 100644 --- a/src/games/cribbage/cribbage.h +++ b/src/games/cribbage/cribbage.h @@ -5,6 +5,7 @@ * * @(#)cribbage.h 5.1 (Berkeley) 5/30/85 */ +# include extern CARD deck[ CARDS ]; /* a deck */ extern CARD phand[ FULLHAND ]; /* player's hand */ @@ -30,5 +31,32 @@ extern BOOLEAN rflag; /* if all cuts random */ extern BOOLEAN quiet; /* if suppress random mess */ extern BOOLEAN playing; /* currently playing game */ -extern char expl[]; /* string for explanation */ +extern char explstr[]; /* string for explanation */ +char *getlin(void); +void bye(int sig); +void msg(char *fmt, ...); +void addmsg(char *fmt, ...); +BOOLEAN msgcard(CARD c, BOOLEAN brief); +void endmsg(void); +int getuchar(void); +void makedeck(CARD d[]); +void shuffle(CARD d[]); +void sorthand(CARD h[], int n); +void makeknown(CARD h[], int n); +void prhand(CARD h[], int n, WINDOW *win, BOOLEAN blank); +void prcard(WINDOW *win, int y, int x, CARD c, BOOLEAN blank); +void cdiscard(BOOLEAN mycrib); +int infrom(CARD hand[], int n, char *prompt); +void cremove(CARD a, CARD d[], int n); +BOOLEAN chkscr(int *scr, int inc); +BOOLEAN anymove(CARD hand[], int n, int sum); +int scorehand(CARD hand[], CARD starter, int n, BOOLEAN crb, BOOLEAN do_explain); +int number(int lo, int hi, char *prompt); +void do_wait(void); +int adjust(CARD cb[], CARD tnv); +int pegscore(CARD crd, CARD tbl[], int n, int sum); +int cchose(CARD h[], int n, int s); +BOOLEAN plyrhand(CARD hand[], char *s); +BOOLEAN comphand(CARD h[], char *s); +BOOLEAN isone(CARD a, CARD b[], int n); diff --git a/src/games/cribbage/deck.h b/src/games/cribbage/deck.h index c600be2..f820dc7 100644 --- a/src/games/cribbage/deck.h +++ b/src/games/cribbage/deck.h @@ -10,7 +10,6 @@ * define structure of a deck of cards and other related things */ - #define CARDS 52 /* number cards in deck */ #define RANKS 13 /* number ranks in deck */ #define SUITS 4 /* number suits in deck */ @@ -43,16 +42,14 @@ #define VAL(c) ( (c) < 9 ? (c)+1 : 10 ) /* val of rank */ - #ifndef TRUE -# define TRUE 1 -# define FALSE 0 +# define TRUE (1) +# define FALSE (0) #endif -typedef struct { - int rank; - int suit; - } CARD; - -typedef char BOOLEAN; +typedef struct { + int rank; + int suit; +} CARD; +typedef int BOOLEAN; diff --git a/src/games/cribbage/extern.c b/src/games/cribbage/extern.c index 4914957..d3511a8 100644 --- a/src/games/cribbage/extern.c +++ b/src/games/cribbage/extern.c @@ -3,21 +3,15 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)extern.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include # include "deck.h" # include "cribbage.h" -bool explain = FALSE; /* player mistakes explained */ -bool iwon = FALSE; /* if comp won last game */ -bool quiet = FALSE; /* if suppress random mess */ -bool rflag = FALSE; /* if all cuts random */ +BOOLEAN explain = FALSE; /* player mistakes explained */ +BOOLEAN iwon = FALSE; /* if comp won last game */ +BOOLEAN quiet = FALSE; /* if suppress random mess */ +BOOLEAN rflag = FALSE; /* if all cuts random */ -char expl[128]; /* explanation */ +char explstr[128]; /* explanation */ int cgames = 0; /* number games comp won */ int cscore = 0; /* comp score in this game */ diff --git a/src/games/cribbage/io.c b/src/games/cribbage/io.c index 4808d95..68f4651 100644 --- a/src/games/cribbage/io.c +++ b/src/games/cribbage/io.c @@ -3,32 +3,38 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)io.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include # include # include +# include +# include +# include +# include # include "deck.h" # include "cribbage.h" # include "cribcur.h" -# define LINESIZE 128 +# define LINESIZE 128 # ifdef CTRL # undef CTRL # endif -# define CTRL(X) ('X' - 'A' + 1) +# define CTRL(X) ('X' - 'A' + 1) -# ifndef erasechar() -# define erasechar() _tty.sg_erase -# endif erasechar() +# ifdef CROSS +# define erasechar() ('H' & 31) +# endif -# ifndef killchar() -# define killchar() _tty.sg_kill -# endif killchar() +# ifndef killchar +# define killchar() ('U' & 31) +# endif + +# ifndef erasechar +# define erasechar() _tty.sg_erase +# endif + +# ifndef killchar +# define killchar() _tty.sg_kill +# endif char linebuf[ LINESIZE ]; @@ -45,32 +51,14 @@ char *suitname[ SUITS ] = { "SPADES", "HEARTS", "DIAMONDS", char *suitchar[ SUITS ] = { "S", "H", "D", "C" }; - - -/* - * msgcard: - * Call msgcrd in one of two forms - */ -msgcard(c, brief) -CARD c; -BOOLEAN brief; -{ - if (brief) - return msgcrd(c, TRUE, (char *) NULL, TRUE); - else - return msgcrd(c, FALSE, " of ", FALSE); -} - - - /* * msgcrd: * Print the value of a card in ascii */ -msgcrd(c, brfrank, mid, brfsuit) -CARD c; -char *mid; -BOOLEAN brfrank, brfsuit; +BOOLEAN msgcrd(c, brfrank, mid, brfsuit) + CARD c; + char *mid; + BOOLEAN brfrank, brfsuit; { if (c.rank == EMPTY || c.suit == EMPTY) return FALSE; @@ -87,15 +75,29 @@ BOOLEAN brfrank, brfsuit; return TRUE; } +/* + * msgcard: + * Call msgcrd in one of two forms + */ +BOOLEAN msgcard(c, brief) + CARD c; + BOOLEAN brief; +{ + if (brief) + return msgcrd(c, TRUE, (char *) NULL, TRUE); + else + return msgcrd(c, FALSE, " of ", FALSE); +} + /* * printcard: * Print out a card. */ -printcard(win, cardno, c, blank) -WINDOW *win; -int cardno; -CARD c; -BOOLEAN blank; +void printcard(win, cardno, c, blank) + WINDOW *win; + int cardno; + CARD c; + BOOLEAN blank; { prcard(win, cardno * 2, cardno, c, blank); } @@ -104,11 +106,11 @@ BOOLEAN blank; * prcard: * Print out a card on the window at the specified location */ -prcard(win, y, x, c, blank) -WINDOW *win; -int y, x; -CARD c; -BOOLEAN blank; +void prcard(win, y, x, c, blank) + WINDOW *win; + int y, x; + CARD c; + BOOLEAN blank; { if (c.rank == EMPTY) return; @@ -129,11 +131,11 @@ BOOLEAN blank; * prhand: * Print a hand of n cards */ -prhand(h, n, win, blank) -CARD h[]; -int n; -WINDOW *win; -BOOLEAN blank; +void prhand(h, n, win, blank) + CARD h[]; + int n; + WINDOW *win; + BOOLEAN blank; { register int i; @@ -143,17 +145,96 @@ BOOLEAN blank; wrefresh(win); } +/* + * incard: + * Inputs a card in any format. It reads a line ending with a CR + * and then parses it. + */ +BOOLEAN incard(crd) + CARD *crd; +{ + register int i; + int rnk, sut; + char *line, *p, *p1; + BOOLEAN retval; + retval = FALSE; + rnk = sut = EMPTY; + if (!(line = getlin())) + goto gotit; + p = p1 = line; + while(*p1 != ' ' && *p1 != 0) + ++p1; + *p1++ = 0; + if(*p == 0) + goto gotit; + /* IMPORTANT: no real card has 2 char first name */ + if( strlen(p) == 2 ) { /* check for short form */ + rnk = EMPTY; + for( i = 0; i < RANKS; i++ ) { + if( *p == *rankchar[i] ) { + rnk = i; + break; + } + } + if( rnk == EMPTY ) goto gotit; /* it's nothing... */ + ++p; /* advance to next char */ + sut = EMPTY; + for( i = 0; i < SUITS; i++ ) { + if( *p == *suitchar[i] ) { + sut = i; + break; + } + } + if( sut != EMPTY ) retval = TRUE; + goto gotit; + } + rnk = EMPTY; + for( i = 0; i < RANKS; i++ ) { + if( !strcmp( p, rankname[i] ) || !strcmp( p, rankchar[i] ) ) { + rnk = i; + break; + } + } + if( rnk == EMPTY ) goto gotit; + p = p1; + while(*p1 != ' ' && *p1 != 0) + ++p1; + *p1++ = 0; + if(*p == 0) + goto gotit; + if(! strcmp("OF", p)) { + p = p1; + while(*p1 != ' ' && *p1 != 0) + ++p1; + *p1++ = 0; + if(*p == 0) + goto gotit; + } + sut = EMPTY; + for( i = 0; i < SUITS; i++ ) { + if( !strcmp( p, suitname[i] ) || !strcmp( p, suitchar[i] ) ) { + sut = i; + break; + } + } + if( sut != EMPTY ) + retval = TRUE; +gotit: + (*crd).rank = rnk; + (*crd).suit = sut; + return( retval ); +} /* * infrom: * reads a card, supposedly in hand, accepting unambigous brief * input, returns the index of the card found... */ -infrom(hand, n, prompt) -CARD hand[]; -int n; -char *prompt; +int infrom(hand, n, prompt) + CARD hand[]; + int n; + char *prompt; { register int i, j; CARD crd; @@ -202,90 +283,35 @@ char *prompt; /* NOTREACHED */ } - - /* - * incard: - * Inputs a card in any format. It reads a line ending with a CR - * and then parses it. + * readchar: + * Reads and returns a character, checking for gross input errors */ -incard(crd) -CARD *crd; +int readchar() { - char *getline(); - register int i; - int rnk, sut; - char *line, *p, *p1; - BOOLEAN retval; + register int cnt, y, x; + auto char c; - retval = FALSE; - rnk = sut = EMPTY; - if (!(line = getline())) - goto gotit; - p = p1 = line; - while( *p1 != ' ' && *p1 != NULL ) ++p1; - *p1++ = NULL; - if( *p == NULL ) goto gotit; - /* IMPORTANT: no real card has 2 char first name */ - if( strlen(p) == 2 ) { /* check for short form */ - rnk = EMPTY; - for( i = 0; i < RANKS; i++ ) { - if( *p == *rankchar[i] ) { - rnk = i; - break; - } - } - if( rnk == EMPTY ) goto gotit; /* it's nothing... */ - ++p; /* advance to next char */ - sut = EMPTY; - for( i = 0; i < SUITS; i++ ) { - if( *p == *suitchar[i] ) { - sut = i; - break; - } - } - if( sut != EMPTY ) retval = TRUE; - goto gotit; - } - rnk = EMPTY; - for( i = 0; i < RANKS; i++ ) { - if( !strcmp( p, rankname[i] ) || !strcmp( p, rankchar[i] ) ) { - rnk = i; - break; - } - } - if( rnk == EMPTY ) goto gotit; - p = p1; - while( *p1 != ' ' && *p1 != NULL ) ++p1; - *p1++ = NULL; - if( *p == NULL ) goto gotit; - if( !strcmp( "OF", p ) ) { - p = p1; - while( *p1 != ' ' && *p1 != NULL ) ++p1; - *p1++ = NULL; - if( *p == NULL ) goto gotit; - } - sut = EMPTY; - for( i = 0; i < SUITS; i++ ) { - if( !strcmp( p, suitname[i] ) || !strcmp( p, suitchar[i] ) ) { - sut = i; - break; - } - } - if( sut != EMPTY ) retval = TRUE; -gotit: - (*crd).rank = rnk; - (*crd).suit = sut; - return( retval ); +over: + cnt = 0; + while (read(0, &c, 1) <= 0) + if (cnt++ > 100) /* if we are getting infinite EOFs */ + bye(0); /* quit the game */ + if (c == CTRL(L)) { + wrefresh(curscr); + goto over; + } + if (c == '\r') + return '\n'; + else + return c; } - - /* * getuchar: * Reads and converts to upper case */ -getuchar() +int getuchar() { register int c; @@ -301,18 +327,17 @@ getuchar() * Reads in a decimal number and makes sure it is between "lo" and * "hi" inclusive. */ -number(lo, hi, prompt) -int lo, hi; -char *prompt; +int number(lo, hi, prompt) + int lo, hi; + char *prompt; { - char *getline(); register char *p; register int sum; sum = 0; for (;;) { msg(prompt); - if(!(p = getline()) || *p == NULL) { + if(!(p = getlin()) || *p == 0) { msg(quiet ? "Not a number" : "That doesn't look like a number"); continue; } @@ -326,7 +351,7 @@ char *prompt; ++p; } - if (*p != ' ' && *p != '\t' && *p != NULL) + if (*p != ' ' && *p != '\t' && *p != 0) sum = lo - 1; if (sum >= lo && sum <= hi) return sum; @@ -338,22 +363,46 @@ char *prompt; } } -/* - * msg: - * Display a message at the top of the screen. - */ char Msgbuf[BUFSIZ] = { '\0' }; int Mpos = 0; static int Newpos = 0; -/* VARARGS1 */ -msg(fmt, args) -char *fmt; -int args; +/* + * doadd: + * Perform an add onto the message buffer + */ +void doadd(char *fmt, va_list ap) { - doadd(fmt, &args); +#ifdef CROSS + vsnprintf(Msgbuf, BUFSIZ, fmt, ap); +#else + static FILE junk; + + /* + * Do the printf into Msgbuf + */ + junk._flag = _IOWRT + _IOSTRG; + junk._ptr = &Msgbuf[Newpos]; + junk._cnt = BUFSIZ - 1; + _doprnt(fmt, ap, &junk); + putc('\0', &junk); +#endif + Newpos = strlen(Msgbuf); +} + +/* + * msg: + * Display a message at the top of the screen. + */ +void msg(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + doadd(fmt, ap); + va_end(ap); endmsg(); } @@ -362,21 +411,22 @@ int args; * Add things to the current message */ /* VARARGS1 */ -addmsg(fmt, args) -char *fmt; -int args; +void addmsg(char *fmt, ...) { - doadd(fmt, &args); + va_list ap; + + va_start(ap, fmt); + doadd(fmt, ap); + va_end(ap); } +int Lineno = 0; + /* * endmsg: * Display a new msg. */ - -int Lineno = 0; - -endmsg() +void endmsg() { register int len; register char *mp, *omp; @@ -423,31 +473,27 @@ endmsg() } /* - * doadd: - * Perform an add onto the message buffer + * wait_for + * Sit around until the guy types the right key */ -doadd(fmt, args) -char *fmt; -int *args; +void wait_for(ch) + register int ch; { - static FILE junk; + register int c; - /* - * Do the printf into Msgbuf - */ - junk._flag = _IOWRT + _IOSTRG; - junk._ptr = &Msgbuf[Newpos]; - junk._cnt = 32767; - _doprnt(fmt, args, &junk); - putc('\0', &junk); - Newpos = strlen(Msgbuf); + if (ch == '\n') + while ((c = readchar()) != '\n') + continue; + else + while (readchar() != ch) + continue; } /* * do_wait: * Wait for the user to type ' ' before doing anything else */ -do_wait() +void do_wait() { register int line; static char prompt[] = { '-', '-', 'M', 'o', 'r', 'e', '-', '-', '\0' }; @@ -466,53 +512,11 @@ do_wait() } /* - * wait_for - * Sit around until the guy types the right key - */ -wait_for(ch) -register char ch; -{ - register char c; - - if (ch == '\n') - while ((c = readchar()) != '\n') - continue; - else - while (readchar() != ch) - continue; -} - -/* - * readchar: - * Reads and returns a character, checking for gross input errors - */ -readchar() -{ - register int cnt, y, x; - auto char c; - -over: - cnt = 0; - while (read(0, &c, 1) <= 0) - if (cnt++ > 100) /* if we are getting infinite EOFs */ - bye(); /* quit the game */ - if (c == CTRL(L)) { - wrefresh(curscr); - goto over; - } - if (c == '\r') - return '\n'; - else - return c; -} - -/* - * getline: + * getlin: * Reads the next line up to '\n' or EOF. Multiple spaces are * compressed to one space; a space is inserted before a ',' */ -char * -getline() +char *getlin() { register char *sp; register int c, oy, ox; @@ -564,7 +568,7 @@ getline() * bye: * Leave the program, cleaning things up as we go. */ -bye() +void bye(int sig) { signal(SIGINT, SIG_IGN); mvcur(0, COLS - 1, LINES - 1, 0); diff --git a/src/games/cribbage/score.c b/src/games/cribbage/score.c index ff8c942..20094ca 100644 --- a/src/games/cribbage/score.c +++ b/src/games/cribbage/score.c @@ -3,23 +3,18 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)score.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - #include +#include +#include #include "deck.h" #include "cribbage.h" - /* * the following arrays give the sum of the scores of the (50 2)*48 = 58800 * hands obtainable for the crib given the two cards whose ranks index the * array. the two arrays are for the case where the suits are equal and * not equal respectively */ - long crbescr[ 169 ] = { -10000, 271827, 278883, 332319, 347769, 261129, 250653, 253203, 248259, 243435, 256275, 237435, 231051, -10000, -10000, 412815, 295707, 349497, @@ -66,90 +61,13 @@ long crbnescr[ 169 ] = { static int ichoose2[ 5 ] = { 0, 0, 2, 6, 12 }; static int pairpoints, runpoints; /* globals from pairuns */ - -/* - * scorehand: - * Score the given hand of n cards and the starter card. - * n must be <= 4 - */ -scorehand(hand, starter, n, crb, do_explain) -register CARD hand[]; -CARD starter; -int n; -BOOLEAN crb; /* true if scoring crib */ -BOOLEAN do_explain; /* true if must explain this hand */ -{ - CARD h[(CINHAND + 1)]; - register int i, k; - register int score; - register BOOLEAN flag; - char buf[32]; - - expl[0] = NULL; /* initialize explanation */ - score = 0; - flag = TRUE; - k = hand[0].suit; - for (i = 0; i < n; i++) { /* check for flush */ - flag = (flag && (hand[i].suit == k)); - if (hand[i].rank == JACK) /* check for his nibs */ - if (hand[i].suit == starter.suit) { - score++; - if (do_explain) - strcat(expl, "His Nobs"); - } - h[i] = hand[i]; - } - - if (flag && n >= CINHAND) { - if (do_explain && expl[0] != NULL) - strcat(expl, ", "); - if (starter.suit == k) { - score += 5; - if (do_explain) - strcat(expl, "Five-flush"); - } - else if (!crb) { - score += 4; - if (do_explain && expl[0] != NULL) - strcat(expl, ", Four-flush"); - else - strcpy(expl, "Four-flush"); - } - } - - if (do_explain && expl[0] != NULL) - strcat(expl, ", "); - h[n] = starter; - sorthand(h, n + 1); /* sort by rank */ - i = 2 * fifteens(h, n + 1); - score += i; - if (do_explain) - if (i > 0) { - sprintf(buf, "%d points in fifteens", i); - strcat(expl, buf); - } - else - strcat(expl, "No fifteens"); - i = pairuns(h, n + 1); - score += i; - if (do_explain) - if (i > 0) { - sprintf(buf, ", %d points in pairs, %d in runs", pairpoints, - runpoints); - strcat(expl, buf); - } - else - strcat(expl, ", No pairs/runs"); - return score; -} - /* * fifteens: * Return number of fifteens in hand of n cards */ -fifteens(hand, n) -register CARD hand[]; -int n; +int fifteens(hand, n) + register CARD hand[]; + int n; { register int *sp, *np; register int i; @@ -183,19 +101,15 @@ int n; return sums[14]; } - - /* * pairuns returns the number of points in the n card sorted hand * due to pairs and runs * this routine only works if n is strictly less than 6 * sets the globals pairpoints and runpoints appropriately */ - -pairuns( h, n ) - - CARD h[]; - int n; +int pairuns( h, n ) + CARD h[]; + int n; { register int i; int runlength, runmult, lastmult, curmult; @@ -260,18 +174,91 @@ pairuns( h, n ) return( pairpoints + runpoints ); } +/* + * scorehand: + * Score the given hand of n cards and the starter card. + * n must be <= 4 + */ +int scorehand(hand, starter, n, crb, do_explain) + register CARD hand[]; + CARD starter; + int n; + BOOLEAN crb; /* true if scoring crib */ + BOOLEAN do_explain; /* true if must explain this hand */ +{ + CARD h[(CINHAND + 1)]; + register int i, k; + register int score; + register BOOLEAN flag; + char buf[32]; + explstr[0] = 0; /* initialize explanation */ + score = 0; + flag = TRUE; + k = hand[0].suit; + for (i = 0; i < n; i++) { /* check for flush */ + flag = (flag && (hand[i].suit == k)); + if (hand[i].rank == JACK) /* check for his nibs */ + if (hand[i].suit == starter.suit) { + score++; + if (do_explain) + strcat(explstr, "His Nobs"); + } + h[i] = hand[i]; + } + + if (flag && n >= CINHAND) { + if (do_explain && explstr[0] != 0) + strcat(explstr, ", "); + if (starter.suit == k) { + score += 5; + if (do_explain) + strcat(explstr, "Five-flush"); + } + else if (!crb) { + score += 4; + if (do_explain && explstr[0] != 0) + strcat(explstr, ", Four-flush"); + else + strcpy(explstr, "Four-flush"); + } + } + + if (do_explain && explstr[0] != 0) + strcat(explstr, ", "); + h[n] = starter; + sorthand(h, n + 1); /* sort by rank */ + i = 2 * fifteens(h, n + 1); + score += i; + if (do_explain) { + if (i > 0) { + sprintf(buf, "%d points in fifteens", i); + strcat(explstr, buf); + } else + strcat(explstr, "No fifteens"); + } + i = pairuns(h, n + 1); + score += i; + if (do_explain) { + if (i > 0) { + sprintf(buf, ", %d points in pairs, %d in runs", pairpoints, + runpoints); + strcat(explstr, buf); + } + else + strcat(explstr, ", No pairs/runs"); + } + return score; +} /* * pegscore tells how many points crd would get if played after * the n cards in tbl during pegging */ - -pegscore( crd, tbl, n, sum ) - - CARD crd, tbl[]; - int n; - int sum; +int pegscore( crd, tbl, n, sum ) + CARD crd, tbl[]; + int n; + int sum; { BOOLEAN got[ RANKS ]; register int i, j, scr; @@ -302,17 +289,13 @@ pegscore( crd, tbl, n, sum ) else return( scr ); } - - /* * adjust takes a two card hand that will be put in the crib * and returns an adjusted normalized score for the number of * points such a crib will get. */ - -adjust( cb, tnv ) - - CARD cb[], tnv; +int adjust( cb, tnv ) + CARD cb[], tnv; { int i, c0, c1; long scr; @@ -332,6 +315,3 @@ adjust( cb, tnv ) } return( (scr + 29400)/58800 ); } - - - diff --git a/src/games/cribbage/support.c b/src/games/cribbage/support.c index 867ad01..54d815d 100644 --- a/src/games/cribbage/support.c +++ b/src/games/cribbage/support.c @@ -3,33 +3,58 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)support.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -#include +#include #include "deck.h" #include "cribbage.h" #include "cribcur.h" - #define NTV 10 /* number scores to test */ /* score to test reachability of, and order to test them in */ int tv[ NTV ] = { 8, 7, 9, 6, 11, 12, 13, 14, 10, 5 }; +/* + * anysumto returns the index (0 <= i < n) of the card in hand that brings + * the s up to t, or -1 if there is none + */ +int anysumto( hand, n, s, t ) + CARD hand[]; + int n; + int s, t; +{ + register int i; + + for( i = 0; i < n; i++ ) { + if( s + VAL( hand[i].rank ) == t ) return( i ); + } + return( -1 ); +} + +/* + * return the number of cards in h having the given rank value + */ +int numofval( h, n, v ) + CARD h[]; + int n; + int v; +{ + register int i, j; + + j = 0; + for( i = 0; i < n; i++ ) { + if( VAL( h[i].rank ) == v ) ++j; + } + return( j ); +} /* * computer chooses what to play in pegging... * only called if no playable card will score points */ - -cchose( h, n, s ) - - CARD h[]; - int n; - int s; +int cchose( h, n, s ) + CARD h[]; + int n; + int s; { register int i, j, l; @@ -79,15 +104,13 @@ cchose( h, n, s ) return( j ); } - - /* * plyrhand: * Evaluate and score a player hand or crib */ -plyrhand(hand, s) -CARD hand[]; -char *s; +BOOLEAN plyrhand(hand, s) + CARD hand[]; + char *s; { register int i, j; register BOOLEAN win; @@ -110,7 +133,7 @@ char *s; msg("You should have taken %d, not %d!", i, j); } if (explain) - msg("Explanation: %s", expl); + msg("Explanation: %s", explstr); do_wait(); } else @@ -122,9 +145,9 @@ char *s; * comphand: * Handle scoring and displaying the computers hand */ -comphand(h, s) -CARD h[]; -char *s; +BOOLEAN comphand(h, s) + CARD h[]; + char *s; { register int j; @@ -134,39 +157,17 @@ char *s; return chkscr(&cscore, j); } -/* - * chkscr: - * Add inc to scr and test for > glimit, printing on the scoring - * board while we're at it. - */ - int Lastscore[2] = {-1, -1}; -chkscr(scr, inc) -int *scr, inc; -{ - BOOLEAN myturn; - - myturn = (scr == &cscore); - if (inc != 0) { - prpeg(Lastscore[myturn], '.', myturn); - Lastscore[myturn] = *scr; - *scr += inc; - prpeg(*scr, PEG, myturn); - refresh(); - } - return (*scr >= glimit); -} - /* * prpeg: * Put out the peg character on the score board and put the * score up on the board. */ -prpeg(score, peg, myturn) -register int score; -char peg; -BOOLEAN myturn; +void prpeg(score, peg, myturn) + register int score; + char peg; + BOOLEAN myturn; { register int y, x; @@ -198,13 +199,32 @@ BOOLEAN myturn; mvprintw(SCORE_Y + (myturn ? 7 : 1), SCORE_X + 10, "%3d", score); } +/* + * chkscr: + * Add inc to scr and test for > glimit, printing on the scoring + * board while we're at it. + */ +BOOLEAN chkscr(scr, inc) + int *scr, inc; +{ + BOOLEAN myturn; + + myturn = (scr == &cscore); + if (inc != 0) { + prpeg(Lastscore[myturn], '.', myturn); + Lastscore[myturn] = *scr; + *scr += inc; + prpeg(*scr, PEG, myturn); + refresh(); + } + return (*scr >= glimit); +} + /* * cdiscard -- the computer figures out what is the best discard for * the crib and puts the best two cards at the end */ - -cdiscard( mycrib ) - +void cdiscard( mycrib ) BOOLEAN mycrib; { CARD d[ CARDS ], h[ FULLHAND ], cb[ 2 ]; @@ -217,7 +237,7 @@ cdiscard( mycrib ) makedeck( d ); nc = CARDS; for( i = 0; i < knownum; i++ ) { /* get all other cards */ - remove( known[i], d, nc-- ); + cremove( known[i], d, nc-- ); } for( i = 0; i < 15; i++ ) sums[i] = 0L; ns = 0; @@ -226,8 +246,8 @@ cdiscard( mycrib ) for( j = i + 1; j < FULLHAND; j++ ) { cb[1] = chand[j]; for( k = 0; k < FULLHAND; k++ ) h[k] = chand[k]; - remove( chand[i], h, FULLHAND ); - remove( chand[j], h, FULLHAND - 1 ); + cremove( chand[i], h, FULLHAND ); + cremove( chand[j], h, FULLHAND - 1 ); for( k = 0; k < nc; k++ ) { sums[ns] += scorehand( h, d[k], CINHAND, TRUE, FALSE ); if( mycrib ) sums[ns] += adjust( cb, d[k] ); @@ -239,20 +259,16 @@ cdiscard( mycrib ) j = 0; for( i = 1; i < 15; i++ ) if( sums[i] > sums[j] ) j = i; for( k = 0; k < FULLHAND; k++ ) h[k] = chand[k]; - remove( h[ undo1[j] ], chand, FULLHAND ); - remove( h[ undo2[j] ], chand, FULLHAND - 1 ); + cremove( h[ undo1[j] ], chand, FULLHAND ); + cremove( h[ undo2[j] ], chand, FULLHAND - 1 ); chand[4] = h[ undo1[j] ]; chand[5] = h[ undo2[j] ]; } - - /* * returns true if some card in hand can be played without exceeding 31 */ - -anymove( hand, n, sum ) - +BOOLEAN anymove( hand, n, sum ) CARD hand[]; int n; int sum; @@ -267,57 +283,10 @@ anymove( hand, n, sum ) return( sum + VAL( j ) <= 31 ); } - - -/* - * anysumto returns the index (0 <= i < n) of the card in hand that brings - * the s up to t, or -1 if there is none - */ - -anysumto( hand, n, s, t ) - - CARD hand[]; - int n; - int s, t; -{ - register int i; - - for( i = 0; i < n; i++ ) { - if( s + VAL( hand[i].rank ) == t ) return( i ); - } - return( -1 ); -} - - - - -/* - * return the number of cards in h having the given rank value - */ - -numofval( h, n, v ) - - CARD h[]; - int n; - int v; -{ - register int i, j; - - j = 0; - for( i = 0; i < n; i++ ) { - if( VAL( h[i].rank ) == v ) ++j; - } - return( j ); -} - - - /* * makeknown remembers all n cards in h for future recall */ - -makeknown( h, n ) - +void makeknown( h, n ) CARD h[]; int n; { @@ -327,4 +296,3 @@ makeknown( h, n ) known[ knownum++ ] = h[i]; } } - diff --git a/src/games/cribbage/test.c b/src/games/cribbage/test.c index 44f2f61..70bb045 100644 --- a/src/games/cribbage/test.c +++ b/src/games/cribbage/test.c @@ -3,17 +3,6 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1980 Regents of the University of California.\n\ - All rights reserved.\n"; -#endif not lint - -#ifndef lint -static char sccsid[] = "@(#)test.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - #include #include "deck.h" @@ -34,7 +23,7 @@ main( argc, argv ) int i, j, is, n, sum, sum2; CARD ic, jc; CARD d[ CARDS]; - extern char expl[]; + extern char explstr[]; printf( "Assuming cards are same suit\n" ); if( argc == 2 ) { @@ -57,8 +46,8 @@ main( argc, argv ) hand[1] = jc; for( k = 0; k < CARDS; k++ ) d[k] = deck[k]; n = CARDS; - remove( ic, d, n-- ); - remove( jc, d, n-- ); + cremove( ic, d, n-- ); + cremove( jc, d, n-- ); sum = 0; sum2 = 0; for( k = 0; k < n - 1; k++ ) { /* 3rd card */ @@ -90,7 +79,7 @@ main( argc, argv ) hand[3].suit = 0; hand[4].suit = 0; printf("scorehand of hand = %d\n", scorehand(hand, hand[4], CINHAND, FALSE, TRUE)); - printf("\t%s\n", expl); + printf("\t%s\n", explstr); hand[0].rank = 0; hand[1].rank = 1; hand[2].rank = 2; @@ -102,7 +91,7 @@ main( argc, argv ) hand[3].suit = 0; hand[4].suit = 0; printf("scorehand of crib = %d\n", scorehand(hand, hand[4], CINHAND, TRUE, TRUE)); - printf("\t%s\n", expl); + printf("\t%s\n", explstr); hand[0].rank = 0; hand[1].rank = 1; hand[2].rank = 2; @@ -114,7 +103,7 @@ main( argc, argv ) hand[3].suit = 0; hand[4].suit = 1; printf("scorehand of hand = %d\n", scorehand(hand, hand[4], CINHAND, FALSE, TRUE)); - printf("\t%s\n", expl); + printf("\t%s\n", explstr); hand[0].rank = 0; hand[1].rank = 1; hand[2].rank = 2; @@ -126,6 +115,6 @@ main( argc, argv ) hand[3].suit = 0; hand[4].suit = 1; printf("scorehand of crib = %d\n", scorehand(hand, hand[4], CINHAND, TRUE, TRUE)); - printf("\t%s\n", expl); + printf("\t%s\n", explstr); # endif } diff --git a/tools/virtualmips/pic32_dev_uart.c b/tools/virtualmips/pic32_dev_uart.c index 091fa24..8b26308 100644 --- a/tools/virtualmips/pic32_dev_uart.c +++ b/tools/virtualmips/pic32_dev_uart.c @@ -137,9 +137,9 @@ void *dev_pic32_uart_access (cpu_mips_t * cpu, struct vdevice *dev, #endif switch (offset) { case PIC32_U1TXREG & 0xff: /* Transmit */ - /* Skip ^M. */ - if ((char) (*data) != '\r') - vtty_put_char (d->vtty, (char) (*data)); + /* Don't skip ^M. */ + vtty_put_char (d->vtty, (char) (*data)); + if ((d->mode & PIC32_UMODE_ON) && (d->sta & PIC32_USTA_UTXEN) && (d->output == 0)) { /* From 8886a00340afca59b595842311576abd18237f2c Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 8 Sep 2014 12:30:17 -0700 Subject: [PATCH 04/16] Ported fortune. --- rootfs.manifest | 3 + src/games/Makefile | 4 +- src/games/fortune/.gitignore | 1 + src/games/fortune/Makefile | 93 +++----- src/games/fortune/Makefile.orig | 72 ++++++ src/games/fortune/fortune.6 | 4 +- src/games/fortune/fortune.c | 174 +++++++------- src/games/fortune/fortunes.dat | Bin 0 -> 1629740 bytes src/games/fortune/rnd.c | 25 +- src/games/fortune/strfile.c | 394 ++++++++++++++++---------------- 10 files changed, 413 insertions(+), 357 deletions(-) create mode 100644 src/games/fortune/.gitignore create mode 100644 src/games/fortune/Makefile.orig create mode 100644 src/games/fortune/fortunes.dat diff --git a/rootfs.manifest b/rootfs.manifest index 47cc8d6..4bca8b2 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -417,6 +417,7 @@ file /games/canfield file /games/cfscores file /games/factor file /games/fish +file /games/fortune file /games/morse file /games/number file /games/ppt @@ -440,6 +441,8 @@ file /games/lib/battle_strings mode 0444 file /games/lib/cfscores mode 0666 +file /games/lib/fortunes.dat +mode 0444 # # Files: /include diff --git a/src/games/Makefile b/src/games/Makefile index 4c7e678..0242c77 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -12,8 +12,8 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ - cribbage rogue sail trek -# TODO: fortune hangman hunt mille monop phantasia quiz robots + cribbage fortune rogue sail trek +# TODO: hangman hunt mille monop phantasia quiz robots # sail snake warp # C programs that live in the current directory and do not need diff --git a/src/games/fortune/.gitignore b/src/games/fortune/.gitignore new file mode 100644 index 0000000..ce43652 --- /dev/null +++ b/src/games/fortune/.gitignore @@ -0,0 +1 @@ +fortune diff --git a/src/games/fortune/Makefile b/src/games/fortune/Makefile index cedde4e..e133edc 100644 --- a/src/games/fortune/Makefile +++ b/src/games/fortune/Makefile @@ -1,72 +1,45 @@ -FORTUNES= scene obscene -SOURCE= fortune.c strfile.h strfile.c rnd.c unstr.c $(FORTUNES) -TFILES= Troff.mac Troff.sed Do_troff -LIBDIR= /usr/games/lib -BINDIR= /usr/games -OWN= arnold -GRP= arpa -DEFS= -SEPFLAG= -i -CFLAGS= -O $(DEFS) -SFLAGS= -r -TDEV= -Pver -TROFF= ditroff $(TDEV) -DESTDIR= +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk -all: fortune strfile unstr fortunes.dat +CFLAGS += -O -Werror -Wall +LIBS = -lc -fortune: fortune.o rnd.o - $(CC) ${SEPFLAG} $(CFLAGS) -o fortune fortune.o rnd.o +OBJS = fortune.o +MAN = fortune.0 +MANSRC = fortune.6 -strfile: strfile.o rnd.o - $(CC) ${SEPFLAG} $(CFLAGS) -o strfile strfile.o rnd.o +all: fortune $(MAN) fortunes.dat -unstr: unstr.o - $(CC) ${SEPFLAG} $(CFLAGS) -o unstr unstr.o +fortune: $(OBJS) + $(CC) $(LDFLAGS) -o fortune.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S fortune.elf > fortune.dis + $(SIZE) fortune.elf + $(ELF2AOUT) fortune.elf $@ && rm fortune.elf -fortune.o strfile.o unstr.o: strfile.h +strfile: strfile.o + $(CC) $(LDFLAGS) -o strfile strfile.o -fortunes.dat: fortunes strfile - ./strfile $(SFLAGS) fortunes +unstr: unstr.o + $(CC) $(LDFLAGS) -o unstr unstr.o -fortunes: $(FORTUNES) - cp scene fortunes - echo "%-" >> fortunes - cat obscene >> fortunes +fortunes.dat: #fortunes strfile + ./strfile -r fortunes -lint: - lint -hxb $(DEFS) fortune.c rnd.c 2>&1 > fortune.lint - lint -hxb $(DEFS) strfile.c rnd.c 2>&1 > strfile.lint - lint -hxb $(DEFS) unstr.c 2>&1 > unstr.lint +fortunes: scene obscene + cp scene fortunes + echo "%-" >> fortunes + cat obscene >> fortunes -install: all install.data - install -s -m 4711 -o daemon fortune $(DESTDIR)$(BINDIR) +$(MAN): $(MANSRC) + $(MANROFF) $< > $@ -install.data: fortunes.dat - install -m 600 -o daemon fortunes.dat $(DESTDIR)$(LIBDIR) +clean: + rm -f *.o *.0 *.elf $(MAN) fortune strfile unstr fortunes *.elf *.dis tags *~ -troff: troff.scene troff.obscene +install: all + install fortune $(DESTDIR)/games/ + cp $(MAN) $(DESTDIR)/share/man/cat6/ + cp fortunes.dat $(DESTDIR)/games/lib/ -troff.scene: - ./Do_troff scene $(TROFF) - -troff.obscene: - ./Do_troff obscene $(TROFF) - -clean: sort.clean - rm -f fortune fortunes fortunes.dat strfile unstr ? core *.o - -sort: sort.scene sort.obscene - -sort.scene: strfile unstr - strfile -oi scene - mv scene Oscene - unstr -o scene - -sort.obscene: strfile unstr - strfile -oi obscene - mv obscene Oobscene - unstr -o obscene - -sort.clean: - rm -f Oscene Oobscene +#$(OBJS): fortune.h diff --git a/src/games/fortune/Makefile.orig b/src/games/fortune/Makefile.orig new file mode 100644 index 0000000..cedde4e --- /dev/null +++ b/src/games/fortune/Makefile.orig @@ -0,0 +1,72 @@ +FORTUNES= scene obscene +SOURCE= fortune.c strfile.h strfile.c rnd.c unstr.c $(FORTUNES) +TFILES= Troff.mac Troff.sed Do_troff +LIBDIR= /usr/games/lib +BINDIR= /usr/games +OWN= arnold +GRP= arpa +DEFS= +SEPFLAG= -i +CFLAGS= -O $(DEFS) +SFLAGS= -r +TDEV= -Pver +TROFF= ditroff $(TDEV) +DESTDIR= + +all: fortune strfile unstr fortunes.dat + +fortune: fortune.o rnd.o + $(CC) ${SEPFLAG} $(CFLAGS) -o fortune fortune.o rnd.o + +strfile: strfile.o rnd.o + $(CC) ${SEPFLAG} $(CFLAGS) -o strfile strfile.o rnd.o + +unstr: unstr.o + $(CC) ${SEPFLAG} $(CFLAGS) -o unstr unstr.o + +fortune.o strfile.o unstr.o: strfile.h + +fortunes.dat: fortunes strfile + ./strfile $(SFLAGS) fortunes + +fortunes: $(FORTUNES) + cp scene fortunes + echo "%-" >> fortunes + cat obscene >> fortunes + +lint: + lint -hxb $(DEFS) fortune.c rnd.c 2>&1 > fortune.lint + lint -hxb $(DEFS) strfile.c rnd.c 2>&1 > strfile.lint + lint -hxb $(DEFS) unstr.c 2>&1 > unstr.lint + +install: all install.data + install -s -m 4711 -o daemon fortune $(DESTDIR)$(BINDIR) + +install.data: fortunes.dat + install -m 600 -o daemon fortunes.dat $(DESTDIR)$(LIBDIR) + +troff: troff.scene troff.obscene + +troff.scene: + ./Do_troff scene $(TROFF) + +troff.obscene: + ./Do_troff obscene $(TROFF) + +clean: sort.clean + rm -f fortune fortunes fortunes.dat strfile unstr ? core *.o + +sort: sort.scene sort.obscene + +sort.scene: strfile unstr + strfile -oi scene + mv scene Oscene + unstr -o scene + +sort.obscene: strfile unstr + strfile -oi obscene + mv obscene Oobscene + unstr -o obscene + +sort.clean: + rm -f Oscene Oobscene diff --git a/src/games/fortune/fortune.6 b/src/games/fortune/fortune.6 index 150456f..97a000b 100644 --- a/src/games/fortune/fortune.6 +++ b/src/games/fortune/fortune.6 @@ -40,8 +40,8 @@ often used for potentially offensive ones. .B \-a Choose from either list of adages. .PP -..The user may specify a file of adages. -..This file must be created by strfile(6), +.. The user may specify a file of adages. +.. This file must be created by strfile(6), ..and be given by the user as ...it file. ..Only one such file may be named, diff --git a/src/games/fortune/fortune.c b/src/games/fortune/fortune.c index 6253dea..97dae60 100644 --- a/src/games/fortune/fortune.c +++ b/src/games/fortune/fortune.c @@ -1,21 +1,31 @@ /* $Header: fortune.c,v 1.10 85/11/01 15:19:49 arnold Exp $ */ -# include -# include -# include -# include "strfile.h" +#include +#ifdef CROSS +# include +#else +# include +#endif +#include +#include +#include +#include +#include "strfile.h" -# define TRUE 1 -# define FALSE 0 -# define bool short +#define TRUE 1 +#define FALSE 0 -# define MINW 6 /* minimum wait if desired */ -# define CPERS 20 /* # of chars for each sec */ -# define SLEN 160 /* # of chars in short fortune */ +#define MINW 6 /* minimum wait if desired */ +#define CPERS 20 /* # of chars for each sec */ +#define SLEN 160 /* # of chars in short fortune */ -# define FORTFILE "/usr/games/lib/fortunes.dat" +#ifdef CROSS +# define FORTFILE "/usr/local/games/fortunes.dat" +#else +# define FORTFILE "/games/lib/fortunes.dat" +#endif -bool Wflag = FALSE, /* wait desired after fortune */ +int Wflag = FALSE, /* wait desired after fortune */ Sflag = FALSE, /* short fortune desired */ Lflag = FALSE, /* long fortune desired */ Oflag = FALSE, /* offensive fortunes only */ @@ -41,70 +51,11 @@ FILE *Inf; /* input file */ STRFILE Tbl; /* input table */ -time_t time(); - -main(ac, av) -int ac; -char *av[]; -{ - register char c; - register int nchar = 0; - register int i; - - getargs(ac, av); - if ((Inf = fopen(Fortfile, "r+")) == NULL) { - perror(Fortfile); - exit(-1); - } - fread((char *) &Tbl, sizeof Tbl, 1, Inf); /* NOSTRICT */ - if (Tbl.str_longlen <= SLEN && Lflag) { - puts("Sorry, no long strings in this file"); - exit(0); - } - if (Tbl.str_shortlen > SLEN && Sflag) { - puts("Sorry, no short strings in this file"); - exit(0); - } - - /* - * initialize the pointer to the first -o fortune if need be. - */ - if (Tbl.str_delims[2] == 0) - Tbl.str_delims[2] = Tbl.str_delims[0]; - - do { - getfort(); - } while ((Sflag && !is_short()) || (Lflag && !is_long())); - - fseek(Inf, Seekpts[0], 0); - while (c = getc(Inf)) { - nchar++; - putchar(c); - } - fflush(stdout); - fseek(Inf, 0L, 0); -#ifdef LOCK_EX - /* - * if we can, we exclusive lock, but since it isn't very - * important, we just punt if we don't have easy locking - * available. - */ - flock(fileno(Inf), LOCK_EX); -#endif LOCK_EX - fwrite(&Tbl, 1, sizeof Tbl, Inf); -#ifdef LOCK_EX - flock(fileno(Inf), LOCK_UN); -#endif LOCK_EX - if (Wflag) - sleep(max((int) nchar / CPERS, MINW)); - exit(0); -} - /* * is_short: * Return TRUE if fortune is "short". */ -is_short() +int is_short() { register int nchar; @@ -121,7 +72,7 @@ is_short() * is_long: * Return TRUE if fortune is "long". */ -is_long() +int is_long() { register int nchar; @@ -137,9 +88,7 @@ is_long() /* * This routine evaluates the arguments on the command line */ -getargs(ac, av) -register int ac; -register char *av[]; +void getargs(int ac, char **av) { register int i; register char *sp; @@ -182,9 +131,9 @@ register char *av[]; * few numbers to avoid any non- * randomness in startup */ - srnd(time(NULL) + getpid()); + srandom(time(NULL) + getpid()); for (j = 0; j < 20; j++) - (void) rnd(100); + (void) random(); break; default: printf("unknown flag: '%c'\n", *sp); @@ -202,7 +151,7 @@ register char *av[]; * getfort: * Get the fortune data file's seek pointer for the next fortune. */ -getfort() +void getfort() { register int fortune; @@ -216,7 +165,7 @@ getfort() Tbl.str_delims[2] = Tbl.str_delims[0]; if (Aflag) { - if (rnd(Tbl.str_numstr) < Tbl.str_delims[0]) + if (random() % Tbl.str_numstr < Tbl.str_delims[0]) fortune = Tbl.str_delims[1]++; else fortune = Tbl.str_delims[2]++; @@ -227,11 +176,70 @@ getfort() fortune = Tbl.str_delims[1]++; fseek(Inf, (long)(sizeof Seekpts[0]) * fortune + sizeof Tbl, 0); - fread((char *) Seekpts, (sizeof Seekpts[0]), 2, Inf); + if (fread((char *) Seekpts, (sizeof Seekpts[0]), 2, Inf) != 2) { + puts("Error reading data from strings file"); + exit(0); + } } -max(i, j) -register int i, j; +int max(int i, int j) { return (i >= j ? i : j); } + +int main(int ac, char **av) +{ + register char c; + register int nchar = 0; + + getargs(ac, av); + if ((Inf = fopen(Fortfile, "r+")) == NULL) { + perror(Fortfile); + exit(-1); + } + if (fread((char *) &Tbl, sizeof Tbl, 1, Inf) != 1) { + puts("Error reading strings file"); + exit(0); + } + if (Tbl.str_longlen <= SLEN && Lflag) { + puts("Sorry, no long strings in this file"); + exit(0); + } + if (Tbl.str_shortlen > SLEN && Sflag) { + puts("Sorry, no short strings in this file"); + exit(0); + } + + /* + * initialize the pointer to the first -o fortune if need be. + */ + if (Tbl.str_delims[2] == 0) + Tbl.str_delims[2] = Tbl.str_delims[0]; + + do { + getfort(); + } while ((Sflag && !is_short()) || (Lflag && !is_long())); + + fseek(Inf, Seekpts[0], 0); + while ((c = getc(Inf))) { + nchar++; + putchar(c); + } + fflush(stdout); + fseek(Inf, 0L, 0); +#ifdef LOCK_EX + /* + * if we can, we exclusive lock, but since it isn't very + * important, we just punt if we don't have easy locking + * available. + */ + flock(fileno(Inf), LOCK_EX); +#endif + fwrite(&Tbl, 1, sizeof Tbl, Inf); +#ifdef LOCK_EX + flock(fileno(Inf), LOCK_UN); +#endif + if (Wflag) + sleep(max((int) nchar / CPERS, MINW)); + exit(0); +} diff --git a/src/games/fortune/fortunes.dat b/src/games/fortune/fortunes.dat new file mode 100644 index 0000000000000000000000000000000000000000..869c7d70c90064b64c1fc0a632c38be508d52dc8 GIT binary patch literal 1629740 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

Q4Dm?r!rxAOMr0t2=}rJrY6g*5hNWYsC@Z* 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

5TBPUx;Lk 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Ⓢ)!n)dz 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

P3_hs^zngeQ(okunVwTs>V{< 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˄BP<)UqW)#ju0;aK!WA%c37WTwo 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

    F47 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 literal 0 HcmV?d00001 diff --git a/src/games/fortune/rnd.c b/src/games/fortune/rnd.c index 946b460..e43c352 100644 --- a/src/games/fortune/rnd.c +++ b/src/games/fortune/rnd.c @@ -1,13 +1,14 @@ /* * code for when the good (berkeley) random number generator is around */ +#include -rnd(num) +int rnd(int num) { return (random() % num); } -srnd(num) +void srnd(int num) { srandom(num); } @@ -38,7 +39,7 @@ static char sccsid[] = "@(#)random.c 4.2 (Berkeley) 83/01/02"; * zeroeth element of the array is the type of R.N.G. being used (small * integer); the remainder of the array is the state information for the * R.N.G. Thus, 32 bytes of state information will give 7 longs worth of - * state information, which will allow a degree seven polynomial. (Note: the + * state information, which will allow a degree seven polynomial. (Note: the * zeroeth word of state information also has some other information stored * in it -- see setstate() for details). * The random number generation technique is a linear feedback shift register @@ -120,13 +121,13 @@ static int seps[ MAX_TYPES ] = { SEP_0, SEP_1, SEP_2, */ static long randtbl[ DEG_3 + 1 ] = { TYPE_3, - 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, - 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, - 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, - 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, - 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, - 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, - 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, + 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, + 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, + 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, + 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, + 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, + 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, + 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b, 0x27fb47b9 }; /* @@ -344,7 +345,7 @@ long random() { long i; - + if( rand_type == TYPE_0 ) { i = state[0] = ( state[0]*1103515245 + 12345 )&0x7fffffff; } @@ -362,4 +363,4 @@ random() return( i ); } -#endif NO_RANDOM +#endif /* NO_RANDOM */ diff --git a/src/games/fortune/strfile.c b/src/games/fortune/strfile.c index 00ce2aa..b607b3d 100644 --- a/src/games/fortune/strfile.c +++ b/src/games/fortune/strfile.c @@ -1,6 +1,16 @@ -# include -# include -# include "strfile.h" +#include +#ifdef CROSS +# include +# include +#else +# include +# include +#endif +#include +#include +#include +#include +#include "strfile.h" /* * This program takes a file composed of strings seperated by @@ -18,7 +28,7 @@ * the run. * v - Verbose. Give summary of data processed. (Default) * o - order the strings in alphabetic order - * i - if ordering, ignore case + * i - if ordering, ignore case * r - randomize the order of the strings * * Ken Arnold Sept. 7, 1978 -- @@ -31,10 +41,10 @@ * Added ordering options. */ -# define TRUE 1 -# define FALSE 0 +#define TRUE 1 +#define FALSE 0 -# define DELIM_CH '-' +#define DELIM_CH '-' typedef struct { char first; @@ -71,13 +81,187 @@ STRFILE Tbl; /* statistics table */ STR *Firstch; /* first chars of each string */ -char *fgets(), *malloc(), *strcpy(), *strcat(); +/* + * This routine evaluates arguments from the command line + */ +void getargs(int ac, char **av) +{ + register char *sp; + register int i; + register int bad, j; -long ftell(); + bad = 0; + for (i = 1; i < ac; i++) + if (*av[i] == '-' && av[i][1]) { + for (sp = &av[i][1]; *sp; sp++) + switch (*sp) { + case 'c': /* new delimiting char */ + if ((Delimch = *++sp) == '\0') { + --sp; + Delimch = *av[++i]; + } + if (Delimch <= 0 || Delimch > '~' || + Delimch == DELIM_CH) { + printf("bad delimiting character: '\\%o\n'", + Delimch); + bad++; + } + break; + case 's': /* silent */ + Sflag++; + break; + case 'v': /* verbose */ + Sflag = 0; + break; + case 'o': /* order strings */ + Oflag++; + break; + case 'i': /* ignore case in ordering */ + Iflag++; + break; + case 'r': /* ignore case in ordering */ + Rflag++; + break; + default: /* unknown flag */ + bad++; + printf("bad flag: '%c'\n", *sp); + break; + } + } + else if (*av[i] == '-') { + for (j = 0; Usage[j]; j++) + puts(Usage[j]); + exit(0); + } + else if (Infile) + (void) strcpy(Outfile, av[i]); + else + Infile = av[i]; + if (!Infile) { + bad++; + puts("No input file name"); + } + if (*Outfile == '\0' && !bad) { + (void) strcpy(Outfile, Infile); + (void) strcat(Outfile, ".dat"); + } + if (bad) { + puts("use \"strfile -\" to get usage"); + exit(-1); + } +} -main(ac, av) -int ac; -char **av; +/* + * do_order: + * Order the strings alphabetically (possibly ignoring case). + */ +void do_order(long *seekpts, FILE *outf) +{ + register int i; + register long *lp; + register STR *fp; + extern int cmp_str(); + + (void) fflush(outf); + Sort_1 = fopen(Outfile, "r"); + Sort_2 = fopen(Outfile, "r"); + Seekpts = seekpts; + qsort((char *) Firstch, Tbl.str_numstr, sizeof *Firstch, cmp_str); + i = Tbl.str_numstr; + lp = seekpts; + fp = Firstch; + while (i--) + *lp++ = fp++->pos; + (void) fclose(Sort_1); + (void) fclose(Sort_2); + Tbl.str_flags |= STR_ORDERED; +} + +/* + * cmp_str: + * Compare two strings in the file + */ +int cmp_str(STR *p1, STR *p2) +{ + register int c1, c2; + + c1 = p1->first; + c2 = p2->first; + if (c1 != c2) + return c1 - c2; + + (void) fseek(Sort_1, p1->pos, 0); + (void) fseek(Sort_2, p2->pos, 0); + + while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0') + continue; + while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0') + continue; + + while (c1 != '\0' && c2 != '\0') { + if (Iflag) { + if (isupper(c1)) + c1 = tolower(c1); + if (isupper(c2)) + c2 = tolower(c2); + } + if (c1 != c2) + return c1 - c2; + c1 = getc(Sort_1); + c2 = getc(Sort_2); + } + return c1 - c2; +} + +/* + * randomize: + * Randomize the order of the string table. We must be careful + * not to randomize across delimiter boundaries. All + * randomization is done within each block. + */ +void randomize(long *seekpts) +{ + register int cnt, i, j, start; + register long tmp; + register long *origsp; + + Tbl.str_flags |= STR_RANDOM; + srandom(time((long *) NULL) + getpid()); + origsp = seekpts; + for (j = 0; j <= Delim; j++) { + + /* + * get the starting place for the block + */ + + if (j == 0) + start = 0; + else + start = Tbl.str_delims[j - 1]; + + /* + * get the ending point + */ + + if (j == Delim) + cnt = Tbl.str_numstr; + else + cnt = Tbl.str_delims[j]; + + /* + * move things around randomly + */ + + for (seekpts = &origsp[start]; cnt > start; cnt--, seekpts++) { + i = random() % (cnt - start); + tmp = seekpts[0]; + seekpts[0] = seekpts[i]; + seekpts[i] = tmp; + } + } +} + +int main(int ac, char **av) { register char *sp, dc; register long *lp; @@ -206,189 +390,3 @@ char **av; } exit(0); } - -/* - * This routine evaluates arguments from the command line - */ -getargs(ac, av) -register int ac; -register char **av; -{ - register char *sp; - register int i; - register int bad, j; - - bad = 0; - for (i = 1; i < ac; i++) - if (*av[i] == '-' && av[i][1]) { - for (sp = &av[i][1]; *sp; sp++) - switch (*sp) { - case 'c': /* new delimiting char */ - if ((Delimch = *++sp) == '\0') { - --sp; - Delimch = *av[++i]; - } - if (Delimch <= 0 || Delimch > '~' || - Delimch == DELIM_CH) { - printf("bad delimiting character: '\\%o\n'", - Delimch); - bad++; - } - break; - case 's': /* silent */ - Sflag++; - break; - case 'v': /* verbose */ - Sflag = 0; - break; - case 'o': /* order strings */ - Oflag++; - break; - case 'i': /* ignore case in ordering */ - Iflag++; - break; - case 'r': /* ignore case in ordering */ - Rflag++; - break; - default: /* unknown flag */ - bad++; - printf("bad flag: '%c'\n", *sp); - break; - } - } - else if (*av[i] == '-') { - for (j = 0; Usage[j]; j++) - puts(Usage[j]); - exit(0); - } - else if (Infile) - (void) strcpy(Outfile, av[i]); - else - Infile = av[i]; - if (!Infile) { - bad++; - puts("No input file name"); - } - if (*Outfile == '\0' && !bad) { - (void) strcpy(Outfile, Infile); - (void) strcat(Outfile, ".dat"); - } - if (bad) { - puts("use \"strfile -\" to get usage"); - exit(-1); - } -} - -/* - * do_order: - * Order the strings alphabetically (possibly ignoring case). - */ -do_order(seekpts, outf) -long *seekpts; -FILE *outf; -{ - register int i; - register long *lp; - register STR *fp; - extern int cmp_str(); - - (void) fflush(outf); - Sort_1 = fopen(Outfile, "r"); - Sort_2 = fopen(Outfile, "r"); - Seekpts = seekpts; - qsort((char *) Firstch, Tbl.str_numstr, sizeof *Firstch, cmp_str); - i = Tbl.str_numstr; - lp = seekpts; - fp = Firstch; - while (i--) - *lp++ = fp++->pos; - (void) fclose(Sort_1); - (void) fclose(Sort_2); - Tbl.str_flags |= STR_ORDERED; -} - -/* - * cmp_str: - * Compare two strings in the file - */ -cmp_str(p1, p2) -STR *p1, *p2; -{ - register int c1, c2; - - c1 = p1->first; - c2 = p2->first; - if (c1 != c2) - return c1 - c2; - - (void) fseek(Sort_1, p1->pos, 0); - (void) fseek(Sort_2, p2->pos, 0); - - while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0') - continue; - while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0') - continue; - - while (c1 != '\0' && c2 != '\0') { - if (Iflag) { - if (isupper(c1)) - c1 = tolower(c1); - if (isupper(c2)) - c2 = tolower(c2); - } - if (c1 != c2) - return c1 - c2; - c1 = getc(Sort_1); - c2 = getc(Sort_2); - } - return c1 - c2; -} - -/* - * randomize: - * Randomize the order of the string table. We must be careful - * not to randomize across delimiter boundaries. All - * randomization is done within each block. - */ -randomize(seekpts) -register long *seekpts; -{ - register int cnt, i, j, start; - register long tmp; - register long *origsp; - - Tbl.str_flags |= STR_RANDOM; - srnd(time((long *) NULL) + getpid()); - origsp = seekpts; - for (j = 0; j <= Delim; j++) { - - /* - * get the starting place for the block - */ - - if (j == 0) - start = 0; - else - start = Tbl.str_delims[j - 1]; - - /* - * get the ending point - */ - - if (j == Delim) - cnt = Tbl.str_numstr; - else - cnt = Tbl.str_delims[j]; - - /* - * move things around randomly - */ - - for (seekpts = &origsp[start]; cnt > start; cnt--, seekpts++) { - i = rnd(cnt - start); - tmp = seekpts[0]; - seekpts[0] = seekpts[i]; - seekpts[i] = tmp; - } - } -} From aecac2f5d7679765b9ba36f7668acd78cc03a838 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 8 Sep 2014 18:07:59 -0700 Subject: [PATCH 05/16] Ported hangman. --- include/curses.h | 2 ++ rootfs.manifest | 6 ++++ src/games/Makefile | 5 ++- src/games/hangman/.gitignore | 1 + src/games/hangman/Makefile | 40 +++++++++++++---------- src/games/hangman/endgame.c | 5 +-- src/games/hangman/extern.c | 2 +- src/games/hangman/getguess.c | 63 ++++++++++++++++++++---------------- src/games/hangman/getword.c | 39 +++++++++++----------- src/games/hangman/hangman.h | 59 ++++++++++++++++++++------------- src/games/hangman/main.c | 29 +++++++++-------- src/games/hangman/playgame.c | 4 ++- src/games/hangman/prdata.c | 3 +- src/games/hangman/prman.c | 3 +- src/games/hangman/prword.c | 3 +- src/games/hangman/setup.c | 8 +++-- src/libcurses/mvprintw.c | 31 +++++++++++------- 17 files changed, 177 insertions(+), 126 deletions(-) create mode 100644 src/games/hangman/.gitignore diff --git a/include/curses.h b/include/curses.h index ba1e5e3..28bf21c 100644 --- a/include/curses.h +++ b/include/curses.h @@ -183,6 +183,8 @@ int wdeleteln (WINDOW *); void mvcur(int ly, int lx, int y, int x); void overwrite(WINDOW *win1, WINDOW *win2); void wclrtobot(WINDOW *win); +int mvprintw(int y, int x, char *fmt, ...); +int mvwprintw(WINDOW *win, int y, int x, char *fmt, ...); /* * Used to be in unctrl.h. diff --git a/rootfs.manifest b/rootfs.manifest index 4bca8b2..f83aa20 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -418,6 +418,7 @@ file /games/cfscores file /games/factor file /games/fish file /games/fortune +file /games/hangman file /games/morse file /games/number file /games/ppt @@ -630,9 +631,12 @@ file /libexec/smlrc default filemode 0444 dir /share +dir /share/dict dir /share/misc file /share/emg.keys file /share/re.help +file /share/dict/words +file /share/misc/more.help # # Files: /share/example @@ -725,6 +729,8 @@ file /share/man/cat6/battlestar.0 file /share/man/cat6/bcd.0 file /share/man/cat6/canfield.0 file /share/man/cat6/fish.0 +file /share/man/cat6/fortune.0 +file /share/man/cat6/hangman.0 file /share/man/cat6/number.0 file /share/man/cat6/rain.0 file /share/man/cat6/rogue.0 diff --git a/src/games/Makefile b/src/games/Makefile index 0242c77..4acdd55 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -12,9 +12,8 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ - cribbage fortune rogue sail trek -# TODO: hangman hunt mille monop phantasia quiz robots -# sail snake warp + cribbage fortune hangman rogue sail trek +# TODO: mille monop quiz robots snake # C programs that live in the current directory and do not need # explicit make lines. diff --git a/src/games/hangman/.gitignore b/src/games/hangman/.gitignore new file mode 100644 index 0000000..2469edc --- /dev/null +++ b/src/games/hangman/.gitignore @@ -0,0 +1 @@ +hangman diff --git a/src/games/hangman/Makefile b/src/games/hangman/Makefile index 99bd640..4c08ea3 100644 --- a/src/games/hangman/Makefile +++ b/src/games/hangman/Makefile @@ -1,22 +1,28 @@ -OBJS= endgame.o extern.o getguess.o getword.o main.o playgame.o \ - prdata.o prman.o prword.o setup.o -CFILES= endgame.c extern.c getguess.c getword.c main.c playgame.c \ - prdata.c prman.c prword.c setup.c -HDRS= hangman.h -CFLAGS= -O -LDFLAGS= -SEPFLAG= -i +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk -all: hangman +CFLAGS += -Werror -Wall -tags: $(HDRS) $(CFILES) - ctags $(HDRS) $(CFILES) +OBJS = endgame.o extern.o getguess.o getword.o main.o playgame.o \ + prdata.o prman.o prword.o setup.o +MAN = hangman.0 +LIBS = -lcurses -ltermcap -lc -install: hangman - install -s hangman $(DESTDIR)/usr/games/hangman - -hangman: $(OBJS) - $(CC) ${SEPFLAG} $(LDFLAGS) -o hangman $(OBJS) -lcurses -ltermlib +all: hangman $(MAN) + +hangman: $(OBJS) + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf + +$(MAN): hangman.6 + nroff -man $< > $@ clean: - rm -f $(OBJS) hangman ? core + rm -f *.o core hangman *.0 *.dis + +install: all + install hangman $(DESTDIR)/games/ + install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/ diff --git a/src/games/hangman/endgame.c b/src/games/hangman/endgame.c index 4bbe4cb..7a531d4 100644 --- a/src/games/hangman/endgame.c +++ b/src/games/hangman/endgame.c @@ -1,9 +1,10 @@ -# include "hangman.h" +#include "hangman.h" /* * endgame: * Do what's necessary at the end of the game */ +void endgame() { register char ch; @@ -24,7 +25,7 @@ endgame() leaveok(stdscr, FALSE); refresh(); if ((ch = readch()) == 'n') - die(); + die(0); else if (ch == 'y') break; mvaddstr(MESGY + 2, MESGX, "Please type 'y' or 'n'"); diff --git a/src/games/hangman/extern.c b/src/games/hangman/extern.c index 4b4fc47..7d3227f 100644 --- a/src/games/hangman/extern.c +++ b/src/games/hangman/extern.c @@ -1,4 +1,4 @@ -# include "hangman.h" +#include "hangman.h" bool Guessed[26]; diff --git a/src/games/hangman/getguess.c b/src/games/hangman/getguess.c index 3aa31b0..531dba0 100644 --- a/src/games/hangman/getguess.c +++ b/src/games/hangman/getguess.c @@ -1,9 +1,41 @@ -# include "hangman.h" +#include +#include "hangman.h" + +#ifndef CTRL +# define CTRL(c) (c & 037) +#endif + +/* + * readch; + * Read a character from the input + */ +int +readch() +{ + register int cnt; + auto char ch; + + cnt = 0; + for (;;) { + if (read(0, &ch, sizeof ch) <= 0) + { + if (++cnt > 100) + die(0); + } + else if (ch == CTRL('L')) { + wrefresh(curscr); + mvcur(0, 0, curscr->_cury, curscr->_curx); + } + else + return ch; + } +} /* * getguess: * Get another guess */ +void getguess() { register int i; @@ -23,8 +55,8 @@ getguess() else break; } - else if (ch == CTRL(D)) - die(); + else if (ch == CTRL('D')) + die(0); else mvprintw(MESGY, MESGX, "Not a valid guess: '%s'", unctrl(ch)); @@ -43,28 +75,3 @@ getguess() if (!correct) Errors++; } - -/* - * readch; - * Read a character from the input - */ -readch() -{ - register int cnt, r; - auto char ch; - - cnt = 0; - for (;;) { - if (read(0, &ch, sizeof ch) <= 0) - { - if (++cnt > 100) - die(); - } - else if (ch == CTRL(L)) { - wrefresh(curscr); - mvcur(0, 0, curscr->_cury, curscr->_curx); - } - else - return ch; - } -} diff --git a/src/games/hangman/getword.c b/src/games/hangman/getword.c index b28c0ce..0fb6545 100644 --- a/src/games/hangman/getword.c +++ b/src/games/hangman/getword.c @@ -1,15 +1,26 @@ -# include "hangman.h" +#include +#include +#include "hangman.h" -# if pdp11 -# define RN (((off_t) rand() << 16) | (off_t) rand()) -# else -# define RN rand() -# endif +/* + * abs: + * Return the absolute value of an integer + */ +off_t +offabs(i) +off_t i; +{ + if (i < 0) + return -(off_t) i; + else + return (off_t) i; +} /* * getword: * Get a valid word out of the dictionary file */ +void getword() { register FILE *inf; @@ -17,7 +28,7 @@ getword() inf = Dict; for (;;) { - fseek(inf, abs(RN % Dict_size), 0); + fseek(inf, offabs(random() % Dict_size), 0); if (fgets(Word, BUFSIZ, inf) == NULL) continue; if (fgets(Word, BUFSIZ, inf) == NULL) @@ -39,17 +50,3 @@ cont: ; } *gp = '\0'; } - -/* - * abs: - * Return the absolute value of an integer - */ -off_t -abs(i) -off_t i; -{ - if (i < 0) - return -(off_t) i; - else - return (off_t) i; -} diff --git a/src/games/hangman/hangman.h b/src/games/hangman/hangman.h index 78af604..05011e4 100644 --- a/src/games/hangman/hangman.h +++ b/src/games/hangman/hangman.h @@ -1,26 +1,30 @@ -# include -# include -# include -# include -# include +#include +#include +#include +#include +#include +#include -# define MINLEN 6 -# define MAXERRS 7 -# define DICT "/usr/dict/words" - -# define MESGY 12 -# define MESGX 0 -# define PROMPTY 11 -# define PROMPTX 0 -# define KNOWNY 10 -# define KNOWNX 1 -# define NUMBERY 4 -# define NUMBERX (COLS - 1 - 26) -# define AVGY 5 -# define AVGX (COLS - 1 - 26) -# define GUESSY 2 -# define GUESSX (COLS - 1 - 26) +#define MINLEN 6 +#define MAXERRS 7 +#ifdef CROSS +# define DICT "/usr/local/share/dict/words" +#else +# define DICT "/share/dict/words" +#endif +#define MESGY 12 +#define MESGX 0 +#define PROMPTY 11 +#define PROMPTX 0 +#define KNOWNY 10 +#define KNOWNX 1 +#define NUMBERY 4 +#define NUMBERX (COLS - 1 - 26) +#define AVGY 5 +#define AVGX (COLS - 1 - 26) +#define GUESSY 2 +#define GUESSX (COLS - 1 - 26) typedef struct { short y, x; @@ -41,6 +45,15 @@ extern FILE *Dict; extern off_t Dict_size; -int die(); +void die(int); -off_t abs(); +off_t offabs(off_t); +void prman(void); +void prword(void); +void prdata(void); +void setup(void); +void playgame(void); +void getword(void); +void getguess(void); +void endgame(void); +int readch(void); diff --git a/src/games/hangman/main.c b/src/games/hangman/main.c index 5a03d83..3bfc280 100644 --- a/src/games/hangman/main.c +++ b/src/games/hangman/main.c @@ -1,9 +1,22 @@ -# include "hangman.h" +#include +#include "hangman.h" + +/* + * die: + * Die properly. + */ +void die(int sig) +{ + mvcur(0, COLS - 1, LINES - 1, 0); + endwin(); + putchar('\n'); + exit(0); +} /* * This game written by Ken Arnold. */ -main() +int main() { initscr(); signal(SIGINT, die); @@ -15,15 +28,3 @@ main() } /* NOTREACHED */ } - -/* - * die: - * Die properly. - */ -die() -{ - mvcur(0, COLS - 1, LINES - 1, 0); - endwin(); - putchar('\n'); - exit(0); -} diff --git a/src/games/hangman/playgame.c b/src/games/hangman/playgame.c index d0ca809..74166e1 100644 --- a/src/games/hangman/playgame.c +++ b/src/games/hangman/playgame.c @@ -1,9 +1,11 @@ -# include "hangman.h" +#include +#include "hangman.h" /* * playgame: * play a game */ +void playgame() { register bool *bp; diff --git a/src/games/hangman/prdata.c b/src/games/hangman/prdata.c index 8874bca..1bdcd2b 100644 --- a/src/games/hangman/prdata.c +++ b/src/games/hangman/prdata.c @@ -1,9 +1,10 @@ -# include "hangman.h" +#include "hangman.h" /* * prdata: * Print out the current guesses */ +void prdata() { register bool *bp; diff --git a/src/games/hangman/prman.c b/src/games/hangman/prman.c index 4d1d976..eaba163 100644 --- a/src/games/hangman/prman.c +++ b/src/games/hangman/prman.c @@ -1,10 +1,11 @@ -# include "hangman.h" +#include "hangman.h" /* * prman: * Print out the man appropriately for the give number * of incorrect guesses. */ +void prman() { register int i; diff --git a/src/games/hangman/prword.c b/src/games/hangman/prword.c index 1770028..29a8072 100644 --- a/src/games/hangman/prword.c +++ b/src/games/hangman/prword.c @@ -1,9 +1,10 @@ -# include "hangman.h" +#include "hangman.h" /* * prword: * Print out the current state of the word */ +void prword() { move(KNOWNY, KNOWNX + sizeof "Word: "); diff --git a/src/games/hangman/setup.c b/src/games/hangman/setup.c index bda8511..73353e2 100644 --- a/src/games/hangman/setup.c +++ b/src/games/hangman/setup.c @@ -1,9 +1,13 @@ -# include "hangman.h" +#include +#include +#include +#include "hangman.h" /* * setup: * Set up the strings on the screen. */ +void setup() { register char **sp; @@ -24,7 +28,7 @@ setup() addstr(*sp); } - srand(time(NULL) + getpid()); + srandom(time(NULL) + getpid()); if ((Dict = fopen(DICT, "r")) == NULL) { perror(DICT); endwin(); diff --git a/src/libcurses/mvprintw.c b/src/libcurses/mvprintw.c index 1766cff..a13fa53 100644 --- a/src/libcurses/mvprintw.c +++ b/src/libcurses/mvprintw.c @@ -11,20 +11,29 @@ * */ int -mvprintw(y, x, fmt, args) - reg int y, x; - char *fmt; - int args; +mvprintw(int y, int x, char *fmt, ...) { - return move(y, x) == OK ? _sprintw(stdscr, fmt, &args) : ERR; + va_list args; + int ret; + + if (move(y, x) != OK) + return ERR; + va_start (args, fmt); + ret = _sprintw (stdscr, fmt, args); + va_end (args); + return ret; } int -mvwprintw(win, y, x, fmt, args) - reg WINDOW *win; - reg int y, x; - char *fmt; - int args; +mvwprintw(WINDOW *win, int y, int x, char *fmt, ...) { - return wmove(win, y, x) == OK ? _sprintw(win, fmt, &args) : ERR; + va_list args; + int ret; + + if (wmove(win, y, x) != OK) + return ERR; + va_start (args, fmt); + ret = _sprintw (win, fmt, args); + va_end (args); + return ret; } From e4e9ff1ef4a0ad000312e735eecfffa3ac6afd97 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 8 Sep 2014 19:19:18 -0700 Subject: [PATCH 06/16] Ported mille game. --- rootfs.manifest | 2 + src/games/Makefile | 4 +- src/games/mille/.gitignore | 1 + src/games/mille/Makefile | 87 +++------- src/games/mille/comp.c | 10 +- src/games/mille/end.c | 12 +- src/games/mille/extern.c | 5 +- src/games/mille/init.c | 22 ++- src/games/mille/mille.c | 53 +++--- src/games/mille/mille.h | 213 +++++++++++++---------- src/games/mille/misc.c | 82 ++++++--- src/games/mille/move.c | 347 +++++++++++++++++++------------------ src/games/mille/print.c | 82 ++++----- src/games/mille/roll.c | 9 +- src/games/mille/save.c | 60 +++---- src/games/mille/types.c | 10 +- src/games/mille/varpush.c | 27 ++- 17 files changed, 537 insertions(+), 489 deletions(-) create mode 100644 src/games/mille/.gitignore diff --git a/rootfs.manifest b/rootfs.manifest index f83aa20..2c5fbe1 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -419,6 +419,7 @@ file /games/factor file /games/fish file /games/fortune file /games/hangman +file /games/mille file /games/morse file /games/number file /games/ppt @@ -731,6 +732,7 @@ file /share/man/cat6/canfield.0 file /share/man/cat6/fish.0 file /share/man/cat6/fortune.0 file /share/man/cat6/hangman.0 +file /share/man/cat6/mille.0 file /share/man/cat6/number.0 file /share/man/cat6/rain.0 file /share/man/cat6/rogue.0 diff --git a/src/games/Makefile b/src/games/Makefile index 4acdd55..eb97ec0 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -12,8 +12,8 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ - cribbage fortune hangman rogue sail trek -# TODO: mille monop quiz robots snake + cribbage fortune hangman mille rogue sail trek +# TODO: monop quiz robots snake # C programs that live in the current directory and do not need # explicit make lines. diff --git a/src/games/mille/.gitignore b/src/games/mille/.gitignore new file mode 100644 index 0000000..712ad3d --- /dev/null +++ b/src/games/mille/.gitignore @@ -0,0 +1 @@ +mille diff --git a/src/games/mille/Makefile b/src/games/mille/Makefile index 4f40253..509cf3f 100644 --- a/src/games/mille/Makefile +++ b/src/games/mille/Makefile @@ -1,75 +1,32 @@ # # mille bourne game makefile # -HEADERS=mille.h -CFILES= comp.c end.c extern.c init.c mille.c misc.c move.c print.c \ - roll.c save.c types.c varpush.c -OBJS= comp.o end.o extern.o init.o mille.o misc.o move.o print.o \ - roll.o save.o types.o varpush.o -POBJS= comp.po end.po extern.po init.po mille.po misc.po move.po \ - roll.po print.po save.po types.po varpush.po -# CRL= /jb/ingres/arnold/=lib/=curses/crlib -# CRL= =curses/screen/libcurses.a -CRL= -# L= -ltermlib -L= -lcurses -ltermlib -LIBS= ${CRL} ${L} -DEFS= -CFLAGS= -O ${DEFS} -SEPFLAG= -i -LDFLAGS= -DESTDIR= -BINDIR= /usr/games -.SUFFIXES: .po .i +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk +#CFLAGS = -O -DCROSS -Werror -Wall -.c.po: - rm -f x.c ; ln $*.c x.c - ${CC} ${CFLAGS} -p -c x.c - mv x.o $*.po +#CFLAGS += -Werror -Wall -.c.i: - ${CC} ${LDFLAGS} -P $*.c +OBJS = comp.o end.o extern.o init.o mille.o misc.o move.o print.o \ + roll.o save.o types.o varpush.o +MAN = mille.0 +LIBS = -lcurses -ltermcap -lc -a.out: ${OBJS} ${CRL} - ${CC} ${SEPFLAG} ${LDFLAGS} ${OBJS} ${LIBS} +all: mille $(MAN) -mille: ${OBJS} ${CRL} - ${CC} ${SEPFLAG} ${CFLAGS} -o mille ${OBJS} ${LIBS} +mille: $(OBJS) + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf -install: mille - install -s mille ${DESTDIR}${BINDIR} - -pmb: ${POBJS} ../pcrlib - ${CC} ${SEPFLAG} ${CFLAGS} -p -o pmb ${POBJS} ../pcrlib -ltermlib - -mille.po: mille.c - rm -f x.c ; ln mille.c x.c - ${CC} ${CFLAGS} -DPROF -p -c x.c - mv x.o mille.po - -table: table.o extern.o - ${CC} ${SEPFLAG} ${CFLAGS} -i -o table table.o extern.o - -readdump: readdump.o extern.o varpush.o - ${CC} ${SEPFLAG} ${CFLAGS} -i -o readdump readdump.o extern.o varpush.o - -ctags: - ctags ${HEADERS} ${CFILES} - ed - tags < :ctfix - sort tags -o tags - -lint: - lint -hxb ${DEFS} ${CFILES} ${L} > lint.out - -mille.ar: - ar ruv mille.ar Makefile tags ${HEADERS} ${CFILES} - -tar: - tar rvf /dev/rmt0 Makefile tags :ctfix ${HEADERS} ${CFILES} - -lpr: - pr Makefile ${HEADERS} ${CFILES} tags | lpr ; lpq +$(MAN): mille.6 + nroff -man $< > $@ clean: - rm -f ${OBJS} ${POBJS} core ? a.out errs mille lint.out mille.ar \ - tags pmb + rm -f *.o core mille *.0 *.dis + +install: all + install mille $(DESTDIR)/games/ + install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/ diff --git a/src/games/mille/comp.c b/src/games/mille/comp.c index c5faa90..c0f5d3e 100644 --- a/src/games/mille/comp.c +++ b/src/games/mille/comp.c @@ -1,11 +1,12 @@ -# include "mille.h" +#include "mille.h" /* * @(#)comp.c 1.1 (Berkeley) 4/1/82 */ -# define V_VALUABLE 40 +#define V_VALUABLE 40 +void calcmove() { register CARD card; @@ -33,7 +34,8 @@ calcmove() switch (card) { case C_STOP: case C_CRASH: case C_FLAT: case C_EMPTY: - if (playit[i] = canplay(pp, op, card)) + playit[i] = canplay(pp, op, card); + if (playit[i]) canstop = TRUE; goto norm; case C_LIMIT: @@ -350,6 +352,7 @@ play_it: mvprintw(MOVE_Y + 2, MOVE_X, "%16s", C_name[pp->hand[Card_no]]); } +int onecard(pp) register PLAY *pp; { @@ -382,6 +385,7 @@ register PLAY *pp; return FALSE; } +int canplay(pp, op, card) register PLAY *pp, *op; register CARD card; diff --git a/src/games/mille/end.c b/src/games/mille/end.c index 34ca469..2c58d58 100644 --- a/src/games/mille/end.c +++ b/src/games/mille/end.c @@ -8,10 +8,11 @@ * print out the score as if it was final, and add the totals for * the end-of-games points to the user who deserves it (if any). */ +void finalscore(pp) -reg PLAY *pp; { +PLAY *pp; { - reg int temp, tot, num; + int temp, tot, num; if (pp->was_finished == Finished) return; @@ -45,13 +46,14 @@ reg PLAY *pp; { } } -# ifdef EXTRAP +#ifdef EXTRAP static int Last_tot[2]; /* last tot used for extrapolate */ /* * print out the score as if it was final, and add the totals for * the end-of-games points to the user who deserves it (if any). */ +void extrapolate(pp) reg PLAY *pp; { @@ -96,6 +98,7 @@ reg PLAY *pp; { Last_tot[num] = tot; } +void undoex() { reg PLAY *pp; @@ -107,5 +110,4 @@ undoex() { pp->hand_tot -= Last_tot[i++]; } } -# endif - +#endif diff --git a/src/games/mille/extern.c b/src/games/mille/extern.c index d762c81..b16781a 100644 --- a/src/games/mille/extern.c +++ b/src/games/mille/extern.c @@ -25,7 +25,7 @@ char *C_fmt = "%-18.18s", /* format for printing cards */ "Flat Tire", "Accident", "Stop", - "Speed Limit", + "Speed Limit", "Gasoline", "Spare Tire", "Repairs", @@ -71,7 +71,7 @@ int Card_no, /* Card number for current move */ 1, /* C_RIGHT_WAY */ 0 /* C_INIT */ }; - Numneed[NUM_CARDS] = { /* number of cards needed per hand */ +int Numneed[NUM_CARDS] = { /* number of cards needed per hand */ 0, /* C_25 */ 0, /* C_50 */ 0, /* C_75 */ @@ -132,4 +132,3 @@ PLAY Player[2]; /* Player descriptions */ WINDOW *Board, /* Playing field screen */ *Miles, /* Mileage screen */ *Score; /* Score screen */ - diff --git a/src/games/mille/init.c b/src/games/mille/init.c index 32e90e9..5f3d0af 100644 --- a/src/games/mille/init.c +++ b/src/games/mille/init.c @@ -1,14 +1,15 @@ -# include "mille.h" +#include "mille.h" +#include /* * @(#)init.c 1.1 (Berkeley) 4/1/82 */ - +void init() { - reg PLAY *pp; - reg int i, j; - reg CARD card; + PLAY *pp; + int i, j; + CARD card; bzero(Numseen, sizeof Numseen); Numgos = 0; @@ -47,10 +48,11 @@ init() { End = 700; } +void shuffle() { - reg int i, r; - reg CARD temp; + int i, r; + CARD temp; for (i = 0; i < DECK_SZ; i++) { r = roll(1, DECK_SZ) - 1; @@ -65,6 +67,7 @@ shuffle() { Topcard = &Deck[DECK_SZ]; } +void newboard() { register int i; @@ -123,10 +126,11 @@ newboard() { newscore(); } +void newscore() { - reg int i, new; - register PLAY *pp; + int i, new; + register PLAY *pp = 0; static int was_full = -1; static int last_win = -1; diff --git a/src/games/mille/mille.c b/src/games/mille/mille.c index 55d9673..4561d04 100644 --- a/src/games/mille/mille.c +++ b/src/games/mille/mille.c @@ -1,23 +1,38 @@ -# include "mille.h" -# include -# ifdef attron -# include -# endif attron +#include "mille.h" +#include +#include +#include +#include +#ifdef attron +# include +#endif /* * @(#)mille.c 1.3.1 (2.11BSD GTE) 1/16/95 */ -int rub(); - char _sobuf[BUFSIZ]; -main(ac, av) -reg int ac; -reg char *av[]; { +/* + * Routine to trap rubouts, and make sure they really want to + * quit. + */ +void +rub(int sig) { - reg bool restore; - double avs[3]; + signal(SIGINT, SIG_IGN); + if (getyn(REALLYPROMPT)) + die(); + signal(SIGINT, rub); +} + +int +main(ac, av) +int ac; +char *av[]; { + + bool restore; + double avs[3]; if (strcmp(av[0], "a.out") == 0) { outf = fopen("q", "w"); @@ -108,21 +123,10 @@ reg char *av[]; { } } -/* - * Routine to trap rubouts, and make sure they really want to - * quit. - */ -rub() { - - signal(SIGINT, SIG_IGN); - if (getyn(REALLYPROMPT)) - die(); - signal(SIGINT, rub); -} - /* * Time to go beddy-by */ +void die() { signal(SIGINT, SIG_IGN); @@ -132,4 +136,3 @@ die() { endwin(); exit(1); } - diff --git a/src/games/mille/mille.h b/src/games/mille/mille.h index 433e080..4053b9b 100644 --- a/src/games/mille/mille.h +++ b/src/games/mille/mille.h @@ -1,5 +1,5 @@ -# include -# include "curses.h" +#include +#include "curses.h" /* * @(#)mille.h 1.1 (Berkeley) 4/1/82 @@ -9,125 +9,117 @@ * Miscellaneous constants */ -# define unsgn unsigned -# define CARD short +#define unsgn unsigned +#define CARD short -# define ARNOLD 214 /* my uid */ +#define ARNOLD 214 /* my uid */ -# define GURP 28672 /* bad uid */ -# define MAXUSERS 35 /* max # of users for startup */ -# define HAND_SZ 7 /* number of cards in a hand */ -# define DECK_SZ 101 /* number of cards in decks */ -# define NUM_SAFE 4 /* number of saftey cards */ -# define NUM_MILES 5 /* number of milestones types */ -# define NUM_CARDS 20 /* number of types of cards */ -# define BOARD_Y 17 /* size of board screen */ -# define BOARD_X 40 -# define MILES_Y 7 /* size of mileage screen */ -# define MILES_X 80 -# define SCORE_Y 17 /* size of score screen */ -# define SCORE_X 40 -# define MOVE_Y 10 /* Where to print move prompt */ -# define MOVE_X 20 -# define ERR_Y 15 /* Where to print errors */ -# define ERR_X 5 -# define EXT_Y 4 /* Where to put Extension */ -# define EXT_X 9 +#define GURP 28672 /* bad uid */ +#define MAXUSERS 35 /* max # of users for startup */ +#define HAND_SZ 7 /* number of cards in a hand */ +#define DECK_SZ 101 /* number of cards in decks */ +#define NUM_SAFE 4 /* number of saftey cards */ +#define NUM_MILES 5 /* number of milestones types */ +#define NUM_CARDS 20 /* number of types of cards */ +#define BOARD_Y 17 /* size of board screen */ +#define BOARD_X 40 +#define MILES_Y 7 /* size of mileage screen */ +#define MILES_X 80 +#define SCORE_Y 17 /* size of score screen */ +#define SCORE_X 40 +#define MOVE_Y 10 /* Where to print move prompt */ +#define MOVE_X 20 +#define ERR_Y 15 /* Where to print errors */ +#define ERR_X 5 +#define EXT_Y 4 /* Where to put Extension */ +#define EXT_X 9 -# define PLAYER 0 -# define COMP 1 +#define PLAYER 0 +#define COMP 1 -# define W_SMALL 0 /* Small (initial) window */ -# define W_FULL 1 /* Full (final) window */ +#define W_SMALL 0 /* Small (initial) window */ +#define W_FULL 1 /* Full (final) window */ /* * Move types */ -# define M_DISCARD 0 -# define M_DRAW 1 -# define M_PLAY 2 -# define M_ORDER 3 +#define M_DISCARD 0 +#define M_DRAW 1 +#define M_PLAY 2 +#define M_ORDER 3 /* * Scores */ -# define SC_SAFETY 100 -# define SC_ALL_SAFE 300 -# define SC_COUP 300 -# define SC_TRIP 400 -# define SC_SAFE 300 -# define SC_DELAY 300 -# define SC_EXTENSION 200 -# define SC_SHUT_OUT 500 +#define SC_SAFETY 100 +#define SC_ALL_SAFE 300 +#define SC_COUP 300 +#define SC_TRIP 400 +#define SC_SAFE 300 +#define SC_DELAY 300 +#define SC_EXTENSION 200 +#define SC_SHUT_OUT 500 /* * safety descriptions */ -# define S_UNKNOWN 0 /* location of safety unknown */ -# define S_IN_HAND 1 /* safety in player's hand */ -# define S_PLAYED 2 /* safety has been played */ -# define S_GAS_SAFE 0 /* Gas safety card index */ -# define S_SPARE_SAFE 1 /* Tire safety card index */ -# define S_DRIVE_SAFE 2 /* Driveing safety card index */ -# define S_RIGHT_WAY 3 /* Right-of-Way card index */ -# define S_CONV 15 /* conversion from C_ to S_ */ +#define S_UNKNOWN 0 /* location of safety unknown */ +#define S_IN_HAND 1 /* safety in player's hand */ +#define S_PLAYED 2 /* safety has been played */ +#define S_GAS_SAFE 0 /* Gas safety card index */ +#define S_SPARE_SAFE 1 /* Tire safety card index */ +#define S_DRIVE_SAFE 2 /* Driveing safety card index */ +#define S_RIGHT_WAY 3 /* Right-of-Way card index */ +#define S_CONV 15 /* conversion from C_ to S_ */ /* * card numbers */ -# define C_INIT -1 -# define C_25 0 -# define C_50 1 -# define C_75 2 -# define C_100 3 -# define C_200 4 -# define C_EMPTY 5 -# define C_FLAT 6 -# define C_CRASH 7 -# define C_STOP 8 -# define C_LIMIT 9 -# define C_GAS 10 -# define C_SPARE 11 -# define C_REPAIRS 12 -# define C_GO 13 -# define C_END_LIMIT 14 -# define C_GAS_SAFE 15 -# define C_SPARE_SAFE 16 -# define C_DRIVE_SAFE 17 -# define C_RIGHT_WAY 18 +#define C_INIT -1 +#define C_25 0 +#define C_50 1 +#define C_75 2 +#define C_100 3 +#define C_200 4 +#define C_EMPTY 5 +#define C_FLAT 6 +#define C_CRASH 7 +#define C_STOP 8 +#define C_LIMIT 9 +#define C_GAS 10 +#define C_SPARE 11 +#define C_REPAIRS 12 +#define C_GO 13 +#define C_END_LIMIT 14 +#define C_GAS_SAFE 15 +#define C_SPARE_SAFE 16 +#define C_DRIVE_SAFE 17 +#define C_RIGHT_WAY 18 /* * prompt types */ -# define MOVEPROMPT 0 -# define REALLYPROMPT 1 -# define ANOTHERHANDPROMPT 2 -# define ANOTHERGAMEPROMPT 3 -# define SAVEGAMEPROMPT 4 -# define SAMEFILEPROMPT 5 -# define FILEPROMPT 6 -# define EXTENSIONPROMPT 7 -# define OVERWRITEFILEPROMPT 8 +#define MOVEPROMPT 0 +#define REALLYPROMPT 1 +#define ANOTHERHANDPROMPT 2 +#define ANOTHERGAMEPROMPT 3 +#define SAVEGAMEPROMPT 4 +#define SAMEFILEPROMPT 5 +#define FILEPROMPT 6 +#define EXTENSIONPROMPT 7 +#define OVERWRITEFILEPROMPT 8 -# ifdef SYSV -# define srandom(x) srand(x) -# define random() rand() - -# ifndef attron -# define erasechar() _tty.c_cc[VERASE] -# define killchar() _tty.c_cc[VKILL] -# endif -# else -# ifndef erasechar -# define erasechar() _tty.sg_erase -# define killchar() _tty.sg_kill -# endif -# endif SYSV +#ifndef erasechar +# define erasechar() _tty.c_cc[VERASE] +#endif +#ifndef killchar +# define killchar() _tty.c_cc[VKILL] +#endif typedef struct { bool coups[NUM_SAFE]; @@ -162,11 +154,11 @@ typedef struct { * macros */ -# define other(x) (1 - x) -# define nextplay() (Play = other(Play)) -# define nextwin(x) (1 - x) -# define opposite(x) (Opposite[x]) -# define issafety(x) (x >= C_GAS_SAFE) +#define other(x) (1 - x) +#define nextplay() (Play = other(Play)) +#define nextwin(x) (1 - x) +#define opposite(x) (Opposite[x]) +#define issafety(x) (x >= C_GAS_SAFE) /* * externals @@ -193,3 +185,32 @@ extern WINDOW *Board, *Miles, *Score; */ CARD getcard(); +int canplay(PLAY *pp, PLAY *op, CARD card); +int check_ext(bool forcomp); +int onecard(PLAY *pp); +int roll(int ndie, int nsides); +int isrepair(CARD card); +int safety(CARD card); +int getyn(int promptno); +int rest_f(char *file); +int readch(void); +int save(void); +int error(char *str, int arg); + +void getmove(void); +void account(CARD card); +void sort(CARD *hand); +void die(void); +void newscore(void); +void shuffle(void); +void init(void); +void newboard(void); +void prboard(void); +void domove(void); +void check_more(void); +void prompt(int promptno); +void calcmove(void); +void rub(int sig); +void prscore(bool for_real); +void finalscore(PLAY *pp); +void varpush(int file, int (*func)()); diff --git a/src/games/mille/misc.c b/src/games/mille/misc.c index 0dc04d1..322ed23 100644 --- a/src/games/mille/misc.c +++ b/src/games/mille/misc.c @@ -1,14 +1,16 @@ -#include "mille.h" +#include "mille.h" #ifndef unctrl -#include "unctrl.h" +# include "unctrl.h" #endif -# include +#include +#include +#include -# ifdef attron -# include -# define _tty cur_term->Nttyb -# endif attron +#ifdef attron +# include +# define _tty cur_term->Nttyb +#endif /* * @(#)misc.c 1.2 (Berkeley) 3/28/83 @@ -17,6 +19,7 @@ #define NUMSAFE 4 /* VARARGS1 */ +int error(str, arg) char *str; { @@ -32,7 +35,7 @@ char *str; CARD getcard() { - reg int c, c1; + int c, c1; for (;;) { while ((c = readch()) == '\n' || c == '\r' || c == ' ') @@ -69,17 +72,19 @@ getcard() clrtoeol(); refresh(); goto cont; - } - else - write(0, "", 1); + } else { + if (write(0, "", 1) != 1) + /*ignore*/; + } return c; } cont: ; } } +int check_ext(forcomp) -reg bool forcomp; { +bool forcomp; { if (End == 700) @@ -98,8 +103,8 @@ done: } } else { - reg PLAY *pp, *op; - reg int i, safe, miles; + PLAY *pp, *op; + int i, safe, miles; pp = &Player[COMP]; op = &Player[PLAYER]; @@ -119,7 +124,7 @@ done: goto extend; for (miles = 0, i = 0; i < HAND_SZ; i++) if ((safe = pp->hand[i]) <= C_200) - miles += Value[safe]; + miles += Value[safe]; if (miles + (Topcard - Deck) * 3 > 1000) goto extend; goto done; @@ -132,10 +137,11 @@ done: * Get a yes or no answer to the given question. Saves are * also allowed. Return TRUE if the answer was yes, FALSE if no. */ +int getyn(promptno) register int promptno; { - reg char c; + char c; Saved = FALSE; for (;;) { @@ -168,11 +174,24 @@ register int promptno; { } } +static void +flush_input() +{ +# ifdef TIOCFLUSH + static int ioctl_args = FREAD; + + (void) ioctl(fileno(stdin), TIOCFLUSH, &ioctl_args); +# else + fflush(stdin); +# endif +} + /* * Check to see if more games are desired. If not, and game * came from a saved file, make sure that they don't want to restore * it. Exit appropriately. */ +void check_more() { flush_input(); @@ -201,9 +220,10 @@ check_more() { die(); } +int readch() { - reg int cnt; + int cnt; static char c; for (cnt = 0; read(0, &c, 1) <= 0; cnt++) @@ -212,13 +232,21 @@ readch() return c; } -flush_input() -{ -# ifdef TIOCFLUSH - static int ioctl_args = FREAD; - - (void) ioctl(fileno(stdin), TIOCFLUSH, &ioctl_args); -# else - fflush(stdin); -# endif -} +#ifdef CROSS +/* + * define unctrl codes for each character + * + */ +char *_unctrl[] = { /* unctrl codes for ttys */ + "^@", "^A", "^B", "^C", "^D", "^E", "^F", "^G", "^H", "^I", "^J", "^K", + "^L", "^M", "^N", "^O", "^P", "^Q", "^R", "^S", "^T", "^U", "^V", "^W", + "^X", "^Y", "^Z", "^[", "^\\", "^]", "^~", "^_", + " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", + ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", + "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", + "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", + "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", + "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "^?" +}; +#endif diff --git a/src/games/mille/move.c b/src/games/mille/move.c index 3be57fc..bdd604e 100644 --- a/src/games/mille/move.c +++ b/src/games/mille/move.c @@ -1,12 +1,14 @@ -#include "mille.h" +#include "mille.h" +#include +#include #ifndef unctrl -#include "unctrl.h" +# include "unctrl.h" #endif -# ifdef attron -# include -# define _tty cur_term->Nttyb -# endif attron +#ifdef attron +# include +# define _tty cur_term->Nttyb +#endif /* * @(#)move.c 1.2 (Berkeley) 3/28/83 @@ -19,136 +21,35 @@ char *Movenames[] = { "M_DISCARD", "M_DRAW", "M_PLAY", "M_ORDER" }; -domove() -{ - reg PLAY *pp; - reg int i, j; - reg bool goodplay; - - pp = &Player[Play]; - if (Play == PLAYER) - getmove(); - else - calcmove(); - Next = FALSE; - goodplay = TRUE; - switch (Movetype) { - case M_DISCARD: - if (haspicked(pp)) { - if (pp->hand[Card_no] == C_INIT) - if (Card_no == 6) - Finished = TRUE; - else - error("no card there"); - else { - if (issafety(pp->hand[Card_no])) { - error("discard a safety?"); - goodplay = FALSE; - break; - } - Discard = pp->hand[Card_no]; - pp->hand[Card_no] = C_INIT; - Next = TRUE; - if (Play == PLAYER) - account(Discard); - } - } - else - error("must pick first"); - break; - case M_PLAY: - goodplay = playcard(pp); - break; - case M_DRAW: - Card_no = 0; - if (Topcard <= Deck) - error("no more cards"); - else if (haspicked(pp)) - error("already picked"); - else { - pp->hand[0] = *--Topcard; - if (Debug) - fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]); -acc: - if (Play == COMP) { - account(*Topcard); - if (issafety(*Topcard)) - pp->safety[*Topcard-S_CONV] = S_IN_HAND; - } - if (pp->hand[1] == C_INIT && Topcard > Deck) { - Card_no = 1; - pp->hand[1] = *--Topcard; - if (Debug) - fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]); - goto acc; - } - pp->new_battle = FALSE; - pp->new_speed = FALSE; - } - break; - - case M_ORDER: - break; - } - /* - * move blank card to top by one of two methods. If the - * computer's hand was sorted, the randomness for picking - * between equally valued cards would be lost - */ - if (Order && Movetype != M_DRAW && goodplay && pp == &Player[PLAYER]) - sort(pp->hand); - else - for (i = 1; i < HAND_SZ; i++) - if (pp->hand[i] == C_INIT) { - for (j = 0; pp->hand[j] == C_INIT; j++) - if (j >= HAND_SZ) { - j = 0; - break; - } - pp->hand[i] = pp->hand[j]; - pp->hand[j] = C_INIT; - } - if (Topcard <= Deck) - check_go(); - if (Next) - nextplay(); -} - /* - * Check and see if either side can go. If they cannot, - * the game is over + * return whether or not the player has picked */ -check_go() { +static int +haspicked(pp) +PLAY *pp; { - reg CARD card; - reg PLAY *pp, *op; - reg int i; + int card; - for (pp = Player; pp < &Player[2]; pp++) { - op = (pp == &Player[COMP] ? &Player[PLAYER] : &Player[COMP]); - for (i = 0; i < HAND_SZ; i++) { - card = pp->hand[i]; - if (issafety(card) || canplay(pp, op, card)) { - if (Debug) { - fprintf(outf, "CHECK_GO: can play %s (%d), ", C_name[card], card); - fprintf(outf, "issafety(card) = %d, ", issafety(card)); - fprintf(outf, "canplay(pp, op, card) = %d\n", canplay(pp, op, card)); - } - return; - } - else if (Debug) - fprintf(outf, "CHECK_GO: cannot play %s\n", - C_name[card]); - } + if (Topcard <= Deck) + return TRUE; + switch (pp->hand[Card_no]) { + case C_GAS_SAFE: case C_SPARE_SAFE: + case C_DRIVE_SAFE: case C_RIGHT_WAY: + card = 1; + break; + default: + card = 0; + break; } - Finished = TRUE; + return (pp->hand[card] != C_INIT); } +static int playcard(pp) -reg PLAY *pp; +PLAY *pp; { - reg int v; - reg CARD card; + int v; + CARD card; /* * check and see if player has picked @@ -157,7 +58,7 @@ reg PLAY *pp; default: if (!haspicked(pp)) mustpick: - return error("must pick first"); + return error("must pick first", 0); case C_GAS_SAFE: case C_SPARE_SAFE: case C_DRIVE_SAFE: case C_RIGHT_WAY: break; @@ -170,16 +71,16 @@ mustpick: switch (card) { case C_200: if (pp->nummiles[C_200] == 2) - return error("only two 200's per hand"); + return error("only two 200's per hand", 0); case C_100: case C_75: if (pp->speed == C_LIMIT) - return error("limit of 50"); + return error("limit of 50", 0); case C_50: if (pp->mileage + Value[card] > End) return error("puts you over %d", End); case C_25: if (!pp->can_go) - return error("cannot move now"); + return error("cannot move now", 0); pp->nummiles[card]++; v = Value[card]; pp->total += v; @@ -190,7 +91,7 @@ mustpick: case C_GAS: case C_SPARE: case C_REPAIRS: if (pp->battle != opposite(card)) - return error("can't play \"%s\"", C_name[card]); + return error("can't play \"%s\"", (int)C_name[card]); pp->battle = card; if (pp->safety[S_RIGHT_WAY] == S_PLAYED) pp->can_go = TRUE; @@ -200,14 +101,14 @@ mustpick: if (pp->battle != C_INIT && pp->battle != C_STOP && !isrepair(pp->battle)) return error("cannot play \"Go\" on a \"%s\"", - C_name[pp->battle]); + (int)C_name[pp->battle]); pp->battle = C_GO; pp->can_go = TRUE; break; case C_END_LIMIT: if (pp->speed != C_LIMIT) - return error("not limited"); + return error("not limited", 0); pp->speed = C_END_LIMIT; break; @@ -215,10 +116,10 @@ mustpick: case C_STOP: pp = &Player[other(Play)]; if (!pp->can_go) - return error("opponent cannot go"); + return error("opponent cannot go", 0); else if (pp->safety[safety(card) - S_CONV] == S_PLAYED) protected: - return error("opponent is protected"); + return error("opponent is protected", 0); pp->battle = card; pp->new_battle = TRUE; pp->can_go = FALSE; @@ -228,7 +129,7 @@ protected: case C_LIMIT: pp = &Player[other(Play)]; if (pp->speed == C_LIMIT) - return error("opponent has limit"); + return error("opponent has limit", 0); if (pp->safety[S_RIGHT_WAY] == S_PLAYED) goto protected; pp->speed = C_LIMIT; @@ -280,7 +181,7 @@ protected: break; case C_INIT: - error("no card there"); + error("no card there", 0); Next = -1; break; } @@ -291,10 +192,137 @@ protected: return TRUE; } +/* + * Check and see if either side can go. If they cannot, + * the game is over + */ +static void +check_go() { + + CARD card; + PLAY *pp, *op; + int i; + + for (pp = Player; pp < &Player[2]; pp++) { + op = (pp == &Player[COMP] ? &Player[PLAYER] : &Player[COMP]); + for (i = 0; i < HAND_SZ; i++) { + card = pp->hand[i]; + if (issafety(card) || canplay(pp, op, card)) { + if (Debug) { + fprintf(outf, "CHECK_GO: can play %s (%d), ", C_name[card], card); + fprintf(outf, "issafety(card) = %d, ", issafety(card)); + fprintf(outf, "canplay(pp, op, card) = %d\n", canplay(pp, op, card)); + } + return; + } + else if (Debug) + fprintf(outf, "CHECK_GO: cannot play %s\n", + C_name[card]); + } + } + Finished = TRUE; +} + +void +domove() +{ + PLAY *pp; + int i, j; + bool goodplay; + + pp = &Player[Play]; + if (Play == PLAYER) + getmove(); + else + calcmove(); + Next = FALSE; + goodplay = TRUE; + switch (Movetype) { + case M_DISCARD: + if (haspicked(pp)) { + if (pp->hand[Card_no] == C_INIT) + if (Card_no == 6) + Finished = TRUE; + else + error("no card there", 0); + else { + if (issafety(pp->hand[Card_no])) { + error("discard a safety?", 0); + goodplay = FALSE; + break; + } + Discard = pp->hand[Card_no]; + pp->hand[Card_no] = C_INIT; + Next = TRUE; + if (Play == PLAYER) + account(Discard); + } + } + else + error("must pick first", 0); + break; + case M_PLAY: + goodplay = playcard(pp); + break; + case M_DRAW: + Card_no = 0; + if (Topcard <= Deck) + error("no more cards", 0); + else if (haspicked(pp)) + error("already picked", 0); + else { + pp->hand[0] = *--Topcard; + if (Debug) + fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]); +acc: + if (Play == COMP) { + account(*Topcard); + if (issafety(*Topcard)) + pp->safety[*Topcard-S_CONV] = S_IN_HAND; + } + if (pp->hand[1] == C_INIT && Topcard > Deck) { + Card_no = 1; + pp->hand[1] = *--Topcard; + if (Debug) + fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]); + goto acc; + } + pp->new_battle = FALSE; + pp->new_speed = FALSE; + } + break; + + case M_ORDER: + break; + } + /* + * move blank card to top by one of two methods. If the + * computer's hand was sorted, the randomness for picking + * between equally valued cards would be lost + */ + if (Order && Movetype != M_DRAW && goodplay && pp == &Player[PLAYER]) + sort(pp->hand); + else + for (i = 1; i < HAND_SZ; i++) + if (pp->hand[i] == C_INIT) { + for (j = 0; pp->hand[j] == C_INIT; j++) + if (j >= HAND_SZ) { + j = 0; + break; + } + pp->hand[i] = pp->hand[j]; + pp->hand[j] = C_INIT; + } + if (Topcard <= Deck) + check_go(); + if (Next) + nextplay(); +} + +void getmove() { - reg char c, *sp; - static char moveprompt[] = ">>:Move:"; + char c, *sp; #ifdef EXTRAP static bool last_ex = FALSE; /* set if last command was E */ @@ -340,7 +368,7 @@ getmove() Movetype = M_ORDER; goto ret; case 'Q': /* Quit */ - rub(); /* Same as a rubout */ + rub(0); /* Same as a rubout */ break; case 'W': /* Window toggle */ Window = nextwin(Window); @@ -413,39 +441,19 @@ over: } /* FALLTHROUGH */ default: - error("unknown command: %s", unctrl(c)); + error("unknown command: %s", (int)unctrl(c)); break; } } ret: leaveok(Board, TRUE); } -/* - * return whether or not the player has picked - */ -haspicked(pp) -reg PLAY *pp; { - - reg int card; - - if (Topcard <= Deck) - return TRUE; - switch (pp->hand[Card_no]) { - case C_GAS_SAFE: case C_SPARE_SAFE: - case C_DRIVE_SAFE: case C_RIGHT_WAY: - card = 1; - break; - default: - card = 0; - break; - } - return (pp->hand[card] != C_INIT); -} +void account(card) -reg CARD card; { +CARD card; { - reg CARD oppos; + CARD oppos; if (card == C_INIT) return; @@ -467,6 +475,7 @@ reg CARD card; { } } +void prompt(promptno) int promptno; { @@ -498,11 +507,12 @@ int promptno; clrtoeol(); } +void sort(hand) -reg CARD *hand; +CARD *hand; { - reg CARD *cp, *tp; - reg CARD temp; + CARD *cp, *tp; + CARD temp; cp = hand; hand += HAND_SZ; @@ -514,4 +524,3 @@ reg CARD *hand; *tp = temp; } } - diff --git a/src/games/mille/print.c b/src/games/mille/print.c index ee33619..2a63e28 100644 --- a/src/games/mille/print.c +++ b/src/games/mille/print.c @@ -7,10 +7,27 @@ # define COMP_STRT 20 # define CARD_STRT 2 +/* + * show_card: + * Show the given card if it is different from the last one shown + */ +static void +show_card(y, x, c, lc) +int y, x; +register CARD c, *lc; +{ + if (c == *lc) + return; + + mvprintw(y, x, C_fmt, C_name[c]); + *lc = c; +} + +void prboard() { - reg PLAY *pp; - reg int i, j, k, temp; + PLAY *pp; + int i, j, k, temp; for (k = 0; k < 2; k++) { pp = &Player[k]; @@ -25,8 +42,8 @@ prboard() { show_card(14, temp, pp->battle, &pp->sh_battle); show_card(16, temp, pp->speed, &pp->sh_speed); for (i = C_25; i <= C_200; i++) { - reg char *name; - reg int end; + char *name; + int end; if (pp->nummiles[i] == pp->sh_nummiles[i]) continue; @@ -57,28 +74,31 @@ prboard() { wrefresh(Score); } -/* - * show_card: - * Show the given card if it is different from the last one shown - */ -show_card(y, x, c, lc) -int y, x; -register CARD c, *lc; -{ - if (c == *lc) - return; - - mvprintw(y, x, C_fmt, C_name[c]); - *lc = c; -} - static char Score_fmt[] = "%4d"; -prscore(for_real) -reg bool for_real; { +/* + * show_score: + * Show a score value if it is different from the last time we + * showed it. + */ +static void +show_score(y, x, s, ls) +int y, x; +register int s, *ls; +{ + if (s == *ls) + return; - reg PLAY *pp; - reg int x; + mvprintw(y, x, Score_fmt, s); + *ls = s; +} + +void +prscore(for_real) +bool for_real; { + + PLAY *pp; + int x; stdscr = Score; for (pp = Player; pp < &Player[2]; pp++) { @@ -114,19 +134,3 @@ reg bool for_real; { } stdscr = Board; } - -/* - * show_score: - * Show a score value if it is different from the last time we - * showed it. - */ -show_score(y, x, s, ls) -int y, x; -register int s, *ls; -{ - if (s == *ls) - return; - - mvprintw(y, x, Score_fmt, s); - *ls = s; -} diff --git a/src/games/mille/roll.c b/src/games/mille/roll.c index c25bc4a..52b63c3 100644 --- a/src/games/mille/roll.c +++ b/src/games/mille/roll.c @@ -1,4 +1,5 @@ -# include "mille.h" +#include "mille.h" +#include /* * This routine rolls ndie nside-sided dice. @@ -7,11 +8,11 @@ * */ +int roll(ndie, nsides) -reg int ndie, nsides; { +int ndie, nsides; { - reg int tot; - extern unsigned int random(); + int tot; tot = 0; while (ndie--) diff --git a/src/games/mille/save.c b/src/games/mille/save.c index bad5a11..e176c23 100644 --- a/src/games/mille/save.c +++ b/src/games/mille/save.c @@ -1,15 +1,20 @@ -#include "mille.h" -#include -#include -#include +#include "mille.h" +#include +#include +#include +#include +#include +#include +#include +#include #ifndef unctrl -#include "unctrl.h" +# include "unctrl.h" #endif -# ifdef attron -# include -# define _tty cur_term->Nttyb -# endif attron +#ifdef attron +# include +# define _tty cur_term->Nttyb +#endif /* * @(#)save.c 1.3 (2.11BSD) 1996/3/21 @@ -17,27 +22,24 @@ typedef struct stat STAT; -extern char *ctime(); -extern int read(), write(); - /* * This routine saves the current game for use at a later date */ -extern int errno; - +int save() { - reg char *sp; - reg int outf; - reg time_t *tp; - char buf[80]; - time_t tme; - STAT junk; + char *sp; + int outf; + time_t *tp; + char buf[80]; + time_t tme; + STAT junk; tp = &tme; - if (Fromfile && getyn(SAMEFILEPROMPT)) + if (Fromfile && getyn(SAMEFILEPROMPT)) { strcpy(buf, Fromfile); - else { + sp = buf; + } else { over: prompt(FILEPROMPT); leaveok(Board, FALSE); @@ -77,7 +79,7 @@ over: return FALSE; if ((outf = creat(buf, 0644)) < 0) { - error(strerror(errno)); + error(strerror(errno), 0); return FALSE; } mvwaddstr(Score, ERR_Y, ERR_X, buf); @@ -100,13 +102,14 @@ over: * backup was made on exiting, in which case certain things must * be cleaned up before the game starts. */ +int rest_f(file) -reg char *file; { +char *file; { - reg char *sp; - reg int inf; - char buf[80]; - STAT sbuf; + char *sp; + int inf; + char buf[80]; + STAT sbuf; if ((inf = open(file, 0)) < 0) { perror(file); @@ -129,4 +132,3 @@ reg char *file; { Fromfile = file; return !On_exit; } - diff --git a/src/games/mille/types.c b/src/games/mille/types.c index 2fb9677..c6c93e0 100644 --- a/src/games/mille/types.c +++ b/src/games/mille/types.c @@ -1,17 +1,19 @@ -# include "mille.h" +#include "mille.h" /* * @(#)types.c 1.1 (Berkeley) 4/1/82 */ +int isrepair(card) -reg CARD card; { +CARD card; { return card == C_GAS || card == C_SPARE || card == C_REPAIRS || card == C_INIT; } +int safety(card) -reg CARD card; { +CARD card; { switch (card) { case C_EMPTY: @@ -34,5 +36,5 @@ reg CARD card; { return C_RIGHT_WAY; } /* NOTREACHED */ + return 0; } - diff --git a/src/games/mille/varpush.c b/src/games/mille/varpush.c index 7a45f22..a2942fc 100644 --- a/src/games/mille/varpush.c +++ b/src/games/mille/varpush.c @@ -1,18 +1,20 @@ -# include "mille.h" +#include "mille.h" +#include +#include +#include /* * @(#)varpush.c 1.1 (Berkeley) 4/1/82 */ -int read(), write(); - /* * push variables around via the routine func() on the file * channel file. func() is either read or write. */ +void varpush(file, func) -reg int file; -reg int (*func)(); { +int file; +int (*func)(); { int temp; @@ -30,13 +32,18 @@ reg int (*func)(); { (*func)(file, (char *) &Discard, sizeof Discard); (*func)(file, (char *) Player, sizeof Player); if (func == read) { - read(file, (char *) &temp, sizeof temp); + if (read(file, (char *) &temp, sizeof temp) != sizeof temp) { + perror("read"); + exit(-1); + } Topcard = &Deck[temp]; if (Debug) { char buf[80]; over: printf("Debug file:"); - gets(buf); + if (! fgets(buf, sizeof(buf), stdin)) { + exit(0); + } if ((outf = fopen(buf, "w")) == NULL) { perror(buf); goto over; @@ -47,7 +54,9 @@ over: } else { temp = Topcard - Deck; - write(file, (char *) &temp, sizeof temp); + if (write(file, (char *) &temp, sizeof temp) != sizeof temp) { + perror("write"); + exit(-1); + } } } - From 2da083e9bded0fe98faab8f2148dd2a9598e7494 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 8 Sep 2014 21:36:15 -0700 Subject: [PATCH 07/16] Some progress on 'monop' game. --- src/games/monop/.gitignore | 1 + src/games/monop/Makefile | 116 ++++------ src/games/monop/_rofix | 3 - src/games/monop/brd.dat | 43 ---- src/games/monop/brd.dat.h | 43 ++++ src/games/monop/cards.c | 90 ++++---- src/games/monop/{monop.def => defines.h} | 16 +- src/games/monop/execute.c | 113 +++++----- src/games/monop/{monop.ext => extern.h} | 6 +- src/games/monop/getinp.c | 54 ++--- src/games/monop/houses.c | 264 ++++++++++++----------- src/games/monop/initdeck.c | 13 +- src/games/monop/jail.c | 11 +- src/games/monop/misc.c | 163 ++++++++------ src/games/monop/mon.dat | 9 - src/games/monop/mon.dat.h | 9 + src/games/monop/monop.c | 77 ++++--- src/games/monop/monop.h | 27 ++- src/games/monop/morg.c | 27 ++- src/games/monop/print.c | 15 +- src/games/monop/prop.c | 22 +- src/games/monop/{prop.dat => prop.dat.h} | 0 src/games/monop/rent.c | 7 +- src/games/monop/roll.c | 28 +-- src/games/monop/spec.c | 15 +- src/games/monop/strcmp.c | 8 +- src/games/monop/strings | 0 src/games/monop/trade.c | 15 +- 28 files changed, 646 insertions(+), 549 deletions(-) create mode 100644 src/games/monop/.gitignore delete mode 100644 src/games/monop/_rofix delete mode 100644 src/games/monop/brd.dat create mode 100644 src/games/monop/brd.dat.h rename src/games/monop/{monop.def => defines.h} (91%) rename src/games/monop/{monop.ext => extern.h} (72%) delete mode 100644 src/games/monop/mon.dat create mode 100644 src/games/monop/mon.dat.h rename src/games/monop/{prop.dat => prop.dat.h} (100%) delete mode 100644 src/games/monop/strings diff --git a/src/games/monop/.gitignore b/src/games/monop/.gitignore new file mode 100644 index 0000000..e8e2162 --- /dev/null +++ b/src/games/monop/.gitignore @@ -0,0 +1 @@ +monop diff --git a/src/games/monop/Makefile b/src/games/monop/Makefile index 09fe89d..a5c9c30 100644 --- a/src/games/monop/Makefile +++ b/src/games/monop/Makefile @@ -3,85 +3,57 @@ # Program: Ken Arnold # Makefile: K.S. # -DESTDIR= -DATFILES=brd.dat mon.dat prop.dat -CFILES= monop.c cards.c execute.c getinp.c houses.c jail.c misc.c morg.c \ - print.c prop.c rent.c roll.c spec.c strcmp.c trade.c -OBJS= monop.o cards.o execute.o getinp.o houses.o jail.o misc.o morg.o \ - print.o prop.o rent.o roll.o spec.o strcmp.o trade.o strings.o -HEADERS=monop.h deck.h -BINDIR= ${DESTDIR}/usr/games -LIBDIR= ${DESTDIR}/usr/games/lib -LIB= -CFLAGS= -O -w -SEPFLAG= -i -DAT= brd.dat monop.dat prop.dat -CC= cc -XSTR= xstr -ED= ed -AS= as -RM= rm -f -CTAGS= ctags +TOPSRC = $(shell cd ../../..; pwd) +#include $(TOPSRC)/target.mk +include $(TOPSRC)/cross.mk +CFLAGS = -DCROSS -# -# Be cool about compiling strings. -# -.c.o: - ${CC} -E ${CFLAGS} $*.c | ${XSTR} -c - - ${CC} -c ${CFLAGS} x.c - mv x.o $*.o +CFLAGS += -O -Werror -Wall +LIBS = -lc -it: monop cards.pck +OBJS = monop.o cards.o execute.o getinp.o houses.o jail.o misc.o \ + morg.o print.o prop.o rent.o roll.o spec.o trade.o +MAN = monop.0 +MANSRC = monop.6 -monop: ${OBJS} - ${CC} -o monop ${SEPFLAG} ${OBJS} ${LIB} +all: monop $(MAN) cards.pck -install: monop cards.pck - ${RM} ${BINDIR}/monop ${LIBDIR}/cards.pck - install -s monop ${BINDIR} - mv cards.pck ${LIBDIR} +monop: $(OBJS) + $(CC) $(LDFLAGS) -o monop.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S monop.elf > monop.dis + $(SIZE) monop.elf + $(ELF2AOUT) monop.elf $@ && rm monop.elf -new: clean ctags monop +initdeck: initdeck.c deck.h + $(CC) -o initdeck $(LDFLAGS) $(CFLAGS) initdeck.c -strings.o: strings - ${XSTR} - ${CC} -S xs.c - ${ED} - < :rofix xs.s - ${AS} -o strings.o xs.s - ${RM} xs.s xs.c +cards.pck: initdeck cards.inp + ./initdeck -monop.o: ${DATFILES} monop.def - ${CC} -E ${CFLAGS} monop.c | ${XSTR} -c - - ${CC} -c ${CFLAGS} x.c - mv x.o monop.o - -cards.o: deck.h - ${CC} -E ${CFLAGS} cards.c | ${XSTR} -c - - ${CC} -c ${CFLAGS} x.c - mv x.o cards.o - -newone: - ${CC} ${SEPFLAG} -o monop ${CFLAGS} ${CFILES} ${LIB} - -ctags: - ${CTAGS} ${CFILES} monop.h deck.h monop.def initdeck.c - -cards.pck: initdeck cards.inp - ./initdeck - -initdeck: initdeck.c deck.h - ${CC} -o initdeck ${CFLAGS} initdeck.c ${LIB} - -monop.tar: - tar crvf monop.tar ${CFILES} ${DATFILES} ${HEADERS} :rofix Makefile cards.inp initdeck.c monop.def monop.ext +$(MAN): $(MANSRC) + $(MANROFF) $< > $@ clean: - ${RM} ${OBJS} monop core tags x.c x.o monop.tar initdeck cards.pck errs - cp /dev/null strings + rm -f *.o *.0 *.elf $(MAN) monop initdeck cards.pck *.elf *.dis tags *~ -printall: - -/usr/bin/eecs/pr monop.h deck.h monop.def monop.ext ${CFILES} ${DATFILES} | /usr/bin/lpr - -/usr/bin/lpq - -lint: - lint ${CFILES} > lint.out ; +install: all + install monop $(DESTDIR)/games/ + cp $(MAN) $(DESTDIR)/share/man/cat6/ + cp cards.pck $(DESTDIR)/games/lib/ +### +cards.o: cards.c extern.h monop.h deck.h +execute.o: execute.c extern.h monop.h deck.h +getinp.o: getinp.c +houses.o: houses.c extern.h monop.h deck.h +initdeck.o: initdeck.c deck.h +jail.o: jail.c extern.h monop.h deck.h +misc.o: misc.c extern.h monop.h deck.h +monop.o: monop.c defines.h monop.h deck.h mon.dat.h prop.dat.h brd.dat.h +morg.o: morg.c extern.h monop.h deck.h +print.o: print.c extern.h monop.h deck.h +prop.o: prop.c extern.h monop.h deck.h +rent.o: rent.c extern.h monop.h deck.h +roll.o: roll.c +spec.o: spec.c extern.h monop.h deck.h +strcmp.o: strcmp.c +trade.o: trade.c extern.h monop.h deck.h diff --git a/src/games/monop/_rofix b/src/games/monop/_rofix deleted file mode 100644 index cd5fa24..0000000 --- a/src/games/monop/_rofix +++ /dev/null @@ -1,3 +0,0 @@ -g/^[ ]*\.data/s//.text/ -w -q diff --git a/src/games/monop/brd.dat b/src/games/monop/brd.dat deleted file mode 100644 index 7af06d8..0000000 --- a/src/games/monop/brd.dat +++ /dev/null @@ -1,43 +0,0 @@ -/* name (COLOR) owner type desc cost */ - -{"=== GO ===", -1, SAFE, 0 }, -{"Mediterranean ave. (P)", -1, PRPTY, &prop[0], 60 }, -{"Community Chest i", -1, CC, cc }, -{"Baltic ave. (P)", -1, PRPTY, &prop[1], 60 }, -{"Income Tax", -1, SPEC, inc_tax }, -{"Reading RR", -1, RR, &rr[0], 200 }, -{"Oriental ave. (L)", -1, PRPTY, &prop[2], 100 }, -{"Chance i", -1, CHANCE, chance }, -{"Vermont ave. (L)", -1, PRPTY, &prop[3], 100 }, -{"Connecticut ave. (L)", -1, PRPTY, &prop[4], 120 }, -{"Just Visiting", -1, SAFE, 0 }, -{"St. Charles pl. (V)", -1, PRPTY, &prop[5], 140 }, -{"Electric Co.", -1, UTIL, &util[0], 150 }, -{"States ave. (V)", -1, PRPTY, &prop[6], 140 }, -{"Virginia ave. (V)", -1, PRPTY, &prop[7], 160 }, -{"Pennsylvania RR", -1, RR, &rr[1], 200 }, -{"St. James pl. (O)", -1, PRPTY, &prop[8], 180 }, -{"Community Chest ii", -1, CC, cc }, -{"Tennessee ave. (O)", -1, PRPTY, &prop[9], 180 }, -{"New York ave. (O)", -1, PRPTY, &prop[10], 200 }, -{"Free Parking", -1, SAFE, 0 }, -{"Kentucky ave. (R)", -1, PRPTY, &prop[11], 220 }, -{"Chance ii", -1, CHANCE, chance }, -{"Indiana ave. (R)", -1, PRPTY, &prop[12], 220 }, -{"Illinois ave. (R)", -1, PRPTY, &prop[13], 240 }, -{"B&O RR", -1, RR, &rr[2], 200 }, -{"Atlantic ave. (Y)", -1, PRPTY, &prop[14], 260 }, -{"Ventnor ave. (Y)", -1, PRPTY, &prop[15], 260 }, -{"Water Works", -1, UTIL, &util[1], 150 }, -{"Marvin Gardens (Y)", -1, PRPTY, &prop[16], 280 }, -{"GO TO JAIL", -1, SPEC, goto_jail }, -{"Pacific ave. (G)", -1, PRPTY, &prop[17], 300 }, -{"N. Carolina ave. (G)", -1, PRPTY, &prop[18], 300 }, -{"Community Chest iii", -1, CC, cc }, -{"Pennsylvania ave. (G)", -1, PRPTY, &prop[19], 320 }, -{"Short Line RR", -1, RR, &rr[3], 200 }, -{"Chance iii", -1, CHANCE, chance }, -{"Park place (D)", -1, PRPTY, &prop[20], 350 }, -{"Luxury Tax", -1, SPEC, lux_tax }, -{"Boardwalk (D)", -1, PRPTY, &prop[21], 400 }, -{"JAIL", -1, SPEC } diff --git a/src/games/monop/brd.dat.h b/src/games/monop/brd.dat.h new file mode 100644 index 0000000..b66f916 --- /dev/null +++ b/src/games/monop/brd.dat.h @@ -0,0 +1,43 @@ +/* name (COLOR) owner type desc cost */ + +{"=== GO ===", -1, SAFE, 0 }, +{"Mediterranean ave. (P)", -1, PRPTY, (char*)&prop[0], 60 }, +{"Community Chest i", -1, CC, (char*)cc }, +{"Baltic ave. (P)", -1, PRPTY, (char*)&prop[1], 60 }, +{"Income Tax", -1, SPEC, (char*)inc_tax }, +{"Reading RR", -1, RR, (char*)&rr[0], 200 }, +{"Oriental ave. (L)", -1, PRPTY, (char*)&prop[2], 100 }, +{"Chance i", -1, CHANCE, (char*)chance }, +{"Vermont ave. (L)", -1, PRPTY, (char*)&prop[3], 100 }, +{"Connecticut ave. (L)", -1, PRPTY, (char*)&prop[4], 120 }, +{"Just Visiting", -1, SAFE, 0 }, +{"St. Charles pl. (V)", -1, PRPTY, (char*)&prop[5], 140 }, +{"Electric Co.", -1, UTIL, (char*)&util[0], 150 }, +{"States ave. (V)", -1, PRPTY, (char*)&prop[6], 140 }, +{"Virginia ave. (V)", -1, PRPTY, (char*)&prop[7], 160 }, +{"Pennsylvania RR", -1, RR, (char*)&rr[1], 200 }, +{"St. James pl. (O)", -1, PRPTY, (char*)&prop[8], 180 }, +{"Community Chest ii", -1, CC, (char*)cc }, +{"Tennessee ave. (O)", -1, PRPTY, (char*)&prop[9], 180 }, +{"New York ave. (O)", -1, PRPTY, (char*)&prop[10], 200 }, +{"Free Parking", -1, SAFE, 0 }, +{"Kentucky ave. (R)", -1, PRPTY, (char*)&prop[11], 220 }, +{"Chance ii", -1, CHANCE, (char*)chance }, +{"Indiana ave. (R)", -1, PRPTY, (char*)&prop[12], 220 }, +{"Illinois ave. (R)", -1, PRPTY, (char*)&prop[13], 240 }, +{"B&O RR", -1, RR, (char*)&rr[2], 200 }, +{"Atlantic ave. (Y)", -1, PRPTY, (char*)&prop[14], 260 }, +{"Ventnor ave. (Y)", -1, PRPTY, (char*)&prop[15], 260 }, +{"Water Works", -1, UTIL, (char*)&util[1], 150 }, +{"Marvin Gardens (Y)", -1, PRPTY, (char*)&prop[16], 280 }, +{"GO TO JAIL", -1, SPEC, (char*)goto_jail }, +{"Pacific ave. (G)", -1, PRPTY, (char*)&prop[17], 300 }, +{"N. Carolina ave. (G)", -1, PRPTY, (char*)&prop[18], 300 }, +{"Community Chest iii", -1, CC, (char*)cc }, +{"Pennsylvania ave. (G)", -1, PRPTY, (char*)&prop[19], 320 }, +{"Short Line RR", -1, RR, (char*)&rr[3], 200 }, +{"Chance iii", -1, CHANCE, (char*)chance }, +{"Park place (D)", -1, PRPTY, (char*)&prop[20], 350 }, +{"Luxury Tax", -1, SPEC, (char*)lux_tax }, +{"Boardwalk (D)", -1, PRPTY, (char*)&prop[21], 400 }, +{"JAIL", -1, SPEC } diff --git a/src/games/monop/cards.c b/src/games/monop/cards.c index b61d50d..2246230 100644 --- a/src/games/monop/cards.c +++ b/src/games/monop/cards.c @@ -1,38 +1,24 @@ -# include "monop.ext" +#include "extern.h" +#include /* * These routine deal with the card decks */ -# define GOJF 'F' /* char for get-out-of-jail-free cards */ +#define GOJF 'F' /* char for get-out-of-jail-free cards */ -# ifndef DEV -static char *cardfile = "/usr/games/lib/cards.pck"; -# else +#ifdef CROSS static char *cardfile = "cards.pck"; -# endif +#else +static char *cardfile = "/games/lib/cards.pck"; +#endif static FILE *deckf; -/* - * This routine initializes the decks from the data file, - * which it opens. - */ -init_decks() { - - if ((deckf=fopen(cardfile, "r")) == NULL) { -file_err: - perror(cardfile); - exit(1); - } - if (fread(deck, sizeof (DECK), 2, deckf) != 2) - goto file_err; - set_up(&CC_D); - set_up(&CH_D); -} /* * This routine sets up the offset pointers for the given deck. */ +static void set_up(dp) DECK *dp; { @@ -56,9 +42,45 @@ DECK *dp; { dp->offsets[r1] = temp; } } + +/* + * This routine initializes the decks from the data file, + * which it opens. + */ +void +init_decks() { + + if ((deckf=fopen(cardfile, "r")) == NULL) { +file_err: + perror(cardfile); + exit(1); + } + if (fread(deck, sizeof (DECK), 2, deckf) != 2) + goto file_err; + set_up(&CC_D); + set_up(&CH_D); +} + +/* + * This routine prints out the message on the card + */ +static void +printmes() { + + reg char c; + + printline(); + fflush(stdout); + while ((c = getc(deckf)) != '\0') + putchar(c); + printline(); + fflush(stdout); +} + /* * This routine draws a card from the given deck */ +void get_card(dp) DECK *dp; { @@ -69,7 +91,8 @@ DECK *dp; { do { fseek(deckf, dp->offsets[dp->last_card], 0); - dp->last_card = ++(dp->last_card) % dp->num_cards; + dp->last_card++; + dp->last_card %= dp->num_cards; type_maj = getc(deckf); } while (dp->gojf_used && type_maj == GOJF); type_min = getc(deckf); @@ -135,11 +158,12 @@ DECK *dp; { } num_h = num_H = 0; for (op = cur_p->own_list; op; op = op->next) - if (op->sqr->type == PRPTY) - if (op->sqr->desc->houses == 5) + if (op->sqr->type == PRPTY) { + if (((PROP*)op->sqr->desc)->houses == 5) ++num_H; else - num_h += op->sqr->desc->houses; + num_h += ((PROP*)op->sqr->desc)->houses; + } num = per_h * num_h + per_H * num_H; printf("You had %d Houses and %d Hotels, so that cost you $%d\n", num_h, num_H, num); if (num == 0) @@ -154,17 +178,3 @@ DECK *dp; { } spec = FALSE; } -/* - * This routine prints out the message on the card - */ -printmes() { - - reg char c; - - printline(); - fflush(stdout); - while ((c = getc(deckf)) != '\0') - putchar(c); - printline(); - fflush(stdout); -} diff --git a/src/games/monop/monop.def b/src/games/monop/defines.h similarity index 91% rename from src/games/monop/monop.def rename to src/games/monop/defines.h index d7acbe2..ce271f9 100644 --- a/src/games/monop/monop.def +++ b/src/games/monop/defines.h @@ -1,5 +1,5 @@ -# include "monop.h" -# include "deck.h" +#include "monop.h" +#include "deck.h" bool fixing, /* set if fixing up debt */ trading, /* set if in process of trading */ @@ -19,7 +19,7 @@ char *name_list[MAX_PL+2], /* list of players' names */ "roll", /* 16 */ "", /* 17 */ 0 }, - *yn[] = { /* list of commands for yes/no answers */ + *yesno[] = { /* list of commands for yes/no answers */ "yes", /* 0 */ "no", /* 1 */ "quit", /* 2 */ "print", /* 3 */ "where", /* 4 */ "own holdings", /* 5 */ @@ -43,11 +43,11 @@ int player, /* current player number */ num_luck = sizeof lucky_mes / sizeof (char *), /* list of command functions */ buy_houses(), card(), do_move(), do_move(), list(), list_all(), - mortgage(), pay(), printboard(), quit(), resign(), restore(), + mortgage(), pay(), printboard(), quitgame(), resign(), restore(), rub(), save(), sell_houses(), shell_out(), trade(), unmortgage(), where(), (*func[])() = { /* array of function calls for commands */ - quit, /* quit game |* 0 *| */ + quitgame, /* quit game |* 0 *| */ printboard, /* print board |* 1 *| */ where, /* where players are |* 2 *| */ list, /* own holdings |* 3 *| */ @@ -77,13 +77,13 @@ RR_S rr[N_RR]; /* raildroad descriptions */ UTIL_S util[2]; /* utility descriptions */ MON mon[N_MON] = { /* monopoly descriptions */ -# include "mon.dat" +#include "mon.dat.h" }; PROP prop[N_PROP] = { /* typical properties */ -# include "prop.dat" +#include "prop.dat.h" }; SQUARE board[N_SQRS+1] = { /* board itself (+1 for Jail) */ -# include "brd.dat" +#include "brd.dat.h" }; diff --git a/src/games/monop/execute.c b/src/games/monop/execute.c index 3ec23f1..e537a86 100644 --- a/src/games/monop/execute.c +++ b/src/games/monop/execute.c @@ -1,24 +1,29 @@ -# include "monop.ext" -# include -# include -# include +#include "extern.h" +#include +#include +#include +#include +#include +#include +#include +#include -# define SEGSIZE 8192 +#define SEGSIZE 8192 typedef struct stat STAT; typedef struct tm TIME; -extern char etext[], /* end of text space */ +extern char __data_start[], /* beginning of data space */ rub(); -static char buf[257], - *yn_only[] = { "yes", "no"}; +static char buf[257]; static bool new_play; /* set if move on to new player */ /* * This routine executes the given command by index number */ +void execute(com_num) reg int com_num; { @@ -31,9 +36,11 @@ reg int com_num; { else if (num_doub) printf("%s rolled doubles. Goes again\n", cur_p->name); } + /* * This routine moves a piece around. */ +void do_move() { reg int r1, r2; @@ -62,30 +69,16 @@ do_move() { ret: return; } -/* - * This routine moves a normal move - */ -move(rl) -reg int rl; { - reg int old_loc; - - old_loc = cur_p->loc; - cur_p->loc = (cur_p->loc + rl) % N_SQRS; - if (cur_p->loc < old_loc && rl > 0) { - cur_p->money += 200; - printf("You pass %s and get $200\n", board[0].name); - } - show_move(); -} /* * This routine shows the results of a move */ +static void show_move() { reg SQUARE *sqp; - sqp = &board[cur_p->loc]; + sqp = &board[(int)cur_p->loc]; printf("That puts you on %s\n", sqp->name); switch (sqp->type) { case SAFE: @@ -106,7 +99,7 @@ show_move() { cur_p->money -= sqp->cost; } else if (num_play > 2) - bid(sqp); + bid(); } else if (sqp->owner == player) printf("You own it.\n"); @@ -114,18 +107,37 @@ show_move() { rent(sqp); } } + +/* + * This routine moves a normal move + */ +void +move(rl) +reg int rl; { + + reg int old_loc; + + old_loc = cur_p->loc; + cur_p->loc = (cur_p->loc + rl) % N_SQRS; + if (cur_p->loc < old_loc && rl > 0) { + cur_p->money += 200; + printf("You pass %s and get $200\n", board[0].name); + } + show_move(); +} + /* * This routine saves the current game for use at a later date */ +void save() { reg char *sp; reg int outf, num; - TIME tme, *tp; - int *dat_end, junk[18]; + time_t tme; + struct stat junk; unsgn start, end; - tp = &tme; printf("Which file do you wish to save it in? "); sp = buf; while ((*sp++=getchar()) != '\n' && !feof(stdin)) @@ -137,9 +149,8 @@ save() { /* * check for existing files, and confirm overwrite if needed */ - - if (stat(buf, junk) > -1 - && getyn("File exists. Do you wish to overwrite? ", yn_only) > 0) + if (stat(buf, &junk) >= 0 + && getyn("File exists. Do you wish to overwrite? ") > 0) return; if ((outf=creat(buf, 0644)) < 0) { @@ -147,28 +158,29 @@ save() { return; } printf("\"%s\" ", buf); - time(tp); /* get current time */ - strcpy(buf, ctime(tp)); + time(&tme); /* get current time */ + strcpy(buf, ctime(&tme)); for (sp = buf; *sp != '\n'; sp++) continue; *sp = '\0'; -# if 0 - start = (((int) etext + (SEGSIZE-1)) / SEGSIZE ) * SEGSIZE; -# else - start = 0; -# endif - end = sbrk(0); + start = (unsigned) __data_start; + end = (unsigned) sbrk(0); while (start < end) { /* write out entire data space */ num = start + 16 * 1024 > end ? end - start : 16 * 1024; - write(outf, start, num); + if (write(outf, (void*)start, num) != num) { + perror(buf); + exit(-1); + } start += num; } close(outf); printf("[%s]\n", buf); } + /* * This routine restores an old game from a file */ +void restore() { reg char *sp; @@ -181,10 +193,12 @@ restore() { clearerr(stdin); rest_f(buf); } + /* * This does the actual restoring. It returns TRUE if the * backup was successful, else false. */ +int rest_f(file) reg char *file; { @@ -203,19 +217,22 @@ reg char *file; { perror(file); exit(1); } -# if 0 - start = (((int) etext + (SEGSIZE-1)) / SEGSIZE ) * SEGSIZE; -# else - start = 0; -# endif - brk(end = start + sbuf.st_size); + start = (unsigned) __data_start; + end = start + sbuf.st_size; + if (brk((void*) end) < 0) { + perror("brk"); + exit(-1); + } while (start < end) { /* write out entire data space */ num = start + 16 * 1024 > end ? end - start : 16 * 1024; - read(inf, start, num); + if (read(inf, (void*) start, num) != num) { + perror(file); + exit(-1); + } start += num; } close(inf); - strcpy(buf, ctime(sbuf.st_mtime)); + strcpy(buf, ctime(&sbuf.st_mtime)); for (sp = buf; *sp != '\n'; sp++) continue; *sp = '\0'; diff --git a/src/games/monop/monop.ext b/src/games/monop/extern.h similarity index 72% rename from src/games/monop/monop.ext rename to src/games/monop/extern.h index e487dda..e1c9b00 100644 --- a/src/games/monop/monop.ext +++ b/src/games/monop/extern.h @@ -1,9 +1,9 @@ -# include "monop.h" -# include "deck.h" +#include "monop.h" +#include "deck.h" extern bool trading, spec, fixing, told_em; -extern char *yn[], *comlist[], *name_list[], *lucky_mes[]; +extern char *yesno[], *comlist[], *name_list[], *lucky_mes[]; extern int num_play, player, num_doub, num_luck, (*func[])(); diff --git a/src/games/monop/getinp.c b/src/games/monop/getinp.c index a300c0e..db77846 100644 --- a/src/games/monop/getinp.c +++ b/src/games/monop/getinp.c @@ -1,23 +1,41 @@ -# include -# include +#include +#include +#include -# define reg register +#define reg register -# define LINE 70 +#define LINE 70 static char buf[257]; +static int +comp(s1) +char *s1; { + + reg char *sp, *tsp, c; + + if (buf[0] != '\0') + for (sp = buf, tsp = s1; *sp; ) { + c = isupper(*tsp) ? tolower(*tsp) : *tsp; + tsp++; + if (c != *sp++) + return 0; + } + else if (*s1 != '\0') + return 0; + return 1; +} + +int getinp(prompt, list) char *prompt, *list[]; { - reg int i, n_match, match; + reg int i, n_match, match = 0; char *sp; - int plen; - for (;;) { inter: - printf(prompt); + printf("%s", prompt); for (sp = buf; (*sp=getchar()) != '\n' && !feof(stdin); ) if (*sp == -1) /* check for interupted system call */ goto inter; @@ -39,7 +57,7 @@ inter: printf(""); } else - printf(list[i]); + printf("%s", list[i]); if (list[i+1]) printf(", "); else @@ -63,21 +81,3 @@ inter: printf("Illegal response: \"%s\". Use '?' to get list of valid answers\n", buf); } } - -static -comp(s1) -char *s1; { - - reg char *sp, *tsp, c; - - if (buf[0] != '\0') - for (sp = buf, tsp = s1; *sp; ) { - c = isupper(*tsp) ? tolower(*tsp) : *tsp; - tsp++; - if (c != *sp++) - return 0; - } - else if (*s1 != '\0') - return 0; - return 1; -} diff --git a/src/games/monop/houses.c b/src/games/monop/houses.c index 8f525b8..f1fe2e2 100644 --- a/src/games/monop/houses.c +++ b/src/games/monop/houses.c @@ -1,66 +1,29 @@ -# include "monop.ext" +#include "extern.h" +#include static char *names[N_MON+2], cur_prop[80]; static MON *monops[N_MON]; -/* - * These routines deal with buying and selling houses - */ -buy_houses() { +static void +list_cur(mp) +reg MON *mp; { - reg int num_mon; - reg MON *mp; - reg OWN *op; - bool good,got_morg; - int i,p; + reg int i; + reg SQUARE *sqp; -over: - num_mon = 0; - good = TRUE; - got_morg = FALSE; - for (op = cur_p->own_list; op && op->sqr->type != PRPTY; op = op->next) - continue; - while (op) - if (op->sqr->desc->monop) { - mp = op->sqr->desc->mon_desc; - names[num_mon] = (monops[num_mon]=mp)->name; - num_mon++; - got_morg = good = FALSE; - for (i = 0; i < mp->num_in; i++) { - if (op->sqr->desc->morg) - got_morg++; - if (op->sqr->desc->houses != 5) - good++; - op = op->next; - } - if (!good || got_morg) - --num_mon; - } + for (i = 0; i < mp->num_in; i++) { + sqp = mp->sq[i]; + if (((PROP*)sqp->desc)->houses == 5) + printf("%s (H) ", sqp->name); else - op = op->next; - if (num_mon == 0) { - if (got_morg) - printf("You can't build on mortgaged monopolies.\n"); - else if (!good) - printf("You can't build any more.\n"); - else - printf("But you don't have any monopolies!!\n"); - return; - } - if (num_mon == 1) - buy_h(monops[0]); - else { - names[num_mon++] = "done"; - names[num_mon--] = 0; - if ((p=getinp("Which property do you wish to buy houses for? ", names)) == num_mon) - return; - buy_h(monops[p]); - goto over; + printf("%s (%d) ", sqp->name, ((PROP*)sqp->desc)->houses); } + putchar('\n'); } +static void buy_h(mnp) MON *mnp; { @@ -78,7 +41,7 @@ blew_it: printf("Houses will cost $%d\n", price); printf("How many houses do you wish to buy for\n"); for (i = 0; i < mp->num_in; i++) { - pp = mp->sq[i]->desc; + pp = (PROP*) mp->sq[i]->desc; over: if (pp->houses == 5) { printf("%s (H):\n", mp->sq[i]->name); @@ -106,10 +69,124 @@ err: printf("That makes the spread too wide. Try again\n"); tot += input[i]; if (tot) { printf("You asked for %d houses for $%d\n", tot, tot * price); - if (getyn("Is that ok? ", yn) == 0) { + if (getyn("Is that ok? ") == 0) { cur_p->money -= tot * price; for (tot = i = 0; i < mp->num_in; i++) - mp->sq[i]->desc->houses = temp[i]; + ((PROP*)mp->sq[i]->desc)->houses = temp[i]; + } + } +} + +/* + * These routines deal with buying and selling houses + */ +void +buy_houses() { + + reg int num_mon; + reg MON *mp; + reg OWN *op; + bool good,got_morg; + int i,p; + +over: + num_mon = 0; + good = TRUE; + got_morg = FALSE; + for (op = cur_p->own_list; op && op->sqr->type != PRPTY; op = op->next) + continue; + while (op) { + PROP *prop = (PROP*) op->sqr->desc; + if (prop->monop) { + mp = prop->mon_desc; + names[num_mon] = (monops[num_mon]=mp)->name; + num_mon++; + got_morg = good = FALSE; + for (i = 0; i < mp->num_in; i++) { + if (prop->morg) + got_morg++; + if (prop->houses != 5) + good++; + op = op->next; + } + if (!good || got_morg) + --num_mon; + } + else + op = op->next; + } + if (num_mon == 0) { + if (got_morg) + printf("You can't build on mortgaged monopolies.\n"); + else if (!good) + printf("You can't build any more.\n"); + else + printf("But you don't have any monopolies!!\n"); + return; + } + if (num_mon == 1) + buy_h(monops[0]); + else { + names[num_mon++] = "done"; + names[num_mon--] = 0; + if ((p=getinp("Which property do you wish to buy houses for? ", names)) == num_mon) + return; + buy_h(monops[p]); + goto over; + } +} + +static void +sell_h(mnp) +MON *mnp; { + + reg int i; + reg MON *mp; + reg int price; + shrt input[3],temp[3]; + int tot; + PROP *pp; + + mp = mnp; + price = mp->h_cost * 25; +blew_it: + printf("Houses will get you $%d apiece\n", price); + list_cur(mp); + printf("How many houses do you wish to sell from\n"); + for (i = 0; i < mp->num_in; i++) { + pp = (PROP*) mp->sq[i]->desc; +over: + if (pp->houses == 0) { + printf("%s (0):\n", mp->sq[i]->name); + input[i] = temp[i] = 0; + continue; + } + if (pp->houses < 5) + sprintf(cur_prop,"%s (%d): ", mp->sq[i]->name, pp->houses); + else + sprintf(cur_prop,"%s (H): ", mp->sq[i]->name); + input[i] = get_int(cur_prop); + temp[i] = pp->houses - input[i]; + if (temp[i] < 0) { + printf("That's too many. The most you can sell is %d\n", pp->houses); + goto over; + } + } + if (mp->num_in == 3 && (abs(temp[0] - temp[1]) > 1 || + abs(temp[0] - temp[2]) > 1 || abs(temp[1] - temp[2]) > 1)) { +err: printf("That makes the spread too wide. Try again\n"); + goto blew_it; + } + else if (mp->num_in == 2 && abs(temp[0] - temp[1]) > 1) + goto err; + for (tot = i = 0; i < mp->num_in; i++) + tot += input[i]; + if (tot) { + printf("You asked to sell %d houses for $%d\n",tot,tot * price); + if (getyn("Is that ok? ") == 0) { + cur_p->money += tot * price; + for (tot = i = 0; i < mp->num_in; i++) + ((PROP*)mp->sq[i]->desc)->houses = temp[i]; } } } @@ -117,6 +194,7 @@ err: printf("That makes the spread too wide. Try again\n"); /* * This routine sells houses. */ +void sell_houses() { reg int num_mon; @@ -129,15 +207,15 @@ over: num_mon = 0; good = TRUE; for (op = cur_p->own_list; op; op = op->next) - if (op->sqr->type == PRPTY && op->sqr->desc->monop) { - mp = op->sqr->desc->mon_desc; + if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->monop) { + mp = ((PROP*)op->sqr->desc)->mon_desc; names[num_mon] = (monops[num_mon]=mp)->name; num_mon++; good = 0; do - if (!good && op->sqr->desc->houses != 0) + if (!good && ((PROP*)op->sqr->desc)->houses != 0) good++; - while (op->next && op->sqr->desc->mon_desc == mp + while (op->next && ((PROP*)op->sqr->desc)->mon_desc == mp && (op=op->next)); if (!good) --num_mon; @@ -158,73 +236,3 @@ over: goto over; } } - -sell_h(mnp) -MON *mnp; { - - reg int i; - reg MON *mp; - reg int price; - shrt input[3],temp[3]; - int tot; - PROP *pp; - - mp = mnp; - price = mp->h_cost * 25; -blew_it: - printf("Houses will get you $%d apiece\n", price); - list_cur(mp); - printf("How many houses do you wish to sell from\n"); - for (i = 0; i < mp->num_in; i++) { - pp = mp->sq[i]->desc; -over: - if (pp->houses == 0) { - printf("%s (0):\n", mp->sq[i]->name); - input[i] = temp[i] = 0; - continue; - } - if (pp->houses < 5) - sprintf(cur_prop,"%s (%d): ",mp->sq[i]->name,pp->houses); - else - sprintf(cur_prop,"%s (H): ",mp->sq[i]->name,pp->houses); - input[i] = get_int(cur_prop); - temp[i] = pp->houses - input[i]; - if (temp[i] < 0) { - printf("That's too many. The most you can sell is %d\n", pp->houses); - goto over; - } - } - if (mp->num_in == 3 && (abs(temp[0] - temp[1]) > 1 || - abs(temp[0] - temp[2]) > 1 || abs(temp[1] - temp[2]) > 1)) { -err: printf("That makes the spread too wide. Try again\n"); - goto blew_it; - } - else if (mp->num_in == 2 && abs(temp[0] - temp[1]) > 1) - goto err; - for (tot = i = 0; i < mp->num_in; i++) - tot += input[i]; - if (tot) { - printf("You asked to sell %d houses for $%d\n",tot,tot * price); - if (getyn("Is that ok? ", yn) == 0) { - cur_p->money += tot * price; - for (tot = i = 0; i < mp->num_in; i++) - mp->sq[i]->desc->houses = temp[i]; - } - } -} - -list_cur(mp) -reg MON *mp; { - - reg int i; - reg SQUARE *sqp; - - for (i = 0; i < mp->num_in; i++) { - sqp = mp->sq[i]; - if (sqp->desc->houses == 5) - printf("%s (H) ", sqp->name); - else - printf("%s (%d) ", sqp->name, sqp->desc->houses); - } - putchar('\n'); -} diff --git a/src/games/monop/initdeck.c b/src/games/monop/initdeck.c index d0c7a3c..7167bb0 100644 --- a/src/games/monop/initdeck.c +++ b/src/games/monop/initdeck.c @@ -1,5 +1,6 @@ -# include -# include "deck.h" +#include +#include +#include "deck.h" /* * This program initializes the card files for monopoly. @@ -12,11 +13,11 @@ * string to print, terminated with a null byte. */ -# define TRUE 1 -# define FALSE 0 +#define TRUE 1 +#define FALSE 0 -# define bool char -# define reg register +#define bool char +#define reg register char *infile = "cards.inp", /* input file */ *outfile = "cards.pck"; /* "packed" file */ diff --git a/src/games/monop/jail.c b/src/games/monop/jail.c index c1309bc..4fff2cd 100644 --- a/src/games/monop/jail.c +++ b/src/games/monop/jail.c @@ -1,9 +1,10 @@ -# include "monop.ext" +#include "extern.h" /* * This routine uses a get-out-of-jail-free card to get the * player out of jail. */ +void card() { if (cur_p->loc != JAIL) { @@ -18,10 +19,12 @@ card() { cur_p->loc = 10; /* just visiting */ cur_p->in_jail = 0; } + /* * This routine returns the players get-out-of-jail-free card * to a deck. */ +void ret_card(plr) reg PLAY *plr; { @@ -31,9 +34,11 @@ reg PLAY *plr; { else CH_D.gojf_used = FALSE; } + /* * This routine deals with paying your way out of jail. */ +void pay() { if (cur_p->loc != JAIL) { @@ -45,9 +50,11 @@ pay() { cur_p->in_jail = 0; printf("That cost you $50\n"); } + /* * This routine deals with a move in jail */ +int move_jail(r1, r2) reg int r1, r2; { @@ -70,6 +77,8 @@ moveit: goto moveit; } } + +void printturn() { if (cur_p->loc != JAIL) diff --git a/src/games/monop/misc.c b/src/games/monop/misc.c index cbf0089..b10f206 100644 --- a/src/games/monop/misc.c +++ b/src/games/monop/misc.c @@ -1,8 +1,13 @@ -# include "monop.ext" -# include -# include +#include "extern.h" +#include +#include +#include +#include +#include +#include +#include -# define execsh(sh) execl(sh, shell_name[roll(1, num_names)-1], 0) +#define execsh(sh) execl(sh, shell_name[roll(1, num_names)-1], NULL) static char *shell_def = "/bin/csh", *shell_name[] = { @@ -21,26 +26,27 @@ static char *shell_def = "/bin/csh", static int num_names = sizeof shell_name / sizeof (char *);; -char *shell_in(); - /* * This routine executes a truncated set of commands until a * "yes or "no" answer is gotten. */ +int getyn(prompt) reg char *prompt; { reg int com; for (;;) - if ((com=getinp(prompt, yn)) < 2) + if ((com=getinp(prompt, yesno)) < 2) return com; else (*func[com-2])(); } + /* * This routine tells the player if he's out of money. */ +void notify() { if (cur_p->money < 0) @@ -52,19 +58,24 @@ notify() { told_em = TRUE; } } + /* * This routine switches to the next player */ +void next_play() { - player = ++player % num_play; + player++; + player %= num_play; cur_p = &play[player]; num_doub = 0; } + /* * This routine gets an integer from the keyboard after the * given prompt. */ +int get_int(prompt) reg char *prompt; { @@ -74,7 +85,7 @@ reg char *prompt; { for (;;) { inter: - printf(prompt); + printf("%s", prompt); num = 0; for (sp = buf; (*sp=getchar()) != '\n' && !feof(stdin); sp++) if (*sp == -1) /* check for interrupted system call */ @@ -95,9 +106,28 @@ inter: printf("I can't understand that\n"); } } + +/* + * This routine sets things up as if it is a new monopoly + */ +static void +is_monop(mp, pl) +reg MON *mp; +int pl; { + + reg int i; + + mp->owner = pl; + mp->num_own = mp->num_in; + for (i = 0; i < mp->num_in; i++) + ((PROP*)mp->sq[i]->desc)->monop = TRUE; + mp->name = mp->mon_n; +} + /* * This routine sets the monopoly flag from the list given. */ +void set_ownlist(pl) int pl; { @@ -146,10 +176,10 @@ int pl; { #ifdef DEBUG printf(" case PRPTY:\n"); #endif - orig = op->sqr->desc->mon_desc; + orig = ((PROP*)op->sqr->desc)->mon_desc; orig_op = op; num = 0; - while (op && op->sqr->desc->mon_desc == orig) { + while (op && ((PROP*)op->sqr->desc)->mon_desc == orig) { #ifdef DEBUG printf("iter: %d\n", num); #endif @@ -166,17 +196,17 @@ int pl; { printf("num = %d\n"); #endif if (orig == 0) { - printf("panic: bad monopoly descriptor: orig = %d\n", orig); + printf("panic: bad monopoly descriptor: orig = %p\n", orig); printf("player # %d\n", pl+1); printhold(pl); - printf("orig_op = %d\n", orig_op); + printf("orig_op = %p\n", orig_op); printf("orig_op->sqr->type = %d (PRPTY)\n", op->sqr->type); - printf("orig_op->next = %d\n", op->next); - printf("orig_op->sqr->desc = %d\n", op->sqr->desc); - printf("op = %d\n", op); + printf("orig_op->next = %p\n", op->next); + printf("orig_op->sqr->desc = %p\n", op->sqr->desc); + printf("op = %p\n", op); printf("op->sqr->type = %d (PRPTY)\n", op->sqr->type); - printf("op->next = %d\n", op->next); - printf("op->sqr->desc = %d\n", op->sqr->desc); + printf("op->next = %p\n", op->next); + printf("op->sqr->desc = %p\n", op->sqr->desc); printf("num = %d\n", num); } #ifdef DEBUG @@ -190,66 +220,64 @@ int pl; { } } } -/* - * This routine sets things up as if it is a new monopoly - */ -is_monop(mp, pl) -reg MON *mp; -int pl; { - reg char *sp; - reg int i; - - mp->owner = pl; - mp->num_own = mp->num_in; - for (i = 0; i < mp->num_in; i++) - mp->sq[i]->desc->monop = TRUE; - mp->name = mp->mon_n; -} /* * This routine sets things up as if it is no longer a monopoly */ +void isnot_monop(mp) reg MON *mp; { - reg char *sp; reg int i; mp->owner = -1; for (i = 0; i < mp->num_in; i++) - mp->sq[i]->desc->monop = FALSE; + ((PROP*)mp->sq[i]->desc)->monop = FALSE; mp->name = mp->not_m; } + /* * This routine gives a list of the current player's routine */ +void list() { - printhold(player); } + /* * This routine gives a list of a given players holdings */ +void list_all() { - reg int pl; while ((pl=getinp("Whose holdings do you want to see? ", name_list)) < num_play) printhold(pl); } + /* * This routine gives the players a chance before it exits. */ -quit() { +void +quit(int sig) { putchar('\n'); - if (getyn("Do you all really want to quit? ", yn) == 0) + if (getyn("Do you all really want to quit? ") == 0) exit(0); signal(2, quit); } + +int +quitgame() +{ + quit(0); + return 0; +} + /* * This routine copies one structure to another */ +void cpy_st(s1, s2, size) reg int *s1, *s2, size; { @@ -257,37 +285,11 @@ reg int *s1, *s2, size; { while (size--) *s1++ = *s2++; } -/* - * This routine forks off a shell. It uses the users login shell - */ -shell_out() { - static char *shell = NULL; - - printline(); - if (shell == NULL) - shell = shell_in(); - fflush(); - if (!fork()) { - signal(SIGINT, SIG_DFL); - execsh(shell); - } - ignoresigs(); - wait(); - resetsigs(); - putchar('\n'); - printline(); -} /* * This routine looks up the users login shell */ -# include - -struct passwd *getpwuid(); - -char *getenv(); - -char * +static char * shell_in() { reg struct passwd *pp; @@ -303,24 +305,49 @@ shell_in() { } return sp; } + /* * This routine sets things up to ignore all the signals. */ +static void ignoresigs() { - reg int i; for (i = 0; i < NSIG; i++) signal(i, SIG_IGN); } + /* * This routine sets up things as they were before. */ +static void resetsigs() { - reg int i; for (i = 0; i < NSIG; i++) signal(i, SIG_DFL); signal(2, quit); } + +/* + * This routine forks off a shell. It uses the users login shell + */ +void +shell_out() { + static char *shell = NULL; + int status; + + printline(); + if (shell == NULL) + shell = shell_in(); + fflush(stdout); + if (!fork()) { + signal(SIGINT, SIG_DFL); + execsh(shell); + } + ignoresigs(); + wait(&status); + resetsigs(); + putchar('\n'); + printline(); +} diff --git a/src/games/monop/mon.dat b/src/games/monop/mon.dat deleted file mode 100644 index cd49305..0000000 --- a/src/games/monop/mon.dat +++ /dev/null @@ -1,9 +0,0 @@ -/* name owner num_in num_own h_cost not_m mon_n sq */ -{0, -1, 2, 0, 1, "Purple", "PURPLE", {1,3}}, -{0, -1, 3, 0, 1, "Lt. Blue", "LT. BLUE", {6,8,9}}, -{0, -1, 3, 0, 2, "Violet", "VIOLET", {11,13,14}}, -{0, -1, 3, 0, 2, "Orange", "ORANGE", {16,18,19}}, -{0, -1, 3, 0, 3, "Red", "RED", {21,23,24}}, -{0, -1, 3, 0, 3, "Yellow", "YELLOW", {26,27,29}}, -{0, -1, 3, 0, 4, "Green", "GREEN", {31,32,34}}, -{0, -1, 2, 0, 4, "Dk. Blue", "DK. BLUE", {37,39}} diff --git a/src/games/monop/mon.dat.h b/src/games/monop/mon.dat.h new file mode 100644 index 0000000..fd25718 --- /dev/null +++ b/src/games/monop/mon.dat.h @@ -0,0 +1,9 @@ +/* name owner num_in num_own h_cost not_m mon_n sq */ +{0, -1, 2, 0, 1, "Purple", "PURPLE", {(SQUARE*)1,(SQUARE*)3}}, +{0, -1, 3, 0, 1, "Lt. Blue", "LT. BLUE", {(SQUARE*)6,(SQUARE*)8,(SQUARE*)9}}, +{0, -1, 3, 0, 2, "Violet", "VIOLET", {(SQUARE*)11,(SQUARE*)13,(SQUARE*)14}}, +{0, -1, 3, 0, 2, "Orange", "ORANGE", {(SQUARE*)16,(SQUARE*)18,(SQUARE*)19}}, +{0, -1, 3, 0, 3, "Red", "RED", {(SQUARE*)21,(SQUARE*)23,(SQUARE*)24}}, +{0, -1, 3, 0, 3, "Yellow", "YELLOW", {(SQUARE*)26,(SQUARE*)27,(SQUARE*)29}}, +{0, -1, 3, 0, 4, "Green", "GREEN", {(SQUARE*)31,(SQUARE*)32,(SQUARE*)34}}, +{0, -1, 2, 0, 4, "Dk. Blue", "DK. BLUE", {(SQUARE*)37,(SQUARE*)39}} diff --git a/src/games/monop/monop.c b/src/games/monop/monop.c index fd6023d..a6a6c63 100644 --- a/src/games/monop/monop.c +++ b/src/games/monop/monop.c @@ -1,37 +1,13 @@ -# include "monop.def" +#include "defines.h" +#include +#include +#include +#include -/* - * This program implements a monopoly game - */ -main(ac, av) -reg int ac; -reg char *av[]; { - - - srand(getpid()); - if (ac > 1) { - if (!rest_f(av[1])) - restore(); - } - else { - getplayers(); - init_players(); - init_monops(); - } - num_luck = sizeof lucky_mes / sizeof (char *); - init_decks(); - signal(2, quit); - for (;;) { - printf("\n%s (%d) (cash $%d) on %s\n", cur_p->name, player + 1, - cur_p->money, board[cur_p->loc].name); - printturn(); - force_morg(); - execute(getinp("-- Command: ", comlist)); - } -} /* * This routine gets the names of the players */ +void getplayers() { reg char *sp; @@ -64,7 +40,7 @@ over: name_list[i] = 0; for (i = 0; i < num_play; i++) for (j = i + 1; j < num_play; j++) - if (strcmp(name_list[i], name_list[j]) == 0) { + if (strcasecmp(name_list[i], name_list[j]) == 0) { if (i != num_play - 1) printf("Hey!!! Some of those are IDENTICAL!! Let's try that again....\n"); else @@ -75,14 +51,16 @@ over: goto blew_it; } } + /* * This routine figures out who goes first */ +void init_players() { reg int i, rl, cur_max; - bool over; - int max_pl; + bool over = 0; + int max_pl = 0; again: putchar('\n'); @@ -105,9 +83,11 @@ again: cur_p = &play[max_pl]; printf("%s (%d) goes first\n", cur_p->name, max_pl + 1); } + /* * This routine initalizes the monopoly structures. */ +void init_monops() { reg MON *mp; @@ -119,3 +99,34 @@ init_monops() { mp->sq[i] = &board[(int)(mp->sq[i])]; } } + +/* + * This program implements a monopoly game + */ +int +main(ac, av) +reg int ac; +reg char *av[]; { + + + srand(getpid()); + if (ac > 1) { + if (!rest_f(av[1])) + restore(); + } + else { + getplayers(); + init_players(); + init_monops(); + } + num_luck = sizeof lucky_mes / sizeof (char *); + init_decks(); + signal(2, quit); + for (;;) { + printf("\n%s (%d) (cash $%d) on %s\n", cur_p->name, player + 1, + cur_p->money, board[(int)cur_p->loc].name); + printturn(); + force_morg(); + execute(getinp("-- Command: ", comlist)); + } +} diff --git a/src/games/monop/monop.h b/src/games/monop/monop.h index 0e53371..443f6b3 100644 --- a/src/games/monop/monop.h +++ b/src/games/monop/monop.h @@ -95,4 +95,29 @@ typedef struct prp_st PROP; typedef struct rr_st RR_S; typedef struct rr_st UTIL_S; -int cc(), chance(), lux_tax(), goto_jail(), inc_tax(); +int rest_f(char *file); +int get_int(char *prompt); +int roll(int ndie, int nsides); +int getinp(char *prompt, char *list[]); +int move_jail(int r1, int r2); +int getyn(char *prompt); + +void goto_jail(void); +void inc_tax(void); +void lux_tax(void); +void cc(void); +void chance(void); +void init_decks(void); +void quit(int sig); +void printturn(void); +void force_morg(void); +void execute(int com_num); +void move(int rl); +void notify(void); +void next_play(void); +void buy(int player, SQUARE *sqrp); +void bid(void); +void rent(SQUARE *sqp); +void ret_card(PLAY *plr); +void printhold(int pl); +void isnot_monop(MON *mp); diff --git a/src/games/monop/morg.c b/src/games/monop/morg.c index 6a07347..e924e31 100644 --- a/src/games/monop/morg.c +++ b/src/games/monop/morg.c @@ -1,4 +1,4 @@ -# include "monop.ext" +#include "extern.h" /* * These routines deal with mortgaging. @@ -34,6 +34,7 @@ static int num_good,got_houses; * it gets the list of mortgageable property and asks which are to * be mortgaged. */ +void mortgage() { reg int prop; @@ -59,17 +60,19 @@ mortgage() { notify(cur_p); } } + /* * This routine sets up the list of mortgageable property */ +int set_mlist() { reg OWN *op; num_good = 0; for (op = cur_p->own_list; op; op = op->next) - if (!op->sqr->desc->morg) - if (op->sqr->type == PRPTY && op->sqr->desc->houses) + if (! ((PROP*)op->sqr->desc)->morg) + if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->houses) got_houses++; else { names[num_good] = op->sqr->name; @@ -79,24 +82,28 @@ set_mlist() { names[num_good--] = 0; return num_good; } + /* * This routine actually mortgages the property. */ +void m(prop) reg int prop; { reg int price; price = board[prop].cost/2; - board[prop].desc->morg = TRUE; + ((PROP*)board[prop].desc)->morg = TRUE; printf("That got you $%d\n",price); cur_p->money += price; } + /* * This routine is the command level repsponse to the unmortgage * command. It gets the list of mortgaged property and asks which are * to be unmortgaged. */ +void unmortgage() { reg int prop; @@ -118,16 +125,18 @@ unmortgage() { unm(square[prop]); } } + /* * This routine sets up the list of mortgaged property */ +int set_umlist() { reg OWN *op; num_good = 0; for (op = cur_p->own_list; op; op = op->next) - if (op->sqr->desc->morg) { + if (((PROP*)op->sqr->desc)->morg) { names[num_good] = op->sqr->name; square[num_good++] = sqnum(op->sqr); } @@ -135,25 +144,29 @@ set_umlist() { names[num_good--] = 0; return num_good; } + /* * This routine actually unmortgages the property */ +void unm(prop) reg int prop; { reg int price; price = board[prop].cost/2; - board[prop].desc->morg = FALSE; + ((PROP*)board[prop].desc)->morg = FALSE; price += price/10; printf("That cost you $%d\n",price); cur_p->money -= price; set_umlist(); } + /* * This routine forces the indebted player to fix his * financial woes. */ +void force_morg() { told_em = fixing = TRUE; @@ -161,9 +174,11 @@ force_morg() { fix_ex(getinp("How are you going to fix it up? ",morg_coms)); fixing = FALSE; } + /* * This routine is a special execute for the force_morg routine */ +void fix_ex(com_num) reg int com_num; { diff --git a/src/games/monop/print.c b/src/games/monop/print.c index d7e27b6..cb2943b 100644 --- a/src/games/monop/print.c +++ b/src/games/monop/print.c @@ -1,4 +1,4 @@ -# include "monop.ext" +#include "extern.h" static char buf[80], /* output buffer */ *header = "Name Own Price Mg # Rent"; @@ -6,6 +6,7 @@ static char buf[80], /* output buffer */ /* * This routine prints out the current board */ +void printboard() { reg int i; @@ -17,9 +18,11 @@ printboard() { printsq(i+N_SQRS/2, TRUE); } } + /* * This routine lists where each player is. */ +void where() { reg int i; @@ -34,9 +37,11 @@ where() { putchar('\n'); } } + /* * This routine prints out an individual square */ +void printsq(sqn, eoln) int sqn; reg bool eoln; { @@ -60,7 +65,7 @@ spec: printf(" "); break; case PRPTY: - pp = sqp->desc; + pp = (PROP*) sqp->desc; if (sqp->owner < 0) { printf(" - %-8.8s %3d", pp->mon_desc->name, sqp->cost); if (!eoln) @@ -113,20 +118,24 @@ spec: if (eoln) putchar('\n'); } + /* * This routine prints out the mortgage flag. */ +void printmorg(sqp) reg SQUARE *sqp; { - if (sqp->desc->morg) + if (((PROP*)sqp->desc)->morg) printf(" * "); else printf(" "); } + /* * This routine lists the holdings of the player given */ +void printhold(pl) reg int pl; { diff --git a/src/games/monop/prop.c b/src/games/monop/prop.c index 846f2ff..ab07e2d 100644 --- a/src/games/monop/prop.c +++ b/src/games/monop/prop.c @@ -1,9 +1,11 @@ -# include "monop.ext" +#include "extern.h" +#include /* * This routine deals with buying property, setting all the * appropriate flags. */ +void buy(player, sqrp) reg int player; reg SQUARE *sqrp; { @@ -12,9 +14,11 @@ reg SQUARE *sqrp; { sqrp->owner = player; add_list(player, &(play[player].own_list), cur_p->loc); } + /* * This routine adds an item to the list. */ +void add_list(plr, head, op_sqr) int plr; OWN **head; @@ -44,9 +48,11 @@ int op_sqr; { if (!trading) set_ownlist(plr); } + /* * This routine deletes property from the list. */ +void del_list(plr, head, op_sqr) int plr; OWN **head; @@ -57,7 +63,7 @@ shrt op_sqr; { switch (board[op_sqr].type) { case PRPTY: - board[op_sqr].desc->mon_desc->num_own--; + ((PROP*)board[op_sqr].desc)->mon_desc->num_own--; break; case RR: play[plr].num_rr--; @@ -83,6 +89,7 @@ shrt op_sqr; { * This routine calculates the value for sorting of the * given square. */ +int value(sqp) reg SQUARE *sqp; { @@ -105,12 +112,13 @@ reg SQUARE *sqp; { return 8 + (PROP *)(sqp->desc) - prop; } } + /* * This routine accepts bids for the current peice * of property. */ +void bid() { - static bool in[MAX_PL]; reg int i, num_in, cur_max; char buf[80]; @@ -151,10 +159,12 @@ bid() { else printf("Nobody seems to want it, so we'll leave it for later\n"); } + /* * This routine calculates the value of the property * of given player. */ +int prop_worth(plp) reg PLAY *plp; { @@ -163,9 +173,9 @@ reg PLAY *plp; { worth = 0; for (op = plp->own_list; op; op = op->next) { - if (op->sqr->type == PRPTY && op->sqr->desc->monop) - worth += op->sqr->desc->mon_desc->h_cost * 50 * - op->sqr->desc->houses; + if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->monop) + worth += ((PROP*)op->sqr->desc)->mon_desc->h_cost * 50 * + ((PROP*)op->sqr->desc)->houses; worth += op->sqr->cost; } return worth; diff --git a/src/games/monop/prop.dat b/src/games/monop/prop.dat.h similarity index 100% rename from src/games/monop/prop.dat rename to src/games/monop/prop.dat.h diff --git a/src/games/monop/rent.c b/src/games/monop/rent.c index 7357f8f..b10a1fd 100644 --- a/src/games/monop/rent.c +++ b/src/games/monop/rent.c @@ -1,8 +1,9 @@ -# include "monop.ext" +#include "extern.h" /* * This routine has the player pay rent */ +void rent(sqp) reg SQUARE *sqp; { @@ -12,13 +13,13 @@ reg SQUARE *sqp; { plp = &play[sqp->owner]; printf("Owned by %s\n", plp->name); - if (sqp->desc->morg) { + if (((PROP*)sqp->desc)->morg) { lucky("The thing is mortgaged. "); return; } switch (sqp->type) { case PRPTY: - pp = sqp->desc; + pp = (PROP*) sqp->desc; if (pp->monop) if (pp->houses == 0) printf("rent is %d\n", rnt=pp->rent[0] * 2); diff --git a/src/games/monop/roll.c b/src/games/monop/roll.c index b1d72a2..f32281a 100644 --- a/src/games/monop/roll.c +++ b/src/games/monop/roll.c @@ -2,36 +2,14 @@ * This routine rolls ndie nside-sided dice. */ -# define reg register - -# ifndef vax -# define MAXRAND 32767L - +int roll(ndie, nsides) int ndie, nsides; { - reg long tot; - reg unsigned n, r; + int tot; - tot = 0; - n = ndie; - while (n--) - tot += rand(); - return (int) ((tot * (long) nsides) / ((long) MAXRAND + 1)) + ndie; -} - -# else - -roll(ndie, nsides) -reg int ndie, nsides; { - - reg int tot, r; - reg double num_sides; - - num_sides = nsides; tot = 0; while (ndie--) - tot += (r = rand()) * (num_sides / 017777777777) + 1; + tot += rand() % nsides + 1; return tot; } -# endif diff --git a/src/games/monop/spec.c b/src/games/monop/spec.c index b100f21..bd994e9 100644 --- a/src/games/monop/spec.c +++ b/src/games/monop/spec.c @@ -1,9 +1,10 @@ -# include "monop.ext" +#include "extern.h" static char *perc[] = { "10%", "ten percent", "%", "$200", "200", 0 }; +void inc_tax() { /* collect income tax */ reg int worth, com_num; @@ -30,20 +31,24 @@ inc_tax() { /* collect income tax */ if (worth == 200) lucky("\nIt makes no difference! "); } -goto_jail() { /* move player to jail */ +void +goto_jail() { /* move player to jail */ cur_p->loc = JAIL; } -lux_tax() { /* landing on luxury tax */ +void +lux_tax() { /* landing on luxury tax */ printf("You lose $75\n"); cur_p->money -= 75; } -cc() { /* draw community chest card */ +void +cc() { /* draw community chest card */ get_card(&CC_D); } -chance() { /* draw chance card */ +void +chance() { /* draw chance card */ get_card(&CH_D); } diff --git a/src/games/monop/strcmp.c b/src/games/monop/strcmp.c index 1c53627..189f60c 100644 --- a/src/games/monop/strcmp.c +++ b/src/games/monop/strcmp.c @@ -1,9 +1,9 @@ -# include -# include +#include +#include -# define reg register +#define reg register -# define makelower(c) (isupper(c) ? tolower(c) : c) +#define makelower(c) (isupper(c) ? tolower(c) : c) /* * Compare strings: s1>s2: >0 s1==s2: 0 s1 -static struct trd_st { /* how much to give to other player */ +struct trd_st { /* how much to give to other player */ int trader; /* trader number */ int cash; /* amount of cash */ int gojf; /* # get-out-of-jail-free cards */ @@ -219,7 +220,7 @@ resign() { } while (new_own == player); name_list[num_play] = "done"; } - if (getyn("Do you really want to resign? ", yn) != 0) + if (getyn("Do you really want to resign? ", yesno) != 0) return; if (num_play == 1) { printf("Then NOBODY wins (not even YOU!)\n"); @@ -241,10 +242,10 @@ resign() { for (op = cur_p->own_list; op; op = op->next) { sqp = op->sqr; sqp->owner = -1; - sqp->desc->morg = FALSE; - if (op->type == PRPTY) { - isnot_monop(sqp->desc->mon_desc); - sqp->desc->houses = 0; + ((PROP*)sqp->desc)->morg = FALSE; + if (op->sqr->type == PRPTY) { + isnot_monop(((PROP*)sqp->desc)->mon_desc); + ((PROP*)sqp->desc)->houses = 0; } } if (cur_p->num_gojf) From d9d91365c0e71b99065e50b90ccdd97fb133dadb Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Wed, 10 Sep 2014 20:09:59 -0700 Subject: [PATCH 08/16] Fixed warning in mille. --- src/games/mille/Makefile | 2 +- src/games/mille/mille.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/games/mille/Makefile b/src/games/mille/Makefile index 509cf3f..2a7bccb 100644 --- a/src/games/mille/Makefile +++ b/src/games/mille/Makefile @@ -6,7 +6,7 @@ include $(TOPSRC)/target.mk #include $(TOPSRC)/cross.mk #CFLAGS = -O -DCROSS -Werror -Wall -#CFLAGS += -Werror -Wall +CFLAGS += -Werror -Wall OBJS = comp.o end.o extern.o init.o mille.o misc.o move.o print.o \ roll.o save.o types.o varpush.o diff --git a/src/games/mille/mille.c b/src/games/mille/mille.c index 4561d04..cdd1bf0 100644 --- a/src/games/mille/mille.c +++ b/src/games/mille/mille.c @@ -32,7 +32,7 @@ int ac; char *av[]; { bool restore; - double avs[3]; + unsigned avs[3]; if (strcmp(av[0], "a.out") == 0) { outf = fopen("q", "w"); @@ -41,8 +41,7 @@ char *av[]; { } restore = FALSE; - getloadavg(avs, 3); - if (avs[2] > 4.0) { + if (getloadavg(avs, 3) >= 0 && avs[2] > 400) { printf("Sorry. The load average is too high.\n"); printf("Please try again later\n"); exit(1); From 2ea9e02ba5e454fecd6a16bdb87be8b0bf4695b5 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Wed, 10 Sep 2014 20:48:05 -0700 Subject: [PATCH 09/16] Monop game done. --- cross.mk | 2 +- rootfs.manifest | 4 ++ src/games/Makefile | 4 +- src/games/monop/Makefile | 12 ++-- src/games/monop/cards.pck | Bin 0 -> 2115 bytes src/games/monop/deck.h | 2 + src/games/monop/initdeck.c | 78 ++++++++++++---------- src/games/monop/misc.c | 14 +--- src/games/monop/monop.c | 5 +- src/games/monop/monop.h | 5 ++ src/games/monop/morg.c | 121 +++++++++++++++++----------------- src/games/monop/print.c | 40 +++++------ src/games/monop/prop.c | 79 +++++++++++----------- src/games/monop/rent.c | 8 +-- src/games/monop/roll.c | 3 +- src/games/monop/trade.c | 131 ++++++++++++++++++++----------------- 16 files changed, 264 insertions(+), 244 deletions(-) create mode 100644 src/games/monop/cards.pck diff --git a/cross.mk b/cross.mk index 8dec173..89b37ac 100644 --- a/cross.mk +++ b/cross.mk @@ -1,7 +1,7 @@ DESTDIR = /usr/local/retrobsd MACHINE = mips -CC = gcc +CC = gcc -m32 AS = $(CC) -x assembler-with-cpp LD = ld diff --git a/rootfs.manifest b/rootfs.manifest index 2c5fbe1..4faefef 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -420,6 +420,7 @@ file /games/fish file /games/fortune file /games/hangman file /games/mille +file /games/monop file /games/morse file /games/number file /games/ppt @@ -445,6 +446,8 @@ file /games/lib/cfscores mode 0666 file /games/lib/fortunes.dat mode 0444 +file /games/lib/cards.pck +mode 0444 # # Files: /include @@ -733,6 +736,7 @@ file /share/man/cat6/fish.0 file /share/man/cat6/fortune.0 file /share/man/cat6/hangman.0 file /share/man/cat6/mille.0 +file /share/man/cat6/monop.0 file /share/man/cat6/number.0 file /share/man/cat6/rain.0 file /share/man/cat6/rogue.0 diff --git a/src/games/Makefile b/src/games/Makefile index eb97ec0..e032637 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -12,8 +12,8 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ - cribbage fortune hangman mille rogue sail trek -# TODO: monop quiz robots snake + cribbage fortune hangman mille monop rogue sail trek +# TODO: quiz robots snake # C programs that live in the current directory and do not need # explicit make lines. diff --git a/src/games/monop/Makefile b/src/games/monop/Makefile index a5c9c30..352ab5e 100644 --- a/src/games/monop/Makefile +++ b/src/games/monop/Makefile @@ -4,11 +4,11 @@ # Makefile: K.S. # TOPSRC = $(shell cd ../../..; pwd) -#include $(TOPSRC)/target.mk -include $(TOPSRC)/cross.mk -CFLAGS = -DCROSS +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk +#CFLAGS = -DCROSS -O -CFLAGS += -O -Werror -Wall +CFLAGS += -Werror -Wall LIBS = -lc OBJS = monop.o cards.o execute.o getinp.o houses.o jail.o misc.o \ @@ -27,14 +27,14 @@ monop: $(OBJS) initdeck: initdeck.c deck.h $(CC) -o initdeck $(LDFLAGS) $(CFLAGS) initdeck.c -cards.pck: initdeck cards.inp +cards.pck: #initdeck cards.inp ./initdeck $(MAN): $(MANSRC) $(MANROFF) $< > $@ clean: - rm -f *.o *.0 *.elf $(MAN) monop initdeck cards.pck *.elf *.dis tags *~ + rm -f *.o *.0 *.elf $(MAN) monop initdeck *.elf *.dis tags *~ install: all install monop $(DESTDIR)/games/ diff --git a/src/games/monop/cards.pck b/src/games/monop/cards.pck new file mode 100644 index 0000000000000000000000000000000000000000..c04f17d1554addf8a435237b60aeca23680bda41 GIT binary patch literal 2115 zcmd5-%Wh*u5N)1Aj0Cfo1#D0)EX|BT9Ph zHtp?|K4czK7@C4o?K7I#U~;m|8E51?6)w+8YJ2-lMCozLX38|c{u%qJNx7i%-QB7< z{0N7pwpY~l9_Pl=LpSl1=&AG7(!R@cP6NDawdj5e?j4)D5mR4(LOmW#Z1$KR+$xm} zZl`)qAGl&{g3hU2uhrx_IXE%{rj9KpUfYzZtHZ=|u@PkHTY+!l-G~aEGr0ks1(#k) zessym>7G>3e*iBfd)hNKih}W%#afHt8GfF}+IYm@D&MQom_4$Z6pUrPzPnrp&R5wz zsEl+$3CenUW)X&0mv;^|aGf~|TvLZHPQCe*1w>6v){`)&eP;s~;Tp+$y`;LayNzrb z0SJx`PD*z+v3`4%jTC0=ki9{{5tmBkD_kz%o~1+Q^4JG}Q?Bnyi@Jw`$JUlm=Y;wv z3)X-z2aa0CqnY`faO0sid6im@tP3>OMIr91b^1ix8+X?+dyV53ot(CN4f%iEIX)0J zu5;h5(Lh?pIvvtD*K@!vymMo=#$J*&m%~5>>wt!UC=$5k(%}4UfX@6Lk(5@Bwfr|j z(CrB#8(@baV^TnuB2W)7c&D=+(rDipSG$>IU+T{=C73S;eXI}|kj;h$MPUm==Wyg_ zreMOc2{~g3I)imMahX^NmC+n693k+h#+C{iBDQv+y|WcUH7tvv{F)-2{TI`uYmcP|sx0AixEndaN^$ zIf5;0)NZR8grw=aD?9+(Ym% z*ypD?H?9?F(d6*W0C@Lxn6CXGXcM*rDWu|B*#$BAE&}?surXmwh&56mS Qxp8KW95Q&y`xHO=8#~%pFaQ7m literal 0 HcmV?d00001 diff --git a/src/games/monop/deck.h b/src/games/monop/deck.h index 3363612..cddb65c 100644 --- a/src/games/monop/deck.h +++ b/src/games/monop/deck.h @@ -11,3 +11,5 @@ struct dk_st { /* deck description structure */ }; typedef struct dk_st DECK; + +void get_card(DECK *dp); diff --git a/src/games/monop/initdeck.c b/src/games/monop/initdeck.c index 7167bb0..15ca2aa 100644 --- a/src/games/monop/initdeck.c +++ b/src/games/monop/initdeck.c @@ -28,42 +28,7 @@ DECK deck[2]; FILE *inf, *outf; -main(ac, av) -int ac; -char *av[]; { - - getargs(ac, av); - if ((inf = fopen(infile, "r")) == NULL) { - perror(infile); - exit(1); - } - count(); - /* - * allocate space for pointers. - */ - CC_D.offsets = calloc(CC_D.num_cards + 1, sizeof (long)); - CH_D.offsets = calloc(CH_D.num_cards + 1, sizeof (long)); - fseek(inf, 0L, 0); - if ((outf = fopen(outfile, "w")) == NULL) { - perror(outfile); - exit(0); - } - - fwrite(deck, sizeof (DECK), 2, outf); - fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); - fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); - putem(); - - fclose(inf); - fseek(outf, 0, 0L); - fwrite(deck, sizeof (DECK), 2, outf); - fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); - fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); - fclose(outf); - printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards); - exit(0); -} - +void getargs(ac, av) int ac; char *av[]; { @@ -74,9 +39,11 @@ char *av[]; { outfile = av[3]; } } + /* * count the cards */ +void count() { reg bool newline; @@ -96,9 +63,11 @@ count() { newline = (c == '\n'); in_deck->num_cards++; } + /* * put strings in the file */ +void putem() { reg bool newline; @@ -139,3 +108,40 @@ putem() { } putc('\0', outf); } + +int +main(ac, av) +int ac; +char *av[]; { + + getargs(ac, av); + if ((inf = fopen(infile, "r")) == NULL) { + perror(infile); + exit(1); + } + count(); + /* + * allocate space for pointers. + */ + CC_D.offsets = calloc(CC_D.num_cards + 1, sizeof (long)); + CH_D.offsets = calloc(CH_D.num_cards + 1, sizeof (long)); + fseek(inf, 0L, 0); + if ((outf = fopen(outfile, "w")) == NULL) { + perror(outfile); + exit(0); + } + + fwrite(deck, sizeof (DECK), 2, outf); + fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); + fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); + putem(); + + fclose(inf); + fseek(outf, 0, 0L); + fwrite(deck, sizeof (DECK), 2, outf); + fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf); + fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf); + fclose(outf); + printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards); + return 0; +} diff --git a/src/games/monop/misc.c b/src/games/monop/misc.c index b10f206..0acf2e7 100644 --- a/src/games/monop/misc.c +++ b/src/games/monop/misc.c @@ -7,7 +7,7 @@ #include #include -#define execsh(sh) execl(sh, shell_name[roll(1, num_names)-1], NULL) +#define execsh(sh) execl(sh, shell_name[roll(1, num_names)-1], (char*)0) static char *shell_def = "/bin/csh", *shell_name[] = { @@ -274,18 +274,6 @@ quitgame() return 0; } -/* - * This routine copies one structure to another - */ -void -cpy_st(s1, s2, size) -reg int *s1, *s2, size; { - - size /= 2; - while (size--) - *s1++ = *s2++; -} - /* * This routine looks up the users login shell */ diff --git a/src/games/monop/monop.c b/src/games/monop/monop.c index a6a6c63..a397cbe 100644 --- a/src/games/monop/monop.c +++ b/src/games/monop/monop.c @@ -1,6 +1,7 @@ #include "defines.h" #include #include +#include #include #include @@ -46,8 +47,8 @@ over: else printf("\"done\" is a reserved word. Please try again\n"); for (i = 0; i < num_play; i++) - cfree(play[i].name); - cfree(play); + free(play[i].name); + free(play); goto blew_it; } } diff --git a/src/games/monop/monop.h b/src/games/monop/monop.h index 443f6b3..ab74af6 100644 --- a/src/games/monop/monop.h +++ b/src/games/monop/monop.h @@ -101,6 +101,7 @@ int roll(int ndie, int nsides); int getinp(char *prompt, char *list[]); int move_jail(int r1, int r2); int getyn(char *prompt); +int prop_worth(PLAY *plp); void goto_jail(void); void inc_tax(void); @@ -121,3 +122,7 @@ void rent(SQUARE *sqp); void ret_card(PLAY *plr); void printhold(int pl); void isnot_monop(MON *mp); +void printsq(int sqn, bool eoln); +void add_list(int plr, OWN **head, int op_sqr); +void del_list(int plr, OWN **head, shrt op_sqr); +void set_ownlist(int pl); diff --git a/src/games/monop/morg.c b/src/games/monop/morg.c index e924e31..8438e53 100644 --- a/src/games/monop/morg.c +++ b/src/games/monop/morg.c @@ -29,6 +29,44 @@ static shrt square[MAX_PRP+2]; static int num_good,got_houses; +/* + * This routine sets up the list of mortgageable property + */ +static int +set_mlist() { + + reg OWN *op; + + num_good = 0; + for (op = cur_p->own_list; op; op = op->next) + if (! ((PROP*)op->sqr->desc)->morg) { + if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->houses) + got_houses++; + else { + names[num_good] = op->sqr->name; + square[num_good++] = sqnum(op->sqr); + } + } + names[num_good++] = "done"; + names[num_good--] = 0; + return num_good; +} + +/* + * This routine actually mortgages the property. + */ +static void +m(prop) +reg int prop; { + + reg int price; + + price = board[prop].cost/2; + ((PROP*)board[prop].desc)->morg = TRUE; + printf("That got you $%d\n",price); + cur_p->money += price; +} + /* * This routine is the command level response the mortgage command. * it gets the list of mortgageable property and asks which are to @@ -57,45 +95,44 @@ mortgage() { if (prop == num_good) return; m(square[prop]); - notify(cur_p); + notify(); } } /* - * This routine sets up the list of mortgageable property + * This routine sets up the list of mortgaged property */ -int -set_mlist() { +static int +set_umlist() { reg OWN *op; num_good = 0; for (op = cur_p->own_list; op; op = op->next) - if (! ((PROP*)op->sqr->desc)->morg) - if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->houses) - got_houses++; - else { - names[num_good] = op->sqr->name; - square[num_good++] = sqnum(op->sqr); - } + if (((PROP*)op->sqr->desc)->morg) { + names[num_good] = op->sqr->name; + square[num_good++] = sqnum(op->sqr); + } names[num_good++] = "done"; names[num_good--] = 0; return num_good; } /* - * This routine actually mortgages the property. + * This routine actually unmortgages the property */ -void -m(prop) +static void +unm(prop) reg int prop; { reg int price; price = board[prop].cost/2; - ((PROP*)board[prop].desc)->morg = TRUE; - printf("That got you $%d\n",price); - cur_p->money += price; + ((PROP*)board[prop].desc)->morg = FALSE; + price += price/10; + printf("That cost you $%d\n",price); + cur_p->money -= price; + set_umlist(); } /* @@ -127,39 +164,15 @@ unmortgage() { } /* - * This routine sets up the list of mortgaged property + * This routine is a special execute for the force_morg routine */ -int -set_umlist() { +static void +fix_ex(com_num) +reg int com_num; { - reg OWN *op; - - num_good = 0; - for (op = cur_p->own_list; op; op = op->next) - if (((PROP*)op->sqr->desc)->morg) { - names[num_good] = op->sqr->name; - square[num_good++] = sqnum(op->sqr); - } - names[num_good++] = "done"; - names[num_good--] = 0; - return num_good; -} - -/* - * This routine actually unmortgages the property - */ -void -unm(prop) -reg int prop; { - - reg int price; - - price = board[prop].cost/2; - ((PROP*)board[prop].desc)->morg = FALSE; - price += price/10; - printf("That cost you $%d\n",price); - cur_p->money -= price; - set_umlist(); + told_em = FALSE; + (*func[com_num])(); + notify(); } /* @@ -174,15 +187,3 @@ force_morg() { fix_ex(getinp("How are you going to fix it up? ",morg_coms)); fixing = FALSE; } - -/* - * This routine is a special execute for the force_morg routine - */ -void -fix_ex(com_num) -reg int com_num; { - - told_em = FALSE; - (*func[com_num])(); - notify(); -} diff --git a/src/games/monop/print.c b/src/games/monop/print.c index cb2943b..1c3115a 100644 --- a/src/games/monop/print.c +++ b/src/games/monop/print.c @@ -1,7 +1,6 @@ #include "extern.h" -static char buf[80], /* output buffer */ - *header = "Name Own Price Mg # Rent"; +static char *header = "Name Own Price Mg # Rent"; /* * This routine prints out the current board @@ -26,7 +25,6 @@ void where() { reg int i; - char *bsp; printf("%s Player\n", header); for (i = 0; i < num_play; i++) { @@ -38,6 +36,19 @@ where() { } } +/* + * This routine prints out the mortgage flag. + */ +static void +printmorg(sqp) +reg SQUARE *sqp; { + + if (((PROP*)sqp->desc)->morg) + printf(" * "); + else + printf(" "); +} + /* * This routine prints out an individual square */ @@ -49,7 +60,6 @@ reg bool eoln; { reg int rnt; reg PROP *pp; reg SQUARE *sqp; - int i; sqp = &board[sqn]; printf("%-10.10s", sqp->name); @@ -79,7 +89,7 @@ spec: if (pp->houses < 5) if (pp->houses > 0) printf("%d %4d", pp->houses, - pp->rent[pp->houses]); + pp->rent[(int)pp->houses]); else printf("0 %4d", pp->rent[0] * 2); else @@ -97,7 +107,7 @@ spec: } printf(" %d 150", sqp->owner+1); printmorg(sqp); - printf("%d", play[sqp->owner].num_util); + printf("%d", play[(int)sqp->owner].num_util); if (!eoln) printf(" "); break; @@ -111,27 +121,14 @@ spec: printf(" %d Railroad 200", sqp->owner+1); printmorg(sqp); rnt = 25; - rnt <<= play[sqp->owner].num_rr - 1; - printf("%d %4d", play[sqp->owner].num_rr, 25 << (play[sqp->owner].num_rr - 1)); + rnt <<= play[(int)sqp->owner].num_rr - 1; + printf("%d %4d", play[(int)sqp->owner].num_rr, 25 << (play[(int)sqp->owner].num_rr - 1)); break; } if (eoln) putchar('\n'); } -/* - * This routine prints out the mortgage flag. - */ -void -printmorg(sqp) -reg SQUARE *sqp; { - - if (((PROP*)sqp->desc)->morg) - printf(" * "); - else - printf(" "); -} - /* * This routine lists the holdings of the player given */ @@ -141,7 +138,6 @@ reg int pl; { reg OWN *op; reg PLAY *pp; - char *bsp; pp = &play[pl]; printf("%s's (%d) holdings (Total worth: $%d):\n", name_list[pl], pl+1, diff --git a/src/games/monop/prop.c b/src/games/monop/prop.c index ab07e2d..67b9eb5 100644 --- a/src/games/monop/prop.c +++ b/src/games/monop/prop.c @@ -15,6 +15,35 @@ reg SQUARE *sqrp; { add_list(player, &(play[player].own_list), cur_p->loc); } +/* + * This routine calculates the value for sorting of the + * given square. + */ +static int +value(sqp) +reg SQUARE *sqp; { + + reg int sqr; + + sqr = sqnum(sqp); + switch (sqp->type) { + case SAFE: + return 0; + case SPEC: + return 1; + case UTIL: + if (sqr == 12) + return 2; + else + return 3; + case RR: + return 4 + sqr/10; + case PRPTY: + return 8 + (PROP *)(sqp->desc) - prop; + } + return 0; +} + /* * This routine adds an item to the list. */ @@ -26,7 +55,6 @@ int op_sqr; { reg int val; reg OWN *tp, *last_tp; - MON *mp; OWN *op; op = calloc(1, sizeof (OWN)); @@ -35,7 +63,7 @@ int op_sqr; { last_tp = NULL; for (tp = *head; tp && value(tp->sqr) < val; tp = tp->next) if (val == value(tp->sqr)) { - cfree(op); + free(op); return; } else @@ -58,12 +86,11 @@ int plr; OWN **head; shrt op_sqr; { - reg int i; reg OWN *op, *last_op; - switch (board[op_sqr].type) { + switch (board[(int)op_sqr].type) { case PRPTY: - ((PROP*)board[op_sqr].desc)->mon_desc->num_own--; + ((PROP*)board[(int)op_sqr].desc)->mon_desc->num_own--; break; case RR: play[plr].num_rr--; @@ -74,7 +101,7 @@ shrt op_sqr; { } last_op = NULL; for (op = *head; op; op = op->next) - if (op->sqr == &board[op_sqr]) + if (op->sqr == &board[(int)op_sqr]) break; else last_op = op; @@ -82,34 +109,7 @@ shrt op_sqr; { *head = op->next; else { last_op->next = op->next; - cfree(op); - } -} -/* - * This routine calculates the value for sorting of the - * given square. - */ -int -value(sqp) -reg SQUARE *sqp; { - - reg int sqr; - - sqr = sqnum(sqp); - switch (sqp->type) { - case SAFE: - return 0; - case SPEC: - return 1; - case UTIL: - if (sqr == 12) - return 2; - else - return 3; - case RR: - return 4 + sqr/10; - case PRPTY: - return 8 + (PROP *)(sqp->desc) - prop; + free(op); } } @@ -131,7 +131,8 @@ bid() { cur_max = 0; num_in = num_play; while (num_in > 1 || (cur_max == 0 && num_in > 0)) { - i = ++i % num_play; + i++; + i %= num_play; if (in[i]) { do { sprintf(buf, "%s: ", name_list[i]); @@ -150,10 +151,12 @@ bid() { } } if (cur_max != 0) { - while (!in[i]) - i = ++i % num_play; + while (!in[i]) { + i++; + i %= num_play; + } printf("It goes to %s (%d) for $%d\n",play[i].name,i+1,cur_max); - buy(i, &board[cur_p->loc]); + buy(i, &board[(int)cur_p->loc]); play[i].money -= cur_max; } else diff --git a/src/games/monop/rent.c b/src/games/monop/rent.c index b10a1fd..5da8996 100644 --- a/src/games/monop/rent.c +++ b/src/games/monop/rent.c @@ -7,11 +7,11 @@ void rent(sqp) reg SQUARE *sqp; { - reg int rnt; + reg int rnt = 0; reg PROP *pp; PLAY *plp; - plp = &play[sqp->owner]; + plp = &play[(int)sqp->owner]; printf("Owned by %s\n", plp->name); if (((PROP*)sqp->desc)->morg) { lucky("The thing is mortgaged. "); @@ -25,10 +25,10 @@ reg SQUARE *sqp; { printf("rent is %d\n", rnt=pp->rent[0] * 2); else if (pp->houses < 5) printf("with %d houses, rent is %d\n", - pp->houses, rnt=pp->rent[pp->houses]); + pp->houses, rnt=pp->rent[(int)pp->houses]); else printf("with a hotel, rent is %d\n", - rnt=pp->rent[pp->houses]); + rnt=pp->rent[(int)pp->houses]); else printf("rent is %d\n", rnt = pp->rent[0]); break; diff --git a/src/games/monop/roll.c b/src/games/monop/roll.c index f32281a..319f413 100644 --- a/src/games/monop/roll.c +++ b/src/games/monop/roll.c @@ -1,6 +1,7 @@ /* * This routine rolls ndie nside-sided dice. */ +#include int roll(ndie, nsides) @@ -10,6 +11,6 @@ int ndie, nsides; { tot = 0; while (ndie--) - tot += rand() % nsides + 1; + tot += random() % nsides + 1; return tot; } diff --git a/src/games/monop/trade.c b/src/games/monop/trade.c index b5c019b..93b860c 100644 --- a/src/games/monop/trade.c +++ b/src/games/monop/trade.c @@ -16,44 +16,30 @@ static int used[MAX_PRP]; static TRADE trades[2]; -trade() { +/* + * This routine sets up the list of tradable property. + */ +static int +set_list(the_list) +reg OWN *the_list; { - reg int tradee, i; + reg int i; + reg OWN *op; - trading = TRUE; - for (i = 0; i < 2; i++) { - trades[i].cash = 0; - trades[i].gojf = FALSE; - trades[i].prop_list = NULL; - } -over: - if (num_play == 1) { - printf("There ain't no-one around to trade WITH!!\n"); - return; - } - if (num_play > 2) { - tradee = getinp("Which player do you wish to trade with? ", - name_list); - if (tradee == num_play) - return; - if (tradee == player) { - printf("You can't trade with yourself!\n"); - goto over; - } - } - else - tradee = 1 - player; - get_list(0, player); - get_list(1, tradee); - if (getyn("Do you wish a summary? ") == 0) - summate(); - if (getyn("Is the trade ok? ") == 0) - do_trade(); + i = 0; + for (op = the_list; op; op = op->next) + if (!used[i]) + list[i++] = op->sqr->name; + list[i++] = "done"; + list[i--] = 0; + return i; } + /* * This routine gets the list of things to be trader for the * player, and puts in the structure given. */ +static void get_list(struct_no, play_no) int struct_no, play_no; { @@ -102,26 +88,11 @@ once_more: } } } -/* - * This routine sets up the list of tradable property. - */ -set_list(the_list) -reg OWN *the_list; { - reg int i; - reg OWN *op; - - i = 0; - for (op = the_list; op; op = op->next) - if (!used[i]) - list[i++] = op->sqr->name; - list[i++] = "done"; - list[i--] = 0; - return i; -} /* * This routine summates the trade. */ +static void summate() { reg bool some; @@ -148,17 +119,11 @@ summate() { printf("\t-- Nothing --\n"); } } -/* - * This routine actually executes the trade. - */ -do_trade() { - move_em(&trades[0], &trades[1]); - move_em(&trades[1], &trades[0]); -} /* * This routine does a switch from one player to another */ +static void move_em(from, to) TRADE *from, *to; { @@ -179,21 +144,69 @@ TRADE *from, *to; { } set_ownlist(to->trader); } + +/* + * This routine actually executes the trade. + */ +static void +do_trade() { + + move_em(&trades[0], &trades[1]); + move_em(&trades[1], &trades[0]); +} + +void +trade() { + + reg int tradee, i; + + trading = TRUE; + for (i = 0; i < 2; i++) { + trades[i].cash = 0; + trades[i].gojf = FALSE; + trades[i].prop_list = NULL; + } +over: + if (num_play == 1) { + printf("There ain't no-one around to trade WITH!!\n"); + return; + } + if (num_play > 2) { + tradee = getinp("Which player do you wish to trade with? ", + name_list); + if (tradee == num_play) + return; + if (tradee == player) { + printf("You can't trade with yourself!\n"); + goto over; + } + } + else + tradee = 1 - player; + get_list(0, player); + get_list(1, tradee); + if (getyn("Do you wish a summary? ") == 0) + summate(); + if (getyn("Is the trade ok? ") == 0) + do_trade(); +} + /* * This routine lets a player resign */ +void resign() { - reg int i, new_own; + reg int i, new_own = 0; reg OWN *op; SQUARE *sqp; if (cur_p->money <= 0) { - switch (board[cur_p->loc].type) { + switch (board[(int)cur_p->loc].type) { case UTIL: case RR: case PRPTY: - new_own = board[cur_p->loc].owner; + new_own = board[(int)cur_p->loc].owner; break; case SPEC: case CC: @@ -220,7 +233,7 @@ resign() { } while (new_own == player); name_list[num_play] = "done"; } - if (getyn("Do you really want to resign? ", yesno) != 0) + if (getyn("Do you really want to resign? ") != 0) return; if (num_play == 1) { printf("Then NOBODY wins (not even YOU!)\n"); @@ -254,7 +267,7 @@ resign() { for (i = player; i < num_play; i++) { name_list[i] = name_list[i+1]; if (i + 1 < num_play) - cpy_st(&play[i], &play[i+1], sizeof (PLAY)); + play[i] = play[i+1]; } name_list[num_play--] = 0; for (i = 0; i < N_SQRS; i++) From e7b77dadc3fa0eb9c8d450e145517d19acff3aa3 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Fri, 12 Sep 2014 12:03:11 -0700 Subject: [PATCH 10/16] Ported quiz game. --- rootfs.manifest | 41 +++- src/games/Makefile | 4 +- src/games/quiz/.gitignore | 1 + src/games/quiz/Makefile | 58 +++--- src/games/quiz/quiz.c | 381 +++++++++++++++++++----------------- src/games/quiz/quiz.k/index | 60 +++--- 6 files changed, 298 insertions(+), 247 deletions(-) create mode 100644 src/games/quiz/.gitignore diff --git a/rootfs.manifest b/rootfs.manifest index 4faefef..98240dc 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -425,6 +425,7 @@ file /games/morse file /games/number file /games/ppt file /games/primes +file /games/quiz file /games/rain file /games/rogue file /games/sail @@ -437,17 +438,48 @@ file /games/wump # # Files: /games/lib # +default +filemode 0444 dir /games/lib file /games/lib/adventure.dat -mode 0444 file /games/lib/battle_strings -mode 0444 file /games/lib/cfscores mode 0666 file /games/lib/fortunes.dat -mode 0444 file /games/lib/cards.pck -mode 0444 +dir /games/lib/quiz.k +file /games/lib/quiz.k/africa +file /games/lib/quiz.k/america +file /games/lib/quiz.k/areas +file /games/lib/quiz.k/arith +file /games/lib/quiz.k/asia +file /games/lib/quiz.k/babies +file /games/lib/quiz.k/bard +file /games/lib/quiz.k/chinese +file /games/lib/quiz.k/collectives +file /games/lib/quiz.k/ed +file /games/lib/quiz.k/elements +file /games/lib/quiz.k/europe +file /games/lib/quiz.k/greek +file /games/lib/quiz.k/inca +file /games/lib/quiz.k/index +file /games/lib/quiz.k/latin +file /games/lib/quiz.k/locomotive +file /games/lib/quiz.k/midearth +file /games/lib/quiz.k/morse +file /games/lib/quiz.k/murders +file /games/lib/quiz.k/poetry +file /games/lib/quiz.k/posneg +file /games/lib/quiz.k/pres +file /games/lib/quiz.k/province +file /games/lib/quiz.k/seq-easy +file /games/lib/quiz.k/seq-hard +file /games/lib/quiz.k/sexes +file /games/lib/quiz.k/sov +file /games/lib/quiz.k/spell +file /games/lib/quiz.k/state +file /games/lib/quiz.k/trek +file /games/lib/quiz.k/ucc # # Files: /include @@ -738,6 +770,7 @@ file /share/man/cat6/hangman.0 file /share/man/cat6/mille.0 file /share/man/cat6/monop.0 file /share/man/cat6/number.0 +file /share/man/cat6/quiz.0 file /share/man/cat6/rain.0 file /share/man/cat6/rogue.0 file /share/man/cat6/sail.0 diff --git a/src/games/Makefile b/src/games/Makefile index e032637..da2207f 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -12,8 +12,8 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ - cribbage fortune hangman mille monop rogue sail trek -# TODO: quiz robots snake + cribbage fortune hangman mille monop quiz rogue sail trek +# TODO: robots snake # C programs that live in the current directory and do not need # explicit make lines. diff --git a/src/games/quiz/.gitignore b/src/games/quiz/.gitignore new file mode 100644 index 0000000..fced154 --- /dev/null +++ b/src/games/quiz/.gitignore @@ -0,0 +1 @@ +quiz diff --git a/src/games/quiz/Makefile b/src/games/quiz/Makefile index c314721..4b3c2c3 100644 --- a/src/games/quiz/Makefile +++ b/src/games/quiz/Makefile @@ -1,42 +1,30 @@ # @(#)Makefile 4.2 (Berkeley) 9/7/85 # -DESTDIR= -CFLAGS= -O -SEPFLAG= -i +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk +#CFLAGS = -O -DCROSS -Werror -Wall -quiz: quiz.c - cc ${SEPFLAG} ${CFLAGS} -o quiz quiz.c +CFLAGS += -Werror -Wall -install: quiz quiz.k - install -s quiz ${DESTDIR}/usr/games/quiz - cp -r quiz.k ${DESTDIR}/usr/games/lib +OBJS = quiz.o +MAN = quiz.0 + +all: quiz $(MAN) + +quiz: $(OBJS) + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf + +$(MAN): quiz.6 + nroff -man $< > $@ clean: - rm -f a.out core *.s *.o quiz + rm -f *.o core quiz *.0 *.dis -depend: - cat x.c - for i in quiz; do \ - (echo $$i: $$i.c >>makedep; \ - /bin/grep '^#[ ]*include' x.c $$i.c | sed \ - -e 's,<\(.*\)>,"/usr/include/\1",' \ - -e 's/:[^"]*"\([^"]*\)".*/: \1/' \ - -e 's/\.c//' >>makedep); done - echo '/^# DO NOT DELETE THIS LINE/+2,$$d' >eddep - echo '$$r makedep' >>eddep - echo 'w' >>eddep - cp Makefile Makefile.bak - ed - Makefile < eddep - rm eddep makedep x.c - echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile - echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile - echo '# see make depend above' >> Makefile - -# DO NOT DELETE THIS LINE -- make depend uses it - -quiz: quiz.c -quiz: /usr/include/stdio.h -quiz: /usr/include/signal.h -# DEPENDENCIES MUST END AT END OF FILE -# IF YOU PUT STUFF HERE IT WILL GO AWAY -# see make depend above +install: all + install quiz $(DESTDIR)/games/ + install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/ + cp -r quiz.k ${DESTDIR}/games/lib diff --git a/src/games/quiz/quiz.c b/src/games/quiz/quiz.c index 51da296..6e910d3 100644 --- a/src/games/quiz/quiz.c +++ b/src/games/quiz/quiz.c @@ -1,8 +1,10 @@ - -static char sccsid[] = " quiz.c 4.2 85/01/09 "; - #include #include +#include +#include +#include +#include + #define NF 10 #define NL 300 #define NC 200 @@ -24,8 +26,11 @@ int nc = 0; char line[150]; char response[100]; char *tmp[NF]; -int select[NF]; +int choice[NF]; +int string(int s); + +int readline() { char *t; @@ -57,18 +62,34 @@ loop: char *eu; char *ev; -cmp(u,v) -char *u,*v; + +int +fold(c) +char c; { - int x; - eu = u; - ev = v; - x = disj(1); - if(x!=1) - return(x); - return(eat(1,0)); + if(c<'A'||c>'Z') + return(c); + return(c|040); } +int +eat(s,c) +char c; +{ + if(*ev!=c) + return(2); + if(s==0) { + ev++; + return(1); + } + if(fold(*eu)!=fold(c)) + return(0); + eu++; + ev++; + return(1); +} + +int disj(s) { int t, x; @@ -83,7 +104,7 @@ disj(s) case 0: case ']': case '}': - return(t|x&s); + return t | (x & s); case '|': ev++; t |= s; @@ -108,6 +129,7 @@ disj(s) } } +int string(s) { int x; @@ -152,44 +174,26 @@ string(s) } } -eat(s,c) -char c; +int +cmp(u,v) +char *u,*v; { - if(*ev!=c) - return(2); - if(s==0) { - ev++; - return(1); - } - if(fold(*eu)!=fold(c)) - return(0); - eu++; - ev++; - return(1); -} - -fold(c) -char c; -{ - if(c<'A'||c>'Z') - return(c); - return(c|040); -} - -publish(t) -char *t; -{ - ev = t; - pub1(1); + int x; + eu = u; + ev = v; + x = disj(1); + if(x!=1) + return(x); + return(eat(1,0)); } +void pub1(s) { for(;;ev++){ switch(*ev) { case '|': s = 0; - ev; continue; case ']': case '}': @@ -199,7 +203,6 @@ pub1(s) case '{': ev++; pub1(s); - ev; continue; case '\\': if(*++ev=='\n') @@ -211,6 +214,15 @@ pub1(s) } } +void +publish(t) +char *t; +{ + ev = t; + pub1(1); +} + +int segment(u,w) char *u, *w[]; { @@ -240,8 +252,15 @@ char *u, *w[]; } } printf("Too many facts about one thing\n"); + return 0; } +void +badinfo(){ + printf("Bad info %s\n",line); +} + +int perm(u,m,v,n,p) int p[]; char *u[], *v[]; @@ -263,18 +282,20 @@ uloop: ; return(1); } +int find(u,m) char *u[]; { int n; while(readline()){ n = segment(line,tmp); - if(perm(u,m,tmp+1,n-1,select)) + if(perm(u,m,tmp+1,n-1,choice)) return(1); } return(0); } +void readindex() { xx[0] = nc = 0; @@ -288,139 +309,17 @@ readindex() } } +void talloc() { int i; - char *malloc(); for(i=0;i1&&*argv[1]=='-') { - switch(argv[1][1]) { - case 'i': - if(argc>2) - info = argv[2]; - argc -= 2; - argv += 2; - goto loop; - case 't': - tflag = 1; - argc--; - argv++; - goto loop; - } - } - input = fopen(info,"r"); - if(input==NULL) { - printf("No info\n"); - exit(0); - } - talloc(); - if(argc<=2) - instruct(info); - signal(SIGINT,done); - argv[argc] = 0; - if(find(&argv[1],argc-1)==0) - dunno(); - fclose(input); - input = fopen(tmp[0],"r"); - if(input==NULL) - dunno(); - readindex(); - if(!tflag || na>nl) - na = nl; - stdout->_flag |= _IONBF; - for(;;) { - i = next(); - fseek(input,xx[i]+0L,0); - z = xx[i+1]-xx[i]; - for(j=0;j1) badinfo(); - if(x==1) { - printf("Right!\n"); - if(count==0) rights++; - if(++score[i]>=1 && nar&&t[-1]==' ') - *--t = '\n'; - break; - } - } - *t = 0; - return(t-r); -} - -next() -{ - int flag; - inc = inc*3125&077777; - ptr = (inc>>2)%na; - flag = 0; - while(score[ptr]>0) - if(++ptr>=na) { - ptr = 0; - if(flag) done(); - flag = 1; - } - return(ptr); -} - -done() +void +done(int sig) { printf("\nRights %d, wrongs %d, ", rights, wrongs); if(guesses) @@ -428,9 +327,10 @@ done() printf("score %d%%\n",100*rights/(rights+wrongs)); exit(0); } -instruct(info) + +void +instruct(char *info) { - char *t; int i, n; printf("Subjects:\n\n"); while(readline()) { @@ -466,12 +366,141 @@ instruct(info) exit(0); } -badinfo(){ - printf("Bad info %s\n",line); -} - +void dunno() { printf("I don't know about that\n"); exit(0); } + +int +next() +{ + int flag; + inc = inc*3125&077777; + ptr = (inc>>2)%na; + flag = 0; + while(score[ptr]>0) + if(++ptr>=na) { + ptr = 0; + if(flag) done(0); + flag = 1; + } + return(ptr); +} + +int +query(r) +char *r; +{ + char *t; + for(t=r;;t++) { + if(read(0,t,1)==0) + done(0); + if(*t==' '&&(t==r||t[-1]==' ')) + t--; + if(*t=='\n') { + while(t>r&&t[-1]==' ') + *--t = '\n'; + break; + } + } + *t = 0; + return(t-r); +} + +int +main(argc,argv) +char *argv[]; +{ + int j, i, x, z, count; + char *indexfile, *p; + time_t tvec; + char inputfile[100]; + +#ifdef CROSS + indexfile = "/usr/local/games/quiz.k/index"; +#else + indexfile = "/games/lib/quiz.k/index"; +#endif + time(&tvec); + inc = (tvec & 077774) | 01; +loop: + if(argc>1&&*argv[1]=='-') { + switch(argv[1][1]) { + case 'i': + if(argc>2) + indexfile = argv[2]; + argc -= 2; + argv += 2; + goto loop; + case 't': + tflag = 1; + argc--; + argv++; + goto loop; + } + } + input = fopen(indexfile,"r"); + if(input==NULL) { + printf("No indexfile\n"); + exit(0); + } + talloc(); + if(argc<=2) + instruct(indexfile); + signal(SIGINT,done); + argv[argc] = 0; + if(find(&argv[1],argc-1)==0) + dunno(); + fclose(input); + + strcpy(inputfile, indexfile); + p = strrchr(inputfile, '/'); + if (! p) + dunno(); + strcpy(p+1, tmp[0]); + input = fopen(inputfile,"r"); + if(input==NULL) + dunno(); + readindex(); + if(!tflag || na>nl) + na = nl; + setbuf(stdout, NULL); + for(;;) { + i = next(); + fseek(input,xx[i]+0L,0); + z = xx[i+1]-xx[i]; + for(j=0;j1) badinfo(); + if(x==1) { + printf("Right!\n"); + if(count==0) rights++; + if(++score[i]>=1 && na Date: Fri, 12 Sep 2014 13:32:16 -0700 Subject: [PATCH 11/16] Ported robots game. --- rootfs.manifest | 4 + src/games/Makefile | 5 +- src/games/robots/.gitignore | 1 + src/games/robots/Makefile | 57 +++++--- src/games/robots/extern.c | 7 +- src/games/robots/flush_in.c | 14 +- src/games/robots/init_field.c | 10 +- src/games/robots/main.c | 132 +++++++++--------- src/games/robots/make_level.c | 12 +- src/games/robots/move.c | 246 +++++++++++++++++----------------- src/games/robots/move_robs.c | 57 ++++---- src/games/robots/play_level.c | 14 +- src/games/robots/query.c | 8 +- src/games/robots/rnd_pos.c | 24 ++-- src/games/robots/robots.h | 71 ++++++---- src/games/robots/score.c | 92 ++++++++----- 16 files changed, 397 insertions(+), 357 deletions(-) create mode 100644 src/games/robots/.gitignore diff --git a/rootfs.manifest b/rootfs.manifest index 98240dc..9891d74 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -427,6 +427,7 @@ file /games/ppt file /games/primes file /games/quiz file /games/rain +file /games/robots file /games/rogue file /games/sail file /games/teachgammon @@ -447,6 +448,8 @@ file /games/lib/cfscores mode 0666 file /games/lib/fortunes.dat file /games/lib/cards.pck +file /games/lib/robots_roll +mode 0666 dir /games/lib/quiz.k file /games/lib/quiz.k/africa file /games/lib/quiz.k/america @@ -772,6 +775,7 @@ file /share/man/cat6/monop.0 file /share/man/cat6/number.0 file /share/man/cat6/quiz.0 file /share/man/cat6/rain.0 +file /share/man/cat6/robots.0 file /share/man/cat6/rogue.0 file /share/man/cat6/sail.0 file /share/man/cat6/trek.0 diff --git a/src/games/Makefile b/src/games/Makefile index da2207f..e0c5ceb 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -12,8 +12,9 @@ CFLAGS += -Werror -Wall -Os # Programs that live in subdirectories, and have makefiles of their own. # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ - cribbage fortune hangman mille monop quiz rogue sail trek -# TODO: robots snake + cribbage fortune hangman mille monop quiz robots rogue \ + sail trek +# TODO: snake # C programs that live in the current directory and do not need # explicit make lines. diff --git a/src/games/robots/.gitignore b/src/games/robots/.gitignore new file mode 100644 index 0000000..6a28141 --- /dev/null +++ b/src/games/robots/.gitignore @@ -0,0 +1 @@ +robots diff --git a/src/games/robots/Makefile b/src/games/robots/Makefile index db4e681..1773384 100644 --- a/src/games/robots/Makefile +++ b/src/games/robots/Makefile @@ -5,27 +5,46 @@ # # @(#)Makefile 5.2 (Berkeley) 5/15/86 # -DESTDIR= -HDRS= robot.h -CFILES= extern.c init_field.c main.c make_level.c move.c \ - move_robs.c play_level.c query.c rnd_pos.c score.c \ - flush_in.c -OBJS= extern.o init_field.o main.o make_level.o move.o \ - move_robs.o play_level.o query.o rnd_pos.o score.o \ - flush_in.o -DEFS= -DMAX_PER_UID=5 -CFLAGS= -O ${DEFS} -SEPFLAG= -i +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk +#CFLAGS = -O -DCROSS -g -DFANCY -robots: ${OBJS} - ${CC} ${SEPFLAG} ${CFLAGS} -o robots ${OBJS} -lcurses -ltermlib +CFLAGS += -DMAX_PER_UID=5 -Werror -Wall -lint: - lint -hb ${DEFS} ${CFILES} -lcurses 2>1 > lint.out +OBJS = extern.o init_field.o main.o make_level.o move.o \ + move_robs.o play_level.o query.o rnd_pos.o score.o \ + flush_in.o +MAN = robots.0 +LIBS = -lcurses -ltermcap -lc -install: robots - install -s -m 4711 -o daemon robots ${DESTDIR}/usr/games - install -c -m 644 -o daemon /dev/null ${DESTDIR}/usr/games/lib/robots_roll +all: robots $(MAN) + +robots: $(OBJS) + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf + +$(MAN): robots.6 + nroff -man $< > $@ clean: - rm -f a.out core *.o robots lint.out errs + rm -f *.o core robots *.0 *.dis + +install: all + install robots $(DESTDIR)/games/ + install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/ + install -c -m 644 /dev/null ${DESTDIR}/games/lib/robots_roll +### +extern.o: extern.c robots.h +flush_in.o: flush_in.c +init_field.o: init_field.c robots.h +main.o: main.c robots.h +make_level.o: make_level.c robots.h +move.o: move.c robots.h +move_robs.o: move_robs.c robots.h +play_level.o: play_level.c robots.h +query.o: query.c robots.h +rnd_pos.o: rnd_pos.c robots.h +score.o: score.c robots.h diff --git a/src/games/robots/extern.c b/src/games/robots/extern.c index 1a4c103..bfb4042 100644 --- a/src/games/robots/extern.c +++ b/src/games/robots/extern.c @@ -3,12 +3,7 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)extern.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include "robots.h" +#include "robots.h" bool Dead; /* Player is now dead */ bool Full_clear = TRUE; /* Lots of junk for init_field to clear */ diff --git a/src/games/robots/flush_in.c b/src/games/robots/flush_in.c index 9d4842d..e9b4c2d 100644 --- a/src/games/robots/flush_in.c +++ b/src/games/robots/flush_in.c @@ -3,22 +3,18 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)flush_in.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include +#include /* * flush_in: * Flush all pending input. */ +void flush_in() { -# ifdef TIOCFLUSH +#ifdef TIOCFLUSH ioctl(fileno(stdin), TIOCFLUSH, NULL); -# else TIOCFLUSH +#else crmode(); -# endif TIOCFLUSH +#endif } diff --git a/src/games/robots/init_field.c b/src/games/robots/init_field.c index a72c717..78cafcf 100644 --- a/src/games/robots/init_field.c +++ b/src/games/robots/init_field.c @@ -3,23 +3,17 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)init_field.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include "robots.h" +#include "robots.h" /* * init_field: * Lay down the initial pattern whih is constant across all levels, * and initialize all the global variables. */ +void init_field() { register int i; - register WINDOW *wp; - register int j; static bool first = TRUE; static char *desc[] = { "Directions:", diff --git a/src/games/robots/main.c b/src/games/robots/main.c index df15f7a..0b3e8b8 100644 --- a/src/games/robots/main.c +++ b/src/games/robots/main.c @@ -3,21 +3,71 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ +#include "robots.h" +#include +#include +#include +#include +#include -#ifndef lint -char copyright[] = -"@(#) Copyright (c) 1980 Regents of the University of California.\n\ - All rights reserved.\n"; -#endif not lint +#ifndef CROSS +static int +fputchar(int c) +{ + return putchar(c); +} +#endif -#ifndef lint -static char sccsid[] = "@(#)main.c 5.1 (Berkeley) 5/30/85"; -#endif not lint +/* + * quit: + * Leave the program elegantly. + */ +void +quit(int sig) +{ + mvcur(0, COLS - 1, LINES - 1, 0); +#ifndef CROSS + if (CE) { + tputs(CE, 1, fputchar); + endwin(); + } else +#endif + { + endwin(); + putchar('\n'); + } + exit(0); + /* NOTREACHED */ +} -# include "robots.h" -# include -# include +/* + * another: + * See if another game is desired + */ +int +another() +{ + register int y; +#ifdef FANCY + if ((Stand_still || Pattern_roll) && !Newscore) + return TRUE; +#endif + + if (query("Another game?")) { + if (Full_clear) { + for (y = 1; y <= Num_scores; y++) { + move(y, 1); + clrtoeol(); + } + refresh(); + } + return TRUE; + } + return FALSE; +} + +int main(ac, av) int ac; char **av; @@ -37,10 +87,12 @@ char **av; if (isdigit(av[0][0])) Max_per_uid = atoi(av[0]); else { - setuid(getuid()); - setgid(getgid()); + if (setuid(getuid()) < 0) + /*ignore*/; + if (setgid(getgid()) < 0) + /*ignore*/; Scorefile = av[0]; -# ifdef FANCY +#ifdef FANCY sp = rindex(Scorefile, '/'); if (sp == NULL) sp = Scorefile; @@ -50,7 +102,7 @@ char **av; Stand_still = TRUE; if (Pattern_roll || Stand_still) Teleport = TRUE; -# endif +#endif } else for (sp = &av[0][1]; *sp; sp++) @@ -116,52 +168,6 @@ char **av; refresh(); score(); } while (another()); - quit(); -} - -/* - * quit: - * Leave the program elegantly. - */ -quit() -{ - extern int _putchar(); - - mvcur(0, COLS - 1, LINES - 1, 0); - if (CE) { - tputs(CE, 1, _putchar); - endwin(); - } - else { - endwin(); - putchar('\n'); - } - exit(0); - /* NOTREACHED */ -} - -/* - * another: - * See if another game is desired - */ -another() -{ - register int y; - -#ifdef FANCY - if ((Stand_still || Pattern_roll) && !Newscore) - return TRUE; -#endif - - if (query("Another game?")) { - if (Full_clear) { - for (y = 1; y <= Num_scores; y++) { - move(y, 1); - clrtoeol(); - } - refresh(); - } - return TRUE; - } - return FALSE; + quit(0); + return 0; } diff --git a/src/games/robots/make_level.c b/src/games/robots/make_level.c index 56204b4..0f5b9cd 100644 --- a/src/games/robots/make_level.c +++ b/src/games/robots/make_level.c @@ -3,23 +3,19 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)make_level.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include "robots.h" +#include "robots.h" +#include /* * make_level: * Make the current level */ +void make_level() { register int i; register COORD *cp; - register WINDOW *wp; - register int x, *endp; + register int x; reset_count(); for (i = 1; i < Y_FIELDSIZE; i++) diff --git a/src/games/robots/move.c b/src/games/robots/move.c index 80b6230..1ad7dd7 100644 --- a/src/games/robots/move.c +++ b/src/games/robots/move.c @@ -3,25 +3,138 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ +#include "robots.h" +#include -#ifndef lint -static char sccsid[] = "@(#)move.c 5.1 (Berkeley) 5/30/85"; -#endif not lint +#define ESC '\033' -# include "robots.h" -# include +/* + * eaten: + * Player would get eaten at this place + */ +int +eaten(pos) +register COORD *pos; +{ + register int x, y; -# define ESC '\033' + for (y = pos->y - 1; y <= pos->y + 1; y++) { + if (y <= 0 || y >= Y_FIELDSIZE) + continue; + for (x = pos->x - 1; x <= pos->x + 1; x++) { + if (x <= 0 || x >= X_FIELDSIZE) + continue; + if (Field[y][x] == 1) + return TRUE; + } + } + return FALSE; +} + +/* + * must_telep: + * Must I teleport; i.e., is there anywhere I can move without + * being eaten? + */ +int +must_telep() +{ + register int x, y; + static COORD newpos; + +#ifdef FANCY + if (Stand_still && Num_robots > 1 && eaten(&My_pos)) + return TRUE; +#endif + + for (y = -1; y <= 1; y++) { + newpos.y = My_pos.y + y; + if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE) + continue; + for (x = -1; x <= 1; x++) { + newpos.x = My_pos.x + x; + if (newpos.x <= 0 || newpos.x >= X_FIELDSIZE) + continue; + if (Field[newpos.y][newpos.x] > 0) + continue; + if (!eaten(&newpos)) + return FALSE; + } + } + return TRUE; +} + +/* + * do_move: + * Execute a move + */ +int +do_move(dy, dx) +int dy, dx; +{ + static COORD newpos; + + newpos.y = My_pos.y + dy; + newpos.x = My_pos.x + dx; + if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE || + newpos.x <= 0 || newpos.x >= X_FIELDSIZE || + Field[newpos.y][newpos.x] > 0 || eaten(&newpos)) { + if (Running) { + Running = FALSE; + leaveok(stdscr, FALSE); + move(My_pos.y, My_pos.x); + refresh(); + } + else { + putchar(CTRL('G')); + reset_count(); + } + return FALSE; + } + else if (dy == 0 && dx == 0) + return TRUE; + mvaddch(My_pos.y, My_pos.x, ' '); + My_pos = newpos; + mvaddch(My_pos.y, My_pos.x, PLAYER); + if (!jumping()) + refresh(); + return TRUE; +} + +/* + * reset_count: + * Reset the count variables + */ +void +reset_count() +{ + Count = 0; + Running = FALSE; + leaveok(stdscr, FALSE); + refresh(); +} + +/* + * jumping: + * See if we are jumping, i.e., we should not refresh. + */ +int +jumping() +{ + return (Jump && (Count || Running || Waiting)); +} /* * get_move: * Get and execute a move from the player */ +void get_move() { register int c; - register int y, x, lastmove; - static COORD newpos; +#ifdef FANCY + register int lastmove = 0; +#endif if (Waiting) return; @@ -122,7 +235,7 @@ over: case 'q': case 'Q': if (query("Really quit?")) - quit(); + quit(0); refresh(); break; case 'w': @@ -142,13 +255,13 @@ teleport: refresh(); flush_in(); goto ret; - case CTRL(L): + case CTRL('L'): wrefresh(curscr); break; case EOF: break; default: - putchar(CTRL(G)); + putchar(CTRL('G')); reset_count(); fflush(stdout); break; @@ -159,114 +272,3 @@ ret: if (--Count == 0) leaveok(stdscr, FALSE); } - -/* - * must_telep: - * Must I teleport; i.e., is there anywhere I can move without - * being eaten? - */ -must_telep() -{ - register int x, y; - static COORD newpos; - -#ifdef FANCY - if (Stand_still && Num_robots > 1 && eaten(&My_pos)) - return TRUE; -#endif - - for (y = -1; y <= 1; y++) { - newpos.y = My_pos.y + y; - if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE) - continue; - for (x = -1; x <= 1; x++) { - newpos.x = My_pos.x + x; - if (newpos.x <= 0 || newpos.x >= X_FIELDSIZE) - continue; - if (Field[newpos.y][newpos.x] > 0) - continue; - if (!eaten(&newpos)) - return FALSE; - } - } - return TRUE; -} - -/* - * do_move: - * Execute a move - */ -do_move(dy, dx) -int dy, dx; -{ - static COORD newpos; - - newpos.y = My_pos.y + dy; - newpos.x = My_pos.x + dx; - if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE || - newpos.x <= 0 || newpos.x >= X_FIELDSIZE || - Field[newpos.y][newpos.x] > 0 || eaten(&newpos)) { - if (Running) { - Running = FALSE; - leaveok(stdscr, FALSE); - move(My_pos.y, My_pos.x); - refresh(); - } - else { - putchar(CTRL(G)); - reset_count(); - } - return FALSE; - } - else if (dy == 0 && dx == 0) - return TRUE; - mvaddch(My_pos.y, My_pos.x, ' '); - My_pos = newpos; - mvaddch(My_pos.y, My_pos.x, PLAYER); - if (!jumping()) - refresh(); - return TRUE; -} - -/* - * eaten: - * Player would get eaten at this place - */ -eaten(pos) -register COORD *pos; -{ - register int x, y; - - for (y = pos->y - 1; y <= pos->y + 1; y++) { - if (y <= 0 || y >= Y_FIELDSIZE) - continue; - for (x = pos->x - 1; x <= pos->x + 1; x++) { - if (x <= 0 || x >= X_FIELDSIZE) - continue; - if (Field[y][x] == 1) - return TRUE; - } - } - return FALSE; -} - -/* - * reset_count: - * Reset the count variables - */ -reset_count() -{ - Count = 0; - Running = FALSE; - leaveok(stdscr, FALSE); - refresh(); -} - -/* - * jumping: - * See if we are jumping, i.e., we should not refresh. - */ -jumping() -{ - return (Jump && (Count || Running || Waiting)); -} diff --git a/src/games/robots/move_robs.c b/src/games/robots/move_robs.c index 3fd782c..2c7a4f1 100644 --- a/src/games/robots/move_robs.c +++ b/src/games/robots/move_robs.c @@ -3,34 +3,45 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ +#include "robots.h" +#include +#include +#include -#ifndef lint -static char sccsid[] = "@(#)move_robs.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include "robots.h" -# include +/* + * sign: + * Return the sign of the number + */ +static int +sign(n) +int n; +{ + if (n < 0) + return -1; + else if (n > 0) + return 1; + else + return 0; +} /* * move_robots: * Move the robots around */ +void move_robots(was_sig) -bool was_sig; +int was_sig; { register COORD *rp; - register int y, x; - register int mindist, d; - static COORD newpos; if (Real_time) signal(SIGALRM, move_robots); -# ifdef DEBUG +#ifdef DEBUG move(Min.y, Min.x); addch(inch()); move(Max.y, Max.x); addch(inch()); -# endif DEBUG +#endif for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) { if (rp->y < 0) continue; @@ -81,17 +92,17 @@ bool was_sig; if (was_sig) { refresh(); if (Dead || Num_robots <= 0) - longjmp(End_move); + longjmp(End_move, 1); } -# ifdef DEBUG +#ifdef DEBUG standout(); move(Min.y, Min.x); addch(inch()); move(Max.y, Max.x); addch(inch()); standend(); -# endif DEBUG +#endif if (Real_time) alarm(3); } @@ -100,6 +111,7 @@ bool was_sig; * add_score: * Add a score to the overall point total */ +void add_score(add) int add; { @@ -107,18 +119,3 @@ int add; move(Y_SCORE, X_SCORE); printw("%d", Score); } - -/* - * sign: - * Return the sign of the number - */ -sign(n) -int n; -{ - if (n < 0) - return -1; - else if (n > 0) - return 1; - else - return 0; -} diff --git a/src/games/robots/play_level.c b/src/games/robots/play_level.c index 32be7c1..f016c4d 100644 --- a/src/games/robots/play_level.c +++ b/src/games/robots/play_level.c @@ -3,21 +3,17 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)play_level.c 5.2 (Berkeley) 9/23/85"; -#endif not lint - -# include "robots.h" +#include "robots.h" +#include /* * play_level: * Let the player play the current level */ +void play_level() { register COORD *cp; - register int y, x, bonus; move(My_pos.y, My_pos.x); addch(PLAYER); @@ -29,14 +25,14 @@ play_level() addch(ROBOT); } refresh(); -# ifdef DEBUG +#ifdef DEBUG standout(); move(Min.y, Min.x); addch(inch()); move(Max.y, Max.x); addch(inch()); standend(); -# endif DEBUG +#endif setjmp(End_move); flush_in(); while (!Dead && Num_robots > 0) { diff --git a/src/games/robots/query.c b/src/games/robots/query.c index 2624829..973a247 100644 --- a/src/games/robots/query.c +++ b/src/games/robots/query.c @@ -3,17 +3,13 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)query.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include "robots.h" +#include "robots.h" /* * query: * Ask a question and get a yes or no answer. Default is "no". */ +int query(prompt) char *prompt; { diff --git a/src/games/robots/rnd_pos.c b/src/games/robots/rnd_pos.c index 9706e0d..0c13e59 100644 --- a/src/games/robots/rnd_pos.c +++ b/src/games/robots/rnd_pos.c @@ -3,14 +3,17 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ +#include "robots.h" +#include -#ifndef lint -static char sccsid[] = "@(#)rnd_pos.c 5.1 (Berkeley) 5/30/85"; -#endif not lint +#define IS_SAME(p,y,x) ((p).y != -1 && (p).y == y && (p).x == x) -# include "robots.h" - -# define IS_SAME(p,y,x) ((p).y != -1 && (p).y == y && (p).x == x) +static int +rnd(range) +int range; +{ + return random() % range; +} /* * rnd_pos: @@ -21,7 +24,6 @@ rnd_pos() { static COORD pos; static int call = 0; - register int i = 0; do { pos.y = rnd(Y_FIELDSIZE - 1) + 1; @@ -31,11 +33,3 @@ rnd_pos() call++; return &pos; } - -rnd(range) -int range; -{ - unsigned int rand(); - - return rand() % range; -} diff --git a/src/games/robots/robots.h b/src/games/robots/robots.h index de93fd4..94bab24 100644 --- a/src/games/robots/robots.h +++ b/src/games/robots/robots.h @@ -6,44 +6,53 @@ * @(#)robots.h 5.1 (Berkeley) 5/30/85 */ -# include -# include +#include +#include + +#ifndef flushok +# define flushok(win, ok) /* empty */ +#endif /* * miscellaneous constants */ -# define Y_FIELDSIZE 23 -# define X_FIELDSIZE 60 -# define Y_SIZE 24 -# define X_SIZE 80 -# define MAXLEVELS 4 -# define MAXROBOTS (MAXLEVELS * 10) -# define ROB_SCORE 10 -# define S_BONUS (60 * ROB_SCORE) -# define Y_SCORE 21 -# define X_SCORE (X_FIELDSIZE + 9) -# define Y_PROMPT (Y_FIELDSIZE - 1) -# define X_PROMPT (X_FIELDSIZE + 2) -# define MAXSCORES (Y_SIZE - 2) -# define MAXNAME 16 -# define MS_NAME "Ten" -# define SCOREFILE "/usr/games/lib/robots_roll" +#define Y_FIELDSIZE 23 +#define X_FIELDSIZE 60 +#define Y_SIZE 24 +#define X_SIZE 80 +#define MAXLEVELS 4 +#define MAXROBOTS (MAXLEVELS * 10) +#define ROB_SCORE 10 +#define S_BONUS (60 * ROB_SCORE) +#define Y_SCORE 21 +#define X_SCORE (X_FIELDSIZE + 9) +#define Y_PROMPT (Y_FIELDSIZE - 1) +#define X_PROMPT (X_FIELDSIZE + 2) +#define MAXSCORES (Y_SIZE - 2) +#define MAXNAME 16 +#define MS_NAME "Ten" + +#ifdef CROSS +# define SCOREFILE "/usr/local/games/robots_roll" +#else +# define SCOREFILE "/games/lib/robots_roll" +#endif /* * characters on screen */ -# define ROBOT '+' -# define HEAP '*' -# define PLAYER '@' +#define ROBOT '+' +#define HEAP '*' +#define PLAYER '@' /* * pseudo functions */ -# undef CTRL -# define CTRL(X) ('X' - 'A' + 1) +#undef CTRL +#define CTRL(x) (x - 'A' + 1) /* * type definitions @@ -77,7 +86,19 @@ extern jmp_buf End_move; /* * functions types */ +COORD *rnd_pos(void); -int quit(), cmp_sc(), move_robots(); +void quit(int sig); +void move_robots(int was_sig); +void show_score(void); +void init_field(void); +void make_level(void); +void play_level(void); +void score(void); +void reset_count(void); +void flush_in(void); +void add_score(int add); +void get_move(void); -COORD *rnd_pos(); +int query(char *prompt); +int jumping(void); diff --git a/src/games/robots/score.c b/src/games/robots/score.c index 31e0ed7..172a3ec 100644 --- a/src/games/robots/score.c +++ b/src/games/robots/score.c @@ -3,13 +3,12 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)score.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - -# include "robots.h" -# include +#include "robots.h" +#include +#include +#include +#include +#include typedef struct { int s_uid; @@ -25,11 +24,37 @@ int Max_per_uid = MAX_PER_UID; static SCORE Top[MAXSCORES]; +/* + * cmp_sc: + * Compare two scores. + */ +static int +cmp_sc(a1, a2) +const void *a1, *a2; +{ + const SCORE *s1 = a1; + const SCORE *s2 = a2; + + return s2->s_score - s1->s_score; +} + +static void +set_name(scp) +register SCORE *scp; +{ + register PASSWD *pp; + + if ((pp = getpwuid(scp->s_uid)) == NULL) + pp->pw_name = "???"; + strncpy(scp->s_name, pp->pw_name, MAXNAME); +} + /* * score: * Post the player's score, if reasonable, and then print out the * top list. */ +void score() { register int inf; @@ -44,9 +69,12 @@ score() return; } - if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid) - read(inf, Top, sizeof Top); - else { + if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid) { + if (read(inf, Top, sizeof Top) != sizeof Top) { + perror("Error reading top scores"); + exit(-1); + } + } else { for (scp = Top; scp < &Top[MAXSCORES]; scp++) scp->s_score = -1; max_uid = Max_per_uid; @@ -101,36 +129,23 @@ score() if (Newscore) { lseek(inf, 0L, 0); - write(inf, &max_uid, sizeof max_uid); - write(inf, Top, sizeof Top); + if (write(inf, &max_uid, sizeof max_uid) != sizeof max_uid) { + perror("Error writing max uid"); + exit(-1); + } + if (write(inf, Top, sizeof Top) != sizeof Top) { + perror("Error writing top scores"); + exit(-1); + } } close(inf); } -set_name(scp) -register SCORE *scp; -{ - register PASSWD *pp; - - if ((pp = getpwuid(scp->s_uid)) == NULL) - pp->pw_name = "???"; - strncpy(scp->s_name, pp->pw_name, MAXNAME); -} - -/* - * cmp_sc: - * Compare two scores. - */ -cmp_sc(s1, s2) -register SCORE *s1, *s2; -{ - return s2->s_score - s1->s_score; -} - /* * show_score: * Show the score list for the '-s' option. */ +void show_score() { register SCORE *scp; @@ -145,11 +160,18 @@ show_score() for (scp = Top; scp < &Top[MAXSCORES]; scp++) scp->s_score = -1; - read(inf, &max_score, sizeof max_score); - read(inf, Top, sizeof Top); + if (read(inf, &max_score, sizeof max_score) != sizeof max_score) { + perror("Error reading max scores"); + exit(-1); + } + if (read(inf, Top, sizeof Top) != sizeof Top) { + perror("Error reading top scores"); + exit(-1); + } close(inf); inf = 1; for (scp = Top; scp < &Top[MAXSCORES]; scp++) if (scp->s_score >= 0) - printf("%d\t%d\t%.*s\n", inf++, scp->s_score, sizeof scp->s_name, scp->s_name); + printf("%d\t%d\t%.*s\n", inf++, scp->s_score, + (int)sizeof scp->s_name, scp->s_name); } From d3d48970e38022aa0e52e5a66050405a37179f9a Mon Sep 17 00:00:00 2001 From: Sergey Date: Sun, 14 Sep 2014 23:19:06 -0700 Subject: [PATCH 12/16] Some progress with snake game. --- src/games/snake/busy.c | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 src/games/snake/busy.c diff --git a/src/games/snake/busy.c b/src/games/snake/busy.c deleted file mode 100644 index 4467ea9..0000000 --- a/src/games/snake/busy.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 1980 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. - */ - -#if defined(DOSCCS) && !defined(lint) -static char sccsid[] = "@(#)busy.c 5.1.2 (2.11BSD GTE) 1/16/95"; -#endif - -/* - * busy: print an indication of how busy the system is for games. - */ -#ifndef MAX -# define MAX 30 -#endif - -#include -main(argc, argv) -char **argv; -{ - double la[3]; - double max; - - getloadavg(la, 3); - max = la[0]; - if (la[1] > max) max = la[1]; - if (la[2] > max) max = la[2]; - if (argc > 1) - printf("1=%g, 5=%g, 15=%g, max=%g\n", la[0], la[1], la[2], max); - if (max > MAX) - printf("100\n"); /* incredibly high, no games allowed */ - else - printf("0\n"); - exit(0); -} From 808dfaf6ef215e3a67012b59aab7def342556f52 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 15 Sep 2014 12:28:43 -0700 Subject: [PATCH 13/16] Ported snake game. --- rootfs.manifest | 5 + src/games/Makefile | 3 +- src/games/snake/.gitignore | 2 + src/games/snake/Makefile | 54 +- src/games/snake/move.c | 590 +++++++++-------- src/games/snake/snake.c | 1246 +++++++++++++++++++----------------- src/games/snake/snake.h | 48 +- src/games/snake/snscore.c | 32 +- 8 files changed, 1052 insertions(+), 928 deletions(-) create mode 100644 src/games/snake/.gitignore diff --git a/rootfs.manifest b/rootfs.manifest index 9891d74..3568b09 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -430,6 +430,8 @@ file /games/rain file /games/robots file /games/rogue file /games/sail +file /games/snake +file /games/snscore file /games/teachgammon file /games/trek file /games/worm @@ -450,6 +452,8 @@ file /games/lib/fortunes.dat file /games/lib/cards.pck file /games/lib/robots_roll mode 0666 +file /games/lib/snakerawscores +mode 0666 dir /games/lib/quiz.k file /games/lib/quiz.k/africa file /games/lib/quiz.k/america @@ -778,6 +782,7 @@ file /share/man/cat6/rain.0 file /share/man/cat6/robots.0 file /share/man/cat6/rogue.0 file /share/man/cat6/sail.0 +file /share/man/cat6/snake.0 file /share/man/cat6/trek.0 file /share/man/cat6/worm.0 file /share/man/cat6/worms.0 diff --git a/src/games/Makefile b/src/games/Makefile index e0c5ceb..af8d2d5 100644 --- a/src/games/Makefile +++ b/src/games/Makefile @@ -13,8 +13,7 @@ CFLAGS += -Werror -Wall -Os # SUBDIR = adventure atc backgammon battlestar boggle btlgammon \ cribbage fortune hangman mille monop quiz robots rogue \ - sail trek -# TODO: snake + sail snake trek # C programs that live in the current directory and do not need # explicit make lines. diff --git a/src/games/snake/.gitignore b/src/games/snake/.gitignore new file mode 100644 index 0000000..1ebd43a --- /dev/null +++ b/src/games/snake/.gitignore @@ -0,0 +1,2 @@ +snake +snscore diff --git a/src/games/snake/Makefile b/src/games/snake/Makefile index 18588cf..f550ef1 100644 --- a/src/games/snake/Makefile +++ b/src/games/snake/Makefile @@ -5,37 +5,39 @@ # # @(#)Makefile 5.1.1 (2.11BSD GTE) 1/16/95 # -DESTDIR= -CFLAGS= -O -DCHECKBUSY -LIBS= -lm -ltermcap -BIN= $(DESTDIR)/usr/games -LIB= $(DESTDIR)/usr/games/lib -USER= daemon -UTILS= snscore busy -OBJS= snake.o move.o -ALL= snake ${UTILS} -SEPFLAG= -i +TOPSRC = $(shell cd ../../..; pwd) +include $(TOPSRC)/target.mk +#include $(TOPSRC)/cross.mk +#CFLAGS = -O -g -DCROSS -Dsgttyb=termios -all: ${ALL} +CFLAGS += -Werror -Wall -snake: $(OBJS) - cc ${SEPFLAG} $(OBJS) -o snake $(LIBS) +OBJS = snake.o move.o +MAN = snake.0 +LIBS = -lm -ltermcap -lc -snake.o move.o:snake.h +all: snake snscore $(MAN) -snscore: snscore.c - cc ${SEPFLAG} $(CFLAGS) snscore.c -o snscore +snake: $(OBJS) + $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf -busy: busy.c - cc ${SEPFLAG} $(CFLAGS) busy.c -o busy +snscore: snscore.o + $(CC) $(LDFLAGS) -o $@.elf snscore.o $(LIBS) + $(OBJDUMP) -S $@.elf > $@.dis + $(SIZE) $@.elf + $(ELF2AOUT) $@.elf $@ && rm $@.elf -install: all - install -s -m 4755 -o ${USER} snake ${BIN}/snake - install -s -m 755 -o ${USER} snscore ${BIN}/snscore - install -s -m 755 -o ${USER} busy ${LIB}/busy - cat /dev/null >> $(LIB)/snakerawscores - chmod 644 $(LIB)/snakerawscores - chown $(USER) $(LIB)/snakerawscores +$(MAN): snake.6 + nroff -man $< > $@ clean: - rm -f *.o ${ALL} + rm -f *.o core snake snscore *.0 *.dis + +install: all + install snake $(DESTDIR)/games/ + install snscore $(DESTDIR)/games/ + install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/ + install -c -m 644 /dev/null ${DESTDIR}/games/lib/snakerawscores diff --git a/src/games/snake/move.c b/src/games/snake/move.c index c0138c1..3f8b4aa 100644 --- a/src/games/snake/move.c +++ b/src/games/snake/move.c @@ -4,10 +4,6 @@ * specifies the terms and conditions for redistribution. */ -#if !defined(lint) && defined(DOSCCS) -static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28"; -#endif - /************************************************************************* * * MOVE LIBRARY @@ -31,9 +27,9 @@ static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28"; * home() home. * ll() move to lower left corner of screen. * cr() carriage return (no line feed). - * printf() just like standard printf, but keeps track + * print() just like standard printf, but keeps track * of cursor position. (Uses pstring). - * aprintf() same as printf, but first argument is &point. + * aprint() same as print, but first argument is &point. * (Uses pstring). * pstring(s) output the string of printing characters. * However, '\r' is interpreted to mean return @@ -59,7 +55,6 @@ static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28"; * same(&p1,&p2) returns 1 if p1 and p2 are the same point. * point(&p,x,y) return point set to x,y. * - * baudrate(x) returns the baudrate of the terminal. * delay(t) causes an approximately constant delay * independent of baudrate. * Duration is ~ t/20 seconds. @@ -67,129 +62,187 @@ static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28"; ******************************************************************************/ #include "snake.h" +#include +#include +#include +#include +#include int CMlength; int NDlength; int BSlength; int delaystr[10]; -short ospeed; static char str[80]; -move(sp) +int +outch(c) +{ + return putchar(c); +} + +void +putpad(str) +char *str; +{ + if (str) + tputs(str, 1, outch); +} + +void +bs() +{ + if (cursor.col > 0) { + putpad(BS); + cursor.col--; + } +} + +void +nd() +{ + putpad(ND); + cursor.col++; + if (cursor.col == COLUMNS+1) { + cursor.line++; + cursor.col = 0; + if (cursor.line >= LINES)cursor.line=LINES-1; + } +} + +void +right(sp) struct point *sp; { - int distance; - int tabcol,ct; + int field,tfield; + int tabcol,strlength; + + if (sp->col < cursor.col) + print("ERROR:right() can't move left\n"); + if (TA) { /* If No Tabs: can't send tabs because ttydrive + * loses count with control characters. + */ + field = cursor.col >> 3; +/* + * This code is useful for a terminal which wraps around on backspaces. + * (Mine does.) Unfortunately, this is not specified in termcap, and + * most terminals don't work that way. (Of course, most terminals + * have addressible cursors, too). + */ + if (BW && (CM == 0) && + ((sp->col << 1) - field > (COLUMNS - 8) << 1)) { + if (cursor.line == 0) { + outch('\n'); + } + outch('\r'); + cursor.col = COLUMNS + 1; + while(cursor.col > sp->col)bs(); + if (cursor.line != 0) outch('\n'); + return; + } + + tfield = sp->col >> 3; + + while (field < tfield) { + putpad(TA); + cursor.col = ++field << 3; + } + tabcol = (cursor.col|7) + 1; + strlength = (tabcol - sp->col)*BSlength + 1; + /* length of sequence to overshoot */ + if (((sp->col - cursor.col)*NDlength > strlength) && + (tabcol < COLUMNS)) { + /* + * Tab past and backup + */ + putpad(TA); + cursor.col = (cursor.col | 7) + 1; + while(cursor.col > sp->col)bs(); + } + } + while (sp->col > cursor.col) { + nd(); + } +} + +void +cr() +{ + outch('\r'); + cursor.col = 0; +} + +void +ll() +{ + int l; struct point z; - if (sp->line <0 || sp->col <0 || sp->col > COLUMNS){ - printf("move to [%d,%d]?",sp->line,sp->col); + l = lcnt + 2; + if (LL != NULL && LINES==l) { + putpad(LL); + cursor.line = LINES-1; + cursor.col = 0; return; } - if (sp->line >= LINES){ - move(point(&z,sp->col,LINES-1)); - while(sp->line-- >= LINES)putchar('\n'); - return; - } - - if (CM != 0) { - char *cmstr = tgoto(CM, sp->col, sp->line); - - CMlength = strlen(cmstr); - if(cursor.line == sp->line){ - distance = sp->col - cursor.col; - if(distance == 0)return; /* Already there! */ - if(distance > 0){ /* Moving to the right */ - if(distance*NDlength < CMlength){ - right(sp); - return; - } - if(TA){ - ct=sp->col&7; - tabcol=(cursor.col|7)+1; - do{ - ct++; - tabcol=(tabcol|7)+1; - } - while(tabcolcol); - if(ctcol < CMlength){ - cr(); - right(sp); - return; - } - /* No more optimizations on same row. */ - } - distance = sp->col - cursor.col; - distance = distance > 0 ? - distance*NDlength : -distance * BSlength; -if(distance < 0)printf("ERROR: distance is negative: %d",distance); - distance += abs(sp->line - cursor.line); - if(distance >= CMlength){ - putpad(cmstr); - cursor.line = sp->line; - cursor.col = sp->col; - return; - } - } - - /* - * If we get here we have a terminal that can't cursor - * address but has local motions or one which can cursor - * address but can get there quicker with local motions. - */ - gto(sp); + z.col = 0; + z.line = l-1; + move(&z); } + +void +up() +{ + putpad(UP); + cursor.line--; +} + +void +down() +{ + putpad(DO); + cursor.line++; + if (cursor.line >= LINES)cursor.line=LINES-1; +} + +void gto(sp) struct point *sp; { - - int distance,f,tfield,j; + int distance, f, tfield; if (cursor.line > LINES || cursor.line <0 || cursor.col <0 || cursor.col > COLUMNS) - printf("ERROR: cursor is at %d,%d\n", + print("ERROR: cursor is at %d,%d\n", cursor.line,cursor.col); if (sp->line > LINES || sp->line <0 || sp->col <0 || sp->col > COLUMNS) - printf("ERROR: target is %d,%d\n",sp->line,sp->col); + print("ERROR: target is %d,%d\n",sp->line,sp->col); tfield = (sp->col) >> 3; - if (sp->line == cursor.line){ - if (sp->col > cursor.col)right(sp); + if (sp->line == cursor.line) { + if (sp->col > cursor.col) + right(sp); else{ distance = (cursor.col -sp->col)*BSlength; - if (((TA) && + if (((TA) && (distance > tfield+((sp->col)&7)*NDlength) ) || - (((cursor.col)*NDlength) < distance) - ){ + (((cursor.col)*NDlength) < distance)) { cr(); right(sp); - } - else{ + } else { while(cursor.col > sp->col) bs(); } } return; } /*must change row */ - if (cursor.col - sp->col > (cursor.col >> 3)){ + if (cursor.col - sp->col > (cursor.col >> 3)) { if (cursor.col == 0)f = 0; else f = -1; } else f = cursor.col >> 3; - if (((sp->line << 1) + 1 < cursor.line - f) && (HO != 0)){ + if (((sp->line << 1) + 1 < cursor.line - f) && (HO != 0)) { /* * home quicker than rlf: * (sp->line + f > cursor.line - sp->line) @@ -199,11 +252,11 @@ struct point *sp; gto(sp); return; } - if (((sp->line << 1) > cursor.line + LINES+1 + f) && (LL != 0)){ + if (((sp->line << 1) > cursor.line + LINES+1 + f) && (LL != 0)) { /* home,rlf quicker than lf - * (LINES+1 - sp->line + f < sp->line - cursor.line) + * (LINES+1 - sp->line + f < sp->line - cursor.line) */ - if (cursor.line > f + 1){ + if (cursor.line > f + 1) { /* is home faster than wraparound lf? * (cursor.line + 20 - sp->line > 21 - sp->line + f) */ @@ -219,71 +272,26 @@ struct point *sp; gto(sp); /*can recurse since cursor.line = sp->line */ } -right(sp) -struct point *sp; +void +home() { - int field,tfield; - int tabcol,strlength; + struct point z; - if (sp->col < cursor.col) - printf("ERROR:right() can't move left\n"); - if(TA){ /* If No Tabs: can't send tabs because ttydrive - * loses count with control characters. - */ - field = cursor.col >> 3; -/* - * This code is useful for a terminal which wraps around on backspaces. - * (Mine does.) Unfortunately, this is not specified in termcap, and - * most terminals don't work that way. (Of course, most terminals - * have addressible cursors, too). - */ - if (BW && (CM == 0) && - ((sp->col << 1) - field > (COLUMNS - 8) << 1 ) - ){ - if (cursor.line == 0){ - outch('\n'); - } - outch('\r'); - cursor.col = COLUMNS + 1; - while(cursor.col > sp->col)bs(); - if (cursor.line != 0) outch('\n'); - return; - } - - tfield = sp->col >> 3; - - while (field < tfield){ - putpad(TA); - cursor.col = ++field << 3; - } - tabcol = (cursor.col|7) + 1; - strlength = (tabcol - sp->col)*BSlength + 1; - /* length of sequence to overshoot */ - if (((sp->col - cursor.col)*NDlength > strlength) && - (tabcol < COLUMNS) - ){ - /* - * Tab past and backup - */ - putpad(TA); - cursor.col = (cursor.col | 7) + 1; - while(cursor.col > sp->col)bs(); - } - } - while (sp->col > cursor.col){ - nd(); + if (HO != 0) { + putpad(HO); + cursor.col = cursor.line = 0; + return; } + z.col = z.line = 0; + move(&z); } -cr(){ - outch('\r'); - cursor.col = 0; -} - -clear(){ +void +clear() +{ int i; - if (CL){ + if (CL) { putpad(CL); cursor.col=cursor.line=0; } else { @@ -295,100 +303,104 @@ clear(){ } } -home(){ +void +move(sp) +struct point *sp; +{ + int distance; + int tabcol,ct; struct point z; - if(HO != 0){ - putpad(HO); - cursor.col = cursor.line = 0; + if (sp->line <0 || sp->col <0 || sp->col > COLUMNS) { + print("move to [%d,%d]?",sp->line,sp->col); return; } - z.col = z.line = 0; - move(&z); -} - -ll(){ - int j,l; - struct point z; - - l = lcnt + 2; - if(LL != NULL && LINES==l){ - putpad(LL); - cursor.line = LINES-1; - cursor.col = 0; + if (sp->line >= LINES) { + move(point(&z,sp->col,LINES-1)); + while(sp->line-- >= LINES)putchar('\n'); return; } - z.col = 0; - z.line = l-1; - move(&z); -} -up(){ - putpad(UP); - cursor.line--; -} + if (CM != 0) { + char *cmstr = tgoto(CM, sp->col, sp->line); -down(){ - putpad(DO); - cursor.line++; - if (cursor.line >= LINES)cursor.line=LINES-1; -} -bs(){ - if (cursor.col > 0){ - putpad(BS); - cursor.col--; - } -} - -nd(){ - putpad(ND); - cursor.col++; - if (cursor.col == COLUMNS+1){ - cursor.line++; - cursor.col = 0; - if (cursor.line >= LINES)cursor.line=LINES-1; + CMlength = strlen(cmstr); + if (cursor.line == sp->line) { + distance = sp->col - cursor.col; + if (distance == 0) return; /* Already there! */ + if (distance > 0) { /* Moving to the right */ + if (distance*NDlength < CMlength) { + right(sp); + return; + } + if (TA) { + ct=sp->col&7; + tabcol=(cursor.col|7)+1; + do{ + ct++; + tabcol=(tabcol|7)+1; + } + while(tabcolcol); + if (ctcol < CMlength) { + cr(); + right(sp); + return; + } + /* No more optimizations on same row. */ + } + distance = sp->col - cursor.col; + distance = distance > 0 ? + distance*NDlength : -distance * BSlength; + if (distance < 0) + print("ERROR: distance is negative: %d",distance); + distance += abs(sp->line - cursor.line); + if (distance >= CMlength) { + putpad(cmstr); + cursor.line = sp->line; + cursor.col = sp->col; + return; + } } + + /* + * If we get here we have a terminal that can't cursor + * address but has local motions or one which can cursor + * address but can get there quicker with local motions. + */ + gto(sp); } +void pch(c) { outch(c); - if(++cursor.col >= COLUMNS && AM) { + if (++cursor.col >= COLUMNS && AM) { cursor.col = 0; ++cursor.line; } } -aprintf(ps,st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9) -struct point *ps; -char *st; -int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9; - -{ - struct point p; - - p.line = ps->line+1; p.col = ps->col+1; - move(&p); - sprintf(str,st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9); - pstring(str); -} - -printf(st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9) -char *st; -int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9; -{ - sprintf(str,st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9); - pstring(str); -} - +void pstring(s) -char *s;{ +char *s; +{ struct point z; int stcol; stcol = cursor.col; - while (s[0] != '\0'){ - switch (s[0]){ + while (s[0] != '\0') { + switch (s[0]) { case '\n': move(point(&z,0,cursor.line+1)); break; @@ -403,8 +415,8 @@ char *s;{ case '\b': bs(); break; - case CTRL(g): - outch(CTRL(g)); + case CTRL('g'): + outch(CTRL('g')); break; default: if (s[0] < ' ')break; @@ -414,9 +426,37 @@ char *s;{ } } +void +aprint(struct point *ps, char *fmt, ...) +{ + va_list ap; + struct point p; + + p.line = ps->line+1; + p.col = ps->col+1; + move(&p); + va_start(ap, fmt); + vsprintf(str, fmt, ap); + va_end(ap); + pstring(str); +} + +void +print(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vsprintf(str, fmt, ap); + va_end(ap); + pstring(str); +} + +void pchar(ps,ch) struct point *ps; -char ch;{ +char ch; +{ struct point p; p.col = ps->col + 1; p.line = ps->line + 1; if ( @@ -431,78 +471,57 @@ char ch;{ (p.col == COLUMNS) && (p.line < LINES-1) ) - ) - ){ + )) { move(&p); pch(ch); } } - -outch(c) -{ - putchar(c); -} - -putpad(str) -char *str; -{ - if (str) - tputs(str, 1, outch); -} -baudrate() -{ - - switch (orig.sg_ospeed){ - case B300: - return(300); - case B1200: - return(1200); - case B4800: - return(4800); - case B9600: - return(9600); - default: - return(0); - } -} +void delay(t) int t; { - int k,j; - - k = baudrate() * t / 300; - for(j=0;j +#include +#include +#include +#include +#include +#include /* * If CHECKBUSY is defined, the file BUSY must be executable @@ -33,21 +31,33 @@ static char sccsid[] = "@(#)snake.c 5.1.1 (2.11BSD) 1997/7/29"; * If BUSY does not exist, snake won't play. */ #ifndef BUSY -#define BUSY "/usr/games/lib/busy" +#ifdef CROSS +#define BUSY "/usr/local/games/busy" +#else +#define BUSY "/games/lib/busy" +#endif #endif /* * This is the data file for scorekeeping. */ #ifndef SNAKERAWSCORES -#define SNAKERAWSCORES "/usr/games/lib/snakerawscores" +#ifdef CROSS +#define SNAKERAWSCORES "/usr/local/games/snakerawscores" +#else +#define SNAKERAWSCORES "/games/lib/snakerawscores" +#endif #endif /* * If it exists, a log is kept here. Otherwise it isn't. */ #ifndef LOGFILE -#define LOGFILE "/usr/games/lib/snake.log" +#ifdef CROSS +#define LOGFILE "/usr/local/games/snake.log" +#else +#define LOGFILE "/games/lib/snake.log" +#endif #endif #define PENALTY 10 /* % penalty for invoking spacewarp */ @@ -84,97 +94,542 @@ int repeat=1; long tv; char *tn; -main(argc,argv) -int argc; -char **argv; +int mx [8] = { + 0, 1, 1, 1, 0,-1,-1,-1 +}; + +int my [8] = { + -1,-1, 0, 1, 1, 1, 0,-1 +}; + +float absv[8]= { + 1, 1.4, 1, 1.4, 1, 1.4, 1, 1.4 +}; + +int oldw = 0; + +void +drawbox() { - int i,k; + register int i; + struct point p; + + p.line = -1; + for (i= 0; icol = sp->line = -1; /* impossible */ + do { + issame = 0; + p.col = random() % ccnt; + p.line = random() % lcnt; + + /* make sure it's not on top of something else */ + if (p.line == 0 && p.col <5) issame++; + if(same(&p, &you)) issame++; + if(same(&p, &money)) issame++; + if(same(&p, &finish)) issame++; + for (i=0; i<5; i++) + if(same(&p, &snake[i])) issame++; + + } while (issame); + *sp = p; +} + +/* + * Flush typeahead to keep from buffering a bunch of chars and then + * overshooting. This loses horribly at 9600 baud, but works nicely + * if the terminal gets behind. + */ +void +flushi() +{ +#ifdef CROSS + ioctl(0, TCSETAW, &newtty); +#else + ioctl(0, TIOCSETP, &newtty); +#endif +//#ifdef TIOCFLUSH +// ioctl(0, TIOCFLUSH, NULL); +//#endif +} + +void +winnings(won) +int won; +{ + struct point p; + + p.line = p.col = 1; + if(won>0){ + move(&p); + print("$%d",won); + } +} + +void +spacewarp(w) +int w; +{ + struct point p; int j; - long time(); - int stop(); - char stdbuf[BUFSIZ]; - argcount = argc; - argval = argv; - penalty = loot = 0; - getcap(); - ccnt -= 2; lcnt -= 2; /* compensate for border */ - busy(); - time(&tv); + randm(&you); + point(&p,COLUMNS/2 - 8,LINES/2 - 1); + if (p.col < 0) + p.col = 0; + if (p.line < 0) + p.line = 0; + if (w) { + sprintf(str,"BONUS!!!"); + loot = loot - penalty; + penalty = 0; + } else { + sprintf(str,"SPACE WARP!!!"); + penalty += loot/PENALTY; + } + for(j=0;j<3;j++){ + clear(); + delay(5); + aprint(&p,str); + delay(10); + } + setup(); + winnings(cashvalue); +} - for (i=1; icol < 4) && (sp->line == 0)){ + winnings(cashvalue); + if((you.line == 0) && (you.col < 4)) pchar(&you,ME); + return(5); } - /* - * chunk is the amount of money the user gets for each $. - * The formula below tries to be fair for various screen sizes. - * We only pay attention to the smaller of the 2 edges, since - * that seems to be the bottleneck. - * This formula is a hyperbola which includes the following points: - * (24, $25) (original scoring algorithm) - * (12, $40) (experimentally derived by the "feel") - * (48, $15) (a guess) - * This will give a 4x4 screen $99/shot. We don't allow anything - * smaller than 4x4 because there is a 3x3 game where you can win - * an infinite amount of money. - */ - if (i < 12) i = 12; /* otherwise it isn't fair */ - /* - * Compensate for border. This really changes the game since - * the screen is two squares smaller but we want the default - * to be $25, and the high scores on small screens were a bit - * much anyway. - */ - i += 2; - chunk = (675.0 / (i+6)) + 2.5; /* min screen edge */ + if (same(sp,&you)) { + pchar(sp,ME); + return(1); + } + pchar(sp,' '); + return(0); +} - signal (SIGINT, stop); - putpad(TI); /* String to begin programs that use cm */ - putpad(KS); /* Put terminal in keypad transmit mode */ +int +stretch(ps) +struct point *ps; +{ + struct point p; - random(&finish); - random(&you); - random(&money); - random(&snake[0]); + point(&p,you.col,you.line); + if(abs(ps->col-you.col) < 6){ + if(you.line < ps->line){ + for (p.line = you.line+1;p.line <= ps->line;p.line++) + pchar(&p,'v'); + delay(10); + for (;p.line > you.line;p.line--) + removep(&p); + } else { + for (p.line = you.line-1;p.line >= ps->line;p.line--) + pchar(&p,'^'); + delay(10); + for (;p.line < you.line;p.line++) + removep(&p); + } + return(1); + } else if(abs(ps->line-you.line) < 3){ + p.line = you.line; + if(you.col < ps->col){ + for (p.col = you.col+1;p.col <= ps->col;p.col++) + pchar(&p,'>'); + delay(10); + for (;p.col > you.col;p.col--) + removep(&p); + } else { + for (p.col = you.col-1;p.col >= ps->col;p.col--) + pchar(&p,'<'); + delay(10); + for (;p.col < you.col;p.col++) + removep(&p); + } + return(1); + } + return(0); +} - if ((orig.sg_ospeed < B9600) || - ((! CM) && (! TA))) fast=0; - for(i=1;i<6;i++) - chase (&snake[i], &snake[i-1]); +void +snap() +{ + struct point p; + + if(you.line < 3){ + pchar(point(&p,you.col,0),'-'); + } + if(you.line > lcnt-4){ + pchar(point(&p,you.col,lcnt-1),'_'); + } + if(you.col < 10){ + pchar(point(&p,0,you.line),'('); + } + if(you.col > ccnt-10){ + pchar(point(&p,ccnt-1,you.line),')'); + } + if (! stretch(&money)) { + if (! stretch(&finish)) + delay(10); + } + if(you.line < 3){ + point(&p,you.col,0); + removep(&p); + } + if(you.line > lcnt-4){ + point(&p,you.col,lcnt-1); + removep(&p); + } + if(you.col < 10){ + point(&p,0,you.line); + removep(&p); + } + if(you.col > ccnt-10){ + point(&p,ccnt-1,you.line); + removep(&p); + } + fflush(stdout); +} + +void +win(ps) +struct point *ps; +{ + struct point x; + int j,k; + int boxsize; /* actually diameter of box, not radius */ + + boxsize = fast ? 10 : 4; + point(&x,ps->col,ps->line); + for(j=1;j 1 && (rawscores=open(SNAKERAWSCORES,2))>=0) { + /* Figure out what happened in the past */ + if (read(rawscores, &allbscore, sizeof(short)) < 0 || + read(rawscores, &allbwho, sizeof(short)) < 0 || + lseek(rawscores, ((long)uid)*sizeof(short), 0) < 0 || + read(rawscores, &oldbest, sizeof(short)) < 0) { + print("Error reading scores\n"); + } + if (flag) + return (score > oldbest ? 1 : 0); + + /* Update this jokers best */ + if (score > oldbest) { + if (lseek(rawscores, ((long)uid)*sizeof(short), 0) < 0 || + write(rawscores, &score, sizeof(short)) < 0) { + print("Error writing scores\n"); + } + print("You bettered your previous best of $%d\n", oldbest); + } else + print("Your best to date is $%d\n", oldbest); + + /* See if we have a new champ */ + p = getpwuid(allbwho); + if (p == NULL || score > allbscore) { + if (lseek(rawscores, (long)0, 0) < 0 || + write(rawscores, &score, sizeof(short)) < 0 || + write(rawscores, &uid, sizeof(short)) < 0) { + print("Error writing scores.\n"); + } + if (p != NULL) + print("You beat %s's old record of $%d!\n", p->pw_name, allbscore); + else + print("You set a new record!\n"); + } else + print("The highest is %s with $%d\n", p->pw_name, allbscore); + close(rawscores); + } else + if (!flag) + print("Unable to post score.\n"); + return (1); +} + +void +chase (np, sp) +struct point *sp, *np; +{ + /* this algorithm has bugs; otherwise the + snake would get too good */ + struct point d; + int w, i, wt[8]; + double sqrt(), v1, v2, vp, max; + point(&d,you.col-sp->col,you.line-sp->line); + v1 = sqrt( (double) (d.col*d.col + d.line*d.line) ); + w=0; + max=0; + for(i=0; i<8; i++) + { + vp = d.col*mx[i] + d.line*my[i]; + v2 = absv[i]; + if (v1>0) + vp = ((double)vp)/(v1*v2); + else vp=1.0; + if (vp>max) + { + max=vp; + w=i; + } + } + for(i=0; i<8; i++) + { + point(&d,sp->col+mx[i],sp->line+my[i]); + wt[i]=0; + if (d.col<0 || d.col>=ccnt || d.line<0 || d.line>=lcnt) + continue; + if (d.line == 0 && d.col < 5) continue; + if (same(&d,&money)) continue; + if (same(&d,&finish)) continue; + wt[i]= i==w ? loot/10 : 1; + if (i==oldw) wt [i] += loot/20; + } + for(w=i=0; i<8; i++) + w+= wt[i]; + vp = random() % w; + for(i=0; i<8; i++) + if (vp col+mx[w],sp->line+my[w]); +} + +void +surround(ps) +struct point *ps; +{ + struct point x; + int j; + + if(ps->col == 0)ps->col++; + if(ps->line == 0)ps->line++; + if(ps->line == LINES -1)ps->line--; + if(ps->col == COLUMNS -1)ps->col--; + aprint(point(&x,ps->col-1,ps->line-1),"/*\\\r* *\r\\*/"); + for (j=0;j<20;j++){ + pchar(ps,'@'); + delay(1); + pchar(ps,' '); + delay(1); + } + if (post(cashvalue,1)) { + aprint(point(&x,ps->col-1,ps->line-1)," \ro.o\r\\_/"); + delay(6); + aprint(point(&x,ps->col-1,ps->line-1)," \ro.-\r\\_/"); + delay(6); + } + aprint(point(&x,ps->col-1,ps->line-1)," \ro.o\r\\_/"); +} + +int +pushsnake() +{ + int i, bonus; + int issame = 0; + + /* + * My manual says times doesn't return a value. Furthermore, the + * snake should get his turn every time no matter if the user is + * on a fast terminal with typematic keys or not. + * So I have taken the call to times out. + */ + for(i=4; i>=0; i--) + if (same(&snake[i], &snake[5])) + issame++; + if (!issame) + pchar(&snake[5],' '); + for(i=4; i>=0; i--) + snake[i+1]= snake[i]; + chase(&snake[0], &snake[1]); + pchar(&snake[1],SNAKETAIL); + pchar(&snake[0],SNAKEHEAD); + for(i=0; i<6; i++) + { + if (same(&snake[i],&you)) + { + surround(&you); + i = (cashvalue) % 10; + bonus = random() % 10; + ll(); + print("%d\n", bonus); + delay(30); + if (bonus == i) { + spacewarp(1); + logit("bonus"); + flushi(); + return(1); + } + if ( loot >= penalty ){ + print("You and your $%d have been eaten\n",cashvalue); + } else { + print("The snake ate you. You owe $%d.\n",-cashvalue); + } + logit("eaten"); + length(moves); + done(); + } + } + return(0); } /* Main command loop */ +void mainloop() { int j, k; for (;;) { - int c,lastc,match; + int c, lastc = 0, match; move(&you); fflush(stdout); @@ -188,7 +643,7 @@ mainloop() if (c == '.') { c = lastc; } - if ((Klength > 0) && + if ((Klength > 0) && (c == *KL || c == *KR || c == *KU || c == *KD)) { savec = c; match = 0; @@ -218,7 +673,7 @@ mainloop() if (match == 0) { ungetc(c,stdin); ch = savec; - /* Oops! + /* Oops! * This works if we figure it out on second character. */ break; @@ -229,11 +684,12 @@ mainloop() } c = ch; } - if (!fast) flushi(); + if (! fast) + flushi(); lastc = c; switch (c){ - case CTRL(z): - case CTRL(c): + case CTRL('z'): + case CTRL('c'): suspend(); continue; case EOT: @@ -251,11 +707,13 @@ mainloop() j = read(0,stri,BSIZE); stri[j] = 0; if (fork() == 0) { - setuid(getuid()); - system(stri); + if (setuid(getuid()) < 0) + /*ignore*/; + if (system(stri) < 0) + /*ignore*/; } else wait(0); - printf("READY?\n"); + print("READY?\n"); fflush(stdout); raw(); c = getchar(); @@ -263,7 +721,7 @@ mainloop() putpad(KS); putpad(TI); point(&cursor,0,lcnt-1); - case CTRL(l): + case CTRL('l'): setup(); winnings(cashvalue); continue; @@ -338,7 +796,7 @@ mainloop() pchar(&you,ME); } break; - case CTRL(p): + case CTRL('p'): case 'e': case 'k': case 'i': @@ -351,7 +809,7 @@ mainloop() pchar(&you,ME); } break; - case CTRL(n): + case CTRL('n'): case 'c': case 'j': case LF: @@ -367,548 +825,150 @@ mainloop() break; } - if (same(&you,&money)) - { - char xp[20]; - struct point z; + if (same(&you,&money)) { loot += 25; if(k < repeat) pchar(&you,' '); do { - random(&money); - } while (money.col == finish.col && money.line == finish.line || - money.col < 5 && money.line == 0 || - money.col == you.col && money.line == you.line); + randm(&money); + } while ((money.col == finish.col && money.line == finish.line) || + (money.col < 5 && money.line == 0) || + (money.col == you.col && money.line == you.line)); pchar(&money,TREASURE); winnings(cashvalue); continue; } - if (same(&you,&finish)) - { + if (same(&you,&finish)) { win(&finish); ll(); cook(); - printf("You have won with $%d.\n",cashvalue); + print("You have won with $%d.\n",cashvalue); fflush(stdout); logit("won"); post(cashvalue,0); length(moves); - done(0); + done(); } - if (pushsnake())break; + if (pushsnake()) + break; } fflush(stdout); } } -setup(){ /* - * setup the board - */ - int i; - - clear(); - pchar(&you,ME); - pchar(&finish,GOAL); - pchar(&money,TREASURE); - for(i=1; i<6; i++) { - pchar(&snake[i],SNAKETAIL); - } - pchar(&snake[0], SNAKEHEAD); - drawbox(); - fflush(stdout); -} - -drawbox() -{ - register int i; - struct point p; - - p.line = -1; - for (i= 0; icol = sp->line = -1; /* impossible */ - do { - issame = 0; - p.col = ((rand()>>8) & 0377)% ccnt; - p.line = ((rand()>>8) & 0377)% lcnt; - - /* make sure it's not on top of something else */ - if (p.line == 0 && p.col <5) issame++; - if(same(&p, &you)) issame++; - if(same(&p, &money)) issame++; - if(same(&p, &finish)) issame++; - for (i=0; i<5; i++) - if(same(&p, &snake[i])) issame++; - - } while (issame); - *sp = p; -} - +void busy() { - FILE *pip, *popen(); - char c; - int b,r; - float a; - #ifdef CHECKBUSY if (! strcmp (argval[0], "test")) return; + FILE *pip; if ((access(BUSY,1) != 0) || (pip = popen(BUSY,"r")) == NULL){ - printf("Sorry, no snake just now.\n"); + print("Sorry, no snake just now.\n"); + done(); + } + int b; + if (fscanf(pip, "%d", &b) != 1) { + print("Sorry, busy file damaged.\n"); done(); } - fscanf(pip,"%d",&b); pclose(pip); if (b > 20) { - printf("Sorry, the system is too heavily loaded right now.\n"); + print("Sorry, the system is too heavily loaded right now.\n"); done(); } - nice(b); + if (nice(b) < 0) + /*ignore*/; #endif } -post(iscore, flag) -int iscore, flag; +void +stop(int sig) { - short score = iscore; - int rawscores; - short uid; - short oldbest=0; - short allbwho=0, allbscore=0; - struct passwd *p, *getpwuid(); - - /* - * Neg uid, 0, and 1 cannot have scores recorded. - */ - if ((uid=getuid()) > 1 && (rawscores=open(SNAKERAWSCORES,2))>=0) { - /* Figure out what happened in the past */ - read(rawscores, &allbscore, sizeof(short)); - read(rawscores, &allbwho, sizeof(short)); - lseek(rawscores, ((long)uid)*sizeof(short), 0); - read(rawscores, &oldbest, sizeof(short)); - if (flag) return (score > oldbest ? 1 : 0); - - /* Update this jokers best */ - if (score > oldbest) { - lseek(rawscores, ((long)uid)*sizeof(short), 0); - write(rawscores, &score, sizeof(short)); - printf("You bettered your previous best of $%d\n", oldbest); - } else - printf("Your best to date is $%d\n", oldbest); - - /* See if we have a new champ */ - p = getpwuid(allbwho); - if (p == NULL || score > allbscore) { - lseek(rawscores, (long)0, 0); - write(rawscores, &score, sizeof(short)); - write(rawscores, &uid, sizeof(short)); - if (p != NULL) - printf("You beat %s's old record of $%d!\n", p->pw_name, allbscore); - else - printf("You set a new record!\n"); - } else - printf("The highest is %s with $%d\n", p->pw_name, allbscore); - close(rawscores); - } else - if (!flag) - printf("Unable to post score.\n"); - return (1); -} - -/* - * Flush typeahead to keep from buffering a bunch of chars and then - * overshooting. This loses horribly at 9600 baud, but works nicely - * if the terminal gets behind. - */ -flushi() -{ - stty(0, &new); -} -int mx [8] = { - 0, 1, 1, 1, 0,-1,-1,-1}; -int my [8] = { - -1,-1, 0, 1, 1, 1, 0,-1}; -float absv[8]= { - 1, 1.4, 1, 1.4, 1, 1.4, 1, 1.4 -}; -int oldw=0; -chase (np, sp) -struct point *sp, *np; -{ - /* this algorithm has bugs; otherwise the - snake would get too good */ - struct point d; - int w, i, wt[8]; - double sqrt(), v1, v2, vp, max; - point(&d,you.col-sp->col,you.line-sp->line); - v1 = sqrt( (double) (d.col*d.col + d.line*d.line) ); - w=0; - max=0; - for(i=0; i<8; i++) - { - vp = d.col*mx[i] + d.line*my[i]; - v2 = absv[i]; - if (v1>0) - vp = ((double)vp)/(v1*v2); - else vp=1.0; - if (vp>max) - { - max=vp; - w=i; - } - } - for(i=0; i<8; i++) - { - point(&d,sp->col+mx[i],sp->line+my[i]); - wt[i]=0; - if (d.col<0 || d.col>=ccnt || d.line<0 || d.line>=lcnt) - continue; - if (d.line == 0 && d.col < 5) continue; - if (same(&d,&money)) continue; - if (same(&d,&finish)) continue; - wt[i]= i==w ? loot/10 : 1; - if (i==oldw) wt [i] += loot/20; - } - for(w=i=0; i<8; i++) - w+= wt[i]; - vp = (( rand() >> 6 ) & 01777) %w; - for(i=0; i<8; i++) - if (vp col+mx[w],sp->line+my[w]); -} - -spacewarp(w) -int w;{ - struct point p; - int j; - - random(&you); - point(&p,COLUMNS/2 - 8,LINES/2 - 1); - if (p.col < 0) - p.col = 0; - if (p.line < 0) - p.line = 0; - if (w) { - sprintf(str,"BONUS!!!"); - loot = loot - penalty; - penalty = 0; - } else { - sprintf(str,"SPACE WARP!!!"); - penalty += loot/PENALTY; - } - for(j=0;j<3;j++){ - clear(); - delay(5); - aprintf(&p,str); - delay(10); - } - setup(); - winnings(cashvalue); -} -snap() -{ - struct point p; - int i; - - if(you.line < 3){ - pchar(point(&p,you.col,0),'-'); - } - if(you.line > lcnt-4){ - pchar(point(&p,you.col,lcnt-1),'_'); - } - if(you.col < 10){ - pchar(point(&p,0,you.line),'('); - } - if(you.col > ccnt-10){ - pchar(point(&p,ccnt-1,you.line),')'); - } - if (! stretch(&money)) if (! stretch(&finish)) delay(10); - if(you.line < 3){ - point(&p,you.col,0); - remove(&p); - } - if(you.line > lcnt-4){ - point(&p,you.col,lcnt-1); - remove(&p); - } - if(you.col < 10){ - point(&p,0,you.line); - remove(&p); - } - if(you.col > ccnt-10){ - point(&p,ccnt-1,you.line); - remove(&p); - } - fflush(stdout); -} -stretch(ps) -struct point *ps;{ - struct point p; - - point(&p,you.col,you.line); - if(abs(ps->col-you.col) < 6){ - if(you.line < ps->line){ - for (p.line = you.line+1;p.line <= ps->line;p.line++) - pchar(&p,'v'); - delay(10); - for (;p.line > you.line;p.line--) - remove(&p); - } else { - for (p.line = you.line-1;p.line >= ps->line;p.line--) - pchar(&p,'^'); - delay(10); - for (;p.line < you.line;p.line++) - remove(&p); - } - return(1); - } else if(abs(ps->line-you.line) < 3){ - p.line = you.line; - if(you.col < ps->col){ - for (p.col = you.col+1;p.col <= ps->col;p.col++) - pchar(&p,'>'); - delay(10); - for (;p.col > you.col;p.col--) - remove(&p); - } else { - for (p.col = you.col-1;p.col >= ps->col;p.col--) - pchar(&p,'<'); - delay(10); - for (;p.col < you.col;p.col++) - remove(&p); - } - return(1); - } - return(0); -} - -surround(ps) -struct point *ps;{ - struct point x; - int i,j; - - if(ps->col == 0)ps->col++; - if(ps->line == 0)ps->line++; - if(ps->line == LINES -1)ps->line--; - if(ps->col == COLUMNS -1)ps->col--; - aprintf(point(&x,ps->col-1,ps->line-1),"/*\\\r* *\r\\*/"); - for (j=0;j<20;j++){ - pchar(ps,'@'); - delay(1); - pchar(ps,' '); - delay(1); - } - if (post(cashvalue,1)) { - aprintf(point(&x,ps->col-1,ps->line-1)," \ro.o\r\\_/"); - delay(6); - aprintf(point(&x,ps->col-1,ps->line-1)," \ro.-\r\\_/"); - delay(6); - } - aprintf(point(&x,ps->col-1,ps->line-1)," \ro.o\r\\_/"); -} -win(ps) -struct point *ps; -{ - struct point x; - int j,k; - int boxsize; /* actually diameter of box, not radius */ - - boxsize = fast ? 10 : 4; - point(&x,ps->col,ps->line); - for(j=1;j=0; i--) - if (same(&snake[i], &snake[5])) - issame++; - if (!issame) - pchar(&snake[5],' '); - for(i=4; i>=0; i--) - snake[i+1]= snake[i]; - chase(&snake[0], &snake[1]); - pchar(&snake[1],SNAKETAIL); - pchar(&snake[0],SNAKEHEAD); - for(i=0; i<6; i++) - { - if (same(&snake[i],&you)) - { - surround(&you); - i = (cashvalue) % 10; - bonus = ((rand()>>8) & 0377)% 10; - ll(); - printf("%d\n", bonus); - delay(30); - if (bonus == i) { - spacewarp(1); - logit("bonus"); - flushi(); - return(1); - } - if ( loot >= penalty ){ - printf("You and your $%d have been eaten\n",cashvalue); - } else { - printf("The snake ate you. You owe $%d.\n",-cashvalue); - } - logit("eaten"); - length(moves); - done(); - } - } - return(0); -} - -remove(sp) -struct point *sp; -{ - int j; - - if (same(sp,&money)) { - pchar(sp,TREASURE); - return(2); - } - if (same(sp,&finish)) { - pchar(sp,GOAL); - return(3); - } - if (same(sp,&snake[0])) { - pchar(sp,SNAKEHEAD); - return(4); - } - for(j=1;j<6;j++){ - if(same(sp,&snake[j])){ - pchar(sp,SNAKETAIL); - return(4); - } - } - if ((sp->col < 4) && (sp->line == 0)){ - winnings(cashvalue); - if((you.line == 0) && (you.col < 4)) pchar(&you,ME); - return(5); - } - if (same(sp,&you)) { - pchar(sp,ME); - return(1); - } - pchar(sp,' '); - return(0); -} -winnings(won) -int won; -{ - struct point p; - - p.line = p.col = 1; - if(won>0){ - move(&p); - printf("$%d",won); - } -} - -stop(){ - signal(SIGINT,1); + signal(SIGINT, SIG_IGN); ll(); length(moves); done(); } -suspend() +int +main(argc,argv) +int argc; +char **argv; { - char *sh; + int i; + char stdbuf[BUFSIZ]; - cook(); -#ifdef SIGTSTP - kill(getpid(), SIGTSTP); -#else - sh = getenv("SHELL"); - if (sh == NULL) - sh = "/bin/sh"; - system(sh); -#endif - raw(); - setup(); - winnings(cashvalue); -} + argcount = argc; + argval = argv; + penalty = loot = 0; + getcap(); + ccnt -= 2; lcnt -= 2; /* compensate for border */ + busy(); + time(&tv); -length(num) -int num; -{ - printf("You made %d moves.\n",num); -} - -logit(msg) -char *msg; -{ - FILE *logfile; - long t; - - if ((logfile=fopen(LOGFILE, "a")) != NULL) { - time(&t); - fprintf(logfile, "%s $%d %dx%d %s %s", getlogin(), cashvalue, lcnt, ccnt, msg, ctime(&t)); - fclose(logfile); + for (i=1; i -# include -# include -# include -# include -# include +#include +#include +#include +#include +#include +#include +#ifdef CROSS +# include +#else +# include +#endif #define ESC '\033' @@ -29,21 +33,41 @@ int lcnt, ccnt; /* user's idea of screen size */ char xBC, PC; int AM, BW; char tbuf[1024], tcapbuf[128]; -char *tgetstr(), *tgoto(); int Klength; /* length of KX strings */ int chunk; /* amount of money given at a time */ + #ifdef debug -#define cashvalue (loot-penalty)/25 +# define cashvalue (loot-penalty)/25 #else -#define cashvalue chunk*(loot-penalty)/25 +# define cashvalue chunk*(loot-penalty)/25 #endif struct point { int col, line; }; struct point cursor; -struct sgttyb orig, new; +struct sgttyb origtty, newtty; #ifdef TIOCLGET struct ltchars olttyc, nlttyc; #endif -struct point *point(); + +#undef CTRL +#define CTRL(x) (x - 'A' + 1) + +struct point *point(struct point *ps, int x, int y); + +void print(char *fmt, ...); +void aprint(struct point *ps, char *fmt, ...); +void move(struct point *sp); +void stop(int sig); +void pchar(struct point *ps, char ch); +void putpad(char *str); +void clear(void); +void delay(int t); +void cook(void); +void raw(void); +void ll(void); +void done(void); +void getcap(void); + +int same(struct point *sp1, struct point *sp2); diff --git a/src/games/snake/snscore.c b/src/games/snake/snscore.c index 66f8032..d7f802d 100644 --- a/src/games/snake/snscore.c +++ b/src/games/snake/snscore.c @@ -3,18 +3,18 @@ * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ - -#ifndef lint -static char sccsid[] = "@(#)snscore.c 5.1 (Berkeley) 5/30/85"; -#endif not lint - #include +#include +#include #include -char *recfile = "/usr/games/lib/snakerawscores"; -#define MAXPLAYERS 256 -struct passwd *getpwuid(); -char *malloc(); +#ifdef CROSS +char *recfile = "/usr/local/games/snakerawscores"; +#else +char *recfile = "/games/lib/snakerawscores"; +#endif + +#define MAXPLAYERS 256 struct player { short uids; @@ -22,12 +22,11 @@ struct player { char *name; } players[MAXPLAYERS], temp; -main() +int main() { - char buf[80], cp; short uid, score; FILE *fd; - int noplayers; + int noplayers = 0; int i, j, notsorted; short whoallbest, allbest; char *q; @@ -39,10 +38,13 @@ main() exit(1); } printf("Snake players scores to date\n"); - fread(&whoallbest, sizeof(short), 1, fd); - fread(&allbest, sizeof(short), 1, fd); + if (! fread(&whoallbest, sizeof(short), 1, fd) || + ! fread(&allbest, sizeof(short), 1, fd)) { + printf("error reading scores\n"); + exit(2); + } for (uid=2;;uid++) { - if(fread(&score, sizeof(short), 1, fd) == 0) + if(! fread(&score, sizeof(short), 1, fd)) break; if (score > 0) { if (noplayers > MAXPLAYERS) { From cae7db41ca0b5d80cc5656fcc2ff3b90f8660f25 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 15 Sep 2014 14:24:17 -0700 Subject: [PATCH 14/16] Snake fixed. --- src/games/snake/Makefile | 2 +- src/games/snake/move.c | 155 ++++++--------------------------------- src/games/snake/snake.c | 40 ++++------ src/games/snake/snake.h | 4 +- 4 files changed, 38 insertions(+), 163 deletions(-) diff --git a/src/games/snake/Makefile b/src/games/snake/Makefile index f550ef1..7b06988 100644 --- a/src/games/snake/Makefile +++ b/src/games/snake/Makefile @@ -8,7 +8,7 @@ TOPSRC = $(shell cd ../../..; pwd) include $(TOPSRC)/target.mk #include $(TOPSRC)/cross.mk -#CFLAGS = -O -g -DCROSS -Dsgttyb=termios +#CFLAGS = -O -g -DCROSS CFLAGS += -Werror -Wall diff --git a/src/games/snake/move.c b/src/games/snake/move.c index 3f8b4aa..29a8b74 100644 --- a/src/games/snake/move.c +++ b/src/games/snake/move.c @@ -60,7 +60,6 @@ * Duration is ~ t/20 seconds. * ******************************************************************************/ - #include "snake.h" #include #include @@ -114,52 +113,8 @@ void right(sp) struct point *sp; { - int field,tfield; - int tabcol,strlength; - if (sp->col < cursor.col) print("ERROR:right() can't move left\n"); - if (TA) { /* If No Tabs: can't send tabs because ttydrive - * loses count with control characters. - */ - field = cursor.col >> 3; -/* - * This code is useful for a terminal which wraps around on backspaces. - * (Mine does.) Unfortunately, this is not specified in termcap, and - * most terminals don't work that way. (Of course, most terminals - * have addressible cursors, too). - */ - if (BW && (CM == 0) && - ((sp->col << 1) - field > (COLUMNS - 8) << 1)) { - if (cursor.line == 0) { - outch('\n'); - } - outch('\r'); - cursor.col = COLUMNS + 1; - while(cursor.col > sp->col)bs(); - if (cursor.line != 0) outch('\n'); - return; - } - - tfield = sp->col >> 3; - - while (field < tfield) { - putpad(TA); - cursor.col = ++field << 3; - } - tabcol = (cursor.col|7) + 1; - strlength = (tabcol - sp->col)*BSlength + 1; - /* length of sequence to overshoot */ - if (((sp->col - cursor.col)*NDlength > strlength) && - (tabcol < COLUMNS)) { - /* - * Tab past and backup - */ - putpad(TA); - cursor.col = (cursor.col | 7) + 1; - while(cursor.col > sp->col)bs(); - } - } while (sp->col > cursor.col) { nd(); } @@ -209,7 +164,7 @@ void gto(sp) struct point *sp; { - int distance, f, tfield; + int distance, f; if (cursor.line > LINES || cursor.line <0 || cursor.col <0 || cursor.col > COLUMNS) @@ -218,20 +173,17 @@ struct point *sp; if (sp->line > LINES || sp->line <0 || sp->col <0 || sp->col > COLUMNS) print("ERROR: target is %d,%d\n",sp->line,sp->col); - tfield = (sp->col) >> 3; if (sp->line == cursor.line) { if (sp->col > cursor.col) right(sp); else{ distance = (cursor.col -sp->col)*BSlength; - if (((TA) && - (distance > tfield+((sp->col)&7)*NDlength) - ) || - (((cursor.col)*NDlength) < distance)) { + if (cursor.col*NDlength < distance) { cr(); right(sp); } else { - while(cursor.col > sp->col) bs(); + while(cursor.col > sp->col) + bs(); } } return; @@ -307,8 +259,6 @@ void move(sp) struct point *sp; { - int distance; - int tabcol,ct; struct point z; if (sp->line <0 || sp->col <0 || sp->col > COLUMNS) { @@ -321,64 +271,10 @@ struct point *sp; return; } - if (CM != 0) { - char *cmstr = tgoto(CM, sp->col, sp->line); - - CMlength = strlen(cmstr); - if (cursor.line == sp->line) { - distance = sp->col - cursor.col; - if (distance == 0) return; /* Already there! */ - if (distance > 0) { /* Moving to the right */ - if (distance*NDlength < CMlength) { - right(sp); - return; - } - if (TA) { - ct=sp->col&7; - tabcol=(cursor.col|7)+1; - do{ - ct++; - tabcol=(tabcol|7)+1; - } - while(tabcolcol); - if (ctcol < CMlength) { - cr(); - right(sp); - return; - } - /* No more optimizations on same row. */ - } - distance = sp->col - cursor.col; - distance = distance > 0 ? - distance*NDlength : -distance * BSlength; - if (distance < 0) - print("ERROR: distance is negative: %d",distance); - distance += abs(sp->line - cursor.line); - if (distance >= CMlength) { - putpad(cmstr); - cursor.line = sp->line; - cursor.col = sp->col; - return; - } - } - - /* - * If we get here we have a terminal that can't cursor - * address but has local motions or one which can cursor - * address but can get there quicker with local motions. - */ - gto(sp); + char *cmstr = tgoto(CM, sp->col, sp->line); + putpad(cmstr); + cursor.line = sp->line; + cursor.col = sp->col; } void @@ -458,7 +354,9 @@ struct point *ps; char ch; { struct point p; - p.col = ps->col + 1; p.line = ps->line + 1; + + p.col = ps->col + 1; + p.line = ps->line + 1; if ( (p.col >= 0) && (p.line >= 0) && @@ -585,10 +483,6 @@ getcap() if (BS) xBC = *BS; - TA = tgetstr("ta", &ap); - if (TA == 0 && tgetflag("pt")) - TA = "\t"; - HO = tgetstr("ho", &ap); CL = tgetstr("cl", &ap); CM = tgetstr("cm", &ap); @@ -616,9 +510,8 @@ getcap() NDlength = strlen(ND); BSlength = strlen(BS); - if ((CM == 0) && (HO == 0 || UP==0 || BS==0 || ND==0)) { - fprintf(stderr, "Terminal must have addressible "); - fprintf(stderr, "cursor or home + 4 local motions\n"); + if (CM == 0) { + fprintf(stderr, "Terminal must have addressible cursor\n"); exit(5); } if (tgetflag("os")) { @@ -632,20 +525,17 @@ getcap() #ifdef CROSS ioctl(0, TCGETA, &origtty); -#else - ioctl(0, TIOCGETP, &origtty); -#endif newtty = origtty; -#ifdef CRMOD - newtty.sg_flags &= ~(ECHO|CRMOD|XTABS); - newtty.sg_flags |= CBREAK; -#else newtty.c_lflag &= ~(ICANON | ECHO); newtty.c_oflag &= ~ONLCR; - newtty.c_cc[4] = 1; /* MIN */ - newtty.c_cc[5] = 2; /* TIME */ + newtty.c_cc[VMIN] = 1; + newtty.c_cc[VTIME] = 0; +#else + ioctl(0, TIOCGETP, &origtty); + newtty = origtty; + newtty.sg_flags &= ~(ECHO|CRMOD|XTABS); + newtty.sg_flags |= CBREAK; #endif - signal(SIGINT, stop); #ifdef TIOCGLTC ioctl(0, TIOCGLTC, &olttyc); nlttyc = olttyc; @@ -653,11 +543,8 @@ getcap() nlttyc.t_dsuspc = '\377'; #endif raw(); + signal(SIGINT, stop); -#ifndef CROSS - if ((origtty.sg_flags & XTABS) == XTABS) - TA = 0; -#endif putpad(KS); putpad(TI); point(&cursor,0,LINES-1); diff --git a/src/games/snake/snake.c b/src/games/snake/snake.c index e928ba9..cf1a2a9 100644 --- a/src/games/snake/snake.c +++ b/src/games/snake/snake.c @@ -89,7 +89,6 @@ char stri[BSIZE]; char *p; char ch, savec; char *kl, *kr, *ku, *kd; -int fast=1; int repeat=1; long tv; char *tn; @@ -369,7 +368,7 @@ struct point *ps; int j,k; int boxsize; /* actually diameter of box, not radius */ - boxsize = fast ? 10 : 4; + boxsize = 10; point(&x,ps->col,ps->line); for(j=1;j= '0')) { ungetc(c,stdin); @@ -684,8 +687,7 @@ mainloop() } c = ch; } - if (! fast) - flushi(); + flushi(); lastc = c; switch (c){ case CTRL('z'): @@ -776,24 +778,18 @@ mainloop() case 'h': case '\b': if (you.col >0) { - if((fast)||(k == 1)) - pchar(&you,' '); + pchar(&you,' '); you.col--; - if((fast) || (k == repeat) || - (you.col == 0)) - pchar(&you,ME); + pchar(&you,ME); } break; case 'f': case 'l': case ' ': if (you.col < ccnt-1) { - if((fast)||(k == 1)) - pchar(&you,' '); + pchar(&you,' '); you.col++; - if((fast) || (k == repeat) || - (you.col == ccnt-1)) - pchar(&you,ME); + pchar(&you,ME); } break; case CTRL('p'): @@ -801,12 +797,9 @@ mainloop() case 'k': case 'i': if (you.line > 0) { - if((fast)||(k == 1)) - pchar(&you,' '); + pchar(&you,' '); you.line--; - if((fast) || (k == repeat) || - (you.line == 0)) - pchar(&you,ME); + pchar(&you,ME); } break; case CTRL('n'): @@ -815,12 +808,9 @@ mainloop() case LF: case 'm': if (you.line+1 < lcnt) { - if((fast)||(k == 1)) - pchar(&you,' '); + pchar(&you,' '); you.line++; - if((fast) || (k == repeat) || - (you.line == lcnt-1)) - pchar(&you,ME); + pchar(&you,ME); } break; } @@ -964,8 +954,6 @@ char **argv; randm(&money); randm(&snake[0]); - if (! CM && ! TA) - fast = 0; for(i=1;i<6;i++) chase (&snake[i], &snake[i-1]); setup(); diff --git a/src/games/snake/snake.h b/src/games/snake/snake.h index 85477b2..f3fae61 100644 --- a/src/games/snake/snake.h +++ b/src/games/snake/snake.h @@ -13,6 +13,7 @@ #include #ifdef CROSS # include +# define sgttyb termio #else # include #endif @@ -24,8 +25,7 @@ struct tbuffer { } tbuffer; char *CL, *UP, *DO, *ND, *BS, - *HO, *CM, - *TA, *LL, + *HO, *CM, *LL, *KL, *KR, *KU, *KD, *TI, *TE, *KS, *KE; int LINES, COLUMNS; /* physical screen size. */ From 850797db2e374f2070f39ee9240571af0c244fae Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 15 Sep 2014 20:40:04 -0700 Subject: [PATCH 15/16] Fixed snake game. Fixed newline bug in libcurses. File /etc/termcap replaced by small version. Five TERM types supported: ansi - simple generic display; xterm - common for most modern terminal emulators; linux - for Linux console; cons25 - for BSD console; vt100 - for DEC VT100 terminal emulators. Terminal type xterm set by default. --- etc/.gitignore | 1 + etc/ttys | 16 ++--- src/games/snake/move.c | 47 ++++++++----- src/games/snake/snake.h | 2 +- src/libcurses/cr_tty.c | 2 + src/libtermlib/termcap/.gitignore | 2 +- src/libtermlib/termcap/Makefile | 9 +-- src/libtermlib/termcap/reorder | 2 +- src/libtermlib/termcap/termcap.small | 100 +++++++++++++++++++++++++++ 9 files changed, 147 insertions(+), 34 deletions(-) create mode 100644 src/libtermlib/termcap/termcap.small diff --git a/etc/.gitignore b/etc/.gitignore index c447476..c602e3a 100644 --- a/etc/.gitignore +++ b/etc/.gitignore @@ -1,3 +1,4 @@ phones remote termcap +termcap.full diff --git a/etc/ttys b/etc/ttys index 80edd05..55106e4 100644 --- a/etc/ttys +++ b/etc/ttys @@ -1,16 +1,16 @@ # # name getty type status comments # -console "/libexec/getty std.default" vt100 on secure #special +console "/libexec/getty std.default" xterm on secure #special # Enable some of these for additional logins. Do NOT enable the same one as the # console port, or strange things will happen. You can turn off the console port # if you would rather use the getty on the real tty - it's up to you. -tty0 "/libexec/getty std.default" vt100 off secure -tty1 "/libexec/getty std.default" vt100 off secure -tty2 "/libexec/getty std.default" vt100 off secure -tty3 "/libexec/getty std.default" vt100 off secure -tty4 "/libexec/getty std.default" vt100 off secure -tty5 "/libexec/getty std.default" vt100 off secure -ttyUSB0 "/libexec/getty std.default" vt100 off secure +tty0 "/libexec/getty std.default" xterm off secure +tty1 "/libexec/getty std.default" xterm off secure +tty2 "/libexec/getty std.default" xterm off secure +tty3 "/libexec/getty std.default" xterm off secure +tty4 "/libexec/getty std.default" xterm off secure +tty5 "/libexec/getty std.default" xterm off secure +ttyUSB0 "/libexec/getty std.default" xterm off secure diff --git a/src/games/snake/move.c b/src/games/snake/move.c index 29a8b74..56f6848 100644 --- a/src/games/snake/move.c +++ b/src/games/snake/move.c @@ -270,7 +270,25 @@ struct point *sp; while(sp->line-- >= LINES)putchar('\n'); return; } - + if (sp->line == cursor.line) { + if (sp->col == cursor.col) + return; + if (sp->col == cursor.col-1) { + bs(); + return; + } + } + if (sp->line == cursor.line+1) { + if (sp->col == cursor.col) { + down(); + return; + } + if (sp->col == cursor.col-1) { + down(); + bs(); + return; + } + } char *cmstr = tgoto(CM, sp->col, sp->line); putpad(cmstr); cursor.line = sp->line; @@ -281,9 +299,9 @@ void pch(c) { outch(c); - if (++cursor.col >= COLUMNS && AM) { - cursor.col = 0; - ++cursor.line; + if (++cursor.col >= COLUMNS) { + cursor.col = -1; + cursor.line = -1; } } @@ -315,7 +333,8 @@ char *s; outch(CTRL('g')); break; default: - if (s[0] < ' ')break; + if (s[0] < ' ') + break; pch(s[0]); } s++; @@ -357,19 +376,10 @@ char ch; p.col = ps->col + 1; p.line = ps->line + 1; - if ( - (p.col >= 0) && - (p.line >= 0) && - ( - ( - (p.line < LINES) && - (p.col < COLUMNS) - ) || - ( - (p.col == COLUMNS) && - (p.line < LINES-1) - ) - )) { + if (p.col < 0 || p.line < 0) + return; + if ((p.line < LINES && p.col < COLUMNS) || + (p.col == COLUMNS && p.line < LINES-1)) { move(&p); pch(ch); } @@ -467,7 +477,6 @@ getcap() lcnt = LINES; ccnt = COLUMNS - 1; - AM = tgetflag("am"); BW = tgetflag("bw"); ND = tgetstr("nd", &ap); diff --git a/src/games/snake/snake.h b/src/games/snake/snake.h index f3fae61..acbc448 100644 --- a/src/games/snake/snake.h +++ b/src/games/snake/snake.h @@ -31,7 +31,7 @@ char *CL, *UP, *DO, *ND, *BS, int LINES, COLUMNS; /* physical screen size. */ int lcnt, ccnt; /* user's idea of screen size */ char xBC, PC; -int AM, BW; +int BW; char tbuf[1024], tcapbuf[128]; int Klength; /* length of KX strings */ int chunk; /* amount of money given at a time */ diff --git a/src/libcurses/cr_tty.c b/src/libcurses/cr_tty.c index 057c8b7..7d5c979 100644 --- a/src/libcurses/cr_tty.c +++ b/src/libcurses/cr_tty.c @@ -109,6 +109,8 @@ zap() SE = UE; } } + if (DO && !NL) + NL = DO; } int diff --git a/src/libtermlib/termcap/.gitignore b/src/libtermlib/termcap/.gitignore index 4809e2a..1d367c5 100644 --- a/src/libtermlib/termcap/.gitignore +++ b/src/libtermlib/termcap/.gitignore @@ -1 +1 @@ -termcap +termcap.full diff --git a/src/libtermlib/termcap/Makefile b/src/libtermlib/termcap/Makefile index 6a3e4f2..cfbf888 100644 --- a/src/libtermlib/termcap/Makefile +++ b/src/libtermlib/termcap/Makefile @@ -11,11 +11,12 @@ # DESTDIR = ../../.. -termcap: reorder termcap.src +termcap.full: reorder termcap.src ex - termcap.src < reorder -install: termcap - install -c -m 444 termcap ${DESTDIR}/etc/termcap +install: termcap.small termcap.full + install -c -m 444 termcap.small ${DESTDIR}/etc/termcap + install -c -m 444 termcap.full ${DESTDIR}/etc/termcap.full tabset: FRC rm -fr ${DESTDIR}/usr/share/tabset @@ -24,6 +25,6 @@ tabset: FRC install -c -m 444 tabset/* ${DESTDIR}/usr/share/tabset clean: - rm -f termcap + rm -f termcap.full FRC: diff --git a/src/libtermlib/termcap/reorder b/src/libtermlib/termcap/reorder index 8964771..da20d3f 100644 --- a/src/libtermlib/termcap/reorder +++ b/src/libtermlib/termcap/reorder @@ -36,5 +36,5 @@ $r termcap.local /|h19-g|/;.,/^[^ ]/-m9 /|5620|/;.,/^[^ ]/-m9 /^s/;.,/^#/-m9 -w! termcap +w! termcap.full q diff --git a/src/libtermlib/termcap/termcap.small b/src/libtermlib/termcap/termcap.small new file mode 100644 index 0000000..e4e3356 --- /dev/null +++ b/src/libtermlib/termcap/termcap.small @@ -0,0 +1,100 @@ +# Copyright (c) 1980, 1985, 1989 The Regents of the University of California. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the University of +# California, Berkeley and its contributors. +# 4. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# @(#)termcap.src 5.88 (Berkeley) 4/30/91 +# $FreeBSD$ +# +cons25|ansi|ansi80x25:\ + :am:bs:NP:ms:pt:AX:eo:bw:ut:km:\ + :co#80:li#25:pa#64:Co#8:it#8:\ + :al=\E[L:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:\ + :dc=\E[P:dl=\E[M:do=\E[B:bt=\E[Z:ho=\E[H:ic=\E[@:cb=\E[1K:\ + :nd=\E[C:rs=\Ec:so=\E[7m:se=\E[27m:up=\E[A:cr=^M:ta=^I:\ + :AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:sc=\E7:rc=\E8:\ + :k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:k7=\E[S:k8=\E[T:\ + :k9=\E[U:k;=\E[V:F1=\E[W:F2=\E[X:K2=\E[E:nw=\E[E:ec=\E[%dX:\ + :kb=^H:kh=\E[H:ku=\E[A:kd=\E[B:kl=\E[D:kr=\E[C:le=^H:sf=\E[S:sr=\E[T:\ + :kN=\E[G:kP=\E[I:@7=\E[F:kI=\E[L:kD=\177:kB=\E[Z:\ + :IC=\E[%d@:DC=\E[%dP:SF=\E[%dS:SR=\E[%dT:AL=\E[%dL:DL=\E[%dM:\ + :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:cv=\E[%i%dd:ch=\E[%i%d`:\ + :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:bl=^G:\ + :ve=\E[=S:vi=\E[=1S:vs=\E[=2S: + +vt100|dec-vt100|vt100-am|vt100am|dec vt100:\ + :do=2\E[B:co#80:li#24:cl=50\E[H\E[J:sf=2*\ED:\ + :le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:\ + :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\ + :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:\ + :is=\E>\E[?1;3;4;5l\E[?7;8h\E[1;24r\E[24;1H:\ + :if=/usr/share/tabset/vt100:nw=2\EE:ho=\E[H:\ + :as=2\E(0:ae=2\E(B:\ + :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||:\ + :rs=\E>\E[?1;3;4;5l\E[?7;8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\ + :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=\177:\ + :k0=\EOy:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:\ + :k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:k;=\EOx:@8=\EOM:\ + :K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:K5=\EOn:pt:sr=2*\EM:xn:\ + :sc=2\E7:rc=2\E8:cs=5\E[%i%d;%dr:UP=2\E[%dA:DO=2\E[%dB:RI=2\E[%dC:\ + :LE=2\E[%dD:ct=2\E[3g:st=2\EH:ta=^I:ms:bl=^G:cr=^M:eo:it#8:\ + :RA=\E[?7l:SA=\E[?7h:po=\E[5i:pf=\E[4i: + +# $XTermId: termcap,v 1.78 2009/11/09 00:24:26 tom Exp $ +# +xterm|linux|modern xterm:\ + :@7=\EOF:@8=\EOM:F1=\E[23~:F2=\E[24~:K2=\EOE:Km=\E[M:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\ + :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kI=\E[2~:\ + :kN=\E[6~:kP=\E[5~:kd=\EOB:kh=\EOH:kl=\EOD:kr=\EOC:ku=\EOA:\ + :tc=xterm-basic: +# +# This chunk is used for building the VT220/Sun/PC keyboard variants. +xterm-basic|modern xterm common:\ + :am:bs:km:mi:ms:ut:xn:AX:\ + :Co#8:co#80:kn#12:li#24:pa#64:\ + :AB=\E[4%dm:AF=\E[3%dm:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\ + :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=\E(B:al=\E[L:\ + :as=\E(0:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\ + :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\E[B:\ + :ei=\E[4l:ho=\E[H:im=\E[4h:is=\E[!p\E[?3;4l\E[4l\E>:\ + :kD=\E[3~:kb=^H:ke=\E[?1l\E>:ks=\E[?1h\E=:le=^H:md=\E[1m:\ + :me=\E[m:ml=\El:mr=\E[7m:mu=\Em:nd=\E[C:op=\E[39;49m:\ + :rc=\E8:rs=\E[!p\E[?3;4l\E[4l\E>:sc=\E7:se=\E[27m:sf=^J:\ + :so=\E[7m:sr=\EM:st=\EH:\ + :ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h: +# +# This should work for the commonly used "color xterm" variations (XFree86 +# xterm, color_xterm, nxterm, rxvt). Note that it does not set 'bce', so for +# XFree86 and rxvt, some applications that use colors will be less efficient, +# and in a few special cases (with "smart" optimization) the wrong color will +# be painted in spots. +xterm-color|generic "ANSI" color xterm:\ + :Co#8:NC@:pa#64:\ + :AB=\E[4%dm:AF=\E[3%dm:ac=:op=\E[m:tc=xterm-r6: From e557c88b1ee7aa0b84e62c108d53ff5bea5250c2 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Wed, 17 Sep 2014 13:00:06 -0700 Subject: [PATCH 16/16] Added manual for atc game. Cribbage manuals installed. --- rootfs.manifest | 3 + src/games/atc/Makefile | 10 +- src/games/atc/atc.6 | 597 ++++++++++++++++++++++++++++++++++++ src/games/cribbage/Makefile | 18 +- 4 files changed, 620 insertions(+), 8 deletions(-) create mode 100644 src/games/atc/atc.6 diff --git a/rootfs.manifest b/rootfs.manifest index 3568b09..d4b2244 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -766,11 +766,14 @@ file /share/man/cat5/crontab.0 file /share/man/cat5/ranlib.0 file /share/man/cat6/adventure.0 file /share/man/cat6/arithmetic.0 +file /share/man/cat6/atc.0 file /share/man/cat6/backgammon.0 file /share/man/cat6/banner.0 file /share/man/cat6/battlestar.0 file /share/man/cat6/bcd.0 file /share/man/cat6/canfield.0 +file /share/man/cat6/crib.0 +file /share/man/cat6/cribbage.0 file /share/man/cat6/fish.0 file /share/man/cat6/fortune.0 file /share/man/cat6/hangman.0 diff --git a/src/games/atc/Makefile b/src/games/atc/Makefile index 9c0ca6c..90735f0 100644 --- a/src/games/atc/Makefile +++ b/src/games/atc/Makefile @@ -17,8 +17,10 @@ LEX = lex LIBS = -lm -lcurses -ltermcap -lc OBJS = extern.o grammar.o input.o lex.o list.o log.o main.o tunable.o \ graphics.o update.o +MAN = atc.0 +MANSRC = atc.6 -all: atc +all: atc $(MAN) atc: $(OBJS) $(CC) $(LDFLAGS) -o atc.elf $(OBJS) $(LIBS) @@ -26,10 +28,14 @@ atc: $(OBJS) $(SIZE) atc.elf $(ELF2AOUT) atc.elf $@ && rm atc.elf +${MAN}: ${MANSRC} + ${MANROFF} $< > $@ + clean: - rm -f *.o *.0 *.elf atc *.elf *.dis tags *~ grammar.c lex.c y.tab.h + rm -f *.o *.0 *.elf atc ${MAN} *.elf *.dis tags *~ grammar.c lex.c y.tab.h install: all install atc $(DESTDIR)/games/ mkdir -p ${DESTDIR}/games/lib/atc cp -p games/* ${DESTDIR}/games/lib/atc + cp ${MAN} $(DESTDIR)/share/man/cat6/ diff --git a/src/games/atc/atc.6 b/src/games/atc/atc.6 new file mode 100644 index 0000000..f43a52b --- /dev/null +++ b/src/games/atc/atc.6 @@ -0,0 +1,597 @@ +.\" Copyright (c) 1990, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Ed James. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)atc.6 8.1 (Berkeley) 5/31/93 +.\" +. \" XP - exdented paragraph +.de XP +.RT +.if \\n(1T .sp \\n(PDu +.ne 1.1 +.if !\\n(IP .nr IP +1 +.in +\\n(I\\n(IRu +.ti -\\n(I\\n(IRu +.. +.\" Copyright (c) 1986 Ed James. All rights reserved. +.\" +.TH ATC 6 "May 31, 1993" +.UC +.SH NAME +atc \- air traffic controller game +.SH SYNOPSIS +.B atc +-[u?lstp] [-[gf] game_name] [-r random seed] +.SH DESCRIPTION +.LP +.I Atc +lets you try your hand at the nerve wracking duties of the air traffic +controller without endangering the lives of millions of +travelers each year. +Your responsibilities require you to direct the flight of jets +and prop planes into and out of the flight arena and airports. +The speed (update time) and frequency of the planes depend on the +difficulty of the chosen arena. +.SH OPTIONS +.LP +.TP 8 +.B \-u +Print the usage line and exit. +.TP +.B \-? +Same as +.B \-u. +.TP +.B \-l +Print a list of available games and exit. +The first game name printed is the default game. +.TP +.B \-s +Print the score list (formerly the Top Ten list). +.TP +.B \-t +Same as +.B \-s. +.TP +.B \-p +Print the path to the special directory where +.I atc +expects to find its private files. This is used during the +installation of the program. +.TP +.B "\-g game" +Play the named game. If the game listed is not one of the +ones printed from the +.B \-l +option, the default game is played. +.TP +.B "\-f game" +Same as +.B \-g. +.TP +.B "\-r seed" +Set the random seed. The purpose of this flag is questionable. +.SH GOALS +.LP +Your goal in +.I atc +is to keep the game going as long as possible. +There is no winning state, except to beat the times of other players. +You will need to: launch planes at airports (by instructing them to +increase their altitude); land planes at airports (by instructing them to +go to altitude zero when exactly over the airport); and maneuver planes +out of exit points. +.LP +Several things will cause the end of the game. +Each plane has a destination (see information area), and +sending a plane to the wrong destination is an error. +Planes can run out of fuel, or can collide. Collision is defined as +adjacency in any of the three dimensions. A plane leaving the arena +in any other way than through its destination exit is an error as well. +.LP +Scores are sorted in order of the number of planes safe. The other +statistics are provided merely for fun. There is no penalty for +taking longer than another player (except in the case of ties). +.LP +Suspending a game is not permitted. If you get a talk message, tough. +When was the last time an Air Traffic Controller got called away to +the phone? +.SH "THE DISPLAY" +.LP +Depending on the terminal you run +.I atc +on, the screen will be divided into 4 areas. +It should be stressed that the terminal driver portion of the +game was designed to be reconfigurable, so the display format can vary +depending the version you are playing. The descriptions here are based +on the ascii version +of the game. The game rules and input format, however, +should remain consistent. +Control-L redraws the screen, should it become muddled. +.SS RADAR +.IP +The first screen area is the radar display, showing the relative locations +of the planes, airports, standard entry/exit points, radar +beacons, and "lines" which simply serve to aid you in guiding +the planes. +.IP +Planes are shown as a single letter with an altitude. If +the numerical altitude is a single digit, then it represents +thousands of feet. +Some distinction is made between the prop +planes and the jets. On ascii terminals, prop planes are +represented by a upper case letter, jets by a lower case letter. +.IP +Airports are shown as a number and some indication of the direction +planes must be going to land at the airport. +On ascii terminals, this is one of '^', '>', '<', and 'v', to indicate +north (0 degrees), east (90), west (270) and south (180), respectively. +The planes will also +take off in this direction. +.IP +Beacons are represented as circles or asterisks and a number. +Their purpose is to offer a place of easy reference to the plane pilots. +See 'the delay command' under the input section of this manual. +.IP +Entry/exit points are displayed as numbers along the border of the +radar screen. Planes will enter the arena from these points without +warning. These points have a direction associated with them, and +planes will always enter the arena from this direction. On the +ascii version of +.I atc, +this direction is not displayed. It will become apparent +what this direction is as the game progresses. +.IP +Incoming planes will always enter at the same altitude: 7000 feet. +For a plane to successfully depart through an entry/exit point, +it must be flying at 9000 feet. +It is not necessary for the planes to be flying in any particular +direction when they leave the arena (yet). +.SS "INFORMATION AREA" +.IP +The second area of the display is the information area, which lists +the time (number of updates since start), and the number of planes you +have directed safely out of the arena. +Below this is a list of planes currently in the air, followed by a +blank line, and then a list of planes on the ground (at airports). +Each line lists the plane name and its current altitude, +an optional asterisk indicating low fuel, the plane's destination, +and the plane's current command. Changing altitude is not considered +to be a command and is therefore not displayed. The following are +some possible information lines: +.IP + B4*A0: Circle @ b1 +.br + g7 E4: 225 +.IP +The first example shows a prop plane named 'B' that is flying at 4000 +feet. It is low on fuel (note the '*'). It's destination is +Airport #0. +The next command it expects +to do is circle when it reaches Beacon #1. +The second example shows a jet named 'g' at 7000 feet, destined for +Exit #4. It is just now executing a turn to 225 degrees (South-West). +.SS "INPUT AREA" +.IP +The third area of the display is the input area. It is here that +your input is reflected. See the INPUT heading of this manual +for more details. +.SS "AUTHOR AREA" +.IP +This area is used simply to give credit where credit is due. :-) +.SH INPUT +.LP +A command completion interface is built into +the game. At any time, typing '?' will list possible input characters. +Typing a backspace (your erase character) backs up, erasing the last part +of the command. When a command is complete, a return enters it, and +any semantic checking is done at that time. If no errors are detected, +the command is sent to the appropriate plane. If an error is discovered +during the check, the offending statement will be underscored and a +(hopefully) descriptive message will be printed under it. +.LP +The command syntax is broken into two parts: +.I "Immediate Only" +and +.I Delayable +commands. +.I "Immediate Only" +commands happen on the next +update. +.I Delayable +commands also happen on the next update unless they +are followed by an optional predicate called the +.I Delay +command. +.LP +In the following tables, the syntax +.B [0\-9] +means any single digit, and +.B

    +refers to the keys around the 's' key, namely ``wedcxzaq''. +In absolute references, 'q' refers to North-West or 315 degrees, and 'w' +refers to North, or 0 degrees. +In relative references, 'q' refers to -45 degrees or 45 degrees left, and 'w' +refers to 0 degrees, or no change in direction. +.LP +All commands start with a plane letter. This indicates the recipient +of the command. Case is ignored. +.SS "IMMEDIATE ONLY COMMANDS" +.RS +.B "\- a Altitude:" +.RS +Affect a plane's altitude (and take off). +.RE +.RS +.B "\- [0\-9] Number:" +.RS +Go to the given altitude (thousands of feet). +.RE +.B "\- c/+ Climb:" +.RS +Relative altitude change. +.RE +.RS +.B "\- [0\-9] Number:" +.RS +Difference in thousands of feet. +.RE +.RE +.B "\- d/\- Descend:" +.RS +Relative altitude change. +.RE +.RS +.B "\- [0\-9] Number:" +.RS +Difference in thousands of feet. +.RE +.RE +.RE +.B "\- m Mark:" +.RS +Display in highlighted mode. Command is displayed normally. +.RE +.B "\- i Ignore:" +.RS +Do not display highlighted. Command is displayed as a +line of dashes if there is no command. +.RE +.B "\- u Unmark:" +.RS +Same as ignore, but if a delayed command is processed, +the plane will become marked. This is useful if you want +to forget about a plane during part, but not all, of its +journey. +.RE +.RE +.SS "DELAYABLE COMMANDS" +.RS +.B "\- c Circle:" +.RS +Have the plane circle (clockwise by default). +.RE +.RS +.B "\- l Left:" +.RS +Circle counterclockwise. +.RE +.B "\- r Right:" +.RS +Circle clockwise. +.RE +.RE +.B "\- t Turn:" +.RS +Change direction. +.RE +.RS +.B "\- l Left:" +.RS +Turn counterclockwise (45 degrees by default). +.RE +.RS +.B "\- Direction:" +.RS +Turn ccw the given number of degrees. +Zero degrees is no turn. A ccw turn +of -45 degrees is 45 cw. +.RE +.RE +.B "\- r Right:" +.RS +Turn clockwise (45 degrees by default). +.RE +.RS +.B "\- Direction:" +.RS +Same as turn left . +.RE +.RE +.B "\- L Left 90:" +.RS +Turn counterclockwise 90 degrees. +.RE +.B "\- R Right 90:" +.RS +Turn clockwise 90 degrees. +.RE +.B "\- Direction:" +.RS +Turn to the absolute compass heading given. +The shortest turn will be taken. +.RE +.B "\- t Towards:" +.RS +Turn towards a beacon, airport or exit. The turn is +just an estimate. +.RE +.RS +.B "\- b/* Beacon:" +.RS +Turn towards the beacon. +.RE +.RS +.B "\- [0-9] Number:" +.RS +The beacon number. +.RE +.RE +.B "\- e Exit:" +.RS +Turn towards the exit. +.RE +.RS +.B "\- [0-9] Number:" +.RS +The exit number. +.RE +.RE +.B "\- a Airport:" +.RS +Turn towards the airport. +.RE +.RS +.B "\- [0-9] Number:" +.RS +The airport number. +.RE +.RE +.RE +.RE +.RE +.SS THE DELAY COMMAND +.LP +The +.B Delay +(a/@) +command may be appended to any +.B Delayable +command. It allows the controller to instruct a plane to do an action +when the plane reaches a particular beacon (or other objects in future +versions). +.sp +.RS +.B "\- a/@ At:" +.RS +Do the given delayable command when the plane reaches the given beacon. +.RE +.RS +.B "\- b/* Beacon:" +.RS +This is redundant to allow for expansion. +.RE +.RS +.B "\- [0-9] Number:" +.RS +The beacon number. +.RE +.RE +.RE +.RE +.SS "MARKING, UNMARKING AND IGNORING" +.LP +Planes are +.B marked +when they enter the arena. This means they are displayed in highlighted +mode on the radar display. A plane may also be either +.B unmarked +or +.B ignored. +An +.B unmarked +plane is drawn in unhighlighted mode, and a line of dashes is displayed in +the command field of the information area. The plane will remain this +way until a mark command has been issued. Any other command will be issued, +but the command line will return to a line of dashes when the command +is completed. +.LP +An +.B ignored +plane is treated the same as an unmarked plane, except that it will +automatically switch to +.B marked +status when a delayed command has been processed. This is useful if +you want to forget about a plane for a while, but its flight path has +not yet been completely set. +.LP +As with all of the commands, marking, unmarking and ignoring will take effect +at the beginning of the next update. Do not be surprised if the plane does +not immediately switch to unhighlighted mode. +.SS EXAMPLES +.RS +.TP 16 +atlab1 +a: turn left at beacon #1 +.TP 16 +cc +C: circle +.TP 16 +gtte4ab2 +g: turn towards exit #4 at beacon #2 +.TP 16 +ma+2 +m: altitude: climb 2000 feet +.TP 16 +stq +S: turn to 315 +.TP 16 +xi +x: ignore +.RE +.SH "OTHER INFORMATION" +.LP +Jets move every update; prop planes move every other update. +.LP +All planes turn a most 90 degrees per movement. +.LP +Planes enter at 7000 feet and leave at 9000 feet. +.LP +Planes flying at an altitude of 0 crash if they are not over an airport. +.LP +Planes waiting at airports can only be told to take off (climb in altitude). +.SH "NEW GAMES" +.LP +The +.B Game_List +file lists the currently available play fields. New field description +file names must be placed in this file to be 'playable'. If a player +specifies a game not in this file, his score will not be logged. +.LP +The game field description files are broken into two parts. The first +part is the definition section. Here, the four tunable game parameters +must be set. These variables are set with the syntax: +.IP +variable = number; +.LP +Variable may be one of: +.B update, +indicating the number of seconds between forced updates; +.B newplane, +indicating (about) the number of updates between new plane entries; +.B width, +indicating the width of the play field; and +.B height, +indicating the height of the play field. +.LP +The second part of the field description files describes the locations +of the exits, the beacons, the airports and the lines. +The syntax is as follows: +.IP +beacon: (x y) ... ; +.br +airport: (x y direction) ... ; +.br +exit: (x y direction) ... ; +.br +line: [ (x1 y1) (x2 y2) ] ... ; +.LP +For beacons, a simple x, y coordinate pair is used (enclosed in parenthesis). +Airports and exits require a third value, a direction, which is one +of +.B wedcxzaq. +For airports, this is the direction that planes must be going to take +off and land, and for exits, this is the direction that planes will going +when they +.B enter +the arena. This may not seem intuitive, but as there is no restriction on +direction of exit, this is appropriate. +Lines are slightly different, since they need two coordinate pairs to +specify the line endpoints. These endpoints must be enclosed in +square brackets. +.LP +All statements are semi-colon (;) terminated. Multiple item statements +accumulate. Each definition must occur exactly once, before any +item statements. Comments begin with a hash (#) symbol +and terminate with a newline. +The coordinates are between zero and width-1 and height-1 +inclusive. All of the exit coordinates must lie on the borders, and +all of the beacons and airports must lie inside of the borders. +Line endpoints may be anywhere within the field, so long as +the lines are horizontal, vertical or +.B "exactly diagonal." +.SS "FIELD FILE EXAMPLE" +.RS +.sp +.nf +.TA 1i 1i +.ta 1i 1i +# This is the default game. + +update = 5; +newplane = 5; +width = 30; +height = 21; + +exit: ( 12 0 x ) ( 29 0 z ) ( 29 7 a ) ( 29 17 a ) + ( 9 20 e ) ( 0 13 d ) ( 0 7 d ) ( 0 0 c ) ; + +beacon: ( 12 7 ) ( 12 17 ) ; + +airport: ( 20 15 w ) ( 20 18 d ) ; + +line: [ ( 1 1 ) ( 6 6 ) ] + [ ( 12 1 ) ( 12 6 ) ] + [ ( 13 7 ) ( 28 7 ) ] + [ ( 28 1 ) ( 13 16 ) ] + [ ( 1 13 ) ( 11 13 ) ] + [ ( 12 8 ) ( 12 16 ) ] + [ ( 11 18 ) ( 10 19 ) ] + [ ( 13 17 ) ( 28 17 ) ] + [ ( 1 7 ) ( 11 7 ) ] ; +.fi +.RE +.SH FILES +.LP +Files are kept in a special directory. See the OPTIONS for a way to +print this path out. +.TP 16 +.B ATC_score +Where the scores are kept. +.TP 16 +.B Game_List +The list of playable games. +.SH AUTHOR +.LP +Ed James, UC Berkeley: edjames@ucbvax.berkeley.edu, ucbvax!edjames +.LP +This game is based on someone's description of the overall flavor +of a game written for some unknown PC many years ago, maybe. +.SH BUGS +.LP +The screen sometimes refreshes after you have quit. +.LP +Yet Another Curses Bug was discovered during the development of this game. +If your curses library clrtobot.o is version 5.1 or earlier, +you will have erase problems with the backspace operator in the input +window. diff --git a/src/games/cribbage/Makefile b/src/games/cribbage/Makefile index 376a32e..c12729b 100644 --- a/src/games/cribbage/Makefile +++ b/src/games/cribbage/Makefile @@ -14,10 +14,11 @@ include $(TOPSRC)/target.mk OBJS = extern.o crib.o support.o cards.o score.o io.o TOBJS = test.o cards.o score.o io.o extern.o -MAN = crib.0 +MAN = cribbage.0 +MANSRC = cribbage.6 LIBS = -lcurses -ltermcap -lc -all: cribbage ${MAN} +all: cribbage ${MAN} crib.0 cribbage: ${OBJS} $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS) @@ -25,12 +26,17 @@ cribbage: ${OBJS} $(SIZE) $@.elf $(ELF2AOUT) $@.elf $@ && rm $@.elf -${MAN}: cribbage.n macro +crib.0: cribbage.n macro nroff cribbage.n > $@ -clean: - rm -f *.o core cribbage ${MAN} +${MAN}: ${MANSRC} + ${MANROFF} $< > $@ -install: +clean: + rm -f *.o core cribbage ${MAN} *.dis + +install: all install cribbage $(DESTDIR)/games/ install -m 644 crib.0 $(DESTDIR)/games/lib/crib.instr + cp ${MAN} $(DESTDIR)/share/man/cat6/ + cp crib.0 $(DESTDIR)/share/man/cat6/

te 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