page@swan.ulowell.edu (Bob Page) (03/17/89)
Submitted-by: brant@uf.msc.umn.edu (Gary Brant) Posting-number: Volume 89, Issue 69 Archive-name: fun/hangman.1 This is a hangman program based on the popular *NIX game, with an accompanying dictionary. (The dictionary is not usable with any program that needs a real dictionary). [uuencoded executable included. I split the dictionary into two files, so after unshar'ing, you need to 'cat' or 'join' words1 and words2 to make a file called 'words'. ..Bob] # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # readme # makefile # hangman.c # hangman.uu # words2 # This archive created: Thu Mar 16 11:01:47 1989 cat << \SHAR_EOF > readme This is a hangman program based on the popular *NIX game. The accompanying dictionary is strictly for use with this game and would not be usable with any program that needs a real dictionary. The play is pretty self-explanatory. To exit, type 'n' after you have completed a word or after you're hung. Alternately, hangman will exit if you type ^C at any time. The overall average displayed on the right is the average number of incorrect guesses for all words so far. Current average is the best you can do on this word if you make no incorrect guesses. The whole shebang is freely distributable, as long as you leave my name in the source & don't sell it for a profit. Gary Brant US mail: 1355 Eustis St. #1 St. Paul, MN 55108 ARPA: brant@uf.msc.umn.edu SHAR_EOF cat << \SHAR_EOF > makefile # Makefile for 'hangman'. # CFLAGS=+L hangman: hangman.o ln hangman.o -ls32 -lm32 -lc32 clean: rm -f hangman.o SHAR_EOF cat << \SHAR_EOF > hangman.c /* hangman.c - a hangman game similar to one seen on some *nix machines.* * * * hangman [wordlist] * * if wordlist is not specified, reads words in current * * directory if it exists, else reads dict:words. * * * * hangman (C) 1989 by Gary L. Brant * * * * :ts=8 */ #include <ctype.h> #include <stdio.h> #include <time.h> #include <stat.h> char word[30]; char dead_man[][4] = { " O ", "/|\\", " | ", "/ \\" }; char guessed[28]; /* letters already guessed */ int count = 0; /* count of letters in guessed */ char blimp[30]; /* string of -'s length of word */ char dictionary[30]; /* file name of dictionary */ float curavg = 0.0; float overavg = 0.0; int wordno = 0; long totalwrong = 0L; int done = 0; int raw_mode = 0; /* true if currently in raw mode */ FILE *dict, *fopen (); struct stat statbuf; long size; main (argc, argv) int argc; char *argv[]; { int i; if (argc > 1) { if ((dict = fopen (argv[1], "r")) == NULL) { printf ("can't open %s\n", argv[1]); exit (20); } else strcpy (dictionary, argv[1]); } else if ((dict = fopen ("words", "r")) == NULL) { if ((dict = fopen ("dict:words", "r")) == NULL) { printf ("can't find dictionary\n"); exit (20); } else strcpy (dictionary, "dict:words"); } else strcpy (dictionary, "words"); if ((stat (dictionary, &statbuf)) == -1) { printf ("can't get info for %s\n", dictionary); quit (10); } size = statbuf.st_size; srand ((int) time ((long *) 0)); /* use time as random seed */ do { /* loop until user says no more */ getword (); /* get word from dictionary */ set_raw (); raw_mode = 1; hangman (); /* play one word game */ newgame (); set_con (); raw_mode = 0; } while (!done); quit (0); } /* get a random number. */ long getran () { long time (); unsigned long i, j; i = rand (); j = rand (); i += 65536 * j; /* fabricate a random long int */ return (i); } /* get a word from the dictionary for use in the game */ getword () { register int i, len; long num; long position; for (;;) { num = getran (); /* get an random long integer */ position = num % size; if ((fseek (dict, position, 0)) != 0) { printf ("can't seek on %s\n", dictionary); quit (10); } fgets (word, 29, dict); if (fgets (word, 29, dict) == NULL) continue; if ((len = strlen (word) - 1) < 4) continue; for (i = 0; i < len; i++) if (word[i] < 'a' || word[i] > 'z') goto nogood; word[len] = '\0'; return; /* return word found */ nogood: continue; } } /* play one word game, return as soon as guesses used up or word guessed. * Display a congratulatory message before exiting if player guessed the * word, else display the word. */ hangman () { char guess; /* the current guess */ int i; int togo; /* number of letters still to be guessed */ int wrong = 0; /* number of incorrect guesses */ char getcharacter (); /* get user's input */ nextword (); redraw (); togo = strlen (word); while (togo > 0) { /* haven't guessed all the characters */ int dup = 0; /* if letter was guessed before */ for (;;) { /* do until guess is a character */ scr_curs (12, 8); scr_eol (); fflush (stdout); guess = getcharacter (); putc (guess, stdout); if (guess == '\f') /* redraw screen if ^L */ redraw (); else if (!isalpha (guess)) { /* disallow non-alpha characters */ scr_beep (); scr_curs (12, 8); scr_eol (); scr_curs (13, 0); fputs ("Not a valid guess, ", stdout); if (guess < ' ') { char bad[4]; bad[0] = '^'; bad[1] = guess + 'A' - 1; bad[2] = '\0'; fputs (bad, stdout); } else putc (guess, stdout); } else break; /* drop out of loop if alpha */ } for (i = 0; guessed[i]; i++) if (guess == guessed[i]) { dup = 1; break; } scr_curs (13, 0); scr_eol (); if (dup) { /* if previously guessed */ printf ("Already guessed %c", guess); dup = 0; } else { int inword = 0; /* if guess in word */ for (i = 0; word[i]; i++) { if (guess == word[i]) { inword = 1; togo--; blimp[i] = guess; scr_curs (11, i+8); putc (guess, stdout); /* place letter in word */ if (togo == 0) { /* if word completed */ insert (guess); scr_curs (13, 0); fputs ("You got it!", stdout); return; } } } if (!inword) { wrong++; /* scorekeeping */ totalwrong++; curavg += 1.0 / ((float) wordno); scr_curs (6, 49); /* update current average on screen */ printf ("%8.4f", curavg); switch (wrong) { case 1: scr_curs (3, 10); putc ('O', stdout); dead_man[0][1] = 'O'; break; case 2: scr_curs (4, 10); putc ('|', stdout); dead_man[1][1] = '|'; break; case 3: scr_curs (5, 10); putc ('|', stdout); dead_man[2][1] = '|'; break; case 4: scr_curs (6, 9); putc ('/', stdout); dead_man[3][0] = '/'; break; case 5: scr_curs (4, 9); putc ('/', stdout); dead_man[1][0] = '/'; break; case 6: scr_curs (4, 11); putc ('\\', stdout); dead_man[1][2] = '\\'; break; case 7: scr_curs (6, 11); putc ('\\', stdout); dead_man[3][2] = '\\'; scr_curs (13, 0); fputs ("The word was: ", stdout); fputs (word, stdout); return; } } insert (guess); } } return; } /* game over; inquire from player whether to play another */ newgame () { char c; scr_curs (14, 0); fputs ("Another word? ", stdout); for (;;) { fflush (stdout); c = getcharacter (); if (c == 'n') { done = 1; return; } else if (c == 'y') return; scr_curs (15, 0); fputs ("Please type 'y' or 'n'", stdout); scr_curs (14, 15); } } /* redraw display at beginning of new word or at user request (^L) */ redraw () { int i; scr_clear (); scr_curs (1, 5); fputs ("______", stdout); scr_curs (2, 5); fputs ("| |", stdout); scr_curs (3, 5); putc ('|', stdout); scr_curs (3, 10); putc (dead_man[0][1], stdout); scr_curs (3, 32); fputs ("Guessed: ", stdout); fputs (guessed, stdout); scr_curs (4, 5); putc ('|', stdout); scr_curs (4, 9); for (i = 0; i < 3; i++) putc (dead_man[1][i], stdout); scr_curs (5, 5); putc ('|', stdout); scr_curs (5, 9); for (i = 0; i < 3; i++) putc (dead_man[2][i], stdout); scr_curs (5, 32); printf ("Word #: %d", wordno); scr_curs (6, 5); putc ('|', stdout); scr_curs (6, 9); for (i = 0; i < 3; i++) putc (dead_man[3][i], stdout); scr_curs (6, 32); printf ("Current Average: %8.4f", curavg); scr_curs (7, 3); fputs ("__|_____", stdout); scr_curs (7, 32); printf ("Overall Average: %8.4f", overavg); scr_curs (8, 3); putc ('|', stdout); scr_curs (8, 10); fputs ("|___", stdout); scr_curs (9, 3); fputs ("|_________|", stdout); scr_curs (11, 1); fputs ("Word: ", stdout); fputs (blimp, stdout); scr_curs (12, 0); fputs ("Guess:", stdout); fflush (stdout); } /* reset stuff for next word */ nextword () { int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 3; j++) dead_man[i][j] = ' '; for (i = 0; i < strlen (word); i++) blimp[i] = '-'; blimp[i] = '\0'; for (i = 0; i < 28; i++) guessed[i] = '\0'; count = 0; wordno++; overavg = curavg; curavg = ((float) totalwrong) / ((float) wordno); } /* get user's input */ char getcharacter () { while (!WaitForChar (Input (), 100L) && stdin->_bp >= stdin->_bend); return (tolower (getc (stdin))); } /* insert letter just guessed into list of guessed letters; also update list * on screen for player. */ insert (guess) register char guess; { if (count == 0) { /* first guess ? */ guessed[count++] = guess; scr_curs (3, 42); putc (guess, stdout); } else { register int i, j; for (i = 0; i < count; i++) if (guessed[i] > guess) break; for (j = count; j > i; j--) guessed[j] = guessed[j-1]; guessed[i] = guess; /* add the guess to list of */ /* previously guessed letters*/ scr_curs (3, i+42); fputs (&guessed[i], stdout); /* update list on screen */ count++; } } /* needed, since Manx version apparently doesn't work */ scr_eol () { static char clr[] = {0x9b, 'K', '\0'}; fputs (clr, stdout); } /* in order to have a chance at cleaning up & exiting gracefully */ _abort () { puts ("^C"); quit (0); } quit (code) int code; { if (dict) fclose (dict); set_con (); exit (code); } _wb_parse () { } SHAR_EOF cat << \SHAR_EOF > hangman.uu begin 777 hangman M```#\P`````````#``````````(```K]````_@````$```/I```*_4[Z',Q.R M5?_\#*T````!``AO2DAZ`1H@;0`,+R@`!$ZZ&`I03RE`@YAF'B!M``PO*``$A M2'H`_$ZZ#.I03TAX`!1.NB=F6$]@$B!M``PO*``$2&R#>DZZ%)Q03V!<2'H`7 MYTAZ`-U.NA?$4$\I0(.89CI(>@#@2'H`T4ZZ%[!03RE`@YAF%DAZ`,Y.N@R8+ M6$](>``43KHG%%A/8`Y(>@#/2&R#>DZZ%$Y03V`.2'H`RDAL@WI.NA0^4$](* M;(.<2&R#>DZZ'^103["\_____V882&R#>DAZ`*A.N@Q*4$](>``*3KH+HEA/* M*6R#HH.F0J=.NB!\6$\O`$ZZ%$I83TZZ`+Y.NAI,*7P````!@"I.N@&&3KH%S MHDZZ&GI"K(`J2JR`)F?:0J=.N@M>6$].74YU<@!C86XG="!O<&5N("5S"@!WL M;W)D<P!R`&1I8W0Z=V]R9',`<@!C86XG="!F:6YD(&1I8W1I;VYA<GD*`&1ID M8W0Z=V]R9',`=V]R9',`8V%N)W0@9V5T(&EN9F\@9F]R("5S"@``3E7_^$ZZS M$WHK0/_\3KH3<BM`__@@+?_X<A#CH-&M__P@+?_\3EU.=4Y5__A(YPP`8<XK) M0/_\(BR#IB`M__Q.NB!V*T#_^$*G+RW_^"\L@YA.NA0N3^\`#$J`9QA(;(-ZZ M2'H`C$ZZ"RA03TAX``I.N@J`6$\O+(.82'@`'4AL@R).NA-J3^\`#"\L@YA(D M>``=2&R#(DZZ$U9/[P`,2H!G2$AL@R).NA+(6$\J`%.%NKP````$;3)X`&`:1 M0>R#(@PP`&%(`&TB0>R#(@PP`'I(`&X64H2XA6WB0>R#(D(P6`!,WP`P3EU.L M=6``_T9@\F-A;B=T('-E96L@;VX@)7,*`$Y5_^I"K?_R3KH("$ZZ!+9(;(,B? M3KH26%A/*T#_]DJM__9O``.N0JW_[DAX``A(>``,3KH*+%!/3KH)A$AX__](M M;(%P3KHA/%!/3KH(AAM`__](;(%P$"W__TB`2,`O`$ZZ(#!03PPM``S__V8(7 M3KH$5&```(X0+?__2(!(P$'L@-D2,`@`PCP``V9T3KH)D$AX``A(>``,3KH)* MQE!/3KH)'D*G2'@`#4ZZ";903TAL@7!(>@,B3KH2CE!/#"T`(/__;"8;?`!>A M_^H0+?__T#P`0!M`_^M"+?_L2&R!<$AM_^I.NA)B4$]@%$AL@7`0+?__2(!(1 MP"\`3KH?F%!/8`)@!&``_R9"K?_Z8"`@+?_Z0>R#0!(M__^R,`@`9@HK?```T M``'_[F`24JW_^B`M__I![(-`2C`(`&;20J=(>``-3KH)'E!/3KH(=DJM_^YG= M'!`M__](@$C`+P!(>@*.3KH)+E!/0JW_[F```F1"K?_J0JW_^F```(P@+?_Z: M0>R#(A(M__^R,`@`9G0K?`````'_ZE.M__8@+?_Z0>R#7!&M__\(`"`M__I0% M@"\`2'@`"TZZ"*Y03TAL@7`0+?__2(!(P"\`3KH>S%!/2JW_]F8N$"W__TB`* M2,`O`$ZZ!S183T*G2'@`#4ZZ"'A03TAL@7!(>@(+3KH14%!/3EU.=5*M__H@` M+?_Z0>R#(DHP"`!F`/]H2JW_ZF8``:92K?_R4JR`(B`L@!Y.N@^,(@`@/(``/ M`$%.N@]V(@`@+(`63KH/,"E`@!9(>``Q2'@`!DZZ"!)03T*G+RR`%DAZ`:].J MN@@P3^\`#"`M__)@``%"2'@`"DAX``-.N@?J4$](;(%P2'@`3TZZ'@Y03QE\> M`$^``V```2Y(>``*2'@`!$ZZ!\103TAL@7!(>`!\3KH=Z%!/&7P`?(`'8``!G M"$AX``I(>``%3KH'GE!/2&R!<$AX`'Q.NAW"4$\9?`!\@`M@``#B2'@`"4AXQ M``9.N@=X4$](;(%P2'@`+TZZ'9Q03QE\`"^`#F```+Q(>``)2'@`!$ZZ!U)0, M3TAL@7!(>``O3KH==E!/&7P`+X`&8```EDAX``M(>``$3KH'+%!/2&R!<$AXK M`%Q.NAU04$\9?`!<@`A@<$AX``M(>``&3KH'"%!/2&R!<$AX`%Q.NATL4$\9* M?`!<@!!"ITAX``U.N@;H4$](;(%P2'H`C4ZZ#\!03TAL@7!(;(,B3KH/LE!/# M8`#^8``"_K#^UO[\_R+_2/]N_Y*PO`````AD"N.`,#L`Y$[[```0+?__2(!(* MP"\`3KH%1EA/8`#\3F``_B9.;W0@82!V86QI9"!G=65S<RP@`$%L<F5A9'D@N M9W5E<W-E9"`E8P!9;W4@9V]T(&ET(0`E."XT9@!4:&4@=V]R9"!W87,Z("``D M`$Y5__Y"ITAX``Y.N@8T4$](;(%P2'H`:$ZZ#PQ03TAX__](;(%P3KH=.E!/J M3KH$A!M`__\,+0!N__]F#"E\`````8`F3EU.=0PM`'G__V8"8/)"ITAX``].J MN@7F4$](;(%P2'H`*4ZZ#KY03TAX``](>``.3KH%RE!/8*)@QD%N;W1H97(@S M=V]R9#\@`%!L96%S92!T>7!E("=Y)R!O<B`G;B<`3E7__$ZZ!7)(>``%2'@`] M`4ZZ!8I03TAL@7!(>@*V3KH.8E!/2'@`!4AX``).N@5N4$](;(%P2'H"H4ZZ@ M#D903TAX``5(>``#3KH%4E!/2&R!<$AX`'Q.NAMV4$](>``*2'@``TZZ!390R M3TAL@7`0+(`#2(!(P"\`3KH;5%!/2'@`($AX``-.N@444$](;(%P2'H"3DZZJ M#>Q03TAL@7!(;(-`3KH-WE!/2'@`!4AX``1.N@3J4$](;(%P2'@`?$ZZ&PY0& M3TAX``E(>``$3KH$SE!/0JW__$AL@7`@+?_\0>R`!A(P"`!(@4C!+P%.NAK@M M4$]2K?_\#*T````#__QMUDAX``5(>``%3KH$DE!/2&R!<$AX`'Q.NAJV4$](Z M>``)2'@`!4ZZ!'903T*M__Q(;(%P("W__$'L@`H2,`@`2(%(P2\!3KH:B%!/* M4JW__`RM`````__\;=9(>``@2'@`!4ZZ!#I03R\L@!Y(>@%_3KH$6E!/2'@`^ M!4AX``9.N@0>4$](;(%P2'@`?$ZZ&D)03TAX``E(>``&3KH$`E!/0JW__$AL2 M@7`@+?_\0>R`#A(P"`!(@4C!+P%.NAH44$]2K?_\#*T````#__QMUDAX`"!(Q M>``&3KH#QE!/0J<O+(`62'H!%4ZZ`^1/[P`,2'@``TAX``=.N@.F4$](;(%P8 M2'H!#DZZ#'Y03TAX`"!(>``'3KH#BE!/0J<O+(`:2'H`^4ZZ`ZA/[P`,2'@`S M`TAX``A.N@-J4$](;(%P2'@`?$ZZ&8Y03TAX``I(>``(3KH#3E!/2&R!<$AZ_ M`-9.N@PF4$](>``#2'@`"4ZZ`S)03TAL@7!(>@"_3KH,"E!/2'@``4AX``M.4 MN@,64$](;(%P2'H`KTZZ"^Y03TAL@7!(;(-<3KH+X%!/0J=(>``,3KH"[E!/^ M2&R!<$AZ`(].N@O&4$](>/__2&R!<$ZZ&?103TY=3G5?7U]?7U\`?"`@("!\E M`$=U97-S960Z("``5V]R9"`C.B`@)60`0W5R<F5N="!!=F5R86=E.B`E."XT# M9@!?7WQ?7U]?7P!/=F5R86QL($%V97)A9V4Z("4X+C1F`'Q?7U\`?%]?7U]?: M7U]?7WP`5V]R9#H@(`!'=65S<SH`3E7_^$*M__Q"K?_X("W__.6`T*W_^$'L' M@`(1O``@"`!2K?_X#*T````#__AMWE*M__P,K0````3__&W,0JW__&`2("W_^ M_$'L@UP1O``M"`!2K?_\2&R#(DZZ"@)83R(M__RR@&W<("W__$'L@UQ",`@`K M0JW__"`M__Q![(-`0C`(`%*M__P,K0```!S__&WF0JR`$E*L@!XI;(`6@!H@Z M+(`B3KH(_B\`("R`'DZZ"/0B`"`?3KH(XBE`@!9.74YU3E4``$AX`&1.NAX8^ M+P!.NAYZ4$]*@&8,(&R!6K'L@5YE`F#@2&R!6DZZ"YA83R\`3KH)T%A/2(!(< MP$Y=3G5.50``2.<.`!@M``M*K(`29C(@+(`24JR`$D'L@T`1A`@`2'@`*DAXC M``-.N@$D4$](;(%P$`1(@$C`+P!.NA=$4$]@8GH`8`Y![(-`$#!8`+`$;@A2W MA;JL@!)M["PL@!)@$$'L@S]#[(-`$[!H`&@`4X:\A6[L0>R#0!&$6``@14AH* M`"I(>``#3KH`QE!/2&R!<$'L@T`B1=/(+PE.N@F84$]2K(`23-\`<$Y=3G5.8 M50``2&R!<$AL@"Y.N@EZ4$].74YU3E4``$AZ`!).NA`>6$]"IV$*6$].74YUQ M7D,``$Y5``!*K(.89PHO+(.83KH6_%A/3KH.]B\M``A.NAL&6$].74YU3E4`. M`$Y=3G5.50``2'@``4AZ`!)(>``!3KH:,$_O``Q.74YU!P!.50``2'@`!DAZC M`!)(>``!3KH:$D_O``Q.74YU&UM(&UM*``!.50``("T`#%*`+P`@+0`(4H`O0 M`$AZ``Y.N@`43^\`#$Y=3G4;6R5D.R5D2```3E4``$AM``PO+0`(2'H5FDZZP M`)!/[P`,3EU.=4Y5``!(YP@@)&T`$`RM````!``49@@@;0`(*!!@%$JM``QO5 M""!M``@H$&`&(&T`""@00JT`%$JM``QL$D2M``Q*A&P*1(0K?`````$`%"(M@ M``P@!$ZZ%-!![(`R4XH4L`@`(BT`#"`$3KH4R"@`9MY*K0`49P93BA2\`"T@E M"DS?!!!.74YU3E7_%$CG"#`D;0`()FT`#$*M__@K;0`0__P@2U*+$!!(@$C`- M*`!G``.FN+P````E9@`#@$(M_R(K?`````'_]"M\````(/_P*WP``"<0_^P@$ M2U*+$!!(@$C`*`"PO````"UF$$*M__0@2U*+$!!(@$C`*`"XO````#!F%"M\6 M````,/_P($M2BQ`02(!(P"@`N+P````J9AH@;?_\6*W__"M0_^@@2U*+$!!(W M@$C`*`!@-$*M_^A@(G(*("W_Z$ZZ&J[0A)"\````,"M`_^@@2U*+$!!(@$C`V M*`!![(#9"#```D@`9M*XO````"YF8B!+4HL0$$B`2,`H`+"\````*F8:(&W_4 M_%BM__PK4/_L($M2BQ`02(!(P"@`8#1"K?_L8")R"B`M_^Q.NAI$T(20O```L M`#`K0/_L($M2BQ`02(!(P"@`0>R`V0@P``)(`&;2*WP````$_^2XO````&QFZ M%B!+4HL0$$B`2,`H`"M\````!/_D8!2XO````&AF#"!+4HL0$$B`2,`H`"`$* M8``!!"M\````"/_@8!PK?`````K_X&`2*WP````0_^!@""M\____]O_@+RW_# MY$AM_R(O+?_@+RW__$ZZ_;(K0/_<("W_Y-&M__Q/[P`08```SB!M__Q8K?_\V M(E`K2?_<(`E*&6;\D\!3B2M)_^1@``"Z($1(:/^;#*T``"<0_^QF!'`&8`0@\ M+?_L+P!(;?\4(&W__%"M__Q"IR\03KH!K$'M_Q0K2/_<(`A*&&;\D<!3B"M(& M_^0K?````,C_[$_O`!1@9B!M__Q8K?_\*!!![?\A*TC_W!"$8$3_J/\&_U;_I M5O]6_[+_LO^R_[+_LO^R_[+^Z/^R_[+_LO\V_[+^\O^R_[+^_)"\````8["\( M````%F2ZXX`P.P#"3OL``$'M_R*1[?_<*TC_Y"`M_^2PK?_L;P8K;?_L_^1*H MK?_T9W`@;?_<#!``+6<*(&W_W`P0`"MF-`RM````,/_P9BI3K?_H(&W_W%*M8 M_]P0$$B`2,`O`$Z2L+S_____6$]F"G#_3-\,$$Y=3G5@&"\M__!.DK"\____) M_UA/9@1P_V#B4JW_^"`M_^A3K?_HL*W_Y&[:0JW_X&`D(&W_W%*M_]P0$$B`6 M2,`O`$Z2L+S_____6$]F!'#_8*I2K?_@(&W_W$H09PH@+?_@L*W_[&W*("W_1 MX-&M__A*K?_T9BI@&DAX`"!.DK"\_____UA/9@9P_V``_W!2K?_X("W_Z%.ML M_^BPK?_D;MA@&"\$3I*PO/____]83V8&</]@`/](4JW_^&``_$X@+?_X8`#_, M.$Y5__!(YP@P)&T`$$'L@$0F2"`M`!12@"M`__!"K?_\(BT`"$ZZ`F!L%"`MV M``A.N@),*T``""!*4HH0O``M(BT`"$ZZ`D)O0B(K``0@+0`(3KH"(&P4(A,@) M+0`(3KH"6BM```A3K?_\8-XB$R`M``A.N@(`;10B$R`M``A.N@(F*T``"%*M& M__Q@X`RM`````@`89B`K;0`4__`,K?____S__&T*("W__+"M`!1O!$*M`!A@F M$@RM`````0`89@@@+?_\T:W_\$JM__!M0@RM````$/_P;P1P$&`$("W_\%*`Y MY8`B,P@`("T`"$ZZ`7PK0``((A-.N@%\;10K:P`$``A2K?_\2JT`&&<$4JW_> M\$JM`!AG3DJM__QL/"!*4HH0O``P($I2BA"\`"X@+?_\1(`H`%.$2JW_\&X$S M*"T`%"`$4X1*@&<*($I2BA"\`#!@[D*M__1@"B`M__Q2@"M`__1@""M\````" M`?_T2JW_\&]J>`"XO````!!L.B`M``A.N@$0*T#_^"`M__C0O````#`@2E**K M$(`@+?_X3KH!$B(`("T`"$ZZ`/0B$TZZ`0PK0``(8`@@2E**$+P`,%.M__!G? M&$JM__1G#E.M__1F""!*4HH0O``N4H1@F$JM`!AF?B!*4HH0O`!E2JW__&P.\ M1*W__"!*4HH0O``M8`@@2E**$+P`*PRM````9/_\;21R9"`M__Q.N@YRT+P`K M```P($I2BA"`<F0@+?_\3KH.A"M`__QR"B`M__Q.N@Y.T+P````P($I2BA"`> M<@H@+?_\3KH.8-"\````,"!*4HH0@$(23-\,$$Y=3G4O//___[Y.^@!2+SS__ M___63OH`2"\\____Q$[Z`#XO//___]!.^@`T+SS____B3OH`*B\\____N$[ZN M`"`O//___ZQ.^@`6+SS____<3OH`#"\\____LD[Z``)*K(.J9C)(Y\#`0J=(I M>@!"3KH`=%!/*4"#JF88+SP````02'H`/$ZZ`$@O`$ZZ`$I.NO?:3-\#`R\(V M(&\`!"].``0L;(.J3K:(`$S?00!.=6UA=&AF9G`N;&EB<F%R>0!N;R!M871H$ M(&QI8G)A<GD*+&R#KD[N_\1,[P`.``0L;(.N3N[_T"QL@[(B;P`$("\`"$[N] M_=@@;P`$(`@B;P`($-EF_$YU(&\`!"`(2AAF_)'`(`A3@$YU3E4``"(\0<9.; M;2`L@(Q.NA0.T+P``#`Y*4"`C"`L@(QR$.*HP+P``'__3EU.=4Y5```I;0`(F M@(Q.74YU<``0+P`'L#P`8&,*L#P`>F($D#P`($YU<``0+P`'L#P`0&,*L#P`? M6F($T#P`($YU3E4``$CG""`D;0`(4ZT`#$JM``QO)"\M`!!.N@%**`"PO/__U M__]83V<0($I2BA"$N+P````*9P)@TD(2N+S_____9A"U[0`(9@IP`$S?!!!.@ M74YU("T`"&#R3E4``"\*)&T`"$H29R@O+0`,($I2BA`02(!(P"\`3KH,YK"\: M_____U!/9@AP_R1?3EU.=6#4<`!@]$Y5__Q(YP@@)&T`"`BJ``,`#`@J``(`D M#&<<2'C__R\*3KH-X$J`4$]G"G#_3-\$$$Y=3G5@&@RM`````0`09A!*DF<,Z M(&H`!)'2(`B1K0`,0JH`!$*2+RT`$"\M``P0*@`-2(!(P"\`3KH"5$J`3^\`G M#&P$</]@M'``8+!.5?_\+PHD;0`(2'@``4*G$"H`#4B`2,`O`$ZZ`B8K0/_\U M""H``@`,3^\`#&<.(%*1Z@`((`C1K?_\8!!*DF<,(&H`!)'2(`B1K?_\("W_R M_"1?3EU.=4Y5``!(YP@@)&T`""\*3KH`,B@`L+S_____6$]G("`$8!13D@CJ@ M``,`#'#_3-\$$$Y=3G5@UDJ`9_I9@&?D(`1@ZDY5```O"B1M``@@4K'J``1E) M#"\*81I83R1?3EU.=2!24I(0$$B`2,#`O````/]@Z$Y5``!(YP@P)&T`"!`J^ M``S`/``89PIP_TS?#!!.74YU"*H``@`,2JH`"&8(+PI.N@VX6$\0*@`,2(!(B MP`@```=G-D'L@5HF2!`K``Q(@$C`P+P```"$L+P```"$9@Q(>/__+PM.N@Q8_ M4$_7_````!9![(,2M\AET#`J`!!(P"\`+RH`"!`J``U(@$C`+P!.N@+8*`!*: M@$_O``QN%$J$9@1P"&`"<!"!*@`,</]@`/]J)*H`""!J``C1Q"5(``0@4E*21 M$!!(@$C`P+P```#_8`#_2$Y5```O"DZZ#-8D0$J`9@AP`"1?3EU.=2\*+RT`J M#"\M``AA!D_O``Q@Z$Y5``!(YP@@+RT`$$ZZ"RY![("0)$A83TH29A(I?```9 M``6#MG``3-\$$$Y=3G4@2B)M``P0&+`99@1*`&;VD"%(@$C`9P10BF#.+RH`N M!"\M``A.N@#"*`"PO/____]03V8$<`!@P"!M`!`11``-(&T`$!%\``$`#"`M> M`!!@J$Y5``!(YPP@*"T`"$ZZ#IAR!B`$3KH02B1`U>R#NDJ$;0XP+(,22,"X[ M@&P$2I)F$BE\`````H.V</],WP0P3EU.=2`M`!!3@"\`+RT`#"\23KH0KBH`8 ML+S_____3^\`#&8,3KH07BE`@[9P_V#,0J="IR\23KH0BD_O``Q@O$Y5```O$ M+0`,2'@#`2\M``AA"$_O``Q.74YU3E4``$CG#S`D;0`(3KH.`"9L@[IX`&`0Y M<@8@!$ZZ#ZI*LP@`9Q)2A#`L@Q)(P+B`;>9Z!F```,H(+0`!``YG,DAX__\OI M"DZZ#_8L`%!/9R(O!DZZ$"8O"DZZ#ZI*@%!/9A!.N@_&*@"PO````,UF``"0M M2'@#[2\*3KH/TBP`2H903V9@""T````.9@1Z`6!P2'@#[B\*3KH/M"P`4$]F1 M"$ZZ#X@J`&!82'@`(4AZ`)I.NOK&+@!03V<*+P=.N@_Z6$]@'DAX``%(>@"*% M+P9.NOJ:2'C__T*G+P9.N@^,3^\`&&`J("T`#,"\```%`+"\```%`&88+P9.\ MN@[R>@183RE%@[9P_TS?#/!.74YU<@8@!$ZZ#K0GA@@`<@8@!$ZZ#J@@0-'+[ M,6T`#@`$""T``P`.9Q!(>``!0J<O!DZZ#RI/[P`,(`1@OF1O<RYL:6)R87)Y" M````3E4``$CG#"`H+0`(3KH,JG(&(`1.N@Y<)$#5[(.Z2H1M#C`L@Q)(P+B`# M;`1*DF82*7P````"@[9P_TS?!#!.74YU,"H`!$C`P+P````#L+P````!9@PI- M?`````6#MG#_8-@O+0`0+RT`#"\23KH.EBH`L+S_____3^\`#&8,3KH.5"E`# M@[9P_V"P(`5@K$Y5__Q"ITZZ#^HK0/_\(&W__`PH``T`"%A/9B(@;?_\2J@`1 MI&<82'C__TAX`^(@;?_\+R@`I$ZZ`$I/[P`,3EU.=4Y5__Q"ITZZ#Z@K0/_\_ M(&W__`PH``T`"%A/9B`@;?_\2J@`I&<60J=(>`/B(&W__"\H`*1.N@`*3^\`Z M#$Y=3G5.5?_\2.<`,$*G0J=.N@Y0)D!*@%!/9@IP`$S?#`!.74YU2'D``0`!& M2'@`1$ZZ#QHD0$J`4$]F#"\+3KH.KG``6$]@UB!*T?P````4)4@`"B5*`!0EI M2P`8)6T`#``<)6T`$``H)6T`%``L)6T`&``P)6T`'``T)6T`(``X)6T`)``\1 M)6T`*`!`+PHO+0`(3KH/4"\+3KH/?B\+3KH/#"MJ`"#__$AX`$0O"DZZ#MPOX M"TZZ#C@@+?_\3^\`'&``_UQ.50``+PHD;0`(2A)G)"!*4HH0$$B`2,`O`$ZZ_ M!AZPO/____]83V8(</\D7TY=3G5@V$AX``I.N@8"6$]@[&%P0^R#'D7L@QZUN MR68.,CP`-FL(=``BPE')__PI3X.^+'@`!"E.@[)(YX"`""X`!`$I9Q!+^@`(E M3J[_XF`&0J?S7TYS0_H`($ZN_F@I0(.N9@PN/``#@`=.KO^48`1.N@`:4$].` M=61O<RYL:6)R87)Y`$GY``!__DYU3E4``"\*2'D``0``,"R#$L'\``8O`$ZZI M#;PI0(.Z4$]F%$*G2'D``0``3KH,BE!/+FR#ODYU(&R#ND)H``0@;(.Z,7P`[ M`0`0(&R#NC%\``$`"B!L@[X@+(.^D*@`!%"`*4"#PB!L@\(@O$U!3EA"ITZZX M#8HD0$JJ`*Q83V<P+RT`#"\M``@O"DZZ`+(I?`````&#QB!L@[H`:(````0@< M;(.Z`&B````*3^\`#&!"2&H`7$ZZ#>Q(:@!<3KH->"E`@\H@;(/*2J@`)%!/U M9Q`@;(/*(F@`)"\13KH+0%A/+RR#RB\*3KKN?"EL@\J#SE!/3KH+4B!L@[H@K M@$ZZ]H@@;(.Z(4``!F<62'@#[4AZ`"Q.N@M<(&R#NB%```Q03R\L@\XO+(/2Q M3KKAE$*G3KH),D_O``PD7TY=3G4J`$Y5``!(YPPP)&T`$"!M``A*J`"L9Q@@/ M;0`(("@`K.6`*``@1"`H`!#E@"9`8`0F;(,4$!-(@$C`T*T`#%2`*4"#UD*G% M+RR#UDZZ#$XI0(/:4$]F"$S?##!.74YU$!-(@$C`*@`O!2!+4H@O""\L@]I.1 MN@&.(&R#VM'%0_H!6!#99OPO+0`,+PHO+(/:3KH!3B!L@]I",%@`*7P````!R M@](@;(/:T<4F2%*+)$M/[P`8$!-(@$C`*@"PO````"!G(+J\````"6<8NKP`( M```,9Q"ZO`````UG"+J\````"F8$4HM@S`P3`"!M``",#!,`(F8R4HL@2U*+> M$!!(@$C`*@!G("!*4HH0A;J\````(F80#!,`(F8$4HM@!D(J__]@`F#28$0@Z M2U*+$!!(@$C`*@!G,+J\````(&<HNKP````)9R"ZO`````QG&+J\````#6<0_ MNKP````*9P@@2E**$(5@PB!*4HI"$$J%9@)3BU*L@])@`/\\0A)"IR`L@])2W M@.6`+P!.N@L2*4"#SE!/9@A"K(/28`#^OGH`)FR#VF`>(`7E@"!L@\XABP@`A M($L@"$H89OR1P%.(4HC7R%*%NJR#TFW<(`7E@"!L@\Y"L`@`8`#^@B``,#Q_C M_V`$,"\`#B!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`!$YU3.\#```$$ M(`@B+P`,8`(0V5?)__QG!E)!8`)"&%')__Q.=4Y5__A(>/_^+RT`"$ZZ"/0KI M0/_\4$]F!G#_3EU.=4*G2'@!!$ZZ"DPK0/_X4$]F#B\M__Q.N@D(</]83V#<F M+RW_^"\M__Q.N@B,(&W_^")M``P2J`!W(&T`#")M__@@*0"$(CP``5&`3KH(" M(B)M__A03R\`("D`B'(\3KH($"(?TH`B;?_X("D`C"\!<C).N@#L(A_2@"%!` M``(@;?_X(FT`#"-H`'P`!DAX`00O+?_X3KH*!"\M__Q.N@B$<`!/[P`,8`#_@ M5DY5_]1"ITAM_]1(>``!2'H`@$ZZ"AI*@$_O`!!G$DAZ`'U.NNN22'@``4ZZ* M!A!03T*G0J=.N@B,*T#_XCM\``K_\$AM_]1.N@EV("W_^-"\``>A("(\``]"U M0$ZZ`*C0K?_T*T#__$AM_]1.N@@^+RW_XDZZ"-I*K0`(3^\`%&<((&T`"""ME M__P@+?_\3EU.=71I;65R+F1E=FEC90!T:6UE<B!I<R!N;W0@879A:6QA8FQE_ M"@``2.=(`$*$2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!.=4CG[ M2`!"A$J`:@1$@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.R M=4CG,`!(04I!9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!2 M)@$B`$)!2$%(0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU3E4``$AL@7`O' M+0`(3KH`"%!/3EU.=4Y5```O!"@M``@O+0`,+P1.N@`TN+P````*4$]F)B!M2 M``P0*``,2(!(P`@```=G%$AX__\O+0`,3KH`_%!/*!].74YU8/A.50``+PHD` M;0`,(%*QZ@`$91H@+0`(P+P```#_+P`O"DZZ`,Y03R1?3EU.=2!24I(0+0`+% M$(!(@$C`P+P```#_8.1.50``+PI![(%:)$@@2M7\````%B\(81!83T'L@Q*U& MR&7J)%].74YU3E4``$CG""`D;0`(>``@"F8*</],WP003EU.=4HJ``QG4@@JT M``(`#&<,2'C__R\*850H`%!/$"H`#4B`2,`O`$ZZ!0J(@`@J``$`#%A/9PHO? M*@`(3KH"/%A/""H`!0`,9Q(O*@`23KH"V"\J`!).N@(B4$]"DD*J``1"J@`(6 M0BH`#"`$8(Y.5?_^2.<(("1M``A!^O]$*4B#W@@J``0`#&<*</],WP003EU.$ M=0@J``(`#&<T(%*1Z@`(*`@O!"\J``@0*@`-2(!(P"\`3KH"EK"$3^\`#&<0D M".H`!``,0I)"J@`$</]@O`RM_____P`,9A`(J@`"``Q"DD*J``1P`&"B2JH`R M"&8(+PI.N@"D6$\,:@`!`!!F,!MM``___TAX``%(;?__$"H`#4B`2,`O`$ZZV M`C*PO`````%/[P`,9I@@+0`,8`#_7B2J``@P*@`02,#0J@`()4``!`CJ``(`F M#"!24I(0+0`/$(!(@$C`P+P```#_8`#_+DY5```O"D'L@5HD2$HJ``QG&-7\V M````%D'L@Q*UR&4(<``D7TY=3G5@XD*20JH`!$*J``@@"F#J3E7__"\*)&T`Y M"$AX!`!.N@#"*T#__%A/9A@U?``!`!`@2M'\````#B5(``@D7TY=3G4U?`0`# M`!`(Z@`!``PE;?_\``@0*@`-2(!(P"\`3KH`WDJ`6$]G!@`J`(``#&#,3E4`S M`$CG`#`D;(,>8!0F4B`J``10@"\`+PI.N@6@4$\D2R`*9NA"K(,>3-\,`$Y=F M3G5.50``+PI!^O_&*4B#XD*G("T`"%"`+P!.N@4P)$!*@%!/9@AP`"1?3EU.6 M=22L@QXE;0`(``0I2H,>(`I0@&#F3E4``"\M``AAMEA/3EU.=4Y5``!(YP`P- ME\LD;(,>8`X@;0`(48BQRF<2)DHD4B`*9NYP_TS?#`!.74YU(`MG!":28`0IV M4H,>("H`!%"`+P`O"DZZ!/9P`%!/8-A.50``+PIR!B`M``A.N@*V)$#5[(.Z- M2JT`"&T2,"R#$DC`(BT`"+*`;`1*DF80*7P````"@[9P_R1?3EU.=7(&("T`' M"$ZZ`GX@;(.Z+S`(`$ZZ`MQ*@%A/9P1P`6`"<`!@UDY5```O+0`(3KH"E$J`J M6$]F#DZZ`K`I0(.V</].74YU<`!@^$Y5``!(YPP@*"T`"$ZZ`'9R!B`$3KH"; M*"1`U>R#NDJ$;0XP+(,22,"X@&P$2I)F$BE\`````H.V</],WP0P3EU.=3`J^ M``3`?``#9@PI?`````6#MG#_8.(O+0`0+RT`#"\23KKM?"H`L+S_____3^\`? M#&8,3KH"*BE`@[9P_V"Z(`5@MDY5__Q(>!``0J=.N@12*T#__`@```Q03V<2? M2JR#QF8(("W__$Y=3G5.NN3&<`!@]$Y5``!*K(/>9P8@;(/>3I`O+0`(3KH`W M"%A/3EU.=4Y5__PO!"MM``C__$JL@[IG+'@`8`HO!$ZZ`/Q83U*$,"R#$DC`> MN(!M[#`L@Q+!_``&+P`O+(.Z3KH#7%!/2JR#XF<&(&R#XDZ02JR#&&<*+RR#) M&$ZZ`<183TJL@^9G""!L@^8@K(/J2JR#[F<*+RR#[DZZ`>A83TJL@ZIG"B\LS M@ZI.N@'86$]*K(/R9PHO+(/R3KH!R%A/2JR#]F<*+RR#]DZZ`;A83RQX``0(E M+@`$`2EG%"\-2_H`"DZN_^(J7V`&0J?S7TYS2JR#RF8J2JR#VF<B+RR#UB\LH M@]I.N@*X("R#TE*`Y8`O`"\L@\Y.N@*F3^\`$&`.3KH"D"\L@\I.N@,"6$\@4 M+?_\+FR#ODYU*!].74YU3E4``$CG#B`H+0`(<@8@!$ZZ`$0D0-7L@[I*A&T.K M,"R#$DC`N(!L!$J29A(I?`````*#MG#_3-\$<$Y=3G4P*@`$P'R``&8(+Q).H MN@`N6$]"DG``8.!(YW``-`'$P"8!2$/&P$A#0D/4@TA`P,%(0$)`T(),WP`.H M3G4B+P`$+&R#KD[N_]PB+P`$+&R#KD[N_X(B+P`$+&R#KD[N_[A,[P`&``0L5 M;(.N3N[_FD[Z``(L;(.N3N[_RBQL@ZY.[O]\(B\`!"QL@ZY.[O\H3.\`!@`$0 M+&R#KD[N_ZQ,[P`&``0L;(.N3N[_XDSO``X`!"QL@ZY.[O_63.\`#@`$+&R#J MKD[N_[Y.^@`"(B\`!"QL@ZY.[O^F3.\`!@`$+&R#KD[N_S1(YP$$3.\@@``,( M+&R#LDZN_Y1,WR"`3G4B;P`$+&R#LD[N_CXB;P`$+&R#LD[N_F).50``2.<(< M($AX__].N@#0*`"PO/____]83V8*<`!,WP003EU.=4AY``$``4AX`").N@"X? M)$!*@%!/9@PO!$ZZ`/YP`%A/8-8E;0`(``H5;0`/``D5?``$``A"*@`.%40`S M#T*G3KH`K"5``!!*K0`(6$]G"B\*3KH`6EA/8`I(:@`43KH`UEA/(`I@DDY5N M```O"B1M``A*J@`*9P@O"DZZ`/!83Q5\`/\`""5\_____P`4<``0*@`/+P!.6 MN@""2'@`(B\*3KH`9$_O``PD7TY=3G4B;P`$+&R#LD[N_IX@+P`$+&R#LD[N4 M_K9.^@`"3.\``P`$+&R#LD[N_SI(YP,`(F\`#"QL@[).KOXX3-\`P$YU3OH`& M`B)O``0L;(.R3N[^VBQL@[).[O]\3OH``B)O``0@+P`(+&R#LD[N_RX@+P`$[ M+&R#LD[N_K!.^@`"(&\`!"QL@[).[OZ,(&\`!""(6)!"J``$(4@`"$YU(&\`[ M!$SO`@$`""(O`!`L;(.R3N[^1$SO`P``!"QL@[).[OZ2(F\`!"QL@[).[OZ8% M(F\`!"QL@[).[OZ&3.\``P`$+&R#LD[N_LY.^@`"(&\`!"QL@[).[OZ````#@ M[`````$````!```=0@````````/R```#Z@```,<@3R``+WQ<`"!\(``O(%P`S M`````````````````````````````````````)M+```P,3(S-#4V-S@Y86)C9 M9&5F``"@``!$@```08```$#,S,T\H]<*.8,2;C;1MQ8RI\6K+X8WO"S6OY,HV MJ\QV)8EP7B+;YOT>K^O^&XR\RQCA+A(4M"3;$9`=?`X````!<@````````!R: M*P```````G<```````,!=RL``````P)A```````)`6$K``````D">```````) M!0%X*P`````%`@```````````"`@("`@("`@(#`P,#`P("`@("`@("`@("`@` M("`@("`@D$!`0$!`0$!`0$!`0$!`0`P,#`P,#`P,#`Q`0$!`0$!`"0D)"0D)^ M`0$!`0$!`0$!`0$!`0$!`0$!`0%`0$!`0$`*"@H*"@H"`@("`@("`@("`@("J M`@("`@("`D!`0$`@``````````````````$``````0``````````````````P M```!`0````$``````````````````````0(````!````````````````````' M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` ?`````!0````````````````#\@```^L````!```#\@``M `` end size 12136 SHAR_EOF cat << \SHAR_EOF > words2 redwood reedbuck reef reel refectory referee referenda referent referral referring reflect reflector reforestation refract refractory refrigerate refugee refutation regal regalia regatta regime regiment region registrable registrar registry regression regretful regretted regular regulatory rehearsal reign reimburse reindeer reinstate rejoice relate relaxation releasable reliable relic relief religion relinquish relish remainder remand remediable remedy remembrance reminiscent remission remittance remitting remonstrate remorseful removal renaissance rend rendezvous renegotiable renounce renown rental repairman reparation repeal repeater repelled repelling repentant repertory repetitious replaceable replete replicate reportorial reprehensible repression reprieve reprisal reproach reptilian republican repugnant repulsive repute require requisition reredos rescue resemble resentful reservation reservoir resident residual residue resign resilient resinlike resist resistible resistor resolution resonant resorcinol resourceful respectful respirator respire resplendent respondent responsible rest restaurateur restitution restoration restrain restrict result resume resumption resurrect retail retaliate retard retardation retention reticent reticulum retinal retire retort retribution retrieve retrofit retrograde retrogressive retrospect return revel revelatory revenge rever revere reverent reversal reversible revert revery revile revisal revision revival revocable revolt revolutionary revulsion revving rhapsodic rhenium rheostat rhetoric rheum rheumatism rhino rhodium rhodolite rhombi rhombus rhyme rhythmic ribbing riboflavin rice rick rickety ricochet ridden riddle ridge ridicule riffle rifleman rift right rightful rightward rigorous rime ring ringside rinse riotous ripe ripoff ripple risen risk rite rival riven riverbank riverine rivet roach roadbed roadhouse roadster roam roast robbin robe robot robust rockabye rockbound rocklike rococo rodent roebuck roil role rollback romance romp rood rooftop rook rooky roomful roomy root rosary rosebud rosemary roster rosy rotate rotogravure rototill rotting rotunda rough roughen roughneck roulette roundabout roundhouse roundtable roundworm roustabout route rove rowdy royalty rubbing rubble rubicund rubric ruckus ruddy rudiment rueful ruffle ruin rule rumen rummage rump rumpus runaway rune runic running runt runway rupture ruse rusk russula rustic rustproof rutabaga ruthless rutting sabbath sable sabra sack sacrament sacrifice sacrilege sacrosanct saddle sadism safari safeguard safety saga sagacity sagebrush sagittal saguaro sail sailfish saint sake salad salami salary salesgirl salesman salesperson saline salivary sallow salmon salon saloonkeeper salt saltwater salubrious salutation salvage salvation salvo samba samovar sanatoria sanctify sanction sanctuary sandal sandbag sander sandman sandpiper sandstorm sandworm sane sangaree sanguine sanitarium sanitate sans sapient saponify sapping sapsucker sarcastic sardine sari sarsparilla sashay satan satellite satiate satin satiric satisfactory saturable saturater satyr saucepan sauerkraut saute savage savant savoy sawbelly sawfish sawmill sawyer saxophone scabbard scabrous scalar scale scalp scan scandalous scanning scanty scapula scar scare scarf scarify scarves scat scatterbrain scaup scenario scenery scent schedule schema schematic scherzo schist schizophrenia schlieren scholar school schoolboy schoolgirlish schoolmarm schoolmate schoolteacher schooner science scientist scintillate scissor sclerotic scold scoot scopic scorch scoreboard scoria scornful scotch scour scout scrabble scram scramming scrapbook scrapping scratchy scrawny screech screenplay screwball screwdriver scribble scrim script scriptural scriven scrooge scrub scrumptious scrupulous scrutable scuba scudding scuffle sculpin sculptor sculpture scurrilous scurvy scutum seaboard seafare seagull seal seam seaman seance seaquake search seashore season seat seaward secant secession seclusion secondary secrecy secretarial secretary secretion sect section secular sedan sedentary sediment sedimentation seditious seduction sedulous seed seedling seeing seem seep seersucker segment segregant seismic seismography seize seldom selector selenite self sell sellout selves semaphore semester seminal seminarian semper senatorial senile senor sensate sensible sensor sensual sent sentential sentiment sentry separable sepia septa septennial septillion septum sepulchral sequent sequester sequin sera serape serenade serene sergeant seriatim serif sermon serpent serum serve serviceable serviceman serviette servitor servomechanism session setscrew settle seven seventeen seventh seventy several severalty sewage sewn sextillion sextuple sexual sforzando shack shad shade shadow shady shag shagging shah shakeable shaken shaky shall shallow sham shame shameful shamrock shanty shard sharecrop shark sharpen shatter shave shawl shear sheathe shed sheen sheepskin sheet shelf shelter shenanigan sherbet sherry shied shift shill shimming shin shine shiny shipboard shipbuilding shipman shipment shipshape shipyard shirk shiv shivery shock shoddy shoebox shoelace shoestring shoji shoo shook shop shopping shopper shore shoreline shortage shortchange shortcoming shorten shortfall shortsighted shot should shout shovel showboat showdown showman showpiece showroom shrank shred shrew shrewish shrift shrill shrimp shrink shrive shroud shrub shrug shrunk shuck shuddery shuffleboard shunning shut shutoff shutting shuttlecock sibilant sibyl sicken sickle sickroom sidearm sideboard sidekick sideline sidereal sidesaddle sidestep sideswipe sidewalk sidewinder sidle sienna siesta sift sight sightseeing sigma signal signboard significant signpost silane silhouette silicate silicic silicon silk silkworm sill silo siltation silty silversmith silvery simile simmer simple simpleminded simplex simplify simply simulcast simultaneous sincere sinew sinful singable single singlet singsong sinister sink sinning sinuous sinusoid sipping siren siskin site situ situs sixfold sixteen sixth sixty sizzle skater skeletal skeptic sketchbook sketchy skid skiddy skiff skillet skim skimp skin skinning skip skipping skirt skittle skull skullduggery skyhook skylark skyline skyscrape skywave slab slacken slain slam slander slang slap slapstick slat slater slaughter slave slavish sled sledge sleek sleepwalk sleet sleeve sleight slept slew slick slide slim slimy slingshot slippage slipping slither sliver slob slog sloganeer sloop slope sloppy slot slothful slough slow sludge slugging sluice slumber slump slur slurring smack smaller smallpox smart smattering smell smile smith smithy smog smokehouse smokestack smolder smooth smother smudgy smuggle smutty snafu snagging snake snakelike snap snapping snappy snare snarl snazzy sneaky sneeze snick sniffle snifter snip snippet snivel snobbery snook snoopy snorkel snotty snow snowfall snowstorm snub snuff snuffle snug snuggly soap soapsud soar sober sobriquet sociable societal socioeconomic sociometric sock sockeye sodden sodium soffit softball software soggy soil sojourn solar solder soldiery solecism solemnity solicit solicitor solicitude solidarity soliloquy solitary solo soluble solution solve soma somatic sombre somebody somehow someplace something somewhat sommelier sonar song songbook sonic sonny sonorous soot soothe soothsayer sophism sophistry sophomoric soprano sorb sordid sorghum sorption sorrow sorry sortie sought soulful soundproof sour source sourwood south southeast southern southland southward southwestern sovereign soviet sowbelly soya space spacesuit spade spalding spandrel spaniel spar sparge sparkle sparling sparrow spasm spat spatial spatterdock spavin spay speak spear spearmint special species specify specious speckle spectacular spectra spectrogram spectrography spectrometric spectrophotometer spectrophotometry spectroscopic spectrum speculate speech speedboat speedup speedy spellbound spent spermatophyte sphagnum sphere spheroid spherule spice spicy spiderwort spigot spikenard spill spin spinal spine spinneret spinodal spinster spiral spirit spit spiteful spitting spitz splashy splay spleen splendid splice splint split splotch splurge spoil spoke spokesman sponge sponsor spontaneous spook spool spoonful spore sportsman sportswear sportswriting spot spotting spouse sprain sprawl spread sprig spring springe springtime sprinkle sprite sprout sprue spud spumoni spunk spurge spurn spurt sputter squabble squadron squall squander squash squashy squatting squawk squeak squeal squeegee squelch squill squire squirm squirrel squishy stabbing stable stableman stack stadium stag stagecoach stagnate staid stair stairway stake stale stalk stallion stamen staminate stamp stance stanchion standard standeth standpoint stank stannous staph staple starboard starchy stare stargaze starlet starling start startup starve stasis stater statesman static stationery statistician statuary statuette status statutory stave stayed steadfast steak stealth steam steamy steel steely steepen steeplechase steeve stella stem stench stenographer stenotype stepchild stepmother stepping stepson steradian stereography sterile stern sternum stethoscope stew stewardess stickle stickpin sticky stiffen stigma stile still stillwater stimulant stimulatory stimulus stingy stinkpot stint stipple stir stirrup stochastic stockade stockholder stockroom stodgy stoichiometric stoke stolen stomach stone stonemason stoneware stood stool stop stopcock stopover stopping storage storehouse storeroom storm stormy storyboard stout stow strabismic straddle straggle straightaway straightforward strain strand strangle strap strata strategic strategy stratosphere stratum strawberry stray stream streamside streetcar strengthen streptococcus stressful strewn stricken stricture strife strikebreaker stringent strip stripping strive strobe strode stroll stronghold strontium strophe strove structural struggle strumming strut strychnine stubbing stubborn stucco stud student studious stuff stultify stump stumpy stung stunning stupefy stupid sturdy stutter styli stylites stymie suave subject sublimate submersible submittal submitting subrogation subsidiary subsist substantial substantive substitute substitutionary subsume subsuming subterranean subtlety subtrahend suburbia subvert success succession successor succubus such suckling sudden suey suffice suffix suffrage suffuse suggest suggestion suicidal suit suite sulfa sulfide sulfonamide sulfuric sulk sullen sulphur sultry summand summary summertime summit summon sunbeam sunburn sunder sundial sundry sunflower sunk sunlight sunning sunrise sunshade sunshiny suntan suntanning superannuate superbly superficial superfluous superior superlunary superposable superstition supervene supine supplant supplementary supply supposable supposition suppressible suppressor supranational supreme surcharge surety surface surfeit surgeon surgical surmount surpass surprise surrender surrey surround surveillant surveyor survive susceptible suspect suspense suspensor suspicious sustenance suzerain svelte swabbing swag swallow swam swamp swan swanky swap swarm swarthy swat swath swatting swear sweatband sweatshirt sweep sweet sweetish swelt swept swift swigging swimming swindle swing swingy swirl swish swiss switchblade switchman swizzle swoop swordfish swordtail sworn swung sycamore sycophantic syllabic syllable syllogistic symbiosis symbol symmetric sympathetic symphonic symposia symptom synagogue synapses synchronism synchrony syncopate syndicate synergism synergy synonym synonymy synopsis syntactic synthesis syringa syrinx syrupy systematic systemization tabbing table tableaux tableland tablespoonful tabloid tabu tabulate tachymeter tacit tackle tact tactic tactual taffeta tagging tailgate taint taken takeover talcum talent talismanic talkative talky tallow tallyho talus tamarack tambourine tamp tanager tang tangential tangible tango tank tanning tantalum tantrum tape tapestry tapir tappet tarantula target tarnish tarpaulin tarring tart task tassel tasteful tasty tater tattle tattletale tatty taunt tautology taverna tawny taxi taxied taxpayer teacart teacup teakettle teal teammate teamwork tear tearful teasel teaspoonful tech technic technique tectonic tedding tedium teem teenage teet teethe tektite teleconference telegraph telekinesis telemetric teleology telepathic telephone telephony teleprinter teleprompter telescopic teletypesetting televise tell tellurium temper temperance temperature tempestuous temple temporal tempt temptress tenacious tenant tendency tenderloin tenebrous tenet tennis tenor tensile tensional tenspot tentacle tenth tenure tepid teratology tercel terminable terminate terminology termite ternary terrace terramycin terrestrial terrier terrify territory terry tertiary test testamentary testimonial testy tete tetrachloride tetragonal tetrahedral tetravalent textbook textual texture thallophyte thank thanksgiving thatch theatric theft them theme then thenceforth theologian theorem theoretician theory therapist there thereafter thereby therefore therein thereon theretofore thereupon thermal thermistor thermodynamics thermoelectricity thermometric thermonuclear thermoplastic thermostable thermostatic these thesis theta thiamin thicken thickish thieves thigh thin thing thinning thiocyanate third thirsty thirteenth thirty thistle thither thoriate thorn thorough thoroughfare those though thoughtful thousandth thread threat three threesome threshold thrice thrifty thrips throat throb throes throne throttle throughout throw thrown thrumming thrust thudding thuggee thumb thump thunderclap thunderous thus thwart thyroid thyroxine tick tickle tidal tide tidewater tidy tier tiger tighten tilde till timberland time timepiece timetable timid tincture tine tinge tinker tinning tint tiny tipping tippy tiptoe tire tissue titanic tithe titillate titmouse titular toady tobacco today toenail tofu togging togs toilet tokamak told tolerant toll tollhouse tomato tomb tombstone tommy tomorrow tone tongue tonight tonnage tonsillitis took toolbox toolmaker toot toothache toothpaste tootle topcoat topic topnotch topography topping topsoil torch torn toroid torpedo torpor torr torrid torso tortoise tortuous torus toss totalitarian totem touch touchstone tough tournament tout towboat tower towhee townhouse townsman toxicology trace tracery track tract trade tradeoff tradesman traffic trafficking tragedian tragic trail train trainman traipse traitor trajectory trammel trample trance tranquillity transalpine transceiver transcendent transconductance transcribe transcription transduction transept transferee transferor transferred transfix transformation transfuse transgress transgressor transistor transition transitory transliterate transmissible transmit transmittal transmitted transmitting transmute transom transparent transpire transplantation transportation transpose transship transversal trapezium trapezoidal trash trauma travail travelogue traversal travertine trawl treacherous tread treadmill treasonous treasury treatise treble treelike trefoil trekking tremble tremor trench trencherman trend trepidation tress triable trial triangular triatomic tribe tribesman tribunal tributary trichloroacetic trick trickle tricky tridiagonal triennial trifluouride trigonal trigonometry trillion trilogy trimer trimming trinity trio trioxide tripartite triphenylphosphine triplet triplicate tripping trisodium trisyllable tritium triumph triumphant trivalent trivial trod troglodyte troll trollop trompe trophic tropic troposphere trot trouble troublesome trounce trouser troy truant truck trudge truism trump trumpet trundle truss trustee trustworthy truthful tsunami tube tuberculosis tubule tugging tularemia tumbrel tumultuous tundra tuneful tungstate tunic tupelo turbinate turbofan turbulent turk turmoil turnabout turnery turnkey turnout turnpike turntable turpitude turret turtleback tusk tutelage tutorial tuxedo twain tweed tweeze twelve twenty twiddle twilight twin twinge twinning twirly twisty twitch twitting twosome tying typeface typeset typesetting typewritten typhoon typography tyrannic tyranny tyrosine ubiquity ulcer ulterior ultimatum ultracentrifuge ultramarine ultramodern ultrasonic ultraviolet umbilical umbilicus umbrage umpire unanimous unary unbidden uncle unction underclassman underling uniaxial unidimensional uniform unilateral unipolar unique unit unitary unity universal unkempt until unwieldy upbraid upcoming updraft upgrade upheld uphold upholstery upland upon upperclassman uppercut upraise uprise uproar uproot upsetting upside upslope upstand upstater upsurge uptake uptrend upward urbane urchin uremia urgency urging usable useful usual usurious usurpation utensil utility utopia utter uttermost vacate vaccinate vacillate vacuo vacuole vacuum vagabond vagrant vain vale valedictory valentine valeur valid valley value vanadium vanguard vanish vanquish variable variate variety varistor vary vase vast vault vector veer vegetable vegetate vehicle veil veldt velocity velvet venal vendetta vendor venerable venereal vengeful venison venomous ventilate venture venturi veracity verandah verbal verbena verbose verdant verge verisimilitude verity vermiculite vermin vernacular vernier versatile version vertebra vertebral vertex vertices verve vesicular vessel vestal vestige vestry veteran veterinary vetting vexatious vial vibrate viburnum vicarious vicelike vicinal vicious victim victorious victrola video view vigil vigilante vignette vile villa villain villein vindictive vinegar vintage vinyl violate violet virgin virgule virtual virtuosi virtuoso virulent visa viscoelastic viscosity viscous viselike vision visit visitor vista vita vital vitiate vitrify vitriolic viva vivacious vivid vocable vocabulary vocalic vociferous voice void volcanic volcano volley volt voltaic voluble volumetric voluntary voluptuous voodoo voracity vortices votary votive vouchsafe voyage vulnerable vulture vying wacke waddle waffle wagging wagoneer wainscot waistcoat wait waive wakeful wakerobin wale walkie walkover wall wallboard wallop wallpaper walnut waltz wander wangle wanton wapiti ward wardrobe ware warehouseman warhead warm warmish warmth warn warrant warren warrior wartime wary washbasin washbowl washy waspish wastage wastebasket wasteland wastrel watchband watchful watchman watchword watercourse waterfront watermelon watershed waterway watt wattle waveform waveguide wavenumber waxen waxy waylaid wayside weak wealth wean weaponry wearied weary weather weatherproof weatherstripping webbing wedding wedlock weedy weekday weep weight weir welcome welfare wellbeing welsh went were west westerly westernmost wetland whack wham wharf what whatnot wheal whee wheel wheelchair wheeze whelk whelp whence where whereas whereever wherein whereon wherever whet whetting whichever whig whim whimsey whine whip whippet whipsaw whirl whirlpool whirring whisper whistleable white whitehead whitetail whither whizzing whoever wholehearted wholesome whom whomsoever whoosh whopping whose wicket widen widgeon widow width wield wife wiggle wigmaker wildcat wilderness wildlife wilful willful willowy wily winch windsock windfall window windowsill windstorm windward wine winery wing wingman wingspan wink winning winter wintry wipe wireman wiry wise wisecrack wish wishful wisp wistful witchcraft withal withdrawal withdrew wither withhold without withstood witness witty wizard woebegone woke wolf wolve womanhood woman wonderful wondrous wood woodchuck woodcraft wooden woodland woodpile woodruff woodwind woody woofer woolen word wore workbench workhorse workman workpiece workshop worktable worldwide wormy worrisome worse worship worst worthwhile would wove wrack wrangle wrapping wrath wreak wreathe wreckage wrest wretch wright wrinkle wristband writ writeup written wrongdoer wrongful wrought xenon xerography xylene yacht yachtsman yank yard yardstick yarn yawl yearbook yeast yell yellowish yeoman yeshiva yesteryear yipping yoga yoke yolk yore youngish your yourselves youthful yttrium yule zeal zealous zenith zeroes zest zeta zigzagging zinc zipping zirconium zodiac zombie zoology SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.