billr@saab.CNA.TEK.COM (Bill Randle) (11/17/90)
Submitted-by: George L Sicherman <gls@odyssey.att.COM> Posting-number: Volume 11, Issue 59 Archive-name: jotto/Part01 # This is a shell archive. Delete everything before this line. #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 1)." # Contents: README MANIFEST Makefile answer.c isis.c jotto.6 jotto.c # jotto.d jotto.h jsumm.c legal.c load.c ord.c subs.c # Wrapped by billr@saab on Fri Nov 16 10:02:36 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(352 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' XJotto plays the word game of Jotto with you. You and the program Xeach secretly choose a common English word of five different letters. XThe players take turns guessing words of five different letters. XEach guess (if wrong) is answered by the number of letters in the guess Xthat occur in the secret word. The winner is the first player to guess Xright. END_OF_FILE if test 352 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(548 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 This shipping list X Makefile 1 X README 1 X answer.c 1 X isis.c 1 X jotto.6 1 X jotto.c 1 X jotto.d 1 X jotto.h 1 X jsumm.c 1 X legal.c 1 X load.c 1 X ord.c 1 X subs.c 1 END_OF_FILE if test 548 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(930 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' X# X# Makefile for Jotto. X# X X# X# The following two lines define the installation paths X# for the program, the dictionary, and the man page. X# X XBINDEST = jotto XDICDEST = jotto.d XMANDEST = jotto.6 X XSOURCES = Makefile jotto.6 jotto.h \ X answer.c isis.c jsumm.c legal.c load.c ord.c subs.c jotto.c jotto.d XOBJECTS = answer.o isis.o jsumm.o legal.o load.o ord.o subs.o jotto.o Xjotto: $(OBJECTS) X cc $(OBJECTS) -o jotto Xisis.o: jotto.h Xjsumm.o: jotto.h Xlegal.o: jotto.h Xload.o: jotto.h Xsubs.o: jotto.h Xjotto.o: jotto.h X cc $(CFLAGS) -c -DDICT=\"$(DICDEST)\" jotto.c Xshar: jotto.shar Xjotto.shar: $(SOURCES) X shar $(SOURCES) > jotto.shar Xinstall: jotto jotto.d jotto.6 X if test $(BINDEST) != jotto; then cp jotto $(BINDEST); fi X if test $(DICDEST) != jotto.d; then cp jotto.d $(DICDEST); fi X if test $(MANDEST) != jotto.6; then \ X echo .ds Bd $(BINDEST) > $(MANDEST); \ X cat jotto.6 >> $(MANDEST); fi Xclean: X rm -f *.o *.shar END_OF_FILE if test 930 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'answer.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'answer.c'\" else echo shar: Extracting \"'answer.c'\" \(106 characters\) sed "s/^X//" >'answer.c' <<'END_OF_FILE' X/* X * answer X */ X Xanswer(w, n) Xchar *w; Xint n; X{ X printf(" %s has %d letter%s\n", w, n, n==1? "": "s"); X} END_OF_FILE if test 106 -ne `wc -c <'answer.c'`; then echo shar: \"'answer.c'\" unpacked with wrong size! fi # end of 'answer.c' fi if test -f 'isis.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'isis.c'\" else echo shar: Extracting \"'isis.c'\" \(444 characters\) sed "s/^X//" >'isis.c' <<'END_OF_FILE' X/* X * isis X */ X X#include "jotto.h" X Xisis(guess, array, alen) Xchar *guess, *array[]; Xint alen; X{ X int count[WORDLEN+1]; X int i, retval, lim; X static int start = 0; X X lim = alen<64? alen: 64; X for (i=0; i<=WORDLEN; i++) count[i] = 0; X for (i=0; i<lim; i++) { X start += 29; X if (start >= alen) start %= alen; X count[inter(guess, array[start])]++; X } X retval = 0; X for (i=0; i<=WORDLEN; i++) retval -= count[i]*blog(count[i]); X return retval; X} END_OF_FILE if test 444 -ne `wc -c <'isis.c'`; then echo shar: \"'isis.c'\" unpacked with wrong size! fi # end of 'isis.c' fi if test -f 'jotto.6' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'jotto.6'\" else echo shar: Extracting \"'jotto.6'\" \(1072 characters\) sed "s/^X//" >'jotto.6' <<'END_OF_FILE' X.if '\*(Bd'' .ds Bd jotto X.ie t \{.ds Q `` X.ds U ''\} X.el \{.ds Q "" X.ds U ""\} X.de QU X\\$3\\*Q\\$1\\*U\\$2 X.. X.TH jotto 6 "" "local" X.SH NAME Xjotto \- word guessing game X.SH SYNOPSIS X.B \*(Bd X.\" [ -d ] X.SH DESCRIPTION X.I Jotto Xplays the word game of Jotto with you. XYou and the program each secretly choose a common English word Xof five different letters. XPlurals in X.QU s Xare not allowed. XThe players take turns guessing words of five different letters, Xwith plurals being allowed. XEach guess (if wrong) is answered by the number of letters in the guess Xthat occur in the secret word. XThe winner is the first player to guess right. X.SH FILES Xjotto.d \- dictionary for Jotto X.SH BUGS X.IR Jotto 's Xdictionary is not perfect. XIf you invent a word, the program will believe you and lose, Xand shame on you. XIf you use a good word that is not in the dictionary, Xcomplain to your games administrator, and in the meantime please Xdo not use it again. XIf the program uses a word that you never heard of, Xit's your bad luck. X.SH AUTHOR XCol. G. L. Sicherman (gls@odyssey.att.com) END_OF_FILE if test 1072 -ne `wc -c <'jotto.6'`; then echo shar: \"'jotto.6'\" unpacked with wrong size! fi # end of 'jotto.6' fi if test -f 'jotto.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'jotto.c'\" else echo shar: Extracting \"'jotto.c'\" \(6590 characters\) sed "s/^X//" >'jotto.c' <<'END_OF_FILE' X/* X * Jotto. G. L. Sicherman. 1990. X * Translated to C from UNIX f77. X * The UNIX f77 was ported from the original CDC FORTRAN IV X * and COMPASS, which goes back to around 1975. X * X * You may use this program and modify it as you like, X * so long as you leave this message as it is and don't X * try to make money off the program. X */ X X#include <ctype.h> X#include <stdio.h> X/* X * The usual string incompatibility. X * In SYSV, index() is an unrelated function in libPW. X */ X#ifdef BSD X#include <strings.h> X#define strchr index X#else X#include <string.h> X#endif X#include "jotto.h" X X#ifndef DICT X#define DICT "jotto.d" X#endif X Xchar *bad[DICTLEN]; /* words eliminated by one answer */ Xint diagn = 0; Xchar dict[DICTLEN][WORDLEN*2+1]; /* all the words */ Xchar *good[DICTLEN]; /* words not eliminated */ Xint gy[MAXGUESS]; Xchar *iguess[MAXGUESS]; Xint ndict; Xint ngood, nbad; XFILE *tape4; /* Yep - it's CDC FORTRAN, all right */ Xchar uguess[MAXGUESS][WORDLEN+1]; Xint uguessc, iresp[MAXGUESS]; X Xextern char *getlogin(); Xextern int legal(); Xextern char *ord(); Xextern long time(); X Xmain(argc, argv) Xint argc; Xchar **argv; X{ X char **use; /* whichever we're using */ X int num; X int igs; X int *nuse; X char mult[WORDLEN*10+1]; X char *foundpan; X int guess; X int ustart; X char *login; X char *pop; X int wins[2]; X int over; X char *you, *getword(); X char *mine; X char *old; X char *a; X long best; X int which; X int iguessc; X int i, n, i0; X X while (--argc) { X if ('-'==**++argv) switch(*++*argv) { X case 'd': /* undocumented debugging option */ X diagn = 1; X break; X default: X ; X } X else break; X } X printf(" Jotto 3.0\n"); X for (i=0; i<2; i++) wins[i]=0; X tape4 = fopen(DICT, "r"); X if (!tape4) { X printf("\nCannot read dictionary - aborted\n"); X exit(1); X } X login = getlogin(); X load(); X srand(time((long *)0)); X ustart = rand(0) >= 16384; X do { /* loop over games */ X printf("\n Think of a word of %d different letters.\n", X WORDLEN); X/* X * Pick a word. X */ X mine = &dict[which=rand()%ndict][WORDLEN]; X if (diagn) printf("l %5d\n", ndict); X/* X * Copy all the words into the good list X * while the user is thinking. X */ X for (i=0; i<ndict; i++) good[i] = dict[i]; X ngood = ndict; X nbad=0; X while (!yes(" Ready? ")) ; X/* X * Pick a place in the dictionary to start guessing. X */ X do guess = rand()%ndict; X while (guess == which); /* don't guess our own word! */ X printf(" Type a carriage-return for a list of my answers.\n"); X iguessc = uguessc = 0; X foundpan = (char *)NULL; X for (over=0; !over; ) { X/* X * Loop over turns. X */ X if (ustart && uguessc==0) goto getguess; X/* X * our turn to guess. X */ X if (foundpan) { X/* X * Multiple anagrams! X */ X foundpan += WORDLEN; X if (*foundpan) { X old = foundpan; X goto doguess; X } X /* otherwise we're stuck */ X goto giveup; X } X best = -999999; X use = good; X if (!*(nuse = &ngood)) { X if (!*(nuse = &nbad)) goto giveup; X use = bad; X } X if (*nuse == 1) old = &use[0][WORDLEN]; X else for (igs=0; igs<50; igs++) { X if ((guess += 31) >= ndict) guess -= ndict; X /* X * Get the guess. X */ X a = &dict[guess][WORDLEN]; X if ((i=isis(a,use,*nuse)) >= best) { X best = i; X old = a; X } X if (diagn && igs<10) X printf(" ?g %s %7d\n", a, i); X if (best >= -1) break; X } X if (diagn && *nuse <= 10) { X for (i=0; i<*nuse; i++) X printf(" i %.*s\n", WORDLEN, use[i]+WORDLEN); X } X if (diagn) printf("%dg%d\n", igs, best); Xdoguess: X printf("\n My %d%s guess is: %.*s.\n", X iguessc+1, ord(iguessc+1), WORDLEN, old); X num = getnum(" How many letters? "); X iguess[iguessc] = old; X gy[iguessc++] = num; X if (num == WORDLEN) { X if (yes(" Is that your word? ")) { X printf("\n Your word is: %s\n", old); X printf(" My word was: %s\n", mine); X wins[0]++; X over = 1; X break; X } X if (!foundpan) { X getmult(old-WORDLEN, mult); X foundpan = mult; X } X } X else revise(old, num); X/* X * Time for the user's guess. X */ Xgetguess: X do { X printf("\n What is your %d%s guess? ", X uguessc+1, ord(uguessc+1)); X you = getword(); X if (strlen(you)==0) { X jsumm(); X continue; X } X } while (!legal(you)); X strcpy(uguess[uguessc] , you); X iresp[uguessc++] = i = inter(mine, you); X if (!strcmp(mine, you)) { X printf(" ...you win.\n"); X goto beg; X } X answer(you, i); X continue; Xgiveup: X printf("\n\n I give up.\n"); Xbeg: X printf(" What was your word? "); X pop = getword(); X if (!legal(pop)) { X printf("\n \"%s\" is not a legal word.\n", pop); X wins[0]++; X over = 1; X break; X } X/* X * Check his answers. X */ X for (i0 = 0; i0 < iguessc; i0++) { X if (inter(iguess[i0],pop) != gy[i0]) { X printf( X "\n You cheated\n You said \"%s\" had %d letters\n", X iguess[i0], gy[i0]); X wins[0]++; X over = 1; X break; X } X if (!strcmp(iguess[i0],pop)) { X printf( X " You cheated\n You said \"%s\" was not your word\n", X iguess[i0]); X wins[0]++; X over = 1; X break; X } X } X if (over) break; X wins[1]++; X printf(" My word was: %s\n", mine); X over = 1; X } X } while (yes(" Another game? ")); X printf("\n Final score\n %-8.8s %2d\n computer %2d\n", X login, wins[1], wins[0]); X exit(0); X} X Xint Xyes(prompt) Xchar *prompt; X{ X char *i, inline[80+1]; X X printf(prompt); X if (!gets(inline)) { X printf("ERROR reading your answer\n"); X return 0; X } X for (i=inline; *i && isspace(*i); i++) ; X return *i == 'y' || *i == 'Y'; X} X Xchar * Xgetword() X{ X static char wline[80]; X char *w, *ww; X X if (!gets(wline)) { X printf("ERROR reading your answer\n"); X return (char *)0; X } X for (w=wline; *w && isspace(*w); w++) ; X for (ww=w; !isspace(*ww); ww++) ; X *ww = '\0'; X for (ww=w; *ww; ww++) if (isupper(*ww)) *ww=tolower(*ww); X return w; X} X Xint Xgetnum(pr) Xchar *pr; X{ X char *n, nline[80+1]; X do { X printf(pr); X if (!gets(nline)) return -1; X if (n = strchr(nline, '\n')) *n = 0; X for (n=nline; *n && isspace(*n); n++) ; X } while (!isdigit(*n)); X return atoi(n); X} X Xgetmult(want, hold) Xchar *want, *hold; X{ X char mline[80+1]; X rewind(tape4); X while (fgets(mline, 80, tape4)) if (!strncmp(want,mline,WORDLEN)) { X *(strchr(mline,'\n')) = '\0'; X strcpy(hold, mline+WORDLEN); X return; X } X} X Xrevise(word, num) Xchar *word; Xint num; X/* X *.... revise candidate lists. X */ X{ X int n; X X for (n=0; n<nbad; n++) X if (inter(bad[n], word) != num) X bad[n--] = bad[--nbad]; X for (n=0; n<ngood; n++) X if (inter(good[n], word) != num) { X bad[nbad++] = good[n]; X good[n--] = good[--ngood]; X } X if (diagn) printf(" w%5d%5d\n", ngood, nbad); X} END_OF_FILE if test 6590 -ne `wc -c <'jotto.c'`; then echo shar: \"'jotto.c'\" unpacked with wrong size! fi # end of 'jotto.c' fi if test -f 'jotto.d' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'jotto.d'\" else echo shar: Extracting \"'jotto.d'\" \(16549 characters\) sed "s/^X//" >'jotto.d' <<'END_OF_FILE' Xabcehbeach Xabcelcable Xabcerbrace Xabchtbatch Xabcincabin Xabcisbasic Xabcklblack Xabclnblanc Xabcnobacon Xabcorcarobcobra Xabcrtbract Xabcsuscuba Xabdegbadge Xabdeiabide Xabdelblade Xabdeoabodeadobe Xabderbeardbreaddebar Xabdeybayedbeady Xabdirbraidrabid Xabdlnbland Xabdlybaldy Xabdnrbrand Xabdnybandy Xabdorboardbroad Xabdwybawdy Xabeflfable Xabeglgable Xabegnbegan Xabegrbarge Xabehtbathe Xabeklbleak Xabekrbrakebreak Xabelmambleblame Xabelrblare Xabelssable Xabeltbleattable Xabelzblaze Xabemnbeman Xabemramberbream Xabemymaybe Xabeovabove Xabertbater Xabervbrave Xaberzzebra Xabestbastebeast Xabesuabuse Xabeuxbeaux Xabhithabit Xabhrsbrash Xabiktbatik Xabilsbasil Xabinrbrain Xabinsbasin Xabiotbiota Xabjnobanjo Xabklnblank Xabklybalky Xablmualbum Xablmybalmy Xablorlobar Xablotbloat Xablrwbrawl Xablstblast Xablwybylaw Xabmruumbra Xabnorbaron Xabnotbaton Xabnrtbrant Xabnruurban Xabortabort Xaborvbravo Xaborxborax Xaboryboyar Xabostboast Xabotuabout Xabouybayou Xacdeldecal Xacdendance Xacdercaredcedarcadre Xacdetcadet Xacdeydecay Xacdhrchard Xacdiracrid Xacditdicta Xacdlsscald Xacdnycandy Xacdtuducat Xacefhchafe Xacefrfarce Xaceftfacet Xacegrgrace Xacegycagey Xacehlleach Xacehpcheappeach Xacehrreach Xacehschase Xacehtcheatteach Xacekrcreak Xacelmcamel Xacelncleanlance Xacelpplace Xacelrclear Xacelsscale Xaceltcleateclat Xacelvcalve Xacemocameo Xacemrcream Xacenocanoeocean Xacenppecan Xacenrcarnecrane Xacentenact Xaceprcaper Xacepsspace Xacersscare Xacertcratecaretcatertracecarte Xacervcarvecrave Xacerzcraze Xacestcaste Xacesucausesauce Xacetuacute Xacetxexact Xacfklflack Xacflofocal Xacfnrfranc Xacfnyfancy Xacfotfacto Xacfrsscarf Xacfrtcraft Xacgimmagic Xacgircigar Xacglnclang Xacgorcargo Xachinchainchina Xachirchair Xachklchalk Xachksshack Xachkwwhack Xachlrlarch Xachlsclash Xachltlatch Xachmomacho Xachmpchamp Xachmrcharmmarch Xachmschasm Xachmtmatch Xachnrranch Xachntchant Xachoppoach Xachorroach Xachoschaos Xachovhavoc Xachprparch Xachptpatch Xachrscrash Xachrtchart Xachtwwatch Xachtyyacht Xacilmclaim Xacilvcavil Xacimnmanic Xacinppanic Xacinrcairn Xacintantic Xaciruauriccuria Xacirvvicar Xacklnclank Xacklocloak Xacklsslack Xacklucaulk Xackmssmack Xacknrcrank Xacknssnack Xackorcroak Xackququack Xackrttrack Xackrwwrack Xackststack Xacktytacky Xackwywacky Xaclmpclamp Xaclorcarolcoral Xaclotoctal Xaclovvocal Xaclozcolza Xaclpsclaspscalp Xaclrwcrawl Xacmormacro Xacmprcramp Xacmpsscamp Xacmrsscram Xacmsusumac Xacnoracorn Xacnotcanto Xacnstscant Xacoprcopra Xacortactor Xacostcoast Xacprsscrap Xacpsuscaup Xacrsyscary Xacryzcrazy Xacsuysaucy Xadeglglade Xadegrgrade Xadegsdegas Xadehrheard Xadehsshade Xadehtdeath Xadehyheady Xadeilideal Xadeimamidemedia Xadeisaside Xadeiuadieu Xadeknkneadnaked Xadekrdrake Xadelmmedal Xadelnladen Xadelppedalplead Xadelralder Xadeltdealtdelta Xadelydelay Xademnamend Xademrdream Xadenoanode Xadenssedan Xadeoradore Xadeprdrapepadre Xadepsspade Xadeptadept Xadertdatertradetread Xaderyready Xadeststead Xadfrtdraft Xadfrufraud Xadfrwdwarf Xadglngland Xadgmodogma Xadgnrgrand Xadgruguard Xadguygaudy Xadhipaphid Xadhnyhandy Xadhorhoard Xadhrsshard Xadhryhardyhydra Xadhsyshady Xadilpplaid Xadilttidal Xadilvvalid Xadimtadmit Xadimxadmix Xadinrdrainnadir Xadinvdivan Xadioppodia Xadiorradio Xadiouaudio Xadiovavoid Xadiprrapid Xadirttriad Xadirxradix Xadirydairydiary Xadiststaid Xadisydaisy Xadituaudit Xaditvdavit Xadknrdrank Xadlmomodal Xadlnonodal Xadloualoud Xadlrwdrawl Xadltuadult Xadmnomonad Xadmtudatum Xadnoradornradon Xadnrwdrawn Xadnryrandy Xadnststand Xadnsysandy Xadntudaunt Xadoptadopt Xadotytoadytoday Xadqsusquad Xadrtytardy Xaefhssheaf Xaefirafire Xaefklflake Xaefkrfreak Xaeflmflame Xaeflrflare Xaeflsfalse Xaefltfetal Xaeflyleafy Xaefmrframe Xaefovfovea Xaefrwwafer Xaefryfaery Xaefstfeast Xaegilagile Xaegimimage Xaegisaegis Xaeglmgleam Xaeglnangelangleglean Xaeglrglarelagerlargeregal Xaeglvgavel Xaeglzglaze Xaegmnmange Xaegmoomega Xaegnoagone Xaegnrangerrange Xaegntagent Xaegprgrape Xaegrtgrategreat Xaegruargueauger Xaegrvgrave Xaegrzgraze Xaegststage Xaegsuusage Xaeguvvague Xaeguzgauze Xaehksshake Xaehlpaleph Xaehlsleashshale Xaehltlathe Xaehlvhalve Xaehlwwhale Xaehlzhazel Xaehmrharem Xaehmsshame Xaehnsashen Xaehntneath Xaehnvhaven Xaehnyhyena Xaehpsphaseshape Xaehrsshareshear Xaehrtearthhaterheart Xaehsthaste Xaehsvshave Xaehtwwheat Xaehvyheavy Xaeiklalike Xaeilnalien Xaeilsaisle Xaeilvalive Xaeinsanise Xaeinvnaive Xaeipssepia Xaeirsariseraise Xaeirtirate Xaeitvvitae Xaeivwwaive Xaeklnankle Xaeklsslake Xaeklyleaky Xaeknooaken Xaeknssnakesneak Xaeknttaken Xaeknwwaken Xaekowawoke Xaekpsspeak Xaekpypeaky Xaekququake Xaekrwwreak Xaekstskatestakesteak Xaekswaskew Xaektwtweak Xaelmpamplemaple Xaelmrrealm Xaelmtmetal Xaelmymealy Xaelnoalone Xaelnppanelpenalplane Xaelnrlearnrenal Xaelnvnavelvenal Xaelprpearl Xaelpslapsesepal Xaelptleaptpetalplatepleat Xaelquequal Xaelrtalertalterlater Xaelrvravel Xaelrxrelax Xaelryrelay Xaelstleastslatestalesteal Xaelsvsalveslave Xaeltvvalet Xaeltxexaltlatex Xaeluvvalue Xaemnrreman Xaemnsmanse Xaemntmeant Xaemrsmasersmear Xaemrtmater Xaemststeam Xaemsuamuse Xaemsyseamy Xaemtymeaty Xaemuvmauve Xaenotatone Xaenpsaspen Xaenrssnare Xaenrvraven Xaenryyearn Xaenwxwaxen Xaeopropera Xaeorsarose Xaeortorate Xaeotvovate Xaeprsparsesparespear Xaeprtpatertaper Xaepstpasteseptaspate Xaepsupause Xaerstasterstare Xaersvversa Xaerswswear Xaertvavert Xaertwwater Xaertxextra Xaeruzazure Xaerwyweary Xaestusaute Xaestvstave Xaestwsweatwaste Xaestyyeast Xaesuvsuave Xafglufugal Xafgrtgraft Xafhitfaith Xafhlsflash Xafhrwwharf Xafhstshaft Xafilnfinal Xafilrflairfrail Xafinrinfra Xafintfaint Xafiryfairy Xafklnflank Xafklsflask Xafklyflaky Xafknrfrank Xafkrtkraft Xaflorflora Xaflotaloftfloat Xaflsusulfa Xafltufault Xafluwawful Xafmoyfoamy Xafnsusnafu Xaforyforay Xaghlulaugh Xaghnohogan Xaghnsgnash Xaghoyhoagy Xaghprgraph Xagilnalign Xagilrgrail Xagimngamin Xagimoamigo Xagimssigma Xaginrgrain Xagintgiant Xagkwygawky Xaglnoalong Xaglnrgnarl Xaglnsslang Xaglotgloat Xagmnoamong Xagmtugamut Xagnorargongroanorgan Xagnottango Xagnouguano Xagnoyagony Xagnrtgrant Xagnryangryrangy Xagnstangst Xagntugaunt Xagntytangy Xagortargotgatorgroat Xagprsgrasp Xagrsusugar Xagrvygravy Xagstystagy Xahikuhaiku Xahiryhairy Xahknsshank Xahkntthank Xahkosshako Xahkrsshark Xahksyshaky Xahlosshoal Xahlotloath Xahlpyphyla Xahlswshawl Xahmnuhuman Xahmnymynah Xahmrsmarsh Xahntuhaunt Xahorttorah Xahprssharp Xahpststaph Xahqsuquash Xahrsttrash Xahrtwwrath Xahstwswath Xahstyhasty Xailnpplain Xailnsslainsnail Xailnvanvil Xailnyinlay Xailovviola Xailququail Xailrttrailtrial Xailrvrival Xailtvvital Xailtylaity Xaimnoamino Xaimoxaxiom Xaimprprima Xaimswswami Xaimtyamity Xainoppiano Xainptpaintinapt Xainrttrain Xainryrainy Xainstsaintsatinstain Xainswswain Xaintwtwain Xaioptpatio Xaiortratio Xaiprttapir Xaipsttapis Xaiqsuquasi Xairststair Xaistvvista Xaistwwaist Xajmormajor Xajntujunta Xaklnpplank Xaklnylanky Xakloppolka Xaklststalk Xakltytalky Xaknprprank Xaknrssnark Xaknststank Xaknswswank Xakprsspark Xakqruquark Xakrststark Xakrtukraut Xalmormolarmoral Xalmossomal Xalmoyloamy Xalmpsplasmpsalm Xalmpyamply Xalmququalm Xalmrumural Xalmrymylar Xalnossalon Xalnottalontonal Xalnptplant Xalnrssnarl Xalnrulunar Xalnstslant Xaloprpolar Xalorssolar Xaloryroyal Xalosvsalvo Xalpstsplat Xalpsypalsysplay Xalpuylayup Xalrtuultra Xalrtwtrawl Xalstulatustalus Xalstysalty Xaltuvvault Xaltwzwaltz Xamnormanor Xamnosmason Xamnowwoman Xamortamort Xamorymayor Xamprttramp Xampststamp Xampswswamp Xamrstsmart Xamrswswarm Xamstymayst Xanoprapron Xanorsarsonsonar Xanpswspawn Xanpsypansy Xanptypanty Xanruyunary Xanstynastytansy Xantwytawny Xaopsysoapy Xaoptztopaz Xaoqtuquota Xaorstroast Xaorvyovary Xaosvysavoy Xaprststrap Xaprsusupra Xaprsyspray Xaprtyparty Xapstypasty Xaqrtuquart Xaqstusquat Xaqsuwsquaw Xarstwstrawswart Xarstysatyrstray Xartwywarty Xbcehlbelch Xbcehnbench Xbceipbicep Xbchirbirch Xbchitbitch Xbchnubunch Xbchotbotch Xbchtubutch Xbcikrbrick Xbcilmclimb Xbciorboric Xbckloblock Xbcmrucrumb Xbcrsuscrub Xbdegubudgedebug Xbdeimbedim Xbdeirbride Xbdeitdebit Xbdelnblend Xbderyderby Xbdetudebut Xbdilnblind Xbdilubuild Xbdlnoblond Xbdnoubound Xbdnuybundy Xbdotudoubt Xbefgobefog Xbefirbrief Xbefitbefit Xbegilbilge Xbeginbeginbeingbinge Xbegloglobe Xbeglubuglebulge Xbegnubegun Xbegoybogey Xbehrtberth Xbeimuimbue Xbeinrbrine Xbeiowbowie Xbeirttribe Xbejotobjet Xbeklobloke Xbekorbroke Xbelnonoble Xbelowbelowbowelelbow Xbelryberyl Xbelstblest Xbeltubluet Xbemruumber Xbenorborne Xbenoyebony Xbenozbonze Xbeoprprobe Xbeorssober Xbeotubuteo Xbertubruterebutburet Xberuybuyer Xbghoubough Xbginobingo Xbginrbring Xbgiotbigot Xbgmougumbo Xbgosubogus Xbhirtbirth Xbhlsublush Xbhmtuthumb Xbhortbroththrob Xbhrsubrushshrub Xbhsuybushy Xbiklnblink Xbiknrbrink Xbikrsbrisk Xbilmolimbo Xbilmpblimp Xbilorbroil Xbilsysibyl Xbiltubuilt Xbiltzblitz Xbinorrobin Xbinosbison Xbinrybriny Xbiortorbit Xbirtubruit Xbjmoujumbo Xbkluybulky Xblmpuplumb Xblnowblown Xblntublunt Xblrtublurt Xblruyburly Xbltuybutyl Xbmouxbuxom Xbnorubourn Xbnorwbrown Xbnosubonus Xbnrtuburntbrunt Xbrstuburst Xcdehichide Xcdeimmedic Xcdeircidercrieddicerriced Xcdeitedict Xcdelodolce Xcdenudunce Xcdeorcredodecor Xcdeoudouce Xcderucrudecured Xcderydecry Xcdhilchild Xcdhitditch Xcdhorchord Xcdilulucid Xcdlosscold Xcdloucloudcould Xcdorwcrowd Xcefhichieffiche Xcefhtfetch Xcefklfleck Xcefltcleft Xceforforce Xcegkogecko Xcehimchime Xcehinnichechine Xcehitethic Xcehivchive Xcehkochoke Xcehktketch Xcehopepoch Xcehorchore Xcehoschose Xcehprperch Xcehrtretchchert Xcehstchest Xcehtuchute Xcehtvvetch Xcehvychevy Xceijujuice Xceilmclime Xceilrrelic Xceilsslice Xceimnmince Xceimrcrime Xceinssince Xceinwwince Xceiovvoice Xceiprprice Xceipsspice Xceirucurie Xceitvcivetevict Xceitwtwice Xceklrclerk Xcekpsspeck Xcekrwwreck Xcelnoclone Xcelnuuncle Xcelosclose Xcelovclove Xcelrucruellucreulcer Xcemotcomet Xcemrymercy Xcemtutecum Xcenorcrone Xcenouounce Xcenovcoven Xcenoyconey Xcenozcozen Xcenstscent Xceopsscope Xceopucoupe Xceorsscore Xceorvcover Xceostcoset Xceotvcovet Xceprtcrept Xcerstcrest Xcersucurse Xcerswscrew Xcertutruce Xceruvcurve Xcfhilfilch Xcfhinfinch Xcfiklflick Xcfkloflock Xcfkorfrock Xcfortcroft Xcfosufocus Xcghoucough Xcgilncling Xcgilologic Xcglnuclung Xchiknchink Xchiktthick Xchilmmilch Xchilzzilch Xchimoohmic Xchinppinch Xchinwwinch Xchiorchoir Xchiprchirp Xchiptpitch Xchitwwitch Xchknuchunk Xchkosshock Xchksushuck Xchlmumulch Xchlnulunch Xchlnylynch Xchlotcloth Xchlrulurch Xchmnumunch Xchmopchomp Xchmpuchump Xchnotnotch Xchnpupunch Xchnruchurn Xchoprporch Xchopupouch Xchorttorch Xchotutouch Xchouvvouch Xchpsypsych Xchrsucrush Xcijuyjuicy Xciklnclink Xciklsslick Xciknssnick Xcikprprick Xcikpypicky Xcikququick Xcikrttrick Xcikststick Xcilrylyric Xcimnucumin Xcimormicro Xcimprcrimp Xcimrsscrim Xcimsumusic Xcinosscionsonic Xcinottonic Xcinruincurrunic Xcintutunic Xcioptoptictopic Xciorucurio Xcioststoic Xciotxtoxic Xciprscrisp Xcipsyspicy Xciptytypic Xcjnoujunco Xcklpupluck Xckluylucky Xckoryrocky Xckoststock Xckrtutruck Xckstustuck Xclmopclomp Xclmpuclump Xclmtumulct Xclnowclown Xclosulocus Xcloswscowl Xclotuclout Xcmprucrump Xcnorsscorn Xcnorwcrown Xcnorycornycrony Xcnotucount Xcoprscorps Xcopuycoypu Xcorsuscour Xcortucourt Xcorwycowry Xcostuscout Xcprtycrypt Xcrstucrust Xdefgufudge Xdefilfield Xdefinfiend Xdefirfried Xdefitfetid Xdefiydeifyedify Xdeghohodge Xdegilglide Xdegimmidge Xdegindeign Xdegirdirgeridge Xdegiuguide Xdegjujudge Xdeglolodge Xdegluglued Xdegmudegum Xdegnunudge Xdegoppodge Xdehisshied Xdehorhorde Xdehptdepth Xdehrsshred Xdeiksskied Xdeilssidleslide Xdeilttilde Xdeilvdevil Xdeilwwield Xdeilyyield Xdeimtdemit Xdeinwwiden Xdeinxindex Xdeiovvideo Xdeioxoxide Xdeiprpride Xdeipttepid Xdeirttried Xdeirvdrive Xdeirwweird Xdeitydeitydiety Xdelmomodel Xdelnoolden Xdelowdowel Xdeloyyodel Xdelsudulse Xdeltvveldt Xdeltwdwelt Xdemnodemon Xdemrudemur Xdenordrone Xdenowendow Xdenozdozen Xdenpsspend Xdenpuupend Xdenrttrend Xdenruunder Xdeoptdepot Xdeorvdrove Xdeosudouse Xdfilufluid Xdfirtdrift Xdfjorfjord Xdfnoufound Xdghoudough Xdgiluguild Xdginodingo Xdginrgrind Xdginydingydying Xdgorugourd Xdhimuhumid Xdhirtthird Xdhitwwidth Xdhnouhound Xdhoryhydro Xdhowyhowdy Xdiknrdrink Xdilossolid Xdilrulurid Xdimouodium Xdimstmidst Xdinwywindy Xdiqsusquid Xdirtydirty Xdiyzzdizzy Xdknrudrunk Xdksuydusky Xdlmoumould Xdlorwworld Xdlouwwould Xdmnoumound Xdmpuydumpy Xdnopupound Xdnoruround Xdnorwdrown Xdnosusound Xdnosysynod Xdnouwwound Xdopruproud Xdorswsword Xdorwydowryrowdywordy Xdstuydustystudy Xefginfeign Xefgirgrief Xefgorforge Xefhitthief Xefhlsfleshshelf Xefhrsfresh Xefhtyhefty Xefiknknife Xefilnelfin Xefilrflierrifle Xefiltfilet Xefinrinfer Xefintfeint Xefirsserif Xefiryfiery Xefklufluke Xeflnofelon Xeflryflyer Xefltuflute Xefltylefty Xefmrufemur Xefnorfreon Xefnotoften Xefortforte Xeforyfoyer Xeforzfroze Xefruzfurze Xefstufetus Xeghinhinge Xeghiteight Xeghiwweigh Xegiluguile Xegimrgrime Xeginrreign Xeginssinge Xeginttinge Xeginvgiven Xegiprgripe Xegirttiger Xegisuguise Xeglnulunge Xeglovglove Xeglruluger Xeglsugules Xegluygluey Xegmnognome Xegnsugenus Xegoprgrope Xegorsgorse Xegoruroguerouge Xegorvgrove Xegouvvogue Xegprupurge Xegrsusurge Xegstuguest Xehikssheik Xehiltlithe Xehilwwhile Xehilxhelix Xehinsshine Xehintthine Xehinwwhine Xehirsshire Xehirttheir Xehitwwhitewithe Xehklwwhelk Xehlmwwhelm Xehlothotel Xehlovhovel Xehlowwhole Xehlpwwhelp Xehlswwelsh Xehltyethyl Xehmnyhymen Xehmrurheum Xehmryrhyme Xehnopphone Xehnorheron Xehnosshone Xehnoyhoney Xehnryhenry Xehorshorseshore Xehortother Xehorvhover Xehorwwhore Xehostethosthose Xehosuhouse Xehosvshove Xehoswwhose Xehrsuusher Xehrswshrew Xehrtwthrew Xehrtzhertz Xeiklnliken Xeikpsspike Xeilmpimpel Xeilmsslimesmile Xeilmuileum Xeilntinlet Xeilovolive Xeilprperil Xeilpxpixel Xeilrvlivervilerlivre Xeilststile Xeiltuutile Xeimormoire Xeimovmovie Xeimprprime Xeimrsmiser Xeimrtmeritmitreremittimer Xeimtssmite Xeinosnoise Xeinprripen Xeinpssnipespine Xeinptinept Xeinrsresinrinserisensiren Xeinrtinertinter Xeinruinureurine Xeinrvriven Xeinstinsetstein Xeinswsinewswine Xeintuunite Xeintwtwine Xeinvxvixen Xeiopspoise Xeiorsosier Xeipquequippique Xeiprsspire Xeiprtpetritripe Xeiprzprize Xeipstspite Xeipswswipe Xeiptypiety Xeiqtuquietquite Xeirtvrivet Xeirtwwrite Xeistusuite Xeistxexist Xejkryjerky Xejloujoule Xejlpujulep Xejnoyenjoy Xeklntknelt Xekloyyokel Xekmossmoke Xeknottoken Xekopsspoke Xekoststoke Xekpryperky Xelmnolemonmelonmonel Xelmnulumen Xelmormorel Xelmotmotel Xelmpuplume Xelmstsmelt Xelmxyxylem Xelnovnovel Xelopsslope Xelorwlower Xeloststole Xelosulouse Xelosvsolve Xelotwtowel Xelotxextol Xelouzouzel Xelovwvowel Xelpstslept Xelpsupulse Xelstwswelt Xelstystyle Xeltuxexult Xemnosmeson Xemnotmonte Xemnovvenom Xemnowwomen Xemnoymoney Xemnrurumen Xemopttempo Xemortmetro Xemosumouse Xemprssperm Xempsuspume Xemptyempty Xemrsuserum Xenoprprone Xenopypeony Xenorssnoresenor Xenorttenor Xenostonsetstone Xenovwwoven Xenovyenvoy Xenpruprune Xenpstspent Xenrststern Xenrsunurse Xenrtyentry Xeoprsprosespore Xeoprvprove Xeoprwpower Xeopstestop Xeopsypoesyposey Xeopxyepoxy Xeoqtuquote Xeorststore Xeorsurouse Xeorsvservo Xeorswsworeworse Xeorturoute Xeortvovert Xeortwtowerwrote Xeostvstove Xeprsupursespruesuper Xeprtuerupt Xeprxyprexy Xepstusetupupset Xepstwswept Xeqruyquery Xeqstuquest Xerstwwrest Xestyzzesty Xfghitfight Xfgilnfling Xfginufungi Xfglnuflung Xfhiltfilth Xfhistshift Xfhisyfishy Xfhlsuflush Xfhortforthfroth Xfilmyfilmy Xfilntflint Xfilrtflirt Xfimotmotif Xfinuyunify Xfiostfoist Xfirstfirst Xfirtufruit Xfistwswift Xflnowflown Xfloruflour Xflotuflout Xflotylofty Xfmoruforum Xfnortfront Xfnorwfrown Xfnotufount Xforstfrost Xfortyforty Xfstuyfusty Xghiltlight Xghimtmight Xghintnightthing Xghinyhying Xghirtgirthright Xghistsight Xghloughoul Xghlpyglyph Xghmoumugho Xghnotthong Xghorurough Xghostghost Xghotuoughttough Xghrsushrug Xgilnolingo Xgilnssling Xgilntglint Xgilnylying Xgiltuguilt Xgimpygimpy Xginorgroin Xginotingot Xginowowing Xginrwwring Xginststing Xginswswing Xgintytying Xginvyvying Xgiprssprig Xgirstgrist Xgknuygunky Xglnsuslung Xglorwgrowl Xgloryglory Xgnoprprong Xgnorwgrownwrong Xgnouyyoung Xgnrtugrunt Xgnstustung Xgnsuwswung Xgoprugroup Xgortugrout Xgostugusto Xgstuygustygutsy Xhikntthink Xhikrsshirk Xhikswwhisk Xhilmuhilum Xhilrwwhirl Xhimrtmirth Xhimstsmith Xhinorrhino Xhinsyshiny Xhiptypithy Xhirstshirt Xhistxsixth Xhiswywishy Xhitwywithy Xhksuyhusky Xhlmpylymph Xhlopxphlox Xhlostsloth Xhlpsuplush Xhmnotmonth Xhmnpynymph Xhmotumouth Xhmptuthump Xhmrtuthrum Xhmsuymushy Xhnopyphony Xhnortnorththorn Xhnoryhorny Xhnoswshown Xhnstushunt Xhorstshort Xhortwthrowworth Xhostushoutsouth Xhoswyshowy Xhotuyyouth Xhrtuyhurty Xijnotjoint Xiklmymilky Xiklsysilky Xikmpsskimp Xikmrssmirk Xiknststink Xikpsyspiky Xikqruquirk Xikrstskirt Xikrsyrisky Xilmsyslimy Xilmtumulti Xilntuuntil Xilnvyvinyl Xilopsspoilpolis Xiloptpilot Xilpstspiltsplit Xilptutulip Xilqtuquilt Xilrswswirl Xilrtwtwirl Xilstysiltystyli Ximnorminor Ximnotminot Ximnsuminus Ximopuopium Ximostmoist Ximotvvomit Ximprsprism Ximpuxmixup Ximstymisty Xinoptpintopoint Xinoryirony Xinosynoisy Xinotxtoxin Xinprtprint Xinpsyspiny Xinptuinput Xinqtuquint Xintuyunity Xiopstposit Xiopsupious Xioptvpivot Xiorsvvisor Xiortvvitro Xiorvyivory Xiprststrip Xiprvyprivy Xipstytipsy Xipstzspitz Xipswywispy Xiqrtuquirt Xirstwwrist Xirsuvvirus Xistxysixty Xjknuyjunky Xjlowyjowly Xjmpuyjumpy Xjostujoust Xklnpuplunk Xklnruknurl Xklsuysulky Xkmosysmoky Xkmruymurky Xknpsuspunk Xknpuypunky Xknrtutrunk Xknstustunk Xkorststork Xlmpsuslump Xlmpuylumpy Xloprwprowl Xlostulotus Xlosuylousy Xlotyzzloty Xlprsuslurp Xlrtuytruly Xlstuylusty Xmnorumourn Xmnotumount Xmopststomp Xmorststorm Xmorwywormy Xmosuymousy Xmprtutrump Xmpstustump Xmrstustrum Xmstuymusty Xnorstsnort Xnorswsworn Xnostusnout Xnostystony Xnoswysnowy Xnprsuspurn Xnrtuyrunty Xoprstsportstrop Xoprxyproxy Xopstuspout Xorstutorus Xorstwworst Xorstystory Xprstuspurt Xprsuysyrup Xrstuyrusty END_OF_FILE if test 16549 -ne `wc -c <'jotto.d'`; then echo shar: \"'jotto.d'\" unpacked with wrong size! fi # end of 'jotto.d' fi if test -f 'jotto.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'jotto.h'\" else echo shar: Extracting \"'jotto.h'\" \(105 characters\) sed "s/^X//" >'jotto.h' <<'END_OF_FILE' X/* X * jotto.h - definitions for jotto. X */ X X#define MAXGUESS 25 X#define WORDLEN 5 X#define DICTLEN 1900 END_OF_FILE if test 105 -ne `wc -c <'jotto.h'`; then echo shar: \"'jotto.h'\" unpacked with wrong size! fi # end of 'jotto.h' fi if test -f 'jsumm.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'jsumm.c'\" else echo shar: Extracting \"'jsumm.c'\" \(281 characters\) sed "s/^X//" >'jsumm.c' <<'END_OF_FILE' X/* X * jsumm - list the answers given. X */ X X#include "jotto.h" X Xextern char uguess[MAXGUESS][WORDLEN+1]; Xextern int uguessc, iresp[MAXGUESS]; X Xjsumm() X{ X int i; X X if (!uguessc) { X printf(" no guesses yet.\n"); X return; X } X for (i=0; i<uguessc; i++) answer(uguess[i], iresp[i]); X} END_OF_FILE if test 281 -ne `wc -c <'jsumm.c'`; then echo shar: \"'jsumm.c'\" unpacked with wrong size! fi # end of 'jsumm.c' fi if test -f 'legal.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'legal.c'\" else echo shar: Extracting \"'legal.c'\" \(344 characters\) sed "s/^X//" >'legal.c' <<'END_OF_FILE' X/* X * legal X */ X X#include <ctype.h> X#ifdef BSD X#include <strings.h> X#else X#include <string.h> X#endif X#include "jotto.h" X Xint Xlegal(w) Xchar *w; X{ X char *ww, *xx; X X if (strlen(w) != WORDLEN) return 0; X for (ww=w; *ww; ww++) if (!islower(*ww)) return 0; X for (ww=w; ww[1]; ww++) for (xx=ww+1; xx[0]; xx++) X if (*ww == *xx) return 0; X return 1; X} END_OF_FILE if test 344 -ne `wc -c <'legal.c'`; then echo shar: \"'legal.c'\" unpacked with wrong size! fi # end of 'legal.c' fi if test -f 'load.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'load.c'\" else echo shar: Extracting \"'load.c'\" \(387 characters\) sed "s/^X//" >'load.c' <<'END_OF_FILE' X/* X * load X */ X X#include <stdio.h> X#ifdef BSD X#include <strings.h> X#else X#include <string.h> X#endif X#include "jotto.h" X Xextern char dict[DICTLEN][WORDLEN*2+1]; Xextern int ndict; Xextern FILE *tape4; X Xload() X{ X char lline[80+1]; X X rewind(tape4); X ndict=0; X while (fgets(lline, 80, tape4)) { X strncpy(dict[ndict], lline, WORDLEN*2); X dict[ndict++][WORDLEN*2] = '\0'; X } X rewind(tape4); X} END_OF_FILE if test 387 -ne `wc -c <'load.c'`; then echo shar: \"'load.c'\" unpacked with wrong size! fi # end of 'load.c' fi if test -f 'ord.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ord.c'\" else echo shar: Extracting \"'ord.c'\" \(177 characters\) sed "s/^X//" >'ord.c' <<'END_OF_FILE' X/* X * ord X */ X Xchar * Xord(n) Xint n; X{ X if (n/10 == 1) return "th"; X switch(n%10) { X case 1: return "st"; X case 2: return "nd"; X case 3: return "rd"; X default: return "th"; X } X} END_OF_FILE if test 177 -ne `wc -c <'ord.c'`; then echo shar: \"'ord.c'\" unpacked with wrong size! fi # end of 'ord.c' fi if test -f 'subs.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'subs.c'\" else echo shar: Extracting \"'subs.c'\" \(432 characters\) sed "s/^X//" >'subs.c' <<'END_OF_FILE' X/* X * subroutines X * X * These are worth optimizing in assembly language. X */ X X#include "jotto.h" X Xint Xinter(a,b) Xchar *a, *b; X{ X int retval; X char *ap, *bp; X X retval = 0; X for (ap=a; ap<a+WORDLEN; ap++) X for (bp=b; bp<b+WORDLEN; bp++) if (*ap == *bp) { X retval++; X break; X } X return retval; X} X Xint Xblog(n) Xregister int n; X{ X register int retval; X if (!n--) return 0; X retval = 0; X while (n) {n>>=1; retval++;} X return retval; X} END_OF_FILE if test 432 -ne `wc -c <'subs.c'`; then echo shar: \"'subs.c'\" unpacked with wrong size! fi # end of 'subs.c' fi echo shar: End of archive 1 \(of 1\). cp /dev/null ark1isdone MISSING="" for I in 1 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have the archive. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0