home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib37b.dsk / WORDSEARCH.WIZ.bas < prev    next >
BASIC Source File  |  2023-02-26  |  15KB  |  412 lines

  1. 10  REM ************************
  2. 20  REM * WORDSEARCH.WIZARD    *
  3. 30  REM * BY LEE SMITH         *
  4. 40  REM * COPYRIGHT(C) 1989    *
  5. 50  REM * MINDCRAFT PUBL. CORP.*
  6. 60  REM * CONCORD, MA 01742    *
  7. 70  REM ************************
  8. 80 PRODOS =  PEEK(48896) = 76: IF   NOT PRODOS  THEN D$ =  CHR$(13)
  9. 90  PRINT  CHR$(21):D$ = D$ + CHR$(4)
  10. 100 SL = 6:DR = 1: REM  DEFAULT SLOT&DRIVE
  11. 110 LB$ =  CHR$(91)
  12. 120 RB$ =  CHR$(93)
  13. 130 FF$ =  CHR$(12)
  14. 140  DIM A$(20),AA$(40,21),BB(320,1)
  15. 150 LF = 5:RT = 35:TP = 3:BT = 21
  16. 160 T$ = "":K = 0
  17. 170 MT = 20:MW = 15
  18. 180  GOTO 2110
  19. 190  REM *********************
  20. 200  REM *                   *
  21. 210  REM *   MAKE PUZZLE     *
  22. 220  REM *                   *
  23. 230  REM *********************
  24. 240  TEXT : HOME 
  25. 250  GOSUB 1980
  26. 260 L = 0
  27. 270  FOR T = 1 TO 10
  28. 280 X =  INT( RND(1) *(RT -LF)) +LF:Y =  INT( RND(1) *(BT -TP)) +TP
  29. 290 V =  INT( RND(1) *24) +65
  30. 300  HTAB X: VTAB Y: PRINT  CHR$(V);
  31. 310 L = L +1:BB(L,0) = X:BB(L,1) = Y
  32. 320 AA$(X,Y) =  CHR$(V)
  33. 330  NEXT T
  34. 340  FOR J = 1 TO K
  35. 350  VTAB 23: HTAB 1: CALL  -868: VTAB 23: HTAB 1
  36. 360  PRINT J;") ";A$(J);
  37. 370  HTAB X: VTAB Y: NORMAL : PRINT K$;
  38. 380 E = 1
  39. 390 R =  INT( RND(1) *6) +1: IF R < >1  THEN 430
  40. 400 X =  INT( RND(1) *(RT -LF)) +LF:Y =  INT( RND(1) *(BT -TP)) +TP:K$ = AA$(X,Y)
  41. 410  HTAB X: VTAB Y: FLASH : PRINT K$;: NORMAL 
  42. 420  GOTO 500
  43. 430 M =  INT( RND(1) *L) +1
  44. 440 X = BB(M,0):Y = BB(M,1):K$ = AA$(X,Y)
  45. 450  HTAB X: VTAB Y: FLASH : PRINT K$;: NORMAL 
  46. 460  FOR E = 1 TO  LEN(A$(J))
  47. 470  IF  MID$ (A$(J),E,1) = K$  THEN 500
  48. 480  NEXT E
  49. 490  GOTO 370
  50. 500 N =  INT( RND(1) *8) +1
  51. 510  ON N GOTO 520,530,540,550,560,570,580,590
  52. 520 AA = 1:BB = 0: GOTO 600
  53. 530 AA =  -1:BB = 0: GOTO 600
  54. 540 AA = 0:BB =  -1: GOTO 600
  55. 550 AA = 0:BB = 1: GOTO 600
  56. 560 AA = 1:BB =  -1: GOTO 600
  57. 570 AA =  -1:BB = 1: GOTO 600
  58. 580 AA =  -1:BB =  -1: GOTO 600
  59. 590 AA = 1:BB = 1: GOTO 600
  60. 600 C =  -AA *(E -1) +X: IF (C <LF)  OR (C >RT)  THEN 370
  61. 610 D =  -BB *(E -1) +Y: IF (D <TP)  OR (D >BT)  THEN 370
  62. 620 G = AA *( LEN(A$(J)) -1) +C: IF (G <LF)  OR (G >RT)  THEN 370
  63. 630 H = BB *( LEN(A$(J)) -1) +D: IF (H <TP)  OR (H >BT)  THEN 370
  64. 640  IF AA = 0  THEN ST = D:ED = H:S = BB: GOTO 660
  65. 650 ST = C:ED = G:S = AA
  66. 660 CC = C:DD = D:N = 0
  67. 670  FOR I = ST TO ED  STEP S
  68. 680 N = N +1:W$ =  MID$ (A$(J),N,1)
  69. 690  IF W$ < >AA$(CC,DD)  AND AA$(CC,DD) < >" "  THEN 370
  70. 700 CC = CC +AA:DD = DD +BB
  71. 710  NEXT I
  72. 720 CC = C:DD = D:N = 0
  73. 730  FOR I = ST TO ED  STEP S
  74. 740 N = N +1:W$ =  MID$ (A$(J),N,1)
  75. 750  HTAB CC: VTAB DD: PRINT W$;
  76. 760 AA$(CC,DD) = W$
  77. 770 L = L +1:BB(L,0) = CC:BB(L,1) = DD
  78. 780 CC = CC +AA:DD = DD +BB
  79. 790  NEXT I
  80. 800 K$ = AA$(X,Y)
  81. 810  NEXT J
  82. 820  VTAB 23: HTAB 1: CALL  -868
  83. 830  FOR I = 1 TO 10: HTAB BB(I,0): VTAB BB(I,1): PRINT " ";: NEXT 
  84. 840  FOR I = 11 TO L:X = BB(I,0):Y = BB(I,1): HTAB X: VTAB Y: PRINT AA$(X,Y);
  85. 850  NEXT I
  86. 860  FOR I = 11 TO L
  87. 870 X = BB(I,0):Y = BB(I,1)
  88. 880  IF  ASC(AA$(X,Y)) >91  THEN 900
  89. 890 AA$(X,Y) =  CHR$( ASC(AA$(X,Y)) +32)
  90. 900  NEXT I
  91. 910  REM  ********************
  92. 920  REM  *                  *
  93. 930  REM  *   FILL SCREEN    *
  94. 940  REM  *                  *
  95. 950  REM  ********************
  96. 960  FOR Y = TP TO BT
  97. 970  FOR X = LF TO RT
  98. 980  IF  ASC(AA$(X,Y)) >91  THEN  GOTO 1010
  99. 990 V =  INT( RND(1) *26) +65:AA$(X,Y) =  CHR$(V)
  100. 1000  HTAB X: VTAB Y: PRINT  CHR$(V);
  101. 1010  NEXT X
  102. 1020  NEXT Y
  103. 1030  VTAB 23: HTAB 1: PRINT "PRESS ";LB$;"RETURN";RB$;" FOR MENU ";
  104. 1040  GET A$
  105. 1050  REM  *********************
  106. 1060  REM  *                   *
  107. 1070  REM  *  PRINT/SAVE MENU  *
  108. 1080  REM  *                   *
  109. 1090  REM  *********************
  110. 1100  HOME 
  111. 1110 A$ = "WORDSEARCH WIZARD": GOSUB 4090
  112. 1120  VTAB 3:A$ = "BY LEE SMITH": GOSUB 4090
  113. 1130  VTAB 5:A$ = "COPYRIGHT(C) 1989 MINDCRAFT PUBL. CORP.": GOSUB 4090
  114. 1140  HTAB 1: VTAB 6: FOR I = 1 TO 40: PRINT "=";: NEXT 
  115. 1150  VTAB 9: HTAB 10: PRINT "1) PRINT PUZZLE"
  116. 1160  VTAB 10: HTAB 10: PRINT "2) SAVE PUZZLE TO DISK"
  117. 1170  VTAB 11: HTAB 10: PRINT "3) EDIT PUZZLE"
  118. 1180  VTAB 12: HTAB 10: PRINT "4) VIEW PUZZLE"
  119. 1190  VTAB 13: HTAB 10: PRINT "5) RETURN TO MAIN MENU"
  120. 1200  VTAB 15: HTAB 10: PRINT  SPC( 29): HTAB 10: PRINT "ENTER CHOICE --> ";: POKE  -16368,0: GET A$:A =  VAL(A$)
  121. 1210  ON A GOTO 1230,1690,2510,3690,2110
  122. 1220  GOTO 1200
  123. 1230  REM  ****PRINT PUZZLE****
  124. 1240 FL = 0: GOSUB 1300
  125. 1250  HOME : VTAB 3
  126. 1260  INPUT "PRINT ANSWER SHEET (Y/N) ";A$
  127. 1270  IF A$ = "Y"  THEN FL = 1: GOSUB 1350
  128. 1280  GOTO 1100
  129. 1290  REM  <<<< PRINT >>>>
  130. 1300  HOME : PRINT : PRINT "USE '";T$;"' AS TITLE? (Y/N)";: POKE  -16368,0: GET Z$: IF Z$ < >"Y"  AND Z$ < >"N"  AND Z$ < >"y"  AND Z$ < >"n"  THEN 1300
  131. 1310  IF Z$ = "N"  OR Z$ = "n"  THEN 1330
  132. 1320  GOTO 1350
  133. 1330 PF = 1: VTAB 9: PRINT : PRINT "TITLE OF PUZZLE: ";:X = 18:Y = 10:MAX = MT: GOSUB 3850:PF = 0: IF A$ < >""  THEN T$ = A$
  134. 1340  IF F = 1  THEN 1100
  135. 1350  PRINT 
  136. 1360  PRINT D$;"PR#1"
  137. 1370  PRINT  CHR$(9);"255N"
  138. 1380  PRINT 
  139. 1390  IF FL = 1  THEN  PRINT FF$
  140. 1400  PRINT 
  141. 1410  PRINT : PRINT : PRINT  SPC( 40 - INT( LEN(T$)/2));T$: PRINT : PRINT 
  142. 1420 LM = 40 -(RT -LF)
  143. 1430  FOR Y = TP TO BT
  144. 1440  PRINT  SPC( LM);
  145. 1450  FOR X = LF TO RT
  146. 1460  IF FL = 1  THEN 1480
  147. 1470  IF  ASC(AA$(X,Y)) >91  THEN  PRINT  CHR$( ASC(AA$(X,Y)) -32);" ";: GOTO 1490
  148. 1480  PRINT AA$(X,Y);" ";
  149. 1490  NEXT X
  150. 1500  PRINT : PRINT 
  151. 1510  NEXT Y
  152. 1520 N = 0: PRINT : PRINT : PRINT 
  153. 1530  FOR I = 1 TO  INT(K/3) +1
  154. 1540  PRINT  SPC( 10);
  155. 1550  FOR J = 1 TO 43  STEP 20
  156. 1560  IF N = K  THEN 1580
  157. 1570 N = N +1: PRINT A$(N); SPC( 20 - LEN(A$(N)));
  158. 1580  NEXT J
  159. 1590  PRINT 
  160. 1600  NEXT I
  161. 1610  PRINT 
  162. 1620  PRINT D$;"PR#0"
  163. 1630  RETURN 
  164. 1640  REM  *********************
  165. 1650  REM  *                   *
  166. 1660  REM  *    SAVE PUZZLE    *
  167. 1670  REM  *                   *
  168. 1680  REM  *********************
  169. 1690  HOME : ONERR  GOTO 1920
  170. 1700  PRINT  TAB( 12)"WORDSEARCH WIZARD"
  171. 1710  VTAB 4: PRINT  TAB( 15)"SAVE PUZZLE"
  172. 1720  VTAB 10: PRINT "SAVE PUZZLE AS '";T$;"' (Y/N) ";
  173. 1730  POKE  -16368,0: GET A$: IF A$ = "Y"  OR A$ = "y"  THEN F$ = T$: GOSUB 4100: IF NF = 0  THEN  PRINT : PRINT "INVALID PRODOS FILENAME": PRINT : PRINT "PRESS RETURN TO CONTINUE ";: POKE  -16368,0: GET Z$: GOTO 1100
  174. 1740  IF A$ = "Y"  OR A$ = "y"  THEN 1780
  175. 1750  IF A$ < >"N"  AND A$ < >"n"  THEN 1730
  176. 1760  VTAB 11:PF = 1: PRINT : PRINT "ENTER NEW NAME: ";:X = 17:Y = 12:MAX = MT: GOSUB 3850:PF = 0:F$ = A$: GOSUB 4100: IF NF = 0  THEN  PRINT : PRINT "INVALID PRODOS FILENAME": PRINT : PRINT "PRESS RETURN TO CONTINUE ";: POKE  -16368,0: GET A$: GOTO 1100
  177. 1770  IF F = 1  THEN  GOTO 1100
  178. 1780  PRINT : PRINT : PRINT "SAVING...."
  179. 1790  PRINT D$;"OPEN ";F$
  180. 1800  PRINT D$;"WRITE ";F$
  181. 1810  PRINT LF: PRINT RT
  182. 1820  PRINT TP: PRINT BT
  183. 1830  FOR Y = TP TO BT
  184. 1840  FOR X = LF TO RT
  185. 1850  PRINT AA$(X,Y)
  186. 1860  NEXT X
  187. 1870  NEXT Y
  188. 1880  PRINT K
  189. 1890  FOR I = 1 TO K: PRINT A$(I): NEXT 
  190. 1900  PRINT D$;"CLOSE ";F$
  191. 1910  POKE 216,0: GOTO 1100
  192. 1920  POKE 216,0: PRINT : PRINT "<<<<SAVE ERROR>>>>": PRINT : PRINT "PRESS RETURN TO CONTINUE ";: POKE  -16368,0: GET A$: GOTO 1100
  193. 1930  REM  *********************
  194. 1940  REM  *                   *
  195. 1950  REM  * SET AA$(X,Y)=" "  *
  196. 1960  REM  *                   *
  197. 1970  REM  *********************
  198. 1980  VTAB 10: PRINT  TAB( 12)"ONE MOMENT PLEASE"
  199. 1990  FOR Y = TP TO BT
  200. 2000  FOR X = LF TO RT
  201. 2010 AA$(X,Y) = " "
  202. 2020  NEXT X
  203. 2030  NEXT Y
  204. 2040  HOME 
  205. 2050  RETURN 
  206. 2060  REM  ********************
  207. 2070  REM  *                  *
  208. 2080  REM  *    MAIN MENU     *
  209. 2090  REM  *                  *
  210. 2100  REM  ********************
  211. 2110  HOME 
  212. 2120 A$ = "WORDSEARCH WIZARD": GOSUB 4090
  213. 2130  VTAB 3:A$ = "BY LEE SMITH": GOSUB 4090
  214. 2140  VTAB 5:A$ = "COPYRIGHT(C) 1989 MINDCRAFT PUBL. CORP.": GOSUB 4090
  215. 2150  HTAB 1: VTAB 6: FOR I = 1 TO 40: PRINT "=";: NEXT 
  216. 2160  VTAB 9: HTAB 10: PRINT "1) CREATE NEW PUZZLE"
  217. 2170  VTAB 10: HTAB 10: PRINT "2) LOAD PUZZLE FROM DISK"
  218. 2180  IF K < >0  THEN  VTAB 11: HTAB 10: PRINT "3) PREVIOUS MENU"
  219. 2190  VTAB 12: HTAB 10: IF K < >0  THEN  PRINT "4";
  220. 2200  IF K = 0  THEN  PRINT "3";
  221. 2210  PRINT ") QUIT";:
  222. 2220  VTAB 13: HTAB 1: PRINT  SPC( 40): HTAB 10: PRINT "ENTER CHOICE --> ";
  223. 2230  POKE  -16368,0: GET A$
  224. 2240 A =  VAL(A$): ON A GOTO 2340,3090
  225. 2250  IF K < >0  AND A = 3  THEN 1100
  226. 2260  IF (K = 0  AND A = 3)  OR (A = 4)  THEN 3650
  227. 2270  GOTO 2230
  228. 2280  REM  *******************
  229. 2290  REM  *                 *
  230. 2300  REM  *   EDIT WORDS   *
  231. 2310  REM  *  FOR NEW PUZZLE *
  232. 2320  REM  *                 *
  233. 2330  REM  *******************
  234. 2340 PF = 1: HOME 
  235. 2350  PRINT  TAB( 12)"WORDSEARCH WIZARD"
  236. 2360  VTAB 5: PRINT "TITLE OF PUZZLE: ";:X = 18:Y = 5:MAX = MT: GOSUB 3850:T$ = A$
  237. 2370 PF = 0: IF F = 1  THEN 2110
  238. 2380 K = 0
  239. 2390  VTAB 5: HTAB 1: CALL  -868
  240. 2400  VTAB 3: PRINT  TAB( 15)"EDIT WORDS"
  241. 2410  VTAB 23: HTAB 1: PRINT LB$;"ESC";RB$;" FOR WORD TERMINATES ENTRIES"
  242. 2420 K = K +1
  243. 2430  IF K <11  THEN  HTAB 1: VTAB K +4:X = 5:Y = K +4: GOTO 2450
  244. 2440  HTAB 21: VTAB K -6:X = 25:Y = K -6
  245. 2450  PRINT " ";: IF K >9  THEN  CALL  -1008
  246. 2460  PRINT K;") ";:MAX = MW: GOSUB 3850:A$(K) = A$
  247. 2470  IF F = 1  THEN K = K -1: IF K = 0  THEN  GOTO 2110
  248. 2480  IF F = 1  THEN  GOTO 2510
  249. 2490  IF K = 20  THEN 2510
  250. 2500  GOTO 2420
  251. 2510  GOSUB 2940
  252. 2520  VTAB 16: PRINT 
  253. 2530  PRINT  TAB( 5)"OPTIONS:"
  254. 2540  PRINT 
  255. 2550  PRINT  TAB( 10)"D)ELETE A WORD"
  256. 2560  PRINT  TAB( 10)"A)DD MORE WORDS"
  257. 2570  PRINT  TAB( 10)"# TO CHANGE"
  258. 2580  PRINT : PRINT  TAB( 10)LB$;"RETURN";RB$;" TO BEGIN PUZZLE";
  259. 2590 PF = 1: VTAB 17: HTAB 13: CALL  -868: VTAB 17: HTAB 13: INPUT "";A$:PF = 0
  260. 2600  IF A$ = "D"  OR A$ = "d"  THEN  GOTO 2740
  261. 2610  IF (A$ = "A"  OR A$ = "a")  AND K <20  THEN  GOSUB 2940: GOTO 2410
  262. 2620  IF  LEN(A$) = 0  THEN  GOTO 240
  263. 2630 A =  VAL(A$)
  264. 2640  IF A <1  OR A >K  THEN 2590
  265. 2650  REM  <<<<CHANGE WORD>>>>
  266. 2660  VTAB 17: HTAB 1: CALL  -958
  267. 2670  VTAB 18: PRINT "CHANGE <";A$(A);">";
  268. 2680  PRINT : PRINT  TAB( 10)"TO: ";
  269. 2690 X = 14:Y = 19:MAX = MW: GOSUB 3850
  270. 2700  IF F = 1  THEN 2720
  271. 2710 A$(A) = A$
  272. 2720  GOTO 2510
  273. 2730  REM  <<< DELETE WORD >>>
  274. 2740  VTAB 17: HTAB 1: CALL  -958
  275. 2750 PF = 1: PRINT "# OF WORD TO DELETE: ";:X = 22:Y = 17:MAX = 2: GOSUB 3850:PF = 0
  276. 2760  IF F = 1  THEN 2510
  277. 2770 A =  VAL(A$)
  278. 2780  IF A <1  OR A >K  THEN 2510
  279. 2790  PRINT 
  280. 2800  PRINT : PRINT "DELETE <";A$(A);"> (Y/N)";
  281. 2810  INPUT "";G$
  282. 2820  IF G$ < >"Y"  AND G$ < >"y"  THEN 2510
  283. 2830  FOR I = A +1 TO K
  284. 2840 A$(I -1) = A$(I)
  285. 2850  NEXT 
  286. 2860 K = K -1: IF K = 0  THEN 2110
  287. 2870  GOTO 2510
  288. 2880  REM  ********************
  289. 2890  REM  *                  *
  290. 2900  REM  *  DISPLAY WORDS   *
  291. 2910  REM  *  IN TWO COLUMNS  *
  292. 2920  REM  *                  *
  293. 2930  REM  ********************
  294. 2940  HOME 
  295. 2950  PRINT  TAB( 12)"WORDSEARCH WIZARD"
  296. 2960  VTAB 3: PRINT  TAB( 15)"EDIT WORDS"
  297. 2970  FOR I = 1 TO K
  298. 2980  IF I <11  THEN  VTAB I +4: HTAB 1: GOTO 3000
  299. 2990  VTAB I -6: HTAB 21
  300. 3000  IF I <10  THEN  PRINT " ";
  301. 3010  PRINT I;") ";A$(I);: NEXT 
  302. 3020  RETURN 
  303. 3030  REM  *********************
  304. 3040  REM  *                   *
  305. 3050  REM  *   LOAD IN OLD     *
  306. 3060  REM  *     PUZZLE        *
  307. 3070  REM  *                   *
  308. 3080  REM  *********************
  309. 3090  TEXT : HOME :PF = 1
  310. 3100  PRINT  TAB( 12)"WORDSEARCH WIZARD"
  311. 3110  PRINT : PRINT  TAB( 13)"LOAD IN PUZZLE"
  312. 3120  VTAB 5: PRINT : PRINT "NAME OF PUZZLE (? FOR CATALOG)": HTAB 16: PRINT "(ESCAPE TO CANCEL)";:
  313. 3130  PRINT : PRINT "--> ";:X = 5:Y = 8:MAX = MT: GOSUB 3850:F$ = A$
  314. 3140 PF = 0: PRINT 
  315. 3150  IF F$ = "?"  THEN  GOTO 3390
  316. 3160  IF F = 1  THEN 2110
  317. 3170  REM   <<< VERIFY FILE EXISTS >>>
  318. 3180  ONERR  GOTO 3560
  319. 3190  PRINT D$;"VERIFY ";F$
  320. 3200  POKE 216,0
  321. 3210  REM  <<<<<LOAD FILE>>>>>
  322. 3220  ONERR  GOTO 3500
  323. 3230  PRINT : PRINT : PRINT "LOADING...."
  324. 3240  PRINT 
  325. 3250  PRINT D$;"OPEN ";F$
  326. 3260  PRINT D$;"READ ";F$
  327. 3270  INPUT LF: INPUT RT
  328. 3280  INPUT TP: INPUT BT
  329. 3290  FOR Y = TP TO BT
  330. 3300  FOR X = LF TO RT
  331. 3310  INPUT AA$(X,Y)
  332. 3320  NEXT X
  333. 3330  NEXT Y
  334. 3340  INPUT K
  335. 3350  FOR I = 1 TO K: INPUT A$(I): NEXT I
  336. 3360  PRINT D$;"CLOSE ";F$
  337. 3370 T$ = F$: POKE 216,0: GOTO 1100
  338. 3380  REM   <<<<CATALOG>>>>
  339. 3390  ONERR  GOTO 3500
  340. 3400  POKE 34,9: HOME 
  341. 3410  PRINT "ENTER SLOT OR PRESS RETURN FOR SLOT ";SL;: CALL  -1008: POKE  -16368,0: GET A$: PRINT A$;: IF A$ =  CHR$(13)  THEN  GOTO 3430
  342. 3420 SL =  VAL(A$): IF SL <1  OR SL >7  THEN SL = 6: GOTO 3400
  343. 3430  VTAB 12: HTAB 1: PRINT "ENTER DRIVE OR PRESS RETURN FOR DRIVE ";DR;: CALL  -1008: POKE  -16368,0: GET A$: PRINT A$;: IF A$ =  CHR$(13)  THEN 3450
  344. 3440 DR =  VAL(A$): IF DR < >1  AND DR < >2  THEN 3430
  345. 3450  HOME : PRINT D$; LEFT$("CATALOG",7 -4 *PRODOS);",S";SL;",D";DR: IF PRODOS  THEN  PRINT  CHR$(4)"PREFIX,S";SL;",D";DR
  346. 3460  GET A$
  347. 3470  POKE 216,0
  348. 3480  TEXT : GOTO 3090
  349. 3490  REM  <<<<<LOAD DISK ERROR>>>>
  350. 3500  PRINT : PRINT 
  351. 3510  PRINT : PRINT : PRINT "<<<<DISK ERROR>>>>"
  352. 3520  PRINT : PRINT "PRESS RETURN TO CONTINUE ";: POKE  -16368,0: GET Z$
  353. 3530  POKE 216,0
  354. 3540  GOTO 3090
  355. 3550  REM <<< FILE NOT FOUND >>>
  356. 3560  PRINT : PRINT : PRINT "<<<<FILE NOT FOUND>>>>"
  357. 3570  PRINT : PRINT "PRESS RETURN TO CONTINUE ";: POKE  -16368,0: GET Z$
  358. 3580  POKE 216,0
  359. 3590  GOTO 3090
  360. 3600  REM  *********************
  361. 3610  REM  *                   *
  362. 3620  REM  *       END         *
  363. 3630  REM  *                   *
  364. 3640  REM  *********************
  365. 3650  TEXT : HOME 
  366. 3660  VTAB 12:A$ = "ARE YOU SURE YOU WANT TO QUIT?": GOSUB 4090: POKE  -16368,0: GET A$: IF A$ = "Y"  OR A$ = "y"  THEN  HOME : VTAB 23: END 
  367. 3670  GOTO 2110
  368. 3680  REM  *** VIEW PUZZLE ***
  369. 3690  TEXT : HOME 
  370. 3700  VTAB TP
  371. 3710  FOR Y = TP TO BT
  372. 3720  HTAB LF
  373. 3730  FOR X = LF TO RT
  374. 3740  IF  ASC(AA$(X,Y)) >91  THEN  PRINT  CHR$( ASC(AA$(X,Y)) -32);: GOTO 3760
  375. 3750  PRINT AA$(X,Y);
  376. 3760  NEXT X
  377. 3770  PRINT 
  378. 3780  NEXT Y
  379. 3790  GOTO 1030
  380. 3800  REM   ********************
  381. 3810  REM   *                  *
  382. 3820  REM   *    GET A WORD    *
  383. 3830  REM   *                  *
  384. 3840  REM   ********************
  385. 3850  HTAB X: VTAB Y
  386. 3860 H = X:V = Y
  387. 3870 F = 0
  388. 3880 A$ = ""
  389. 3890  REM   ---> C$=CURSOR
  390. 3900 C$ =  CHR$(32)
  391. 3910  HTAB H: VTAB V: PRINT C$;
  392. 3920  HTAB H: VTAB V: GET AA$
  393. 3930  IF AA$ > CHR$(96)  AND AA$ < CHR$(123)  THEN AA$ =  CHR$( ASC(AA$) -32)
  394. 3940  IF AA$ =  CHR$(13)  AND  LEN(A$) >0  THEN 4080
  395. 3950  IF AA$ =  CHR$(8)  THEN H = H -1: GOTO 4030
  396. 3960  IF AA$ =  CHR$(27)  AND  LEN(A$) >0  THEN  HTAB X: VTAB Y: PRINT  SPC( MAX +1);: GOTO 3850
  397. 3970  IF AA$ =  CHR$(27)  AND  LEN(A$) = 0  THEN F = 1: GOTO 4080
  398. 3980  IF   NOT PF  AND (AA$ <"A"  OR AA$ >"Z")  THEN 3920
  399. 3990  HTAB H: VTAB V: PRINT AA$;
  400. 4000 A$ = A$ +AA$
  401. 4010  IF  LEN(A$) = MAX +1  THEN A$ =  LEFT$(A$,MAX): GOTO 3910
  402. 4020 H = H +1: GOTO 3910
  403. 4030  IF H <X  THEN H = X: GOTO 3910
  404. 4040  IF  LEN(A$) = 1  THEN A$ = "": GOTO 4060
  405. 4050 A$ =  LEFT$(A$, LEN(A$) -1)
  406. 4060  HTAB H +1: VTAB V: PRINT " ";
  407. 4070  GOTO 3910
  408. 4080  HTAB H: VTAB V: PRINT " ";: RETURN 
  409. 4090  HTAB 20 - LEN(A$)/2 +1: PRINT A$;: RETURN 
  410. 4100  IF   NOT PRODOS  THEN NF = 1: RETURN 
  411. 4110 NF = 1: IF  LEN(F$) >0  THEN  FOR NC = 1 TO  LEN(F$):NA =  ASC( MID$ (F$,NC,1)):NF = ((NA >64  AND NA <91)  OR (NA = 46)  OR (NA >47  AND NA <58  AND NC >1))  AND NF = 1: NEXT : IF  LEN(F$) >15  OR  LEFT$(F$,1) = "."  THEN NF = 0
  412. 4120  RETURN : REM  PRODOS PATHNAME CHECKER