10 REM *************************** 11 REM * * 12 REM * WORDSEARCH PUZZLE MAKER * 13 REM * * 14 REM * CONVERTED BY * 15 REM * * 16 REM * J.HAMMETT FOR THE CBM64 * 17 REM * * 18 REM * --- MAY 1984 --- * 19 REM * * 20 REM *************************** 40 RESTORE:FORN=1TO8:READUC(N),UD(N):NEXT 50 DIMAR$(20),WD$(250):S$="****************************************************" 70 SP$=" ":Q$=CHR$(34) 80 SL$="" 90 POKE53280,0:POKE53281,0:PRINT"[159]":GOSUB11000:GOSUB13000 100 BX=AC:BY=D 110 GOSUB14000:FORN=1TOD:PRINTLEFT$(SL$,OY+N)SPC(OX)AR$(N):NEXT 130 W%=W%+1:GOSUB16000:IFKY$="_"THEN1000 140 GOSUB3000:GOTO110 170 GOSUB14000:FORN=1TOD:PRINTLEFT$(SL$,OY+N)SPC(OX)AR$(N):NEXT 175 PRINTSL$SP$SP$SL$"[211]ELECT YOUR OPTION [211][146]AVE, [208][146]RINT OR [209][146]UIT" 180 GOSUB12040:IFA$="Q"ORA$="[209]"THENPRINT"[147]":END 184 IFA$="S"ORA$="[211]"THEN4000 185 IFA$="P"ORA$="[208]"THEN6000 190 GOTO180 200 REM *** DELAY LOOP (ABOUT 1 SECOND) 210 FORW=1TO1000:NEXT:RETURN 1000 REM *** END OF INPUT? 1010 PRINTSL$SP$SP$SL$"[193]RE YOU SURE THAT'S ALL THE WORDS? ([217]/[206])"; 1020 GETA$:IFA$="N"ORA$="[206]"THENW%=W%-1:GOTO130 1030 IFA$<>"Y"ANDA$<>"[217]"THEN1020 1035 PRINTSL$SP$SP$SL$" [208]LEASE WAIT - FILLING IN SPACES." 1040 REM *** FILL IN SPACES 1050 FORY=1TOD:AR$(Y)=" "+AR$(Y)+" ":FORX=2TOAC+1 1060 IFMID$(AR$(Y),X,1)="*"THENGOSUB2000 1070 NEXT:AR$(Y)=MID$(AR$(Y),2,AC):NEXT 1080 FORN=1TOD:PRINTLEFT$(SL$,OY+N)SPC(OX)AR$(N):NEXT:GOTO170 2000 REM *** FILL SPACE 2010 AR$(Y)=LEFT$(AR$(Y),X-1)+CHR$((RND(1)*26)+193)+MID$(AR$(Y),X+1):RETURN 3000 REM *** ACTUALLY HIDE WORD 3010 ZZ=0:PRINTSL$SP$SP$SL$SPC(5)"[200]IDING "Q$KY$Q$;:WD$(W%)=KY$ 3020 ZZ=ZZ+1:Z=0:X=INT(RND(1)*AC)+1:Y=INT(RND(1)*D)+1:IFZZ>AC+DTHEN3200 3025 Z=Z+1:IFZ>15THEN3020 3030 Z=Z+1:IFZ>15THEN3020 3035 DI=INT(RND(1)*8)+1:IFLEN(KY$)>ACANDDI<>5ANDDI<>1THEN3035 3036 IFLEN(KY$)>DANDDI<>7ANDDI<>3THEN3035 3040 XX=X:YY=Y:F%=0:L=1 3050 A$=MID$(AR$(YY),XX,1):B$=MID$(KY$,L,1) 3060 IFA$<>"*"ANDA$<>B$THENF%=1 3070 XX=XX+UC(DI):YY=YY+UD(DI) 3080 IFXX<1ORXX>ACTHENF%=1 3090 IFYY<1ORYY>DTHENF%=1 3100 L=L+1:IFL<=LEN(KY$)ANDF%=0THEN3050 3110 IFF%=1THEN3030 3120 FORL=1TOLEN(KY$):AR$(Y)=" "+AR$(Y)+" " 3130 AR$(Y)=LEFT$(AR$(Y),X)+MID$(KY$,L,1)+MID$(AR$(Y),X+2) 3140 AR$(Y)=MID$(AR$(Y),2,AC) 3150 X=X+UC(DI):Y=Y+UD(DI):NEXT:RETURN 3200 REM *** CANNOT HIDE WORD!! 3210 PRINTSL$SP$SP$SL$"[201]'M SORRY, BUT [201] CANNOT FIND ANYWHERE TOHIDE ";:W%=W%-1 3220 PRINTQ$KY$Q$SL$;:GOTO200 4000 REM *** SAVE PUZZLE 4010 PRINTSL$SP$SP$SP$SL$" [211]AVE TO [212][146]APE, [196][146]ISK DRIVE OR [210][146]ETURN"; 4020 GOSUB12040:IFA$="T"ORA$="[212]"THENDN=1:SA=1:GOTO4100 4030 IFA$="D"ORA$="[196]"THENDN=8:SA=8:GOTO4100 4040 IFA$="R"ORA$="[210]"THEN170 4050 GOTO4020 4100 REM *** SAVE 4110 GOSUB12000:PRINT" [208]LEASE [197]NTER FILENAME TO SAVE":T=D:D=16:GOSUB16005 4115 IFDN=8THENKY$=KY$+",S,W":OPEN1,8,15,"I0":GOSUB5000:IFER<>0THEN4150 4120 D=T:OPEN8,DN,SA,KY$:GOSUB5000:IFER<>0THEN4150 4130 PRINT#8,D;CHR$(13);AC;CHR$(13);:GOSUB5000:IFER<>0THEN4150 4140 FORN=1TOD:PRINT#8,AR$(N);CHR$(13);:GOSUB5000:IFER<>0THEN4150 4145 NEXT 4150 CLOSE8:IFDN=8THENCLOSE1 4160 GOSUB12000:GOTO170 5000 REM *** DISK-ERROR CHECK 5010 IFDN<>8THENRETURN 5020 INPUT#1,ER,ER$,ET,ES 5030 IFER=0THENRETURN 5040 PRINTSL$SP$SL$ER$" - [207]PERATION ABORTED":GOSUB200 5050 RETURN 6000 REM *** PRINTER OUTPUT 6010 W%=W%-1:PRINTSL$SP$SP$SL$"[208]LEASE ENSURE YOUR PRINTER IS CONNECTED"; 6020 PRINTSPC(7)"[208][210][197][211][211] '[211][208][193][195][197]' [212][207] [195][207][206][212][201][206][213][197]."SL$; 6030 GETA$:IFA$<>" "THEN6030 6040 PRINTSL$SP$SP$SL$"[208]RINTING - [208]RESS '[193]' IF YOU WANT TO STOP" 6050 OPEN4,4:FORN=0TO2:PRINT#4:NEXT 6060 PRINT#4,LEFT$(S$,AC+2) 6070 FORY=1TOD:PRINT#4,"*";:FORX=1TOAC:PRINT#4,CHR$(ASC(MID$(AR$(Y),X,1))AND127); 6075 GETA$:IFA$="A"ORA$="[193]"THEN6110 6080 NEXT:PRINT#4,"*":NEXT 6081 PRINT#4,LEFT$(S$,AC+2):PRINT#4:PRINT#4 6085 IFW%<1THENW%=1:F%=1:WD$(1)="[212][200][197][210][197] [193][210][197] [206][207] [215][207][210][196][211] [212][207] [198][201][206][196]":GOTO6090 6086 PRINT#4,"TRY AND FIND THESE WORDS."CHR$(10) 6090 FORN=1TOW%:FORX=1TOLEN(WD$(N)) 6095 GETA$:IFA$="A"ORA$="[193]"THEN6110 6100 PRINT#4,CHR$(ASC(MID$(WD$(N),X,1))AND127);:NEXTX:PRINT#4:NEXTN:PRINT#4 6110 W%=W%+1:IFF%=1THENW%=1 6120 CLOSE4:GOTO170 11000 REM *** INSTRUCTIONS 11010 GOSUB12000 11020 PRINT" [212]HE IDEA OF THIS PROGRAM IS TO MAKE" 11030 PRINT"UP [215][207][210][196][211][197][193][210][195][200] PUZZLES. [217]OU GIVE THE" 11040 PRINT"COMPUTER THE WORDS THAT YOU WANT TO HIDE"; 11050 PRINT"IN THE PUZZLE, AND IT WILL FIT THEM IN" 11060 PRINT"WHEREVER POSSIBLE. [201]F A WORD CANNOT BE" 11070 PRINT"SUCCESSFULLY HIDDEN, THEN THE PROGRAM" 11080 PRINT"WILL TELL YOU." 11090 PRINT"[150] [193]FTER YOU HAVE ENTERED ALL THE WORDS" 11100 PRINT"YOU WANT IN THE PUZZLE, ANY REMAINING" 11110 PRINT"SPACES IN THE GRID WILL BE FILLED WITH" 11120 PRINT"RANDOM LETTERS, TO COMPLETE THE PUZZLE." 11130 PRINT"[159] [207]NCE THIS HAS BEEN DONE, YOU CAN" 11140 PRINT"SAVE THE PUZZLE ON TAPE OR DISK, OR" 11150 PRINT"PRINT IT OUT ON YOUR PRINTER." 11160 GOSUB12020 12000 REM *** TITLE 12010 PRINT"[147]"SP$" [160] [215] [207] [210] [196] - [211] [209] [213] [193] [210] [197] "SP$" [146]":RETURN 12020 REM *** WAIT FOR ANY KEYPRESS 12030 PRINTSL$SP$SL$SPC(7)"[208][210][197][211][211] [193][206][217] [203][197][217] [212][207] [195][207][206][212][201][206][213][197]."; 12040 WAIT198,15:GETA$:RETURN 13000 REM *** INPUT DIMENSIONS ROUTINE 13010 PRINT" [208]LEASE ENTER THE SIZE OF THE PUZZLE":PRINTSPC(11)"YOU WANT TO MAKE." 13020 INPUT"[200]OW MANY LETTERS [193][195][210][207][211][211] [157] ";AC 13030 IFAC>30THENPRINT"[212]HAT'S TOO BIG!!![145][145][145][145]":GOTO13020 13035 IFAC<4THENPRINT"[212]HAT'S TOO SMALL!![145][145][145][145]":GOTO13020 13040 INPUT"[200]OW MANY LETTERS [196][207][215][206] [157] ";D 13050 IFD>17THENPRINT"[212]HAT'S TOO BIG!!![145][145][145][145]":GOTO13040 13055 IFD<4THENPRINT"[212]HAT'S TOO SMALL!!![145][145][145][145]":GOTO13040 13060 BX=AC:BY=D:FORY=1TOD:AR$(Y)=LEFT$(S$,AC):NEXT 13070 PRINTSL$SP$SP$SP$SL$;:RETURN 14000 REM *** BOX DRAWING ROUTINE 14010 GOSUB12000:PRINTLEFT$(SL$,(25-BY)/2)SPC((38-BX)/2)"[172]"; 14020 FORZ=1TOBX:PRINT"[162]";:NEXT:PRINT"[187]" 14030 FORZ=1TOBY:PRINTSPC((38-BX)/2)"[161][146]"LEFT$(S$,BX)"[161]":NEXT 14040 PRINTSPC((38-BX)/2)"[188]"; 14050 FORZ=1TOBX:PRINT"[162][146]";:NEXT:PRINT"[190]":OX=INT((40-BX)/2):OY=INT((25-BY)/2) 14060 RETURN 15000 REM *** DATA FOR DIRECTIONS 15010 DATA0,-1,1,-1,1,0,1,1,0,1,-1,1,-1,0,-1,-1 16000 REM *** INPUT ROUTINE 16002 PRINTSL$SP$SP$SL$"[208]LEASE [197]NTER A [215]ORD TO HIDE OR _ TO END" 16005 N=0:C$(0)=" ":C$(1)=" [146]" 16010 KY$="" 16020 GETA$:IFA$=""THENA$=CHR$(0) 16021 IFA$="_"THENKY$=A$:PRINTSL$SP$SP$SL$;:RETURN 16025 A=ASC(A$)OR128 16030 IFA>192ANDA<219AND(LEN(KY$)""THENKY$=LEFT$(KY$,LEN(KY$)-1) 16050 IFA=141THENRETURN 16060 N=ABS(N-1):PRINTSL$""KY$C$(N)" "; 16070 GOTO16020 60000 OPEN1,8,15,"S0:WORDSEARCH":CLOSE1:SAVE"0:WORDSEARCH",8:VERIFY"0:WORDSEARCH",8