home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib39a.dsk / JULY.1990 / SPELL.bas < prev    next >
BASIC Source File  |  2023-02-26  |  24KB  |  320 lines

  1. 10  REM *************************
  2. 20  REM * SPELL                 *
  3. 40  REM * BY LES STEWART        *
  4. 50  REM * COPYRIGHT (C) 1990    *
  5. 60  REM * MINDCRAFT PUBL. CORP. *
  6. 70  REM * CONCORD, MA 01742     *
  7. 80  REM *************************
  8. 90  REM 
  9. 100  REM - INITIALIZE
  10. 110  HIMEM: 24832: HOME :D$ =  CHR$(4):D% = 2:A$(1) = "SINGLE":A$(2) = "MULTIPLE":B$ = "/DICTIONARY":C$ = "/TRANSFER"
  11. 120 M1 = 25856:M2 = 26008:M3 = 26282:M4 = 26308:M6 = 26828:MA = 26525:MB = 26780:G = 27328:H = 27264:J = 27183:K = 27186:U = 27187:C = 49152:D = 49168: REM  - ML ADDRESSES
  12. 130  PRINT  CHR$(27) CHR$(17) CHR$(24)
  13. 140  REM - CHECK AVAILABLE RAMDISK SPACE
  14. 150  PRINT D$"PREFIX": INPUT ZP$
  15. 160  ONERR  GOTO 200
  16. 170 P = 0: PRINT D$"OPEN /RAM,TDIR,S3,D2": PRINT D$"READ /RAM": FOR X = 1 TO 3: INPUT ZA$: NEXT 
  17. 180 P = 119
  18. 190  INPUT ZA$:P = P - VAL( MID$ (ZA$,23,6)): GOTO 190
  19. 200  POKE 216,0: CALL 62248: PRINT D$"CLOSE"
  20. 210  ONERR  GOTO 260
  21. 220 Q = 0: PRINT D$"OPEN /RAM5,S5,D2,TDIR": PRINT D$"READ /RAM5"
  22. 230  ONERR  GOTO 250
  23. 240  INPUT ZA$: GOTO 240
  24. 250 Q =  VAL( MID$ (ZA$,13,5))
  25. 260  POKE 216,0: CALL 62248: PRINT D$"CLOSE": PRINT D$"PREFIX"ZP$
  26. 270  PRINT : VTAB 3: PRINT  SPC( 5)"S P E L I N G  C H E C K E R": PRINT  SPC( 12)"^": PRINT  SPC( 12);: INVERSE : PRINT "L": NORMAL 
  27. 280  VTAB 9: PRINT  SPC( 11)"BY LES STEWART"
  28. 290  VTAB 13: PRINT  SPC( 9)"COPYRIGHT (C) 1990": PRINT : PRINT  SPC( 8)"MINDCRAFT PUBL. CORP."
  29. 300  VTAB 19: PRINT  SPC( 12)"PRESS A KEY": POKE D,0: WAIT C,128: POKE D,0: HOME 
  30. 310 R$ = "SPELL.BIN": ONERR  GOTO 330: REM - LOAD MACHINE LANGUAGE PORTION
  31. 320  PRINT D$"BLOAD"R$: POKE 216,0: GOTO 350
  32. 330  POKE 216,0: HOME : PRINT  CHR$(7): PRINT "UNABLE TO LOAD "R$: END 
  33. 340  REM - MAIN MENU
  34. 350 M$(1) = "SPELL":M$(2) = "DICTIONARY":M$(3) = "SET/RESET FILE NAMES":M$(4) = "CATALOG A DISK":M$(5) = "# OF DRIVES - " +A$(D%):M$(6) = "QUIT": IF H% < >3  THEN F$ = ""
  35. 360  PRINT D$"CLOSE"
  36. 370  HOME : PRINT : PRINT  SPC( 7)"*** SPELLING CHECKER ***":M = 6: GOSUB 2330
  37. 380  HOME : IF A < >6  THEN 450
  38. 390  IF G% = 0  THEN 440
  39. 400  PRINT : PRINT  CHR$(7) SPC( 2)"DICTIONARY HAS NOT BEEN": PRINT : PRINT  SPC( 2)"RECOVERED FROM RAM": PRINT 
  40. 410  PRINT  SPC( 2)"OK TO QUIT? Y/N"
  41. 420  POKE D,0: WAIT C,128: POKE D,0:ZA =  PEEK(C): IF ZA < >78  AND ZA < >110  AND ZA < >89  AND ZA < >121  THEN 420
  42. 430  IF ZA < >89  AND ZA < >121  THEN 350
  43. 440  END 
  44. 450  IF A = 5  THEN D% = D% -1 +2 *(D% = 1): GOTO 350
  45. 460  IF A <3  THEN H% = H% *(A = 2): ON A GOTO 490,1350
  46. 470 H% = A: ON A -2 GOSUB 1940,2150: GOTO 350
  47. 480  REM - *** SPELL ROUTINE ***
  48. 490  IF F$ = ""  THEN  GOSUB 1940: HOME : REM  - GET NAME OF TEXT FILE
  49. 500 F% = 1:ZF$ = F$: GOTO 2420: REM - CHECK/GET TEXT FILE
  50. 510  REM - GET LENGTH OF TEXT FILE
  51. 520  FOR X =  LEN(F$) TO 1  STEP  -1:ZF$ =  LEFT$(F$,X): IF  RIGHT$(ZF$,1) = "/"  THEN ZF$ =  LEFT$(ZF$,X -1):X = 1
  52. 530  NEXT 
  53. 540  PRINT D$"OPEN"ZF$",TDIR": PRINT D$"READ "ZF$
  54. 550  FOR X = 1 TO 3: INPUT ZA$: NEXT 
  55. 560 ZB$ =  RIGHT$(F$, LEN(F$) -1 - LEN(ZF$)): FOR X =  LEN(ZB$) +1 TO 15:ZB$ = ZB$ + CHR$(32): NEXT 
  56. 570  INPUT ZA$: IF  MID$ (ZA$,2,15) < >ZB$  THEN 570
  57. 580  PRINT D$"CLOSE"
  58. 590 Y = 1:S = 0: FOR X = 71 TO 64  STEP  -1:S = S +Y * VAL( MID$ (ZA$,X,1)):Y = Y *10: NEXT 
  59. 600  REM - REVIEW TEXT FILE AND COMPILE 'DIFFERENT' WORDS
  60. 610  VTAB 19: FOR X = 1 TO 40: PRINT "-";: NEXT : PRINT : PRINT  SPC( 13)"ESC TO EXIT"
  61. 620  CALL M1: REM - INITIALIZE INPUT BUFFERS, ETC
  62. 630  POKE G, LEN(F$):X = G +1: FOR Y = 1 TO  LEN(F$): POKE X, ASC( MID$ (F$,Y,1)):X = X +1: NEXT : REM - POKE FILE PATHNAME INTO MEMORY
  63. 640  VTAB 2: PRINT  SPC( 1)"FILE: "F$
  64. 650  VTAB 8: PRINT  SPC( 1)"TOTAL WORDS" SPC( 7)"DIFFERENT WORDS"
  65. 660  CALL M2: REM - READ FILE AND COMPILE 'DIFFERENT' WORDS
  66. 670  IF  PEEK(K) = 76  THEN 710
  67. 680  IF  PEEK(K) = 27  THEN 350
  68. 690  HOME : PRINT : PRINT  CHR$(7) SPC( 2)"SYSTEM ERROR # " PEEK(K)
  69. 700  PRINT : PRINT  SPC( 2)"PRESS A KEY": POKE D,0: WAIT C,128: POKE D,0: GOTO 350
  70. 710  CALL M3: REM - FLAG 1 LETTER WORDS
  71. 720  REM - CHECK 'DIFFERENT' WORDS AGAINST THE DICTIONARY
  72. 730 F% = 2:ZF$ = B$: GOTO 2420: REM - CHECK/GET DICTIONARY FILE
  73. 740  VTAB 11: PRINT  SPC( 1)"DICTIONARY CHECK:": PRINT : PRINT  SPC( 3)"UNIDENTIFIED WORDS"
  74. 750  POKE G, LEN(B$) +2:X = G +1: FOR Y = 1 TO  LEN(B$): POKE X, ASC( MID$ (B$,Y,Y)):X = X +1: NEXT : POKE X, ASC("/"): REM - POKE DICTIONARY PATHNAME INTO MEMORY
  75. 760  CALL M4: REM - DICTIONARY CHECK
  76. 770  IF  PEEK(K) = 27  THEN  HOME : GOTO 350
  77. 780  IF  PEEK(K) < >0  AND  PEEK(K) < >76  THEN  HOME : PRINT : PRINT : PRINT  CHR$(7)"SYSTEM ERROR # " PEEK(K): PRINT : PRINT  SPC( 2)"PRESS A KEY": POKE D,0: WAIT C,128: POKE D,0: GOTO 350
  78. 790  VTAB 11: HTAB 20: PRINT  SPC( 4): PRINT : VTAB 21: PRINT  SPC( 24)
  79. 800  IF  PEEK(27258) = 0  AND  PEEK(27259) = 0  THEN  PRINT : VTAB 21: PRINT  SPC( 2)"NO ERRORS"
  80. 810  PRINT : VTAB 23: PRINT  SPC( 2)"PRESS A KEY": POKE D,0: WAIT C,128: POKE D,0: HOME : IF ( PEEK(27258) = 0  AND  PEEK(27259) = 0)  OR  PEEK(C) = 27  THEN 350
  81. 820  REM - REVIEW FILE AND IDENTIFY/CORRECT WORDS NOT IN DICTIONARY
  82. 830  IF P *512 -100 >S  THEN C$ = "/RAM": GOTO 850: REM - USE RAM DISK AS TRANSFER DISK IF POSSIBLE
  83. 840  IF Q *512 -100 >S  THEN C$ = "/RAM5"
  84. 850 C$ = C$ +"/TEMP"
  85. 860 E% = 0: IF C$ < >"/RAM/TEMP"  AND C$ < >"/RAM5/TEMP"  AND D% = 1  THEN E% = 1: GOTO 900: REM - ONLY ONE DRIVE AND NO RAM DISK.  IDENTIFY ONLY
  86. 870 F% = 3:ZF$ =  LEFT$(C$, LEN(C$) -5): GOTO 2420: REM - CHECK PRESENCE OF TRANSFER DISK
  87. 880  PRINT D$"OPEN"C$: PRINT D$"CLOSE": PRINT D$"DELETE"C$: PRINT D$"OPEN"C$: PRINT D$"CLOSE": REM - PREPARE EMPTY TRANSFER FILE
  88. 890  POKE H, LEN(C$):X = H +1: FOR Y = 1 TO  LEN(C$): POKE X, ASC( MID$ (C$,Y,1)):X = X +1: NEXT : REM - POKE TRANSFER PATHNAME INTO MEMORY
  89. 900  POKE G, LEN(F$):X = G +1: FOR Y = 1 TO  LEN(F$): POKE X, ASC( MID$ (F$,Y,1)):X = X +1: NEXT : REM - POKE FILE PATHNAME INTO MEMORY
  90. 910 F% = 4:ZF$ = F$: GOTO 2420: REM - CHECK/GET TEXT FILE
  91. 920  HOME :M5 = MA:E1% = 0:E2% = 0
  92. 930  POKE 35,15: CALL M5: REM - REVIEW AND DISPLAY FILE
  93. 940  IF  PEEK(K) = 76  OR  PEEK(K) = 27  THEN  ON 1 +( PEEK(K) = 27) GOTO 1140,350
  94. 950  IF  PEEK(K) < >0  THEN  POKE 35,24: VTAB 18: PRINT : PRINT  CHR$(7)"SYSTEM ERROR # " PEEK(K): PRINT : PRINT  SPC( 2)"PRESS A KEY": POKE D,0: WAIT C,128: POKE D,0: GOTO 350
  95. 960  REM - HIGHLIGHT WORDS NOT FOUND IN DICTIONARY
  96. 970 G$ = "":M5 = MB: FOR X = U +1 TO U + PEEK(U):G$ = G$ + CHR$( PEEK(X)): NEXT : FLASH : PRINT "*";: NORMAL : PRINT G$;: FLASH : PRINT "*": NORMAL 
  97. 980  POKE 35,24: POKE 34,18: PRINT : VTAB 19: FOR X = 1 TO 40: PRINT "-";: NEXT : PRINT 
  98. 990  REM - ACCEPT WORD AS IS OR CORRECT THE SPELLING
  99. 1000  PRINT  SPC( 2);: INVERSE : PRINT "1";: NORMAL : PRINT " IGNORE" SPC( 2);: INVERSE : PRINT "2";: NORMAL : PRINT " ADD TO DICTIONARY"
  100. 1010  IF E% = 0  THEN  PRINT : PRINT  SPC( 2);: INVERSE : PRINT "3";: NORMAL : PRINT " CORRECT"
  101. 1020  POKE D,0: WAIT C,128: POKE D,0: IF ( PEEK(C) < >27  AND  PEEK(C) < >49  AND  PEEK(C) < >50  AND  PEEK(C) < >51)  OR ( PEEK(C) = 51  AND E% = 1)  THEN 1020
  102. 1030  HOME : IF  PEEK(C) = 27  OR  PEEK(C) = 49  OR  PEEK(C) = 50  THEN  POKE 34,0: IF  PEEK(C) = 27  THEN 350
  103. 1040  IF  PEEK(C) = 49  THEN  POKE  PEEK(6) +256 * PEEK(7),128 + PEEK( PEEK(6) +256 * PEEK(7)): GOTO 1110: REM - IGNORE THE WORD
  104. 1050  IF  PEEK(C) = 50  THEN  POKE  PEEK(6) +256 * PEEK(7),192 + PEEK( PEEK(6) +256 * PEEK(7)):E2% = 1: GOTO 1110: REM - ADD WORD TO DICTIONARY
  105. 1060  POKE 35,24: POKE 34,20: HOME :E1% = 1: PRINT  SPC( 2);: INPUT "CORRECT SPELLING ";H$: IF H$ = ""  THEN 1060
  106. 1070  IF  LEN(H$) <31  AND  LEN(H$) - LEN(G$) + PEEK(J) <240  THEN 1090
  107. 1080 ZA = 240 - PEEK(J) + LEN(G$): IF ZA >30  THEN ZA = 30: PRINT  CHR$(7) SPC( 2)"TOO LONG.  MAXIMUM LENGTH - ";ZA: PRINT  SPC( 2)"PRESS A KEY": POKE D,0: WAIT C,128: POKE D,0: GOTO 1060
  108. 1090  POKE U, LEN(H$):Y = U +1: FOR X = 1 TO  LEN(H$): POKE Y, ASC( MID$ (H$,X,1)):Y = Y +1: NEXT : POKE 34,0: POKE J, PEEK(J) - LEN(G$) + LEN(H$)
  109. 1100  REM - RESTORE CURSOR POSITION AND CONTINUE REVIEWING FILE
  110. 1110  POKE 36, PEEK(27173): POKE 37, PEEK(27174): POKE 40, PEEK(27175): POKE 41, PEEK(27176): IF  PEEK(37) = 14  THEN  POKE 37,13: POKE 40,168: POKE 41,6: POKE 27174,13: POKE 27175,168: POKE 27176,6
  111. 1120  PRINT  SPC(  LEN(G$) +2): IF  PEEK(37) = 14  THEN  POKE 27174,12: POKE 27175,40: POKE 27176,6
  112. 1130  GOTO 930
  113. 1140  POKE 35,24: POKE 34,0: HOME : IF E2% = 1  THEN  CALL M6: GOSUB 2580: REM - UPDATE DICTIONARY
  114. 1150  IF E% = 1  OR E1% = 0  THEN 350: REM - NO CORRECTIONS
  115. 1160  REM - RETRIEVE CORRECTED FILE FROM TRANSFER DISK
  116. 1170  HOME : PRINT : PRINT  SPC( 2)F$: PRINT : PRINT  SPC( 2)"HAS BEEN CORRECTED AND THE": PRINT : PRINT  SPC( 2)"CORRECTIONS STORED IN A": PRINT : PRINT  SPC( 2)"TEMPORARY FILE"
  117. 1180  PRINT : PRINT : PRINT  SPC( 2)"DO YOU WANT TO SAVE IT?  Y/N"
  118. 1190  POKE D,0: WAIT C,128: POKE D,0:ZA =  PEEK(C): IF ZA < >78  AND ZA < >110  AND ZA < >89  AND ZA < >121  THEN 1190
  119. 1200  IF ZA = 78  OR ZA = 110  THEN 350
  120. 1210  HOME : PRINT  SPC( 1)"FULL PATHNAME FOR CORRECTED FILE": VTAB 21: HTAB 12: PRINT "'?' FOR CATALOG": PRINT : HTAB 12: PRINT "'M' FOR MAIN MENU"
  121. 1220 ZB$ = F$: VTAB 4: HTAB 2: PRINT F$ SPC( 64): VTAB 4: HTAB 2: INPUT "";ZA$: IF ZA$ < >""  AND ZA$ < >"?"  AND ZA$ < >"M"  AND ZA$ < > CHR$(109)  THEN F$ = ZA$
  122. 1230  IF ZA$ = "?"  THEN  GOSUB 2150: GOTO 1210
  123. 1240  IF ZA$ = "M"  OR ZA$ =  CHR$(109)  THEN  POP : GOTO 350
  124. 1250  VTAB 4: HTAB 2: PRINT F$ SPC( 64): IF F$ = ""  THEN 1210
  125. 1260  IF ZB$ < >F$  THEN R% = 0:R$ = F$: GOSUB 2910: IF R% = 16  THEN 1210: REM - CHECK FILENAME SYNTAX
  126. 1270 F% = 5:ZF$ = F$: GOTO 2420: REM - CHECK/GET TEXT FILE
  127. 1280 F% = 6:ZF$ = C$: GOTO 2420: REM - CHECK/GET TEMPORARY FILE
  128. 1290  HOME : PRINT : PRINT  SPC( 2)"CORRECTING FILE": PRINT : PRINT  SPC( 2)"DO NOT HIT RESET": PRINT D$"DELETE"F$: PRINT D$"OPEN"F$: PRINT D$"OPEN"C$: ONERR  GOTO 1320
  129. 1300  PRINT D$"READ"C$: INPUT ZA$
  130. 1310  PRINT D$"APPEND"F$: PRINT ZA$: GOTO 1300
  131. 1320  PRINT D$"CLOSE": POKE 216,0: CALL 62248: HOME : GOTO 350
  132. 1330  REM - *** DICTIONARY ROUTINE ***
  133. 1340  REM - DICTIONARY MENU
  134. 1350 M$(1) = "ADD A WORD":M$(2) = "DELETE A WORD":M$(5) = "MOVE DICTIONARY TO /RAM5":M$(6) = "RECOVER DICTIONARY FROM /RAM5":M$(4) = "RETURN TO MAIN MENU":M$(3) = "EXAMINE DICTIONARY"
  135. 1360  HOME : PRINT : PRINT  SPC( 10)"*** DICTIONARY  ***":M = 4 +(Q >0) +1 *((Q >0)  AND (B1$ < >"")): GOSUB 2330
  136. 1370  HOME : ON A GOTO 1390,1440,3030,350,1660,1860
  137. 1380  REM - ADD WORDS
  138. 1390  PRINT : PRINT  SPC( 2)"ADD WORDS TO DICTIONARY": PRINT  SPC( 2);: FOR X = 1 TO 23: PRINT "=";: NEXT : PRINT 
  139. 1400  VTAB 19: FOR X = 1 TO 40: PRINT "-";: NEXT : PRINT : INVERSE : PRINT "1";: NORMAL : PRINT " STOP ADDING AND UPDATE DICTIONARY": PRINT : INVERSE : PRINT "2";: NORMAL : PRINT " RETURN TO MAIN MENU": VTAB 5
  140. 1410  GOSUB 2750: IF ZA$ = "1"  THEN  GOSUB 2580
  141. 1420  GOTO 350
  142. 1430  REM - DELETE WORDS
  143. 1440  PRINT : PRINT  SPC( 2)"DELETE WORDS FROM DICTIONARY": PRINT  SPC( 2);: FOR X = 1 TO 28: PRINT "=";: NEXT : PRINT 
  144. 1450  VTAB 19: FOR X = 1 TO 40: PRINT "-";: NEXT : PRINT : INVERSE : PRINT "1";: NORMAL : PRINT " STOP DELETING & UPDATE DICTIONARY": PRINT : INVERSE : PRINT "2";: NORMAL : PRINT " RETURN TO MAIN MENU": VTAB 5
  145. 1460  GOSUB 2750: IF ZA$ = "2"  THEN 350
  146. 1470 V = 29952:F% = 8:ZF$ = B$: GOTO 2420: REM - CHECK PRESENCE OF DICTIONARY DISK
  147. 1480  HOME : PRINT : PRINT  SPC( 2)"UPDATING THE DICTIONARY": PRINT : PRINT  SPC( 2)"DO NOT HIT RESET"
  148. 1490 W =  PEEK(V): IF W = 0  THEN  HOME : GOTO 350
  149. 1500 ZA$ = "": FOR X = V +1 TO V +W:ZA$ = ZA$ + CHR$( PEEK(X)): NEXT :V = V +1 +W
  150. 1510 ZF$ = B$ +"/" + LEFT$(ZA$,1): ONERR  GOTO 1530: REM - CHECK EXISTENCE OF DICTIONARY FILE
  151. 1520  PRINT D$"OPEN"ZF$: PRINT D$"READ"ZF$: INPUT ZB$: POKE 216,0: PRINT D$"CLOSE": GOTO 1550
  152. 1530 R% =  PEEK(222): POKE 216,0: CALL 62248: PRINT D$"CLOSE": IF R% = 5  THEN  PRINT D$"DELETE"ZF$
  153. 1540  GOTO 1490
  154. 1550  PRINT D$"OPEN"B$"/TEMP": PRINT D$"CLOSE": PRINT D$"DELETE"B$"/TEMP": PRINT D$"OPEN"B$"/TEMP": REM - CREATE EMPTY TEMPORARY FILE
  155. 1560  ONERR  GOTO 1600
  156. 1570  PRINT D$"OPEN"ZF$: REM - TRANSFER WORDS FROM DICTIONARY FILE TO TEMPORARY FILE
  157. 1580  PRINT D$"READ"ZF$: INPUT ZB$: IF ZB$ < >ZA$  THEN  PRINT D$"WRITE"B$"/TEMP": PRINT ZB$
  158. 1590  GOTO 1580
  159. 1600  POKE 216,0: CALL 62248: PRINT D$"CLOSE": PRINT D$"DELETE"ZF$
  160. 1610  ONERR  GOTO 1640
  161. 1620  PRINT D$"OPEN"ZF$: PRINT D$"OPEN"B$"/TEMP": REM - TRANSFER WORDS FROM TEMPORARY FILE TO DICTIONARY FILE
  162. 1630  PRINT D$"READ"B$"/TEMP": INPUT ZA$: PRINT D$"WRITE"ZF$: PRINT ZA$: GOTO 1630
  163. 1640  POKE 216,0: CALL 62248: PRINT D$"CLOSE": GOTO 1490
  164. 1650  REM - MOVE DICTIONARY TO /RAM5
  165. 1660  HOME : PRINT : PRINT  SPC( 2)"WHAT IS THE NAME": PRINT : PRINT  SPC( 2)"OF THE DICTIONARY DISK?"
  166. 1670  VTAB 7: PRINT B$: PRINT : VTAB 7: INPUT "";ZA$: IF ZA$ < >""  THEN B$ = ZA$
  167. 1680 B1$ = B$: VTAB 7: PRINT  SPC( 64): PRINT : VTAB 7: PRINT B$
  168. 1690  IF B$ < >"/DICTIONARY"  THEN R$ = B$:R = 1: GOSUB 2910: IF R% = 16  THEN 1660
  169. 1700 F% = 9:ZF$ = B$: GOTO 2420: REM - CHECK/GET DICTIONARY FILE
  170. 1710  FOR X = 65 TO 90: PRINT D$"OPEN"B$"/" CHR$(X): PRINT D$"CLOSE": NEXT 
  171. 1720  PRINT D$"OPEN"B$",TDIR": PRINT D$"READ"B$:ZA = 0:ZB = 0: REM - GET SIZE OF DICTIONARY
  172. 1730  INPUT ZA$: INPUT ZA$: INPUT ZA$
  173. 1740  INPUT ZA$:ZC =  VAL( MID$ (ZA$,23,6)):ZB = ZB +ZC: IF ZC >(ZA)  THEN ZA = ZC
  174. 1750  IF ZA$ < >""  THEN 1740
  175. 1760  PRINT D$"CLOSE":ZA = ZA +ZB
  176. 1770  HOME : IF ZA >Q  THEN  PRINT : PRINT  CHR$(7) SPC( 2)"NOT ENOUGH SPACE ON /RAM5": PRINT : PRINT  SPC( 2)"PRESS RETURN TO CONTINUE": POKE D,0: WAIT C,128: POKE D,0: GOTO 350
  177. 1780  PRINT : PRINT  SPC( 2)"TRANSFERRING DICTIONARY": PRINT : PRINT  SPC( 2)"PLEASE WAIT"
  178. 1790  FOR X = 65 TO 90:F1$ = B$ +"/" + CHR$(X):F2$ = "/RAM5/" + CHR$(X): ONERR  GOTO 1830
  179. 1800  PRINT D$"OPEN"F1$: PRINT D$"OPEN"F2$: PRINT D$"CLOSE"F2$: PRINT D$"DELETE"F2$: PRINT D$"OPEN"F2$
  180. 1810  PRINT D$"READ"F1$: INPUT ZA$
  181. 1820  PRINT D$"WRITE"F2$: PRINT ZA$: GOTO 1810
  182. 1830  POKE 216,0: CALL 62248: PRINT D$"CLOSE"
  183. 1840  NEXT :B$ = "/RAM5":Q = Q -ZA:G% = 1: GOTO 350
  184. 1850  REM - RECOVER DICTIONARY FROM /RAM5
  185. 1860 F% = 10:ZF$ = B1$: GOTO 2420: REM - CHECK/GET DICTIONARY FILE
  186. 1870  PRINT : PRINT  SPC( 2)"TRANSFERRING DICTIONARY": PRINT : PRINT  SPC( 2)"PLEASE WAIT": FOR X = 65 TO 90: ONERR  GOTO 1910
  187. 1880 F2$ = B1$ +"/" + CHR$(X):F1$ = "/RAM5/" + CHR$(X): PRINT D$"DELETE"F2$: PRINT D$"OPEN"F1$: PRINT D$"OPEN"F2$
  188. 1890  PRINT D$"READ"F1$: INPUT ZA$
  189. 1900  PRINT D$"WRITE"F2$: PRINT ZA$: GOTO 1890
  190. 1910  POKE 216,0: CALL 62248: PRINT D$"CLOSE"
  191. 1920  PRINT D$"DELETE"F1$: NEXT :G% = 0: GOTO 350
  192. 1930  REM - SUBROUTINE: SET OR RESET FILE NAMES
  193. 1940  HOME : PRINT : VTAB 2: PRINT  SPC( 1)"FULL PATHNAME FOR FILE TO BE CHECKED:"
  194. 1950  VTAB 8: PRINT  SPC( 1)"VOLUME/DIR NAME FOR DICTIONARY FILES:"
  195. 1960  VTAB 14: PRINT  SPC( 1)"VOLUME/DIR NAME FOR TRANSFER:": IF  LEFT$(C$,4) = "/RAM"  THEN C$ = "/TRANSFER"
  196. 1970  VTAB 21: HTAB 12: PRINT "'?' FOR CATALOG": PRINT : HTAB 12: PRINT "'M' FOR MAIN MENU"
  197. 1980  VTAB 4: HTAB 2: PRINT F$ SPC( 64): VTAB 4: HTAB 2: INPUT "";ZA$: IF ZA$ < >""  AND ZA$ < >"?"  AND ZA$ < >"M"  AND ZA$ < > CHR$(109)  THEN F$ = ZA$
  198. 1990  IF ZA$ = "?"  THEN  GOSUB 2150: GOTO 1940
  199. 2000  IF ZA$ = "M"  OR ZA$ =  CHR$(109)  THEN  POP : GOTO 350
  200. 2010  VTAB 4: HTAB 2: PRINT F$ SPC( 64): IF F$ = ""  THEN 1980
  201. 2020 R$ = F$:R = 0: GOSUB 2910: IF R% = 16  THEN 1940
  202. 2030  VTAB 10: HTAB 2: PRINT B$ SPC( 64): VTAB 10: HTAB 2: INPUT "";ZA$: IF ZA$ < >""  AND ZA$ < >"?"  AND ZA$ < >"M"  AND ZA$ < > CHR$(109)  THEN B$ = ZA$
  203. 2040  IF ZA$ = "?"  THEN  GOSUB 2150: GOTO 1940
  204. 2050  IF ZA$ = "M"  OR ZA$ =  CHR$(109)  THEN  POP : GOTO 350
  205. 2060  VTAB 10: HTAB 2: PRINT B$ SPC( 64): IF B$ = ""  THEN 2030
  206. 2070  IF B$ < >"/DICTIONARY"  THEN R$ = B$:R = 1: GOSUB 2910: IF R% = 16  THEN 1940
  207. 2080  VTAB 16: HTAB 2: PRINT C$ SPC( 64): VTAB 16: HTAB 2: INPUT "";ZA$: IF ZA$ < >""  AND ZA$ < >"?"  AND ZA$ < >"M"  AND ZA$ < > CHR$(109)  THEN C$ = ZA$
  208. 2090  IF ZA$ = "?"  THEN  GOSUB 2150: GOTO 1940
  209. 2100  IF ZA$ = "M"  OR ZA$ =  CHR$(109)  THEN  POP : GOTO 350
  210. 2110  VTAB 16: HTAB 2: PRINT C$ SPC( 64): IF C$ = ""  OR  LEFT$(C$,4) = "/RAM"  THEN 2080
  211. 2120  IF C$ < >"/TRANSFER"  THEN R$ = C$:R = 1: GOSUB 2910: IF R% = 16  THEN 1940
  212. 2130  RETURN 
  213. 2140  REM - SUBROUTINE: CATALOG A DISK
  214. 2150 M$(1) = "BY PATHNAME":M$(2) = "BY SLOT & DRIVE":M$(3) = "RETURN"
  215. 2160  HOME : PRINT : PRINT  SPC( 8)"*** CATALOG A DISK ***":M = 3: GOSUB 2330
  216. 2170  HOME : IF A = 3  THEN  RETURN 
  217. 2180  IF A = 2  THEN 2220
  218. 2190  PRINT : VTAB 4: PRINT  SPC( 1)"PATHNAME FOR CATALOG:"
  219. 2200  VTAB 6: HTAB 2: PRINT F$ SPC( 64): VTAB 6: HTAB 2: INPUT "";R$: IF R$ = ""  THEN 2200
  220. 2210 R = 1: GOSUB 2910: ON (R% = 16) +1 GOTO 2280,2160
  221. 2220  PRINT : VTAB 4: PRINT  SPC( 2)"SLOT 6": VTAB 6: PRINT  SPC( 1)"DRIVE 1":ZS$ = "6":ZD$ = "1"
  222. 2230  VTAB 4: HTAB 8: GET ZA$: IF ZA$ =  CHR$(27)  THEN 2310
  223. 2240  IF  VAL(ZA$) >0  AND  VAL(ZA$) <8  THEN ZS$ = ZA$: PRINT ZS$
  224. 2250  VTAB 6: HTAB 8: GET ZA$: IF ZA$ =  CHR$(27)  THEN 2310
  225. 2260  IF  VAL(ZA$) >0  AND  VAL(ZA$) <3  THEN ZD$ = ZA$: PRINT ZD$
  226. 2270 R$ = ",S" +ZS$ +",D" +ZD$
  227. 2280 R = 3: ONERR  GOTO 2840
  228. 2290  PRINT : PRINT D$"CAT"R$: POKE D,0: WAIT C,128: POKE D,0
  229. 2300  POKE 216,0
  230. 2310 A = 3: GOTO 2170
  231. 2320  REM - SUBROUTINE: MENU
  232. 2330 A = 1:B = 49: PRINT : VTAB 20: HTAB 4: PRINT "ARROW OR NUMBER TO SELECT": PRINT : HTAB 4: PRINT "RETURN OR NUMBER TO ACCEPT"
  233. 2340  FOR X = 1 TO M: VTAB 4 +2 *X: HTAB 4: PRINT X") ";: IF A = X  THEN  INVERSE 
  234. 2350  PRINT M$(X): NORMAL : NEXT 
  235. 2360  POKE D,0: WAIT C,128: POKE D,0:B% =  PEEK(C): IF B% = 13  OR B% = B  THEN  RETURN 
  236. 2370  IF B% = 8  OR B% = 11  THEN A = A -1 +M *(A = 1): GOTO 2340
  237. 2380  IF B% = 21  OR B% = 10  THEN A = A +1 -M *(A = M): GOTO 2340
  238. 2390  IF B% <49  OR B% >48 +M  THEN 2360
  239. 2400 B = B%:A = B -48: GOTO 2340
  240. 2410  REM - CHECK/GET FILE
  241. 2420  ONERR  GOTO 2460
  242. 2430  IF F% = 11  THEN  PRINT D$"OPEN"E$: PRINT D$"CLOSE": POKE 216,0: GOTO 3140
  243. 2440  IF F% = 5  THEN  PRINT D$"OPEN"F$: PRINT D$"CLOSE": POKE 216,0: GOTO 1280
  244. 2450  PRINT : PRINT D$"OPEN"ZF$",T$01": REM - CHECK FOR PRESENCE OF FILE
  245. 2460  IF F% = 3  THEN ZF$ = ZF$ +"/TEMP"
  246. 2470 R% =  PEEK(222): POKE 216,0: CALL 62248: IF R% = 13  THEN 2520: REM - ERR 13 IS 'FILE TYPE MISMATCH' SO FILE IS PRESENT
  247. 2480  IF F% = 11  THEN  POKE 216,0: CALL 62248: HOME : PRINT "UNABLE TO LOCATE "E$: PRINT : PRINT "PRESS ANY KEY": POKE D,0: WAIT C,128: POKE D,0: GOTO 3090
  248. 2490  POKE 34,19: HOME : PRINT  CHR$(7) SPC( 4)"PLACE THE DISK WITH": PRINT  SPC( 4)ZF$: PRINT  SPC( 4)"IN THE DRIVE AND PRESS RETURN": POKE D,0: WAIT C,128: POKE D,0:ZS =  PEEK(C)
  249. 2500  HOME : POKE 34,0: IF ZS = 27  THEN 350
  250. 2510  ON F% GOTO 490,730,870,910,1270,1280,2580,1470,1700,1860,3130
  251. 2520 R = 2:R$ = ZF$: ONERR  GOTO 2840
  252. 2530  IF ZF$ = B$  OR ZF$ = B1$  OR ZF$ = C$  THEN 2550
  253. 2540  PRINT D$"OPEN"ZF$: PRINT D$"READ"ZF$: GET Z$: PRINT D$"CLOSE"
  254. 2550  POKE 216,0
  255. 2560  ON F% GOTO 610,740,880,920,1280,1290,2590,1480,1720,1870,3140
  256. 2570  REM - SUBROUTINE: ADD WORDS TO DICTIONARY
  257. 2580 F% = 7:ZF$ = B$: GOTO 2420: REM - CHECK FOR DICTIONARY DISK
  258. 2590  PRINT : PRINT  SPC( 2)"UPDATING THE DICTIONARY": PRINT : PRINT  SPC( 2)"DO NOT HIT RESET"
  259. 2600 V = 29952: POKE 34,6: VTAB 7
  260. 2610  IF  PEEK(V) >127  THEN V = V + PEEK(V) -127: GOTO 2610
  261. 2620  IF  PEEK(V) = 0  THEN  POKE 34,0: RETURN 
  262. 2630 ZA$ = "": FOR X = V +1 TO  PEEK(V) +V:ZA$ = ZA$ + CHR$( PEEK(X) -32 *( PEEK(X) >96)): NEXT : PRINT ZA$
  263. 2640 ZF$ = B$ +"/" + LEFT$(ZA$,1): ONERR  GOTO 2660
  264. 2650  PRINT D$"OPEN"ZF$",T$01": REM - CHECK FOR EXISTENCE OF FILE
  265. 2660 R% =  PEEK(222): POKE 216,0: CALL 62248: REM - R% WILL BE 13 IF FILE IS PRESENT
  266. 2670  PRINT D$"CLOSE": PRINT D$"OPEN"ZF$: IF R% < >13  THEN  PRINT D$"WRITE"ZF$: PRINT ZA$: GOTO 2730: REM - ESTABLISH NEW FILE
  267. 2680  ONERR  GOTO 2720
  268. 2690  PRINT D$"READ"ZF$
  269. 2700  INPUT ZB$: IF ZB$ < >ZA$  THEN 2700: REM - CHECK FOR DUPLICATE WORD
  270. 2710  IF ZB$ = ZA$  THEN 2730: REM - DUPLICATE.  DON'T FILE WORD
  271. 2720  POKE 216,0: CALL 62248: PRINT D$"CLOSE": PRINT D$"OPEN"ZF$: PRINT D$"APPEND"ZF$: PRINT ZA$: REM - NOT A DUPLICATE.  ADD TO FILE
  272. 2730  POKE 216,0: PRINT D$"CLOSE":V = V +1 + PEEK(V): GOTO 2610
  273. 2740  REM - SUBROUTINE: COMPILE WORDS TO MODIFY DICTIONARY
  274. 2750  POKE 34,4: POKE 35,17:V = 29952: POKE V,0
  275. 2760  INPUT ZA$: IF ZA$ = "1"  OR ZA$ = "2"  THEN  POKE 34,0: POKE 35,24: HOME : RETURN 
  276. 2770 ZA = 0: IF  LEN(ZA$) <2  OR  LEN(ZA$) >30  THEN ZA = 1: GOTO 2810
  277. 2780  IF  LEFT$(ZA$,1) = "'"  OR  LEFT$(ZA$,1) = "-"  OR  RIGHT$(ZA$,1) = "'"  OR  RIGHT$(ZA$,1) = "-"  THEN ZA = 1
  278. 2790 ZB$ = "": FOR X = 1 TO  LEN(ZA$):ZB =  ASC( MID$ (ZA$,X,1)): IF (ZB <65  AND ZB < >39  AND ZB < >45)  OR (ZB >90  AND ZB <97)  OR ZB >122  THEN ZA = 1
  279. 2800 ZB = ZB -32 *(ZB >96):ZB$ = ZB$ + CHR$(ZB): NEXT : REM - CONVERT WORD TO UPPER CASE
  280. 2810  IF ZA = 1  THEN  PRINT  CHR$(7)"INVALID WORD.  TRY AGAIN": GOTO 2760
  281. 2820  POKE V, LEN(ZB$):W = 1: FOR X = V +1 TO V + LEN(ZB$): POKE X, ASC( MID$ (ZB$,W,1)):W = 1 +W: NEXT :V = V +1 + LEN(ZB$): POKE V,0: GOTO 2760
  282. 2830  REM - DISK ERROR MESSAGE
  283. 2840  HOME : PRINT : PRINT D$"CLOSE": POKE 216,0: CALL 62248: IF  PEEK(222) = 5  THEN  PRINT D$"DELETE"R$: IF  RIGHT$(ZF$,4) = "TEMP"  THEN 2890
  284. 2850  IF F% = 11  THEN  PRINT : PRINT "NO WORDS IN "E$: VTAB 10: PRINT "PRESS ANY KEY TO CONTINUE": WAIT C,128: POKE D,0: GOTO 3090
  285. 2860  VTAB 15: PRINT  SPC( 3) CHR$(15)"UNABLE TO ACCESS": PRINT : PRINT  SPC( 3)R$: VTAB 19: PRINT  SPC( 7)"PRESS RETURN TO TRY AGAIN": PRINT : PRINT  SPC( 10)"OR ESC TO RESTART"
  286. 2870  PRINT  CHR$(7): POKE D,0: WAIT C,128: POKE D,0:ZS =  PEEK(C): IF ZS < >13  AND ZS < >27  THEN 2870
  287. 2880  IF ZS = 27  THEN 350
  288. 2890  HOME : ON R GOTO 270,2420,2160
  289. 2900  REM - SUBROUTINE: CHECK FOR VALID PRODOS PATHNAME    
  290. 2910  IF  LEN(R$) <4 -2 *R  OR  LEFT$(R$,1) < >"/"  OR  RIGHT$(R$,1) = "/"  OR R$ = "/RAM"  THEN R% = 16: GOTO 2980
  291. 2920  IF R  THEN 2950
  292. 2930 R% = 16: FOR XS = 2 TO  LEN(R$): IF  MID$ (R$,XS,1) = "/"  THEN R% = 0
  293. 2940  NEXT : IF R% = 16  THEN 2980
  294. 2950  ONERR  GOTO 2970
  295. 2960  PRINT D$"OPEN"R$",T$01"
  296. 2970 R% =  PEEK(222): POKE 216,0: CALL 62248: PRINT D$"CLOSE": IF R% < >16  THEN 3010
  297. 2980  HOME : NORMAL : VTAB 4: PRINT  SPC( 3) CHR$(15)"INCORRECT OR INCOMPLETE PATHNAME": PRINT : PRINT  SPC( 3)R$: VTAB 15: PRINT  SPC( 7)"PRESS RETURN TO TRY AGAIN": PRINT : PRINT  SPC( 11)"OR ESC TO QUIT"
  298. 2990  PRINT  CHR$(7): POKE D,0: WAIT C,128: POKE D,0:ZS =  PEEK(C): IF ZS < >13  AND ZS < >27  THEN 2990
  299. 3000  HOME : IF ZS = 27  THEN  POP : GOTO 350
  300. 3010  RETURN 
  301. 3020  REM - EXAMINE DICTIONARY
  302. 3030  HOME : VTAB 2: PRINT  SPC( 1)"FULL PATHNAME OF DICTIONARY:": VTAB 21: HTAB 12: PRINT "'?' FOR CATALOG": PRINT : HTAB 12: PRINT "'M' FOR MAIN MENU"
  303. 3040  VTAB 4: HTAB 2: PRINT B$ SPC( 64): VTAB 4: HTAB 2: INPUT "";ZA$: IF ZA$ < >""  AND ZA$ < >"?"  AND ZA$ < >"M"  AND ZA$ < > CHR$(109)  THEN B$ = ZA$
  304. 3050  IF ZA$ = "?"  THEN  GOSUB 2150: GOTO 3030
  305. 3060  IF ZA$ = "M"  OR ZA$ =  CHR$(109)  THEN 350
  306. 3070  VTAB 4: HTAB 2: PRINT B$ SPC( 64): IF B$ = ""  THEN 3040
  307. 3080  IF B$ < >"/DICTIONARY"  THEN R$ = B$:R = 1: GOSUB 2910: IF R% = 16  THEN 3040
  308. 3090  HOME : PRINT : PRINT  SPC( 5)"*** EXAMINE DICTIONARY ***":M$(1) = "CHOOSE A LETTER":M$(2) = "RETURN TO MAIN MENU":M = 2: GOSUB 2330: IF A = 2  THEN 350
  309. 3100  HOME : PRINT : PRINT  SPC( 2)"WHAT LETTER DO YOU WANT TO SEE? ";: INPUT "";ZA$: IF ZA$ = ""  THEN 3100
  310. 3110 ZA =  ASC(ZA$): IF ZA <65  OR (ZA >90  AND ZA <97)  OR ZA >122  OR  LEN(ZA$) >1  THEN 3100
  311. 3120 E$ = B$ +"/" + CHR$(ZA -32 *(ZA >90))
  312. 3130 F% = 11:ZF$ = E$: GOTO 2420
  313. 3140  HOME : PRINT  SPC( 10)"DICTIONARY - " RIGHT$(E$,1): PRINT : PRINT  SPC( 3)"PRESS CONTROL S TO PAUSE": PRINT  SPC( 3)"OR ESC TO EXIT": POKE 34,5: PRINT 
  314. 3150  ONERR  GOTO 3200
  315. 3160  PRINT D$"OPEN"E$: PRINT D$"READ"E$
  316. 3170  SPEED= 100
  317. 3180  INPUT ZA$: PRINT ZA$: IF  PEEK(C) >127  THEN  POKE D,0: IF  PEEK(C) = 27  THEN 3210
  318. 3190  GOTO 3180
  319. 3200  POKE 216,0: PRINT D$"CLOSE": PRINT : PRINT "NO MORE WORDS BEGINNING WITH " RIGHT$(E$,1)
  320. 3210  PRINT D$"CLOSE": SPEED= 255: POKE 34,0: PRINT : PRINT : PRINT : PRINT "PRESS ANY KEY": POKE D,0: WAIT C,128: POKE D,0: GOTO 3090