diff --git a/v7/TODO#b00000 b/v7/TODO#b00000 new file mode 100644 index 0000000..8dd8cd5 --- /dev/null +++ b/v7/TODO#b00000 @@ -0,0 +1,3 @@ +games/backgammon does not work yet +games/quiz does not work yet + diff --git a/v7/cmd/Makefile#b00000 b/v7/cmd/Makefile#b00000 new file mode 100644 index 0000000..f10bbed --- /dev/null +++ b/v7/cmd/Makefile#b00000 @@ -0,0 +1,31 @@ +all: cal dd file find od rev units + +cal: cal.c + occ -I /usr/include -o cal cal.c + +dd: dd.c + occ -I /usr/include -o dd dd.c + +file: file.c + occ -I /usr/include -o file file.c + +find: find.c + occ -I /usr/include -o find find.c + +od: od.c + occ -I /usr/include -o od od.c + +rev: rev.c + occ -I /usr/include -o rev rev.c + +units: units.c + occ -I /usr/include -o units units.c + +clean: + cp -p rm -f *.a *.o *.root cal dd file find od rev units + +install: all + cp units.database /usr/local/lib + cp cal dd file find od rev units /usr/local/bin + cp *.1 /usr/local/man/man1 + diff --git a/v7/cmd/cal.1#000000 b/v7/cmd/cal.1#000000 new file mode 100644 index 0000000..2c369c8 --- /dev/null +++ b/v7/cmd/cal.1#000000 @@ -0,0 +1,27 @@ +.TH CAL 1 +.SH NAME +cal \- print calendar +.SH SYNOPSIS +.B cal +[ month ] year +.SH DESCRIPTION +.I Cal +prints a calendar for the specified year. +If a month is also specified, a calendar +just for that month is printed. +.I Year +can be between 1 +and 9999. +The +.I month +is a number between 1 and 12. +The calendar +produced is that for England and her colonies. +.PP +Try September 1752. +.SH BUGS +The year is always considered to start in January even though this +is historically naive. +.br +Beware that `cal 78' refers to the early Christian era, +not the 20th century. diff --git a/v7/cmd/cal.c#b00008 b/v7/cmd/cal.c#b00008 new file mode 100644 index 0000000..b393f82 --- /dev/null +++ b/v7/cmd/cal.c#b00008 @@ -0,0 +1,204 @@ +char dayw[] = { + " S M Tu W Th F S" +}; +char *smon[]= { + "January", "February", "March", "April", + "May", "June", "July", "August", + "September", "October", "November", "December", +}; +char string[432]; +main(argc, argv) +char *argv[]; +{ + register y, i, j; + int m; + + if(argc < 2) { + printf("usage: cal [month] year\n"); + exit(0); + } + if(argc == 2) + goto xlong; + +/* + * print out just month + */ + + m = number(argv[1]); + if(m<1 || m>12) + goto badarg; + y = number(argv[2]); + if(y<1 || y>9999) + goto badarg; + printf(" %s %u\n", smon[m-1], y); + printf("%s\n", dayw); + cal(m, y, string, 24); + for(i=0; i<6*24; i+=24) + pstr(string+i, 24); + exit(0); + +/* + * print out complete year + */ + +xlong: + y = number(argv[1]); + if(y<1 || y>9999) + goto badarg; + printf("\n\n\n"); + printf(" %u\n", y); + printf("\n"); + for(i=0; i<12; i+=3) { + for(j=0; j<6*72; j++) + string[j] = '\0'; + printf(" %.3s", smon[i]); + printf(" %.3s", smon[i+1]); + printf(" %.3s\n", smon[i+2]); + printf("%s %s %s\n", dayw, dayw, dayw); + cal(i+1, y, string, 72); + cal(i+2, y, string+23, 72); + cal(i+3, y, string+46, 72); + for(j=0; j<6*72; j+=72) + pstr(string+j, 72); + } + printf("\n\n\n"); + exit(0); + +badarg: + printf("Bad argument\n"); +} + +number(str) +char *str; +{ + register n, c; + register char *s; + + n = 0; + s = str; + while(c = *s++) { + if(c<'0' || c>'9') + return(0); + n = n*10 + c-'0'; + } + return(n); +} + +pstr(str, n) +char *str; +{ + register i; + register char *s; + + s = str; + i = n; + while(i--) + if(*s++ == '\0') + s[-1] = ' '; + i = n+1; + while(i--) + if(*--s != ' ') + break; + s[1] = '\0'; + printf("%s\n", str); +} + +char mon[] = { + 0, + 31, 29, 31, 30, + 31, 30, 31, 31, + 30, 31, 30, 31, +}; + +cal(m, y, p, w) +char *p; +{ + register d, i; + register char *s; + + s = p; + d = jan1(y); + mon[2] = 29; + mon[9] = 30; + + switch((jan1(y+1)+7-d)%7) { + + /* + * non-leap year + */ + case 1: + mon[2] = 28; + break; + + /* + * 1752 + */ + default: + mon[9] = 19; + break; + + /* + * leap year + */ + case 2: + ; + } + for(i=1; i 9) + *s = i/10+'0'; + s++; + *s++ = i%10+'0'; + s++; + if(++d == 7) { + d = 0; + s = p+w; + p = s; + } + } +} + +/* + * return day of the week + * of jan 1 of given year + */ + +jan1(yr) +{ + register y, d; + +/* + * normal gregorian calendar + * one extra day per four years + */ + + y = yr; + d = 4+y+(y+3)/4; + +/* + * julian calendar + * regular gregorian + * less three days per 400 + */ + + if(y > 1800) { + d -= (y-1701)/100; + d += (y-1601)/400; + } + +/* + * great calendar changeover instant + */ + + if(y > 1752) + d += 3; + + return(d%7); +} diff --git a/v7/cmd/dd.1#000000 b/v7/cmd/dd.1#000000 new file mode 100644 index 0000000..a40066c --- /dev/null +++ b/v7/cmd/dd.1#000000 @@ -0,0 +1,192 @@ +.TH DD 1 +.SH NAME +dd \- convert and copy a file +.SH SYNOPSIS +.B dd +[option=value] ... +.SH DESCRIPTION +.I Dd +copies the specified input file +to the specified output with +possible conversions. +The standard input and output are used by default. +The input and output block size may be +specified to take advantage of raw physical I/O. +.PP +.br +.ns +.TP 15 +.I option +.I values +.br +.ns +.TP +if= +input file name; standard input is default +.br +.ns +.TP +of= +output file name; standard output is default +.br +.ns +.TP +.RI ibs= n +input block size +.I n +bytes (default 512) +.br +.ns +.TP +.RI obs= n +output block size (default 512) +.br +.ns +.TP +.RI bs= n +set both input and output block size, +superseding +.I ibs +and +.I obs; +also, if no conversion is specified, +it is particularly efficient since no copy need be done +.br +.ns +.TP +.RI cbs= n +conversion buffer size +.br +.ns +.TP +.RI skip= n +skip +.IR n "" +input records before starting copy +.br +.ns +.TP +.RI files= n +copy +.I n +files from (tape) input +.br +.ns +.TP +.RI seek= n +seek +.I n +records from beginning of output file before copying +.br +.ns +.TP +count=\fIn\fR +copy only +.IR n "" +input records +.br +.ns +.TP +conv=ascii +.ds h \h'\w'conv='u' +convert EBCDIC to ASCII +.br +.ns +.IP \*hebcdic +convert ASCII to EBCDIC +.br +.ns +.IP \*hibm +slightly different map of ASCII to EBCDIC +.br +.ns +.IP \*hlcase +map alphabetics to lower case +.br +.ns +.IP \*hucase +map alphabetics to upper case +.br +.ns +.IP \*hswab +swap every pair of bytes +.br +.ns +.IP \*hnoerror +do not stop processing on an error +.br +.ns +.IP \*hsync +pad every input record to +.I ibs +.br +.ns +.IP "\*h... , ..." +several comma-separated conversions +.PP +.fi +Where sizes are specified, +a number of bytes is expected. +A number may end with +.B "k, b" +or +.B w +to specify multiplication by +1024, 512, or 2 respectively; +a pair of numbers may be separated by +.B x +to indicate a product. +.PP +.I Cbs +is used only if +.I ascii +or +.I ebcdic +conversion is specified. +In the former case +.I cbs +characters are placed into the conversion buffer, converted to +ASCII, and trailing blanks trimmed and new-line added +before sending the line to the output. +In the latter case ASCII characters are read into the +conversion buffer, converted to EBCDIC, and blanks added +to make up an +output record of size +.IR cbs . +.PP +After completion, +.I dd +reports the number of whole and partial input and output +blocks. +.PP +For example, to read an EBCDIC tape blocked ten 80-byte +EBCDIC card images per record into the ASCII file +.IR x : +.IP "" +dd if=/dev/rmt0 of=x ibs=800 cbs=80 conv=ascii,lcase +.PP +Note the use of raw magtape. +.I Dd +is especially suited to I/O on the raw +physical devices because it allows reading +and writing in arbitrary record sizes. +.PP +To skip over a file before copying from magnetic tape do +.IP"" +(dd of=/dev/null; dd of=x) +#include +#include +#include + +#define BIG 32767 +#define LCASE 01 +#define UCASE 02 +#define SWAB 04 +#define NERR 010 +#define SYNC 020 +int cflag; +int fflag; +int skip; +int seekn; +int count; +int files = 1; +char *string; +char *ifile; +char *ofile; +char *ibuf; +char *obuf; +int ibs = 512; +int obs = 512; +int bs; +int cbs; +int ibc; +int obc; +int cbc; +int nifr; +int nipr; +int nofr; +int nopr; +int ntrunc; +int ibf; +int obf; +char *op; +int nspace; +char etoa[] = { + 0000,0001,0002,0003,0234,0011,0206,0177, + 0227,0215,0216,0013,0014,0015,0016,0017, + 0020,0021,0022,0023,0235,0205,0010,0207, + 0030,0031,0222,0217,0034,0035,0036,0037, + 0200,0201,0202,0203,0204,0012,0027,0033, + 0210,0211,0212,0213,0214,0005,0006,0007, + 0220,0221,0026,0223,0224,0225,0226,0004, + 0230,0231,0232,0233,0024,0025,0236,0032, + 0040,0240,0241,0242,0243,0244,0245,0246, + 0247,0250,0133,0056,0074,0050,0053,0041, + 0046,0251,0252,0253,0254,0255,0256,0257, + 0260,0261,0135,0044,0052,0051,0073,0136, + 0055,0057,0262,0263,0264,0265,0266,0267, + 0270,0271,0174,0054,0045,0137,0076,0077, + 0272,0273,0274,0275,0276,0277,0300,0301, + 0302,0140,0072,0043,0100,0047,0075,0042, + 0303,0141,0142,0143,0144,0145,0146,0147, + 0150,0151,0304,0305,0306,0307,0310,0311, + 0312,0152,0153,0154,0155,0156,0157,0160, + 0161,0162,0313,0314,0315,0316,0317,0320, + 0321,0176,0163,0164,0165,0166,0167,0170, + 0171,0172,0322,0323,0324,0325,0326,0327, + 0330,0331,0332,0333,0334,0335,0336,0337, + 0340,0341,0342,0343,0344,0345,0346,0347, + 0173,0101,0102,0103,0104,0105,0106,0107, + 0110,0111,0350,0351,0352,0353,0354,0355, + 0175,0112,0113,0114,0115,0116,0117,0120, + 0121,0122,0356,0357,0360,0361,0362,0363, + 0134,0237,0123,0124,0125,0126,0127,0130, + 0131,0132,0364,0365,0366,0367,0370,0371, + 0060,0061,0062,0063,0064,0065,0066,0067, + 0070,0071,0372,0373,0374,0375,0376,0377, +}; +char atoe[] = { + 0000,0001,0002,0003,0067,0055,0056,0057, + 0026,0005,0045,0013,0014,0015,0016,0017, + 0020,0021,0022,0023,0074,0075,0062,0046, + 0030,0031,0077,0047,0034,0035,0036,0037, + 0100,0117,0177,0173,0133,0154,0120,0175, + 0115,0135,0134,0116,0153,0140,0113,0141, + 0360,0361,0362,0363,0364,0365,0366,0367, + 0370,0371,0172,0136,0114,0176,0156,0157, + 0174,0301,0302,0303,0304,0305,0306,0307, + 0310,0311,0321,0322,0323,0324,0325,0326, + 0327,0330,0331,0342,0343,0344,0345,0346, + 0347,0350,0351,0112,0340,0132,0137,0155, + 0171,0201,0202,0203,0204,0205,0206,0207, + 0210,0211,0221,0222,0223,0224,0225,0226, + 0227,0230,0231,0242,0243,0244,0245,0246, + 0247,0250,0251,0300,0152,0320,0241,0007, + 0040,0041,0042,0043,0044,0025,0006,0027, + 0050,0051,0052,0053,0054,0011,0012,0033, + 0060,0061,0032,0063,0064,0065,0066,0010, + 0070,0071,0072,0073,0004,0024,0076,0341, + 0101,0102,0103,0104,0105,0106,0107,0110, + 0111,0121,0122,0123,0124,0125,0126,0127, + 0130,0131,0142,0143,0144,0145,0146,0147, + 0150,0151,0160,0161,0162,0163,0164,0165, + 0166,0167,0170,0200,0212,0213,0214,0215, + 0216,0217,0220,0232,0233,0234,0235,0236, + 0237,0240,0252,0253,0254,0255,0256,0257, + 0260,0261,0262,0263,0264,0265,0266,0267, + 0270,0271,0272,0273,0274,0275,0276,0277, + 0312,0313,0314,0315,0316,0317,0332,0333, + 0334,0335,0336,0337,0352,0353,0354,0355, + 0356,0357,0372,0373,0374,0375,0376,0377, +}; +char atoibm[] = +{ + 0000,0001,0002,0003,0067,0055,0056,0057, + 0026,0005,0045,0013,0014,0015,0016,0017, + 0020,0021,0022,0023,0074,0075,0062,0046, + 0030,0031,0077,0047,0034,0035,0036,0037, + 0100,0132,0177,0173,0133,0154,0120,0175, + 0115,0135,0134,0116,0153,0140,0113,0141, + 0360,0361,0362,0363,0364,0365,0366,0367, + 0370,0371,0172,0136,0114,0176,0156,0157, + 0174,0301,0302,0303,0304,0305,0306,0307, + 0310,0311,0321,0322,0323,0324,0325,0326, + 0327,0330,0331,0342,0343,0344,0345,0346, + 0347,0350,0351,0255,0340,0275,0137,0155, + 0171,0201,0202,0203,0204,0205,0206,0207, + 0210,0211,0221,0222,0223,0224,0225,0226, + 0227,0230,0231,0242,0243,0244,0245,0246, + 0247,0250,0251,0300,0117,0320,0241,0007, + 0040,0041,0042,0043,0044,0025,0006,0027, + 0050,0051,0052,0053,0054,0011,0012,0033, + 0060,0061,0032,0063,0064,0065,0066,0010, + 0070,0071,0072,0073,0004,0024,0076,0341, + 0101,0102,0103,0104,0105,0106,0107,0110, + 0111,0121,0122,0123,0124,0125,0126,0127, + 0130,0131,0142,0143,0144,0145,0146,0147, + 0150,0151,0160,0161,0162,0163,0164,0165, + 0166,0167,0170,0200,0212,0213,0214,0215, + 0216,0217,0220,0232,0233,0234,0235,0236, + 0237,0240,0252,0253,0254,0255,0256,0257, + 0260,0261,0262,0263,0264,0265,0266,0267, + 0270,0271,0272,0273,0274,0275,0276,0277, + 0312,0313,0314,0315,0316,0317,0332,0333, + 0334,0335,0336,0337,0352,0353,0354,0355, + 0356,0357,0372,0373,0374,0375,0376,0377, +}; + + +main(argc, argv) +int argc; +char **argv; +{ + int (*conv)(); + register char *ip; + register c; + int ebcdic(), ibm(), ascii(), null(), cnull(), term(); + int a; + + conv = null; + for(c=1; cibuf;) + *--ip = 0; + ibc = read(ibf, ibuf, ibs); + } + if(ibc == -1) { + perror("read"); + if((cflag&NERR) == 0) { + flsh(); + term(); + } + ibc = 0; + for(c=0; c>1) & ~1; + if(cflag&SWAB && c) + do { + a = *ip++; + ip[-1] = *ip; + *ip++ = a; + } while(--c); + ip = ibuf; + if (fflag) { + obc = ibc; + flsh(); + ibc = 0; + } + goto loop; + } + c = 0; + c |= *ip++; + c &= 0377; + (*conv)(c); + goto loop; +} + +flsh() +{ + register c; + + if(obc) { + if(obc == obs) + nofr++; else + nopr++; + c = write(obf, obuf, obc); + if(c != obc) { + perror("write"); + term(); + } + obc = 0; + } +} + +match(s) +char *s; +{ + register char *cs; + + cs = string; + while(*cs++ == *s) + if(*s++ == '\0') + goto true; + if(*s != '\0') + return(0); + +true: + cs--; + string = cs; + return(1); +} + +number(big) +{ + register char *cs; + long n; + + cs = string; + n = 0; + while(*cs >= '0' && *cs <= '9') + n = n*10 + *cs++ - '0'; + for(;;) + switch(*cs++) { + + case 'k': + n *= 1024; + continue; + + case 'w': + n *= sizeof(int); + continue; + + case 'b': + n *= 512; + continue; + + case '*': + case 'x': + string = cs; + n *= number(BIG); + + case '\0': + if (n>=big || n<0) { + fprintf(stderr, "dd: argument %D out of range\n", n); + exit(1); + } + return(n); + } + /* never gets here */ +} + +cnull(cc) +{ + register c; + + c = cc; + if(cflag&UCASE && c>='a' && c<='z') + c += 'A'-'a'; + if(cflag&LCASE && c>='A' && c<='Z') + c += 'a'-'A'; + null(c); +} + +null(c) +{ + + *op = c; + op++; + if(++obc >= obs) { + flsh(); + op = obuf; + } +} + +ascii(cc) +{ + register c; + + c = etoa[cc] & 0377; + if(cbs == 0) { + cnull(c); + return; + } + if(c == ' ') { + nspace++; + goto out; + } + while(nspace > 0) { + null(' '); + nspace--; + } + cnull(c); + +out: + if(++cbc >= cbs) { + null('\n'); + cbc = 0; + nspace = 0; + } +} + +ebcdic(cc) +{ + register c; + + c = cc; + if(cflag&UCASE && c>='a' && c<='z') + c += 'A'-'a'; + if(cflag&LCASE && c>='A' && c<='Z') + c += 'a'-'A'; + c = atoe[c] & 0377; + if(cbs == 0) { + null(c); + return; + } + if(cc == '\n') { + while(cbc < cbs) { + null(atoe[' ']); + cbc++; + } + cbc = 0; + return; + } + if(cbc == cbs) + ntrunc++; + cbc++; + if(cbc <= cbs) + null(c); +} + +ibm(cc) +{ + register c; + + c = cc; + if(cflag&UCASE && c>='a' && c<='z') + c += 'A'-'a'; + if(cflag&LCASE && c>='A' && c<='Z') + c += 'a'-'A'; + c = atoibm[c] & 0377; + if(cbs == 0) { + null(c); + return; + } + if(cc == '\n') { + while(cbc < cbs) { + null(atoibm[' ']); + cbc++; + } + cbc = 0; + return; + } + if(cbc == cbs) + ntrunc++; + cbc++; + if(cbc <= cbs) + null(c); +} + +term() +{ + + stats(); + exit(0); +} + +stats() +{ + + fprintf(stderr,"%u+%u records in\n", nifr, nipr); + fprintf(stderr,"%u+%u records out\n", nofr, nopr); + if(ntrunc) + fprintf(stderr,"%u truncated records\n", ntrunc); +} diff --git a/v7/cmd/dd.c.orig#b00008 b/v7/cmd/dd.c.orig#b00008 new file mode 100644 index 0000000..6d4d24e --- /dev/null +++ b/v7/cmd/dd.c.orig#b00008 @@ -0,0 +1,541 @@ +#include +#include + +#define BIG 32767 +#define LCASE 01 +#define UCASE 02 +#define SWAB 04 +#define NERR 010 +#define SYNC 020 +int cflag; +int fflag; +int skip; +int seekn; +int count; +int files = 1; +char *string; +char *ifile; +char *ofile; +char *ibuf; +char *obuf; +char *sbrk(); +int ibs = 512; +int obs = 512; +int bs; +int cbs; +int ibc; +int obc; +int cbc; +int nifr; +int nipr; +int nofr; +int nopr; +int ntrunc; +int ibf; +int obf; +char *op; +int nspace; +char etoa[] = { + 0000,0001,0002,0003,0234,0011,0206,0177, + 0227,0215,0216,0013,0014,0015,0016,0017, + 0020,0021,0022,0023,0235,0205,0010,0207, + 0030,0031,0222,0217,0034,0035,0036,0037, + 0200,0201,0202,0203,0204,0012,0027,0033, + 0210,0211,0212,0213,0214,0005,0006,0007, + 0220,0221,0026,0223,0224,0225,0226,0004, + 0230,0231,0232,0233,0024,0025,0236,0032, + 0040,0240,0241,0242,0243,0244,0245,0246, + 0247,0250,0133,0056,0074,0050,0053,0041, + 0046,0251,0252,0253,0254,0255,0256,0257, + 0260,0261,0135,0044,0052,0051,0073,0136, + 0055,0057,0262,0263,0264,0265,0266,0267, + 0270,0271,0174,0054,0045,0137,0076,0077, + 0272,0273,0274,0275,0276,0277,0300,0301, + 0302,0140,0072,0043,0100,0047,0075,0042, + 0303,0141,0142,0143,0144,0145,0146,0147, + 0150,0151,0304,0305,0306,0307,0310,0311, + 0312,0152,0153,0154,0155,0156,0157,0160, + 0161,0162,0313,0314,0315,0316,0317,0320, + 0321,0176,0163,0164,0165,0166,0167,0170, + 0171,0172,0322,0323,0324,0325,0326,0327, + 0330,0331,0332,0333,0334,0335,0336,0337, + 0340,0341,0342,0343,0344,0345,0346,0347, + 0173,0101,0102,0103,0104,0105,0106,0107, + 0110,0111,0350,0351,0352,0353,0354,0355, + 0175,0112,0113,0114,0115,0116,0117,0120, + 0121,0122,0356,0357,0360,0361,0362,0363, + 0134,0237,0123,0124,0125,0126,0127,0130, + 0131,0132,0364,0365,0366,0367,0370,0371, + 0060,0061,0062,0063,0064,0065,0066,0067, + 0070,0071,0372,0373,0374,0375,0376,0377, +}; +char atoe[] = { + 0000,0001,0002,0003,0067,0055,0056,0057, + 0026,0005,0045,0013,0014,0015,0016,0017, + 0020,0021,0022,0023,0074,0075,0062,0046, + 0030,0031,0077,0047,0034,0035,0036,0037, + 0100,0117,0177,0173,0133,0154,0120,0175, + 0115,0135,0134,0116,0153,0140,0113,0141, + 0360,0361,0362,0363,0364,0365,0366,0367, + 0370,0371,0172,0136,0114,0176,0156,0157, + 0174,0301,0302,0303,0304,0305,0306,0307, + 0310,0311,0321,0322,0323,0324,0325,0326, + 0327,0330,0331,0342,0343,0344,0345,0346, + 0347,0350,0351,0112,0340,0132,0137,0155, + 0171,0201,0202,0203,0204,0205,0206,0207, + 0210,0211,0221,0222,0223,0224,0225,0226, + 0227,0230,0231,0242,0243,0244,0245,0246, + 0247,0250,0251,0300,0152,0320,0241,0007, + 0040,0041,0042,0043,0044,0025,0006,0027, + 0050,0051,0052,0053,0054,0011,0012,0033, + 0060,0061,0032,0063,0064,0065,0066,0010, + 0070,0071,0072,0073,0004,0024,0076,0341, + 0101,0102,0103,0104,0105,0106,0107,0110, + 0111,0121,0122,0123,0124,0125,0126,0127, + 0130,0131,0142,0143,0144,0145,0146,0147, + 0150,0151,0160,0161,0162,0163,0164,0165, + 0166,0167,0170,0200,0212,0213,0214,0215, + 0216,0217,0220,0232,0233,0234,0235,0236, + 0237,0240,0252,0253,0254,0255,0256,0257, + 0260,0261,0262,0263,0264,0265,0266,0267, + 0270,0271,0272,0273,0274,0275,0276,0277, + 0312,0313,0314,0315,0316,0317,0332,0333, + 0334,0335,0336,0337,0352,0353,0354,0355, + 0356,0357,0372,0373,0374,0375,0376,0377, +}; +char atoibm[] = +{ + 0000,0001,0002,0003,0067,0055,0056,0057, + 0026,0005,0045,0013,0014,0015,0016,0017, + 0020,0021,0022,0023,0074,0075,0062,0046, + 0030,0031,0077,0047,0034,0035,0036,0037, + 0100,0132,0177,0173,0133,0154,0120,0175, + 0115,0135,0134,0116,0153,0140,0113,0141, + 0360,0361,0362,0363,0364,0365,0366,0367, + 0370,0371,0172,0136,0114,0176,0156,0157, + 0174,0301,0302,0303,0304,0305,0306,0307, + 0310,0311,0321,0322,0323,0324,0325,0326, + 0327,0330,0331,0342,0343,0344,0345,0346, + 0347,0350,0351,0255,0340,0275,0137,0155, + 0171,0201,0202,0203,0204,0205,0206,0207, + 0210,0211,0221,0222,0223,0224,0225,0226, + 0227,0230,0231,0242,0243,0244,0245,0246, + 0247,0250,0251,0300,0117,0320,0241,0007, + 0040,0041,0042,0043,0044,0025,0006,0027, + 0050,0051,0052,0053,0054,0011,0012,0033, + 0060,0061,0032,0063,0064,0065,0066,0010, + 0070,0071,0072,0073,0004,0024,0076,0341, + 0101,0102,0103,0104,0105,0106,0107,0110, + 0111,0121,0122,0123,0124,0125,0126,0127, + 0130,0131,0142,0143,0144,0145,0146,0147, + 0150,0151,0160,0161,0162,0163,0164,0165, + 0166,0167,0170,0200,0212,0213,0214,0215, + 0216,0217,0220,0232,0233,0234,0235,0236, + 0237,0240,0252,0253,0254,0255,0256,0257, + 0260,0261,0262,0263,0264,0265,0266,0267, + 0270,0271,0272,0273,0274,0275,0276,0277, + 0312,0313,0314,0315,0316,0317,0332,0333, + 0334,0335,0336,0337,0352,0353,0354,0355, + 0356,0357,0372,0373,0374,0375,0376,0377, +}; + + +main(argc, argv) +int argc; +char **argv; +{ + int (*conv)(); + register char *ip; + register c; + int ebcdic(), ibm(), ascii(), null(), cnull(), term(); + int a; + + conv = null; + for(c=1; cibuf;) + *--ip = 0; + ibc = read(ibf, ibuf, ibs); + } + if(ibc == -1) { + perror("read"); + if((cflag&NERR) == 0) { + flsh(); + term(); + } + ibc = 0; + for(c=0; c>1) & ~1; + if(cflag&SWAB && c) + do { + a = *ip++; + ip[-1] = *ip; + *ip++ = a; + } while(--c); + ip = ibuf; + if (fflag) { + obc = ibc; + flsh(); + ibc = 0; + } + goto loop; + } + c = 0; + c |= *ip++; + c &= 0377; + (*conv)(c); + goto loop; +} + +flsh() +{ + register c; + + if(obc) { + if(obc == obs) + nofr++; else + nopr++; + c = write(obf, obuf, obc); + if(c != obc) { + perror("write"); + term(); + } + obc = 0; + } +} + +match(s) +char *s; +{ + register char *cs; + + cs = string; + while(*cs++ == *s) + if(*s++ == '\0') + goto true; + if(*s != '\0') + return(0); + +true: + cs--; + string = cs; + return(1); +} + +number(big) +{ + register char *cs; + long n; + + cs = string; + n = 0; + while(*cs >= '0' && *cs <= '9') + n = n*10 + *cs++ - '0'; + for(;;) + switch(*cs++) { + + case 'k': + n *= 1024; + continue; + + case 'w': + n *= sizeof(int); + continue; + + case 'b': + n *= 512; + continue; + + case '*': + case 'x': + string = cs; + n *= number(BIG); + + case '\0': + if (n>=big || n<0) { + fprintf(stderr, "dd: argument %D out of range\n", n); + exit(1); + } + return(n); + } + /* never gets here */ +} + +cnull(cc) +{ + register c; + + c = cc; + if(cflag&UCASE && c>='a' && c<='z') + c += 'A'-'a'; + if(cflag&LCASE && c>='A' && c<='Z') + c += 'a'-'A'; + null(c); +} + +null(c) +{ + + *op = c; + op++; + if(++obc >= obs) { + flsh(); + op = obuf; + } +} + +ascii(cc) +{ + register c; + + c = etoa[cc] & 0377; + if(cbs == 0) { + cnull(c); + return; + } + if(c == ' ') { + nspace++; + goto out; + } + while(nspace > 0) { + null(' '); + nspace--; + } + cnull(c); + +out: + if(++cbc >= cbs) { + null('\n'); + cbc = 0; + nspace = 0; + } +} + +ebcdic(cc) +{ + register c; + + c = cc; + if(cflag&UCASE && c>='a' && c<='z') + c += 'A'-'a'; + if(cflag&LCASE && c>='A' && c<='Z') + c += 'a'-'A'; + c = atoe[c] & 0377; + if(cbs == 0) { + null(c); + return; + } + if(cc == '\n') { + while(cbc < cbs) { + null(atoe[' ']); + cbc++; + } + cbc = 0; + return; + } + if(cbc == cbs) + ntrunc++; + cbc++; + if(cbc <= cbs) + null(c); +} + +ibm(cc) +{ + register c; + + c = cc; + if(cflag&UCASE && c>='a' && c<='z') + c += 'A'-'a'; + if(cflag&LCASE && c>='A' && c<='Z') + c += 'a'-'A'; + c = atoibm[c] & 0377; + if(cbs == 0) { + null(c); + return; + } + if(cc == '\n') { + while(cbc < cbs) { + null(atoibm[' ']); + cbc++; + } + cbc = 0; + return; + } + if(cbc == cbs) + ntrunc++; + cbc++; + if(cbc <= cbs) + null(c); +} + +term() +{ + + stats(); + exit(0); +} + +stats() +{ + + fprintf(stderr,"%u+%u records in\n", nifr, nipr); + fprintf(stderr,"%u+%u records out\n", nofr, nopr); + if(ntrunc) + fprintf(stderr,"%u truncated records\n", ntrunc); +} diff --git a/v7/cmd/file.1#000000 b/v7/cmd/file.1#000000 new file mode 100644 index 0000000..6c34e66 --- /dev/null +++ b/v7/cmd/file.1#000000 @@ -0,0 +1,18 @@ +.TH FILE 1 +.SH NAME +file \- determine file type +.SH SYNOPSIS +.B file +file ... +.SH DESCRIPTION +.I File +performs a series of tests on each argument +in an attempt to classify it. +If an argument appears to be ascii, +.I file +examines the first 512 bytes +and tries to guess its language. +.SH BUGS +It often makes mistakes. +In particular it often suggests that +command files are C programs. diff --git a/v7/cmd/file.c#b00008 b/v7/cmd/file.c#b00008 new file mode 100644 index 0000000..6694262 --- /dev/null +++ b/v7/cmd/file.c#b00008 @@ -0,0 +1,330 @@ +/* + * determine type of file + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int, char**); +int type(char*); +int ascom(void); +int ccom(void); +int english (char *bp, int n); +int lookup(char *tab[]); + +int in; +int i = 0; +char buf[512]; +char *fort[] = { + "function","subroutine","common","dimension","block","integer", + "real","data","double",0}; +char *asc[] = { + "sys","mov","tst","clr","jmp",0}; +char *c[] = { + "int","char","float","double","struct","extern",0}; +char *as[] = { + "globl","byte","even","text","data","bss","comm",0}; +int ifile; + +int main(int argc, char **argv) +{ + FILE *fl; + register char *p; + char ap[128]; + + if (argc>1 && argv[1][0]=='-' && argv[1][1]=='f') { + if ((fl = fopen(argv[2], "r")) == NULL) { + printf("Can't open %s\n", argv[2]); + exit(2); + } + while ((p = fgets(ap, 128, fl)) != NULL) { + int l = strlen(p); + if (l>0) + p[l-1] = '\0'; + printf("%s: ", p); + type(p); + if (ifile>=0) + close(ifile); + } + exit(1); + } + while(argc > 1) { + printf("%s: ", argv[1]); + type(argv[1]); + argc--; + argv++; + if (ifile >= 0) + close(ifile); + } +} + +int type(char *file) +{ + int j,nl; + char ch; + struct stat mbuf; + + ifile = -1; + if(stat(file, &mbuf) < 0) { + printf("cannot stat\n"); + return; + } + switch (mbuf.st_mode & S_IFMT) { + + case S_IFCHR: + printf("character"); + goto spcl; + + case S_IFDIR: + printf("directory\n"); + return; + + case S_IFBLK: + printf("block"); + +spcl: + printf(" special (%d/%d)\n", major(mbuf.st_rdev), minor(mbuf.st_rdev)); + return; + } + + ifile = open(file, 0); + if(ifile < 0) { + printf("cannot open\n"); + return; + } + in = read(ifile, buf, 512); + if(in == 0){ + printf("empty\n"); + return; + } + switch(*(int *)buf) { + + case 0410: + printf("pure "); + goto exec; + + case 0411: + printf("separate "); + + case 0407: +exec: + printf("executable"); + if(((int *)buf)[4] != 0) + printf(" not stripped"); + printf("\n"); + goto out; + + case 0177555: + printf("old archive\n"); + goto out; + + case 0177545: + printf("archive\n"); + goto out; + } + + i = 0; + if(ccom() == 0)goto notc; + while(buf[i] == '#'){ + j = i; + while(buf[i++] != '\n'){ + if(i - j > 255){ + printf("data\n"); + goto out; + } + if(i >= in)goto notc; + } + if(ccom() == 0)goto notc; + } +check: + if(lookup(c) == 1){ + while((ch = buf[i++]) != ';' && ch != '{')if(i >= in)goto notc; + printf("c program text"); + goto outa; + } + nl = 0; + while(buf[i] != '('){ + if(buf[i] <= 0) + goto notas; + if(buf[i] == ';'){ + i++; + goto check; + } + if(buf[i++] == '\n') + if(nl++ > 6)goto notc; + if(i >= in)goto notc; + } + while(buf[i] != ')'){ + if(buf[i++] == '\n') + if(nl++ > 6)goto notc; + if(i >= in)goto notc; + } + while(buf[i] != '{'){ + if(buf[i++] == '\n') + if(nl++ > 6)goto notc; + if(i >= in)goto notc; + } + printf("c program text"); + goto outa; +notc: + i = 0; + while(buf[i] == 'c' || buf[i] == '#'){ + while(buf[i++] != '\n')if(i >= in)goto notfort; + } + if(lookup(fort) == 1){ + printf("fortran program text"); + goto outa; + } +notfort: + i=0; + if(ascom() == 0)goto notas; + j = i-1; + if(buf[i] == '.'){ + i++; + if(lookup(as) == 1){ + printf("assembler program text"); + goto outa; + } + else if(buf[j] == '\n' && isalpha(buf[j+2])){ + printf("roff, nroff, or eqn input text"); + goto outa; + } + } + while(lookup(asc) == 0){ + if(ascom() == 0)goto notas; + while(buf[i] != '\n' && buf[i++] != ':') + if(i >= in)goto notas; + while(buf[i] == '\n' || buf[i] == ' ' || buf[i] == '\t')if(i++ >= in)goto notas; + j = i-1; + if(buf[i] == '.'){ + i++; + if(lookup(as) == 1){ + printf("assembler program text"); + goto outa; + } + else if(buf[j] == '\n' && isalpha(buf[j+2])){ + printf("roff, nroff, or eqn input text"); + goto outa; + } + } + } + printf("assembler program text"); + goto outa; +notas: + for(i=0; i < in; i++)if(buf[i]&0200){ + if (buf[0]=='\100' && buf[1]=='\357') { + printf("troff output\n"); + goto out; + } + printf("data\n"); + goto out; + } + if (mbuf.st_mode&((S_IEXEC)|(S_IEXEC>>3)|(S_IEXEC>>6))) + printf("commands text"); + else + if (english(buf, in)) + printf("English text"); + else + printf("ascii text"); +outa: + while(i < in) + if((buf[i++]&0377) > 127){ + printf(" with garbage\n"); + goto out; + } + /* if next few lines in then read whole file looking for nulls ... + while((in = read(ifile,buf,512)) > 0) + for(i = 0; i < in; i++) + if((buf[i]&0377) > 127){ + printf(" with garbage\n"); + goto out; + } + /*.... */ + printf("\n"); +out:; +} +int lookup(char *tab[]) +{ + char r; + int k,j,l; + while(buf[i] == ' ' || buf[i] == '\t' || buf[i] == '\n')i++; + for(j=0; tab[j] != 0; j++){ + l=0; + for(k=i; ((r=tab[j][l++]) == buf[k] && r != '\0');k++); + if(r == '\0') + if(buf[k] == ' ' || buf[k] == '\n' || buf[k] == '\t' + || buf[k] == '{' || buf[k] == '/'){ + i=k; + return(1); + } + } + return(0); +} + +int ccom(void){ + char cc; + while((cc = buf[i]) == ' ' || cc == '\t' || cc == '\n')if(i++ >= in)return(0); + if(buf[i] == '/' && buf[i+1] == '*'){ + i += 2; + while(buf[i] != '*' || buf[i+1] != '/'){ + if(buf[i] == '\\')i += 2; + else i++; + if(i >= in)return(0); + } + if((i += 2) >= in)return(0); + } + if(buf[i] == '\n')if(ccom() == 0)return(0); + return(1); +} +int ascom(void){ + while(buf[i] == '/'){ + i++; + while(buf[i++] != '\n')if(i >= in)return(0); + while(buf[i] == '\n')if(i++ >= in)return(0); + } + return(1); +} + +int english (char *bp, int n) +{ +# define NASC 128 + int ct[NASC], j, vow, freq, rare; + int badpun = 0, punct = 0; + if (n<50) return(0); /* no point in statistics on squibs */ + for(j=0; j punct) + return(0); + vow = ct['a'] + ct['e'] + ct['i'] + ct['o'] + ct['u']; + freq = ct['e'] + ct['t'] + ct['a'] + ct['i'] + ct['o'] + ct['n']; + rare = ct['v'] + ct['j'] + ct['k'] + ct['q'] + ct['x'] + ct['z']; + if (2*ct[';'] > ct['e']) return(0); + if ( (ct['>']+ct['<']+ct['/'])>ct['e']) return(0); /* shell file test */ + return (vow*5 >= n-ct[' '] && freq >= 10*rare); +} diff --git a/v7/cmd/file.c.orig#b00008 b/v7/cmd/file.c.orig#b00008 new file mode 100644 index 0000000..196fd41 --- /dev/null +++ b/v7/cmd/file.c.orig#b00008 @@ -0,0 +1,321 @@ +/* + * determine type of file + */ + +#include +#include +#include +#include +int in; +int i = 0; +char buf[512]; +char *fort[] = { + "function","subroutine","common","dimension","block","integer", + "real","data","double",0}; +char *asc[] = { + "sys","mov","tst","clr","jmp",0}; +char *c[] = { + "int","char","float","double","struct","extern",0}; +char *as[] = { + "globl","byte","even","text","data","bss","comm",0}; +int ifile; + +main(argc, argv) +char **argv; +{ + FILE *fl; + register char *p; + char ap[128]; + + if (argc>1 && argv[1][0]=='-' && argv[1][1]=='f') { + if ((fl = fopen(argv[2], "r")) == NULL) { + printf("Can't open %s\n", argv[2]); + exit(2); + } + while ((p = fgets(ap, 128, fl)) != NULL) { + int l = strlen(p); + if (l>0) + p[l-1] = '\0'; + printf("%s: ", p); + type(p); + if (ifile>=0) + close(ifile); + } + exit(1); + } + while(argc > 1) { + printf("%s: ", argv[1]); + type(argv[1]); + argc--; + argv++; + if (ifile >= 0) + close(ifile); + } +} + +type(file) +char *file; +{ + int j,nl; + char ch; + struct stat mbuf; + + ifile = -1; + if(stat(file, &mbuf) < 0) { + printf("cannot stat\n"); + return; + } + switch (mbuf.st_mode & S_IFMT) { + + case S_IFCHR: + printf("character"); + goto spcl; + + case S_IFDIR: + printf("directory\n"); + return; + + case S_IFBLK: + printf("block"); + +spcl: + printf(" special (%d/%d)\n", major(mbuf.st_rdev), minor(mbuf.st_rdev)); + return; + } + + ifile = open(file, 0); + if(ifile < 0) { + printf("cannot open\n"); + return; + } + in = read(ifile, buf, 512); + if(in == 0){ + printf("empty\n"); + return; + } + switch(*(int *)buf) { + + case 0410: + printf("pure "); + goto exec; + + case 0411: + printf("separate "); + + case 0407: +exec: + printf("executable"); + if(((int *)buf)[4] != 0) + printf(" not stripped"); + printf("\n"); + goto out; + + case 0177555: + printf("old archive\n"); + goto out; + + case 0177545: + printf("archive\n"); + goto out; + } + + i = 0; + if(ccom() == 0)goto notc; + while(buf[i] == '#'){ + j = i; + while(buf[i++] != '\n'){ + if(i - j > 255){ + printf("data\n"); + goto out; + } + if(i >= in)goto notc; + } + if(ccom() == 0)goto notc; + } +check: + if(lookup(c) == 1){ + while((ch = buf[i++]) != ';' && ch != '{')if(i >= in)goto notc; + printf("c program text"); + goto outa; + } + nl = 0; + while(buf[i] != '('){ + if(buf[i] <= 0) + goto notas; + if(buf[i] == ';'){ + i++; + goto check; + } + if(buf[i++] == '\n') + if(nl++ > 6)goto notc; + if(i >= in)goto notc; + } + while(buf[i] != ')'){ + if(buf[i++] == '\n') + if(nl++ > 6)goto notc; + if(i >= in)goto notc; + } + while(buf[i] != '{'){ + if(buf[i++] == '\n') + if(nl++ > 6)goto notc; + if(i >= in)goto notc; + } + printf("c program text"); + goto outa; +notc: + i = 0; + while(buf[i] == 'c' || buf[i] == '#'){ + while(buf[i++] != '\n')if(i >= in)goto notfort; + } + if(lookup(fort) == 1){ + printf("fortran program text"); + goto outa; + } +notfort: + i=0; + if(ascom() == 0)goto notas; + j = i-1; + if(buf[i] == '.'){ + i++; + if(lookup(as) == 1){ + printf("assembler program text"); + goto outa; + } + else if(buf[j] == '\n' && isalpha(buf[j+2])){ + printf("roff, nroff, or eqn input text"); + goto outa; + } + } + while(lookup(asc) == 0){ + if(ascom() == 0)goto notas; + while(buf[i] != '\n' && buf[i++] != ':') + if(i >= in)goto notas; + while(buf[i] == '\n' || buf[i] == ' ' || buf[i] == '\t')if(i++ >= in)goto notas; + j = i-1; + if(buf[i] == '.'){ + i++; + if(lookup(as) == 1){ + printf("assembler program text"); + goto outa; + } + else if(buf[j] == '\n' && isalpha(buf[j+2])){ + printf("roff, nroff, or eqn input text"); + goto outa; + } + } + } + printf("assembler program text"); + goto outa; +notas: + for(i=0; i < in; i++)if(buf[i]&0200){ + if (buf[0]=='\100' && buf[1]=='\357') { + printf("troff output\n"); + goto out; + } + printf("data\n"); + goto out; + } + if (mbuf.st_mode&((S_IEXEC)|(S_IEXEC>>3)|(S_IEXEC>>6))) + printf("commands text"); + else + if (english(buf, in)) + printf("English text"); + else + printf("ascii text"); +outa: + while(i < in) + if((buf[i++]&0377) > 127){ + printf(" with garbage\n"); + goto out; + } + /* if next few lines in then read whole file looking for nulls ... + while((in = read(ifile,buf,512)) > 0) + for(i = 0; i < in; i++) + if((buf[i]&0377) > 127){ + printf(" with garbage\n"); + goto out; + } + /*.... */ + printf("\n"); +out:; +} +lookup(tab) +char *tab[]; +{ + char r; + int k,j,l; + while(buf[i] == ' ' || buf[i] == '\t' || buf[i] == '\n')i++; + for(j=0; tab[j] != 0; j++){ + l=0; + for(k=i; ((r=tab[j][l++]) == buf[k] && r != '\0');k++); + if(r == '\0') + if(buf[k] == ' ' || buf[k] == '\n' || buf[k] == '\t' + || buf[k] == '{' || buf[k] == '/'){ + i=k; + return(1); + } + } + return(0); +} +ccom(){ + char cc; + while((cc = buf[i]) == ' ' || cc == '\t' || cc == '\n')if(i++ >= in)return(0); + if(buf[i] == '/' && buf[i+1] == '*'){ + i += 2; + while(buf[i] != '*' || buf[i+1] != '/'){ + if(buf[i] == '\\')i += 2; + else i++; + if(i >= in)return(0); + } + if((i += 2) >= in)return(0); + } + if(buf[i] == '\n')if(ccom() == 0)return(0); + return(1); +} +ascom(){ + while(buf[i] == '/'){ + i++; + while(buf[i++] != '\n')if(i >= in)return(0); + while(buf[i] == '\n')if(i++ >= in)return(0); + } + return(1); +} + +english (bp, n) +char *bp; +{ +# define NASC 128 + int ct[NASC], j, vow, freq, rare; + int badpun = 0, punct = 0; + if (n<50) return(0); /* no point in statistics on squibs */ + for(j=0; j punct) + return(0); + vow = ct['a'] + ct['e'] + ct['i'] + ct['o'] + ct['u']; + freq = ct['e'] + ct['t'] + ct['a'] + ct['i'] + ct['o'] + ct['n']; + rare = ct['v'] + ct['j'] + ct['k'] + ct['q'] + ct['x'] + ct['z']; + if (2*ct[';'] > ct['e']) return(0); + if ( (ct['>']+ct['<']+ct['/'])>ct['e']) return(0); /* shell file test */ + return (vow*5 >= n-ct[' '] && freq >= 10*rare); +} diff --git a/v7/cmd/find.1#000000 b/v7/cmd/find.1#000000 new file mode 100644 index 0000000..0ba3622 --- /dev/null +++ b/v7/cmd/find.1#000000 @@ -0,0 +1,169 @@ +.TH FIND 1 +.SH NAME +find \- find files +.SH SYNOPSIS +.B find +pathname-list expression +.SH DESCRIPTION +.I Find +recursively descends +the directory hierarchy for +each pathname in the +.I pathname-list +(i.e., one or more pathnames) +seeking files that match a boolean +.I expression +written in the primaries given below. +In the descriptions, the argument +.I n +is used as a decimal integer +where +.I +n +means more than +.I n, +.I \-n +means less than +.I n +and +.I n +means exactly +.IR n . +.TP 10n +.BR \-name " filename" +True if the +.I filename +argument matches the current file name. +Normal +Shell +argument syntax may be used if escaped (watch out for +`[', `?' and `*'). +.TP +.BR \-perm " onum" +True if the file permission flags +exactly +match the +octal number +.I onum +(see +.IR chmod (1)). +If +.I onum +is prefixed by a minus sign, +more flag bits (017777, see +.IR stat (2)) +become significant and +the flags are compared: +.IR (flags&onum)==onum . +.TP +.BR \-type " c" +True if the type of the file +is +.I c, +where +.I c +is +.B "b, c, d" +or +.B f +for +block special file, character special file, +directory or plain file. +.TP +.BR \-links " n" +True if the file has +.I n +links. +.TP +.BR \-user " uname" +True if the file belongs to the user +.I uname +(login name or numeric user ID). +.TP +.BR \-group " gname" +True if the file belongs to group +.I gname +(group name or numeric group ID). +.TP +.BR \-size " n" +True if the file is +.I n +blocks long (512 bytes per block). +.TP +.BR \-inum " n" +True if the file has inode number +.I n. +.TP +.BR \-atime " n" +True if the file has been accessed in +.I n +days. +.TP +.BR \-mtime " n" +True if the file has been modified in +.I n +days. +.TP +.BR \-exec " command" +True if the executed command returns +a zero value as exit status. +The end of the command must be punctuated by an escaped +semicolon. +A command argument `{}' is replaced by the +current pathname. +.TP +.BR \-ok " command" +Like +.B \-exec +except that the generated command is written on +the standard output, then the standard input is read +and the command executed only upon response +.BR y . +.TP +.B \-print +Always true; +causes the current pathname to be printed. +.TP +.BR \-newer " file" +True if +the current file has been modified more recently than the argument +.I file. +.PP +The primaries may be combined using the following operators +(in order of decreasing precedence): +.TP 4 +1) +A parenthesized group of primaries and operators +(parentheses are special to the Shell and must be escaped). +.TP 4 +2) +The negation of a primary +(`!' is the unary +.I not +operator). +.TP 4 +3) +Concatenation of primaries +(the +.I and +operation +is implied by the juxtaposition of two primaries). +.TP 4 +4) +Alternation of primaries +.RB "(`" \-o "' is the" +.I or +operator). +.SH EXAMPLE +To remove all files named +`a.out' or `*.o' that have not been accessed for a week: +.IP "" .2i +find / \\( \-name a.out \-o \-name '*.o' \\) +\-atime +7 \-exec rm {} \\; +.SH FILES +/etc/passwd +.br +/etc/group +.SH "SEE ALSO" +sh(1), test(1), filsys(5) +.SH BUGS +The syntax is painful. diff --git a/v7/cmd/find.c#b00008 b/v7/cmd/find.c#b00008 new file mode 100644 index 0000000..ed275db --- /dev/null +++ b/v7/cmd/find.c#b00008 @@ -0,0 +1,780 @@ +/* find COMPILE: cc -o find -s -O -i find.c -lS */ + +#pragma debug 8+64 /* No ORCA/C stack fixup */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FNAMELEN 255 + +#define A_DAY 86400L /* a day full of seconds */ +#define EQ(x, y) (strcmp(x, y)==0) + +time_t time(time_t*); + + +struct anode { + int (*F)(void *); + void *L, *R; +} Node[100]; + +int Randlast; +char Pathname[MAXPATHLEN]; +int Nn; /* number of nodes */ +char *Fname; +long Now; +int Argc, Ai, Pi; +char **Argv; + +/* cpio stuff */ +int Cpio; +short *Buf, *Dbuf, *Wp; +int Bufsize = 5120; +int Wct = 2560; + +long Newer; + +struct stat Statb; + +char Home[MAXPATHLEN]; +long Blocks; + +int main(int argc, char *argv[]); +struct anode *_exp(void); +struct anode *e1(void); +struct anode *e2(void); +struct anode *e3(void); +struct anode *mk(void *f, void *l, void *r); +char *nxtarg(void); +int and(register struct anode *p); +int or(register struct anode *p); +int not(register struct anode *p); +int _glob(register struct anode *p); +int print(void); +int mtime(register struct anode *p); +int atime(register struct anode *p); +int _ctime(register struct anode *p); +int user(register struct anode *p); +int ino(register struct anode *p); +int group(register struct anode *p); +int links(register struct anode *p); +int size(register struct anode *p); +int perm(register struct anode *p); +int type(register struct anode *p); +int exeq(register struct anode *p); +int ok(register struct anode *p); +long mklong(short v[]); +void cpio(void); +int newer(void); +int scomp(register int a, register int b, register char s); +int doex(int com); +int getunum(char *f, char *s); +int descend(char *name, char *fname, struct anode *exlist); +int gmatch(register char *s, register char *p); +int amatch(register char *s, register char *p); +int umatch(register char *s, register char *p); +void bwrite(register short *rp, register int c); +int chgreel(int x, int fl); +void pr(char *s); + +int main(int argc, char *argv[]) +{ + struct anode *exlist; + int paths; + register char *cp, *sp = 0; + FILE *pwd; + + time(&Now); + getcwd(Home, MAXPATHLEN); + Argc = argc; Argv = argv; + if(argc<3) { +usage: pr("Usage: find path-list predicate-list\n"); + exit(1); + } + for(Ai = paths = 1; Ai < (argc-1); ++Ai, ++paths) + if(*Argv[Ai] == '-' || EQ(Argv[Ai], "(") || EQ(Argv[Ai], "!")) + break; + if(paths == 1) /* no path-list */ + goto usage; + if(!(exlist = _exp())) { /* parse and compile the arguments */ + pr("find: parsing error\n"); + exit(1); + } + if(Ai=Argc) { + strikes++; + Ai = Argc + 1; + return(""); + } + return(Argv[Ai++]); +} + +/* execution time functions */ +int and(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(((*L->F)(p->L)) && ((*R->F)(R))?1:0); +} + +int or(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(((*L->F)(L)) || ((*R->F)(R))?1:0); +} + +int not(register struct anode *p) +{ + struct anode *L = p->L; + return( !((*L->F)(L))); +} + +int _glob(register struct anode *p) +{ + struct anode *L = p->L; + return(gmatch(Fname, (char*)L)); +} + +int print(void) +{ + puts(Pathname); + return(1); +} + +int mtime(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Now - Statb.st_mtime) / A_DAY), (int)L, (char)R)); +} + +int atime(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Now - Statb.st_atime) / A_DAY), (int)L, (char)R)); +} + +int _ctime(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Now - Statb.st_ctime) / A_DAY), (int)L, (char)R)); +} + +int user(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp(Statb.st_uid, (int)L, (char)R)); +} + +int ino(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)Statb.st_ino, (int)L, (char)R)); +} + +int group(register struct anode *p) +{ + struct anode *L = p->L; + return((int)L == Statb.st_gid); +} + +int links(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp(Statb.st_nlink, (int)L, (char)R)); +} + +int size(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Statb.st_size+511)>>9), (int)L, (char)R)); +} + +int perm(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + register int i; + i = ((char)R=='-') ? (int)L : 07777; /* '-' means only arg bits */ + return((Statb.st_mode & i & 07777) == (int)L); +} + +int type(register struct anode *p) +{ + struct anode *L = p->L; + return((Statb.st_mode&S_IFMT)==(int)L); +} + +int exeq(register struct anode *p) +{ + struct anode *L = p->L; + fflush(stdout); /* to flush possible `-print' */ + return(doex((int)L)); +} + +int ok(register struct anode *p) +{ + struct anode *L = p->L; + int c; int yes; + yes = 0; + fflush(stdout); /* to flush possible `-print' */ + pr("< "), pr(Argv[(int)L]), pr(" ... "), pr(Pathname), pr(" >? "); + fflush(stderr); + if((c=getchar())=='y') yes = 1; + while(c!='\n') + if(c==EOF) + exit(2); + else + c = getchar(); + if(yes) return(doex((int)L)); + return(0); +} + +#define MKSHORT(v, lv) {U.l=1L;if(U.c[0]) U.l=lv, v[0]=U.s[1], v[1]=U.s[0]; else U.l=lv, v[0]=U.s[0], v[1]=U.s[1];} +union { long l; short s[2]; char c[4]; } U; + +long mklong(short v[]) +{ + U.l = 1; + if(U.c[0] /* VAX */) + U.s[0] = v[1], U.s[1] = v[0]; + else + U.s[0] = v[0], U.s[1] = v[1]; + return U.l; +} + +void cpio(void) +{ +#define MAGIC 070707 + struct header { + short h_magic, + h_dev, + h_ino, + h_mode, + h_uid, + h_gid, + h_nlink, + h_rdev; + short h_mtime[2]; + short h_namesize; + short h_filesize[2]; + char h_name[256]; + } hdr; + register int ifile, ct; + static long fsz; + register int i; + + hdr.h_magic = MAGIC; + strcpy(hdr.h_name, !strncmp(Pathname, "./", 2)? Pathname+2: Pathname); + hdr.h_namesize = strlen(hdr.h_name) + 1; + hdr.h_uid = Statb.st_uid; + hdr.h_gid = Statb.st_gid; + hdr.h_dev = Statb.st_dev; + hdr.h_ino = Statb.st_ino; + hdr.h_mode = Statb.st_mode; + MKSHORT(hdr.h_mtime, Statb.st_mtime); + hdr.h_nlink = Statb.st_nlink; + fsz = hdr.h_mode & S_IFREG? Statb.st_size: 0L; + MKSHORT(hdr.h_filesize, fsz); + hdr.h_rdev = Statb.st_rdev; + if(EQ(hdr.h_name, "TRAILER!!!")) { + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + for(i = 0; i < 10; ++i) + bwrite(Buf, 512); + return; + } + if(!mklong(hdr.h_filesize)) { + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + return; + } + if((ifile = open(Fname, 0)) < 0) { +cerror: + pr("find: cannot copy "), pr(hdr.h_name), pr("\n"); + return; + } + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + for(fsz = mklong(hdr.h_filesize); fsz > 0; fsz -= 512) { + ct = fsz>512? 512: fsz; + if(read(ifile, (char *)Buf, ct) < 0) + goto cerror; + bwrite(Buf, ct); + } + close(ifile); + return; +} + +int newer(void) +{ + return Statb.st_mtime > Newer; +} + +/* support functions */ +int scomp(register int a, register int b, register char s) /* funny signed compare */ +{ + if(s == '+') + return(a > b); + if(s == '-') + return(a < (b * -1)); + return(a == b); +} + + +/* Child entry point for GNO fork2() */ +void child(char **nargv) { + chdir(Home); + execvp(nargv[0], nargv); +} + +int doex(int com) +{ + static char *nargv[50]; + register int np; + register char *na; + union wait ccode; + + np = 0; + while ((na=Argv[com++])) { + if(strcmp(na, ";")==0) break; + if(strcmp(na, "{}")==0) nargv[np++] = Pathname; + else nargv[np++] = na; + } + nargv[np] = 0; + if (np==0) return(9); + + if(fork2(child, 1024, 0, "find", 2, nargv)) wait(&ccode); + return(*((int*)&ccode) ? 0:1); +} + +int getunum(char *f, char *s) { /* find user/group name and return number */ + register int i; + register char *sp; + register int c; + char str[20]; + FILE *pin; + + i = -1; + pin = fopen(f, "r"); + c = '\n'; /* prime with a CR */ + do { + if(c=='\n') { + sp = str; + while((c = *sp++ = getc(pin)) != ':') + if(c == EOF) goto RET; + *--sp = '\0'; + if(EQ(str, s)) { + while((c=getc(pin)) != ':') + if(c == EOF) goto RET; + sp = str; + while((*sp = getc(pin)) != ':') sp++; + *sp = '\0'; + i = atoi(str); + goto RET; + } + } + } while((c = getc(pin)) != EOF); + RET: + fclose(pin); + return(i); +} + +/* + * name - Full pathname of current file or directory ("/foo/bar/baz") + * fname - Name of leaf node file or directory ("baz") + * exlist - Expression list + * Returns 0 if we are done with subtree, 1 if we should continue + */ +int descend(char *name, char *fname, struct anode *exlist) { + DIR *dp; + struct dirent *entry; + int rv = 0, i; + char *c1, *c2, *endofname; + + if (lstat(fname, &Statb) < 0) { + printf("find: bad status-- %s\n", name); + return 0; + } + + (*exlist->F)(exlist); + + /* If it's a symlink we are done */ + if ((Statb.st_mode & S_IFMT) == S_IFLNK) { + return 1; + } + + /* If it's not a directory we are done */ + if ((Statb.st_mode & S_IFMT) != S_IFDIR) return 1; + + /* Find first '/' in name */ + for (c1 = name; *c1; ++c1); + if (*(c1-1) == '/') --c1; + endofname = c1; + + /* If we can't enter & open directory we are done */ + if (chdir(fname) == -1) return 0; + dp = opendir("."); + if (!dp) { + printf("find: cannot open %s\n", name); + rv = 0; + goto done; + } + + errno = 0; + + for (;;) { + entry = readdir(dp); + if (!entry) { + //if (errno != 0) { + // printf("find: cannot read %s (%d)\n", name, errno); + //} + rv = 0; + goto done; + } + + /* Skip . and .. */ + if (strcmp(entry->d_name, ".") == 0) continue; + if (strcmp(entry->d_name, "..") == 0) continue; + + c1 = endofname; + *c1++ = '/'; + c2 = entry->d_name; + + for (i=0; i> 1; + while(c--) { + if(!Wct) { +again: + if(write(Cpio, (char *)Dbuf, Bufsize)<0) { + Cpio = chgreel(1, Cpio); + goto again; + } + Wct = Bufsize >> 1; + wp = Dbuf; + ++Blocks; + } + *wp++ = *rp++; + --Wct; + } + Wp = wp; +} + +int chgreel(int x, int fl) +{ + register int f; + char str[22]; + FILE *devtty; + struct stat statb; + + pr("find: can't "), pr(x? "write output": "read input"), pr("\n"); + fstat(fl, &statb); + if((statb.st_mode&S_IFMT) != S_IFCHR) + exit(1); +again: + pr("If you want to go on, type device/file name when ready\n"); + devtty = fopen("/dev/tty", "r"); + fgets(str, 20, devtty); + str[strlen(str) - 1] = '\0'; + if(!*str) + exit(1); + close(fl); + if((f = open(str, x? 1: 0)) < 0) { + pr("That didn't work"); + fclose(devtty); + goto again; + } + return f; +} +void pr(char *s) +{ + fputs(s, stderr); +} diff --git a/v7/cmd/find.c.BACKUP#b00008 b/v7/cmd/find.c.BACKUP#b00008 new file mode 100644 index 0000000..ed275db --- /dev/null +++ b/v7/cmd/find.c.BACKUP#b00008 @@ -0,0 +1,780 @@ +/* find COMPILE: cc -o find -s -O -i find.c -lS */ + +#pragma debug 8+64 /* No ORCA/C stack fixup */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FNAMELEN 255 + +#define A_DAY 86400L /* a day full of seconds */ +#define EQ(x, y) (strcmp(x, y)==0) + +time_t time(time_t*); + + +struct anode { + int (*F)(void *); + void *L, *R; +} Node[100]; + +int Randlast; +char Pathname[MAXPATHLEN]; +int Nn; /* number of nodes */ +char *Fname; +long Now; +int Argc, Ai, Pi; +char **Argv; + +/* cpio stuff */ +int Cpio; +short *Buf, *Dbuf, *Wp; +int Bufsize = 5120; +int Wct = 2560; + +long Newer; + +struct stat Statb; + +char Home[MAXPATHLEN]; +long Blocks; + +int main(int argc, char *argv[]); +struct anode *_exp(void); +struct anode *e1(void); +struct anode *e2(void); +struct anode *e3(void); +struct anode *mk(void *f, void *l, void *r); +char *nxtarg(void); +int and(register struct anode *p); +int or(register struct anode *p); +int not(register struct anode *p); +int _glob(register struct anode *p); +int print(void); +int mtime(register struct anode *p); +int atime(register struct anode *p); +int _ctime(register struct anode *p); +int user(register struct anode *p); +int ino(register struct anode *p); +int group(register struct anode *p); +int links(register struct anode *p); +int size(register struct anode *p); +int perm(register struct anode *p); +int type(register struct anode *p); +int exeq(register struct anode *p); +int ok(register struct anode *p); +long mklong(short v[]); +void cpio(void); +int newer(void); +int scomp(register int a, register int b, register char s); +int doex(int com); +int getunum(char *f, char *s); +int descend(char *name, char *fname, struct anode *exlist); +int gmatch(register char *s, register char *p); +int amatch(register char *s, register char *p); +int umatch(register char *s, register char *p); +void bwrite(register short *rp, register int c); +int chgreel(int x, int fl); +void pr(char *s); + +int main(int argc, char *argv[]) +{ + struct anode *exlist; + int paths; + register char *cp, *sp = 0; + FILE *pwd; + + time(&Now); + getcwd(Home, MAXPATHLEN); + Argc = argc; Argv = argv; + if(argc<3) { +usage: pr("Usage: find path-list predicate-list\n"); + exit(1); + } + for(Ai = paths = 1; Ai < (argc-1); ++Ai, ++paths) + if(*Argv[Ai] == '-' || EQ(Argv[Ai], "(") || EQ(Argv[Ai], "!")) + break; + if(paths == 1) /* no path-list */ + goto usage; + if(!(exlist = _exp())) { /* parse and compile the arguments */ + pr("find: parsing error\n"); + exit(1); + } + if(Ai=Argc) { + strikes++; + Ai = Argc + 1; + return(""); + } + return(Argv[Ai++]); +} + +/* execution time functions */ +int and(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(((*L->F)(p->L)) && ((*R->F)(R))?1:0); +} + +int or(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(((*L->F)(L)) || ((*R->F)(R))?1:0); +} + +int not(register struct anode *p) +{ + struct anode *L = p->L; + return( !((*L->F)(L))); +} + +int _glob(register struct anode *p) +{ + struct anode *L = p->L; + return(gmatch(Fname, (char*)L)); +} + +int print(void) +{ + puts(Pathname); + return(1); +} + +int mtime(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Now - Statb.st_mtime) / A_DAY), (int)L, (char)R)); +} + +int atime(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Now - Statb.st_atime) / A_DAY), (int)L, (char)R)); +} + +int _ctime(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Now - Statb.st_ctime) / A_DAY), (int)L, (char)R)); +} + +int user(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp(Statb.st_uid, (int)L, (char)R)); +} + +int ino(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)Statb.st_ino, (int)L, (char)R)); +} + +int group(register struct anode *p) +{ + struct anode *L = p->L; + return((int)L == Statb.st_gid); +} + +int links(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp(Statb.st_nlink, (int)L, (char)R)); +} + +int size(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + return(scomp((int)((Statb.st_size+511)>>9), (int)L, (char)R)); +} + +int perm(register struct anode *p) +{ + struct anode *L = p->L; + struct anode *R = p->R; + register int i; + i = ((char)R=='-') ? (int)L : 07777; /* '-' means only arg bits */ + return((Statb.st_mode & i & 07777) == (int)L); +} + +int type(register struct anode *p) +{ + struct anode *L = p->L; + return((Statb.st_mode&S_IFMT)==(int)L); +} + +int exeq(register struct anode *p) +{ + struct anode *L = p->L; + fflush(stdout); /* to flush possible `-print' */ + return(doex((int)L)); +} + +int ok(register struct anode *p) +{ + struct anode *L = p->L; + int c; int yes; + yes = 0; + fflush(stdout); /* to flush possible `-print' */ + pr("< "), pr(Argv[(int)L]), pr(" ... "), pr(Pathname), pr(" >? "); + fflush(stderr); + if((c=getchar())=='y') yes = 1; + while(c!='\n') + if(c==EOF) + exit(2); + else + c = getchar(); + if(yes) return(doex((int)L)); + return(0); +} + +#define MKSHORT(v, lv) {U.l=1L;if(U.c[0]) U.l=lv, v[0]=U.s[1], v[1]=U.s[0]; else U.l=lv, v[0]=U.s[0], v[1]=U.s[1];} +union { long l; short s[2]; char c[4]; } U; + +long mklong(short v[]) +{ + U.l = 1; + if(U.c[0] /* VAX */) + U.s[0] = v[1], U.s[1] = v[0]; + else + U.s[0] = v[0], U.s[1] = v[1]; + return U.l; +} + +void cpio(void) +{ +#define MAGIC 070707 + struct header { + short h_magic, + h_dev, + h_ino, + h_mode, + h_uid, + h_gid, + h_nlink, + h_rdev; + short h_mtime[2]; + short h_namesize; + short h_filesize[2]; + char h_name[256]; + } hdr; + register int ifile, ct; + static long fsz; + register int i; + + hdr.h_magic = MAGIC; + strcpy(hdr.h_name, !strncmp(Pathname, "./", 2)? Pathname+2: Pathname); + hdr.h_namesize = strlen(hdr.h_name) + 1; + hdr.h_uid = Statb.st_uid; + hdr.h_gid = Statb.st_gid; + hdr.h_dev = Statb.st_dev; + hdr.h_ino = Statb.st_ino; + hdr.h_mode = Statb.st_mode; + MKSHORT(hdr.h_mtime, Statb.st_mtime); + hdr.h_nlink = Statb.st_nlink; + fsz = hdr.h_mode & S_IFREG? Statb.st_size: 0L; + MKSHORT(hdr.h_filesize, fsz); + hdr.h_rdev = Statb.st_rdev; + if(EQ(hdr.h_name, "TRAILER!!!")) { + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + for(i = 0; i < 10; ++i) + bwrite(Buf, 512); + return; + } + if(!mklong(hdr.h_filesize)) { + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + return; + } + if((ifile = open(Fname, 0)) < 0) { +cerror: + pr("find: cannot copy "), pr(hdr.h_name), pr("\n"); + return; + } + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + for(fsz = mklong(hdr.h_filesize); fsz > 0; fsz -= 512) { + ct = fsz>512? 512: fsz; + if(read(ifile, (char *)Buf, ct) < 0) + goto cerror; + bwrite(Buf, ct); + } + close(ifile); + return; +} + +int newer(void) +{ + return Statb.st_mtime > Newer; +} + +/* support functions */ +int scomp(register int a, register int b, register char s) /* funny signed compare */ +{ + if(s == '+') + return(a > b); + if(s == '-') + return(a < (b * -1)); + return(a == b); +} + + +/* Child entry point for GNO fork2() */ +void child(char **nargv) { + chdir(Home); + execvp(nargv[0], nargv); +} + +int doex(int com) +{ + static char *nargv[50]; + register int np; + register char *na; + union wait ccode; + + np = 0; + while ((na=Argv[com++])) { + if(strcmp(na, ";")==0) break; + if(strcmp(na, "{}")==0) nargv[np++] = Pathname; + else nargv[np++] = na; + } + nargv[np] = 0; + if (np==0) return(9); + + if(fork2(child, 1024, 0, "find", 2, nargv)) wait(&ccode); + return(*((int*)&ccode) ? 0:1); +} + +int getunum(char *f, char *s) { /* find user/group name and return number */ + register int i; + register char *sp; + register int c; + char str[20]; + FILE *pin; + + i = -1; + pin = fopen(f, "r"); + c = '\n'; /* prime with a CR */ + do { + if(c=='\n') { + sp = str; + while((c = *sp++ = getc(pin)) != ':') + if(c == EOF) goto RET; + *--sp = '\0'; + if(EQ(str, s)) { + while((c=getc(pin)) != ':') + if(c == EOF) goto RET; + sp = str; + while((*sp = getc(pin)) != ':') sp++; + *sp = '\0'; + i = atoi(str); + goto RET; + } + } + } while((c = getc(pin)) != EOF); + RET: + fclose(pin); + return(i); +} + +/* + * name - Full pathname of current file or directory ("/foo/bar/baz") + * fname - Name of leaf node file or directory ("baz") + * exlist - Expression list + * Returns 0 if we are done with subtree, 1 if we should continue + */ +int descend(char *name, char *fname, struct anode *exlist) { + DIR *dp; + struct dirent *entry; + int rv = 0, i; + char *c1, *c2, *endofname; + + if (lstat(fname, &Statb) < 0) { + printf("find: bad status-- %s\n", name); + return 0; + } + + (*exlist->F)(exlist); + + /* If it's a symlink we are done */ + if ((Statb.st_mode & S_IFMT) == S_IFLNK) { + return 1; + } + + /* If it's not a directory we are done */ + if ((Statb.st_mode & S_IFMT) != S_IFDIR) return 1; + + /* Find first '/' in name */ + for (c1 = name; *c1; ++c1); + if (*(c1-1) == '/') --c1; + endofname = c1; + + /* If we can't enter & open directory we are done */ + if (chdir(fname) == -1) return 0; + dp = opendir("."); + if (!dp) { + printf("find: cannot open %s\n", name); + rv = 0; + goto done; + } + + errno = 0; + + for (;;) { + entry = readdir(dp); + if (!entry) { + //if (errno != 0) { + // printf("find: cannot read %s (%d)\n", name, errno); + //} + rv = 0; + goto done; + } + + /* Skip . and .. */ + if (strcmp(entry->d_name, ".") == 0) continue; + if (strcmp(entry->d_name, "..") == 0) continue; + + c1 = endofname; + *c1++ = '/'; + c2 = entry->d_name; + + for (i=0; i> 1; + while(c--) { + if(!Wct) { +again: + if(write(Cpio, (char *)Dbuf, Bufsize)<0) { + Cpio = chgreel(1, Cpio); + goto again; + } + Wct = Bufsize >> 1; + wp = Dbuf; + ++Blocks; + } + *wp++ = *rp++; + --Wct; + } + Wp = wp; +} + +int chgreel(int x, int fl) +{ + register int f; + char str[22]; + FILE *devtty; + struct stat statb; + + pr("find: can't "), pr(x? "write output": "read input"), pr("\n"); + fstat(fl, &statb); + if((statb.st_mode&S_IFMT) != S_IFCHR) + exit(1); +again: + pr("If you want to go on, type device/file name when ready\n"); + devtty = fopen("/dev/tty", "r"); + fgets(str, 20, devtty); + str[strlen(str) - 1] = '\0'; + if(!*str) + exit(1); + close(fl); + if((f = open(str, x? 1: 0)) < 0) { + pr("That didn't work"); + fclose(devtty); + goto again; + } + return f; +} +void pr(char *s) +{ + fputs(s, stderr); +} diff --git a/v7/cmd/find.c.orig#b00000 b/v7/cmd/find.c.orig#b00000 new file mode 100644 index 0000000..dc4b893 --- /dev/null +++ b/v7/cmd/find.c.orig#b00000 @@ -0,0 +1,724 @@ +/* find COMPILE: cc -o find -s -O -i find.c -lS */ +#include +#include +#include +#include +#define A_DAY 86400L /* a day full of seconds */ +#define EQ(x, y) (strcmp(x, y)==0) + +int Randlast; +char Pathname[200]; + +struct anode { + int (*F)(); + struct anode *L, *R; +} Node[100]; +int Nn; /* number of nodes */ +char *Fname; +long Now; +int Argc, + Ai, + Pi; +char **Argv; +/* cpio stuff */ +int Cpio; +short *Buf, *Dbuf, *Wp; +int Bufsize = 5120; +int Wct = 2560; + +long Newer; + +struct stat Statb; + +struct anode *exp(), + *e1(), + *e2(), + *e3(), + *mk(); +char *nxtarg(); +char Home[128]; +long Blocks; +char *rindex(); +char *sbrk(); +main(argc, argv) char *argv[]; +{ + struct anode *exlist; + int paths; + register char *cp, *sp = 0; + FILE *pwd, *popen(); + + time(&Now); + pwd = popen("pwd", "r"); + fgets(Home, 128, pwd); + pclose(pwd); + Home[strlen(Home) - 1] = '\0'; + Argc = argc; Argv = argv; + if(argc<3) { +usage: pr("Usage: find path-list predicate-list\n"); + exit(1); + } + for(Ai = paths = 1; Ai < (argc-1); ++Ai, ++paths) + if(*Argv[Ai] == '-' || EQ(Argv[Ai], "(") || EQ(Argv[Ai], "!")) + break; + if(paths == 1) /* no path-list */ + goto usage; + if(!(exlist = exp())) { /* parse and compile the arguments */ + pr("find: parsing error\n"); + exit(1); + } + if(Ai=Argc) { + strikes++; + Ai = Argc + 1; + return(""); + } + return(Argv[Ai++]); +} + +/* execution time functions */ +and(p) +register struct anode *p; +{ + return(((*p->L->F)(p->L)) && ((*p->R->F)(p->R))?1:0); +} +or(p) +register struct anode *p; +{ + return(((*p->L->F)(p->L)) || ((*p->R->F)(p->R))?1:0); +} +not(p) +register struct anode *p; +{ + return( !((*p->L->F)(p->L))); +} +glob(p) +register struct { int f; char *pat; } *p; +{ + return(gmatch(Fname, p->pat)); +} +print() +{ + puts(Pathname); + return(1); +} +mtime(p) +register struct { int f, t, s; } *p; +{ + return(scomp((int)((Now - Statb.st_mtime) / A_DAY), p->t, p->s)); +} +atime(p) +register struct { int f, t, s; } *p; +{ + return(scomp((int)((Now - Statb.st_atime) / A_DAY), p->t, p->s)); +} +ctime(p) +register struct { int f, t, s; } *p; +{ + return(scomp((int)((Now - Statb.st_ctime) / A_DAY), p->t, p->s)); +} +user(p) +register struct { int f, u, s; } *p; +{ + return(scomp(Statb.st_uid, p->u, p->s)); +} +ino(p) +register struct { int f, u, s; } *p; +{ + return(scomp((int)Statb.st_ino, p->u, p->s)); +} +group(p) +register struct { int f, u; } *p; +{ + return(p->u == Statb.st_gid); +} +links(p) +register struct { int f, link, s; } *p; +{ + return(scomp(Statb.st_nlink, p->link, p->s)); +} +size(p) +register struct { int f, sz, s; } *p; +{ + return(scomp((int)((Statb.st_size+511)>>9), p->sz, p->s)); +} +perm(p) +register struct { int f, per, s; } *p; +{ + register i; + i = (p->s=='-') ? p->per : 07777; /* '-' means only arg bits */ + return((Statb.st_mode & i & 07777) == p->per); +} +type(p) +register struct { int f, per, s; } *p; +{ + return((Statb.st_mode&S_IFMT)==p->per); +} +exeq(p) +register struct { int f, com; } *p; +{ + fflush(stdout); /* to flush possible `-print' */ + return(doex(p->com)); +} +ok(p) +struct { int f, com; } *p; +{ + int c; int yes; + yes = 0; + fflush(stdout); /* to flush possible `-print' */ + pr("< "), pr(Argv[p->com]), pr(" ... "), pr(Pathname), pr(" >? "); + fflush(stderr); + if((c=getchar())=='y') yes = 1; + while(c!='\n') + if(c==EOF) + exit(2); + else + c = getchar(); + if(yes) return(doex(p->com)); + return(0); +} + +#define MKSHORT(v, lv) {U.l=1L;if(U.c[0]) U.l=lv, v[0]=U.s[1], v[1]=U.s[0]; else U.l=lv, v[0]=U.s[0], v[1]=U.s[1];} +union { long l; short s[2]; char c[4]; } U; +long mklong(v) +short v[]; +{ + U.l = 1; + if(U.c[0] /* VAX */) + U.s[0] = v[1], U.s[1] = v[0]; + else + U.s[0] = v[0], U.s[1] = v[1]; + return U.l; +} +cpio() +{ +#define MAGIC 070707 + struct header { + short h_magic, + h_dev, + h_ino, + h_mode, + h_uid, + h_gid, + h_nlink, + h_rdev; + short h_mtime[2]; + short h_namesize; + short h_filesize[2]; + char h_name[256]; + } hdr; + register ifile, ct; + static long fsz; + register i; + + hdr.h_magic = MAGIC; + strcpy(hdr.h_name, !strncmp(Pathname, "./", 2)? Pathname+2: Pathname); + hdr.h_namesize = strlen(hdr.h_name) + 1; + hdr.h_uid = Statb.st_uid; + hdr.h_gid = Statb.st_gid; + hdr.h_dev = Statb.st_dev; + hdr.h_ino = Statb.st_ino; + hdr.h_mode = Statb.st_mode; + MKSHORT(hdr.h_mtime, Statb.st_mtime); + hdr.h_nlink = Statb.st_nlink; + fsz = hdr.h_mode & S_IFREG? Statb.st_size: 0L; + MKSHORT(hdr.h_filesize, fsz); + hdr.h_rdev = Statb.st_rdev; + if(EQ(hdr.h_name, "TRAILER!!!")) { + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + for(i = 0; i < 10; ++i) + bwrite(Buf, 512); + return; + } + if(!mklong(hdr.h_filesize)) { + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + return; + } + if((ifile = open(Fname, 0)) < 0) { +cerror: + pr("find: cannot copy "), pr(hdr.h_name), pr("\n"); + return; + } + bwrite((short *)&hdr, (sizeof hdr-256)+hdr.h_namesize); + for(fsz = mklong(hdr.h_filesize); fsz > 0; fsz -= 512) { + ct = fsz>512? 512: fsz; + if(read(ifile, (char *)Buf, ct) < 0) + goto cerror; + bwrite(Buf, ct); + } + close(ifile); + return; +} +newer() +{ + return Statb.st_mtime > Newer; +} + +/* support functions */ +scomp(a, b, s) /* funny signed compare */ +register a, b; +register char s; +{ + if(s == '+') + return(a > b); + if(s == '-') + return(a < (b * -1)); + return(a == b); +} + +doex(com) +{ + register np; + register char *na; + static char *nargv[50]; + static ccode; + + ccode = np = 0; + while (na=Argv[com++]) { + if(strcmp(na, ";")==0) break; + if(strcmp(na, "{}")==0) nargv[np++] = Pathname; + else nargv[np++] = na; + } + nargv[np] = 0; + if (np==0) return(9); + if(fork()) /*parent*/ wait(&ccode); + else { /*child*/ + chdir(Home); + execvp(nargv[0], nargv, np); + exit(1); + } + return(ccode ? 0:1); +} + +getunum(f, s) char *f, *s; { /* find user/group name and return number */ + register i; + register char *sp; + register c; + char str[20]; + FILE *pin; + + i = -1; + pin = fopen(f, "r"); + c = '\n'; /* prime with a CR */ + do { + if(c=='\n') { + sp = str; + while((c = *sp++ = getc(pin)) != ':') + if(c == EOF) goto RET; + *--sp = '\0'; + if(EQ(str, s)) { + while((c=getc(pin)) != ':') + if(c == EOF) goto RET; + sp = str; + while((*sp = getc(pin)) != ':') sp++; + *sp = '\0'; + i = atoi(str); + goto RET; + } + } + } while((c = getc(pin)) != EOF); + RET: + fclose(pin); + return(i); +} + +descend(name, fname, exlist) +struct anode *exlist; +char *name, *fname; +{ + int dir = 0, /* open directory */ + offset, + dsize, + entries, + dirsize; + struct direct dentry[32]; + register struct direct *dp; + register char *c1, *c2; + int i; + int rv = 0; + char *endofname; + + if(stat(fname, &Statb)<0) { + pr("find: bad status-- "), pr(name), pr("\n"); + return(0); + } + (*exlist->F)(exlist); + if((Statb.st_mode&S_IFMT)!=S_IFDIR) + return(1); + + for(c1 = name; *c1; ++c1); + if(*(c1-1) == '/') + --c1; + endofname = c1; + dirsize = Statb.st_size; + + if(chdir(fname) == -1) + return(0); + for(offset=0 ; offset < dirsize ; offset += 512) { /* each block */ + dsize = 512<(dirsize-offset)? 512: (dirsize-offset); + if(!dir) { + if((dir=open(".", 0))<0) { + pr("find: cannot open "), pr(name), pr("\n"); + rv = 0; + goto ret; + } + if(offset) lseek(dir, (long)offset, 0); + if(read(dir, (char *)dentry, dsize)<0) { + pr("find: cannot read "), pr(name), pr("\n"); + rv = 0; + goto ret; + } + if(dir > 10) { + close(dir); + dir = 0; + } + } else + if(read(dir, (char *)dentry, dsize)<0) { + pr("find: cannot read "), pr(name), pr("\n"); + rv = 0; + goto ret; + } + for(dp=dentry, entries=dsize>>4; entries; --entries, ++dp) { /* each directory entry */ + if(dp->d_ino==0 + || (dp->d_name[0]=='.' && dp->d_name[1]=='\0') + || (dp->d_name[0]=='.' && dp->d_name[1]=='.' && dp->d_name[2]=='\0')) + continue; + c1 = endofname; + *c1++ = '/'; + c2 = dp->d_name; + for(i=0; i<14; ++i) + if(*c2) + *c1++ = *c2++; + else + break; + *c1 = '\0'; + if(c1 == endofname) { /* ?? */ + rv = 0; + goto ret; + } + Fname = endofname+1; + if(!descend(name, Fname, exlist)) { + *endofname = '\0'; + chdir(Home); + if(chdir(Pathname) == -1) { + pr("find: bad directory tree\n"); + exit(1); + } + } + } + } + rv = 1; +ret: + if(dir) + close(dir); + if(chdir("..") == -1) { + *endofname = '\0'; + pr("find: bad directory "), pr(name), pr("\n"); + rv = 1; + } + return(rv); +} + +gmatch(s, p) /* string match as in glob */ +register char *s, *p; +{ + if (*s=='.' && *p!='.') return(0); + return amatch(s, p); +} + +amatch(s, p) +register char *s, *p; +{ + register cc; + int scc, k; + int c, lc; + + scc = *s; + lc = 077777; + switch (c = *p) { + + case '[': + k = 0; + while (cc = *++p) { + switch (cc) { + + case ']': + if (k) + return(amatch(++s, ++p)); + else + return(0); + + case '-': + k |= lc <= scc & scc <= (cc=p[1]); + } + if (scc==(lc=cc)) k++; + } + return(0); + + case '?': + caseq: + if(scc) return(amatch(++s, ++p)); + return(0); + case '*': + return(umatch(s, ++p)); + case 0: + return(!scc); + } + if (c==scc) goto caseq; + return(0); +} + +umatch(s, p) +register char *s, *p; +{ + if(*p==0) return(1); + while(*s) + if (amatch(s++, p)) return(1); + return(0); +} + +bwrite(rp, c) +register short *rp; +register c; +{ + register short *wp = Wp; + + c = (c+1) >> 1; + while(c--) { + if(!Wct) { +again: + if(write(Cpio, (char *)Dbuf, Bufsize)<0) { + Cpio = chgreel(1, Cpio); + goto again; + } + Wct = Bufsize >> 1; + wp = Dbuf; + ++Blocks; + } + *wp++ = *rp++; + --Wct; + } + Wp = wp; +} +chgreel(x, fl) +{ + register f; + char str[22]; + FILE *devtty; + struct stat statb; + + pr("find: can't "), pr(x? "write output": "read input"), pr("\n"); + fstat(fl, &statb); + if((statb.st_mode&S_IFMT) != S_IFCHR) + exit(1); +again: + pr("If you want to go on, type device/file name when ready\n"); + devtty = fopen("/dev/tty", "r"); + fgets(str, 20, devtty); + str[strlen(str) - 1] = '\0'; + if(!*str) + exit(1); + close(fl); + if((f = open(str, x? 1: 0)) < 0) { + pr("That didn't work"); + fclose(devtty); + goto again; + } + return f; +} +pr(s) +char *s; +{ + fputs(s, stderr); +} diff --git a/v7/cmd/od.1#000000 b/v7/cmd/od.1#000000 new file mode 100644 index 0000000..9e49295 --- /dev/null +++ b/v7/cmd/od.1#000000 @@ -0,0 +1,70 @@ +.TH OD 1 +.SH NAME +od \- octal dump +.SH SYNOPSIS +.B od +[ +.B \-bcdox +] [ file ] [ [ +.B + +]offset[ +.BR ". " "][" +\fBb\fR ] ] +.SH DESCRIPTION +.I Od +dumps +.I file +in +one or more formats +as +selected by the first argument. +If the first argument is missing, +.B \-o +is default. +The meanings of the format argument characters +are: +.TP 3 +.B b +Interpret bytes in octal. +.TP 3 +.B c +Interpret bytes in ASCII. +Certain non-graphic characters appear as C escapes: +null=\e0, +backspace=\eb, +formfeed=\ef, +newline=\en, +return=\er, +tab=\et; +others appear as 3-digit octal numbers. +.TP 3 +.B d +Interpret words in decimal. +.TP 3 +.B o +Interpret words in octal. +.TP 3 +.B x +Interpret words in hex. +.PP +The +.I file +argument specifies which file is to be dumped. +If no file argument is specified, +the standard input is used. +.PP +The offset argument specifies the offset +in the file where dumping is to commence. +This argument is normally interpreted +as octal bytes. +If `\fB.\fR' is appended, the offset is interpreted in +decimal. +If `\fBb\fR' is appended, the offset is interpreted in +blocks of 512 bytes. +If the file argument is omitted, +the offset argument must be preceded +.RB ` + '. +.PP +Dumping continues until end-of-file. +.SH "SEE ALSO" +adb(1) diff --git a/v7/cmd/od.c#b00008 b/v7/cmd/od.c#b00008 new file mode 100644 index 0000000..bc1f8e5 --- /dev/null +++ b/v7/cmd/od.c#b00008 @@ -0,0 +1,250 @@ +/* + * od -- octal (also hex, decimal, and character) dump + */ + +#include + +unsigned short word[8]; +unsigned short lastword[8]; +int conv; +int base = 010; +int max; +long addr; + +main(argc, argv) +char **argv; +{ + register char *p; + register n, f, same; + + + argv++; + f = 0; + if(argc > 1) { + p = *argv; + if(*p == '-') { + while(*p != '\0') { + switch(*p++) { + case 'o': + conv |= 001; + f = 6; + break; + case 'd': + conv |= 002; + f = 5; + break; + case 'x': + case 'h': + conv |= 010; + f = 4; + break; + case 'c': + conv |= 020; + f = 7; + break; + case 'b': + conv |= 040; + f = 7; + break; + } + if(f > max) + max = f; + } + argc--; + argv++; + } + } + if(!conv) { + max = 6; + conv = 1; + } + if(argc > 1) + if(**argv != '+') { + if (freopen(*argv, "r", stdin) == NULL) { + printf("cannot open %s\n", *argv); + exit(1); + } + argv++; + argc--; + } + if(argc > 1) + offset(*argv); + + same = -1; + for ( ; (n = fread((char *)word, 1, sizeof(word), stdin)) > 0; addr += n) { + if (same>=0) { + for (f=0; f<8; f++) + if (lastword[f] != word[f]) + goto notsame; + if (same==0) { + printf("*\n"); + same = 1; + } + continue; + } + notsame: + line(addr, word, (n+sizeof(word[0])-1)/sizeof(word[0])); + same = 0; + for (f=0; f<8; f++) + lastword[f] = word[f]; + for (f=0; f<8; f++) + word[f] = 0; + } + putn(addr, base, 7); + putchar('\n'); +} + +line(a, w, n) +long a; +unsigned short *w; +{ + register i, f, c; + + f = 1; + for(c=1; c; c<<=1) { + if((c&conv) == 0) + continue; + if(f) { + putn(a, base, 7); + putchar(' '); + f = 0; + } else + putchar('\t'); + for (i=0; i037 && c<0177) { + printf(" "); + putchar(c); + return; + } + switch(c) { + case '\0': + printf(" \\0"); + break; + case '\b': + printf(" \\b"); + break; + case '\f': + printf(" \\f"); + break; + case '\n': + printf(" \\n"); + break; + case '\r': + printf(" \\r"); + break; + case '\t': + printf(" \\t"); + break; + default: + putn((long)c, 8, 3); + } +} + +putn(n, b, c) +long n; +{ + register d; + + if(!c) + return; + putn(n/b, b, c-1); + d = n%b; + if (d > 9) + putchar(d-10+'a'); + else + putchar(d+'0'); +} + +pre(n) +{ + int i; + + for(i=n; i='0' && d<='9') + a = a*base + d - '0'; + else if (d>='a' && d<='f' && base==16) + a = a*base + d + 10 - 'a'; + else + break; + } + if (*s == '.') + s++; + if(*s=='b' || *s=='B') + a *= 512; + fseek(stdin, a, 0); + addr = a; +} diff --git a/v7/cmd/rev.1#000000 b/v7/cmd/rev.1#000000 new file mode 100644 index 0000000..870d051 --- /dev/null +++ b/v7/cmd/rev.1#000000 @@ -0,0 +1,11 @@ +.TH REV 1 +.SH NAME +rev \- reverse lines of a file +.SH SYNOPSIS +.B rev +[ file ] ... +.SH DESCRIPTION +.I Rev +copies the named files to the standard output, +reversing the order of characters in every line. +If no file is specified, the standard input is copied. diff --git a/v7/cmd/rev.c#b00008 b/v7/cmd/rev.c#b00008 new file mode 100644 index 0000000..32432ce --- /dev/null +++ b/v7/cmd/rev.c#b00008 @@ -0,0 +1,44 @@ +#include + +/* reverse lines of a file */ + +#define N 256 +char line[N]; +FILE *input; + +main(argc,argv) +char **argv; +{ + register i,c; + input = stdin; + do { + if(argc>1) { + if((input=fopen(argv[1],"r"))==NULL) { + fprintf(stderr,"rev: cannot open %s\n", + argv[1]); + exit(1); + } + } + for(;;){ + for(i=0;i=0) + putc(line[i],stdout); + putc('\n',stdout); + } +eof: + fclose(input); + argc--; + argv++; + } while(argc>1); +} diff --git a/v7/cmd/units.1#000000 b/v7/cmd/units.1#000000 new file mode 100644 index 0000000..1228167 --- /dev/null +++ b/v7/cmd/units.1#000000 @@ -0,0 +1,72 @@ +.if n .ds / / +.if t .ds / \z/\h'\w'*'u' +.TH UNITS 1 +.SH NAME +units \- conversion program +.SH SYNOPSIS +.B units +.SH DESCRIPTION +.I Units +converts quantities expressed +in various standard scales to +their equivalents in other scales. +It works interactively in this fashion: +.PP +.I " You have:" +inch +.br +.I " You want:" +cm +.br +.I " * 2.54000e+00 +.br +.I " \*/ 3.93701e\-01 +.PP +A quantity is specified as a multiplicative combination of +units optionally preceded by a numeric multiplier. +Powers are indicated by suffixed positive integers, +division by the usual sign: +.PP +.I " You have:" +15 pounds force/in2 +.br +.I " You want:" +atm +.br +.I " * 1.02069e+00" +.br +.I " \*/ 9.79730e\-01" +.PP +.I Units +only does multiplicative scale changes. +Thus it can convert Kelvin to Rankine, but not Centigrade to +Fahrenheit. +Most familiar units, +abbreviations, and metric prefixes are recognized, +together with a generous leavening of exotica +and a few constants of nature including: +.PP +.nf + pi ratio of circumference to diameter + c speed of light + e charge on an electron + g acceleration of gravity + force same as g + mole Avogadro's number + water pressure head per unit height of water + au astronomical unit +.PP +.fi +`Pound' is a unit of +mass. +Compound names are run together, e.g. `lightyear'. +British units that differ from their US counterparts +are prefixed thus: `brgallon'. +Currency is denoted `belgiumfranc', `britainpound', ... +.PP +For a complete list of units, `cat /usr/lib/units'. +.SH FILES +/usr/lib/units +.SH BUGS +Don't base your +financial plans on the currency conversions. diff --git a/v7/cmd/units.c#b00008 b/v7/cmd/units.c#b00008 new file mode 100644 index 0000000..ce3ee41 --- /dev/null +++ b/v7/cmd/units.c#b00008 @@ -0,0 +1,464 @@ +#include + +#define NDIM 10 +#define NTAB 601 +char *dfile = "/usr/local/lib/units"; +char *unames[NDIM]; +double getflt(); +int fperr(); +struct table *hash(); +struct unit +{ + double factor; + char dim[NDIM]; +}; + +struct table +{ + double factor; + char dim[NDIM]; + char *name; +} table[NTAB]; +char names[NTAB*10]; +struct prefix +{ + double factor; + char *pname; +} prefix[] = +{ + 1e-18, "atto", + 1e-15, "femto", + 1e-12, "pico", + 1e-9, "nano", + 1e-6, "micro", + 1e-3, "milli", + 1e-2, "centi", + 1e-1, "deci", + 1e1, "deka", + 1e2, "hecta", + 1e2, "hecto", + 1e3, "kilo", + 1e6, "mega", + 1e6, "meg", + 1e9, "giga", + 1e12, "tera", + 0.0, 0 +}; +FILE *inp; +int fperrc; +int peekc; +int dumpflg; + +main(argc, argv) +char *argv[]; +{ + register i; + register char *file; + struct unit u1, u2; + double f; + + if(argc>1 && *argv[1]=='-') { + argc--; + argv++; + dumpflg++; + } + file = dfile; + if(argc > 1) + file = argv[1]; + if ((inp = fopen(file, "r")) == NULL) { + printf("no table\n"); + exit(1); + } + signal(8, fperr); + init(); + +loop: + fperrc = 0; + printf("you have: "); + if(convr(&u1)) + goto loop; + if(fperrc) + goto fp; +loop1: + printf("you want: "); + if(convr(&u2)) + goto loop1; + for(i=0; ifactor); + f = 0; + for(i=0; idim[i], i, f); + if(f&1) { + putchar('/'); + f = 0; + for(i=0; idim[i], i, f); + } + putchar('\n'); +} + +pu(u, i, f) +{ + + if(u > 0) { + if(f&2) + putchar('-'); + if(unames[i]) + printf("%s", unames[i]); else + printf("*%c*", i+'a'); + if(u > 1) + putchar(u+'0'); + return(2); + } + if(u < 0) + return(1); + return(0); +} + +convr(up) +struct unit *up; +{ + register struct unit *p; + register c; + register char *cp; + char name[20]; + int den, err; + + p = up; + for(c=0; cdim[c] = 0; + p->factor = getflt(); + if(p->factor == 0.) + p->factor = 1.0; + err = 0; + den = 0; + cp = name; + +loop: + switch(c=get()) { + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + case '/': + case ' ': + case '\t': + case '\n': + if(cp != name) { + *cp++ = 0; + cp = name; + err |= lookup(cp, p, den, c); + } + if(c == '/') + den++; + if(c == '\n') + return(err); + goto loop; + } + *cp++ = c; + goto loop; +} + +lookup(name, up, den, c) +char *name; +struct unit *up; +{ + register struct unit *p; + register struct table *q; + register i; + char *cp1, *cp2; + double e; + + p = up; + e = 1.0; + +loop: + q = hash(name); + if(q->name) { + l1: + if(den) { + p->factor /= q->factor*e; + for(i=0; idim[i] -= q->dim[i]; + } else { + p->factor *= q->factor*e; + for(i=0; idim[i] += q->dim[i]; + } + if(c >= '2' && c <= '9') { + c--; + goto l1; + } + return(0); + } + for(i=0; cp1 = prefix[i].pname; i++) { + cp2 = name; + while(*cp1 == *cp2++) + if(*cp1++ == 0) { + cp1--; + break; + } + if(*cp1 == 0) { + e *= prefix[i].factor; + name = cp2-1; + goto loop; + } + } + for(cp1 = name; *cp1; cp1++); + if(cp1 > name+1 && *--cp1 == 's') { + *cp1 = 0; + goto loop; + } + printf("cannot recognize %s\n", name); + return(1); +} + +equal(s1, s2) +char *s1, *s2; +{ + register char *c1, *c2; + + c1 = s1; + c2 = s2; + while(*c1++ == *c2) + if(*c2++ == 0) + return(1); + return(0); +} + +init() +{ + register char *cp; + register struct table *tp, *lp; + int c, i, f, t; + char *np; + + cp = names; + for(i=0; iname = np; + lp->factor = 1.0; + lp->dim[i] = 1; + } + lp = hash(""); + lp->name = cp-1; + lp->factor = 1.0; + +l0: + c = get(); + if(c == 0) { + printf("%l units; %l bytes\n\n", i, cp-names); + if(dumpflg) + for(tp = &table[0]; tp < &table[NTAB]; tp++) { + if(tp->name == 0) + continue; + printf("%s", tp->name); + units(tp); + } + fclose(inp); + inp = stdin; + return; + } + if(c == '/') { + while(c != '\n' && c != 0) + c = get(); + goto l0; + } + if(c == '\n') + goto l0; + np = cp; + while(c != ' ' && c != '\t') { + *cp++ = c; + c = get(); + if (c==0) + goto l0; + if(c == '\n') { + *cp++ = 0; + tp = hash(np); + if(tp->name) + goto redef; + tp->name = np; + tp->factor = lp->factor; + for(c=0; cdim[c] = lp->dim[c]; + i++; + goto l0; + } + } + *cp++ = 0; + lp = hash(np); + if(lp->name) + goto redef; + convr(lp); + lp->name = np; + f = 0; + i++; + if(lp->factor != 1.0) + goto l0; + for(c=0; cdim[c]; + if(t>1 || (f>0 && t!=0)) + goto l0; + if(f==0 && t==1) { + if(unames[c]) + goto l0; + f = c+1; + } + } + if(f>0) + unames[f-1] = np; + goto l0; + +redef: + printf("redefinition %s\n", np); + goto l0; +} + +double +getflt() +{ + register c, i, dp; + double d, e; + int f; + + d = 0.; + dp = 0; + do + c = get(); + while(c == ' ' || c == '\t'); + +l1: + if(c >= '0' && c <= '9') { + d = d*10. + c-'0'; + if(dp) + dp++; + c = get(); + goto l1; + } + if(c == '.') { + dp++; + c = get(); + goto l1; + } + if(dp) + dp--; + if(c == '+' || c == '-') { + f = 0; + if(c == '-') + f++; + i = 0; + c = get(); + while(c >= '0' && c <= '9') { + i = i*10 + c-'0'; + c = get(); + } + if(f) + i = -i; + dp -= i; + } + e = 1.; + i = dp; + if(i < 0) + i = -i; + while(i--) + e *= 10.; + if(dp < 0) + d *= e; else + d /= e; + if(c == '|') + return(d/getflt()); + peekc = c; + return(d); +} + +get() +{ + register c; + + if(c=peekc) { + peekc = 0; + return(c); + } + c = getc(inp); + if (c == EOF) { + if (inp == stdin) { + printf("\n"); + exit(0); + } + return(0); + } + return(c); +} + +struct table * +hash(name) +char *name; +{ + register struct table *tp; + register char *np; + register unsigned h; + + h = 0; + np = name; + while(*np) + h = h*57 + *np++ - '0'; + h %= NTAB; + tp = &table[h]; +l0: + if(tp->name == 0) + return(tp); + if(equal(name, tp->name)) + return(tp); + tp++; + if(tp >= &table[NTAB]) + tp = table; + goto l0; +} + +fperr() +{ + + signal(8, fperr); + fperrc++; +} diff --git a/v7/cmd/units.c.orig#b00008 b/v7/cmd/units.c.orig#b00008 new file mode 100644 index 0000000..86e27de --- /dev/null +++ b/v7/cmd/units.c.orig#b00008 @@ -0,0 +1,464 @@ +#include + +#define NDIM 10 +#define NTAB 601 +char *dfile = "/usr/lib/units"; +char *unames[NDIM]; +double getflt(); +int fperr(); +struct table *hash(); +struct unit +{ + double factor; + char dim[NDIM]; +}; + +struct table +{ + double factor; + char dim[NDIM]; + char *name; +} table[NTAB]; +char names[NTAB*10]; +struct prefix +{ + double factor; + char *pname; +} prefix[] = +{ + 1e-18, "atto", + 1e-15, "femto", + 1e-12, "pico", + 1e-9, "nano", + 1e-6, "micro", + 1e-3, "milli", + 1e-2, "centi", + 1e-1, "deci", + 1e1, "deka", + 1e2, "hecta", + 1e2, "hecto", + 1e3, "kilo", + 1e6, "mega", + 1e6, "meg", + 1e9, "giga", + 1e12, "tera", + 0.0, 0 +}; +FILE *inp; +int fperrc; +int peekc; +int dumpflg; + +main(argc, argv) +char *argv[]; +{ + register i; + register char *file; + struct unit u1, u2; + double f; + + if(argc>1 && *argv[1]=='-') { + argc--; + argv++; + dumpflg++; + } + file = dfile; + if(argc > 1) + file = argv[1]; + if ((inp = fopen(file, "r")) == NULL) { + printf("no table\n"); + exit(1); + } + signal(8, fperr); + init(); + +loop: + fperrc = 0; + printf("you have: "); + if(convr(&u1)) + goto loop; + if(fperrc) + goto fp; +loop1: + printf("you want: "); + if(convr(&u2)) + goto loop1; + for(i=0; ifactor); + f = 0; + for(i=0; idim[i], i, f); + if(f&1) { + putchar('/'); + f = 0; + for(i=0; idim[i], i, f); + } + putchar('\n'); +} + +pu(u, i, f) +{ + + if(u > 0) { + if(f&2) + putchar('-'); + if(unames[i]) + printf("%s", unames[i]); else + printf("*%c*", i+'a'); + if(u > 1) + putchar(u+'0'); + return(2); + } + if(u < 0) + return(1); + return(0); +} + +convr(up) +struct unit *up; +{ + register struct unit *p; + register c; + register char *cp; + char name[20]; + int den, err; + + p = up; + for(c=0; cdim[c] = 0; + p->factor = getflt(); + if(p->factor == 0.) + p->factor = 1.0; + err = 0; + den = 0; + cp = name; + +loop: + switch(c=get()) { + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + case '/': + case ' ': + case '\t': + case '\n': + if(cp != name) { + *cp++ = 0; + cp = name; + err |= lookup(cp, p, den, c); + } + if(c == '/') + den++; + if(c == '\n') + return(err); + goto loop; + } + *cp++ = c; + goto loop; +} + +lookup(name, up, den, c) +char *name; +struct unit *up; +{ + register struct unit *p; + register struct table *q; + register i; + char *cp1, *cp2; + double e; + + p = up; + e = 1.0; + +loop: + q = hash(name); + if(q->name) { + l1: + if(den) { + p->factor /= q->factor*e; + for(i=0; idim[i] -= q->dim[i]; + } else { + p->factor *= q->factor*e; + for(i=0; idim[i] += q->dim[i]; + } + if(c >= '2' && c <= '9') { + c--; + goto l1; + } + return(0); + } + for(i=0; cp1 = prefix[i].pname; i++) { + cp2 = name; + while(*cp1 == *cp2++) + if(*cp1++ == 0) { + cp1--; + break; + } + if(*cp1 == 0) { + e *= prefix[i].factor; + name = cp2-1; + goto loop; + } + } + for(cp1 = name; *cp1; cp1++); + if(cp1 > name+1 && *--cp1 == 's') { + *cp1 = 0; + goto loop; + } + printf("cannot recognize %s\n", name); + return(1); +} + +equal(s1, s2) +char *s1, *s2; +{ + register char *c1, *c2; + + c1 = s1; + c2 = s2; + while(*c1++ == *c2) + if(*c2++ == 0) + return(1); + return(0); +} + +init() +{ + register char *cp; + register struct table *tp, *lp; + int c, i, f, t; + char *np; + + cp = names; + for(i=0; iname = np; + lp->factor = 1.0; + lp->dim[i] = 1; + } + lp = hash(""); + lp->name = cp-1; + lp->factor = 1.0; + +l0: + c = get(); + if(c == 0) { + printf("%l units; %l bytes\n\n", i, cp-names); + if(dumpflg) + for(tp = &table[0]; tp < &table[NTAB]; tp++) { + if(tp->name == 0) + continue; + printf("%s", tp->name); + units(tp); + } + fclose(inp); + inp = stdin; + return; + } + if(c == '/') { + while(c != '\n' && c != 0) + c = get(); + goto l0; + } + if(c == '\n') + goto l0; + np = cp; + while(c != ' ' && c != '\t') { + *cp++ = c; + c = get(); + if (c==0) + goto l0; + if(c == '\n') { + *cp++ = 0; + tp = hash(np); + if(tp->name) + goto redef; + tp->name = np; + tp->factor = lp->factor; + for(c=0; cdim[c] = lp->dim[c]; + i++; + goto l0; + } + } + *cp++ = 0; + lp = hash(np); + if(lp->name) + goto redef; + convr(lp); + lp->name = np; + f = 0; + i++; + if(lp->factor != 1.0) + goto l0; + for(c=0; cdim[c]; + if(t>1 || (f>0 && t!=0)) + goto l0; + if(f==0 && t==1) { + if(unames[c]) + goto l0; + f = c+1; + } + } + if(f>0) + unames[f-1] = np; + goto l0; + +redef: + printf("redefinition %s\n", np); + goto l0; +} + +double +getflt() +{ + register c, i, dp; + double d, e; + int f; + + d = 0.; + dp = 0; + do + c = get(); + while(c == ' ' || c == '\t'); + +l1: + if(c >= '0' && c <= '9') { + d = d*10. + c-'0'; + if(dp) + dp++; + c = get(); + goto l1; + } + if(c == '.') { + dp++; + c = get(); + goto l1; + } + if(dp) + dp--; + if(c == '+' || c == '-') { + f = 0; + if(c == '-') + f++; + i = 0; + c = get(); + while(c >= '0' && c <= '9') { + i = i*10 + c-'0'; + c = get(); + } + if(f) + i = -i; + dp -= i; + } + e = 1.; + i = dp; + if(i < 0) + i = -i; + while(i--) + e *= 10.; + if(dp < 0) + d *= e; else + d /= e; + if(c == '|') + return(d/getflt()); + peekc = c; + return(d); +} + +get() +{ + register c; + + if(c=peekc) { + peekc = 0; + return(c); + } + c = getc(inp); + if (c == EOF) { + if (inp == stdin) { + printf("\n"); + exit(0); + } + return(0); + } + return(c); +} + +struct table * +hash(name) +char *name; +{ + register struct table *tp; + register char *np; + register unsigned h; + + h = 0; + np = name; + while(*np) + h = h*57 + *np++ - '0'; + h %= NTAB; + tp = &table[h]; +l0: + if(tp->name == 0) + return(tp); + if(equal(name, tp->name)) + return(tp); + tp++; + if(tp >= &table[NTAB]) + tp = table; + goto l0; +} + +fperr() +{ + + signal(8, fperr); + fperrc++; +} diff --git a/v7/cmd/units.database#040000 b/v7/cmd/units.database#040000 new file mode 100644 index 0000000..4c89c0f --- /dev/null +++ b/v7/cmd/units.database#040000 @@ -0,0 +1,484 @@ +/ dimensions +m *a* +kg *b* +sec *c* +coul *d* +candela *e* +dollar *f* +radian *g* +bit *h* +erlang *i* +degC *j* + +/ constants + +fuzz 1 +pi 3.14159265358979323846 +c 2.997925+8 m/sec fuzz +g 9.80665 m/sec2 +au 1.49597871+11 m fuzz +mole 6.022169+23 fuzz +e 1.6021917-19 coul fuzz +energy c2 +force g +mercury 1.33322+5 kg/m2-sec2 +hg mercury + +/ dimensionless + +degree 1|180 pi-radian +circle 2 pi-radian +turn 2 pi-radian +grade .9 degree +arcdeg 1 degree +arcmin 1|60 arcdeg +ccs 1|36 erlang +arcsec 1|60 arcmin + +steradian radian2 +sphere 4 pi-steradian +sr steradian + +/ Time + +second sec +s sec +minute 60 sec +min minute +hour 60 min +hr hour +day 24 hr +da day +week 7 day +year 365.24219879 day fuzz +yr year +month 1|12 year +ms millisec +us microsec + +/ Mass + +gram millikg +gm gram +mg milligram +metricton kilokg + +/ Avoirdupois + +lb .45359237 kg +lbf lb g +pound lb +ounce 1|16 lb +oz ounce +dram 1|16 oz +dr dram +grain 1|7000 lb +gr grain +shortton 2000 lb +ton shortton +longton 2240 lb + +/ Apothecary + +scruple 20 grain +apdram 60 grain +apounce 480 grain +appound 5760 grain + +/ Length + +meter m +cm centimeter +mm millimeter +km kilometer +nm nanometer +micron micrometer +angstrom decinanometer + +inch 2.54 cm +in inch +foot 12 in +feet foot +ft foot +yard 3 ft +yd yard +rod 5.5 yd +rd rod +mile 5280 ft +mi mile + +british 1200|3937 m/ft +nmile 1852m + +acre 4840 yd2 + +cc cm3 +liter kilocc +ml milliliter + +/ US Liquid + +gallon 231 in3 +imperial 1.20095 +gal gallon +quart 1|4 gal +qt quart +pint 1|2 qt +pt pint + +floz 1|16 pt +fldr 1|8 floz + +/ US Dry + +dry 268.8025 in3/gallon fuzz +peck 8 dry-quart +pk peck +bushel 4 peck +bu bushel + +/ British + +brgallon 277.420 in3 fuzz +brquart 1|4 brgallon +brpint 1|2 brquart +brfloz 1|20 brpint +brpeck 554.84 in3 fuzz +brbushel 4 brpeck + +/ Energy Work + +newton kg-m/sec2 +nt newton +joule nt-m +cal 4.1868 joule + +/ Electrical + +coulomb coul +ampere coul/sec +amp ampere +watt joule/sec +volt watt/amp +ohm volt/amp +mho /ohm +farad coul/volt +henry sec2/farad +weber volt-sec + +/ Light + +cd candela +lumen cd sr +lux cd sr/m2 + +/ Money +/ epoch Nov 10, 1978 wall st j + +$ dollar +argentinapeso .0011 $ +australiadollar 1.1560 $ +austriaschilling .0726 $ +belgiumfranc .0333 $ +brazilcruzeiro .0512 $ +britainpound 1.9705 $ +brpound britainpound +canadadollar .8525 $ +colombiapeso .0279 $ +denmarkkrone .1927 $ +equadorsucre .0404 $ +finlandmarkka .2524 $ +francefranc .2336 $ +greecedrachma .0284 $ +hongkongdollar .2096 $ +indiarupee .1275 $ +indonesiarupiah .00245 $ +iranrial .0144 $ +iraqdinar 3.44 $ +israelpound .0540 $ +italylira .001198 $ +japanyen .005332 $ +lebanonpound .3340 $ +malaysiadollar .4595 $ +mexicopeso .04394 $ +netherlandsguilder .4924 $ +newzealanddollar 1.0660 $ +norwaykrone .1996 $ +pakistanrupee .1020 $ +perusol .0067 $ +phillippinespeso .1365 $ +portugalescudo .0218 $ +saudiarabiariyal .3029 $ +singaporedollar .4615 $ +southafricarand 1.1522 $ +southkoreawon .0021 $ +spainpeseta .01415 $ +swedenkrona .2305 $ +switzerlandfranc .6171 $ +thailandbhat .050 $ +uruguaypeso .1546 $ +usdollar $ +venezuelabolivar .2331 $ +germanymark .5306 $ + +mark germanymark +bolivar venezuelabolivar +peseta spainpeseta +rand southafricarand +escudo portugalescudo +sol perusol +guilder netherlandsguilder +peso mexicopeso +yen japanyen +lira italylira +dinar iraqdinar +rial iranrial +rupee indiarupee +drachma greecedrachma +franc francefranc +markka finlandmarkka +sucre equadorsucre +poundsterling britainpound +cruzeiro brazilcruzeiro + +/ PDP-11 + +baud bit/sec +byte 8 bit +word 2 byte +block 512 byte +K 1024 word +tc 578 block +rktrack 12 block +rkcylinder 2 rktrack +rk 203 rkcylinder +rptrack 10 block +rpcylinder 20 rptracks +rp 406 rpcylinder +rftrack 8 block +rfshoe 8 rftrack +rfdisk 16 rfshoe +rf 2 rfdisk + +/ Trivia + +% 1|100 +admiraltyknot 6080 ft/hr +apostilb cd/pi-m2 +are 1+2 m2 +arpentcan 27.52 mi +arpentlin 191.835 ft +astronomicalunit au +atmosphere 1.01325+5 nt/m2 +atm atmosphere +atomicmassunit 1.66044-27 kg fuzz +amu atomicmassunit +bag 94 lb +bakersdozen 13 +bar 1+5 nt/m2 +barie 1-1 nt/m2 +barleycorn 1|3 in +barn 1-28 m2 +barrel 42 gal +barye 1-1 nt/m2 +bev 1+9 e-volt +biot 10 amp +blondel cd/pi-m2 +boardfoot 144 in3 +bolt 40 yd +bottommeasure 1|40 in +britishthermalunit 1.05506+3 joule fuzz +btu britishthermalunit +refrigeration 12000 btu/ton-hour +buck dollar +cable 720 ft +caliber 1-2 in +calorie cal +carat 205 mg +cent centidollar +cental 100 lb +centesimalminute 1-2 grade +centesimalsecond 1-4 grade +century 100 year +cfs ft3/sec +chain 66 ft +circularinch 1|4 pi-in2 +circularmil 1-6|4 pi-in2 +clusec 1-8 mm-hg m3/s +coomb 4 bu +cord 128 ft3 +cordfoot cord +crith 9.06-2 gm +cubit 18 in +cup 1|2 pt +curie 3.7+10 /sec +dalton amu +decade 10 yr +dipotre /m +displacementton 35 ft3 +doppelzentner 100 kg +dozen 12 +drop .03 cm3 +dyne cm-gm/sec2 +electronvolt e-volt +ell 45 in +engineerschain 100 ft +engineerslink 100|100 ft +equivalentfootcandle lumen/pi-ft2 +equivalentlux lumen/pi-m2 +equivalentphot cd/pi-cm2 +erg cm2-gm/sec2 +ev e-volt +faraday 9.652+4 coul +fathom 6 ft +fermi 1-15 m +fifth 4|5 qt +fin 5 dollar +finger 7|8 in +firkin 9 gal +footcandle lumen/ft2 +footlambert cd/pi-ft2 +fortnight 14 da +franklin 3.33564-10 coul +frigorie kilocal +furlong 220 yd +galileo 1-2 m/sec2 +gamma 1-9 weber/m2 +gauss 1-4 weber/m2 +geodeticfoot british-ft +geographicalmile 1852 m +gilbert 7.95775-1 amp +gill 1|4 pt +gross 144 +gunterschain 22 yd +hand 4 in +hectare 1+4 m2 +hefnercandle .92 cd +hertz /sec +hogshead 2 barrel +hd hogshead +homestead 1|4 mi2 +horsepower 550 ft-lb-g/sec +hp horsepower +hyl gm force sec2/m +hz /sec +imaginarycubicfoot 1.4 ft3 +jeroboam 4|5 gal +karat 1|24 +kcal kilocal +kcalorie kilocal +kev 1+3 e-volt +key kg +khz 1+3 /sec +kilderkin 18 gal +knot nmile/hr +lambert cd/pi-cm2 +langley cal/cm2 +last 80 bu +league 3 mi +lightyear c-yr +line 1|12 in +link 66|100 ft +longhundredweight 112 lb +longquarter 28 lb +lusec 1-6 mm-hg m3/s +mach 331.46 m/sec +magnum 2 qt +marineleague 3 nmile +maxwell 1-8 weber +metriccarat 200 mg +mev 1+6 e-volt +mgd megagal/day +mh millihenry +mhz 1+6 /sec +mil 1-2 in +millenium 1000 year +minersinch 1.5 ft3/min +minim 1|60 fldr +mo month +mpg mile/gal +mph mile/hr +nail 1|16 yd +nauticalmile nmile +nit cd/m2 +noggin 1|8 qt +nox 1-3 lux +ns nanosec +oersted 2.5+2 pi-amp/m +oe oersted +pace 36 in +palm 3 in +parasang 3.5 mi +parsec au-radian/arcsec +pascal nt/m2 +pc parsec +pennyweight 1|20 oz +percent % +perch rd +pf picofarad +phot lumen/cm2 +pica 1|6 in +pieze 1+3 nt/m2 +pipe 4 barrel +point 1|72 in +poise gm/cm-sec +pole rd +poundal ft-lb/sec2 +pdl poundal +proof 1|200 +psi lb-g/in2 +quarter 9 in +quartersection 1|4 mi2 +quintal 100 kg +quire 25 +rad 100 erg/gm +ream 500 +registerton 100 ft3 +rehoboam 156 floz +rhe 10 m2/nt-sec +rontgen 2.58-4 curie/kg +rood 1.21+3 yd +rope 20 ft +rutherford 1+6 /sec +rydberg 1.36054+1 ev +sabin 1 ft2 +sack 3 bu +seam 8 bu +section mi2 +shippington 40 ft3 +shorthundredweight 100 lb +shortquarter 25 lb +siemens /ohm +sigma microsec +skein 120 yd +skot 1-3 apostilb +slug lb-g-sec2/ft +span 9 in +spat 4 pi sr +spindle 14400 yd +square 100 ft2 +stere m3 +sthene 1+3 nt +stilb cd/cm2 +stoke 1-4 m2/sec +stone 14 lb +strike 2 bu +surveyfoot british-ft +surveyorschain 66 ft +surveyorslink 66|100 ft +tablespoon 4 fldr +teaspoon 4|3 fldr +tesla weber/m2 +therm 1+5 btu +thermie 1+6 cal +timberfoot ft3 +tnt 4.6+6 m2/sec2 +tonne 1+6 gm +torr mm hg +township 36 mi2 +tun 8 barrel +water .22491|2.54 kg/m2-sec2 +wey 40 bu +weymass 252 lb +Xunit 1.00202-13m +k 1.38047-16 erg/degC diff --git a/v7/games/Makefile#b00000 b/v7/games/Makefile#b00000 new file mode 100644 index 0000000..68976e9 --- /dev/null +++ b/v7/games/Makefile#b00000 @@ -0,0 +1,29 @@ +all: arithmetic fish fortune hangman quiz wump + +arithmetic: arithmetic.c + occ -I /usr/include -o arithmetic arithmetic.c + +fish: fish.c + occ -I /usr/include -o fish fish.c + +fortune: fortune.c + occ -I /usr/include -o fortune fortune.c + +hangman: hangman.c + occ -I /usr/include -o hangman hangman.c + +quiz: quiz.c + occ -I /usr/include -o quiz quiz.c + +wump: wump.c + occ -I /usr/include -o wump wump.c + +clean: + cp -p rm -f *.o *.a *.root arithmetic fish fortune hangman quiz wump + +install: all + cp lib/fortunes /usr/local/games/lib + cp quiz.k/* /usr/local/games/quiz.k + cp words /usr/local/dict + cp arithmetic fish fortune hangman quiz wump /usr/local/games + diff --git a/v7/games/WORDS#000000 b/v7/games/WORDS#000000 new file mode 100644 index 0000000..b9bb0a3 --- /dev/null +++ b/v7/games/WORDS#000000 @@ -0,0 +1,24001 @@ +10th +1st +2nd +3rd +4th +5th +6th +7th +8th +9th +a +A&M +A&P +a's +AAA +AAAS +Aaron +AAU +ABA +Ababa +aback +abalone +abandon +abase +abash +abate +abater +abbas +abbe +abbey +abbot +Abbott +abbreviate +abc +abdicate +abdomen +abdominal +abduct +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberrate +abet +abetted +abeyance +abeyant +abhorred +abhorrent +abide +Abidjan +Abigail +abject +ablate +ablaze +able +ablution +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 +absence +absent +absentee +absenteeism +absentia +absentminded +absinthe +absolute +absolution +absolve +absorb +absorbent +absorption +absorptive +abstain +abstention +abstinent +abstract +abstractor +abstruse +absurd +abuilding +abundant +abusable +abuse +abusive +abut +abutted +abutting +abysmal +abyss +Abyssinia +AC +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 +acclimatize +accolade +accommodate +accompaniment +accompanist +accompany +accomplice +accomplish +accord +accordant +accordion +accost +account +accountant +accouter +Accra +accredit +accreditate +accretion +accrual +accrue +acculturate +accumulate +accuracy +accurate +accusation +accusative +accuse +accustom +ace +acetate +acetic +acetone +acetylene +ache +achieve +Achilles +aching +achromatic +acid +acidic +acidulous +Ackerman +Ackley +acknowledge +acknowledgeable +ACM +acme +acolyte +acorn +acoustic +acquaint +acquaintance +acquiesce +acquiescent +acquire +acquisition +acquisitive +acquit +acquittal +acquitting +acre +acreage +acrid +acrobacy +acrobat +acrobatic +acronym +acropolis +across +acrylate +acrylic +ACS +act +Actaeon +actinic +actinide +actinium +actinometer +activate +activation +activism +Acton +actor +actress +Acts +actual +actuarial +actuate +acuity +acumen +acute +acyclic +ad +Ada +adage +adagio +Adair +Adam +adamant +Adams +Adamson +adapt +adaptation +adaptive +add +added +addend +addenda +addendum +addict +Addis +Addison +addition +additional +additive +addle +address +addressee +Addressograph +adduce +Adelaide +Adele +Adelia +Aden +adenoma +adept +adequacy +adequate +adhere +adherent +adhesion +adhesive +adiabatic +adieu +adipic +Adirondack +adjacent +adjectival +adjective +adjoin +adjoint +adjourn +adjudge +adjudicate +adjunct +adjust +adjutant +Adkins +Adler +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 +adore +adorn +adrenal +adrenaline +Adrian +Adriatic +Adrienne +adrift +adroit +adsorb +adsorbate +adsorption +adsorptive +adulate +adult +adulterate +adulterous +adultery +adulthood +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 +Aerobacter +aerobic +aerodynamic +aerogene +aeronautic +aerosol +aerospace +Aeschylus +aesthete +aesthetic +afar +affable +affair +affect +affectate +affectionate +afferent +affiance +affidavit +affiliate +affine +affinity +affirm +affirmation +affirmative +affix +afflict +affluence +affluent +afford +afforest +afforestation +affront +Afghan +Afghanistan +aficionado +afield +afire +aflame +afloat +afoot +aforementioned +aforesaid +aforethought +afraid +afresh +Africa +afro +aft +aftereffect +afterglow +afterimage +afterlife +aftermath +afternoon +afterthought +afterward +again +against +Agamemnon +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 +agone +agony +agouti +agrarian +agree +agreeable +agreed +agreeing +Agricola +agricultural +agriculture +agrimony +ague +Agway +ah +ahead +ahem +Ahmadabad +ahoy +aid +Aida +aide +Aides +Aiken +ail +ailanthus +aile +aileron +aim +ain't +Ainu +air +airborne +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 +Akers +akin +Akron +ala +Alabama +Alabamian +alabaster +alacrity +alai +Alameda +Alamo +alan +alarm +Alaska +alb +alba +albacore +Albania +Albanian +Albany +albatross +albeit +Alberich +Albert +Alberta +Alberto +Albrecht +Albright +album +albumin +Albuquerque +Alcestis +alchemy +Alcmena +Alcoa +alcohol +alcoholic +alcoholism +Alcott +alcove +Aldebaran +aldehyde +Alden +alder +alderman +aldermen +Aldrich +aldrin +ale +Alec +Aleck +aleph +alert +alewife +Alex +Alexander +Alexandra +Alexandre +Alexandria +Alexei +Alexis +alfalfa +alfonso +Alfred +Alfredo +alfresco +alga +algae +algaecide +algal +algebra +algebraic +Algenib +Alger +Algeria +Algerian +Algiers +alginate +Algol +Algonquin +algorithm +algorithmic +Alhambra +alia +alias +alibi +Alice +Alicia +alien +alienate +alight +align +alike +alimony +aliphatic +aliquot +Alison +Alistair +alive +alizarin +alkali +alkaline +alkaloid +alkane +alkene +all +Allah +allay +allegate +allege +Allegheny +allegiant +allegoric +allegory +Allegra +allegro +allele +allemand +Allen +Allentown +allergic +allergy +alleviate +alley +alleyway +alliance +allied +alligator +Allis +Allison +alliterate +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 +alpenstock +Alpert +alpha +alphabet +alphabetic +alphanumeric +Alpheratz +Alphonse +alpine +Alps +already +Alsatian +also +Alsop +Altair +altar +alter +alterate +altercate +alterman +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 +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 +ambling +ambrose +ambrosia +ambrosial +ambulant +ambulate +ambulatory +ambuscade +ambush +Amelia +ameliorate +amen +amend +amende +Amerada +America +American +Americana +Americanism +americium +Ames +amethyst +amethystine +Amherst +ami +amicable +amid +amide +amidst +amigo +amino +aminobenzoic +amiss +amity +Amman +Ammerman +ammeter +ammo +ammonia +ammoniac +ammonium +ammunition +Amoco +amoeba +amoebae +amok +among +amongst +amoral +amorphous +amort +Amos +amount +amperage +ampere +ampersand +Ampex +amphetamine +amphibian +amphibious +amphibole +amphibology +ample +amplifier +amplify +amplitude +amply +amputate +amra +Amsterdam +Amtrak +amulet +amuse +amy +amygdaloid +an +ana +Anabaptist +Anabel +anachronism +anachronistic +anaconda +anaerobic +anaglyph +anagram +Anaheim +analeptic +analgesic +analogous +analogue +analogy +analyses +analysis +analyst +analytic +anamorphic +anaplasmosis +anarch +anarchic +anarchy +anastigmat +anastigmatic +anastomosis +anastomotic +anathema +Anatole +anatomic +anatomy +ancestor +ancestral +ancestry +anchor +anchorage +anchorite +anchoritism +anchovy +ancient +ancillary +and +Andean +Andersen +Anderson +Andes +andesine +andesite +Andorra +Andover +Andre +Andrea +Andrei +Andrew +Andrews +Andromache +Andromeda +Andy +anecdotal +anecdote +anemone +anent +anew +angel +Angela +Angeles +angelfish +angelic +Angelica +Angelina +Angeline +Angelo +anger +Angie +angiosperm +angle +Angles +Anglican +Anglicanism +anglicize +angling +Anglo +Anglophobia +Angola +Angora +angry +angst +angstrom +anguish +angular +Angus +anharmonic +Anheuser +anhydride +anhydrite +anhydrous +ani +aniline +animadversion +animadvert +animal +animate +animism +animosity +anion +anionic +anise +aniseikonic +anisotropic +anisotropy +Anita +Ankara +ankle +Ann +Anna +annal +Annale +Annalen +Annapolis +Anne +anneal +Annette +annex +Annie +annihilate +anniversary +annotate +announce +annoy +annoyance +annual +annuity +annul +annular +annuli +annulled +annulling +annulus +annum +annunciate +anode +anodic +anomalous +anomaly +anomie +anonymity +anonymous +anorexia +anorthic +anorthosite +another +Anselm +Anselmo +ANSI +answer +ant +antacid +Antaeus +antagonism +antagonist +antagonistic +antarctic +Antarctica +Antares +ante +anteater +antebellum +antecedent +antedate +antelope +antenna +antennae +anterior +anthem +anther +anthology +Anthony +anthracite +anthracnose +anthropogenic +anthropology +anthropomorphic +anti +antic +anticipate +anticipatory +Antietam +antigen +Antigone +antimony +Antioch +antipasto +antipathy +antiperspirant +antiphonal +antipodes +antiquarian +antiquary +antiquated +antique +antiquity +antisemitic +antisemitism +antithetic +antler +Antoine +Antoinette +Anton +Antonio +Antony +antonym +anus +anvil +anxiety +anxious +any +anybody +anybody'd +anyhow +anyone +anyplace +anything +anyway +anywhere +aorta +apache +apart +apartheid +apathetic +apathy +ape +aperiodic +aperture +apex +aphasia +aphasic +aphelion +aphid +aphorism +Aphrodite +apices +apiece +aplomb +apocalypse +apocalyptic +Apocrypha +apocryphal +apogee +Apollo +Apollonian +apologetic +apologia +apology +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 +applied +applique +apply +appoint +appointe +appointee +apportion +apposite +apposition +appraisal +appraise +appreciable +appreciate +apprehend +apprehension +apprehensive +apprentice +apprise +approach +approbation +appropriable +appropriate +approval +approve +approximable +approximant +approximate +apricot +April +apron +apropos +APS +apse +apt +aptitude +aqua +aquarium +Aquarius +aquatic +aqueduct +aqueous +Aquila +Aquinas +Arab +arabesque +Arabia +Arabic +Araby +Arachne +arachnid +arbiter +arbitrage +arbitrary +arbitrate +arboreal +arboretum +arbutus +arc +arcade +Arcadia +arcana +arcane +arccos +arccosine +arch +archae +archaic +archaism +archangel +archbishop +archdiocese +archenemy +Archer +archery +archetype +archetypical +archfool +Archibald +Archimedes +arching +archipelago +architect +architectonic +architectural +architecture +archival +archive +arcing +arcsin +arcsine +arctan +arctangent +arctic +Arcturus +Arden +ardency +ardent +arduous +are +area +areaway +areawide +aren't +arena +arenaceous +Arequipa +Ares +Argentina +argillaceous +Argive +argo +argon +Argonaut +Argonne +argot +argue +argument +argumentation +argumentative +Argus +arhat +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 +Armenian +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 +arthritis +Arthur +artichoke +article +articulate +articulatory +Artie +artifact +artifice +artificial +artillery +artisan +artistry +Arturo +artwork +arty +Aruba +arum +aryl +as +asbestos +ascend +ascendant +ascension +ascent +ascertain +ascetic +asceticism +ascomycetes +ascribe +ascription +aseptic +ash +ashame +ashen +Asher +Asheville +Ashland +Ashley +ashman +ashmen +Ashmolean +ashore +ashtray +ashy +Asia +Asiatic +aside +Asilomar +asinine +ask +askance +askew +asleep +asocial +asparagus +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 +associative +assonant +assort +assuage +assume +assumption +assurance +assure +Assyria +Assyriology +Astarte +astatine +aster +asteria +asterisk +asteroid +asteroidal +asthma +astigmat +astigmatic +astigmatism +ASTM +astonish +Astor +Astoria +astound +astraddle +astral +astray +astride +astringent +astronaut +astronautic +astronomer +astronomic +astronomy +astrophysical +astrophysics +astute +Asuncion +asunder +asylum +asymmetry +asymptote +asymptotic +asynchronous +asynchrony +at +AT&T +Atalanta +atavism +atavistic +Atchison +ate +Athabascan +atheism +atheist +Athena +Athenian +Athens +athlete +athletic +athwart +Atkins +Atkinson +Atlanta +atlantes +atlantic +Atlantica +Atlantis +atlas +atmosphere +atmospheric +atom +atomic +atonal +atone +atop +Atreus +atrocious +atrocity +atrophic +atrophy +Atropos +attach +attache +attack +attain +attainder +attempt +attend +attendant +attendee +attention +attentive +attenuate +attest +attestation +attic +Attica +attire +attitude +attorney +attract +attribute +attribution +attributive +attrition +attune +Atwater +Atwood +atypic +Auberge +Aubrey +auburn +auction +auctioneer +audacious +audacity +audible +audience +audio +audiotape +audiovisual +audit +audition +auditor +auditorium +auditory +Audrey +Audubon +Auerbach +Aug +Augean +auger +augment +augmentation +augur +august +Augusta +Augustan +Augustine +Augustus +auk +aunt +auntie +aura +aural +Aurelius +aureomycin +auric +Auriga +aurora +Auschwitz +auspices +auspicious +austere +Austin +Australia +Australis +australite +Austria +authentic +authenticate +author +authoritarian +authoritative +autism +autistic +auto +autobiography +autoclave +autocollimate +autocorrelate +autocracy +autocrat +autocratic +autograph +automat +automata +automate +automatic +automaton +automobile +automotive +autonomic +autonomous +autonomy +autopsy +autosuggestible +autotransformer +autumn +autumnal +auxiliary +avail +avalanche +avarice +avaricious +Ave +avenge +Aventine +avenue +aver +average +averred +averring +averse +aversion +aversive +avert +avertive +Avery +Avesta +aviary +aviate +aviatrix +avid +avionic +Avis +Aviv +avocado +avocate +avocet +Avogadro +avoid +avoidance +Avon +avow +await +awake +awaken +award +aware +awash +away +awe +awesome +awful +awhile +awkward +awl +awn +awoke +awry +ax +axe +axes +axial +axiology +axiom +axiomatic +axis +axle +axon +aye +Ayers +Aylesbury +azalea +Azerbaijan +azimuth +azimuthal +Aztec +Aztecan +azure +b +b's +babbitt +babble +Babcock +babe +Babel +baboon +baby +babyhood +Babylon +Babylonian +babysat +babysit +baccarat +Bacchus +Bach +bachelor +bacilli +bacillus +back +backboard +backbone +backdrop +backfill +backgammon +background +backhand +backlash +backlog +backorder +backpack +backplane +backplate +backside +backspace +backstage +backstitch +backstop +backtrack +backup +backward +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 +Baird +bait +bake +Bakelite +Bakersfield +bakery +Bakhtiari +baklava +Baku +balance +Balboa +balcony +bald +baldpate +Baldwin +baldy +bale +baleen +Balfour +Bali +Balinese +balk +Balkan +balky +ball +ballad +Ballard +ballast +balled +ballerina +ballet +balletomane +ballfield +balloon +ballot +ballroom +ballyhoo +balm +balmy +balsa +balsam +Baltic +Baltimore +Baltimorean +balustrade +Balzac +bam +Bamako +Bamberger +Bambi +bamboo +ban +banal +banana +Banbury +band +bandage +bandgap +bandit +bandpass +bandstand +bandstop +bandwagon +bandwidth +bandy +bane +baneberry +bang +bangkok +Bangladesh +bangle +Bangor +Bangui +banish +banister +banjo +bank +bankrupt +bankruptcy +Banks +banquet +banshee +bantam +banter +Bantu +Bantus +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 +barefaced +barefoot +barfly +bargain +barge +baritone +barium +bark +barkeep +barley +Barlow +barn +Barnabas +barnacle +Barnard +Barnes +Barnet +Barnett +Barney +Barnhard +barnstorm +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 +basal +base +baseball +baseband +baseboard +Basel +baseline +baseman +basemen +baseplate +bash +bashaw +basic +basidiomycetes +basil +basilar +basilisk +basin +basis +bask +basket +basketball +basophilic +bass +Bassett +bassi +bassinet +basso +basswood +bastard +baste +bastion +bat +Batavia +batch +Batchelder +bate +bateau +Bateman +bater +Bates +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 +bayed +Bayesian +Baylor +bayonet +Bayonne +bayou +Bayport +Bayreuth +bazaar +be +beach +beachhead +beacon +bead +beadle +beady +beak +beam +bean +bear +bearberry +beard +Beardsley +bearish +beast +beat +beaten +beater +beatific +beatify +beatitude +beatnik +Beatrice +beau +Beaujolais +Beaumont +Beauregard +beauteous +beautify +beauty +beaux +beaver +bebop +becalm +became +because +Bechtel +beck +Becker +becket +Beckman +beckon +Becky +become +bed +bedazzle +bedbug +bedfast +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 +beet +Beethoven +beetle +befall +befallen +befell +befit +befitting +befog +before +beforehand +befoul +befuddle +beg +began +beget +begetting +beggar +beggary +begging +begin +beginner +beginning +begonia +begotten +begrudge +beguile +begun +behalf +behave +behavioral +behead +beheld +behind +behold +beige +being +Beirut +bel +Bela +belate +belch +Belfast +belfry +Belgian +Belgium +Belgrade +belie +belief +believe +belittle +bell +Bella +belladonna +Bellamy +Bellatrix +bellboy +belle +bellflower +bellhop +bellicose +belligerent +Bellingham +Bellini +bellman +bellmen +bellow +bellum +bellwether +belly +bellyache +Belmont +Beloit +belong +belove +below +Belshazzar +belt +Beltsville +belvedere +belvidere +belying +BEMA +bemadden +beman +bemoan +bemuse +Ben +bench +benchmark +bend +Bender +Bendix +beneath +Benedict +Benedictine +benediction +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 +Beowulf +beplaster +bequeath +bequest +berate +Berea +bereave +bereft +Berenices +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 +beside +besiege +besmirch +besotted +bespeak +bespectacled +bespoke +Bess +Bessel +Bessemer +Bessie +best +bestial +bestir +bestow +bestowal +bestseller +bestselling +bestubble +bet +beta +betatron +betel +Betelgeuse +beth +bethel +Bethesda +Bethlehem +bethought +betide +betoken +betony +betray +betrayal +betrayer +betroth +betrothal +Betsey +Betsy +Bette +bettor +Betty +between +betwixt +bevel +beverage +Beverly +bevy +bewail +beware +bewhisker +bewilder +bewitch +bey +beyond +bezel +bhoy +Bhutan +bianco +bias +biaxial +bib +bibb +Bible +biblical +bibliography +bibliophile +bicameral +bicarbonate +bicep +biceps +bichromate +bicker +biconcave +biconnected +bicycle +bid +biddable +biddy +bide +bidiagonal +bidirectional +bien +biennial +biennium +bifocal +bifurcate +big +Bigelow +Biggs +bigot +bigotry +biharmonic +bijouterie +bikini +bilateral +bilayer +bile +bilge +bilharziasis +bilinear +bilingual +bilk +bill +billboard +billet +billiard +Billie +Billiken +Billings +billion +billionth +billow +billy +Biltmore +bimetallic +bimetallism +Bimini +bimodal +bimolecular +bimonthly +bin +binary +binaural +bind +bindery +bindle +bing +binge +Bingham +Binghamton +bingle +Bini +binocular +binomial +binuclear +biography +biology +Biometrika +biometry +biopsy +biota +bipartisan +bipartite +biplane +bipolar +biracial +birch +bird +birdbath +birdie +birdlike +birdseed +birdwatch +birefringent +Birgit +Birmingham +birth +birthday +birthplace +birthright +biscuit +bisect +bishop +bishopric +Bismarck +Bismark +bismuth +bison +bisque +Bissau +bistable +bistate +bit +bitch +bite +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 +blackjack +blackmail +Blackman +blackout +blacksmith +Blackstone +Blackwell +bladder +bladdernut +blade +Blaine +Blair +Blake +blame +blameworthy +blanc +blanch +Blanchard +Blanche +bland +blandish +blank +blanket +blare +blaspheme +blasphemous +blasphemy +blast +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 +blister +blithe +blitz +blizzard +bloat +blob +bloc +Bloch +block +blockade +blockage +blockhouse +blocky +bloke +Blomberg +Blomquist +blond +blonde +blood +bloodbath +bloodhound +bloodroot +bloodshed +bloodshot +bloodstain +bloodstone +bloodstream +bloody +bloom +Bloomfield +Bloomington +bloop +blossom +blot +blotch +blouse +blow +blowback +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 +blunt +blur +blurry +blurt +blush +bluster +blustery +blutwurst +Blythe +BMW +boa +boar +board +boardinghouse +boast +boat +boathouse +boatload +boatman +boatmen +boatswain +boatyard +bob +Bobbie +bobbin +bobble +bobby +bobcat +bobolink +Boca +bock +bocklogged +bode +bodhisattva +bodice +bodied +Bodleian +body +bodybuild +bodyguard +Boeing +Boeotian +bog +bogey +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 +bookplate +bookseller +bookshelf +bookshelves +bookstore +booky +boolean +boom +boomerang +boon +Boone +boor +boorish +boost +boot +Bootes +booth +bootleg +bootlegger +bootlegging +bootstrap +bootstrapped +bootstrapping +booty +booze +bop +borate +borax +Bordeaux +bordello +Borden +border +borderland +borderline +bore +Borealis +Boreas +boredom +Borg +boric +Boris +born +borne +Borneo +boron +borosilicate +borough +Borroughs +borrow +Bosch +Bose +bosom +boson +boss +Boston +Bostonian +Boswell +botanic +botanist +botany +botch +botfly +both +bothersome +Botswana +bottle +bottleneck +bottom +bottommost +botulin +botulism +Boucher +bouffant +bough +bought +boulder +boule +boulevard +bounce +bouncy +bound +boundary +bounty +bouquet +bourbon +bourgeois +bourgeoisie +bourn +boustrophedon +bout +boutique +bovine +bow +Bowditch +Bowdoin +bowel +Bowen +bowfin +bowie +bowl +bowline +bowman +bowmen +bowstring +box +boxcar +boxwood +boxy +boy +boyar +Boyce +boycott +Boyd +boyhood +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 +brainstorm +brainwash +brainy +brake +brakeman +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 +breakoff +breakpoint +breakthrough +breakup +breakwater +bream +breast +breastplate +breastwork +breath +breathe +breathtaking +breathy +breccia +bred +breech +breeches +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 +brief +briefcase +brig +brigade +brigadier +brigantine +Briggs +Brigham +bright +brighten +Brighton +brilliant +Brillouin +brim +brimstone +Brindisi +brindle +brine +bring +brink +brinkmanship +briny +Brisbane +brisk +bristle +Bristol +Britain +Britannic +Britannica +britches +British +Briton +Brittany +Britten +brittle +broach +broad +broadcast +broaden +broadloom +broadside +Broadway +brocade +broccoli +brochure +Brock +brockle +Broglie +broil +broke +broken +brokerage +Bromfield +bromide +bromine +Bromley +bronchi +bronchial +bronchiolar +bronchiole +bronchitis +bronchus +bronco +Bronx +bronze +bronzy +brood +broody +brook +Brooke +Brookhaven +Brookline +Brooklyn +brookside +broom +broomcorn +broth +brothel +brother +brotherhood +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 +brushlike +brushwork +brushy +brusque +Brussels +brutal +brute +Bryan +Bryant +Bryce +Bryn +bryophyta +bryophyte +bryozoa +BSTJ +BTL +bub +bubble +Buchanan +Bucharest +Buchenwald +Buchwald +buck +buckaroo +buckboard +bucket +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 +Bulgaria +bulge +bulk +bulkhead +bulky +bull +bulldog +bulldoze +bullet +bulletin +bullfinch +bullfrog +bullhead +bullhide +bullish +bullock +bullseye +bullwhack +bully +bullyboy +bulrush +bulwark +bum +bumble +bumblebee +bump +bumptious +bun +bunch +Bundestag +bundle +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 +buried +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 +bushmaster +Bushnell +bushwhack +bushy +business +businessman +businessmen +buss +bust +bustard +bustle +busy +but +butadiene +butane +butch +butchery +butene +buteo +butler +butt +butte +butterball +buttercup +butterfat +Butterfield +butterfly +buttermilk +butternut +buttery +buttock +button +buttonhole +buttress +Buttrick +butyl +butyrate +buxom +Buxtehude +Buxton +buy +buyer +buzz +Buzzard +buzzer +buzzing +buzzword +buzzy +by +bye +Byers +bygone +bylaw +byline +bypass +bypath +byproduct +Byrd +Byrne +byroad +Byron +Byronic +bystander +byte +byway +byword +Byzantine +Byzantium +c +c's +cab +cabal +cabana +cabaret +cabbage +cabdriver +cabin +cabinet +cabinetmake +cabinetry +cable +Cabot +cacao +cachalot +cache +cackle +CACM +cacophonist +cacophony +cacti +cactus +cadaver +cadaverous +caddis +caddy +cadent +cadenza +cadet +Cadillac +cadmium +cadre +Cady +Caesar +cafe +cafeteria +cage +cagey +Cahill +cahoot +caiman +Cain +Caine +cairn +Cairo +cajole +cake +Cal +Calais +calamitous +calamity +calamus +calcareous +calcify +calcine +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 +caller +calligraph +calligraphy +calliope +Callisto +callous +callus +calm +caloric +calorie +calorimeter +Calumet +calumniate +calumny +Calvary +calve +Calvert +Calvin +Calvinist +calypso +cam +camaraderie +camber +Cambodia +cambric +Cambridge +Camden +came +camel +camelback +camellia +camelopard +Camelot +cameo +camera +cameraman +cameramen +Cameron +Cameroun +camilla +Camille +Camino +camouflage +camp +campaign +campanile +Campbell +campfire +campground +campion +campsite +campus +can +can't +Canaan +Canada +Canadian +canal +canary +Canaveral +Canberra +cancel +cancellate +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 +Canoga +canon +canonic +canopy +canst +cant +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 +capstan +capstone +capsule +captain +captaincy +caption +captious +captivate +captive +captor +capture +Caputo +capybara +car +carabao +Caracas +caramel +caravan +caraway +carbide +carbine +carbohydrate +Carboloy +carbon +carbonaceous +carbonate +Carbondale +Carbone +carbonic +carbonyl +carborundum +carboxy +carboy +carbuncle +carcass +carcinogen +carcinogenic +carcinoma +card +cardamom +cardboard +cardiac +cardinal +cardioid +cardiology +cardiovascular +care +careen +career +carefree +caress +caret +caretaker +careworn +Carey +Cargill +cargo +cargoes +Carib +Caribbean +caribou +caricature +Carl +Carla +Carleton +Carlin +Carlisle +Carlo +carload +Carlson +Carlton +Carlyle +Carmela +Carmen +Carmichael +carmine +carnage +carnal +carnation +carne +Carnegie +carney +carnival +carob +carol +Carolina +Caroline +Carolingian +Carolinian +Carolyn +carouse +carp +Carpathia +carpenter +carpentry +carpet +carport +Carr +carrageen +Carrara +carrel +carriage +Carrie +carrion +Carroll +carrot +Carruthers +carry +carryover +Carson +cart +carte +cartel +Cartesian +Carthage +cartilage +cartographer +cartographic +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 +casserole +cassette +Cassiopeia +Cassius +cassock +cast +castanet +caste +casteth +castigate +Castillo +castle +castor +Castro +casual +casualty +cat +cataclysmic +Catalina +catalogue +catalpa +catalysis +catalyst +catalytic +catapult +cataract +catastrophe +catastrophic +catatonia +catatonic +catawba +catbird +catch +catchup +catchword +catchy +catechism +categoric +category +catenate +cater +caterpillar +catfish +catharsis +cathedra +cathedral +Catherine +Catherwood +catheter +cathode +cathodic +catholic +Catholicism +Cathy +cation +cationic +catkin +catlike +catnip +Catskill +catsup +cattail +cattle +cattleman +cattlemen +Caucasian +Caucasus +Cauchy +caucus +caught +cauliflower +caulk +causal +causate +cause +caustic +caution +cautionary +cautious +cavalcade +cavalier +cavalry +cave +caveat +caveman +cavemen +Cavendish +cavern +cavernous +caviar +cavil +cavilling +Caviness +cavitate +cavort +caw +cayenne +Cayley +Cayuga +CBS +CDC +cease +Cecil +Cecilia +Cecropia +cedar +cede +cedilla +Cedric +ceil +celandine +Celanese +Celebes +celebrant +celebrate +celebrity +celerity +celery +celesta +celestial +Celia +cell +cellar +cellophane +cellular +cellulose +Celsius +Celtic +cement +cemetery +Cenozoic +censor +censorial +censure +census +cent +centaur +centenary +centennial +centerline +centerpiece +centigrade +centipede +central +centrex +centric +centrifugal +centrifugate +centrifuge +centrist +centroid +centum +century +Cepheus +ceramic +ceramium +Cerberus +cereal +cerebellum +cerebral +cerebrate +ceremonial +ceremonious +ceremony +Ceres +cereus +cerise +cerium +CERN +certain +certainty +certificate +certified +certify +certiorari +certitude +cerulean +Cervantes +Cesare +cesium +cessation +cession +Cessna +cetera +Cetus +Ceylon +Cezanne +Chablis +Chad +Chadwick +chafe +chaff +chagrin +chain +chair +chairlady +chairman +chairmen +chairperson +chairwoman +chairwomen +chaise +chalcedony +chalice +chalk +chalkline +chalky +challenge +Chalmers +chamber +chamberlain +chambermaid +Chambers +chameleon +chamfer +chamois +chamomile +champ +champagne +Champaign +champion +Champlain +chance +chancel +chancellor +chancery +chancy +chandelier +chandler +Chang +change +changeable +changeover +channel +chanson +chant +chantey +Chantilly +chantry +Chao +chaos +chaotic +chap +chaparral +chapel +chaperon +chaperone +chaplain +chaplaincy +Chaplin +Chapman +chapter +char +character +characteristic +charcoal +chard +charge +chargeable +chariot +charisma +charismatic +charitable +charity +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 +chaw +cheap +cheat +cheater +check +checkbook +checkerberry +checkerboard +checklist +checkout +checkpoint +checksum +checksummed +checkup +cheek +cheekbone +cheeky +cheer +cheerleader +cheery +cheese +cheesecake +cheesecloth +cheesy +cheetah +chef +chelate +chemic +chemise +chemisorb +chemisorption +chemist +chemistry +chemotherapy +Chen +Cheney +chenille +cherish +Cherokee +cherry +chert +cherub +cherubim +Chesapeake +Cheshire +chess +chest +Chester +Chesterton +chestnut +chevalier +Chevrolet +chevron +chevy +chew +Cheyenne +chi +Chiang +chianti +chic +Chicago +Chicagoan +chicanery +Chicano +chick +chickadee +chicken +chicory +chide +chief +chiefdom +chieftain +chiffon +chigger +chignon +chilblain +child +childbirth +childhood +childish +childlike +children +Chile +chili +chill +chilly +chime +chimera +chimeric +Chimique +chimney +chimpanzee +chin +china +Chinaman +Chinamen +Chinatown +chinch +chinchilla +chine +Chinese +chink +Chinook +chinquapin +chip +chipboard +chipmunk +Chippendale +chiropractor +chirp +chisel +Chisholm +chit +chiton +chivalrous +chivalry +chive +chlorate +chlordane +chloride +chlorine +chloroform +chlorophyll +chloroplatinate +chock +chocolate +Choctaw +choice +choir +choirmaster +choke +chokeberry +cholera +cholesterol +cholinesterase +chomp +choose +choosy +chop +Chopin +choppy +choral +chorale +chord +chordal +chordata +chordate +chore +choreograph +choreography +chorine +chortle +chorus +chose +chosen +Chou +chow +chowder +Chris +Christ +christen +Christendom +Christensen +Christenson +Christian +Christiana +Christianson +Christie +Christina +Christine +Christlike +Christmas +Christoffel +Christopher +Christy +chromate +chromatic +chromatogram +chromatograph +chromatography +chrome +chromic +chromium +chromosphere +chronic +chronicle +chronograph +chronography +chronology +chrysanthemum +Chrysler +chub +chubby +chuck +chuckle +chuckwalla +chuff +chug +chugging +chum +chummy +chump +Chungking +chunk +chunky +church +churchgo +Churchill +Churchillian +churchman +churchmen +churchwoman +churchwomen +churchyard +churn +chute +chutney +CIA +cicada +Cicero +Ciceronian +cider +cigar +cigarette +cilia +ciliate +cimcumvention +cinch +Cincinnati +cinder +Cinderella +cinema +cinematic +Cinerama +cinnabar +cinnamon +cinquefoil +cipher +circa +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 +cirmcumferential +cistern +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 +classification +classificatory +classify +classmate +classroom +classy +clatter +clattery +Claude +Claudia +Claudio +Claus +clause +Clausen +Clausius +claustrophobia +claustrophobic +claw +clay +Clayton +clean +cleanse +cleanup +clear +clearance +clearheaded +Clearwater +cleat +cleavage +cleave +cleft +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 +clinging +clinic +clinician +clink +Clint +Clinton +Clio +clip +clipboard +clique +Clive +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 +cloy +club +clubhouse +clubroom +cluck +clue +clump +clumsy +clung +cluster +clutch +clutter +Clyde +Clytemnestra +coach +coachman +coachmen +coachwork +coadjutor +coagulable +coagulate +coal +coalesce +coalescent +coalition +coarse +coarsen +coast +coastal +coastline +coat +Coates +coattail +coauthor +coax +coaxial +cobalt +Cobb +cobble +cobblestone +Cobol +cobra +cobweb +coca +cocaine +coccidiosis +cochineal +cochlea +Cochran +Cochrane +cock +cockatoo +cockcrow +cockeye +cockle +cocklebur +cockleshell +cockpit +cockroach +cocksure +cocktail +cocky +coco +cocoa +coconut +cocoon +cod +coda +Coddington +coddle +code +codebreak +codeposit +codetermine +codeword +codfish +codicil +codify +codpiece +Cody +coed +coeditor +coeducation +coefficient +coequal +coerce +coercible +coercion +coercive +coexist +coexistent +coextensive +cofactor +coffee +coffeecup +coffeepot +coffer +Coffey +coffin +Coffman +cog +cogent +cogitate +cognac +cognate +cognition +cognitive +cognizable +cognizant +Cohen +cohere +coherent +cohesion +cohesive +Cohn +cohort +cohosh +coiffure +coil +coin +coinage +coincide +coincident +coincidental +coke +col +cola +colander +colatitude +Colby +cold +Cole +Coleman +Coleridge +Colette +coleus +Colgate +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 +collocation +colloidal +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 +combinator +combinatorial +combinatoric +combine +combustible +combustion +come +comeback +comedian +comedy +comet +cometary +cometh +comfort +comic +Cominform +comma +command +commandant +commandeer +commando +commemorate +commend +commendation +commendatory +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 +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 +compleat +complement +complementarity +complementary +complementation +complete +completion +complex +complexion +compliant +complicate +complicity +compliment +complimentary +compline +comply +component +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 +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 +condone +conduce +conducive +conduct +conductance +conductor +conduit +cone +coneflower +Conestoga +coney +confabulate +confect +confectionery +confederacy +confederate +confer +conferee +conference +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 +Confucianism +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 +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 +conspicuous +conspiracy +conspirator +conspiratorial +conspire +Constance +constant +Constantine +Constantinople +constellate +consternate +constipate +constituent +constitute +constitution +constrain +constraint +constrict +constrictor +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 +continued +continuity +continuo +continuous +continuum +contort +contour +contraband +contrabass +contraception +contraceptive +contract +contractor +contractual +contradict +contradictory +contradistinct +contradistinguish +contralateral +contralto +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 +copter +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 +corollary +corona +Coronado +coronary +coronate +coroner +coronet +coroutine +Corp +corpora +corporal +corporate +corporeal +corps +corpse +corpsman +corpsmen +corpulent +corpus +corpuscular +corral +corralled +correct +corrector +correlate +correspond +correspondent +corridor +corrigenda +corrigendum +corrigible +corroborate +corroboree +corrode +corrodible +corrosion +corrosive +corrugate +corrupt +corruptible +corruption +corsage +cortege +cortex +cortical +Cortland +corundum +coruscate +corvette +Corvus +cos +cosec +coset +Cosgrove +cosh +cosine +cosmetic +cosmic +cosmology +cosmopolitan +cosmos +cosponsor +Cossack +cost +Costello +costume +cosy +cot +cotangent +cotillion +cotman +cotoneaster +cotta +cottage +cotton +cottonmouth +cottonseed +cottonwood +cottony +Cottrell +cotty +couch +cougar +cough +could +couldn't +coulomb +Coulter +council +councilman +councilmen +councilwoman +councilwomen +counsel +counselor +count +countenance +counteract +counterargument +counterattack +counterbalance +counterclockwise +counterexample +counterfeit +counterflow +counterintuitive +counterman +countermen +counterpart +counterpoint +counterpoise +counterproductive +counterproposal +countersink +countersunk +countervail +countrify +country +countryman +countrymen +countryside +countrywide +county +countywide +coup +coupe +couple +coupon +courage +courageous +courier +course +court +courteous +courtesan +courtesy +courthouse +courtier +Courtney +courtroom +courtyard +couscous +cousin +couturier +covalent +covariant +covariate +covary +cove +coven +covenant +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 +coyote +coypu +cozen +cozier +cozy +CPA +crab +crabapple +crack +crackle +crackpot +cradle +craft +craftsman +craftsmen +craftspeople +craftsperson +crafty +crag +craggy +Craig +cram +Cramer +cramp +cranberry +Crandall +crane +cranelike +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 +creating +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 +cricket +cried +crime +Crimea +criminal +crimp +crimson +cringe +crinkle +cripple +crises +crisis +crisp +Crispin +criss +crisscross +criteria +criterion +critic +critique +critter +croak +crochet +crock +crockery +Crockett +crocodile +crocodilian +crocus +croft +Croix +Cromwell +Cromwellian +crone +crony +crook +croon +crop +Crosby +cross +crossarm +crossbar +crossbill +crosscut +crosshatch +crosslink +crossover +crosspoint +crossroad +crosstalk +crosswalk +crossway +crosswise +crotch +crotchety +crouch +croupier +crow +crowbait +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 +crupper +crusade +crush +Crusoe +crust +crutch +crux +cry +cryogenic +cryostat +crypt +cryptanalysis +cryptanalyst +cryptanalytic +cryptic +cryptogram +cryptographer +cryptography +crystal +crystalline +crystallite +crystallographer +crystallography +cub +Cuba +cubbyhole +cube +cubic +cuckoo +cucumber +cud +cuddle +cuddly +cudgel +cue +cuff +cufflink +cuisine +Culbertson +culinary +cull +culminate +culpa +culpable +culprit +cult +cultivable +cultivate +cultural +culture +Culver +culvert +Cumberland +cumbersome +cumin +Cummings +Cummins +cumulate +cumulus +Cunard +cunning +Cunningham +CUNY +cup +cupboard +Cupid +cupidity +cupric +cuprous +cur +curate +curb +curbside +curd +curdle +cure +curfew +curia +curie +curio +curiosity +curious +curium +curl +curlew +curlicue +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 +cutthroat +cuttlebone +cuttlefish +cutworm +Cyanamid +cyanate +cyanic +cyanide +cybernetics +cycad +Cyclades +cycle +cyclic +cyclist +cyclone +cyclopean +Cyclops +cyclorama +cyclotron +Cygnus +cylinder +cylindric +cynic +Cynthia +cypress +Cyprian +Cypriot +Cyprus +Cyril +Cyrus +cyst +cytochemistry +cytolysis +cytoplasm +czar +czarina +Czechoslovakia +Czerniak +d +d'art +d'etat +d'oeuvre +d's +dab +dabble +Dacca +dachshund +dactyl +dactylic +dad +Dadaism +Dadaist +daddy +Dade +Daedalus +daffodil +daffy +dagger +Dahl +dahlia +Dahomey +Dailey +Daimler +dainty +dairy +Dairylea +dairyman +dairymen +dais +daisy +Dakar +Dakota +dale +Daley +Dallas +dally +Dalton +Daly +Dalzell +dam +damage +Damascus +damask +dame +damn +damnation +Damon +damp +dampen +damsel +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 +Darrell +dart +Dartmouth +Darwin +Darwinian +dash +dashboard +dastard +data +database +date +dateline +dater +Datsun +datum +daub +Daugherty +daughter +daunt +dauphin +dauphine +Dave +davenport +David +Davidson +Davies +Davis +Davison +davit +Davy +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 +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 +decathlon +Decatur +decay +Decca +decease +decedent +deceit +deceive +decelerate +December +decennial +decent +deception +deceptive +decertify +decibel +decide +deciduous +decile +decimal +decipher +decision +decisional +decisive +deck +Decker +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 +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 +deferable +deferent +deferred +deferring +defiant +deficient +deficit +define +definite +definition +definitive +deflate +deflater +deflect +deflector +defocus +deforest +deforestation +deform +deformation +defraud +defray +defrost +deft +defunct +defy +degas +degeneracy +degenerate +degradation +degrade +degrease +degree +degum +dehumidify +dehydrate +deify +deign +deity +deja +deject +Del +Delaney +Delano +Delaware +delay +delectable +delectate +delegable +delegate +delete +deleterious +deletion +Delhi +Delia +deliberate +delicacy +delicate +delicatessen +delicious +delicti +delight +Delilah +delimit +delimitation +delineament +delineate +delinquent +deliquesce +deliquescent +delirious +delirium +deliver +deliverance +delivery +dell +Della +Delmarva +delouse +Delphi +Delphic +delphine +delphinium +Delphinus +delta +deltoid +delude +deluge +delusion +delusive +deluxe +delve +demagnify +demagogue +demand +demarcate +demark +demean +demented +demerit +demigod +demijohn +demiscible +demise +demit +demitted +demitting +democracy +democrat +democratic +demodulate +demography +demolish +demolition +demon +demoniac +demonic +demonstrable +demonstrate +demote +demountable +Dempsey +demultiplex +demur +demure +demurred +demurrer +demurring +demythologize +den +denature +dendrite +dendritic +Deneb +Denebola +deniable +denial +denigrate +denizen +Denmark +Dennis +Denny +denominate +denotation +denotative +denote +denouement +denounce +dense +densitometer +dent +dental +dentistry +Denton +denture +denudation +denude +denumerable +denunciate +Denver +deny +deodorant +deoxyribonucleic +depart +department +departure +depend +dependent +depict +deplete +depletion +deplore +deploy +deport +deportation +deportee +depose +deposit +depositary +deposition +depositor +depository +depot +deprave +deprecate +deprecatory +depreciable +depreciate +depress +depressant +depressed +depressible +depressing +depression +depressive +depressor +deprivation +deprive +depth +deputation +depute +deputy +derail +derange +derate +derby +Derbyshire +dereference +deregulate +Derek +derelict +deride +derision +derisive +derivate +derive +derogate +derogatory +derrick +derriere +dervish +Des +descant +Descartes +descend +descendant +descendent +descent +describe +description +descriptive +descriptor +desecrate +desecrater +desegregate +desert +deserve +desiderata +desideratum +design +designate +desire +desirous +desist +desk +Desmond +desolate +desolater +desorption +despair +desperado +desperate +despicable +despise +despite +despoil +despond +despondent +despot +despotic +dessert +dessicate +destabilize +destinate +destine +destiny +destitute +destroy +destruct +destructor +desuetude +desultory +desynchronize +detach +detail +detain +detect +detector +detent +detente +detention +deter +detergent +deteriorate +determinant +determinate +determine +deterred +deterrent +deterring +detest +detestation +detonable +detonate +detour +detoxify +detract +detractor +detriment +Detroit +deuce +deus +deuterate +deuterium +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 +dextrous +dey +Dhabi +dharma +diabase +diabetes +diabetic +diabolic +diachronic +diacritical +diadem +diagnosable +diagnose +diagnoses +diagnosis +diagnostic +diagnostician +diagonal +diagram +diagrammatic +dial +dialect +dialectic +dialogue +dialysis +diamagnetic +diamegnetism +diameter +diamond +Diana +Diane +Dianne +diaper +diaphanous +diaphragm +diary +diathermy +diathesis +diatom +diatomaceous +diatomic +diatonic +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 +died +Diego +diehard +dieldrin +dielectric +diem +diesel +diet +dietary +dietetic +diethylstilbestrol +dietician +Dietrich +diety +Dietz +differ +different +differentiable +differential +differentiate +difficult +difficulty +diffident +diffract +diffractometer +diffuse +diffusible +diffusion +diffusive +difluoride +dig +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 +diminution +diminutive +dimple +din +Dinah +dine +ding +dinghy +dingo +dingy +dinnertime +dinnerware +dinosaur +dint +diocesan +diocese +diode +Dionysian +Dionysus +Diophantine +diopter +diorama +dioxide +dip +diphthong +diploma +diplomacy +diplomat +diplomatic +dipole +Dirac +dire +direct +director +directorate +directory +directrices +directrix +dirge +Dirichlet +dirt +dirty +Dis +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 +disembowel +disgruntle +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 +dissociable +dissociate +dissonant +dissuade +distaff +distal +distant +distillate +distillery +distinct +distinguish +distort +distortion +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 +divisional +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 +dodecahedra +dodecahedral +dodecahedron +dodge +Dodson +doe +doesn't +doff +dog +dogbane +dogberry +Doge +dogfish +dogging +doggone +doghouse +dogleg +dogma +dogmatic +dogmatism +dogtooth +dogtrot +dogwood +Doherty +Dolan +dolce +doldrum +dole +doll +dollar +dollop +dolly +dolomite +dolomitic +Dolores +dolphin +dolt +doltish +domain +dome +Domenico +Domesday +domestic +domicile +dominant +dominate +domineer +Domingo +Dominic +Dominican +Dominick +dominion +Dominique +domino +don +don't +Donahue +Donald +Donaldson +donate +done +Doneck +donkey +Donna +Donnelly +Donner +donnybrook +donor +Donovan +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 +Dorothea +Dorothy +Dorset +dosage +dose +dosimeter +dossier +Dostoevsky +dot +dote +double +Doubleday +doubleheader +doublet +doubleton +doubloon +doubt +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 +Downing +downplay +downpour +downright +Downs +downside +downslope +downspout +downstairs +downstream +downtown +downtrend +downtrodden +downturn +downward +downwind +dowry +Doyle +doze +dozen +Dr +drab +Draco +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 +draw +drawback +drawbridge +drawl +drawn +dread +dreadnought +dream +dreamboat +dreamlike +dreamt +dreamy +dreary +dredge +dreg +drench +dress +dressmake +dressy +drew +Drexel +Dreyfuss +drib +dribble +dried +drier +drift +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 +Drury +dry +dryad +Dryden +du +dual +dualism +Duane +dub +Dubhe +dubious +dubitable +Dublin +ducat +duchess +duck +duckling +duct +ductile +ductwork +dud +Dudley +due +duel +duet +duff +duffel +Duffy +dug +Dugan +dugout +duke +dukedom +dulcet +dull +dully +dulse +Duluth +duly +Duma +dumb +dumbbell +dummy +dump +Dumpty +dumpy +dun +Dunbar +Duncan +dunce +dune +Dunedin +dung +dungeon +Dunham +dunk +Dunkirk +Dunlap +Dunlop +Dunn +duopolist +duopoly +dupe +duplex +duplicable +duplicate +duplicity +DuPont +durable +Durango +duration +Durer +duress +Durham +during +Durkee +Durkin +Durrell +Durward +Dusenberg +Dusenbury +dusk +dusky +Dusseldorf +dust +dustbin +dusty +Dutch +dutchess +Dutchman +Dutchmen +dutiable +Dutton +duty +dwarf +dwarves +dwell +dwelt +Dwight +dwindle +Dwyer +dyad +dyadic +dye +dyer +dying +Dyke +Dylan +dynamic +dynamism +dynamite +dynamo +dynast +dynastic +dynasty +dyne +dysentery +dyspeptic +dysplasia +dysprosium +dystrophy +e +e'er +e's +each +Eagan +eager +eagle +ear +eardrum +earl +earmark +earn +earnest +earphone +earring +earth +earthen +earthenware +earthmen +earthmove +earthquake +earthworm +earthy +earwig +ease +easel +east +eastbound +eastern +easternmost +Eastland +Eastman +eastward +Eastwood +easy +easygoing +eat +eaten +eater +Eaton +eave +eavesdrop +ebb +Eben +ebony +ebullient +eccentric +Eccles +ecclesiastic +echelon +echinoderm +echo +echoes +eclat +eclectic +eclipse +ecliptic +eclogue +Ecole +ecology +Econometrica +economic +economist +economy +ecosystem +ecstasy +ecstatic +Ecuador +ecumenic +ecumenist +Ed +Eddie +eddy +edelweiss +edematous +Eden +Edgar +edge +Edgerton +edgewise +edging +edgy +edible +edict +edifice +edify +Edinburgh +Edison +edit +Edith +edition +editor +editorial +Edmonds +Edmondson +Edmonton +Edmund +Edna +EDT +educable +educate +Edward +Edwardian +Edwards +Edwin +Edwina +eel +eelgrass +EEOC +eerie +eerily +efface +effaceable +effect +effectual +effectuate +effeminate +efferent +effete +efficacious +efficacy +efficient +Effie +effloresce +efflorescent +effluent +effluvia +effluvium +effort +effusive +eft +egalitarian +Egan +egg +egghead +eggplant +eggshell +ego +egocentric +egotism +egotist +egregious +egress +egret +Egypt +Egyptian +eh +Ehrlich +eider +eidetic +eigenfunction +eigenstate +eigenvalue +eigenvector +eight +eighteen +eighteenth +eightfold +eighth +eightieth +eighty +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 +eleventh +elfin +Elgin +Eli +elicit +elide +eligible +Elijah +eliminate +Elinor +Eliot +Elisabeth +Elisha +elision +elite +Elizabeth +Elizabethan +elk +Elkhart +ell +Ella +Ellen +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 +elves +Ely +Elysee +elysian +em +emaciate +emanate +emancipate +Emanuel +emasculate +embalm +embank +embarcadero +embargo +embargoes +embark +embarrass +embassy +embattle +embed +embedded +embedder +embedding +embellish +ember +embezzle +emblem +emblematic +embodiment +embody +embolden +emboss +embouchure +embower +embrace +embraceable +embrittle +embroider +embroidery +embroil +embryo +embryonic +emcee +emendable +emerald +emerge +emergent +emeritus +Emerson +Emery +emigrant +emigrate +Emil +Emile +Emilio +Emily +eminent +emirate +emissary +emission +emissivity +emit +emittance +emitted +emitter +emitting +emma +Emmanuel +Emmett +emolument +Emory +emotion +emotional +empathy +emperor +emphases +emphasis +emphatic +emphysema +emphysematous +empire +empiric +emplace +employ +employed +employee +employer +employing +emporium +empower +empress +empty +emulate +emulsify +emulsion +en +enable +enamel +encapsulate +encephalitis +enchantress +enclave +encomia +encomium +encroach +encryption +encumber +encumbrance +encyclopedic +end +endgame +Endicott +endogamous +endogamy +endogenous +endorse +endosperm +endothelial +endothermic +endow +endpoint +endurance +endure +enemy +energetic +energy +enervate +enfant +Enfield +enforceable +Eng +Engel +engine +engineer +England +Engle +Englewood +English +Englishman +Englishmen +enhance +Enid +enigma +enigmatic +enjoinder +enlargeable +enliven +enmity +Enoch +enormity +enormous +Enos +enough +enquire +enquiry +Enrico +enrollee +ensconce +ensemble +entendre +enter +enterprise +entertain +enthalpy +enthrall +enthusiasm +enthusiast +enthusiastic +entice +entirety +entity +entomology +entourage +entranceway +entrant +entrepreneur +entrepreneurial +entropy +enumerable +enumerate +enunciable +enunciate +envelop +envelope +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 +epileptic +epilogue +Epiphany +epiphyseal +epiphysis +episcopal +Episcopalian +episcopate +episode +episodic +epistemology +epistle +epistolatory +epitaph +epitaxial +epitaxy +epithelial +epithelium +epithet +epitome +epoch +epochal +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 +era +eradicable +eradicate +erasable +erase +Erasmus +Erastus +erasure +Erato +Eratosthenes +erbium +ERDA +ere +erect +erg +ergodic +Eric +Erich +Erickson +Ericsson +Erie +Erlenmeyer +Ernest +Ernestine +Ernie +Ernst +erode +erodible +Eros +erosible +erosion +erosive +erotic +erotica +err +errancy +errand +errant +errantry +errata +erratic +erratum +Errol +erroneous +error +ersatz +Erskine +erudite +erudition +erupt +eruption +Ervin +Erwin +escadrille +escalate +escapade +escape +escapee +escheat +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 +estop +estoppal +estrange +estuarine +estuary +et +eta +etc +etch +eternal +eternity +Ethan +ethane +ethanol +Ethel +ether +ethereal +ethic +Ethiopia +ethnic +ethnography +ethnology +ethology +ethos +ethyl +ethylene +etiology +etiquette +Etruscan +etude +etymology +eucalyptus +Eucharist +Euclid +Euclidean +eucre +Eugene +Eugenia +eugenic +Euler +Eulerian +eulogy +Eumenides +Eunice +euphemism +euphemist +euphorbia +euphoria +euphoric +Euphrates +Eurasia +eureka +Euridyce +Euripides +Europa +Europe +European +europium +Eurydice +eutectic +Euterpe +euthanasia +Eva +evacuate +evade +evaluable +evaluate +evanescent +evangel +evangelic +Evans +Evanston +Evansville +evaporate +evasion +evasive +eve +Evelyn +even +evenhanded +evensong +event +eventide +eventual +eventuate +Eveready +Everett +Everglades +evergreen +Everhart +everlasting +every +everybody +everyday +everyman +everyone +everything +everywhere +evict +evident +evidential +evil +evildoer +evince +evocable +evocate +evoke +evolution +evolutionary +evolve +evzone +ewe +Ewing +ex +exacerbate +exact +exaggerate +exalt +exaltation +exam +examination +examine +example +exasperate +exasperater +excavate +exceed +excel +excelled +excellent +excelling +excelsior +except +exception +exceptional +excerpt +excess +excessive +exchange +exchangeable +exchequer +excisable +excise +excision +excitation +excitatory +excite +exciton +exclaim +exclamation +exclamatory +exclude +exclusion +exclusionary +exclusive +excommunicate +excoriate +excrescent +excresence +excrete +excretion +excretory +excruciate +exculpate +exculpatory +excursion +excursus +excusable +excuse +execrable +execrate +execute +execution +executive +executor +executrix +exegesis +exegete +exemplar +exemplary +exemplify +exempt +exemption +exercisable +exercise +exert +Exeter +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 +exoskeleton +exothermic +exotic +exotica +expand +expanse +expansible +expansion +expansive +expatiate +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 +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 +extraditable +extralegal +extramarital +extraneous +extraordinary +extrapolate +extraterrestrial +extravagant +extravaganza +extrema +extremal +extreme +extremum +extricable +extricate +extrinsic +extroversion +extrovert +extrude +extrusion +extrusive +exuberant +exudation +exude +exult +exultant +exultation +Exxon +eye +eyeball +eyebright +eyebrow +eyed +eyeglass +eyelash +eyelet +eyelid +eyepiece +eyesight +eyewitness +Ezekiel +Ezra +f +f's +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 +fail +failsafe +failsoft +failure +fain +faint +fair +Fairchild +Fairfax +Fairfield +fairgoer +Fairport +fairway +fairy +faith +fake +falcon +falconry +fall +fallacious +fallacy +fallen +fallible +falloff +fallout +fallow +Falmouth +false +falsehood +falsify +Falstaff +falter +fame +familial +familiar +familiarly +familism +family +famine +famous +fan +fanatic +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 +father +fathom +fatigue +Fatima +fatten +fatty +fatuous +faucet +Faulkner +fault +faulty +faun +fauna +Faust +Faustian +Faustus +fawn +fay +Fayette +Fayetteville +faze +FBI +FCC +FDA +Fe +fealty +fear +fearsome +feasible +feast +feat +feather +featherbed +featherbrain +feathertop +featherweight +feathery +feature +Feb +febrile +February +fecund +fed +Fedders +federal +federate +Fedora +fee +feeble +feed +feedback +feel +Feeney +feet +feign +feint +Feldman +feldspar +Felice +Felicia +felicitous +felicity +feline +Felix +fell +fellow +felon +felonious +felony +felt +female +feminine +feminism +feminist +femur +fence +fencepost +fend +fennel +Fenton +fenugreek +Ferber +Ferdinand +Ferguson +Fermat +ferment +fermentation +Fermi +fermion +fermium +fern +Fernando +fernery +ferocious +ferocity +Ferrer +ferret +ferric +ferris +ferrite +ferroelectric +ferromagnet +ferromagnetic +ferromagnetism +ferrous +ferruginous +ferrule +ferry +fertile +fervent +fescue +fest +festival +festive +fetal +fetch +fete +fetid +fetish +fetter +fettle +fetus +feud +feudal +feudatory +fever +feverish +few +fiance +fiancee +fiasco +fiat +fib +fiberboard +Fiberglas +Fibonacci +fibrin +fibrosis +fibrous +fiche +fickle +fiction +fictitious +fictive +fiddle +fiddlestick +fide +fidelity +fidget +fiducial +fief +fiefdom +field +Fields +fieldstone +fieldwork +fiend +fiendish +fierce +fiery +fiesta +fife +FIFO +fifteen +fifteenth +fifth +fiftieth +fifty +fig +figaro +fight +figural +figurate +figure +figurine +filament +filamentary +filbert +filch +file +filet +filial +filibuster +filigree +Filipino +fill +filled +filler +fillet +fillip +filly +film +filmdom +filmmake +filmstrip +filmy +filter +filth +filthy +filtrate +fin +final +finale +finance +financial +financier +finch +find +fine +finesse +finessed +finessing +finger +fingernail +fingerprint +fingertip +finial +finicky +finish +finite +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 +Fitzgerald +Fitzpatrick +Fitzroy +five +fivefold +fix +fixate +fixture +Fizeau +fizzle +fjord +flabbergast +flack +flag +flagellate +flageolet +flagging +Flagler +flagpole +flagrant +Flagstaff +flagstone +flail +flair +flak +flake +flaky +flam +flamboyant +flame +flamingo +flammable +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 +fleck +fled +fledge +fledgling +flee +fleece +fleeing +fleet +Fleming +flemish +flesh +fleshy +fletch +Fletcher +flew +flex +flexible +flexural +flexure +flick +flier +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 +floor +floorboard +flop +floppy +flora +floral +Florence +Florentine +florican +florid +Florida +Floridian +florin +florist +flotation +flotilla +flounce +flounder +flour +flourish +floury +flout +flow +flowchart +flowerpot +flowery +flown +Floyd +flu +flub +fluctuate +flue +fluency +fluent +fluff +fluffy +fluid +fluke +flung +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 +fogging +foggy +fogy +foible +foil +foist +fold +foldout +Foley +foliage +foliate +folio +folk +folklore +folksong +folksy +follicle +follicular +follow +followeth +folly +Fomalhaut +fond +fondle +fondly +font +Fontaine +Fontainebleau +food +foodstuff +fool +foolhardy +foolish +foolproof +foot +footage +football +footbridge +Foote +footfall +foothill +footman +footmen +footnote +footpad +footpath +footprint +footstep +footstool +footwear +footwork +fop +foppish +for +forage +foray +forbade +forbear +forbearance +Forbes +forbid +forbidden +forbore +forborne +force +forcible +ford +Fordham +fore +foreign +forensic +forest +forestry +forever +forfeit +forfeiture +forfend +forgave +forge +forgery +forget +forgettable +forgive +forgiven +forgot +forgotten +fork +forklift +forlorn +form +formal +formaldehyde +formant +format +formate +formic +Formica +formidable +Formosa +formula +formulae +formulaic +formulate +Forrest +forsake +forsaken +forsook +forswear +Forsythe +fort +forte +Fortescue +forth +forthcome +forthright +forthwith +fortieth +fortify +fortin +fortiori +fortitude +fortnight +Fortran +fortress +fortuitous +fortunate +fortune +forty +forum +forward +Foss +fossil +fossiliferous +foster +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 +foxy +foyer +FPC +fraction +fractionate +fractious +fracture +fragile +fragment +fragmentary +fragmentation +fragrant +frail +frailty +frambesia +frame +framework +franc +franca +France +Frances +franchise +Francis +Franciscan +Francisco +francium +franco +frangipani +frank +Frankfort +Frankfurt +frankfurter +franklin +frantic +Franz +Fraser +fraternal +fraternity +Frau +fraud +fraudulent +fraught +fray +frayed +Frazier +frazzle +freak +freakish +freckle +Fred +Freddie +Freddy +Frederic +Frederick +Fredericks +Fredericksburg +Fredericton +Fredholm +Fredrickson +free +freeboot +freed +Freedman +freedmen +freedom +freehand +freehold +freeing +freeman +freemen +Freeport +freer +freest +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 +frictional +Friday +fried +Friedman +friend +frieze +frigate +Frigga +fright +frighten +frigid +Frigidaire +frill +frilly +fringe +frisky +fritillary +fritter +Fritz +frivolity +frivolous +frizzle +fro +frock +frog +frolic +from +front +frontage +frontal +frontier +frontiersman +frontiersmen +frost +frostbite +frostbitten +frosty +froth +frothy +frown +frowzy +froze +frozen +Fruehauf +frugal +fruit +fruition +frustrate +frustrater +frustum +fry +Frye +FTC +Fuchs +Fuchsia +fudge +fuel +fugal +fugitive +fugue +Fuji +Fujitsu +fulcrum +fulfill +full +fullback +Fullerton +fully +fulminate +fulsome +Fulton +fum +fumble +fume +fumigant +fumigate +fun +function +functionary +functor +fund +fundamental +funeral +funereal +fungal +fungi +fungible +fungicide +fungoid +fungus +funk +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 +g's +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 +gait +Gaithersburg +gal +gala +galactic +Galapagos +Galatea +Galatia +galaxy +Galbreath +gale +Galen +galena +Galilee +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 +gamin +gamma +gamut +gander +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 +Garrett +garrison +Garrisonian +garrulous +Garry +garter +Garth +Garvey +Gary +gas +Gascony +gaseous +gash +gasify +gasket +gaslight +gasoline +gasp +Gaspee +gassy +Gaston +gastrointestinal +gastronome +gastronomy +gate +Gates +gateway +gather +Gatlinburg +gator +gauche +gaucherie +gaudy +gauge +gaugeable +Gauguin +Gaul +gauleiter +Gaulle +gaunt +gauntlet +gaur +gauss +Gaussian +gauze +gave +gavel +Gavin +gavotte +gawk +gawky +gay +Gaylord +gaze +gazelle +gazette +GE +gear +gecko +gedanken +gee +geese +Gegenschein +Geiger +Geigy +geisha +gel +gelable +gelatin +gelatine +gelatinous +geld +gem +Gemini +gemlike +Gemma +gemstone +gender +gene +genealogy +genera +general +generate +generic +generosity +generous +Genesco +genesis +genetic +Geneva +Genevieve +genial +genie +genii +genius +Genoa +genotype +genre +gent +genteel +gentian +gentile +gentility +gentle +gentleman +gentlemen +gentry +genuine +genus +geocentric +geochemical +geochemistry +geochronology +geodesic +geodesy +geodetic +geoduck +Geoffrey +geographer +geography +geology +geometer +geometrician +geophysical +geophysics +geopolitic +George +Georgetown +Georgia +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 +gesticulate +gesture +get +getaway +Getty +Gettysburg +geyser +Ghana +ghastly +Ghent +gherkin +ghetto +ghost +ghostlike +ghostly +ghoul +ghoulish +Giacomo +giant +giantess +gibberish +gibbet +gibbon +Gibbons +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 +gimpy +gin +Gina +ginger +gingham +gingko +ginkgo +ginmill +Ginn +Gino +Ginsberg +Ginsburg +ginseng +Giovanni +giraffe +gird +girdle +girl +girlie +girlish +girth +gist +Giuliano +Giuseppe +give +giveaway +given +giveth +glacial +glaciate +glacier +glacis +glad +gladden +gladdy +glade +gladiator +gladiolus +Gladstone +Gladys +glamor +glamorous +glamour +glance +gland +glandular +glare +Glasgow +glass +glassine +glassware +glassy +Glaswegian +glaucoma +glaucous +glaze +gleam +glean +Gleason +glee +glen +Glenda +Glendale +Glenn +glib +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 +glossed +glossolalia +glossy +glottal +glottis +Gloucester +glove +glow +glue +glued +gluey +gluing +glum +glut +glutamic +glutinous +glutton +glyceride +glycerin +glycerinate +glycerine +glycerol +glycol +glyph +GM +GMT +gnarl +gnash +gnat +gnaw +gneiss +gnome +gnomon +gnomonic +gnostic +GNP +gnu +go +Goa +goad +goal +goat +gob +gobble +gobbledygook +goblet +god +Goddard +goddess +godfather +Godfrey +godhead +godkin +godlike +godmother +godparent +godsend +godson +Godwin +godwit +goer +goes +Goethe +Goff +gog +goggle +Gogh +gogo +gold +Goldberg +golden +goldeneye +goldenrod +goldenseal +goldfinch +goldfish +Goldman +goldsmith +Goldstein +Goldstine +Goldwater +Goleta +golf +Goliath +golly +gondola +gone +gong +goniometer +Gonzales +Gonzalez +goober +good +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 +gouge +Gould +gourd +gourmet +gout +govern +governance +governess +governor +gown +GPO +grab +grace +gracious +grackle +grad +gradate +grade +gradient +gradual +graduate +Grady +Graff +graft +graham +grail +grain +grainy +grammar +grammarian +grammatic +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 +grassland +grassy +grata +grate +grater +gratify +gratis +gratitude +gratuitous +gratuity +grave +gravel +graven +Graves +gravestone +graveyard +gravid +gravitate +gravy +gray +graybeard +Grayson +graywacke +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 +grenade +Grendel +Grenoble +Gresham +Greta +Gretchen +grew +grey +greyhound +greylag +grid +griddle +gridiron +grief +grievance +grieve +grievous +griffin +Griffith +grill +grille +grilled +grillwork +grim +grimace +Grimaldi +grime +Grimes +Grimm +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 +ground +groundsel +groundskeep +groundwork +group +grout +grove +grovel +Grover +grow +growl +grown +grownup +growth +grub +grubby +grudge +gruesome +gruff +grumble +Grumman +grunt +gryphon +GSA +Guam +guanidine +guano +guarantee +guaranteeing +guaranty +guard +guardhouse +Guardia +guardian +Guatemala +gubernatorial +Guenther +guerdon +guernsey +guerrilla +guess +guesswork +guest +guffaw +Guggenheim +Guiana +guidance +guide +guidebook +guideline +guidepost +guiding +guignol +guild +guildhall +guile +Guilford +guillemot +guillotine +guilt +guilty +guinea +guise +guitar +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 +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 +h's +ha +Haag +Haas +habeas +haberdashery +Haberman +Habib +habit +habitant +habitat +habitation +habitual +habituate +hacienda +hack +hackberry +Hackett +hackle +hackmatack +hackney +hackneyed +hacksaw +had +Hadamard +Haddad +haddock +Hades +Hadley +hadn't +Hadrian +hadron +hafnium +Hagen +Hager +haggard +haggle +Hagstrom +Hague +Hahn +Haifa +haiku +hail +hailstone +hailstorm +Haines +hair +haircut +hairdo +hairpin +hairy +Haiti +Haitian +Hal +halcyon +hale +Haley +half +halfback +halfhearted +halfway +halibut +halide +Halifax +halite +hall +hallelujah +Halley +hallmark +hallow +Halloween +hallucinate +hallway +halma +halo +halocarbon +halogen +Halsey +Halstead +halt +halvah +halve +Halverson +ham +Hamal +Hamburg +hamburger +Hamilton +Hamiltonian +hamlet +Hamlin +hammerhead +hammock +Hammond +hamper +Hampshire +Hampton +hamster +Han +Hancock +hand +handbag +handbook +handclasp +handcuff +Handel +handgun +handhold +handicap +handicapped +handicapper +handicraft +handicraftsman +handicraftsmen +handiwork +handkerchief +handle +handleable +handlebar +handline +handmade +handmaiden +handout +handset +handshake +handsome +handspike +handstand +handwrite +handwritten +handy +handyman +handymen +Haney +Hanford +hang +hangable +hangar +hangman +hangmen +hangout +hangover +hank +Hankel +Hanley +Hanlon +Hanna +Hannah +Hannibal +Hanoi +Hanover +Hanoverian +Hans +Hansel +Hansen +hansom +Hanson +Hanukkah +hap +haphazard +happen +happenstance +happy +harangue +harass +Harbin +harbinger +Harcourt +hard +hardbake +hardboard +hardboiled +harden +hardhat +Hardin +Harding +hardscrabble +hardtack +hardtop +hardware +hardwood +hardworking +hardy +hare +harelip +harem +hark +Harlan +Harlem +Harley +harm +Harmon +harmonic +harmonious +harmony +harness +Harold +harp +harpsichord +Harpy +Harriet +Harriman +Harrington +Harris +Harrisburg +Harrison +harrow +harry +harsh +harshen +hart +Hartford +Hartley +Hartman +Harvard +harvest +harvestman +Harvey +hash +hashish +hasn't +hasp +hassle +hast +haste +hasten +Hastings +hasty +hat +hatch +hatchet +hatchway +hate +hater +Hatfield +hath +Hathaway +hatred +Hatteras +Hattie +Haugen +haughty +haul +haulage +haunch +haunt +Havana +have +haven +haven't +Havilland +havoc +haw +Hawaii +Hawaiian +hawk +Hawkins +Hawley +hawthorn +Hawthorne +hay +Hayden +Haydn +Hayes +hayfield +Haynes +Hays +haystack +hayward +hazard +hazardous +haze +hazel +hazelnut +hazy +he +he'd +he'll +head +headache +headboard +headdress +headland +headlight +headline +headmaster +headphone +headquarter +headroom +headset +headsman +headsmen +headstand +headstone +headstrong +headwall +headwater +headway +headwind +heady +heal +Healey +health +healthy +Healy +heap +hear +heard +hearken +hearsay +hearse +Hearst +heart +heartbeat +heartbreak +hearten +heartfelt +hearth +hearty +heat +heater +heath +heathen +heathenish +Heathkit +heave +heaven +heavenward +heavy +heavyweight +Hebe +hebephrenic +Hebraic +Hebrew +Hecate +hecatomb +heck +heckle +Heckman +hectic +hector +Hecuba +hedge +hedgehog +hedonism +hedonist +heed +heel +heft +hefty +Hegelian +hegemony +Heidelberg +heigh +height +heighten +Heine +Heinrich +Heinz +heir +heiress +Heisenberg +held +Helen +Helena +Helene +Helga +helical +helicopter +heliocentric +heliotrope +helium +helix +hell +hellbender +hellebore +Hellenic +hellfire +hellgrammite +hellish +hello +helm +helmet +Helmholtz +helmsman +helmsmen +Helmut +help +helpmate +Helsinki +Helvetica +hem +hematite +Hemingway +hemisphere +hemispheric +hemlock +hemoglobin +hemolytic +hemorrhage +hemorrhoid +hemosiderin +hemp +Hempstead +hen +henbane +hence +henceforth +henchman +henchmen +Henderson +Hendrick +Hendricks +Hendrickson +henequen +Henley +henpeck +Henri +Henrietta +henry +hepatica +hepatitis +Hepburn +heptane +her +Hera +Heraclitus +herald +herb +Herbert +Herculean +Hercules +herd +herdsman +here +hereabout +hereafter +hereby +hereditary +heredity +Hereford +herein +hereinabove +hereinafter +hereinbelow +hereof +heresy +heretic +hereto +heretofore +hereunder +hereunto +herewith +heritable +heritage +Herkimer +Herman +hermeneutic +Hermes +hermetic +Hermite +hermitian +Hermosa +hero +Herodotus +heroes +heroic +heroin +heroine +heroism +heron +herpes +herpetology +Herr +herringbone +Herschel +herself +Hershel +Hershey +hertz +Hertzog +hesitant +hesitate +hesitater +Hesperus +Hess +Hessian +Hester +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 +Hicks +hid +hidalgo +hidden +hide +hideaway +hideous +hideout +hierarchal +hierarchic +hierarchy +hieratic +hieroglyphic +Hieronymus +hifalutin +Higgins +high +highball +highboy +highest +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 +hindmost +hindrance +hindsight +Hindu +Hinduism +Hines +hinge +Hinman +hint +hinterland +hip +hippo +hippodrome +hippopotamus +hippy +hipster +Hiram +hire +hireling +Hiroshi +Hiroshima +Hirsch +hirsute +his +Hispanic +hiss +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 +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 +homage +home +homebound +homebuild +homecome +homeland +homemade +homemake +homeomorph +homeomorphic +homeopath +homeown +Homeric +homesick +homestead +homeward +homework +homicidal +homicide +homily +homo +homogenate +homogeneity +homogeneous +homologous +homologue +homology +homomorphic +homomorphism +homonym +homosexual +homotopy +homozygous +Honda +hondo +Honduras +hone +honest +honesty +honey +honeybee +honeycomb +honeydew +honeymoon +honeysuckle +Honeywell +hong +honk +Honolulu +honoraria +honorarium +honorary +honoree +honorific +Honshu +hooch +hood +hoodlum +hoof +hoofmark +hook +hookup +hookworm +hooligan +hoop +hoopla +hoosegow +Hoosier +hoot +Hoover +hooves +hop +hope +Hopkins +Hopkinsian +hopple +hopscotch +Horace +Horatio +horde +horehound +horizon +horizontal +hormone +horn +hornbeam +hornblende +Hornblower +hornet +hornmouth +horntail +horny +horology +horoscope +Horowitz +horrendous +horrible +horrid +horrify +horror +horse +horseback +horsedom +horseflesh +horsefly +horsehair +horselike +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 +hothead +hothouse +hotrod +Houdaille +Houdini +hough +Houghton +hound +hour +hourglass +house +houseboat +housebreak +housebroken +housefly +household +housekeep +housewife +housewives +housework +Houston +hove +hovel +hover +how +Howard +howdy +Howe +Howell +however +howl +howsoever +howsomever +hoy +hoyden +hoydenish +Hoyt +Hrothgar +hub +Hubbard +Hubbell +hubbub +hubby +Huber +Hubert +hubris +huck +huckleberry +huckster +huddle +Hudson +hue +hued +huff +Huffman +hug +huge +hugging +Huggins +Hugh +Hughes +Hugo +huh +hulk +hull +hum +human +humane +humanitarian +humble +Humboldt +humerus +humid +humidify +humidistat +humiliate +humility +Hummel +hummingbird +hummock +humorous +hump +humpback +Humphrey +humpty +humus +Hun +hunch +hundred +hundredfold +hundredth +hung +Hungarian +Hungary +hungry +hunk +hunt +Hunter +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 +hydrodynamic +hydroelectric +hydrofluoric +hydrogen +hydrogenate +hydrology +hydrolysis +hydrometer +hydrophilic +hydrophobia +hydrophobic +hydrosphere +hydrostatic +hydrothermal +hydrous +hydroxide +hydroxy +hydroxyl +hydroxylate +hyena +hygiene +hygrometer +hygroscopic +hying +hymen +hymn +hymnal +hyperbola +hyperbolic +hyperboloid +hyperboloidal +hypertensive +hyphen +hyphenate +hypnosis +hypnotic +hypoactive +hypocrisy +hypocrite +hypocritic +hypocycloid +hypodermic +hypophyseal +hypotenuse +hypothalamic +hypothalamus +hypotheses +hypothesis +hypothetic +hypothyroid +hysterectomy +hysteresis +hysteria +hysteric +hysteron +i +I'd +I'll +I'm +i's +I've +iambic +Iberia +ibex +ibid +ibis +IBM +Ibn +Icarus +ICC +ice +iceberg +icebox +iceland +Icelandic +ichneumon +icicle +icon +iconoclasm +iconoclast +icosahedra +icosahedral +icosahedron +icy +Ida +Idaho +idea +ideal +ideate +idempotent +identical +identify +identity +ideology +idiocy +idiom +idiomatic +idiosyncrasy +idiosyncratic +idiot +idiotic +idle +idol +idolatry +idyll +idyllic +IEEE +if +iffy +Ifni +igloo +igneous +ignite +ignition +ignoble +ignominious +ignoramus +ignorant +ignore +ii +iii +Ike +ileum +iliac +Iliad +ill +illegal +illegible +illegitimacy +illegitimate +illicit +illimitable +Illinois +illiteracy +illiterate +illogic +illume +illuminate +illumine +illusion +illusionary +illusive +illusory +illustrate +illustrious +Ilona +Ilyushin +image +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 +immunization +immunoelectrophoresis +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 +imposable +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 +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 +incident +incidental +incinerate +incipient +incise +incisive +incite +inclement +inclination +incline +inclose +include +inclusion +inclusive +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 +Indian +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 +individualism +individuate +indivisible +Indochina +indoctrinate +indolent +indomitable +Indonesia +Indonesian +indoor +indubitable +induce +inducible +induct +inductance +inductee +inductor +indulge +indulgent +industrial +industrialism +industrious +industry +indwell +indy +ineducable +ineffable +ineffective +ineffectual +inefficacy +inefficient +inelastic +inelegant +ineligible +ineluctable +inept +inequality +inequitable +inequity +inequivalent +ineradicable +inert +inertance +inertia +inertial +inescapable +inestimable +inevitable +inexact +inexcusable +inexhaustible +inexorable +inexpedient +inexpensive +inexperience +inexpert +inexpiable +inexplainable +inexplicable +inexplicit +inexpressible +inextinguishable +inextricable +infallible +infamous +infamy +infancy +infant +infantile +infantry +infantryman +infantrymen +infarct +infatuate +infeasible +infect +infectious +infelicitous +infelicity +infer +inference +inferential +inferior +infernal +inferno +inferred +inferring +infertile +infest +infestation +infidel +infield +infight +infiltrate +infima +infimum +infinite +infinitesimal +infinitive +infinitude +infinitum +infinity +infirm +infirmary +infix +inflame +inflammable +inflammation +inflammatory +inflate +inflater +inflationary +inflect +inflexible +inflict +inflow +influence +influent +influential +influenza +influx +inform +informal +informant +Informatica +information +informative +infra +infract +infrared +infrastructure +infrequent +infringe +infuriate +infuse +infusible +infusion +ingather +ingenious +ingenuity +ingenuous +Ingersoll +ingest +ingestible +ingestion +inglorious +ingot +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 +innards +innate +inner +innermost +innocent +innovate +innuendo +innumerable +inoculate +inoperable +inoperative +inopportune +inordinate +inorganic +input +inquest +inquire +inquiry +inquisition +inquisitive +inquisitor +inroad +insane +insatiable +inscribe +inscription +inscrutable +insect +insecticide +insecure +inseminate +insensible +insensitive +inseparable +insert +inset +inshore +inside +insidious +insight +insignia +insignificant +insincere +insinuate +insipid +insist +insistent +insofar +insolent +insoluble +insolvable +insolvent +insomnia +insomniac +insouciant +inspect +inspector +inspiration +inspire +instable +install +installation +instalment +instance +instant +instantaneous +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 +interest +interfere +interference +interferometer +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 +intestine +intimacy +intimal +intimate +intimater +intimidate +into +intolerable +intolerant +intonate +intone +intoxicant +intoxicate +intractable +intramolecular +intransigent +intransitive +intrepid +intricacy +intricate +intrigue +intrinsic +introduce +introduction +introductory +introit +introject +introspect +introversion +introvert +intrude +intrusion +intrusive +intuit +intuitable +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 +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 +Iraq +irate +ire +Ireland +Irene +iridium +iris +Irish +Irishman +Irishmen +irk +irksome +Irma +iron +ironic +ironside +ironstone +ironwood +irony +Iroquois +irradiate +irrational +Irrawaddy +irreclaimable +irreconcilable +irrecoverable +irredeemable +irredentism +irredentist +irreducible +irrefutable +irregular +irrelevancy +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 +is +Isaac +Isaacson +Isabel +Isabella +Isaiah +isentropic +Isfahan +Ising +isinglass +Isis +Islam +Islamabad +Islamic +island +isle +isn't +isochronal +isochronous +isocline +isolate +Isolde +isomer +isomorph +isomorphic +isopleth +isotherm +isothermal +isotope +isotopic +isotropic +isotropy +Israel +Israeli +Israelite +issuance +issuant +issue +Istanbul +it +IT&T +it'd +it'll +Italian +italic +Italy +itch +item +iterate +Ithaca +itinerant +itinerary +Ito +itself +ITT +iv +Ivan +Ivanhoe +Iverson +ivory +ivy +ix +Izvestia +j +j's +jab +Jablonsky +jack +jackanapes +jackass +jackboot +jackdaw +jacket +Jackie +jackknife +Jackman +jackpot +Jackson +Jacksonian +Jacksonville +Jacky +JACM +Jacob +Jacobean +Jacobi +Jacobian +Jacobs +Jacobsen +Jacobson +Jacobus +Jacqueline +Jacques +jade +Jaeger +jag +jagging +jaguar +jail +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 +javelin +jaw +jawbone +jay +jazz +jazzy +jealous +jealousy +jean +Jeannie +Jed +jeep +Jeff +Jefferson +Jeffersonian +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 +jitterbugger +jitterbugging +jittery +jive +Jo +Joan +Joanna +Joanne +Joaquin +job +jobholder +jock +jockey +jockstrap +jocose +jocular +jocund +Joe +Joel +joey +jog +jogging +joggle +Johann +Johannes +Johannesburg +Johansen +Johanson +John +Johnny +Johns +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 +joyous +joyride +joystick +Jr +Juan +Juanita +jubilant +jubilate +Judaism +Judas +Judd +Jude +judge +judicable +judicatory +judicature +judicial +judiciary +judicious +Judith +judo +Judson +Judy +jug +jugate +jugging +juggle +juice +juicy +juju +jujube +juke +Jukes +julep +Jules +Julia +Julie +Juliet +Julio +Julius +July +jumble +jumbo +jump +jumpy +junco +junction +junctor +juncture +June +Juneau +jungle +junior +juniper +junk +junkerdom +junketeer +junky +Juno +junta +Jupiter +Jura +jure +juridic +jurisdiction +jurisprudent +jurisprudential +juror +jury +just +justice +justiciable +justify +Justine +Justinian +jut +jute +Jutish +juvenile +juxtapose +juxtaposition +k +k's +Kabuki +Kabul +Kaddish +Kafka +Kafkaesque +Kahn +kaiser +Kajar +Kalamazoo +kale +kaleidescope +kaleidoscope +kalmia +Kalmuk +Kamchatka +kamikaze +Kampala +Kane +kangaroo +Kankakee +Kansas +Kant +kaolin +Kaplan +kapok +kappa +Karachi +Karamazov +karate +Karen +Karl +Karol +Karp +karyatid +Kaskaskia +Kate +Katharine +Katherine +Kathleen +Kathy +Katie +Katmandu +Katowice +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 +kerosene +Kerr +kerry +kerygma +Kessler +kestrel +ketch +ketchup +ketone +ketosis +Kettering +kettle +Kevin +key +keyboard +keyed +Keyes +keyhole +Keynes +Keynesian +keynote +keypunch +keys +keystone +keyword +khaki +khan +Khartoum +Khmer +Khrushchev +kibbutzim +kibitz +kick +kickback +kickoff +kid +Kidde +kiddie +kidnap +kidney +Kieffer +Kiev +Kiewit +Kigali +Kikuyu +Kilgore +kill +killdeer +killjoy +kilohm +Kim +Kimball +Kimberly +kimono +kin +kind +kindergarten +kindle +kindred +kinematic +kinesic +kinesthesis +kinetic +king +kingbird +kingdom +kingfisher +kinglet +kingpin +Kingsbury +Kingsley +Kingston +kink +kinky +Kinney +Kinshasha +kiosk +Kiowa +Kipling +Kirby +Kirchner +Kirchoff +kirk +Kirkland +Kirkpatrick +Kirov +kiss +kissing +kit +Kitakyushu +kitchen +kitchenette +kite +kitten +kittenish +kittle +kitty +kiva +kivu +Kiwanis +Klan +Klaus +klaxon +kleenex +Klein +Kline +Klux +klystron +knack +Knapp +knapsack +Knauer +knead +knee +kneecap +kneel +knelt +knew +knick +Knickerbocker +knife +knifelike +knight +Knightsbridge +knit +knives +knob +knobby +knock +knockdown +knockout +knoll +knot +Knott +knotty +know +knoweth +knowhow +knowledge +knowledgeable +Knowles +Knowlton +known +Knox +Knoxville +knuckle +knuckleball +Knudsen +Knudson +knurl +Knutsen +Knutson +koala +Koch +Kochab +Kodachrome +kodak +Kodiak +Koenig +Koenigsberg +kohlrabi +koinonia +kola +kolkhoz +kombu +Kong +Koppers +Koran +Korea +kosher +Kowalewski +Kowalski +kraft +Krakatoa +Krakow +Kramer +Krause +kraut +Kremlin +Kresge +Krieger +Krishna +Kristin +Kronecker +Krueger +Kruger +Kruse +krypton +Ku +kudo +kudzu +Kuhn +kulak +kumquat +Kurd +Kurt +Kuwait +kwashiorkor +Kyle +Kyoto +l +l'oeil +l's +la +lab +Laban +label +labile +laboratory +laborious +labour +Labrador +labyrinth +lac +lace +lacerate +Lacerta +lacewing +Lachesis +lack +lackadaisic +lackey +lacquer +lacrosse +lactate +lacuna +lacunae +lacustrine +lacy +lad +laden +ladle +lady +ladyfern +ladylike +Lafayette +lag +lager +lagging +lagoon +Lagos +Lagrange +Lagrangian +Laguerre +Lahore +laid +Laidlaw +lain +lair +laissez +laity +lake +Lakehurst +lakeside +lam +Lamar +lamb +lambda +lambert +lame +lamellar +lament +lamentation +laminar +laminate +lamp +lampblack +lamplight +lampoon +lamprey +Lana +Lancashire +Lancaster +lance +land +landau +landfill +landhold +Landis +landlord +landmark +landowner +landscape +landslide +lane +Lang +Lange +Langley +Langmuir +language +languid +languish +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 +latch +late +latent +later +latera +lateral +Lateran +laterite +latest +latex +lath +lathe +Lathrop +Latin +Latinate +latitude +latitudinal +latitudinary +Latrobe +latter +lattice +latus +laud +laudanum +laudatory +Lauderdale +Laue +laugh +laughingstock +Laughlin +laughter +launch +launder +laundry +laura +laureate +laurel +Lauren +Laurence +Laurent +Laurentian +Laurie +Lausanne +lava +lavabo +lavatory +lavender +lavish +Lavoisier +law +lawbreak +lawgive +lawmake +lawman +lawmen +lawn +Lawrence +lawrencium +Lawson +lawsuit +lawyer +lax +laxative +lay +layette +layman +laymen +layoff +layout +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 +lectionary +lecture +led +ledge +lee +leech +Leeds +leek +leer +leery +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 +Leigh +Leighton +Leila +leisure +leitmotif +leitmotiv +Leland +lemma +lemming +lemon +lemonade +Lemuel +Len +Lena +lend +length +lengthen +lengthwise +lengthy +lenient +Lenin +Leningrad +Leninism +Leninist +Lennox +Lenny +lens +lent +Lenten +lenticular +lentil +Leo +Leon +Leona +Leonard +Leonardo +Leone +Leonid +leonine +leopard +Leopold +leper +leprosy +Leroy +Lesbian +lesion +Leslie +Lesotho +less +lessee +lessen +lesson +lessor +lest +Lester +let +lethal +lethargy +Lethe +Letitia +letterhead +letterman +lettermen +lettuce +leukemia +levee +level +lever +leverage +Levi +Levin +Levine +Levis +levitate +Leviticus +Levitt +levity +levy +lew +lewd +lewis +lexical +lexicography +lexicon +Lexington +Leyden +liable +liaison +liar +libation +libel +libelous +liberal +liberate +Liberia +libertarian +libertine +liberty +libidinous +libido +librarian +library +librate +librettist +libretto +Libreville +Libya +lice +licensable +licensee +licensor +licentious +lichen +lick +licorice +lid +lie +Liechtenstein +lied +lien +lieu +lieutenant +life +lifeblood +lifeboat +lifeguard +lifelike +lifelong +lifespan +lifestyle +lifetime +LIFO +lift +ligament +ligand +ligature +Ligget +Liggett +light +lighten +lightface +lighthearted +lighthouse +lightning +lightproof +lightweight +lignite +lignum +like +liken +likewise +Lila +lilac +Lilian +Lillian +Lilliputian +Lilly +lilt +lily +Lima +limb +limbic +limbo +lime +limelight +Limerick +limestone +limit +limitate +limousine +limp +limpet +limpid +limpkin +Lin +Lincoln +Lind +Linda +Lindberg +Lindbergh +linden +Lindholm +Lindquist +Lindsay +Lindsey +Lindstrom +line +lineage +lineal +linear +linebacker +lineman +linemen +linen +lineup +linger +lingerie +lingo +lingua +lingual +linguist +liniment +link +linkage +linoleum +Linotype +linseed +lint +Linus +lion +Lionel +lioness +lip +lipid +Lippincott +Lipschitz +Lipscomb +lipstick +Lipton +liquefy +liqueur +liquid +liquidate +liquidus +liquor +Lisa +Lisbon +Lise +lisle +lisp +Lissajous +list +listen +lit +litany +literacy +literal +literary +literate +literature +lithe +lithic +lithium +lithograph +lithography +lithology +lithosphere +lithospheric +litigant +litigate +litigious +litmus +litterbug +little +littleneck +Littleton +Litton +littoral +liturgic +liturgy +live +Livermore +Liverpool +livery +livestock +liveth +livid +Livingston +livre +Liz +lizard +Lizzie +Lloyd +lo +load +loaf +loam +loamy +loan +loath +loathe +loathsome +loaves +lob +lobar +lobby +lobe +loblolly +lobo +lobscouse +lobster +lobular +lobule +local +locale +locate +loci +lock +Locke +Lockhart +Lockheed +Lockian +locknut +lockout +locksmith +lockup +Lockwood +locomote +locomotion +locomotive +locomotor +locomotory +locus +locust +locutor +lodestone +lodge +lodgepole +Lodowick +Loeb +loess +loft +lofty +log +Logan +logarithm +logarithmic +loge +loggerhead +logging +logic +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 +look +lookout +lookup +loom +Loomis +loon +loop +loophole +loose +looseleaf +loosen +loosestrife +loot +lop +lope +Lopez +lopseed +lopsided +loquacious +loquacity +lord +lore +Lorelei +Loren +Lorinda +Lorraine +Los +losable +lose +loss +lossy +lost +lot +lotion +Lotte +lottery +Lottie +lotus +Lou +loud +loudspeak +Louis +Louisa +Louise +Louisiana +Louisville +lounge +Lounsbury +Lourdes +louse +lousy +louver +Louvre +love +lovebird +Lovelace +Loveland +lovelorn +low +lowboy +lowdown +Lowe +Lowell +lower +lowland +Lowry +loy +loyal +loyalty +lozenge +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 +Luis +luke +lukemia +lukewarm +lull +lullaby +lulu +lumbar +lumber +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 +lustrous +lusty +lutanist +lute +lutetium +Luther +Lutheran +Lutz +lux +luxe +Luxembourg +luxuriant +luxuriate +luxurious +luxury +Luzon +lycopodium +Lydia +lye +lying +Lykes +Lyle +Lyman +lymph +lymphocyte +lymphoma +lynch +Lynchburg +Lynn +lynx +Lyon +Lyons +Lyra +lyric +lyricism +lysergic +m +m's +ma +Mabel +Mac +macabre +macaque +MacArthur +Macassar +Macbeth +MacDonald +mace +Macedon +Macedonia +MacGregor +Mach +Machiavelli +machination +machine +machinelike +machinery +machismo +macho +macintosh +mack +MacKenzie +mackerel +Mackey +Mackinac +Mackinaw +mackintosh +MacMillan +Macon +macro +macromolecular +macromolecule +macrophage +macroscopic +macrostructure +mad +Madagascar +madam +Madame +madcap +madden +Maddox +made +Madeira +Madeleine +Madeline +madhouse +Madison +madman +madmen +Madonna +Madras +Madrid +madrigal +Madsen +madstone +Mae +Maelstrom +maestro +magazine +Magdalene +magenta +Maggie +maggot +maggoty +magi +magic +magician +magisterial +magistrate +magna +magnanimity +magnanimous +magnate +magnesia +magnesite +magnesium +magnet +magnetic +magnetite +magneto +magnetron +magnificent +magnify +magnitude +magnolia +magnum +Magnuson +Magog +magpie +Magruder +Mahayana +Mahayanist +mahogany +Mahoney +maid +maiden +maidenhair +maidservant +Maier +mail +mailbox +mailman +mailmen +maim +main +Maine +mainland +mainline +mainstream +maintain +maintenance +maitre +majestic +majesty +major +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 +Malton +maltreat +mambo +mamma +mammal +mammalian +mammoth +man +mana +manage +manageable +managerial +Managua +Manama +manatee +Manchester +mandamus +mandarin +mandate +mandatory +mandrake +mandrel +mandrill +mane +maneuver +Manfred +manganese +mange +mangel +mangle +Manhattan +manhole +manhood +mania +maniac +maniacal +manic +manifest +manifestation +manifold +manikin +Manila +manipulable +manipulate +Manitoba +mankind +Manley +Mann +manna +mannequin +mannerism +manometer +manor +manpower +Mans +manse +manservant +Mansfield +mansion +manslaughter +mantel +mantic +mantis +mantissa +mantle +mantlepiece +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 +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 +Marks +marksman +marksmen +Marlboro +Marlborough +Marlene +marlin +Marlowe +marmalade +marmot +maroon +marque +marquee +marquess +Marquette +marquis +marriage +marriageable +married +Marrietta +Marriott +marrow +marrowbone +marry +Mars +Marseilles +marsh +Marsha +marshal +Marshall +marshland +marshmallow +mart +marten +martensite +Martha +martial +Martian +martin +Martinez +martingale +martini +Martinique +Martinson +Marty +martyr +martyrdom +marvel +marvelous +Marvin +Marx +Mary +Maryland +mascara +masculine +maser +Maseru +mash +mask +mason +Masonic +Masonite +masonry +masque +masquerade +mass +Massachusetts +massacre +massage +masseur +Massey +massif +massive +mast +mastermind +masterpiece +mastery +mastic +mastiff +mastodon +mat +match +matchbook +matchmake +mate +Mateo +mater +material +materiel +maternal +maternity +math +mathematic +mathematician +Mathematik +Mathews +Mathewson +Mathias +Mathieu +Matilda +matinal +matinee +matins +Matisse +matriarch +matriarchal +matrices +matriculate +matrimonial +matrimony +matrix +matroid +matron +Matson +matte +Matthew +Matthews +mattock +mattress +Mattson +maturate +mature +maudlin +maul +Maureen +Maurice +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 +mayhem +Maynard +Mayo +mayonnaise +mayor +mayoral +mayst +Mazda +maze +mazurka +MBA +Mbabane +McAdams +McAllister +McBride +McCabe +McCall +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 +McPherson +me +mead +meadow +meadowland +meadowsweet +meager +meal +mealtime +mealy +mean +meander +meant +meantime +meanwhile +measle +measure +meat +meaty +Mecca +mechanic +mechanism +mechanist +mecum +medal +medallion +meddle +Medea +media +medial +median +mediate +medic +medicate +Medici +medicinal +medicine +medico +mediocre +mediocrity +meditate +Mediterranean +medium +medley +Medusa +meek +meet +meetinghouse +Meg +megabit +megabyte +megahertz +megalomania +megalomaniac +megaton +megavolt +megawatt +megaword +megohm +Meier +Meistersinger +Mekong +Mel +melamine +melancholy +Melanesia +melange +Melanie +melanin +melanoma +Melbourne +Melcher +meld +melee +Melinda +meliorate +Melissa +Mellon +mellow +melodic +melodious +melodrama +melodramatic +melody +melon +Melpomene +melt +Melville +Melvin +member +membrane +memento +memo +memoir +memorabilia +memorable +memoranda +memorandum +memorial +memory +Memphis +men +menace +menagerie +menarche +mend +mendacious +mendacity +mendelevium +Mendelssohn +Menelaus +menfolk +menhaden +menial +meniscus +Menlo +Mennonite +menstruate +mensurable +mensuration +mental +mention +mentor +menu +Menzies +Mephistopheles +mercantile +Mercator +Mercedes +mercenary +mercer +merchandise +merchant +mercilessly +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 +meson +Mesozoic +mesquite +mess +message +messenger +Messiah +messieurs +Messrs +messy +met +metabole +metabolic +metabolism +metabolite +metal +metallic +metalliferous +metallography +metalloid +metallurgic +metallurgist +metallurgy +metalwork +metamorphic +metamorphism +metamorphose +metamorphosis +metaphor +metaphoric +Metcalf +mete +meteor +meteoric +meteorite +meteoritic +meteorology +meter +methacrylate +methane +methanol +method +methodic +Methodism +Methodist +methodology +Methuen +Methuselah +methyl +methylene +meticulous +metier +metric +metro +metronome +metropolis +metropolitan +mettle +mettlesome +Metzler +mew +Mexican +Mexico +Meyer +Meyers +mezzo +mi +Miami +miasma +miasmal +mica +mice +Michael +Michaelangelo +Michelangelo +Michelin +Michelson +michigan +Mickelson +Mickey +Micky +micro +microbial +microcosm +microfiche +micrography +microjoule +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 +midway +midweek +Midwest +Midwestern +midwife +midwinter +midwives +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 +militiamen +milk +milkweed +milky +mill +Millard +millenarian +millenia +millennia +millennium +miller +millet +Millie +Millikan +millinery +million +millionaire +millionth +millipede +Mills +millstone +milord +milt +Milton +Miltonic +Milwaukee +mimeograph +mimesis +mimetic +Mimi +mimic +mimicked +mimicking +minaret +mince +mincemeat +mind +Mindanao +mine +minefield +mineral +mineralogy +Minerva +minestrone +minesweeper +mingle +mini +miniature +minibike +minicomputer +minim +minima +minimal +minimax +minimum +minion +ministerial +ministry +mink +Minneapolis +Minnesota +Minnie +minnow +Minoan +minor +Minos +minot +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 +mispronunciation +miss +misshapen +missile +mission +missionary +Mississippi +Mississippian +missive +Missoula +Missouri +Missy +mist +mistletoe +misty +MIT +Mitchell +mite +mitigate +mitral +mitre +mitt +mitten +mix +mixture +mixup +Mizar +mnemonic +moan +moat +mob +mobcap +Mobil +mobile +mobility +mobster +moccasin +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 +Mohammedan +Mohawk +Mohr +moiety +Moines +moire +Moiseyev +moist +moisten +moisture +molal +molar +molasses +mold +moldboard +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 +monastery +monastic +monaural +Monday +monel +monetarism +monetary +money +moneymake +Mongolia +mongoose +Monica +monies +monitor +monitory +monk +monkey +monkeyflower +monkish +Monmouth +Monoceros +monochromatic +monochromator +monocotyledon +monocular +monogamous +monogamy +monolith +monologist +monologue +monomer +monomeric +monomial +Monongahela +monopoly +monotonous +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 +mood +moody +moon +Mooney +moonlight +moonlike +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 +morphology +morphophonemic +Morrill +morris +Morrison +Morrissey +Morristown +morrow +Morse +morsel +mort +mortal +mortar +mortem +mortgage +mortgagee +mortgagor +mortician +mortify +mortise +Morton +mosaic +Moscow +Moser +Moses +Moslem +mosque +mosquito +moss +mossy +most +mot +motel +motet +moth +mother +motherhood +motherland +motif +motion +motivate +motive +motley +motor +motorcycle +Motorola +mottle +motto +mould +Moulton +mound +mount +mountain +mountaineer +mountainous +mountainside +mourn +mouse +moustache +mousy +mouth +mouthpiece +Mouton +move +movie +mow +Moyer +Mozart +MPH +Mr +Mrs +Ms +mu +much +mucilage +muck +mucosa +mucus +mud +Mudd +muddle +muddlehead +muddy +mudguard +mudsling +Mueller +muezzin +muff +muffin +muffle +mug +mugging +muggy +mugho +Muir +Mukden +mulatto +mulberry +mulch +mulct +mule +mulish +mull +mullah +mullein +Mullen +mulligan +mulligatawny +mullion +multi +multifarious +multinomial +multiple +multiplet +multiplex +multiplexor +multipliable +multiplicand +multiplication +multiplicative +multiplicity +multiply +multitude +multitudinous +mum +mumble +Mumford +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 +Muscovy +muscular +musculature +muse +museum +mush +mushroom +mushy +music +musicale +musician +musicology +musk +Muskegon +muskellunge +musket +muskmelon +muskox +muskoxen +muskrat +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 +myel +myeline +myeloid +Myers +mylar +mynah +Mynheer +myocardial +myocardium +myofibril +myopia +myopic +myosin +Myra +myriad +Myron +myrrh +myrtle +myself +mysterious +mystery +mystic +mystify +mystique +myth +mythic +mythology +n +n's +NAACP +nab +Nabisco +nabla +Nadine +nadir +nag +Nagasaki +nagging +Nagoya +Nagy +naiad +nail +Nair +Nairobi +naive +naivete +naked +name +nameable +nameplate +namesake +Nan +Nancy +Nanette +Nanking +nanosecond +Nantucket +Naomi +nap +nape +napkin +Naples +Napoleon +Napoleonic +Narbonne +narcissist +narcissus +narcosis +narcotic +Narragansett +narrate +narrow +nary +NASA +nasal +nascent +Nash +Nashua +Nashville +Nassau +nasturtium +nasty +Nat +natal +Natalie +Natchez +Nathan +Nathaniel +nation +nationhood +nationwide +native +NATO +natty +natural +nature +naturopath +naughty +nausea +nauseate +nauseum +nautical +nautilus +Navajo +naval +nave +navel +navigable +navigate +navy +nay +Nazarene +Nazareth +Nazi +Nazism +NBC +NBS +NC +NCAA +NCR +ND +Ndjamena +ne +Neal +Neanderthal +neap +Neapolitan +near +nearby +nearest +nearsighted +neat +neater +neath +Nebraska +nebula +nebulae +nebular +nebulous +necessary +necessitate +necessity +neck +necklace +neckline +necktie +necromancer +necromancy +necromantic +necropsy +necrosis +necrotic +nectar +nectareous +nectary +Ned +nee +need +needham +needle +needlepoint +needn't +needy +Neff +negate +neglect +negligee +negligent +negligible +negotiable +negotiate +Negro +Negroes +Negroid +Nehru +Neil +neither +Nell +Nellie +Nelsen +Nelson +nemesis +neoclassic +neodymium +neolithic +neologism +neon +neonatal +neonate +neophyte +neoprene +Nepal +nepenthe +nephew +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 +Neva +Nevada +neve +nevertheless +Nevins +new +Newark +Newbold +newborn +Newcastle +newcomer +newel +Newell +newfound +Newfoundland +newlywed +Newman +Newport +newsboy +newscast +newsletter +newsman +newsmen +newspaper +newspaperman +newspapermen +newsreel +newsstand +Newsweek +newt +newton +Newtonian +next +Nguyen +NH +Niagara +Niamey +nib +nibble +Nibelung +nibs +Nicaragua +nice +nicety +niche +Nicholas +Nicholls +Nichols +Nicholson +nichrome +nick +nickel +nickname +Nicodemus +Nicosia +nicotine +niece +Nielsen +Nielson +Nietzsche +Niger +Nigeria +niggardly +nigger +niggle +nigh +night +nightcap +nightclub +nightdress +nightfall +nightgown +nighthawk +nightingale +nightmare +nightmarish +nightshirt +nighttime +NIH +nihilism +nihilist +Nikko +Nikolai +nil +Nile +nilpotent +nimble +nimbus +NIMH +Nina +nine +ninebark +ninefold +nineteen +nineteenth +ninetieth +ninety +Nineveh +ninth +Niobe +niobium +nip +nipple +Nippon +nirvana +nit +nitpick +nitrate +nitric +nitride +nitrite +nitrogen +nitrogenous +nitroglycerine +nitrous +nitty +Nixon +NJ +NM +no +NOAA +Noah +nob +Nobel +nobelium +noble +nobleman +noblemen +noblesse +nobody +nobody'd +nocturnal +nocturne +nod +nodal +node +nodular +nodule +Noel +noise +noisemake +noisy +Nolan +Noll +nolo +nomadic +nomenclature +nominal +nominate +nominee +nomograph +non +nonce +nonchalant +nondescript +none +nonetheless +nonogenarian +nonsensic +noodle +nook +noon +noontime +noose +nor +Nordhoff +Nordstrom +Noreen +Norfolk +norm +Norma +normal +normalcy +Norman +Normandy +normative +Norris +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 +not +notary +notate +notch +note +notebook +noteworthy +nothing +notice +noticeable +notify +notion +notoriety +notorious +Nottingham +notwithstanding +Nouakchott +noun +nourish +nouveau +Nov +nova +Novak +novel +novelty +November +novice +novitiate +novo +Novosibirsk +now +nowaday +nowhere +nowise +noxious +nozzle +NRC +NSF +NTIS +nu +nuance +Nubia +nubile +nucleant +nuclear +nucleate +nuclei +nucleic +nucleoli +nucleolus +nucleotide +nucleus +nuclide +nude +nudge +nugatory +nugget +nuisance +null +nullify +numb +numerable +numeral +numerate +numeric +Numerische +numerology +numerous +numinous +numismatic +numismatist +nun +nuptial +nurse +nursery +nurture +nut +nutate +nutcrack +nuthatch +nutmeg +nutria +nutrient +nutrition +nutritious +nutritive +nutshell +nuzzle +NY +NYC +nylon +nymph +nymphomania +nymphomaniac +Nyquist +NYU +o +O'Brien +o'clock +O'Connell +O'Connor +O'Dell +O'Donnell +O'Dwyer +o'er +O'Hare +O'Leary +o's +O'Shea +O'Sullivan +oaf +oak +oaken +Oakland +Oakley +oakwood +oar +oases +oasis +oat +oath +oatmeal +obduracy +obdurate +obedient +obeisant +obelisk +Oberlin +obese +obey +obfuscate +obfuscatory +obituary +object +objectify +objectivity +objector +objet +oblate +obligate +obligatory +oblige +oblique +obliterate +oblivion +oblivious +oblong +obnoxious +oboe +oboist +obscene +obscure +obsequious +obsequy +observant +observation +observatory +observe +obsess +obsession +obsessive +obsidian +obsolescent +obsolete +obstacle +obstetric +obstinacy +obstinate +obstruct +obtain +obtrude +obtrusive +obverse +obviate +obvious +ocarina +occasion +occident +occidental +occipital +occlude +occlusion +occlusive +occult +occultate +occupant +occupation +occupy +occur +occurred +occurrent +occurring +ocean +Oceania +oceanic +oceanography +oceanside +ocelot +Oct +octagon +octagonal +octahedra +octahedral +octahedron +octal +octane +octant +octave +Octavia +octennial +octet +octile +octillion +October +octogenarian +octopus +octoroon +ocular +odd +ode +Odessa +Odin +odious +odium +odometer +odorous +Odysseus +Odyssey +Oedipal +Oedipus +oersted +of +off +offal +offbeat +Offenbach +offend +offensive +offer +offertory +offhand +office +officeholder +officemate +official +officialdom +officiate +officio +officious +offload +offsaddle +offset +offsetting +offshoot +offshore +offspring +offstage +oft +often +oftentimes +Ogden +ogle +ogre +ogress +oh +Ohio +ohm +ohmic +ohmmeter +oil +oilcloth +oilman +oilmen +oilseed +oily +oint +OK +Okay +Okinawa +Oklahoma +Olaf +old +olden +Oldenburg +Oldsmobile +oldster +oldy +oleander +olefin +oleomargarine +olfactory +Olga +oligarchic +oligarchy +oligoclase +oligopoly +Olin +olive +Oliver +Olivetti +Olivia +olivine +Olsen +Olson +Olympia +Olympic +Omaha +Oman +ombudsman +omega +omelet +omen +omicron +ominous +omission +omit +omitted +omitting +omnibus +omnipotent +omnipresent +omniscient +on +once +oncology +oncoming +one +Oneida +onerous +oneself +onetime +oneupmanship +ongoing +onion +onlook +only +onomatopoeic +Onondaga +onrush +onrushing +onset +onslaught +Ontario +onto +ontogeny +ontology +onus +onward +onyx +oodles +ooze +opacity +opal +opalescent +opaque +OPEC +Opel +open +opera +operable +operand +operant +operate +operatic +operetta +Ophiucus +opiate +opinion +opinionate +opium +opossum +Oppenheimer +opponent +opportune +opposable +oppose +opposite +opposition +oppress +oppression +oppressive +oppressor +opprobrium +opt +opthalmic +opthalmologic +opthalmology +optic +optima +optimal +optimism +optimist +optimistic +optimum +option +optoacoustic +optoisolate +optometrist +optometry +opulent +opus +or +oracle +oral +orange +orangeroot +orangutan +orate +oratoric +oratorio +oratory +orb +orbit +orbital +orchard +orchestra +orchestral +orchestrate +orchid +orchis +ordain +ordeal +order +orderly +ordinal +ordinance +ordinary +ordinate +ordnance +ore +oregano +Oregon +Oresteia +Orestes +organ +organdy +organic +organismic +organometallic +orgasm +orgiastic +orgy +orient +oriental +orifice +origin +original +originate +Orin +Orinoco +oriole +Orion +Orkney +Orlando +Orleans +ornament +ornamentation +ornate +ornately +ornery +orographic +orography +Orono +orphan +orphanage +Orpheus +Orphic +Orr +Ortega +orthant +orthicon +orthoclase +orthodontic +orthodontist +orthodox +orthodoxy +orthogonal +orthography +orthonormal +orthopedic +orthophosphate +orthorhombic +Orville +Orwell +Orwellian +Osaka +Osborn +Osborne +Oscar +oscillate +oscillatory +oscilloscope +Osgood +Oshkosh +osier +Osiris +Oslo +osmium +osmosis +osmotic +osprey +osseous +ossify +ostensible +ostentatious +osteology +osteopath +osteopathic +osteopathy +osteoporosis +ostracism +ostracod +Ostrander +ostrich +Oswald +Othello +other +otherwise +otherworld +otherworldly +Otis +Ott +Ottawa +otter +Otto +Ottoman +Ouagadougou +ouch +ought +oughtn't +ounce +our +ourselves +oust +out +outermost +outlandish +outlawry +outrageous +ouzel +ouzo +ova +oval +ovary +ovate +oven +ovenbird +over +overhang +overt +overture +Ovid +oviform +ow +owe +Owens +owing +owl +owly +own +ox +oxalate +oxalic +oxcart +oxen +oxeye +Oxford +oxidant +oxidate +oxide +Oxnard +oxygen +oxygenate +oyster +Ozark +ozone +p +p's +pa +Pablo +Pabst +pace +pacemake +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 +painstaking +paint +paintbrush +pair +pairwise +Pakistan +Pakistani +pal +palace +palate +Palatine +palazzi +palazzo +pale +Paleolithic +Paleozoic +Palermo +Palestine +palette +palfrey +palindrome +palindromic +palisade +pall +palladia +Palladian +palladium +pallet +palliate +pallid +palm +palmate +palmetto +Palmolive +Palmyra +Palo +Palomar +palpable +palsy +Pam +Pamela +pampa +pamper +pamphlet +pan +panacea +panama +pancake +Pancho +pancreatic +panda +Pandanus +pandemic +pandemonium +pander +Pandora +pane +panel +pang +panic +panicked +panicky +panicle +panjandrum +panoply +panorama +panoramic +pansy +pant +pantheism +pantheist +pantheon +panther +pantomime +pantomimic +pantry +panty +Paoli +pap +papa +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 +paragraph +Paraguay +parakeet +paralinguistic +parallax +parallel +parallelepiped +paralysis +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 +parenthood +Pareto +pariah +parimutuel +Paris +parish +parishioner +Parisian +park +Parke +Parkinson +parkish +parkland +parklike +Parks +parkway +parlance +parlay +parley +parliament +parliamentarian +parliamentary +parochial +parody +parole +parolee +parquet +Parr +Parrish +parrot +parrotlike +parry +parse +Parsifal +parsimonious +parsimony +parsley +parsnip +parson +parsonage +Parsons +part +partake +Parthenon +partial +participant +participate +participle +particle +particular +particulate +partisan +partition +partner +partook +partridge +party +parvenu +Pasadena +Pascal +paschal +pasha +Paso +pass +passage +passageway +Passaic +passband +passe +passenger +passer +passerby +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 +pathetic +pathogen +pathogenesis +pathogenic +pathology +pathos +pathway +patient +patina +patio +patriarch +patriarchal +patriarchy +Patrice +Patricia +patrician +Patrick +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 +paw +pawn +pawnshop +Pawtucket +pax +pay +paycheck +payday +paymaster +Payne +payoff +payroll +Paz +PBS +pea +Peabody +peace +peaceable +peacemake +peacetime +peach +Peachtree +peacock +peafowl +peak +peaky +peal +Peale +peanut +pear +Pearce +pearl +pearlstone +Pearson +peasant +peasanthood +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 +peed +peek +peel +peep +peephole +peepy +peer +peg +Pegasus +pegboard +pegging +Peggy +pejorative +Peking +Pelham +pelican +pellagra +pellet +pelt +peltry +pelvic +pelvis +Pembroke +pemmican +pen +penal +penalty +penance +penates +pence +penchant +pencil +pend +pendant +pendulum +Penelope +penetrable +penetrate +penguin +Penh +penicillin +peninsula +penitent +penitential +penitentiary +penman +penmen +Penn +penna +pennant +Pennsylvania +penny +pennyroyal +Penrose +Pensacola +pension +pensive +pent +pentagon +pentagonal +pentane +Pentecost +pentecostal +penthouse +penultimate +penumbra +penurious +penury +peony +people +Peoria +pep +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 +peremptory +perennial +Perez +perfect +perfectible +perfidious +perfidy +perforate +perforce +perform +performance +perfume +perfumery +perfunctory +perfusion +Pergamon +perhaps +Periclean +Pericles +perihelion +peril +Perilla +perilous +perimeter +period +periodic +peripatetic +peripheral +periphery +periphrastic +periscope +perish +peritectic +periwinkle +perjure +perjury +perk +Perkins +perky +Perle +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 +Perseus +perseverance +persevere +Pershing +Persia +Persian +persiflage +persimmon +persist +persistent +person +persona +personage +personal +personify +personnel +perspective +perspicacious +perspicous +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 +Peters +Petersburg +Petersen +Peterson +petit +petite +petition +petrel +petri +petrify +petrochemical +petroglyph +petrol +petroleum +petrology +petticoat +petty +petulant +petunia +Peugeot +pew +pewee +pewter +pfennig +Pfizer +phagocyte +phalanger +phalanx +phalarope +phantasy +phantom +pharmaceutic +pharmacist +pharmacology +pharmacopoeia +pharmacy +phase +PhD +pheasant +Phelps +phenol +phenolic +phenomena +phenomenal +phenomenology +phenomenon +phenotype +phenyl +phi +Phil +Philadelphia +philanthrope +philanthropic +philanthropy +philharmonic +Philip +Philippine +Philistine +Phillips +philodendron +philology +philosoph +philosophic +philosophy +Phipps +phloem +phlox +phobic +phoebe +Phoenicia +phoenix +phon +phone +phoneme +phonemic +phonetic +phonic +phonograph +phonology +phonon +phony +phosgene +phosphate +phosphide +phosphine +phosphor +phosphoresce +phosphorescent +phosphoric +phosphorus +photo +photogenic +photography +photolysis +photolytic +photon +phrase +phrasemake +phraseology +phthalate +phycomycetes +phyla +Phyllis +phylogeny +physic +physician +Physik +physiochemical +physiognomy +physiology +physiotherapist +physiotherapy +physique +phytoplankton +pi +pianissimo +pianist +piano +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 +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 +pilfer +pilferage +pilgrim +pilgrimage +pill +pillage +pillar +pillory +pillow +Pillsbury +pilot +pimp +pimple +pin +pinafore +pinball +pinch +pincushion +pine +pineapple +Pinehurst +ping +pinhead +pinhole +pinion +pink +pinkie +pinkish +pinnacle +pinnate +pinochle +pinpoint +pinscher +Pinsky +pint +pintail +pinto +pinwheel +pinxter +pion +pioneer +pious +pip +pipe +pipeline +Piper +pipette +pipsissewa +piquant +pique +piracy +Piraeus +pirate +pirogue +pirouette +Piscataway +Pisces +piss +pistachio +pistol +pistole +piston +pit +pitch +pitchblende +pitchfork +pitchstone +piteous +pitfall +pith +pithy +pitiable +pitilessly +pitman +Pitney +Pitt +Pittsburgh +Pittsfield +Pittston +pituitary +pity +Pius +pivot +pivotal +pixel +pixy +pizza +pizzicato +placate +placater +place +placeable +placebo +placeholder +placenta +placental +placid +plagiarism +plagiarist +plagioclase +plague +plagued +plaguey +plaid +plain +Plainfield +plaintiff +plaintive +plan +planar +Planck +plane +planeload +planet +planetaria +planetarium +planetary +planetesimal +planetoid +plank +plankton +planoconcave +planoconvex +plant +plantain +plantation +plaque +plasm +plasma +plasmon +plaster +plastic +plastisol +plastron +plat +plate +plateau +platelet +platen +platform +platinize +platinum +platitude +platitudinous +Plato +platonic +Platonism +Platonist +platoon +Platte +plausible +play +playa +playback +playboy +playground +playhouse +playmate +playoff +playroom +playtime +playwright +playwriting +plaza +plea +plead +pleasant +please +pleasure +pleat +plebeian +plebian +pledge +Pleiades +Pleistocene +plenary +plenipotentiary +plenitude +plenty +plenum +plethora +pleura +pleural +Plexiglas +pliable +pliancy +pliant +pliers +plight +Pliny +Pliocene +plod +plop +plot +plover +plowman +plowshare +pluck +plucky +plug +plugboard +pluggable +plugging +plum +plumage +plumb +plumbago +plumbate +plume +plummet +plump +plunder +plunge +plunk +plural +plus +plush +plushy +Plutarch +Pluto +plutonium +ply +Plymouth +plyscore +plywood +PM +pneumatic +pneumonia +Po +poach +pocket +pocketbook +Pocono +pod +podge +podia +podium +Poe +poem +poesy +poet +poetic +poetry +pogo +pogrom +poi +poignant +Poincare +poinsettia +point +poise +poison +poisonous +Poisson +poke +pokerface +pol +Poland +polar +polarimeter +Polaris +polariscope +polariton +polarogram +polarograph +polarography +Polaroid +polaron +pole +polecat +polemic +police +policeman +policemen +policy +polio +polis +polish +Politburo +polite +politic +politician +politicking +politico +polity +Polk +polka +poll +Pollard +pollcadot +pollen +pollock +polloi +pollutant +pollute +pollution +Pollux +polo +polonaise +polonium +polopony +polygon +polygonal +polygynous +polyhedra +polyhedral +polyhedron +Polyhymnia +polymer +polymerase +polymeric +polymorph +polymorphic +polynomial +Polyphemus +polyphony +polypropylene +polytechnic +polytope +polytypy +pomade +pomegranate +Pomona +pomp +pompadour +pompano +Pompeii +pompey +pompon +pomposity +pompous +Ponce +Ponchartrain +poncho +pond +ponder +ponderous +pong +Pontiac +pontiff +pontific +pontificate +pony +pooch +poodle +pooh +pool +Poole +poop +poor +pop +pope +popish +poplar +poplin +poppy +populace +popular +populate +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 +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 +postmortem +postmultiply +postoperative +postorder +postpone +postprocess +postprocessor +postscript +postulate +posture +postwar +posy +pot +potable +potash +potassium +potato +potatoes +potbelly +potboil +potent +potentate +potential +potentiometer +pothole +potion +potlatch +Potomac +potpourri +pottery +Potts +pouch +Poughkeepsie +poultice +poultry +pounce +pound +pour +pout +poverty +pow +powder +powderpuff +powdery +Powell +power +powerhouse +Powers +Poynting +ppm +practicable +practical +practice +practise +practitioner +Prado +pragmatic +pragmatism +pragmatist +Prague +prairie +praise +praiseworthy +pram +prance +prank +praseodymium +Pratt +Pravda +pray +prayer +preach +preachy +preamble +Precambrian +precarious +precaution +precautionary +precede +precedent +precept +precess +precession +precinct +precious +precipice +precipitable +precipitate +precipitous +precis +precise +precision +preclude +precocious +precocity +precursor +predatory +predecessor +predicament +predicate +predict +predictor +predilect +predispose +predisposition +predominant +predominate +preeminent +preempt +preemption +preemptive +preemptor +preen +prefab +prefabricate +preface +prefatory +prefect +prefecture +prefer +preference +preferential +preferred +preferring +prefix +pregnant +prehistoric +prejudice +prejudicial +preliminary +prelude +premature +premeditate +premier +premiere +premise +premium +premonition +premonitory +Prentice +preoccupy +prep +preparation +preparative +preparatory +prepare +preponderant +preponderate +preposition +preposterous +prerequisite +prerogative +presage +Presbyterian +presbytery +Prescott +prescribe +prescript +prescription +prescriptive +presence +present +presentation +presentational +preservation +preserve +preside +president +presidential +press +pressure +prestidigitate +prestige +prestigious +presto +Preston +presume +presumed +presuming +presumption +presumptive +presumptuous +presuppose +presupposition +pretend +pretense +pretension +pretentious +pretext +Pretoria +pretty +prevail +prevalent +prevent +prevention +preventive +preview +previous +prexy +prey +Priam +price +prick +prickle +pride +priest +Priestley +prig +priggish +prim +prima +primacy +primal +primary +primate +prime +primeval +primitive +primitivism +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 +pro +probabilist +probate +probe +probity +problem +problematic +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 +productivity +Prof +profane +profess +profession +professional +professor +professorial +proffer +proficient +profile +profit +profligate +profound +profundity +profuse +profusion +progenitor +progeny +prognosis +prognosticate +programmable +programmed +programmer +programming +progress +progression +progressive +prohibit +prohibition +prohibitive +prohibitory +project +projectile +projector +Prokofieff +prolate +proletariat +proliferate +prolific +prolix +prologue +prolong +prolongate +prolusion +prom +promenade +Promethean +Prometheus +promethium +prominent +promiscuous +promise +promote +promotion +prompt +promptitude +promulgate +prone +prong +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 +proscribe +proscription +prose +prosecute +prosecution +prosecutor +Proserpine +prosodic +prosody +prosopopoeia +prospect +prospector +prospectus +prosper +prosperous +prostate +prosthetic +prostitute +prostitution +prostrate +protactinium +protagonist +protean +protease +protect +protector +protectorate +protege +protein +proteolysis +proteolytic +protest +protestant +protestation +prothonotary +protocol +proton +protoplasm +protoplasmic +prototype +prototypic +Protozoa +protozoan +protract +protrude +protrusion +protrusive +protuberant +proud +Proust +prove +proven +provenance +proverb +proverbial +provide +provident +providential +province +provincial +provision +provisional +proviso +provocateur +provocation +provocative +provoke +provost +prow +prowess +prowl +proximal +proximate +proximity +proxy +prudent +prudential +prune +prurient +Prussia +pry +psalm +psalter +pseudo +psi +psych +psyche +psychiatric +psychiatrist +psychiatry +psychic +psycho +psychoacoustic +psychoanalysis +psychoanalyst +psychoanalytic +psychobiology +psychology +psychometry +psychopath +psychopathic +psychophysic +psychophysical +psychophysics +psychophysiology +psychopomp +psychoses +psychosis +psychosomatic +psychotherapeutic +psychotherapist +psychotherapy +psychotic +psyllium +PTA +ptarmigan +Ptolemaic +Ptolemy +pub +puberty +pubescent +public +publication +publish +Puccini +puck +puckish +pudding +puddingstone +puddle +puddly +pueblo +puerile +Puerto +puff +puffball +puffed +puffery +puffin +puffy +pug +Pugh +puissant +puke +Pulaski +Pulitzer +pull +pulley +Pullman +pullover +pulmonary +pulp +pulpit +pulsar +pulsate +pulse +pulverable +puma +pumice +pummel +pump +pumpkin +pumpkinseed +pun +punch +punctual +punctuate +puncture +pundit +punditry +pungent +Punic +punish +punitive +punk +punky +punster +punt +puny +pup +pupal +pupate +pupil +puppet +puppeteer +puppy +puppyish +Purcell +purchasable +purchase +Purdue +pure +purgation +purgative +purgatory +purge +purify +Purina +Puritan +puritanic +purl +purloin +purple +purport +purpose +purposive +purr +purse +purslane +pursuant +pursue +pursuer +pursuit +purvey +purveyor +purview +pus +Pusan +Pusey +push +pushbutton +pussy +pussycat +put +putative +Putnam +putt +putty +puzzle +PVC +Pygmalion +pygmy +Pyhrric +pyknotic +Pyle +Pyongyang +pyracanth +pyramid +pyramidal +pyre +Pyrex +pyridine +pyrite +pyroelectric +pyrolyse +pyrolysis +pyrometer +pyrophosphate +pyrotechnic +pyroxene +Pythagoras +Pythagorean +python +q +q's +Qatar +QED +qua +quack +quackery +quad +quadrangle +quadrangular +quadrant +quadratic +quadrature +quadrennial +quadric +quadriceps +quadrilateral +quadrille +quadrillion +quadripartite +quadrivium +quadruple +quadrupole +quaff +quagmire +quahog +quail +quaint +quake +Quakeress +qualified +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 +quartz +quasar +quash +quasi +quasicontinuous +quasiorder +quasiparticle +quasiperiodic +quasistationary +quaternary +quatrain +quaver +quay +queasy +Quebec +queen +queer +quell +quench +querulous +query +quest +question +questionnaire +quetzal +queue +Quezon +quibble +quick +quicken +quickie +quicklime +quicksand +quicksilver +quickstep +quid +quiescent +quiet +quietus +quill +quilt +quince +quinine +Quinn +quint +quintet +quintic +quintillion +quintus +quip +quipping +Quirinal +quirk +quirky +quirt +quit +quite +Quito +quitting +quiver +Quixote +quixotic +quiz +quizzical +quo +quod +quonset +quorum +quota +quotation +quote +quotient +r +R&D +r's +rabat +rabbet +rabbi +rabbit +rabble +rabid +rabies +Rabin +raccoon +race +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 +radiosterilize +radiotherapy +radish +radium +radius +radix +radon +Rae +Rafael +Rafferty +raffia +raffish +raft +rag +rage +ragging +ragout +ragweed +raid +rail +railbird +railhead +raillery +railroad +railway +rain +rainbow +raincoat +raindrop +rainfall +rainstorm +rainy +raise +raisin +raj +rajah +rake +rakish +Raleigh +rally +Ralph +Ralston +ram +Ramada +Raman +ramble +ramify +Ramo +ramp +rampage +rampant +rampart +ramrod +Ramsey +ran +ranch +rancho +rancid +rancorous +Rand +Randall +Randolph +random +randy +rang +range +rangeland +Rangoon +rangy +Ranier +rank +Rankin +rankle +ransack +ransom +rant +Raoul +rap +rapacious +rape +Raphael +rapid +rapier +rapport +rapprochement +rapt +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 +ravage +rave +ravel +raven +ravenous +ravine +ravish +raw +rawboned +rawhide +Rawlinson +ray +Rayleigh +Raymond +Raytheon +raze +razor +razorback +RCA +re +reach +reactant +reactionary +read +readout +ready +Reagan +reagent +real +realisable +realm +realtor +realty +ream +reap +rear +reason +reave +reb +Rebecca +rebel +rebelled +rebelling +rebellion +rebellious +rebuke +rebut +rebuttal +rebutted +rebutting +recalcitrant +recant +recappable +recede +receipt +receive +recent +receptacle +reception +receptive +receptor +recess +recession +recessive +recherche +Recife +recipe +recipient +reciprocal +reciprocate +reciprocity +recital +recitative +reck +reckon +reclamation +recline +recluse +recompense +reconcile +recondite +reconnaissance +record +recoup +recourse +recovery +recriminate +recruit +rectangle +rectangular +rectifier +rectify +rectilinear +rectitude +rector +rectory +recumbent +recuperate +recur +recurred +recurrent +recurring +recursion +recursive +recusant +recuse +red +redact +redactor +redbird +redbud +redcoat +redden +reddish +redeem +redemption +redemptive +redhead +Redmond +redneck +redound +redpoll +redshank +redstart +Redstone +redtop +reduce +reducible +reduct +redundant +redwood +reed +reedbuck +reedy +reef +reek +reel +Reese +reeve +Reeves +refection +refectory +refer +referable +referee +refereeing +referenda +referendum +referent +referential +referral +referred +referring +refinery +reflect +reflectance +reflector +reflexive +reforestation +reformatory +refract +refractometer +refractory +refrain +refrigerate +refuge +refugee +refusal +refutation +refute +regal +regale +regalia +regard +regatta +regent +regime +regimen +regiment +regimentation +Regina +Reginald +region +regional +Regis +registrable +registrant +registrar +registration +registry +regress +regression +regressive +regret +regrettable +regretted +regretting +regular +regulate +regulatory +Regulus +regurgitate +rehabilitate +rehearsal +rehearse +Reich +Reid +reign +Reilly +reimbursable +reimburse +rein +reindeer +reinforce +Reinhold +reinstate +reject +rejoice +rejoinder +relate +relax +relaxation +relay +releasable +relevant +reliable +reliant +relic +relict +relief +relieve +religion +religiosity +religious +relinquish +reliquary +relish +reluctant +remainder +reman +remand +remark +Rembrandt +remediable +remedial +remedy +remember +remembrance +Remington +reminisce +reminiscent +remiss +remission +remit +remittance +remitted +remitting +remnant +remonstrate +remorse +remote +removal +remunerate +Remus +Rena +renaissance +renal +Renault +rend +render +rendezvous +rendition +renegotiable +renewal +Renoir +renounce +renovate +renown +Rensselaer +rent +rental +renunciate +rep +repairman +repairmen +reparation +repartee +repeal +repeat +repeater +repel +repelled +repellent +repelling +repent +repentant +repertoire +repertory +repetition +repetitious +repetitive +replaceable +replenish +replete +replica +replicate +report +reportorial +repository +reprehensible +representative +repression +repressive +reprieve +reprimand +reprisal +reprise +reproach +reptile +reptilian +republic +republican +repudiate +repugnant +repulsion +repulsive +reputation +repute +request +require +requisite +requisition +requited +reredos +rescind +rescue +resemblant +resemble +resent +reserpine +reservation +reserve +reservoir +reside +resident +residential +residual +residuary +residue +residuum +resign +resignation +resilient +resin +resinlike +resiny +resist +resistant +resistible +resistive +resistor +resolute +resolution +resolve +resonant +resonate +resorcinol +resort +respect +respiration +respirator +respiratory +respire +respite +resplendent +respond +respondent +response +responsible +responsive +rest +restaurant +restaurateur +restitution +restive +restoration +restorative +restrain +restraint +restrict +restroom +result +resultant +resume +resuming +resumption +resurgent +resurrect +resuscitate +ret +retail +retain +retaliate +retaliatory +retard +retardant +retardation +retch +retention +retentive +reticent +reticulate +reticulum +retina +retinal +retinue +retire +retiree +retort +retract +retribution +retrieval +retrieve +retroactive +retrofit +retrofitted +retrofitting +retrograde +retrogress +retrogressive +retrorocket +retrospect +retrovision +return +Reub +Reuben +Reuters +reveal +revel +revelation +revelatory +revelry +revenge +revenue +rever +reverberate +revere +reverend +reverent +reverie +reversal +reverse +reversible +reversion +revert +revertive +revery +revet +revile +revisable +revisal +revise +revision +revisionary +revival +revive +revocable +revoke +revolt +revolution +revolutionary +revolve +revulsion +revved +revving +reward +Rex +Reykjavik +Reynolds +rhapsodic +rhapsody +Rhea +Rhenish +rhenium +rheology +rheostat +rhesus +rhetoric +rhetorician +rheum +rheumatic +rheumatism +Rhine +rhinestone +rhino +rhinoceros +rho +Rhoda +Rhode +Rhodes +Rhodesia +rhodium +rhododendron +rhombi +rhombic +rhombus +rhubarb +rhyme +rhythm +rhythmic +rib +ribald +ribbon +riboflavin +ribonucleic +Rica +rice +rich +Richard +Richards +Richardson +Richfield +Richmond +Richter +rick +rickets +Rickettsia +rickety +rickshaw +Rico +ricochet +rid +riddance +ridden +riddle +ride +ridge +ridgepole +Ridgway +ridicule +ridiculous +Riemann +riffle +rifle +rifleman +riflemen +rift +rig +Rigel +rigging +Riggs +right +righteous +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 +roach +road +roadbed +roadblock +roadhouse +roadside +roadster +roadway +roam +roar +roast +rob +robbery +robbin +Robbins +robe +Robert +Roberta +Roberto +Roberts +Robertson +robin +Robinson +robot +robotics +robust +Rochester +rock +rockabye +rockaway +rockbound +Rockefeller +rocket +Rockford +Rockies +Rockland +rocklike +Rockwell +rocky +rococo +rod +rode +rodent +rodeo +Rodgers +Rodney +Rodriguez +roe +roebuck +Roentgen +Roger +Rogers +rogue +roil +roister +Roland +role +roll +rollback +rollick +Rollins +Roman +romance +Romano +romantic +Rome +Romeo +romp +Romulus +Ron +Ronald +rondo +Ronnie +rood +roof +rooftop +rooftree +rook +rookie +rooky +room +roommate +roomy +Roosevelt +Rooseveltian +roost +root +rope +Rosa +Rosalie +rosary +rose +rosebud +rosebush +Roseland +rosemary +Rosen +Rosenberg +Rosenblum +Rosenthal +Rosenzweig +rosette +Ross +roster +rostrum +rosy +rot +Rotarian +rotary +rotate +ROTC +rotenone +Roth +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 +Roy +royal +royalty +Royce +RPM +RSVP +Ruanda +rub +rubbery +rubbish +rubble +rubdown +Rube +Ruben +rubicund +rubidium +rubric +ruby +ruckus +rudder +ruddy +rude +rudiment +rudimentary +Rudolf +Rudolph +Rudy +Rudyard +rue +ruffian +ruffle +rufous +Rufus +rug +ruin +ruinous +rule +rum +Rumania +rumble +rumen +Rumford +ruminant +rummage +rummy +rump +rumple +rumpus +run +runabout +runaway +rundown +rune +rung +Runge +runic +runneth +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 +s's +sa +sabbath +sabbatical +Sabina +Sabine +sable +sabotage +sabra +sac +sachem +sack +sacral +sacrament +Sacramento +sacred +sacrifice +sacrificial +sacrilege +sacrilegious +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 +sainthood +sake +Sal +Salaam +salacious +salad +salamander +salami +salaried +salary +sale +Salem +Salerno +salesgirl +Salesian +saleslady +salesman +salesmen +salesperson +salient +Salina +saline +Salisbury +Salish +saliva +salivary +salivate +Salk +Salle +sallow +sally +salmon +salmonberry +salon +saloon +saloonkeep +salsify +salt +saltbush +saltwater +salty +salubrious +salutary +salutation +salute +Salvador +salvage +salvageable +salvation +Salvatore +salve +salvo +Sam +samarium +samba +same +Sammy +Samoa +samovar +sample +Sampson +Samson +Samuel +Samuelson +San +Sana +sanatoria +sanatorium +Sanborn +Sanchez +Sancho +sanctify +sanctimonious +sanction +sanctity +sanctuary +sand +sandal +sandalwood +sandbag +sandblast +Sandburg +sanderling +Sanders +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 +Santa +Santayana +Santiago +Santo +Sao +sap +sapiens +sapient +sapling +saponify +sapphire +sappy +sapsucker +Sara +Saracen +Sarah +Saran +Sarasota +Saratoga +sarcasm +sarcastic +sarcoma +sardine +sardonic +Sargent +sari +sarsaparilla +sarsparilla +sash +sashay +Saskatchewan +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 +Saunders +sausage +saute +sauterne +savage +savagery +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 +scaffold +Scala +scalar +scald +scale +scallop +scalp +scamp +scan +scandal +scandalous +Scandinavia +scandium +scant +scanty +scapegoat +scapula +scapular +scar +Scarborough +scarce +scare +scarecrow +scarf +scarface +scarify +scarlet +Scarsdale +scarves +scary +scat +scathe +scatterbrain +scattergun +scaup +scavenge +scenario +scene +scenery +scenic +scent +sceptic +Schaefer +Schafer +Schantz +schedule +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 +schooner +Schottky +Schroeder +Schroedinger +Schubert +Schultz +Schulz +Schumacher +Schumann +Schuster +Schuyler +Schuylkill +Schwab +Schwartz +Schweitzer +sciatica +science +scientific +scientist +scimitar +scintillate +scion +scissor +sclerosis +sclerotic +SCM +scoff +scold +scoop +scoot +scope +scopic +scops +scorch +score +scoreboard +scorecard +scoria +scorn +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 +scratch +scratchy +scrawl +scrawny +scream +screech +screechy +screed +screen +screenplay +screw +screwball +screwbean +screwdriver +screwworm +scribble +scribe +Scribners +scrim +scrimmage +Scripps +script +scription +scriptural +scripture +scriven +scroll +scrooge +scrounge +scrub +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 +sea +seaboard +seacoast +seafare +seafood +Seagram +seagull +seahorse +seal +sealant +seam +seaman +seamen +seamstress +seamy +Sean +seance +seaport +seaquake +sear +search +searchlight +Sears +seashore +seaside +season +seasonal +seat +seater +Seattle +seaward +seaweed +Sebastian +sec +secant +secede +secession +seclude +seclusion +second +secondary +secondhand +secrecy +secret +secretarial +secretariat +secretary +secrete +secretion +secretive +sect +sectarian +section +sector +sectoral +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 +segment +segmentation +Segovia +segregant +segregate +Segundo +Seidel +seismic +seismograph +seismography +seismology +seize +seizure +seldom +select +selectman +selectmen +selector +Selectric +Selena +selenate +selenite +selenium +self +selfish +Selfridge +Selkirk +sell +seller +sellout +Selma +seltzer +selves +Selwyn +semantic +semaphore +semblance +semester +semi +seminal +seminar +seminarian +seminary +Seminole +Semite +Semitic +semper +sen +senate +senatorial +send +Seneca +Senegal +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 +sepuchral +sepulchral +sequel +sequent +sequential +sequester +sequestration +sequin +sequitur +Sequoia +sera +seraglio +serape +seraphim +serenade +serendipitous +serendipity +serene +serge +sergeant +Sergei +serial +seriatim +series +serif +serious +sermon +serology +Serpens +serpent +serpentine +serum +servant +serve +service +serviceable +serviceberry +serviceman +servicemen +serviette +servile +servitor +servo +servomechanism +sesame +session +set +setback +Seth +Seton +setscrew +settle +setup +seven +sevenfold +seventeen +seventeenth +seventh +seventieth +seventy +sever +several +severalfold +severalty +severe +Severn +Seville +sew +sewage +Seward +sewerage +sewn +sex +Sextans +sextet +sextillion +sexton +sextuple +sextuplet +sexual +sexy +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 +shamble +shame +shameface +shampoo +shamrock +shan't +Shanghai +shank +Shannon +Shantung +shanty +shape +Shapiro +shard +share +sharecrop +shareholder +Shari +shark +Sharon +sharp +Sharpe +sharpen +sharpshoot +Shasta +shatter +shatterproof +Shattuck +shave +shaven +shaw +shawl +Shawnee +shay +she +she'd +she'll +Shea +sheaf +shear +Shearer +sheath +sheathe +sheave +shed +Shedir +Sheehan +sheen +sheep +sheepskin +sheer +sheet +Sheffield +sheik +Sheila +Shelby +Sheldon +shelf +shell +Shelley +shelter +Shelton +shelve +Shenandoah +shenanigan +Shepard +shepherd +Sheppard +Sheraton +sherbet +Sheridan +sheriff +Sherlock +Sherman +Sherrill +sherry +Sherwin +Sherwood +shibboleth +shied +shield +Shields +shift +shifty +shill +Shiloh +shim +shimmy +shin +shinbone +shine +shingle +Shinto +shiny +ship +shipboard +shipbuild +shiplap +Shipley +shipman +shipmate +shipmen +shipshape +shipwreck +shipyard +shire +shirk +Shirley +shirt +shirtmake +shish +shitepoke +shiv +shiver +shivery +shoal +shock +Shockley +shod +shoddy +shoe +shoehorn +shoelace +shoemake +shoestring +shoji +shone +shoo +shoofly +shook +shoot +shop +shopkeep +shopworn +shore +shoreline +short +shortage +shortcoming +shortcut +shorten +shortfall +shorthand +shortish +shortsighted +shortstop +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 +sial +SIAM +Siamese +Sian +sib +Siberia +sibilant +Sibley +sibling +sibyl +sic +Sicilian +Sicily +sick +sicken +sickish +sickle +sickroom +side +sidearm +sideband +sideboard +sidecar +sidelight +sideline +sidelong +sideman +sidemen +sidereal +sidesaddle +sideshow +sidestep +sidetrack +sidewalk +sidewall +sideway +sidewinder +sidewise +sidle +Sidney +siege +Siegel +Siegfried +Sieglinda +Siegmund +Siemens +sienna +sierra +siesta +sieve +sift +sigh +sight +sightsee +sightseeing +sightseer +sigma +Sigmund +sign +signal +signature +signboard +signet +significant +signify +Signor +Signora +signpost +Sikorsky +silage +silane +Silas +silent +silhouette +silica +silicate +siliceous +silicic +silicide +silicon +silicone +silk +silken +silkworm +silky +sill +silly +silo +silt +siltation +siltstone +silty +silver +Silverman +silversmith +silverware +silvery +sima +similar +simile +similitude +simmer +Simmons +Simon +Simons +Simonson +simper +simple +simplectic +simpleminded +simpleton +simplex +simplicity +simplify +simplistic +simply +Simpson +Sims +simulate +simulcast +simultaneity +simultaneous +sin +Sinai +since +sincere +Sinclair +sine +sinew +sinewy +sing +singable +Singapore +singe +single +singlehanded +singlet +singleton +singsong +singular +sinh +sinister +sinistral +sink +sinkhole +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 +size +sizzle +skat +skate +skater +skeet +skeletal +skeleton +skeptic +sketch +sketchbook +sketchpad +sketchy +skew +ski +skid +skiddy +skied +skiff +skill +skillet +skim +skimp +skimpy +skin +skindive +skinny +skip +skipjack +Skippy +skirmish +skirt +skit +skittle +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 +slapstick +slash +slat +slate +slater +slaughter +slaughterhouse +Slav +slave +slavery +Slavic +slavish +slay +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 +slip +slippage +slippery +slit +slither +sliver +slivery +Sloan +Sloane +slob +Slocum +sloe +slog +slogan +sloganeer +slogging +sloop +slop +slope +sloppy +slosh +slot +sloth +slouch +slough +sloven +slow +slowdown +sludge +slug +slugging +sluggish +sluice +slum +slumber +slump +slung +slur +slurp +slurry +sly +smack +small +smaller +Smalley +smallish +smallpox +smalltime +smart +smash +smatter +smear +smell +smelt +smile +smirk +smith +smithereens +Smithfield +Smithson +Smithsonian +smithy +smitten +smog +smoke +smokehouse +smokescreen +smokestack +smoky +smolder +smooch +smooth +smoothbore +smother +Smucker +smudge +smudgy +smug +smuggle +smut +smutty +Smyrna +Smythe +snack +snafu +snag +snagging +snail +snake +snakebird +snakelike +snakeroot +snap +snapback +snapdragon +snappish +snappy +snapshot +snare +snark +snarl +snatch +snazzy +sneak +sneaky +sneer +sneeze +snell +snick +Snider +sniff +sniffle +sniffly +snifter +snigger +snip +snipe +snippet +snippy +snivel +snob +snobbery +snobbish +snook +snoop +snoopy +snore +snorkel +snort +snotty +snout +snow +snowball +snowfall +snowflake +snowstorm +snowy +snub +snuff +snuffer +snuffle +snuffly +snug +snuggle +snuggly +snyaptic +Snyder +so +soak +soap +soapstone +soapsud +soapy +soar +sob +sober +sobriety +sobriquet +soccer +sociable +social +societal +Societe +society +socioeconomic +sociology +sociometry +sock +socket +sockeye +Socrates +Socratic +sod +soda +sodden +sodium +sofa +soffit +Sofia +soft +softball +soften +software +softwood +soggy +soignee +soil +soiree +sojourn +Sol +solace +solar +sold +solder +soldier +soldiery +sole +solecism +solemn +solemnity +solenoid +solicit +solicitation +solicitor +solicitous +solicitude +solid +solidarity +solidify +solidus +soliloquy +solipsism +solitary +solitude +solo +Solomon +Solon +solstice +soluble +solute +solution +solvate +solve +solvent +soma +somal +Somali +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 +sonar +sonata +song +songbag +songbook +sonic +sonnet +sonny +Sonoma +Sonora +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 +sorry +sort +sortie +sou +souffle +sought +soul +sound +soundproof +soup +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 +sown +soy +soya +soybean +spa +space +spacecraft +spacesuit +spacious +spade +spaghetti +Spain +span +spandrel +spangle +Spaniard +spaniel +Spanish +spar +spare +sparge +spark +sparkle +Sparkman +sparky +sparling +sparrow +sparse +Sparta +Spartan +spasm +spastic +spat +spate +spatial +spatlum +spatterdock +spatula +Spaulding +spavin +spawn +spay +spayed +speak +speakeasy +spear +spearhead +spearmint +spec +special +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 +Sperry +spew +sphagnum +sphere +spheric +spheroid +spheroidal +spherule +sphinx +Spica +spice +spicebush +spicy +spider +spidery +Spiegel +spigot +spike +spikenard +spiky +spill +spilt +spin +spinach +spinal +spindle +spine +spinnaker +spinneret +spinodal +spinoff +spinster +spiny +spiral +spire +spirit +spiritual +Spiro +spit +spite +spitfire +spittle +spitz +splash +splashy +splat +splay +splayed +spleen +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 +sporadic +spore +sport +sportsman +sportsmen +sportswear +sportswrite +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 +spur +spurge +spurious +spurn +spurt +sputnik +sputter +spy +spyglass +squabble +squad +squadron +squalid +squall +squamous +squander +square +squash +squashberry +squashy +squat +squatting +squaw +squawbush +squawk +squawroot +squeak +squeaky +squeal +squeamish +squeegee +squeeze +squelch +Squibb +squid +squill +squint +squire +squirehood +squirm +squirmy +squirrel +squirt +squishy +Sri +SST +St +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 +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 +start +startle +startup +starvation +starve +stash +stasis +state +Staten +stater +stateroom +statesman +statesmanlike +statesmen +statewide +static +stationarity +stationary +stationery +stationmaster +statistician +Statler +stator +statuary +statue +statuette +stature +status +statute +statutory +Stauffer +staunch +Staunton +stave +stay +stayed +stead +steadfast +steady +steak +steal +stealth +stealthy +steam +steamboat +steamy +Stearns +steed +steel +Steele +steelmake +steely +Steen +steep +steepen +steeple +steeplebush +steer +steeve +Stefan +stein +Steinberg +Steiner +stella +stellar +stem +stench +stencil +stenographer +stenography +stenotype +step +stepchild +Stephanie +stephanotis +Stephen +Stephens +Stephenson +stepmother +steppe +steprelation +stepson +stepwise +steradian +stereo +stereography +stereoscopy +sterile +sterling +stern +sternal +Sterno +sternum +steroid +stethoscope +Stetson +Steuben +Steve +stevedore +Steven +Stevens +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 +stingy +stink +stinkpot +stinky +stint +stipend +stipple +stipulate +stir +Stirling +stirrup +stitch +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 +stony +stood +stooge +stool +stoop +stop +stopband +stopcock +stopgap +stopover +stoppage +stopwatch +storage +store +storehouse +storekeep +storeroom +Storey +stork +storm +stormbound +stormy +story +storyboard +storyteller +stout +stove +stow +stowage +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 +Strauss +straw +strawberry +strawflower +stray +streak +stream +streamline +streamside +street +streetcar +strength +strengthen +strenuous +streptococcus +stress +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 +stupefy +stupendous +stupid +stupor +Sturbridge +sturdy +sturgeon +Sturm +stutter +Stuttgart +Stuyvesant +Stygian +style +styli +stylish +stylites +stylus +stymie +styrene +Styrofoam +Styx +suave +sub +subject +subjectivity +sublimate +subliminal +submersible +submit +submittal +submitted +submitting +subpoena +subrogation +subservient +subsidiary +subsidy +subsist +subsistent +substantial +substantiate +substantive +substituent +substitute +substitution +substitutionary +substrate +subsume +subsumed +subsuming +subterfuge +subterranean +subtle +subtlety +subtly +subtrahend +suburb +suburbia +subversive +subvert +succeed +success +succession +successive +successor +succinct +succubus +succumb +such +suck +suckling +suction +sud +Sudan +Sudanese +sudden +suds +sue +suey +Suez +suffer +suffice +sufficient +suffix +suffocate +Suffolk +suffrage +suffragette +suffuse +sugar +suggest +suggestible +suggestion +suggestive +suicidal +suicide +suit +suitcase +suite +suitor +sulfa +sulfate +sulfide +sulfite +sulfonamide +sulfur +sulfuric +sulfurous +sulk +sulky +sullen +Sullivan +sully +sulphur +sultan +sultry +sum +sumac +Sumatra +Sumerian +summand +summarily +summary +summate +Summers +summertime +summit +summitry +summon +Sumner +sumptuous +Sumter +sun +sunbeam +sunbonnet +sunburn +sunburnt +Sunday +sunder +sundew +sundial +sundown +sundry +sunfish +sunflower +sung +sunk +sunken +sunlight +sunlit +sunny +Sunnyvale +sunrise +sunset +sunshade +sunshine +sunshiny +sunspot +suntan +suntanned +SUNY +sup +super +superannuate +superb +superbly +supercilious +superficial +superfluity +superfluous +superintendent +superior +superlative +superlunary +supernatant +superposable +supersede +superstition +superstitious +supervene +supervisory +supine +supplant +supple +supplementary +supplicate +supply +support +supposable +suppose +supposition +suppress +suppressible +suppression +suppressor +supra +supranational +supremacy +supreme +surcease +surcharge +sure +surety +surf +surface +surfactant +surfeit +surge +surgeon +surgery +surgical +surmise +surmount +surname +surpass +surplus +surprise +surreal +surrender +surreptitious +surrey +surrogate +surround +surtax +surtout +surveillant +survey +surveyor +survival +survive +survivor +Sus +Susan +Susanne +susceptible +sushi +Susie +suspect +suspend +suspense +suspension +suspensor +suspicion +suspicious +Sussex +sustain +sustenance +Sutherland +Sutton +suture +Suzanne +suzerain +suzerainty +Suzuki +svelte +swab +swabby +swag +swage +Swahili +swain +swallow +swallowtail +swam +swami +swamp +swampy +swan +swank +swanky +swanlike +Swanson +swap +swarm +swart +Swarthmore +Swarthout +swarthy +swastika +swat +swatch +swath +swathe +sway +Swaziland +swear +sweat +sweatband +sweater +sweatshirt +sweaty +Swede +Sweden +Swedish +Sweeney +sweep +sweepstake +sweet +sweeten +sweetheart +sweetish +swell +swelt +swelter +Swenson +swept +swerve +swift +swig +swigging +swim +swimsuit +swindle +swine +swing +swingable +swingy +swipe +swirl +swirly +swish +swishy +swiss +switch +switchblade +switchboard +switchgear +switchman +Switzer +Switzerland +swivel +swizzle +swollen +swoop +sword +swordfish +swordplay +swordtail +swore +sworn +swum +swung +sybarite +Sybil +sycamore +sycophant +sycophantic +Sydney +Sykes +syllabic +syllabify +syllable +syllogism +syllogistic +sylvan +Sylvania +Sylvester +Sylvia +symbiosis +symbol +symbolic +symmetry +sympathetic +sympathy +symphonic +symphony +symposia +symposium +symptom +symptomatic +synagogue +synapse +synapses +synaptic +synchronism +synchronous +synchrony +synchrotron +syncopate +syndic +syndicate +syndrome +synergism +synergistic +synergy +synod +synonym +synonymous +synonymy +synopses +synopsis +synoptic +syntactic +syntax +synthesis +synthetic +Syracuse +Syria +syringa +syringe +syrinx +syrup +syrupy +system +systematic +systemic +systemization +systemwide +t +t's +tab +tabernacle +table +tableau +tableaux +tablecloth +tableland +tablespoon +tablet +tabloid +taboo +tabu +tabula +tabular +tabulate +tachinid +tachometer +tacit +Tacitus +tack +tackle +tacky +Tacoma +tact +tactic +tactile +tactual +tad +tadpole +taffeta +taffy +taft +tag +tagging +Tahiti +Tahoe +tail +tailgate +tailor +tailwind +taint +Taipei +Taiwan +take +taken +takeoff +takeover +taketh +talc +talcum +tale +talent +talisman +talismanic +talk +talkative +talkie +talky +tall +Tallahassee +tallow +tally +tallyho +Talmud +talon +talus +tam +tamale +tamarack +tamarind +tambourine +tame +Tammany +tamp +Tampa +tampon +tan +tanager +Tanaka +Tananarive +tandem +tang +tangent +tangential +tangerine +tangible +tangle +tango +tangy +tanh +tank +tannin +tansy +tantalum +Tantalus +tantamount +tantrum +Tanya +Tanzania +tao +Taoist +Taos +tap +tapa +tape +taper +tapestry +tapeworm +tapir +tapis +tappa +tappet +tar +tara +tarantara +tarantula +Tarbell +tardy +target +tariff +tarnish +tarpaper +tarpaulin +tarpon +tarry +Tarrytown +tart +tartar +Tartary +Tarzan +task +taskmaster +Tasmania +Tass +tassel +taste +tasting +tasty +tat +tate +tater +tattle +tattler +tattletale +tattoo +tatty +tau +taught +taunt +Taurus +taut +tautology +tavern +taverna +tawdry +tawny +tax +taxation +taxi +taxicab +taxied +taxiway +taxonomy +taxpayer +taxpaying +Taylor +tea +teacart +teach +teacup +teahouse +teakettle +teakwood +teal +team +teammate +teamster +teamwork +teapot +tear +teardrop +tease +teasel +teaspoon +teat +tech +technetium +technic +technician +technique +technology +tectonic +tecum +ted +Teddy +tedious +tedium +tee +teeing +teem +teen +teenage +teensy +teet +teeth +teethe +teetotal +Teflon +Tegucigalpa +Teheran +Tehran +tektite +Tektronix +telecommunicate +teleconference +Teledyne +Telefunken +telegram +telegraph +telegraphy +telekinesis +telemeter +teleology +teleost +telepathic +telepathy +telephone +telephonic +telephony +telephotography +teleprinter +teleprocessing +teleprompter +telescope +telescopic +teletype +teletypewrite +televise +television +Telex +tell +teller +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 +tenderloin +tendon +tenebrous +tenement +tenet +tenfold +Tenneco +Tennessee +Tenney +tennis +Tennyson +tenon +tenor +tense +tensile +tension +tensional +tensor +tenspot +tent +tentacle +tentative +tenth +tenuous +tenure +tepee +tepid +teratogenic +teratology +terbium +tercel +Teresa +term +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 +testy +tetanus +tete +tether +tetrachloride +tetrafluouride +tetragonal +tetrahedra +tetrahedral +tetrahedron +tetravalent +Teutonic +Texaco +Texan +Texas +text +textbook +textile +Textron +textual +textural +texture +Thai +Thailand +Thalia +thallium +thallophyte +than +thank +thanksgiving +that +that'd +that'll +thatch +thaw +Thayer +the +Thea +theatric +Thebes +thee +theft +their +Thelma +them +thematic +theme +themselves +then +thence +thenceforth +theocracy +Theodore +Theodosian +theologian +theology +theorem +theoretic +theoretician +theorist +theory +therapeutic +therapist +therapy +there +there'd +there'll +thereabouts +thereafter +thereat +thereby +therefor +therefore +therefrom +therein +thereof +thereon +Theresa +thereto +theretofore +thereunder +thereupon +therewith +thermal +thermionic +thermistor +thermo +Thermofax +thermostat +thesaurus +these +theses +Theseus +thesis +thespian +theta +Thetis +they +they'd +they'll +they're +they've +thiamin +thick +thicken +thicket +thickish +thief +thieves +thieving +thigh +thimble +Thimbu +thin +thine +thing +think +thinnish +thiocyanate +thiouracil +third +thirst +thirsty +thirteen +thirteenth +thirtieth +thirty +this +this'll +thistle +thistledown +thither +Thomas +Thomistic +Thompson +Thomson +thong +Thor +Thoreau +thoriate +thorium +thorn +Thornton +thorny +thorough +thoroughbred +thoroughfare +thoroughgoing +Thorpe +Thorstein +those +thou +though +thought +thousand +thousandth +thrash +thread +threadbare +threat +threaten +three +threefold +threesome +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 +thump +thunder +thunderbird +thunderclap +thunderflower +thunderous +thunderstorm +Thurman +Thursday +thus +thwack +thwart +thy +thyme +thyratron +thyroglobulin +thyroid +thyroidal +thyronine +thyrotoxic +thyroxine +ti +Tiber +tibet +Tibetan +tibia +tic +tick +ticket +tickle +ticklish +tid +tidal +tidbit +tide +tideland +tidewater +tidings +tidy +tie +tied +Tientsin +tier +Tiffany +tift +tiger +tight +tighten +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 +tinsel +tint +tintype +tiny +Tioga +tip +tipoff +Tipperary +tipple +tippy +tipsy +tiptoe +tirade +Tirana +tire +tiresome +tissue +tit +Titan +titanate +titanic +titanium +tithe +titian +titillate +title +titmouse +titrate +titular +Titus +TNT +to +toad +toady +toast +tobacco +Tobago +toccata +today +today'll +Todd +toddle +toe +toenail +toffee +tofu +tog +together +togging +toggle +Togo +togs +toil +toilet +toilsome +tokamak +token +Tokyo +told +Toledo +tolerable +tolerant +tolerate +toll +tollgate +tollhouse +Tolstoy +toluene +Tom +tomato +tomatoes +tomb +tomblike +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 +toothbrush +toothpaste +tootle +top +topaz +topcoat +Topeka +topgallant +topic +topmost +topnotch +topocentric +topography +topology +topple +topsoil +Topsy +tor +torah +torch +tore +tori +torn +tornado +toroid +toroidal +Toronto +torpedo +torpid +torpor +torque +torr +Torrance +torrent +torrid +torsion +torso +tort +tortoise +tortoiseshell +tortuous +torture +torus +tory +Toshiba +toss +tot +total +totalitarian +tote +totem +totemic +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 +track +trackage +tract +tractor +Tracy +trade +trademark +tradeoff +tradesman +tradesmen +tradition +traffic +trafficked +trafficking +trag +tragedian +tragedy +tragic +tragicomic +trail +trailblaze +trailside +train +trainee +trainman +trainmen +traipse +trait +traitor +traitorous +trajectory +tram +trammel +tramp +trample +tramway +trance +tranquil +tranquillity +transact +transalpine +transatlantic +transceiver +transcend +transcendent +transcendental +transconductance +transcontinental +transcribe +transcript +transcription +transducer +transduction +transect +transept +transfer +transferable +transferee +transference +transferor +transferral +transferred +transferring +transfix +transform +transformation +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 +transpacific +transparent +transpiration +transpire +transplant +transplantation +transport +transportation +transposable +transpose +transposition +transship +transversal +transverse +transvestite +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 +treelike +treetop +trefoil +trek +trellis +tremble +tremendous +tremor +tremulous +trench +trenchant +trencherman +trenchermen +trend +trendy +Trenton +trepidation +trespass +tress +trestle +Trevelyan +triable +triac +triad +trial +triangle +triangular +triangulate +Triangulum +Trianon +triatomic +tribal +tribe +tribesman +tribesmen +tribulate +tribunal +tribune +tributary +tribute +Trichinella +trichloroacetic +trichloroethane +trichrome +trick +trickery +trickle +trickster +tricky +trident +tridiagonal +tried +triennial +trifle +trifluouride +trig +trigonal +trigonometry +trigram +trill +trillion +trilobite +trilogy +trim +trimer +trimester +Trinidad +trinitarian +trinity +trinket +trio +triode +trioxide +trip +tripartite +tripe +triphenylphosphine +triple +triplet +Triplett +triplex +triplicate +tripod +tripoli +triptych +trisodium +Tristan +tristate +trisyllable +trite +tritium +triton +triumph +triumphal +triumphant +triune +trivalent +trivia +trivial +trivium +trod +trodden +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 +truancy +truant +truce +truck +truculent +trudge +Trudy +true +truism +truly +Truman +Trumbull +trump +trumpery +trumpet +truncate +trundle +trunk +truss +trust +trustee +trustworthy +truth +TRW +try +trypsin +tsar +tsarina +tsunami +TTL +TTY +tub +tuba +tube +tuberculin +tuberculosis +tubular +tubule +tuck +Tucson +Tudor +Tuesday +tuff +tuft +tug +tugging +tuition +Tulane +tularemia +tulip +tulle +Tulsa +tum +tumble +tumbrel +tumult +tumultuous +tun +tuna +tundra +tune +tung +tungstate +tungsten +tunic +Tunis +Tunisia +tunnel +tupelo +turban +turbinate +turbine +turbofan +turbojet +turbulent +turf +Turin +Turing +turk +turkey +Turkish +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 +tutelage +tutor +tutorial +Tuttle +tutu +tuxedo +TV +TVA +TWA +twaddle +twain +tweak +tweed +tweedy +tweeze +twelfth +twelve +twentieth +twenty +twice +twiddle +twig +twigging +twilight +twill +twin +twine +twinge +twinkle +twirl +twirly +twist +twisty +twit +twitch +twitchy +two +twofold +Twombly +twosome +TWX +Tyburn +tycoon +tying +Tyler +Tyndall +type +typeface +typescript +typeset +typesetter +typesetting +typewrite +typewritten +typhoid +Typhon +typhoon +typhus +typic +typify +typo +typographer +typography +typology +tyrannic +tyrannicide +tyranny +tyrant +tyrosine +Tyson +u +u's +ubiquitous +ubiquity +UCLA +Uganda +ugh +ugly +UK +Ukrainian +Ulan +ulcer +ulcerate +Ullman +Ulster +ulterior +ultimate +ultimatum +ultra +Ulysses +umber +umbilical +umbilici +umbilicus +umbra +umbrage +umbrella +umpire +UN +unanimity +unanimous +unary +unbeknownst +unbidden +unchristian +uncle +uncouth +unction +under +underclassman +underclassmen +underling +undulate +UNESCO +uniaxial +unicorn +unidimensional +unidirectional +uniform +unify +unilateral +unimodal +uninominal +union +uniplex +unipolar +uniprocessor +unique +Uniroyal +unison +unit +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 +upper +upperclassman +upperclassmen +uppercut +uppermost +upraise +upright +uprise +upriver +uproar +uproarious +uproot +upset +upsetting +upshot +upside +upsilon +upslope +upstair +upstand +upstate +upstater +upstream +upsurge +upswing +uptake +Upton +uptown +uptrend +upturn +upward +upwind +urania +uranium +Uranus +uranyl +urban +Urbana +urbane +urbanite +urchin +urea +uremia +urethane +urethra +urge +urgency +urgent +urging +urinal +urinary +urine +Uris +urn +Ursa +Ursula +Ursuline +Uruguay +us +USA +usable +USAF +usage +USC +USC&GS +USDA +use +USGS +usher +USIA +USN +USPS +USSR +usual +usurer +usurious +usurp +usurpation +usury +Utah +utensil +uterine +Utica +utile +utilitarian +utility +utmost +utopia +utopian +utter +utterance +uttermost +v +v's +vacant +vacate +vacationland +vaccinate +vaccine +vacillate +vacua +vacuo +vacuolate +vacuole +vacuous +vacuum +vade +Vaduz +vagabond +vagary +vagina +vaginal +vagrant +vague +Vail +vain +vainglorious +vale +valediction +valedictorian +valedictory +valent +valentine +Valerie +Valery +valet +valeur +Valhalla +valiant +valid +validate +Valkyrie +Valletta +valley +Valois +valuate +value +valve +vamp +vampire +van +vanadium +Vance +Vancouver +vandal +Vandenberg +Vanderbilt +Vanderpoel +vanguard +vanilla +vanish +vanity +vanquish +vantage +variable +variac +Varian +variant +variate +variegate +variety +various +varistor +Varitype +varnish +vary +vascular +vase +vassal +vast +vat +Vatican +vaudeville +Vaudois +Vaughan +Vaughn +vault +veal +vector +vectorial +Veda +vee +veer +veery +Vega +vegetable +vegetarian +vegetate +vehement +vehicle +vehicular +veil +vein +Velasquez +veldt +Vella +vellum +velocity +velours +velvet +velvety +venal +vend +vendetta +vendible +vendor +veneer +venerable +venerate +venereal +Venetian +Veneto +Venezuela +vengeance +vengeful +venial +Venice +venison +venom +venomous +venous +vent +ventilate +ventricle +venture +venturesome +venturi +Venus +Venusian +Vera +veracious +veracity +veranda +verandah +verb +verbal +verbatim +verbena +verbiage +verbose +verbosity +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 +versatile +verse +version +versus +vertebra +vertebrae +vertebral +vertebrate +vertex +vertical +vertices +vertigo +verve +very +vesicular +vesper +vessel +vest +vestal +vestibule +vestige +vestigial +vestry +vet +vetch +veteran +veterinarian +veterinary +veto +vex +vexation +vexatious +vi +via +viaduct +vial +vibrant +vibrate +vibrato +viburnum +vicar +vicarious +vice +vicelike +viceroy +Vichy +vicinal +vicinity +vicious +vicissitude +Vicksburg +Vicky +victim +victor +Victoria +Victorian +victorious +victory +victrola +victual +Vida +video +videotape +vie +Vienna +Viennese +Vientiane +Viet +Vietnam +Vietnamese +view +viewpoint +vigil +vigilant +vigilante +vigilantism +vignette +vigorous +vii +viii +Viking +vile +vilify +villa +village +villain +villainous +villein +Vincent +vindicate +vindictive +vine +vinegar +vineyard +Vinson +vintage +vintner +vinyl +viola +violate +violent +violet +violin +Virgil +virgin +virginal +Virginia +Virginian +Virgo +virgule +virile +virtual +virtue +virtuosi +virtuosity +virtuoso +virtuous +virulent +virus +vis +visa +visage +viscera +visceral +viscoelastic +viscometer +viscosity +viscount +viscous +vise +viselike +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 +vivo +vixen +viz +Vladimir +Vladivostok +vocable +vocabularian +vocabulary +vocal +vocalic +vocate +vociferous +Vogel +vogue +voice +voiceband +void +volatile +volcanic +volcanism +volcano +volition +Volkswagen +volley +volleyball +Volstead +volt +Volta +voltage +voltaic +Voltaire +Volterra +voltmeter +voluble +volume +voluminous +voluntary +volunteer +voluptuous +Volvo +vomit +von +voodoo +voracious +voracity +vortex +vortices +vorticity +Voss +votary +vote +votive +vouch +vouchsafe +Vought +vow +vowel +voyage +Vreeland +Vulcan +vulgar +vulnerable +vulpine +vulture +vulturelike +vying +w +w's +Waals +Wabash +WAC +wack +wacke +wacky +Waco +wad +waddle +wade +wadi +Wadsworth +wafer +waffle +wag +wage +wagging +waggle +Wagner +wagoneer +wah +Wahl +wail +wainscot +Wainwright +waist +waistcoat +waistline +wait +Waite +waitress +waive +wake +Wakefield +waken +wakerobin +wakeup +Walcott +Walden +Waldo +Waldorf +Waldron +wale +Walgreen +walk +walkie +walkout +walkover +walkway +wall +wallaby +Wallace +wallboard +Waller +wallet +Wallis +wallop +wallow +wallpaper +Walls +wally +walnut +Walpole +walrus +Walsh +Walt +Walter +Walters +Waltham +Walton +waltz +wan +wand +wander +wane +Wang +wangle +want +wanton +wapato +wapiti +Wappinger +war +warble +ward +warden +wardrobe +wardroom +ware +warehouse +warehouseman +warfare +warhead +Waring +warlike +warm +warmhearted +warmish +warmonger +warmth +warmup +warn +warp +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 +wasteland +wastewater +wastrel +watch +watchband +watchdog +watchmake +watchman +watchmen +watchword +water +Waterbury +watercourse +waterfall +waterfront +Watergate +Waterhouse +waterline +Waterloo +Waterman +watermelon +waterproof +Waters +watershed +waterside +Watertown +waterway +watery +Watkins +Watson +watt +wattage +wattle +Watts +wave +waveform +wavefront +waveguide +wavelength +wavenumber +wavy +wax +waxen +waxwork +waxy +way +waybill +waylaid +waylay +Wayne +wayside +wayward +we +we'd +we'll +we're +we've +weak +weaken +weal +wealth +wealthy +wean +weapon +weaponry +wear +wearied +wearisome +weary +weasel +weather +weatherbeaten +weatherproof +weatherstrip +weave +web +Webb +weber +Webster +WECo +wed +wedge +wedlock +Wednesday +wee +weed +weedy +week +weekday +weekend +Weeks +weep +Wehr +Wei +Weierstrass +weigh +weight +weighty +Weinberg +Weinstein +weir +weird +Weiss +Welch +welcome +weld +Weldon +welfare +well +wellbeing +Weller +Welles +Wellesley +wellington +Wells +welsh +welt +Wendell +Wendy +went +wept +were +weren't +Werner +wert +Werther +Wesley +Wesleyan +west +westbound +Westchester +westerly +western +westernmost +Westfield +Westinghouse +Westminster +Weston +westward +wet +wetland +Weyerhauser +whack +whale +Whalen +wham +wharf +Wharton +wharves +what +what'd +what're +whatever +Whatley +whatnot +whatsoever +wheat +Wheatstone +whee +wheedle +wheel +wheelbase +wheelchair +wheelhouse +wheeze +wheezy +Whelan +whelk +Wheller +whelm +whelp +when +whence +whenever +where +where'd +where're +whereabout +whereas +whereby +wherefore +wherein +whereof +whereon +wheresoever +whereupon +wherever +wherewith +whet +whether +which +whichever +whiff +whig +while +whim +whimper +whimsey +whimsic +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 +Whitlock +Whitman +Whitney +Whittaker +Whittier +whittle +whiz +who +who'd +who'll +whoa +whoever +whole +wholehearted +wholesale +wholesome +wholly +whom +whomsoever +whoop +whoosh +whop +whore +whose +whosoever +whup +why +Wichita +wick +wicket +wide +widen +widespread +widgeon +widget +widow +widowhood +width +widthwise +wield +wiener +Wier +wife +wig +wigging +Wiggins +wiggle +wiggly +wigmake +wigwam +Wilbur +Wilcox +wild +wildcat +wildcatter +wilderness +wildfire +wildlife +wile +Wiley +Wilfred +wilful +Wilhelm +Wilhelmina +Wilkes +Wilkins +Wilkinson +will +Willa +Willard +William +Williams +Williamsburg +Williamson +Willie +Willis +Willoughby +willow +willowy +Wills +Wilma +Wilmington +Wilshire +Wilson +Wilsonian +wilt +wily +win +wince +winch +Winchester +wind +windbag +windbreak +windfall +windmill +window +windowpane +windowsill +windshield +Windsor +windstorm +windup +windward +windy +wine +winemake +winemaster +winery +wineskin +Winfield +wing +wingback +wingman +wingmen +wingspan +wingtip +Winifred +wink +winkle +Winnetka +Winnie +Winnipeg +Winnipesaukee +winnow +wino +Winslow +winsome +Winston +winter +Winters +wintertime +Winthrop +wintry +winy +wipe +wire +wireman +wiremen +wiry +Wisconsin +wisdom +wise +wiseacre +wisecrack +wisenheimer +wish +wishbone +wishy +wisp +wispy +wit +witch +witchcraft +with +withal +withdraw +withdrawal +withdrawn +withdrew +withe +wither +withheld +withhold +within +without +withstand +withstood +withy +witness +Witt +witty +wive +wizard +wobble +woe +woebegone +wok +woke +Wolcott +wold +wolf +Wolfe +Wolff +Wolfgang +wolfish +wolve +woman +womanhood +womb +women +won +won't +wonder +wonderland +wondrous +Wong +wont +woo +wood +Woodard +Woodbury +woodcarver +woodcock +woodcut +wooden +woodgrain +woodhen +woodland +Woodlawn +woodlot +woodpeck +woodrow +woodruff +Woods +woodshed +woodside +woodward +woodwind +woodwork +woody +woodyard +wool +woolen +woolgather +Woolworth +Wooster +wop +Worcester +word +Wordsworth +wordy +wore +work +workbench +workbook +workday +workhorse +workload +workman +workmanlike +workmen +workout +workpiece +worksheet +workshop +workspace +worktable +world +worldwide +worm +wormy +worn +worrisome +worry +worse +worsen +worship +worst +worth +Worthington +worthwhile +worthy +Wotan +would +wouldn't +wound +wove +woven +wow +wrack +wraith +wrangle +wrap +wrapup +wrath +wreak +wreath +wreathe +wreck +wreckage +wrench +wrest +wrestle +wretch +wriggle +wright +Wrigley +wring +wrinkle +wrist +wristband +wristwatch +writ +write +writeup +writhe +written +wrong +wrongdo +Wronskian +wrote +wrought +wry +Wu +Wuhan +Wyandotte +Wyatt +Wyeth +Wylie +Wyman +Wyner +wynn +Wyoming +x +x's +Xavier +xenon +xenophobia +xerography +Xerox +Xerxes +xi +xylem +xylene +xylophone +y +y's +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 +yelp +Yemen +yen +yeoman +yeomanry +yeshiva +yesterday +yesteryear +yet +Yiddish +yield +yin +yip +yipping +YMCA +yodel +Yoder +yoga +yogi +yoke +yokel +Yokohama +Yokuts +yolk +yon +yond +Yonkers +yore +York +Yorktown +Yosemite +Yost +you +you'd +you'll +you're +you've +young +youngish +youngster +Youngstown +your +yourself +yourselves +youth +yow +Ypsilanti +ytterbium +yttrium +Yucatan +yucca +Yugoslav +Yugoslavia +yuh +Yuki +Yukon +yule +Yves +Yvette +YWCA +z +z's +Zachary +zag +zagging +Zaire +Zambia +Zan +Zanzibar +zap +zeal +Zealand +zealot +zealous +zebra +Zeiss +Zellerbach +Zen +zenith +zero +zeroes +zeroth +zest +zesty +zeta +Zeus +Ziegler +zig +zigging +zigzag +zilch +Zimmerman +zinc +zing +Zion +Zionism +zip +zircon +zirconium +zloty +zodiac +zodiacal +Zoe +Zomba +zombie +zone +zoo +zoology +zoom +Zoroaster +Zoroastrian +zounds +zucchini +Zurich diff --git a/v7/games/arithmetic.c#b00008 b/v7/games/arithmetic.c#b00008 new file mode 100644 index 0000000..dab68bf --- /dev/null +++ b/v7/games/arithmetic.c#b00008 @@ -0,0 +1,194 @@ +#include + +#define MAX 100 + +char types[10]; +int right[MAX]; +int left[MAX]; +int rights; +int wrongs; +long stvec; +long etvec; +long dtvec; + +void delete(int, int); + +main(argc,argv) +char *argv[]; +{ + int range, k, dif, l; + char line[100]; + int ans,pans,i,j,t; + + signal(SIGINT, delete); + + range = 11; + dif = 0; + while(argc > 1) { + switch(*argv[1]) { + case '+': + case '-': + case 'x': + case '/': + while(types[dif] = argv[1][dif]) + dif++; + break; + + default: + range = getnum(argv[1]) + 1; + } + argv++; + argc--; + } + if(range > MAX) { + printf("Range is too large.\n"); + exit(0); + } + + if(dif == 0) { + types[0] = '+'; + types[1] = '-'; + dif = 2; + } + + for(i = 0; i < range; i++) { + left[i] = right[i] = i; + } + time(&stvec); + k = stvec; + srand(k); + k = 0; + l = 0; + goto start; + +loop: + if(++k%20 == 0) + score(); + +start: + i = skrand(range); + j = skrand(range); + if(dif > 1) + l = random(dif); + + switch(types[l]) { + case '+': + default: + ans = left[i] + right[j]; + printf("%d + %d = ", left[i], right[j]); + break; + + case '-': + t = left[i] + right[j]; + ans = left[i]; + printf("%d - %d = ", t, right[j]); + break; + + case 'x': + ans = left[i] * right[j]; + printf("%d x %d = ", left[i], right[j]); + break; + + case '/': + while(right[j] == 0) + j = random(range); + t = left[i] * right[j] + random(right[j]); + ans = left[i]; + printf("%d / %d = ", t, right[j]); + break; + } + + +loop1: + getline(line); + dtvec += etvec - stvec; + if(line[0]=='\n') goto loop1; + pans = getnum(line); + if(pans == ans) { + printf("Right!\n"); + rights++; + goto loop; + } + else { + printf("What?\n"); + wrongs++; + if(range >= MAX) goto loop1; + left[range] = left[i]; + right[range++] = right[j]; + goto loop1; + } +} + +getline(s) +char *s; +{ + register char *rs; + + rs = s; + + while((*rs = getchar()) == ' '); + while(*rs != '\n') + if(*rs == 0) + exit(0); + else if(rs >= &s[99]) { + while((*rs = getchar()) != '\n') + if(*rs == '\0') exit(0); + } + else + *++rs = getchar(); + while(*--rs == ' ') + *rs = '\n'; +} + +getnum(s) +char *s; +{ + int a; + char c; + + a = 0; + while((c = *s++) >= '0' && c <= '9') { + a = a*10 + c - '0'; + } + return(a); +} + + +random(range) +{ + return(rand()%range); +} + +skrand(range){ +int temp; + temp = random(range) + random(range); + if(temp > range - 1) temp = 2*range - 1 - temp; + return(temp); + } + +score() +{ + time(&etvec); + + printf("\n\nRights %d; Wrongs %d; Score %d%%\n", rights, wrongs, + (rights * 100)/(rights + wrongs)); + + if(rights == 0) return; + printf("Total time %ld seconds; %.1f seconds per problem\n\n\n", + etvec - stvec, + (etvec - stvec) / (rights + 0.)); + + sleep(3); + time(&dtvec); + stvec += dtvec - etvec; +} + +void delete(int x, int y) +{ + if(rights + wrongs == 0.) { + printf("\n"); + exit(0); + } + score(); + exit(0); +} diff --git a/v7/games/backgammon#b50100 b/v7/games/backgammon#b50100 new file mode 100644 index 0000000..92663db Binary files /dev/null and b/v7/games/backgammon#b50100 differ diff --git a/v7/games/backgammon.c#b00008 b/v7/games/backgammon.c#b00008 new file mode 100644 index 0000000..66aab00 --- /dev/null +++ b/v7/games/backgammon.c#b00008 @@ -0,0 +1,585 @@ +#include +#include + +# +#define NIL (-1) +#define MAXGMOV 10 +#define MAXIMOVES 1000 + char level; /*'b'=beginner, 'i'=intermediate, 'e'=expert*/ +int die1; +int die2; +int i; +int j; +int l; +int m; +int count; +int red[] = {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[] = {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, + 06,05,04,03,02,01}; +int imoves; +int goodmoves[MAXGMOV] ; +int probmoves[MAXGMOV] ; +struct {int pos[4],mov[4];} moves[MAXIMOVES] ; + +int main(int argc, char *argv[]) +{ + int t,k,n,go[5]; + char s[100]; + go[5]=NIL; + srand(); + printf( "Do you want instructions? Type 'y' for yes,\n"); + printf( "anything else means no.?? "); + getstr(s); + if(*s=='y')instructions(); + printf( "Choose the level of your oppponent.\n"); + printf( "Type 'b' for beginner, or 'i' for intermediate.\n"); + printf( "Anything else gets you an expert.?? "); + level='e'; + getstr(s); + if(*s=='b')level='b'; + else if(*s=='i')level='i'; + printf( "You will play red. Do you wan't to move first?\n"); + printf( "Type 'y' for yes, anything else means no.?? "); + getstr(s); + if(*s=='y')goto nowhmove; +whitesmv: + roll(); + printf( "white rolls %d,%d\n",die1,die2); + printf( "white's move is:"); + if(nextmove(white,red)==NIL)goto nowhmove; + if(piececount(white,0,24)==0){ + printf( "White wins\n"); + printf( "Aren't you ashamed. You've been beaten by a computer.\n"); + exit(); + } +nowhmove: + prtbrd(); + + roll(); +retry: + printf( "your roll is %d, %d\n",die1,die2); + printf( "your move, please?? "); + getstr(s); + if(*s==0){ + printf( "red's move skipped\n"); + goto whitesmv; + } + n=sscanf(s,"%d%d%d%d%d",&go[0],&go[1],&go[2],&go[3],&go[4]); + if((die1!=die2&&n>2)||n>4){ + printf( "you've made too many moves\n"); + goto retry; + } + go[n]=NIL; + if(*s=='-'){ + go[0]= -go[0]; + t=die1; + die1=die2; + die2=t; + } + for(k=0;k0&&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: + printf( "Move %d is not legal.\n",ipos); + while(k--){ + die=k?die2:die1; + player[pos[k]]++; + player[pos[k]+die]--; + } + return(-1); +} +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){ + printf( "roll was %d,%d; no white move possible\n",die1,die2); + 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)printf( "no move possible\n"); + else for(n=0;n<4;n++){ + if(moves[k].pos[n]==NIL)break; + printf( " %d, %d",25-moves[k].pos[n],moves[k].mov[n]); + } + printf( "\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); +} +/* +prtmovs() +{ + int i1,i2; + printf( "possible moves are\n"); + for(i1=0;i1>8)%6+1; + die2=(rand()>>8)%6+1; +} + +movegen(mover,movee) +int *mover,*movee; +{ + extern int i,j,l,m,count; + extern int die1,die2; + 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,24-die1)!=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,24-die2)!=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,24-die1)!=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,24-die1)!=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; +{ + extern int i,j,l,m,imoves,count; + int t; + if(imoves>=MAXIMOVES)goto undo;; + 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++; + } +undo: + 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; +{ + extern char level; + int k,n,nn,bestval,moveval,prob; + n=0; + if(imoves==0)return(NIL); + goodmoves[0]=NIL; + bestval= -32000; + for(k=0;kbestval){ + bestval=moveval; + n=0; + } + if(n1){ + nn=n; + n=0; + prob=32000; + for(k=0;kprob)continue; + if(moveval>4)%n]); +} + +eval(player,playee,k,prob) +int *player,*playee,k,*prob; +{ + extern char level; + int newtry[31],newother[31],*r,*q,*p,n,sum,first; + int ii,lastwhite,lastred; + *prob=sum=0; + r=player+25; + p=newtry; + q=newother; + while(player6){ /*expert's running game. + First priority to get all + pieces into white's home*/ + for(sum=1000;lastwhite>6;lastwhite--) + sum=sum-lastwhite*newtry[25-lastwhite]; + } + for(first=0;first<25;first++) + if(newother[first]!=0)break; /*find other's first piece*/ + q=newtry+25; + for(p=newtry+1;p 1)sum++; /*blocked points are good*/ + if(first>5){ /*only stress removing pieces if homeboard + cannot be hit + */ + q=newtry+31; + p=newtry+25; + for(n=6;p=19;k--)printf( "%4d",k); + printf( " "); + for(k=18;k>=13;k--)printf( "%4d",k); + printf( "\nRed'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)printf( "%4d",n); + else printf( " "); + } +} +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; + printf( " %c",c); + } +} + +int rrno = 0; + +srand(){ + rrno = _look( 0x40000 ); + _store( 0x40000, rrno+1 ); + } + +rand(){ + rrno *= 0106273; + rrno += 020202; + return( rrno & 077777 ); + } + +_look(p) int *p; { + return( *p ); + } + +_store( p, numb ) int *p; { + *p = numb; + } diff --git a/v7/games/backgmn.c.orig#b00008 b/v7/games/backgmn.c.orig#b00008 new file mode 100644 index 0000000..d438efa --- /dev/null +++ b/v7/games/backgmn.c.orig#b00008 @@ -0,0 +1,584 @@ +# include + +# +#define NIL (-1) +#define MAXGMOV 10 +#define MAXIMOVES 1000 + char level; /*'b'=beginner, 'i'=intermediate, 'e'=expert*/ +int die1; +int die2; +int i; +int j; +int l; +int m; +int count; +int red[] {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[] {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, + 06,05,04,03,02,01}; +int imoves; +int goodmoves[MAXGMOV] ; +int probmoves[MAXGMOV] ; +struct {int pos[4],mov[4];} moves[MAXIMOVES] ; + +main() +{ + int t,k,n,go[5]; + char s[100]; + go[5]=NIL; + srand(); + printf( "Do you want instructions? Type 'y' for yes,\n"); + printf( "anything else means no.?? "); + getstr(s); + if(*s=='y')instructions(); + printf( "Choose the level of your oppponent.\n"); + printf( "Type 'b' for beginner, or 'i' for intermediate.\n"); + printf( "Anything else gets you an expert.?? "); + level='e'; + getstr(s); + if(*s=='b')level='b'; + else if(*s=='i')level='i'; + printf( "You will play red. Do you wan't to move first?\n"); + printf( "Type 'y' for yes, anything else means no.?? "); + getstr(s); + if(*s=='y')goto nowhmove; +whitesmv: + roll(); + printf( "white rolls %d,%d\n",die1,die2); + printf( "white's move is:"); + if(nextmove(white,red)==NIL)goto nowhmove; + if(piececount(white,0,24)==0){ + printf( "White wins\n"); + printf( "Aren't you ashamed. You've been beaten by a computer.\n"); + exit(); + } +nowhmove: + prtbrd(); + + roll(); +retry: + printf( "your roll is %d, %d\n",die1,die2); + printf( "your move, please?? "); + getstr(s); + if(*s==0){ + printf( "red's move skipped\n"); + goto whitesmv; + } + n=sscanf(s,"%d%d%d%d%d",&go[0],&go[1],&go[2],&go[3],&go[4]); + if((die1!=die2&&n>2)||n>4){ + printf( "you've made too many moves\n"); + goto retry; + } + go[n]=NIL; + if(*s=='-'){ + go[0]= -go[0]; + t=die1; + die1=die2; + die2=t; + } + for(k=0;k0&&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: + printf( "Move %d is not legal.\n",ipos); + while(k--){ + die=k?die2:die1; + player[pos[k]]++; + player[pos[k]+die]--; + } + return(-1); +} +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){ + printf( "roll was %d,%d; no white move possible\n",die1,die2); + 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)printf( "no move possible\n"); + else for(n=0;n<4;n++){ + if(moves[k].pos[n]==NIL)break; + printf( " %d, %d",25-moves[k].pos[n],moves[k].mov[n]); + } + printf( "\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); +} +/* +prtmovs() +{ + int i1,i2; + printf( "possible moves are\n"); + for(i1=0;i1>8)%6+1; + die2=(rand()>>8)%6+1; +} + +movegen(mover,movee) +int *mover,*movee; +{ + extern int i,j,l,m,count; + extern int die1,die2; + 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,24-die1)!=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,24-die2)!=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,24-die1)!=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,24-die1)!=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; +{ + extern int i,j,l,m,imoves,count; + int t; + if(imoves>=MAXIMOVES)goto undo;; + 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++; + } +undo: + 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; +{ + extern char level; + int k,n,nn,bestval,moveval,prob; + n=0; + if(imoves==0)return(NIL); + goodmoves[0]=NIL; + bestval= -32000; + for(k=0;kbestval){ + bestval=moveval; + n=0; + } + if(n1){ + nn=n; + n=0; + prob=32000; + for(k=0;kprob)continue; + if(moveval>4)%n]); +} + +eval(player,playee,k,prob) +int *player,*playee,k,*prob; +{ + extern char level; + int newtry[31],newother[31],*r,*q,*p,n,sum,first; + int ii,lastwhite,lastred; + *prob=sum=0; + r=player+25; + p=newtry; + q=newother; + while(player6){ /*expert's running game. + First priority to get all + pieces into white's home*/ + for(sum=1000;lastwhite>6;lastwhite--) + sum=sum-lastwhite*newtry[25-lastwhite]; + } + for(first=0;first<25;first++) + if(newother[first]!=0)break; /*find other's first piece*/ + q=newtry+25; + for(p=newtry+1;p 1)sum++; /*blocked points are good*/ + if(first>5){ /*only stress removing pieces if homeboard + cannot be hit + */ + q=newtry+31; + p=newtry+25; + for(n=6;p=19;k--)printf( "%4d",k); + printf( " "); + for(k=18;k>=13;k--)printf( "%4d",k); + printf( "\nRed'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)printf( "%4d",n); + else printf( " "); + } +} +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; + printf( " %c",c); + } +} + +int rrno 0; + +srand(){ + rrno = _look( 0x40000 ); + _store( 0x40000, rrno+1 ); + } + +rand(){ + rrno =* 0106273; + rrno =+ 020202; + return( rrno & 077777 ); + } + +_look(p) int *p; { + return( *p ); + } + +_store( p, numb ) int *p; { + *p = numb; + } diff --git a/v7/games/fish.c#b00008 b/v7/games/fish.c#b00008 new file mode 100644 index 0000000..0d527aa --- /dev/null +++ b/v7/games/fish.c#b00008 @@ -0,0 +1,527 @@ +#include +#include +#include + +/* Through, `my' refers to the program, `your' to the player */ + +# define CTYPE 13 +# define CTSIZ (CTYPE+1) +# define DECK 52 +# define NOMORE 0 +# define DOUBTIT (-1); + +typedef char HAND[CTSIZ]; + +/* data structures */ + +short debug; + +HAND myhand; +HAND yourhand; +char deck[DECK]; +short nextcd; +int proflag; + +int shuffle(void); +int choose(char a[], int n); +int error(char *s); +int rand(void); +int draw(void); +int empty(HAND h); +int mark(HAND hand, int cd); +int deal(HAND hand, int n); +int stats(void); +int phand(HAND h); +int instruct(void); +int game(void); +int start(HAND h); +int hedrew(int d); +int heguessed(int d); +int myguess(void); +int move(HAND hs, HAND ht, int g, int v); +int guess(void); +int madebook(int x); +int score(void); + +/* utility and output programs */ + +void test(void) { + HAND h; + int i; + i=mark(h,i); +} + +int shuffle(void) { + /* shuffle the deck, and reset nextcd */ + /* uses the random number generator `rand' in the C library */ + /* assumes that `srand' has already been called */ + + register i; + + for( i=0; i0; --i ){ /* select the next card at random */ + deck[i-1] = choose( deck, i ); + } + + nextcd = 0; + } + +int choose(char a[], int n ) { + /* pick and return one at random from the n choices in a */ + /* The last one is moved to replace the one chosen */ + register j, t; + + if( n <= 0 ) error( "null choice" ); + + j = rand() % n; + t = a[j]; + a[j] = a[n-1]; + return(t); + } + +int draw(void) { + if( nextcd >= DECK ) return( NOMORE ); + return( deck[nextcd++] ); + } + +int error(char *s) { + fprintf( stderr, "error: " ); + fprintf( stderr, s ); + exit( 1 ); + } + +int empty(HAND h) { + register i; + + for( i=1; i<=CTYPE; ++i ){ + if( h[i] != 0 && h[i] != 4 ) return( 0 ); + } + return( i ); + } + +int mark(HAND hand, int cd) { + if( cd != NOMORE ){ + ++hand[cd]; + if( hand[cd] > 4 ){ + error( "mark overflow" ); + } + } + return( cd ); + } + +int deal(HAND hand, int n) { + while( n-- ){ + if( mark( hand, draw() ) == NOMORE ) error( "deck exhausted" ); + } + } + +char *cname[] = { + "NOMORE!!!", + "A", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "J", + "Q", + "K" + }; + +int stats(void) { + register i, ct, b; + + if( proflag ) printf( "Pro level\n" ); + b = ct = 0; + + for( i=1; i<=CTYPE; ++i ){ + if( myhand[i] == 4 ) ++b; + else ct += myhand[i]; + } + + if( b ){ + printf( "My books: " ); + for( i=1; i<=CTYPE; ++i ){ + if( myhand[i] == 4 ) printf( "%s ", cname[i] ); + } + printf( "\n" ); + } + + printf( "%d cards in my hand, %d in the pool\n", ct, DECK-nextcd ); + printf( "You ask me for: " ); + } + +int phand(HAND h) { + register i, j; + + j = 0; + + for( i = 1; i<= CTYPE; ++i ){ + if( h[i] == 4 ) { + ++j; + continue; + } + if( h[i] ){ + register k; + k = h[i]; + while( k-- ) printf( "%s ", cname[i] ); + } + } + + if( j ){ + printf( "+ Books of " ); + for( i=1; i<=CTYPE; ++i ){ + if( h[i] == 4 ) printf( "%s ", cname[i] ); + } + } + + printf( "\n" ); + } + +int main(int argc, char *argv[]) { + /* initialize shuffling, ask for instructions, play game, die */ + register c; + + if( argc > 1 && argv[1][0] == '-' ){ + while( argv[1][0] == '-' ) { ++argv[1]; ++debug; } + argv++; + argc--; + } + + srand( getpid() ); + + printf( "instructions?\n" ); + if( (c=getchar()) != '\n' ){ + if( c != 'n' ) instruct(); + while( getchar() != '\n' ); + } + + game(); + } + +/* print instructions */ + +char *inst[] = { + "`Go Fish' is a childrens' card game.", + "The Object is to accumulate `books' of 4 cards", + "with the same face value.", + "The players alternate turns; each turn begins with one", + "player selecting a card from his hand, and asking the", + "other player for all cards of that face value.", + "If the other player has one or more cards of that face value", + "in his hand, he gives them to the first player, and the", + "first player makes another request.", + "Eventually, the first player asks for a card which", + "is not in the second player's hand: he replies `GO FISH!'", + "The first player then draws a card from the `pool' of", + "undealt cards. If this is the card he had last requested, he", + "draws again.", + "When a book is made, either through drawing or requesting,", + "the cards are laid down and no further action takes", + "place with that face value.", + "To play the computer, simply make guesses by typing", + "a, 2, 3, 4, 5, 6, 7, 8, 9, 10, j, q, or k when asked.", + "Hitting return gives you information about the size of", + "my hand and the pool, and tells you about my books.", + "Saying `p' as a first guess puts you into `pro' level;", + "The default is pretty dumb!", + "Good Luck!", + "" + }; + +int instruct(void) { + register char **cpp; + + printf( "\n" ); + + for( cpp = inst; **cpp != '\0'; ++cpp ){ + printf( "%s\n", *cpp ); + } + } + +int game(void) { + + shuffle(); + + deal( myhand, 7 ); + deal( yourhand, 7 ); + + start( myhand ); + + for(;;){ + + register g; + + + /* you make repeated guesses */ + + for(;;) { + printf( "your hand is: " ); + phand( yourhand ); + printf( "you ask me for: " ); + if( !move( yourhand, myhand, g=guess(), 0 ) ) break; + printf( "Guess again\n" ); + } + + /* I make repeated guesses */ + + for(;;) { + if( (g=myguess()) != NOMORE ){ + printf( "I ask you for: %s\n", cname[g] ); + } + if( !move( myhand, yourhand, g, 1 ) ) break; + printf( "I get another guess\n" ); + } + } + } + +/* reflect the effect of a move on the hands */ + +int move(HAND hs, HAND ht, int g, int v) { + /* hand hs has made a guess, g, directed towards ht */ + /* v on indicates that the guess was made by the machine */ + register int d; + char *sp, *tp; + + sp = tp = "I"; + if( v ) tp = "You"; + else sp = "You"; + + if( g == NOMORE ){ + d = draw(); + if( d == NOMORE ) score(); + else { + + printf( "Empty Hand\n" ); + if( !v ) printf( "You draw %s\n", cname[d] ); + mark( hs, d ); + } + return( 0 ); + } + + if( !v ) heguessed( g ); + + if( hs[g] == 0 ){ + if( v ) error( "Rotten Guess" ); + printf( "You don't have any %s's\n", cname[g] ); + return(1); + } + + if( ht[g] ){ /* successful guess */ + printf( "%s have %d %s%s\n", tp, ht[g], cname[g], ht[g]>1?"'s":"" ); + hs[g] += ht[g]; + ht[g] = 0; + if( hs[g] == 4 ) madebook(g); + return(1); + } + + /* GO FISH! */ + + printf( "%s say \"GO FISH!\"\n", tp ); + + newdraw: + d = draw(); + if( d == NOMORE ) { + printf( "No more cards\n" ); + return(0); + } + mark( hs, d ); + if( !v ) printf( "You draw %s\n", cname[d] ); + if( hs[d] == 4 ) madebook(d); + if( d == g ){ + printf( "%s drew the guess, so draw again\n", sp ); + if( !v ) hedrew( d ); + goto newdraw; + } + return( 0 ); + } + +int madebook(int x) { + printf( "Made a book of %s's\n", cname[x] ); + } + +int score(void) { + register my, your, i; + + my = your = 0; + + printf( "The game is over.\nMy books: " ); + + for( i=1; i<=CTYPE;++i ){ + if( myhand[i] == 4 ){ + ++my; + printf( "%s ", cname[i] ); + } + } + + printf( "\nYour books: " ); + + for( i=1; i<=CTYPE;++i ){ + if( yourhand[i] == 4 ){ + ++your; + printf( "%s ", cname[i] ); + } + } + + printf( "\n\nI have %d, you have %d\n", my, your ); + + printf( "\n%s win!!!\n", my>your?"I":"You" ); + exit(0); + } + +# define G(x) { if(go) goto err; else go = x; } + +int guess(void) { + /* get the guess from the tty and return it... */ + register g, go; + + go = 0; + + for(;;) { + switch( g = getchar() ){ + + case 'p': + case 'P': + ++proflag; + continue; + + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + G(g-'0'); + continue; + + case 'a': + case 'A': + G(1); + continue; + + case '1': + G(10); + continue; + + case '0': + if( go != 10 ) goto err; + continue; + + case 'J': + case 'j': + G(11); + continue; + + case 'Q': + case 'q': + G(12); + continue; + + case 'K': + case 'k': + G(13); + continue; + + case '\n': + if( empty( yourhand ) ) return( NOMORE ); + if( go == 0 ){ + stats(); + continue; + } + return( go ); + + case ' ': + case '\t': + continue; + + default: + err: + while( g != '\n' ) g = getchar(); + printf( "what?\n" ); + continue; + } + } + } + +/* the program's strategy appears from here to the end */ + +char try[100]; +char ntry; +char haveguessed[CTSIZ]; + +char hehas[CTSIZ]; + +int start(HAND h) { + ; + } + +int hedrew(int d){ + ++hehas[d]; + } + +int heguessed(int d){ + ++hehas[d]; + } + +int myguess(void) { + + register i, lg, t; + + if( empty( myhand ) ) return( NOMORE ); + + /* make a list of those things which i have */ + /* leave off any which are books */ + /* if something is found that he has, guess it! */ + + ntry = 0; + for( i=1; i<=CTYPE; ++i ){ + if( myhand[i] == 0 || myhand[i] == 4 ) continue; + try[ntry++] = i; + } + + if( !proflag ) goto random; + + /* get ones he has, if any */ + + for( i=0; i + +/* Through, `my' refers to the program, `your' to the player */ + +# define CTYPE 13 +# define CTSIZ (CTYPE+1) +# define DECK 52 +# define NOMORE 0 +# define DOUBTIT (-1); + +typedef char HAND[CTSIZ]; + +/* data structures */ + +short debug; + +HAND myhand; +HAND yourhand; +char deck[DECK]; +short nextcd; +int proflag; + +/* utility and output programs */ + +shuffle(){ + /* shuffle the deck, and reset nextcd */ + /* uses the random number generator `rand' in the C library */ + /* assumes that `srand' has already been called */ + + register i; + + for( i=0; i0; --i ){ /* select the next card at random */ + deck[i-1] = choose( deck, i ); + } + + nextcd = 0; + } + +choose( a, n ) char a[]; { + /* pick and return one at random from the n choices in a */ + /* The last one is moved to replace the one chosen */ + register j, t; + + if( n <= 0 ) error( "null choice" ); + + j = rand() % n; + t = a[j]; + a[j] = a[n-1]; + return(t); + } + +draw() { + if( nextcd >= DECK ) return( NOMORE ); + return( deck[nextcd++] ); + } + +error( s ) char *s; { + fprintf( stderr, "error: " ); + fprintf( stderr, s ); + exit( 1 ); + } + +empty( h ) HAND h; { + register i; + + for( i=1; i<=CTYPE; ++i ){ + if( h[i] != 0 && h[i] != 4 ) return( 0 ); + } + return( i ); + } + +mark( cd, hand ) HAND hand; { + if( cd != NOMORE ){ + ++hand[cd]; + if( hand[cd] > 4 ){ + error( "mark overflow" ); + } + } + return( cd ); + } + +deal( hand, n ) HAND hand; { + while( n-- ){ + if( mark( hand, draw() ) == NOMORE ) error( "deck exhausted" ); + } + } + +char *cname[] { + "NOMORE!!!", + "A", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "J", + "Q", + "K", + }; + +stats(){ + register i, ct, b; + + if( proflag ) printf( "Pro level\n" ); + b = ct = 0; + + for( i=1; i<=CTYPE; ++i ){ + if( myhand[i] == 4 ) ++b; + else ct += myhand[i]; + } + + if( b ){ + printf( "My books: " ); + for( i=1; i<=CTYPE; ++i ){ + if( myhand[i] == 4 ) printf( "%s ", cname[i] ); + } + printf( "\n" ); + } + + printf( "%d cards in my hand, %d in the pool\n", ct, DECK-nextcd ); + printf( "You ask me for: " ); + } + +phand( h ) HAND h; { + register i, j; + + j = 0; + + for( i = 1; i<= CTYPE; ++i ){ + if( h[i] == 4 ) { + ++j; + continue; + } + if( h[i] ){ + register k; + k = h[i]; + while( k-- ) printf( "%s ", cname[i] ); + } + } + + if( j ){ + printf( "+ Books of " ); + for( i=1; i<=CTYPE; ++i ){ + if( h[i] == 4 ) printf( "%s ", cname[i] ); + } + } + + printf( "\n" ); + } + +main( argc, argv ) char * argv[]; { + /* initialize shuffling, ask for instructions, play game, die */ + register c; + + if( argc > 1 && argv[1][0] == '-' ){ + while( argv[1][0] == '-' ) { ++argv[1]; ++debug; } + argv++; + argc--; + } + + srand( getpid() ); + + printf( "instructions?\n" ); + if( (c=getchar()) != '\n' ){ + if( c != 'n' ) instruct(); + while( getchar() != '\n' ); + } + + game(); + } + +/* print instructions */ + +char *inst[] { + "`Go Fish' is a childrens' card game.", + "The Object is to accumulate `books' of 4 cards", + "with the same face value.", + "The players alternate turns; each turn begins with one", + "player selecting a card from his hand, and asking the", + "other player for all cards of that face value.", + "If the other player has one or more cards of that face value", + "in his hand, he gives them to the first player, and the", + "first player makes another request.", + "Eventually, the first player asks for a card which", + "is not in the second player's hand: he replies `GO FISH!'", + "The first player then draws a card from the `pool' of", + "undealt cards. If this is the card he had last requested, he", + "draws again.", + "When a book is made, either through drawing or requesting,", + "the cards are laid down and no further action takes", + "place with that face value.", + "To play the computer, simply make guesses by typing", + "a, 2, 3, 4, 5, 6, 7, 8, 9, 10, j, q, or k when asked.", + "Hitting return gives you information about the size of", + "my hand and the pool, and tells you about my books.", + "Saying `p' as a first guess puts you into `pro' level;", + "The default is pretty dumb!", + "Good Luck!", + "", + }; + +instruct(){ + register char **cpp; + + printf( "\n" ); + + for( cpp = inst; **cpp != '\0'; ++cpp ){ + printf( "%s\n", *cpp ); + } + } + +game(){ + + shuffle(); + + deal( myhand, 7 ); + deal( yourhand, 7 ); + + start( myhand ); + + for(;;){ + + register g; + + + /* you make repeated guesses */ + + for(;;) { + printf( "your hand is: " ); + phand( yourhand ); + printf( "you ask me for: " ); + if( !move( yourhand, myhand, g=guess(), 0 ) ) break; + printf( "Guess again\n" ); + } + + /* I make repeated guesses */ + + for(;;) { + if( (g=myguess()) != NOMORE ){ + printf( "I ask you for: %s\n", cname[g] ); + } + if( !move( myhand, yourhand, g, 1 ) ) break; + printf( "I get another guess\n" ); + } + } + } + +/* reflect the effect of a move on the hands */ + +move( hs, ht, g, v ) HAND hs, ht; { + /* hand hs has made a guess, g, directed towards ht */ + /* v on indicates that the guess was made by the machine */ + register d; + char *sp, *tp; + + sp = tp = "I"; + if( v ) tp = "You"; + else sp = "You"; + + if( g == NOMORE ){ + d = draw(); + if( d == NOMORE ) score(); + else { + + printf( "Empty Hand\n" ); + if( !v ) printf( "You draw %s\n", cname[d] ); + mark( hs, d ); + } + return( 0 ); + } + + if( !v ) heguessed( g ); + + if( hs[g] == 0 ){ + if( v ) error( "Rotten Guess" ); + printf( "You don't have any %s's\n", cname[g] ); + return(1); + } + + if( ht[g] ){ /* successful guess */ + printf( "%s have %d %s%s\n", tp, ht[g], cname[g], ht[g]>1?"'s":"" ); + hs[g] += ht[g]; + ht[g] = 0; + if( hs[g] == 4 ) madebook(g); + return(1); + } + + /* GO FISH! */ + + printf( "%s say \"GO FISH!\"\n", tp ); + + newdraw: + d = draw(); + if( d == NOMORE ) { + printf( "No more cards\n" ); + return(0); + } + mark( hs, d ); + if( !v ) printf( "You draw %s\n", cname[d] ); + if( hs[d] == 4 ) madebook(d); + if( d == g ){ + printf( "%s drew the guess, so draw again\n", sp ); + if( !v ) hedrew( d ); + goto newdraw; + } + return( 0 ); + } + +madebook( x ){ + printf( "Made a book of %s's\n", cname[x] ); + } + +score(){ + register my, your, i; + + my = your = 0; + + printf( "The game is over.\nMy books: " ); + + for( i=1; i<=CTYPE;++i ){ + if( myhand[i] == 4 ){ + ++my; + printf( "%s ", cname[i] ); + } + } + + printf( "\nYour books: " ); + + for( i=1; i<=CTYPE;++i ){ + if( yourhand[i] == 4 ){ + ++your; + printf( "%s ", cname[i] ); + } + } + + printf( "\n\nI have %d, you have %d\n", my, your ); + + printf( "\n%s win!!!\n", my>your?"I":"You" ); + exit(0); + } + +# define G(x) { if(go) goto err; else go = x; } + +guess(){ + /* get the guess from the tty and return it... */ + register g, go; + + go = 0; + + for(;;) { + switch( g = getchar() ){ + + case 'p': + case 'P': + ++proflag; + continue; + + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + G(g-'0'); + continue; + + case 'a': + case 'A': + G(1); + continue; + + case '1': + G(10); + continue; + + case '0': + if( go != 10 ) goto err; + continue; + + case 'J': + case 'j': + G(11); + continue; + + case 'Q': + case 'q': + G(12); + continue; + + case 'K': + case 'k': + G(13); + continue; + + case '\n': + if( empty( yourhand ) ) return( NOMORE ); + if( go == 0 ){ + stats(); + continue; + } + return( go ); + + case ' ': + case '\t': + continue; + + default: + err: + while( g != '\n' ) g = getchar(); + printf( "what?\n" ); + continue; + } + } + } + +/* the program's strategy appears from here to the end */ + +char try[100]; +char ntry; +char haveguessed[CTSIZ]; + +char hehas[CTSIZ]; + +start( h ) HAND h; { + ; + } + +hedrew( d ){ + ++hehas[d]; + } + +heguessed( d ){ + ++hehas[d]; + } + +myguess(){ + + register i, lg, t; + + if( empty( myhand ) ) return( NOMORE ); + + /* make a list of those things which i have */ + /* leave off any which are books */ + /* if something is found that he has, guess it! */ + + ntry = 0; + for( i=1; i<=CTYPE; ++i ){ + if( myhand[i] == 0 || myhand[i] == 4 ) continue; + try[ntry++] = i; + } + + if( !proflag ) goto random; + + /* get ones he has, if any */ + + for( i=0; i + +char line[500]; +char bline[500]; + +main() +{ + double p; + register char * l; + long t; + FILE *f; + + f = fopen("/usr/local/games/lib/fortunes", "r"); + if (f == NULL) { + printf("Memory fault -- core dumped\n"); + exit(1); + } + time(&t); + srand(getpid() + (int)((t>>16) + t)); + p = 1.; + for(;;) { + l = fgets(line, 500, f); + if(l == NULL) + break; + if(rand() < 32768./p) + strcpy(bline, line); + p += 1.; + } + fputs(bline, stdout); + return(0); +} diff --git a/v7/games/fortune.c.orig#b00008 b/v7/games/fortune.c.orig#b00008 new file mode 100644 index 0000000..ce18c05 --- /dev/null +++ b/v7/games/fortune.c.orig#b00008 @@ -0,0 +1,31 @@ +#include + +char line[500]; +char bline[500]; + +main() +{ + double p; + register char * l; + long t; + FILE *f; + + f = fopen("/usr/games/lib/fortunes", "r"); + if (f == NULL) { + printf("Memory fault -- core dumped\n"); + exit(1); + } + time(&t); + srand(getpid() + (int)((t>>16) + t)); + p = 1.; + for(;;) { + l = fgets(line, 500, f); + if(l == NULL) + break; + if(rand() < 32768./p) + strcpy(bline, line); + p += 1.; + } + fputs(bline, stdout); + return(0); +} diff --git a/v7/games/hangman.c#b00008 b/v7/games/hangman.c#b00008 new file mode 100644 index 0000000..a546924 --- /dev/null +++ b/v7/games/hangman.c#b00008 @@ -0,0 +1,161 @@ +#include +#include +#include +#include +#include +#include +#define DICT "/usr/local/dict/words" +#define EDICT "/crp/dict/web2" +#define MAXERR 7 +#define MINSCORE 0 +#define MINLEN 7 +char *dictfile; +int alive,lost; +FILE *dict; +long int dictlen; +float errors=0, words=0; + +int setup(void); +int startnew(void); +int stateout(void); +int getguess(void); +int wordout(void); +int youwon(void); +int fatal(char *s); +double frand(void); +int getword(void); +int pscore(void); + +int main(int argc, char **argv) +{ + if(argc==1) dictfile=DICT; + else if(*argv[1]=='-') dictfile=EDICT; + else dictfile=argv[1]; + setup(); + for(;;) + { startnew(); + while(alive>0) + { stateout(); + getguess(); + } + words=words+1; + if(lost) wordout(); + else youwon(); + } +} +int setup(void) +{ int tvec[2]; + struct stat statb; + time((time_t*)tvec); + srand(tvec[1]+tvec[2]); + if((dict=fopen(dictfile,"r"))==NULL) fatal("no dictionary"); + if(stat(dictfile,&statb)<0) fatal("can't stat"); + dictlen=statb.st_size; +} +double frand(void) +{ + return(rand()/32768.); +} +char word[26],alph[26],realword[26]; +int startnew(void) +{ int i; + long int pos; + char buf[128]; + for(i=0;i<26;i++) word[i]=alph[i]=realword[i]=0; + pos=frand()*dictlen; + fseek(dict,pos,0); + fscanf(dict,"%s\n",buf); + getword(); + alive=MAXERR; + lost=0; +} +int stateout(void) +{ int i; + printf("guesses: "); + for(i=0;i<26;i++) + if(alph[i]!=0) putchar(alph[i]); + printf(" word: %s ",word); + printf("errors: %d/%d\n",MAXERR-alive,MAXERR); +} +int getguess(void) +{ char gbuf[128],c; + int ok=0,i; +loop: + printf("guess: "); + if(gets(gbuf)==NULL) + { putchar('\n'); + exit(0); + } + if((c=gbuf[0])<'a' || c>'z') + { printf("lower case\n"); + goto loop; + } + if(alph[c-'a']!=0) + { printf("you guessed that\n"); + goto loop; + } + else alph[c-'a']=c; + for(i=0;realword[i]!=0;i++) + if(realword[i]==c) + { word[i]=c; + ok=1; + } + if(ok==0) + { alive--; + errors=errors+1; + if(alive<=0) lost=1; + return; + } + for(i=0;word[i]!=0;i++) + if(word[i]=='.') return; + alive=0; + lost=0; + return; +} +int wordout(void) +{ + errors=errors+2; + printf("the answer was %s, you blew it\n",realword); +} +int youwon(void) +{ + printf("you win, the word is %s\n",realword); +} +int fatal(char *s) +{ + fprintf(stderr,"%s\n",s); + exit(1); +} +int getword(void) +{ char wbuf[128],c; + int i,j; +loop: + if(fscanf(dict,"%s\n",wbuf)==EOF) + { fseek(dict,0L,0); + goto loop; + } + if((c=wbuf[0])>'z' || c<'a') goto loop; + for(i=j=0;wbuf[j]!=0;i++,j++) + { if(wbuf[j]=='-') j++; + wbuf[i]=wbuf[j]; + } + wbuf[i]=0; + if(i'z') goto loop; + pscore(); + strcpy(realword,wbuf); + for(j=0;j +#include +#include +#define DICT "/usr/dict/words" +#define EDICT "/crp/dict/web2" +#define MAXERR 7 +#define MINSCORE 0 +#define MINLEN 7 +char *dictfile; +int alive,lost; +FILE *dict; +long int dictlen; +float errors=0, words=0; +main(argc,argv) char **argv; +{ + if(argc==1) dictfile=DICT; + else if(*argv[1]=='-') dictfile=EDICT; + else dictfile=argv[1]; + setup(); + for(;;) + { startnew(); + while(alive>0) + { stateout(); + getguess(); + } + words=words+1; + if(lost) wordout(); + else youwon(); + } +} +setup() +{ int tvec[2]; + struct stat statb; + time(tvec); + srand(tvec[1]+tvec[2]); + if((dict=fopen(dictfile,"r"))==NULL) fatal("no dictionary"); + if(stat(dictfile,&statb)<0) fatal("can't stat"); + dictlen=statb.st_size; +} +double frand() +{ + return(rand()/32768.); +} +char word[26],alph[26],realword[26]; +startnew() +{ int i; + long int pos; + char buf[128]; + for(i=0;i<26;i++) word[i]=alph[i]=realword[i]=0; + pos=frand()*dictlen; + fseek(dict,pos,0); + fscanf(dict,"%s\n",buf); + getword(); + alive=MAXERR; + lost=0; +} +stateout() +{ int i; + printf("guesses: "); + for(i=0;i<26;i++) + if(alph[i]!=0) putchar(alph[i]); + printf(" word: %s ",word); + printf("errors: %d/%d\n",MAXERR-alive,MAXERR); +} +getguess() +{ char gbuf[128],c; + int ok=0,i; +loop: + printf("guess: "); + if(gets(gbuf)==NULL) + { putchar('\n'); + exit(0); + } + if((c=gbuf[0])<'a' || c>'z') + { printf("lower case\n"); + goto loop; + } + if(alph[c-'a']!=0) + { printf("you guessed that\n"); + goto loop; + } + else alph[c-'a']=c; + for(i=0;realword[i]!=0;i++) + if(realword[i]==c) + { word[i]=c; + ok=1; + } + if(ok==0) + { alive--; + errors=errors+1; + if(alive<=0) lost=1; + return; + } + for(i=0;word[i]!=0;i++) + if(word[i]=='.') return; + alive=0; + lost=0; + return; +} +wordout() +{ + errors=errors+2; + printf("the answer was %s, you blew it\n",realword); +} +youwon() +{ + printf("you win, the word is %s\n",realword); +} +fatal(s) char *s; +{ + fprintf(stderr,"%s\n",s); + exit(1); +} +getword() +{ char wbuf[128],c; + int i,j; +loop: + if(fscanf(dict,"%s\n",wbuf)==EOF) + { fseek(dict,0L,0); + goto loop; + } + if((c=wbuf[0])>'z' || c<'a') goto loop; + for(i=j=0;wbuf[j]!=0;i++,j++) + { if(wbuf[j]=='-') j++; + wbuf[i]=wbuf[j]; + } + wbuf[i]=0; + if(i'z') goto loop; + pscore(); + strcpy(realword,wbuf); + for(j=0;j +#include +#include +#include +#include + +#define NF 10 +#define NL 300 +#define NC 200 +#define SL 100 +#define NA 10 + +int tflag; +int xx[NL]; +char score[NL]; +int rights; +int wrongs; +int guesses; +FILE *input; +int nl = 0; +int na = NA; +int inc; +int ptr = 0; +int nc = 0; +char line[150]; +char response[100]; +char *tmp[NF]; +int _select[NF]; + +int cmp(char *u, char *v); +int disj(int s); +int eat(int s, char c); +int string(int s); +int fold(int c); +int publish(char *t); +int pub1(int s); +int _segment(char *u, char *w[]); +int perm(char *u[], int m, char *v[], int n, int p[]); +int find(char *u[], int m); +int readindex(void); +int talloc(void); +int badinfo(void); +int next(void); +void done(int, int); +int instruct(char *info); +int dunno(void); +int query(char *r); + +int readline(void) +{ + char *t; + register c; +loop: + for (t=line; c=getc(input), *t=c, c!=EOF; t++) { + nc++; + if(*t==' '&&(t==line||t[-1]==' ')) + t--; + if(*t=='\n') { + if(t[-1]=='\\') /*inexact test*/ + continue; + while(t>line&&t[-1]==' ') + *--t = '\n'; + *++t = 0; + return(1); + } + if(t-line>=NC) { + printf("Too hard for me\n"); + do { + *line = getc(input); + if(*line==0377) + return(0); + } while(*line!='\n'); + goto loop; + } + } + return(0); +} + +char *eu; +char *ev; +int cmp(char *u, char *v) +{ + int x; + eu = u; + ev = v; + x = disj(1); + if(x!=1) + return(x); + return(eat(1,0)); +} + +int disj(int s) +{ + int t, x; + char *u; + u = eu; + t = 0; + for(;;) { + x = string(s); + if(x>1) + return(x); + switch(*ev) { + case 0: + case ']': + case '}': + return(t|x&s); + case '|': + ev++; + t |= s; + s = 0; + continue; + } + if(s) eu = u; + if(string(0)>1) + return(2); + switch(*ev) { + case 0: + case ']': + return(0); + case '}': + return(1); + case '|': + ev++; + continue; + default: + return(2); + } + } +} + +int string(int s) +{ + int x; + for(;;) { + switch(*ev) { + case 0: + case '|': + case ']': + case '}': + return(1); + case '\\': + ev++; + if(*ev==0) + return(2); + if(*ev=='\n') { + ev++; + continue; + } + default: + if(eat(s,*ev)==1) + continue; + return(0); + case '[': + ev++; + x = disj(s); + if(*ev!=']' || x>1) + return(2); + ev++; + if(s==0) + continue; + if(x==0) + return(0); + continue; + case '{': + ev++; + x = disj(s); + if(*ev!='}'||x>1) + return(2); + ev++; + continue; + } + } +} + +int eat(int s, 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 fold(int c) +{ + if(c<'A'||c>'Z') + return(c); + return(c|040); +} + +int publish(char *t) +{ + ev = t; + pub1(1); +} + +int pub1(int s) +{ + for(;;ev++){ + switch(*ev) { + case '|': + s = 0; + continue; + case ']': + case '}': + case 0: + return; + case '[': + case '{': + ev++; + pub1(s); + continue; + case '\\': + if(*++ev=='\n') + continue; + default: + if(s) + putchar(*ev); + } + } +} + +int _segment(char *u, char *w[]) +{ + char *s; + int i; + char *t; + s = u; + for(i=0;i1) badinfo(); + if(x==0) + continue; + p[i] = j; + goto uloop; + } + return(0); +uloop: ; + } + return(1); +} + +int find(char *u[], int m) +{ + int n; + while(readline()){ + n = _segment(line,tmp); + if(perm(u,m,tmp+1,n-1,_select)) + return(1); + } + return(0); +} + +int readindex(void) +{ + xx[0] = nc = 0; + while(readline()) { + xx[++nl] = nc; + if(nl>=NL) { + printf("I've forgotten some of it;\n"); + printf("I remember %d items.\n", nl); + break; + } + } +} + +int talloc(void) +{ + int i; + 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); +} + +int next(void) +{ + 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,0); + flag = 1; + } + return(ptr); +} + +void done(int x, int y) +{ + printf("\nRights %d, wrongs %d, ", rights, wrongs); + if(guesses) + printf("extra guesses %d, ", guesses); + printf("score %d%%\n",100*rights/(rights+wrongs)); + exit(0); +} +int instruct(char *info) +{ + int i, n; + printf("Subjects:\n\n"); + while(readline()) { + printf("-"); + n = _segment(line,tmp); + for(i=1;i +#include + +#define NF 10 +#define NL 300 +#define NC 200 +#define SL 100 +#define NA 10 + +int tflag; +int xx[NL]; +char score[NL]; +int rights; +int wrongs; +int guesses; +FILE *input; +int nl = 0; +int na = NA; +int inc; +int ptr = 0; +int nc = 0; +char line[150]; +char response[100]; +char *tmp[NF]; +int select[NF]; +char *malloc(); + +readline() +{ + char *t; + register c; +loop: + for (t=line; c=getc(input), *t=c, c!=EOF; t++) { + nc++; + if(*t==' '&&(t==line||t[-1]==' ')) + t--; + if(*t=='\n') { + if(t[-1]=='\\') /*inexact test*/ + continue; + while(t>line&&t[-1]==' ') + *--t = '\n'; + *++t = 0; + return(1); + } + if(t-line>=NC) { + printf("Too hard for me\n"); + do { + *line = getc(input); + if(*line==0377) + return(0); + } while(*line!='\n'); + goto loop; + } + } + return(0); +} + +char *eu; +char *ev; +cmp(u,v) +char *u, *v; +{ + int x; + eu = u; + ev = v; + x = disj(1); + if(x!=1) + return(x); + return(eat(1,0)); +} + +disj(s) +{ + int t, x; + char *u; + u = eu; + t = 0; + for(;;) { + x = string(s); + if(x>1) + return(x); + switch(*ev) { + case 0: + case ']': + case '}': + return(t|x&s); + case '|': + ev++; + t |= s; + s = 0; + continue; + } + if(s) eu = u; + if(string(0)>1) + return(2); + switch(*ev) { + case 0: + case ']': + return(0); + case '}': + return(1); + case '|': + ev++; + continue; + default: + return(2); + } + } +} + +string(s) +{ + int x; + for(;;) { + switch(*ev) { + case 0: + case '|': + case ']': + case '}': + return(1); + case '\\': + ev++; + if(*ev==0) + return(2); + if(*ev=='\n') { + ev++; + continue; + } + default: + if(eat(s,*ev)==1) + continue; + return(0); + case '[': + ev++; + x = disj(s); + if(*ev!=']' || x>1) + return(2); + ev++; + if(s==0) + continue; + if(x==0) + return(0); + continue; + case '{': + ev++; + x = disj(s); + if(*ev!='}'||x>1) + return(2); + ev++; + continue; + } + } +} + +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); +} + +fold(c) +char c; +{ + if(c<'A'||c>'Z') + return(c); + return(c|040); +} + +publish(t) +char *t; +{ + ev = t; + pub1(1); +} + +pub1(s) +{ + for(;;ev++){ + switch(*ev) { + case '|': + s = 0; + continue; + case ']': + case '}': + case 0: + return; + case '[': + case '{': + ev++; + pub1(s); + continue; + case '\\': + if(*++ev=='\n') + continue; + default: + if(s) + putchar(*ev); + } + } +} + +segment(u,w) +char *u, *w[]; +{ + char *s; + int i; + char *t; + s = u; + for(i=0;i1) badinfo(); + if(x==0) + continue; + p[i] = j; + goto uloop; + } + return(0); +uloop: ; + } + return(1); +} + +find(u,m) +char *u[]; +{ + int n; + while(readline()){ + n = segment(line,tmp); + if(perm(u,m,tmp+1,n-1,select)) + return(1); + } + return(0); +} + +readindex() +{ + xx[0] = nc = 0; + while(readline()) { + xx[++nl] = nc; + if(nl>=NL) { + printf("I've forgotten some of it;\n"); + printf("I remember %d items.\n", nl); + break; + } + } +} + +talloc() +{ + int i; + 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() +{ + printf("\nRights %d, wrongs %d, ", rights, wrongs); + if(guesses) + printf("extra guesses %d, ", guesses); + printf("score %d%%\n",100*rights/(rights+wrongs)); + exit(0); +} +instruct(info) +char *info; +{ + int i, n; + printf("Subjects:\n\n"); + while(readline()) { + printf("-"); + n = segment(line,tmp); + for(i=1;i +#include + +#define NBAT 3 +#define NROOM 20 +#define NTUNN 3 +#define NPIT 3 + +struct room +{ + int tunn[NTUNN]; + int flag; +} room[NROOM]; + +int rline(void); +int rnum(int n); +int tunnel(int i); +int near(struct room *ap, int ahaz); +int icomp(int *p1, int *p2); +int rin(void); + +char *intro[] = { + "\n", + "Welcome to 'Hunt the Wumpus.'\n", + "\n", + "The Wumpus lives in a cave of %d rooms.\n", + "Each room has %d tunnels leading to other rooms.\n", + "\n", + "Hazards:\n", + "\n", + "Bottomless Pits - Some rooms have Bottomless Pits in them.\n", + " If you go there, you fall into the pit and lose!\n", + "Super Bats - Some other rooms have super bats.\n", + " If you go there, a bat will grab you and take you to\n", + " somewhere else in the cave where you could\n", + " fall into a pit or run into the . . .\n", + "\n", + "Wumpus:\n", + "\n", + "The Wumpus is not bothered by the hazards since\n", + "he has sucker feet and is too big for a bat to lift.\n", + "\n", + "Usually he is asleep.\n", + "Two things wake him up:\n", + " your entering his room\n", + " your shooting an arrow anywhere in the cave.\n", + "If the wumpus wakes, he either decides to move one room or\n", + "stay where he was. But if he ends up where you are,\n", + "he eats you up and you lose!\n", + "\n", + "You:\n", + "\n", + "Each turn you may either move or shoot a crooked arrow.\n", + "\n", + "Moving - You can move to one of the adjoining rooms;\n", + " that is, to one that has a tunnel connecting it with\n", + " the room you are in.\n", + "\n", + "Shooting - You have 5 arrows. You lose when you run out.\n", + " Each arrow can go from 1 to 5 rooms.\n", + " You aim by telling the computer\n", + " The arrow's path is a list of room numbers\n", + " telling the arrow which room to go to next.\n", + " The list is terminated with a 0.\n", + " The first room in the path must be connected to the\n", + " room you are in. Each succeeding room must be\n", + " connected to the previous room.\n", + " If there is no tunnel between two of the rooms\n", + " in the arrow's path, the arrow chooses one of the\n", + " three tunnels from the room it's in and goes its\n", + " own way.\n", + "\n", + " If the arrow hits the wumpus, you win!\n", + " If the arrow hits you, you lose!\n", + "\n", + "Warnings:\n", + "\n", + "When you are one or two rooms away from the wumpus,\n", + "the computer says:\n", + " 'I smell a Wumpus'\n", + "When you are one room away from some other hazard, it says:\n", + " Bat - 'Bats nearby'\n", + " Pit - 'I feel a draft'\n", + "\n", + 0 +}; + +#define BAT 01 +#define PIT 02 +#define WUMP 04 + +int arrow; +int loc; +int wloc; +int tchar; + +int main(int argc, char **argv) { + register i, j; + register struct room *p; + int k; + +struct room *xx; +k=near(xx, 0); // TEST + + printf("Instructions? (y-n) "); + if(rline() == 'y') + for(i=0; intro[i]; i++) + printf(intro[i], i&1? NROOM: NTUNN); + + +/* + * initialize the room connections + */ + +init: + p = &room[0]; + for(i=0; itunn[j] = -1; + p++; + } + k = 0; + for(i=1; itunn[0] >= 0 || p->tunn[1] >= 0) + continue; + p->tunn[1] = k; + room[k].tunn[0] = j; + k = j; + i++; + } + p = &room[0]; + for(i=0; itunn[j] < 0) + p->tunn[j] = tunnel(i); + if(p->tunn[j] == i) + goto init; + for(k=0; ktunn[j] == p->tunn[k]) + goto init; + } + qsort(&p->tunn[0], NTUNN, 2, icomp); + p++; + } + +/* + * put in player, wumpus, + * pits and bats + */ + +setup: + arrow = 5; + p = &room[0]; + for(i=0; iflag = 0; + p++; + } + for(i=0; iflag&PIT) == 0) { + p->flag |= PIT; + i++; + } + } + for(i=0; iflag&(PIT|BAT)) == 0) { + p->flag |= BAT; + i++; + } + } + i = rnum(NROOM); + wloc = i; + room[i].flag |= WUMP; + for(;;) { + i = rnum(NROOM); + if((room[i].flag&(PIT|BAT|WUMP)) == 0) { + loc = i; + break; + } + } + +/* + * main loop of the game + */ + +loop: + printf("You are in room %d\n", loc+1); + p = &room[loc]; + if(p->flag&PIT) { + printf("You fell into a pit\n"); + goto done; + } + if(p->flag&WUMP) { + printf("You were eaten by the wumpus\n"); + goto done; + } + if(p->flag&BAT) { + printf("Theres a bat in your room\n"); + loc = rnum(NROOM); + goto loop; + } + for(i=0; itunn[i]], WUMP)) + goto nearwump; + if (near(p, WUMP)) { + nearwump: + printf("I smell a wumpus\n"); + } + if (near(p, BAT)) + printf("Bats nearby\n"); + if (near(p, PIT)) + printf("I feel a draft\n"); + printf("There are tunnels to"); + for(i=0; itunn[i]+1); + printf("\n"); + +again: + printf("Move or shoot (m-s) "); + switch(rline()) { + case 'm': + if(tchar == '\n') + printf("which room? "); + i = rin()-1; + for(j=0; jtunn[j]) + goto groom; + printf("You hit the wall\n"); + goto again; + groom: + loc = i; + if(i == wloc) + goto mwump; + goto loop; + + case 's': + if(tchar == '\n') + printf("Give list of rooms terminated by 0\n"); + for(i=0; i<5; i++) { + j = rin()-1; + if(j == -1) + break; + ranarw: + for(k=0; ktunn[k]) + goto garow; + j = rnum(NROOM); + goto ranarw; + garow: + p = &room[j]; + if(j == loc) { + printf("You shot yourself\n"); + goto done; + } + if(p->flag&WUMP) { + printf("You slew the wumpus\n"); + goto done; + } + } + if(--arrow == 0) { + printf("That was your last shot\n"); + goto done; + } + goto mwump; + } + + goto again; + +mwump: + p = &room[wloc]; + p->flag &= ~WUMP; + i = rnum(NTUNN+1); + if(i != NTUNN) + wloc = p->tunn[i]; + room[wloc].flag |= WUMP; + goto loop; + +done: + printf("Another game? (y-n) "); + if(rline() == 'y') { + printf("Same room setup? (y-n) "); + if(rline() == 'y') + goto setup; + goto init; + } +} + +int tunnel(int i) +{ + register struct room *p; + register n, j; + int c; + + c = 20; + +loop: + n = rnum(NROOM); + if(n == i) + if(--c > 0) + goto loop; + p = &room[n]; + for(j=0; jtunn[j] == -1) { + p->tunn[j] = i; + return(n); + } + goto loop; +} + +int rline(void) +{ + register char c, r; + + while((c=getchar()) == ' '); + r = c; + while(c != '\n' && c != ' ') { + if(c == '\0') + exit(0); + c = getchar(); + } + tchar = c; + return(r); +} + +int rnum(int n) { + static first[2]; + + if(first[1] == 0) { + time(first); + srand((first[1]*first[0])^first[1]); + } + return((rand()/32768.0) * n); +} + +int rin(void) +{ + register n, c; + + n = 0; + c = getchar(); + while(c != '\n' && c != ' ') { + if(c<'0' || c>'9') { + while(c != '\n') { + if(c == 0) + exit(0); + c = getchar(); + } + return(0); + } + n = n*10 + c-'0'; + c = getchar(); + } + return(n); +} + +int near(struct room *ap, int ahaz) +{ + register struct room *p; + register int haz, i; + + p = ap; + haz = ahaz; + for(i=0; itunn[i]].flag & haz) + return (1); + return(0); +} + +int icomp(int *p1, int *p2) +{ + + return(*p1 - *p2); +} diff --git a/v7/games/wump.c.orig#b00008 b/v7/games/wump.c.orig#b00008 new file mode 100644 index 0000000..bdbc837 --- /dev/null +++ b/v7/games/wump.c.orig#b00008 @@ -0,0 +1,375 @@ +# + +/* + * wumpus + * stolen from PCC Vol 2 No 1 + */ + +#define NBAT 3 +#define NROOM 20 +#define NTUNN 3 +#define NPIT 3 + +struct room +{ + int tunn[NTUNN]; + int flag; +} room[NROOM]; + +char *intro[] +{ + "\n", + "Welcome to 'Hunt the Wumpus.'\n", + "\n", + "The Wumpus lives in a cave of %d rooms.\n", + "Each room has %d tunnels leading to other rooms.\n", + "\n", + "Hazards:\n", + "\n", + "Bottomless Pits - Some rooms have Bottomless Pits in them.\n", + " If you go there, you fall into the pit and lose!\n", + "Super Bats - Some other rooms have super bats.\n", + " If you go there, a bat will grab you and take you to\n", + " somewhere else in the cave where you could\n", + " fall into a pit or run into the . . .\n", + "\n", + "Wumpus:\n", + "\n", + "The Wumpus is not bothered by the hazards since\n", + "he has sucker feet and is too big for a bat to lift.\n", + "\n", + "Usually he is asleep.\n", + "Two things wake him up:\n", + " your entering his room\n", + " your shooting an arrow anywhere in the cave.\n", + "If the wumpus wakes, he either decides to move one room or\n", + "stay where he was. But if he ends up where you are,\n", + "he eats you up and you lose!\n", + "\n", + "You:\n", + "\n", + "Each turn you may either move or shoot a crooked arrow.\n", + "\n", + "Moving - You can move to one of the adjoining rooms;\n", + " that is, to one that has a tunnel connecting it with\n", + " the room you are in.\n", + "\n", + "Shooting - You have 5 arrows. You lose when you run out.\n", + " Each arrow can go from 1 to 5 rooms.\n", + " You aim by telling the computer\n", + " The arrow's path is a list of room numbers\n", + " telling the arrow which room to go to next.\n", + " The list is terminated with a 0.\n", + " The first room in the path must be connected to the\n", + " room you are in. Each succeeding room must be\n", + " connected to the previous room.\n", + " If there is no tunnel between two of the rooms\n", + " in the arrow's path, the arrow chooses one of the\n", + " three tunnels from the room it's in and goes its\n", + " own way.\n", + "\n", + " If the arrow hits the wumpus, you win!\n", + " If the arrow hits you, you lose!\n", + "\n", + "Warnings:\n", + "\n", + "When you are one or two rooms away from the wumpus,\n", + "the computer says:\n", + " 'I smell a Wumpus'\n", + "When you are one room away from some other hazard, it says:\n", + " Bat - 'Bats nearby'\n", + " Pit - 'I feel a draft'\n", + "\n", + 0, +}; + +#define BAT 01 +#define PIT 02 +#define WUMP 04 + +int arrow; +int loc; +int wloc; +int tchar; + +main() +{ + register i, j; + register struct room *p; + int k, icomp(); + + printf("Instructions? (y-n) "); + if(rline() == 'y') + for(i=0; intro[i]; i++) + printf(intro[i], i&1? NROOM: NTUNN); + + +/* + * initialize the room connections + */ + +init: + p = &room[0]; + for(i=0; itunn[j] = -1; + p++; + } + k = 0; + for(i=1; itunn[0] >= 0 || p->tunn[1] >= 0) + continue; + p->tunn[1] = k; + room[k].tunn[0] = j; + k = j; + i++; + } + p = &room[0]; + for(i=0; itunn[j] < 0) + p->tunn[j] = tunnel(i); + if(p->tunn[j] == i) + goto init; + for(k=0; ktunn[j] == p->tunn[k]) + goto init; + } + qsort(&p->tunn[0], NTUNN, 2, icomp); + p++; + } + +/* + * put in player, wumpus, + * pits and bats + */ + +setup: + arrow = 5; + p = &room[0]; + for(i=0; iflag = 0; + p++; + } + for(i=0; iflag&PIT) == 0) { + p->flag =| PIT; + i++; + } + } + for(i=0; iflag&(PIT|BAT)) == 0) { + p->flag =| BAT; + i++; + } + } + i = rnum(NROOM); + wloc = i; + room[i].flag =| WUMP; + for(;;) { + i = rnum(NROOM); + if((room[i].flag&(PIT|BAT|WUMP)) == 0) { + loc = i; + break; + } + } + +/* + * main loop of the game + */ + +loop: + printf("You are in room %d\n", loc+1); + p = &room[loc]; + if(p->flag&PIT) { + printf("You fell into a pit\n"); + goto done; + } + if(p->flag&WUMP) { + printf("You were eaten by the wumpus\n"); + goto done; + } + if(p->flag&BAT) { + printf("Theres a bat in your room\n"); + loc = rnum(NROOM); + goto loop; + } + for(i=0; itunn[i]], WUMP)) + goto nearwump; + if (near(p, WUMP)) { + nearwump: + printf("I smell a wumpus\n"); + } + if (near(p, BAT)) + printf("Bats nearby\n"); + if (near(p, PIT)) + printf("I feel a draft\n"); + printf("There are tunnels to"); + for(i=0; itunn[i]+1); + printf("\n"); + +again: + printf("Move or shoot (m-s) "); + switch(rline()) { + case 'm': + if(tchar == '\n') + printf("which room? "); + i = rin()-1; + for(j=0; jtunn[j]) + goto groom; + printf("You hit the wall\n"); + goto again; + groom: + loc = i; + if(i == wloc) + goto mwump; + goto loop; + + case 's': + if(tchar == '\n') + printf("Give list of rooms terminated by 0\n"); + for(i=0; i<5; i++) { + j = rin()-1; + if(j == -1) + break; + ranarw: + for(k=0; ktunn[k]) + goto garow; + j = rnum(NROOM); + goto ranarw; + garow: + p = &room[j]; + if(j == loc) { + printf("You shot yourself\n"); + goto done; + } + if(p->flag&WUMP) { + printf("You slew the wumpus\n"); + goto done; + } + } + if(--arrow == 0) { + printf("That was your last shot\n"); + goto done; + } + goto mwump; + } + + goto again; + +mwump: + p = &room[wloc]; + p->flag =& ~WUMP; + i = rnum(NTUNN+1); + if(i != NTUNN) + wloc = p->tunn[i]; + room[wloc].flag =| WUMP; + goto loop; + +done: + printf("Another game? (y-n) "); + if(rline() == 'y') { + printf("Same room setup? (y-n) "); + if(rline() == 'y') + goto setup; + goto init; + } +} + +tunnel(i) +{ + register struct room *p; + register n, j; + int c; + + c = 20; + +loop: + n = rnum(NROOM); + if(n == i) + if(--c > 0) + goto loop; + p = &room[n]; + for(j=0; jtunn[j] == -1) { + p->tunn[j] = i; + return(n); + } + goto loop; +} + +rline() +{ + register char c, r; + + while((c=getchar()) == ' '); + r = c; + while(c != '\n' && c != ' ') { + if(c == '\0') + exit(); + c = getchar(); + } + tchar = c; + return(r); +} + +rnum(n) +{ + static first[2]; + + if(first[1] == 0) { + time(first); + srand((first[1]*first[0])^first[1]); + } + return((rand()/32768.0) * n); +} + +rin() +{ + register n, c; + + n = 0; + c = getchar(); + while(c != '\n' && c != ' ') { + if(c<'0' || c>'9') { + while(c != '\n') { + if(c == 0) + exit(); + c = getchar(); + } + return(0); + } + n = n*10 + c-'0'; + c = getchar(); + } + return(n); +} + +near(ap, ahaz) +struct room *ap; +{ + register struct room *p; + register haz, i; + + p = ap; + haz = ahaz; + for(i=0; itunn[i]].flag & haz) + return (1); + return(0); +} + +icomp(p1, p2) +int *p1, *p2; +{ + + return(*p1 - *p2); +}