home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib39b.dsk / TEST.WRITER.bas < prev   
BASIC Source File  |  2023-02-26  |  32KB  |  393 lines

  1. 1  REM   ******************************
  2. 2  REM   * TEST.WRITER                *
  3. 3  REM   * BY DWANE JACKETT           *
  4. 4  REM   * COPYRIGHT(C) 1990          *
  5. 5  REM   * MINDCRAFT PUBL. CORP.      *
  6. 6  REM   * CONCORD, MA 01742          *
  7. 7  REM   ******************************
  8. 10  FOR I = 768 TO 771: POKE I,0: NEXT : PRINT  CHR$(27): PRINT  CHR$(17): PRINT " ": PRINT  CHR$(4)"IN#0": ONERR  GOTO 3690
  9. 20 BS$ =  CHR$(8) +" " + CHR$(8):D$ =  CHR$(4):PP$(0) = "   ":PP$(1) = "-->": DIM Q$(25),N(25): POKE 33,40: POKE 34,0: IF  PEEK(768) = 0  THEN 280
  10. 30 R =  PEEK(768): POKE 768,0: ON R GOTO 480,1030,280
  11. 40 A$ = "": FOR P = 1 TO 240
  12. 50  GET P$: ON (P$ < > CHR$(13)) GOTO 70:P = 240: NEXT : PRINT " ": IF  LEN(A$) >1  OR A$ = ""  THEN  RETURN 
  13. 60 A =  ASC(A$):A = A -32 *(A >96):A$ =  CHR$(A): RETURN 
  14. 70  IF P$ =  CHR$(27)  THEN A$ = A$ + CHR$(27):P = 240: NEXT : PRINT " ": RETURN 
  15. 80  IF P$ =  CHR$(8)  OR P$ =  CHR$(127)  THEN 140
  16. 90  ON ( ASC(P$) <32) GOTO 120: IF P =  >236  THEN  CALL  -198
  17. 100 A$ = A$ +P$: PRINT P$;: NEXT : PRINT " "
  18. 110  POKE  -16368,0:VT =  PEEK(37): VTAB 23: HTAB 7: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: VTAB 22: CALL  -958: VTAB VT: PRINT : RETURN 
  19. 120  CALL  -198: GET P$: IF P$ =  CHR$(13)  THEN P = 240: NEXT : PRINT " ": RETURN 
  20. 130  GOTO 70
  21. 140  IF A$ = ""  THEN P = 240: NEXT : GOTO 40
  22. 150  IF  LEN(A$) = 1  THEN A$ = "": PRINT BS$;:P = 240: NEXT : GOTO 40
  23. 160 A$ =  LEFT$(A$, LEN(A$) -1): PRINT BS$;:P = P -1: GOTO 50
  24. 170  GET Z$: IF Z$ < > CHR$(13)  THEN Q$ = Q$ +Z$: GOTO 170
  25. 180  RETURN 
  26. 190  IF PL <44  THEN  RETURN 
  27. 200 PF = 0: FOR II = PL TO 66: PRINT : NEXT :P = P +1: IF PB$ = "N"  THEN 230
  28. 210  IF P >1  THEN  PRINT " ": PRINT D$"PR#0": FOR II = 1 TO 3: CALL  -198: NEXT : HOME : VTAB 11: HTAB 13: PRINT "- PAGE BREAK -": VTAB 14: HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE.";
  29. 220  IF P >1  THEN  GET R$: PRINT " ": PRINT D$"PR#1": PRINT  CHR$(9)"80N"
  30. 230  PRINT : PRINT : PRINT : HTAB 5: PRINT NA$;: HTAB 39: PRINT " "; SPC( 23);"PAGE ";P: HTAB 5: PRINT ID$: PRINT : PRINT :PL = 8: RETURN 
  31. 240  REM    PRINTING FORMATTER - 40/80 COLUMNS
  32. 250 PC = 32 +40 *(PC$ = "8"): IF  LEN(Q$) < = PC  THEN  HTAB HT: PRINT Q$:PL = PL +1: RETURN 
  33. 260  FOR X = PC TO 1  STEP  -1: IF  MID$ (Q$,X,1) < >" "  THEN  NEXT 
  34. 270 Q1$ =  LEFT$(Q$,X -1): HTAB HT: PRINT Q1$:PL = PL +1:Q$ =  MID$ (Q$,X +1,( LEN(Q$) - LEN(Q1$))):X = 1: NEXT : GOTO 250
  35. 280  POKE 34,0: POKE 771,0:Q$ = "QUESTIONS": HOME : HTAB 6: PRINT "TEST.WRITER BY DWANE JACKETT": HTAB 5: PRINT "(C) 1990 MINDCRAFT PUBL. CORP."
  36. 290  VTAB 4: HTAB 11: PRINT "1. ENTER";: HTAB 21: PRINT Q$: PRINT : HTAB 11: PRINT "2. LOAD";: HTAB 21: PRINT Q$: PRINT : HTAB 11: PRINT "3. PRINT";: HTAB 21: PRINT Q$: PRINT : HTAB 11: PRINT "4. EDIT";: HTAB 21: PRINT Q$: PRINT 
  37. 300  HTAB 11: PRINT "5. SAVE   ";Q$: PRINT : HTAB 11: PRINT "6. DELETE A FILE": PRINT : HTAB 11: PRINT "7. CATALOG"
  38. 310  PRINT : HTAB 11: PRINT "8. SET DISK DRIVE": PRINT : HTAB 11: PRINT "9. QUIT PROGRAM"
  39. 320  VTAB 23: PRINT " USE ARROWS OR SELECT NUMBER: ";:NN = 9:R = 1: GOSUB 3820: IF Z = 20  THEN R = 0: GOSUB 3860: CALL  -198: GOTO 280
  40. 330 MM = R: ON R GOTO 340,340,410,410,410,3230,3340,3370,3520
  41. 340  IF TYPE = 0  THEN  ON R GOTO 480,1030
  42. 350  HOME : FOR I = 1 TO 3: CALL  -198: NEXT :HT = (27 - LEN(TQ$) -(TQ >10))/2: HTAB HT: VTAB 5: PRINT TQ;" ";TQ$;" QUESTIONS": PRINT : HTAB 13: PRINT "NOW IN MEMORY."
  43. 360  VTAB 10: HTAB 5: PRINT "(ADD QUESTIONS FROM EDIT MENU)": IF P1$ < >""  AND  PEEK(48896) = 76  THEN  PRINT : HTAB 8: PRINT "MAY NEED TO RESET PREFIX":R = 3
  44. 370  VTAB 17: HTAB 4: PRINT "DELETE THESE QUESTIONS? (Y/N) ";: GOSUB 40: IF A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(27)  THEN  CALL  -198: GOTO 370
  45. 380  IF A$ = "N"  OR A$ =  CHR$(27)  THEN 280
  46. 390  POKE 768,R: CLEAR :S =  PEEK(769):D =  PEEK(770): IF S < >0  THEN SL$ =  CHR$(S +48):DD$ =  CHR$(D +48):DX$ = ",S" +SL$ +",D" +DD$
  47. 400  GOTO 20
  48. 410  IF TYPE < >0  THEN  ON R -2 GOTO 1280,2140,2980
  49. 420  HOME : FOR I = 1 TO 3: CALL  -198: NEXT :TQ$ = "THERE ARE NO QUESTIONS TO": ON R -2 GOTO 430,440,450
  50. 430 TQ$ = TQ$ +" PRINT.": GOTO 460
  51. 440 TQ$ = TQ$ +" EDIT.": GOTO 460
  52. 450 TQ$ = TQ$ +" SAVE."
  53. 460 HT = (40 - LEN(TQ$))/2: HTAB HT: VTAB 8: PRINT TQ$:TQ$ = "": GOSUB 3600: GOTO 280
  54. 470  REM   ENTER QUESTIONS
  55. 480  HOME : PRINT "ENTER QUESTIONS";: HTAB 22: PRINT "<ESC> TO MAIN MENU"
  56. 490  VTAB 4: HTAB 11: PRINT "1. MULTIPLE CHOICE": PRINT : HTAB 11: PRINT "2. TRUE AND FALSE": PRINT : HTAB 11: PRINT "3. FILL-IN-THE-BLANKS": PRINT : HTAB 11: PRINT "4. ESSAY": PRINT : HTAB 11: PRINT "5. MATCHING"
  57. 500  VTAB 23: PRINT " USE ARROWS OR SELECT NUMBER: ";:NN = 5:R = 1: GOSUB 3820: IF Z = 20  THEN 280
  58. 510 TYPE = R: ON R GOTO 520,530,540,550,560
  59. 520 TQ$ = "MULTIPLE CHOICE": DIM MC$(25,7),MC(25): GOTO 570
  60. 530 TQ$ = "TRUE AND FALSE": DIM TF(25): GOTO 570
  61. 540 TQ$ = "FILL-IN-THE-BLANKS": DIM B$(25): GOTO 570
  62. 550 TQ$ = "ESSAY QUESTIONS": GOTO 570
  63. 560 TQ$ = "MATCHING": DIM C1$(25),C2$(25),M(25)
  64. 570  POKE 34,0: HOME : IF EDIT = 0  THEN X1$ = TQ$:X2$ = " TO MAIN MENU": IF TQ = 0  THEN X2$ = " QUESTION MENU": GOTO 590
  65. 580  IF EDIT < >0  THEN X2$ = " TO EDIT MENU":X1$ = "ADD QUESTIONS": IF EDIT = 3  THEN X1$ = "REWRITE QUESTIONS"
  66. 590  PRINT X1$;: HTAB 22: PRINT "<ESC>";X2$: POKE 34,3:TQ = TQ +1: IF TQ >25  THEN TQ = 25: GOTO 280
  67. 600  IF TYPE = 5  THEN  FOR II = 4 TO 6: VTAB II: HTAB 34 +(TQ >9): PRINT ":": NEXT 
  68. 610  VTAB 5: PRINT TQ;". ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 610
  69. 620  ON (A$ < > CHR$(27)) GOTO 630: ON (EDIT = 3) GOTO 2770:Q$(TQ) = "":TQ = TQ -1: ON (EDIT = 1) GOTO 2140: ON (TQ >0) GOTO 280:R = MM: GOTO 390
  70. 630  IF  RIGHT$(A$,1) =  CHR$(27)  THEN  HOME : GOTO 600
  71. 640  IF TYPE = 5  AND  LEN(A$) >30  THEN A$ =  LEFT$(A$,30)
  72. 650 Q$(TQ) = A$: ON TYPE GOTO 660,790,830,950,870
  73. 660 J = 64: PRINT :VT =  PEEK(37) +1
  74. 670  VTAB VT: HTAB 1:J = J +1: IF J = 70  THEN  PRINT " ": GOTO 730
  75. 680  PRINT  CHR$(J);") ";: GOSUB 40: IF A$ = ""  THEN 720
  76. 690  ON (A$ < > CHR$(27)) GOTO 700: GOTO 620
  77. 700  IF  RIGHT$(A$,1) =  CHR$(27)  THEN  VTAB VT: HTAB 1: CALL  -958:J = J -1: GOTO 670
  78. 710 MC$(TQ,J -64) = A$:VT =  PEEK(37) +1: GOTO 670
  79. 720  IF J = 65  THEN  CALL  -198:VT =  PEEK(37) -1: VTAB VT: GOTO 660
  80. 730  IF J <70  THEN  FOR K = J TO 70:MC$(TQ,K -64) = "^^^": NEXT 
  81. 740 VT =  PEEK(37): IF VT =  >21  THEN VT = 21
  82. 750  PRINT : VTAB VT: HTAB 1: CALL  -958: VTAB VT +2: PRINT "LETTER OF CORRECT RESPONSE = ";: GOSUB 40: IF  LEN(A$) >1  OR A$ = ""  THEN  CALL  -198: GOTO 750
  83. 760  ON (A$ < > CHR$(27)) GOTO 770: ON (EDIT = 3) GOTO 2770:Q$(TQ) = "": FOR Z = 1 TO 6:MC$(TQ,Z) = "": NEXT :TQ = TQ -1: ON (EDIT = 1) GOTO 2140: ON (TQ >0) GOTO 280:R = MM: GOTO 390
  84. 770 A$ =  LEFT$(A$,1):R =  ASC(A$) -64: IF R <1  OR R +64 =  >J  THEN  CALL  -198: GOTO 750
  85. 780 MC(TQ) = R: GOTO 950
  86. 790  VTAB 15: HTAB 1: PRINT "IS THIS TRUE (T) OR FALSE (F)?": PRINT : PRINT "ENTER <T> OR <F> --> ";: GOSUB 40: IF A$ < >"T"  AND A$ < >"F"  AND A$ < > CHR$(27)  THEN  CALL  -198: VTAB 14: CALL  -958: GOTO 790
  87. 800  ON (A$ < > CHR$(27)) GOTO 810: GOTO 620
  88. 810  IF A$ < >"T"  AND A$ < >"F"  THEN  CALL  -198: GOTO 790
  89. 820 TF(TQ) = (A$ = "T"): GOTO 950
  90. 830 VT =  PEEK(37): VTAB VT +5: PRINT "FILL IN THE BLANK WITH -": PRINT 
  91. 840  VTAB VT +7: PRINT "--> ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 840
  92. 850  ON (A$ =  CHR$(27)) GOTO 620: IF  RIGHT$(A$,1) =  CHR$(27)  THEN  VTAB VT +6: CALL  -958: GOTO 840
  93. 860 B$(TQ) = A$: GOTO 950
  94. 870 C1 = TQ:C1$(TQ) = Q$(TQ):VT =  PEEK(37) +3
  95. 880  VTAB VT +5: HTAB 5: CALL  -958: FOR II = VT +6 TO VT +8: VTAB II: HTAB 35 +(TQ >9): PRINT ":": NEXT 
  96. 890  VTAB VT +5: HTAB 1: PRINT "THIS IS MATCHED WITH": PRINT : VTAB VT +7: PRINT "--> ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 880
  97. 900  ON (A$ < > CHR$(27)) GOTO 910: ON (EDIT = 3) GOTO 2770:C1$(TQ) = "":TQ = TQ -1: ON (EDIT = 1) GOTO 2140: ON (TQ >0) GOTO 280:R = MM: GOTO 390
  98. 910  IF  RIGHT$(A$,1) =  CHR$(27)  THEN 880
  99. 920  IF  LEN(A$) >30  THEN A$ =  LEFT$(A$,30)
  100. 930  IF EDIT < >3  THEN C2$(TQ) = A$:M(TQ) = TQ:C2 = TQ: GOTO 950
  101. 940 C2$(M(I)) = A$:M(M(I)) = TQ:C2 = TQ: GOTO 950
  102. 950  POKE 34,0: VTAB 1: HTAB 1: CALL  -868: VTAB 1: HTAB 1: IF EDIT = 0  THEN  PRINT TQ$;: HTAB 22: PRINT "<ESC> TO MAIN MENU": GOTO 970
  103. 960  PRINT X1$;: HTAB 22: PRINT "<ESC> TO EDIT MENU"
  104. 970  POKE 34,22: HOME : VTAB 23: HTAB 1: PRINT "<C> TO CHANGE, <CR> FOR NEXT QUESTION ";: GOSUB 40: IF A$ < >""  AND A$ < > CHR$(27)  AND A$ < >"C"  THEN  CALL  -198: GOTO 970
  105. 980  POKE 34,0:Z = (A$ = "") +2 *(A$ =  CHR$(27)) +3 *(A$ = "C") +3 *(EDIT < >0): ON Z GOTO 570,280,990,1000,1010,990
  106. 990 TQ = TQ -1: GOTO 570
  107. 1000 Z = 1 +(EDIT = 3): ON Z GOTO 570,2770
  108. 1010  ON (EDIT = 1) GOTO 2140: GOTO 2770
  109. 1020  REM   LOAD QUESTIONS FROM DISK
  110. 1030  POKE 34,0: HOME : PRINT " LOAD QUESTIONS";: HTAB 22: PRINT "<ESC> TO MAIN MENU": POKE 34,2: POKE 771,1
  111. 1040 NA$ = "": VTAB 8: HTAB 3: PRINT "PLEASE ENTER THE NAME OF THE FILE": PRINT : HTAB 7: PRINT "THAT HOLDS THE QUESTIONS.": VTAB 15: HTAB 8: PRINT "NAME = ";
  112. 1050  GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 1030
  113. 1060  ON (A$ =  CHR$(27)) GOTO 280: IF  RIGHT$(A$,1) =  CHR$(27)  THEN  VTAB 7: CALL  -958: GOTO 1040
  114. 1070 F$ = A$:NA$ = A$: IF DX$ = ""  THEN DX$ = ",S6,D1"
  115. 1080  IF  PEEK(48896) = 76  THEN  GOSUB 3610: ON (PD = 0) GOTO 1090: ON (R$ =  CHR$(27)) GOTO 280: GOTO 1030
  116. 1090 FX$ = F$ +DX$: ON ( PEEK(48896) < >76) GOTO 1110: PRINT D$"PREFIX": INPUT P1$: IF P2$ = ""  THEN FX$ = P1$ +FX$: GOTO 1110
  117. 1100 FX$ = P1$ +P2$ +"/" +FX$
  118. 1110  PRINT D$"OPEN";FX$: IF P2$ < >""  THEN F$ = P1$ +P2$ +"/" +F$: GOTO 1130
  119. 1120 F$ = P1$ +F$
  120. 1130  PRINT D$" READ ";F$: INPUT TQ$: INPUT TYPE: VTAB 18: HTAB 8: PRINT "LOADING QUESTIONS"
  121. 1140  ON TYPE GOTO 1150,1150,1150,1150,1190
  122. 1150  INPUT TQ: ON TYPE GOTO 1160,1170,1180,1210
  123. 1160  DIM MC$(25,6),MC(25): GOTO 1210
  124. 1170  DIM TF(25): GOTO 1210
  125. 1180  DIM B$(25): GOTO 1210
  126. 1190  INPUT C1: INPUT C2:TQ = C1: DIM C1$(25),C2$(25),M(25): FOR I = 1 TO C1:Q$ = "": GOSUB 170:C1$(I) = Q$: INPUT M(I): NEXT 
  127. 1200  FOR I = 1 TO C2:Q$ = "": GOSUB 170:C2$(I) = Q$: NEXT : GOTO 1260
  128. 1210  FOR I = 1 TO TQ:Q$ = "": GOSUB 170:Q$(I) = Q$: ON TYPE GOSUB 1220,1230,1240,1250: NEXT : GOTO 1260
  129. 1220  FOR K = 1 TO 5:Q$ = "": GOSUB 170:MC$(I,K) = Q$: NEXT : INPUT MC(I): RETURN 
  130. 1230  INPUT TF(I): RETURN 
  131. 1240 Q$ = "": GOSUB 170:B$(I) = Q$
  132. 1250  RETURN 
  133. 1260  PRINT : PRINT D$"CLOSE": POKE 33,40: POKE 34,0: HOME : PRINT "LOAD QUESTIONS": VTAB 5: HTAB 5: PRINT "FILE : ";NA$: PRINT : HTAB 5: PRINT "TYPE : ";TQ$: PRINT : HTAB 12: PRINT TQ;" QUESTIONS": GOSUB 3600: GOTO 280
  134. 1270  REM   PRINT QUESTIONS
  135. 1280 SP$ = "":PC$ = "":ID$ = "":AK$ = "":PB$ = "": POKE 34,0: HOME : PRINT "PRINT QUESTIONS";: HTAB 22: PRINT "<ESC> TO MAIN MENU": POKE 34,2
  136. 1290  HOME : IF NA$ < >""  THEN 1330
  137. 1300  VTAB 5: HTAB 3: PRINT "PLEASE ENTER A NAME FOR THIS TEST.": VTAB 8: HTAB 5: PRINT "NAME --> ";: GOSUB 40: IF A$ =  CHR$(13)  THEN NA$ = " ": GOTO 1330
  138. 1310  IF A$ =  CHR$(27)  THEN 280
  139. 1320 NA$ = A$: IF  RIGHT$(A$,1) =  CHR$(27)  THEN NA$ = "": VTAB 8: HTAB 1: CALL  -868: GOTO 1290
  140. 1330  POKE 34,0: HTAB 22: VTAB 1: PRINT "<ESC> TO STEP BACK  ": POKE 34,2
  141. 1340  HOME :PF = 0: VTAB 8: HTAB 7: PRINT "SEND TO SCREEN OR PRINTER?": VTAB 11: HTAB 7: PRINT "ENTER A <S> OR A <P> --> ";: GOSUB 40
  142. 1350  IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1330
  143. 1360  IF A$ =  CHR$(27)  AND NA$ < >""  THEN NA$ = "": GOTO 1280
  144. 1370  IF A$ =  CHR$(27)  THEN 1290
  145. 1380 SP$ = A$: IF SP$ < >"S"  AND SP$ < >"P"  THEN  CALL  -198: GOTO 1330
  146. 1390  IF SP$ = "P"  THEN PC$ = "8": GOTO 1440
  147. 1400  VTAB 14: CALL  -958: VTAB 15: HTAB 7: PRINT "PRINT IN 40 OR 80 COLUMNS?": VTAB 18: HTAB 7: PRINT "ENTER A <4> OR A <8> --> ";: GOSUB 40
  148. 1410  IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1400
  149. 1420  IF A$ =  CHR$(27)  THEN  VTAB 14: CALL  -868: GOTO 1330
  150. 1430 PC$ = A$: IF PC$ < >"4"  AND PC$ < >"8"  THEN  CALL  -198: VTAB 14: HTAB 1: CALL  -868: GOTO 1400
  151. 1440  HOME : VTAB 5: HTAB 5: PRINT "IDENTIFIER NEEDED?   (Y/N) ";: GOSUB 40: IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1440: REM  3 SPACES
  152. 1450  IF A$ =  CHR$(27)  THEN 1330
  153. 1460  IF A$ < >"Y"  AND A$ < >"N"  THEN  CALL  -198: GOTO 1440
  154. 1470 ID$ = " ": ON (A$ = "N") GOTO 1500: VTAB 5: CALL  -958: VTAB 5: HTAB 5: PRINT "IDENTIFIER = ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 1470
  155. 1480  ON (A$ =  CHR$(27)) GOTO 1440: IF  RIGHT$(A$,1) =  CHR$(27)  THEN 1470
  156. 1490 ID$ = A$
  157. 1500  IF SP$ = "S"  THEN  VTAB 8: HTAB 5: PRINT "PAGE BREAKS NEEDED?  (Y/N) N":PB$ = "N": GOTO 1540: REM    2 SPACES
  158. 1510  VTAB 8: HTAB 5: PRINT "PAGE BREAKS NEEDED?  (Y/N) ";: GOSUB 40: IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1510: REM  2 SPACES
  159. 1520  IF A$ =  CHR$(27)  THEN 1440
  160. 1530 PB$ = A$: IF PB$ < >"Y"  AND PB$ < >"N"  THEN  CALL  -198:PB$ = "": VTAB 7: CALL  -958: GOTO 1510
  161. 1540  IF TYPE = 4  THEN  VTAB 11: HTAB 5: PRINT "ANSWER KEY NEEDED? (Y/N)   N":AK$ = "N": GOTO 1580: REM  3 SPACES
  162. 1550  VTAB 11: HTAB 5: PRINT "ANSWER KEY NEEDED?   (Y/N) ";: GOSUB 40: IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1540: REM  3 SPACES
  163. 1560  IF A$ =  CHR$(27)  THEN 1440
  164. 1570 AK$ = A$: IF AK$ < >"Y"  AND AK$ < >"N"  THEN  CALL  -198: VTAB 10: CALL  -958:AK$ = "": GOTO 1540
  165. 1580  VTAB 14: HTAB 5: PRINT "FIRST QUESTION'S NUMBER  = ";: GOSUB 40: IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1580
  166. 1590  IF A$ =  CHR$(27)  THEN 1440
  167. 1600 FQ =  VAL(A$): IF FQ <1  THEN FQ = 0: CALL  -198: VTAB 13: CALL  -958: GOTO 1580
  168. 1610  IF FQ = 1  THEN P = 0: GOTO 1650
  169. 1620  VTAB 17: HTAB 5: PRINT "THIS IS PAGE NUMBER"; SPC( 5);" = ";: GOSUB 40: IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 1620
  170. 1630  IF A$ =  CHR$(27)  THEN 1440
  171. 1640 P =  VAL(A$) -1: IF P <0  THEN P = 0: CALL  -198: GOTO 1620
  172. 1650  IF SP$ = "P"  THEN  HOME : VTAB 11: HTAB 6: PRINT "PLEASE TURN ON PRINTER, THEN": PRINT : HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: IF R$ =  CHR$(27)  THEN 1440
  173. 1660  POKE 34,0: HOME : VTAB 8: HTAB 6: PRINT "PRESS <ESC> TO STOP PRINTING": VTAB 11: HTAB 8: PRINT "AND RETURN TO MAIN MENU.": IF SP$ = "S"  THEN  VTAB 14: HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: IF R$ =  CHR$(27)  THEN 280
  174. 1670  VTAB 12: CALL  -958: IF SP$ = "P"  THEN  PRINT " ": PRINT D$"PR#1": PRINT  CHR$(9)"80N":PL = 67: GOSUB 190: GOTO 1700
  175. 1680  HOME : SPEED= 150: PRINT " ": IF PC$ = "8"  THEN  PRINT D$"PR#3"
  176. 1690 PL = 67: GOSUB 190
  177. 1700  IF TYPE = 5  THEN Z = TQ: GOTO 1910
  178. 1710  POKE  -16368,0: FOR I = 1 TO TQ: IF  PEEK( -16384) < >155  THEN  GOSUB 1790: NEXT : GOTO 1750
  179. 1720  SPEED= 255: IF SP$ = "P"  THEN  PRINT D$"PR#0": GOTO 280
  180. 1730  IF PC$ = "8"  THEN  PRINT  CHR$(27): PRINT  CHR$(17): PRINT " ": PRINT D$"IN#0"
  181. 1740  GOTO 280
  182. 1750 PF = 0: SPEED= 255: IF SP$ = "P"  THEN  PRINT D$"PR#0": HOME : VTAB 5
  183. 1760  PRINT : PRINT : PRINT : HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: IF AK$ = "Y"  THEN  PRINT " ": HOME : GOTO 1940
  184. 1770  IF SP$ = "S"  AND PC$ = "8"  THEN  PRINT  CHR$(27): PRINT  CHR$(17): PRINT " ": PRINT  CHR$(4)"IN#0"
  185. 1780  GOTO 280
  186. 1790  GOSUB 190: HTAB 2: IF PF = 0  THEN PF = 1:PL = PL +1: ON TYPE GOTO 1810,1820,1830,1840
  187. 1800  GOTO 1850
  188. 1810  PRINT "WRITE DOWN THE LETTER OF THE CORRECT ANSWER TO EACH OF THE FOLLOWING:": GOTO 1850
  189. 1820  PRINT "INDICATE IF THE FOLLOWING ARE TRUE OR FALSE:": GOTO 1850
  190. 1830  PRINT "FILL IN THE BLANKS WITH THE CORRECT RESPONSE:": GOTO 1850
  191. 1840  PRINT "ANSWER THE FOLLOWING:"
  192. 1850  PRINT :PL = PL +1: IF FQ = 1  THEN Q = I: GOTO 1870
  193. 1860 Q = I +FQ -1
  194. 1870 HT = 1 +(Q <10): HTAB HT: PRINT Q;". ";:HT = 5:Q$ = Q$(I): GOSUB 250: ON TYPE GOTO 1880,1900,1900,1900
  195. 1880 J = 64: FOR K = 1 TO 6: IF MC$(I,K) < >""  AND MC$(I,K) < >"^^^"  THEN J = J +1:Q$ =  CHR$(J) +") " +MC$(I,K):HT = 6: GOSUB 250
  196. 1890  NEXT 
  197. 1900  RETURN 
  198. 1910  HTAB 5: PRINT FQ;". MATCH THE SECOND COLUMN WITH THE FIRST COLUMN.": PRINT :PL = PL +2
  199. 1920 J = 64: POKE  -16368,0: FOR K = 1 TO Z: IF  PEEK( -16384) = 155  THEN 1720
  200. 1930  HTAB 5:J = J +1: PRINT  CHR$(J);") ";C1$(K);: HTAB 39: PRINT " "; SPC( 1 +(K <10));K;". ";C2$(K): NEXT : GOTO 1750
  201. 1940  IF SP$ = "P"  THEN  VTAB 5: HTAB 5: PRINT "SET UP PRINTER FOR ANSWER KEY": VTAB 8: HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: PRINT : GOTO 1960
  202. 1950  SPEED= 150: PRINT : PRINT : PRINT : HTAB 5: PRINT NA$: HTAB 5: PRINT ID$: HTAB 5: PRINT "ANSWER KEY : ";TQ$: PRINT : PRINT : PRINT :HT = 5:Z = TQ: GOTO 1990
  203. 1960  PRINT D$"PR#1": PRINT  CHR$(9)"80N": PRINT : PRINT : PRINT : HTAB 5: PRINT NA$: HTAB 5: PRINT ID$: HTAB 5: PRINT "ANSWER KEY : ";
  204. 1970  PRINT TQ$: PRINT : PRINT : PRINT :HT = 24:Z = TQ: IF TYPE = 4  THEN HT = 5: GOTO 1990
  205. 1980  IF TQ >50  THEN HT = 19:Z =  INT(TQ/2): IF Z < >TQ/2  THEN Z = Z +1
  206. 1990  POKE  -16368,0:J = 64: FOR I = 1 TO Z: IF  PEEK( -16384) < >155  THEN 2010
  207. 2000  GOTO 1720
  208. 2010 Q = I: IF FQ < >1  THEN Q = I +FQ -1
  209. 2020  HTAB HT +(Q <10) +(Q <100): IF TYPE < >5  THEN  PRINT Q;".  ";: GOTO 2040
  210. 2030  HTAB HT:J = J +1: PRINT  CHR$(J);")  ";
  211. 2040  ON TYPE GOSUB 2070,2080,2100,2110,2120: IF SP$ = "S"  THEN  PRINT : NEXT : PRINT : PRINT : PRINT : HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: GOTO 2130
  212. 2050  IF TQ >50  THEN  HTAB 39: PRINT " "; SPC( 20);Q +Z;".  ";: ON TYPE GOSUB 2070,2080,2090,2100,2110
  213. 2060  PRINT : NEXT : PRINT " ": PRINT D$"PR#0": GOTO 280
  214. 2070  PRINT  CHR$(MC(I) +64);: RETURN 
  215. 2080  IF TF(I) = 1  THEN  PRINT "TRUE";: RETURN 
  216. 2090  PRINT "FALSE";: RETURN 
  217. 2100  PRINT B$(I);: RETURN 
  218. 2110  PRINT Q$(I);: RETURN 
  219. 2120  PRINT M(I);: RETURN 
  220. 2130  SPEED= 255: GOTO 1770
  221. 2140 EDIT = 0:Q$ = "QUESTIONS": POKE 34,0: HOME : PRINT "EDIT QUESTIONS";: HTAB 22: PRINT "<ESC> TO MAIN MENU"
  222. 2150  VTAB 4: HTAB 11: PRINT "1. ADD ";Q$: PRINT : HTAB 11: PRINT "2. DELETE ";Q$: PRINT : HTAB 11: PRINT "3. REWRITE ";Q$: PRINT : HTAB 11: PRINT "4. REARRANGE ";Q$: PRINT : HTAB 11: PRINT "5. RETURN TO MAIN MENU"
  223. 2160  VTAB 23: PRINT "USE ARROWS OR SELECT NUMBER: ";:NN = 5:R = 1: GOSUB 3820: IF Z = 20  THEN 280
  224. 2170  ON R GOTO 2190,2220,2610,2800,280
  225. 2180  REM   EDIT : ADD QUESTIONS
  226. 2190 EDIT = 1: POKE 34,0: ON 1 +(TQ = 25) GOTO 570,3590
  227. 2200 EDIT = 1: POKE 34,0: GOTO 570
  228. 2210  REM   EDIT : DELETE QUESTIONS
  229. 2220  HOME :J = 0:Z = TQ:FLAG = 0: PRINT "DELETE QUESTIONS";: POKE 34,3: IF TYPE = 5  THEN J = 64: GOTO 2330
  230. 2230  FOR I = 1 TO TQ: HOME : VTAB 5: PRINT I;". ";Q$(I): PRINT :LQ = 1 + INT( LEN(Q$(I))/40): ON TYPE GOTO 2240,2280,2300,2310
  231. 2240 J = J +1: ON (MC$(I,J) = "") GOTO 2270: IF MC$(I,J) = "^^^"  THEN 2270
  232. 2250 LQ = 1 +LQ + INT( LEN(MC$(I,J))/40): IF LQ >13  THEN LQ = 0: PRINT :CV =  PEEK(37) +1: VTAB 23: HTAB 7: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: VTAB 22: CALL  -958: VTAB CV: HTAB 1
  233. 2260  PRINT  CHR$(J +64);") ";MC$(I,J): GOTO 2240
  234. 2270 LQ = 0: PRINT : PRINT "LETTER OF CORRECT RESPONSE = "; CHR$(MC(I) +64): PRINT : GOTO 2310
  235. 2280 TF$ = "TRUE": IF TF(I) = 0  THEN TF$ = "FALSE"
  236. 2290  PRINT "ANSWER = ";TF$: GOTO 2310
  237. 2300  PRINT "CORRECT RESPONSE = ";B$(I): GOTO 2310
  238. 2310 J = 0:FLAG = 0: GOSUB 2520: IF A$ = "Y"  THEN Q$(I) = "^^":TQ = TQ -1
  239. 2320  POKE 34,0: VTAB 1: HTAB 20: CALL  -958: POKE 34,2: NEXT : GOTO 2370
  240. 2330  FOR I = 1 TO C1:J = J +1: HOME : VTAB 5: HTAB 5: PRINT "FIRST COLUMN ENTRY -": PRINT : HTAB 5: PRINT J -64;". ";C1$(I): VTAB 12: HTAB 5: PRINT "THIS IS MATCHED WITH -": PRINT 
  241. 2340  HTAB 5: PRINT  CHR$(J);") ";C2$(M(I)):M$ = "DELETE THIS PAIR? (Y/N) ": GOSUB 2520: IF A$ = "Y"  THEN C1$(I) = "^^":C2$(M(I)) = "^^":TQ = TQ -1
  242. 2350  HOME : NEXT : GOTO 2370
  243. 2360  REM   UPDATE DELETED QUESTIONS
  244. 2370 J = 0: POKE 34,0: POKE 35,23: HOME : VTAB 9: HTAB 15: PRINT "PLEASE WAIT": VTAB 12: HTAB 12: PRINT "UPDATING QUESTIONS": FOR II = 1 TO 2000: NEXT : IF TYPE = 5  THEN 2460
  245. 2380  FOR I = 1 TO Z: IF Q$(I) = "^^"  THEN  NEXT : GOTO 2450
  246. 2390 J = J +1:Q$(J) = Q$(I): ON TYPE GOTO 2400,2420,2430,2440
  247. 2400  FOR K = 1 TO 6: IF MC$(I,K) < >""  THEN MC$(J,K) = MC$(I,K)
  248. 2410  NEXT :MC(J) = MC(I): NEXT : GOTO 2450
  249. 2420 TF(J) = TF(I): NEXT : GOTO 2450
  250. 2430 B$(J) = B$(I): NEXT : GOTO 2450
  251. 2440  NEXT 
  252. 2450 TQ = J: POKE 34,0:FLAG = 0: GOTO 2140
  253. 2460  FOR I = 1 TO C1:N(I) = M(I): NEXT : FOR I = 1 TO C1: IF C1$(I) < >"^^"  THEN 2490
  254. 2470  FOR J = 1 TO C1: IF N(J) =  >N(I)  THEN M(J) = M(J) -1
  255. 2480  NEXT 
  256. 2490  NEXT :J = 0: FOR I = 1 TO C1: IF C1$(I) < >"^^"  THEN J = J +1:C1$(J) = C1$(I):M(J) = M(I)
  257. 2500  NEXT :C1 = J:J = 0: FOR I = 1 TO C2: IF C2$(I) < >"^^"  THEN J = J +1:C2$(J) = C2$(I)
  258. 2510  NEXT :C2 = J:TQ = J: GOTO 2140
  259. 2520  POKE 34,0: VTAB 1: HTAB 22: PRINT "<ESC> TO EDIT MENU": POKE 34,22: HOME : VTAB 23: IF TYPE = 5  THEN  HTAB 5: PRINT M$;: GOSUB 40: GOTO 2540
  260. 2530  HTAB 5: PRINT "DELETE THIS QUESTION? (Y/N) ";: GOSUB 40
  261. 2540  IF A$ =  CHR$(13)  THEN  CALL  -198: ON FLAG +1 GOTO 2520,2580
  262. 2550  IF A$ =  CHR$(27)  THEN  CALL 54915:FLAG = 1: GOTO 2370
  263. 2560 A$ =  LEFT$(A$,1): IF A$ < >"Y"  AND A$ < >"N"  THEN  CALL  -198: ON FLAG +1 GOTO 2520,2580
  264. 2570  IF A$ = "N"  OR FLAG = 1  THEN FLAG = 0: RETURN 
  265. 2580 FLAG = FLAG +1: IF FLAG >1  THEN FLAG = 1
  266. 2590  HOME : VTAB 23: HTAB 5: PRINT "VERIFY - DELETE? (Y/N) ";: GOSUB 40: GOTO 2540
  267. 2600  REM   EDIT : REWRITE QUESTIONS
  268. 2610  POKE 34,0: HOME : PRINT "REWRITE QUESTIONS";: HTAB 22: PRINT "<ESC> TO EDIT MENU": POKE 34,2: IF TYPE = 5  THEN 2700
  269. 2620  FOR I = 1 TO TQ: HOME : VTAB 5: PRINT I;". ";Q$(I):J = 64: PRINT :LQ = 1 + INT( LEN(Q$(I))/40): ON TYPE GOTO 2630,2670,2690,2720
  270. 2630 J = J +1: ON (MC$(I,J -64) = "") GOTO 2660: IF MC$(I,J -64) = "^^^"  THEN 2660
  271. 2640 LQ = 1 +LQ + INT( LEN(MC$(I,J -64))/40): IF LQ >13  THEN LQ = 0: PRINT :CV =  PEEK(37) +1: VTAB 23: HTAB 7: PRINT "PRESS <RETURN> TO CONTINUE.";: GET R$: VTAB 22: CALL  -958: VTAB CV: HTAB 1
  272. 2650  PRINT  CHR$(J);") ";MC$(I,J -64): GOTO 2630
  273. 2660 LQ = 0: PRINT : PRINT "LETTER OF CORRECT RESPONSE = "; CHR$(MC(I) +64): PRINT : PRINT : GOTO 2720
  274. 2670  PRINT "THIS QUESTION IS ";:T$ = "T": IF TF(I) = 0  THEN T$ = "F"
  275. 2680  PRINT T$: GOTO 2720
  276. 2690  PRINT "ANSWER --> ";B$(I): GOTO 2720
  277. 2700 J = 64: FOR I = 1 TO C1:J = J +1: HOME : HTAB 5: VTAB 5: PRINT "FIRST COLUMN ENTRY -": PRINT : HTAB (5 -((J -64) >9)): PRINT J -64;". ";C1$(I): VTAB 12: HTAB 5: PRINT "THIS IS MATCHED WITH - ": PRINT 
  278. 2710  HTAB 5: PRINT  CHR$(J);") ";C2$(M(I))
  279. 2720  POKE 34,22: HOME : VTAB 23: HTAB 1: PRINT "<C> TO CHANGE, <CR> FOR NEXT QUESTION ";: GOSUB 40: IF A$ < >""  AND A$ < > CHR$(27)  AND A$ < >"C"  THEN  CALL  -198: GOTO 2720
  280. 2730  POKE 34,2:Z = (A$ = "") +2 *(A$ =  CHR$(27)) +3 *(A$ = "C"): ON Z GOTO 2740,2760,2750
  281. 2740  HOME : NEXT : GOTO 2140
  282. 2750 Z3 = TQ:Z1 = C1:Z2 = C2:TQ = I -1:EDIT = 3: GOTO 570
  283. 2760  CALL 54915: GOTO 2140
  284. 2770 TQ = Z3:C1 = Z1:C2 = Z2:Z1 = 0:Z2 = 0:Z3 = 0
  285. 2780  POKE 34,0: HOME : PRINT "REWRITE QUESTIONS";: HTAB 22: PRINT "<ESC> TO EDIT MENU": POKE 34,2: NEXT : GOTO 2140
  286. 2790  REM   EDIT : REARRANGE QUESTIONS
  287. 2800  POKE 34,0: HOME : PRINT "EDIT : REARRANGE";: HTAB 22: PRINT "<ESC> TO EDIT MENU"
  288. 2810  VTAB 4: HTAB 11: PRINT "1. REVERSE ORDER": PRINT : HTAB 11: PRINT "2. RANDOM ORDER": PRINT : HTAB 11: PRINT "3. RETURN TO EDIT MENU": VTAB 23: PRINT " USE ARROWS OR SELECT NUMBER: ";
  289. 2820 NN = 3:R = 1: GOSUB 3820: IF Z = 20  THEN R = 0: GOSUB 3860: GOTO 2140
  290. 2830  ON R GOTO 2840,2910,2140
  291. 2840  VTAB 12: HTAB 16: PRINT "SORTING": IF TYPE < >5  THEN 2860
  292. 2850 J = C1 +1: FOR I = 1 TO  INT(C1/2):J = J -1:Q$ = C1$(I):C1$(I) = C1$(J):C1$(J) = Q$:Q = M(I):M(I) = M(J):M(J) = Q: VTAB 14: HTAB 19: PRINT I: NEXT : GOTO 2140
  293. 2860 J = TQ +1: FOR I = 1 TO  INT(TQ/2):J = J -1:Q$ = Q$(I):Q$(I) = Q$(J):Q$(J) = Q$: ON TYPE GOSUB 2870,2880,2890,2900: VTAB 14: HTAB 19: PRINT I: NEXT : GOTO 2140
  294. 2870  FOR K = 1 TO 6:Q$ = MC$(I,K):MC$(I,K) = MC$(J,K):MC$(J,K) = Q$: NEXT :Q = MC(I):MC(I) = MC(J):MC(J) = Q: RETURN 
  295. 2880 Q = TF(I):TF(I) = TF(J):TF(J) = Q: RETURN 
  296. 2890 Q$ = B$(I):B$(I) = B$(J):B$(J) = Q$: RETURN 
  297. 2900  RETURN 
  298. 2910  VTAB 12: HTAB 14: PRINT "RANDOMIZING":R =  PEEK(78) +256 * PEEK(79):R =  RND( -R): ON (TYPE < >5) GOTO 2920: GOTO 2950
  299. 2920  FOR I = 1 TO TQ:N(I) = 1 + INT( RND(1) *1000): NEXT : FOR I = 1 TO TQ -1: VTAB 14: HTAB 19: PRINT I: FOR J = I +1 TO TQ
  300. 2930  IF N(J) <N(I)  THEN Q$ = Q$(I):Q$(I) = Q$(J):Q$(J) = Q$: ON TYPE GOSUB 2870,2880,2890,2900
  301. 2940  NEXT : NEXT : GOTO 2140
  302. 2950  FOR I = 1 TO C1:N(I) = 1 + INT( RND(1) *1000): NEXT : FOR I = 1 TO C1 -1: FOR J = I +1 TO C1: IF N(J) <N(I)  THEN Q$ = C1$(I):C1$(I) = C1$(J):C1$(J) = Q$:Q = M(I):M(I) = M(J):M(J) = Q
  303. 2960  VTAB 15: HTAB 19: PRINT I: NEXT : VTAB 12: HTAB 14: PRINT "RANDOMIZING": VTAB 15: HTAB 19: PRINT I: NEXT : GOTO 2140
  304. 2970  REM   SAVE QUESTIONS TO DISK
  305. 2980  POKE 34,0: HOME : PRINT "SAVE QUESTIONS";: HTAB 22: PRINT "<ESC> TO MAIN MENU": POKE 34,2: POKE 771,2
  306. 2990 F$ = "": VTAB 8: HTAB 4: PRINT "PLEASE ENTER A NAME FOR THE FILE": PRINT : HTAB 8: PRINT "TO HOLD THESE QUESTIONS.": VTAB 15: HTAB 8: PRINT "NAME = ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 2990
  307. 3000  IF A$ =  CHR$(27)  THEN 280
  308. 3010 F$ = A$: IF  RIGHT$(A$,1) =  CHR$(27)  THEN F$ = "": VTAB 15: CALL  -868: GOTO 2990
  309. 3020  IF  PEEK(48896) = 76  THEN  GOSUB 3610: ON (PD = 0) GOTO 3030: ON (R$ =  CHR$(27)) GOTO 280: GOTO 2980
  310. 3030  IF DX$ = ""  THEN DX$ = ",S6,D1"
  311. 3040  POKE 216,0: ONERR  GOTO 3110
  312. 3050 FX$ = F$ +DX$: ON ( PEEK(48896) < >76) GOTO 3070: PRINT D$"PREFIX": INPUT P1$: IF P2$ = ""  THEN FX$ = P1$ +FX$: GOTO 3070
  313. 3060 FX$ = P1$ +P2$ +"/" +FX$
  314. 3070  PRINT : PRINT D$"VERIFY";FX$: POKE 216,0: HOME : FOR I = 1 TO 3: CALL  -198: NEXT : VTAB 8: HTAB (40 - LEN(F$))/2: PRINT F$: VTAB 11: HTAB 5: PRINT "THIS FILE ALREADY ON THIS DISK.": ONERR  GOTO 3690
  315. 3080  VTAB 13: CALL  -958: VTAB 14: HTAB 2: PRINT "VERIFY - OVERWRITE THIS FILE? (Y/N) ";: GOSUB 40: IF A$ = ""  THEN 3080
  316. 3090  IF A$ = "N"  OR A$ =  CHR$(27)  THEN F$ = "": GOTO 280
  317. 3100  IF A$ < >"Y"  THEN  CALL  -198: GOTO 3080
  318. 3110  POKE 216,0: ONERR  GOTO 3690
  319. 3120  PRINT D$"OPEN";FX$: PRINT D$"CLOSE": PRINT D$"DELETE";FX$: IF P2$ < >""  THEN FX$ = P1$ +P2$ +"/" +F$: GOTO 3140
  320. 3130 FX$ = P1$ +F$
  321. 3140  PRINT D$"OPEN";FX$: PRINT D$"WRITE";FX$: PRINT TQ$: PRINT TYPE
  322. 3150  IF TYPE = 5  THEN  PRINT C1: PRINT C2: FOR I = 1 TO C1: PRINT C1$(I): PRINT M(I): NEXT : FOR I = 1 TO C2: PRINT C2$(I): NEXT : GOTO 3210
  323. 3160  PRINT TQ: FOR I = 1 TO TQ: PRINT Q$(I): ON TYPE GOSUB 3170,3180,3190,3200: NEXT : GOTO 3210
  324. 3170  FOR K = 1 TO 5: PRINT MC$(I,K): NEXT : PRINT MC(I): RETURN 
  325. 3180  PRINT TF(I): RETURN 
  326. 3190  PRINT B$(I)
  327. 3200  RETURN 
  328. 3210  PRINT D$"CLOSE": GOTO 280
  329. 3220  REM   DELETE QUESTIONS FROM DISK
  330. 3230  POKE 34,0: HOME : PRINT "DELETE A FILE";: HTAB 22: PRINT "<ESC> TO MAIN MENU": POKE 34,2: POKE 771,3
  331. 3240  HOME :F$ = "": VTAB 5: HTAB 6: PRINT "PLEASE ENTER THE NAME OF THE": PRINT : HTAB 10: PRINT "FILE TO BE DELETED.": VTAB 10: HTAB 10: PRINT "NAME = ";: GOSUB 40: IF A$ = ""  THEN 280
  332. 3250  ON (A$ =  CHR$(27)) GOTO 280:F$ = A$: IF  RIGHT$(A$,1) =  CHR$(27)  THEN F$ = "": GOTO 3240
  333. 3260  IF  PEEK(48896) = 76  THEN  GOSUB 3610: ON (PD = 0) GOTO 3270: ON (R$ =  CHR$(27)) GOTO 280: GOTO 3230
  334. 3270  IF DX$ = ""  THEN DX$ = ",S6,D1"
  335. 3280 FX$ = F$ +DX$: ON ( PEEK(48896) < >76) GOTO 3300: PRINT D$"PREFIX": INPUT P1$: IF P2$ = ""  THEN FX$ = P1$ +FX$: GOTO 3300
  336. 3290 FX$ = P1$ +P2$ +"/" +FX$
  337. 3300  PRINT D$"VERIFY ";FX$: VTAB 13: HTAB 3: PRINT "VERIFY - DELETE THIS FILE (Y/N)? ";: GOSUB 40: IF A$ =  CHR$(13)  THEN  CALL  -198: GOTO 3300
  338. 3310  ON (A$ =  CHR$(27)) GOTO 280:A$ =  LEFT$(A$,1): IF A$ < >"Y"  AND A$ < >"N"  THEN  CALL  -198: GOTO 3300
  339. 3320  ON (A$ = "N") GOTO 280: PRINT D$"DELETE ";FX$: VTAB 17: HTAB 10: PRINT "FILE DELETED": GOSUB 3600: GOTO 280
  340. 3330  REM   CATALOG THE DISK
  341. 3340  HOME :Z =  PEEK(48896):Z$ = "CATALOG": ON (Z < >76) GOTO 3350:Z$ = "CAT": ON (P2$ = "") GOTO 3350:Z$ = Z$ +P1$ +P2$
  342. 3350 Z$ = Z$ +DX$: IF DX$ = ""  THEN Z$ = Z$ +",S6,D1"
  343. 3360  POKE 771,4: PRINT  CHR$(4)Z$: PRINT : PRINT : PRINT : GOSUB 3600: GOTO 280
  344. 3370  POKE 34,0: HOME : PRINT "SET DISK DRIVE";: HTAB 22: PRINT "<ESC> TO MAIN MENU": POKE 34,2
  345. 3380  HTAB 2: VTAB 8: PRINT "PLEASE ENTER SLOT AND DRIVE NUMBER -": VTAB 11: HTAB 14: PRINT "SLOT --> ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 3370
  346. 3390  IF A$ =  CHR$(27)  THEN 280
  347. 3400 S =  VAL(A$):SL$ = A$: IF S < = 0  OR S >7  THEN  CALL  -198:S = 0:SL$ = "": GOTO 3370
  348. 3410  VTAB 13: CALL  -958: VTAB 14: HTAB 13: PRINT "DRIVE --> ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 3410
  349. 3420  IF A$ =  CHR$(27)  THEN 3370
  350. 3430  IF  VAL(A$) < = 0  OR  VAL(A$) >2  THEN  CALL  -198: GOTO 3410
  351. 3440 DD$ = A$:DX$ = ",S" +SL$ +",D" +DD$: POKE 769,S: POKE 770, VAL(A$): IF  PEEK(48896) < >76  THEN 280
  352. 3450  VTAB 17: HTAB 13: PRINT "SET PREFIX (Y/N)? ";: GOSUB 40: IF A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(27)  THEN  CALL  -198: VTAB 17: HTAB 30: CALL  -958: GOTO 3450
  353. 3460  ON (A$ = "N") GOTO 280: ON (A$ =  CHR$(27)) GOTO 280: POKE 771,5
  354. 3470  VTAB 16: CALL  -958: VTAB 17: HTAB 5: PRINT "PREFIX = ": PRINT D$"PREFIX";DX$: PRINT D$"PREFIX": INPUT P1$: VTAB 17: HTAB 14: PRINT P1$;: GOSUB 40: ON (A$ =  CHR$(27)) GOTO 280: IF  RIGHT$(A$,1) =  CHR$(27)  THEN 3470
  355. 3480  IF A$ = ""  THEN P2$ = "": PRINT D$"PREFIX";P1$: GOTO 280
  356. 3490  POKE 216,0: ONERR  GOTO 3690
  357. 3500 P2$ = A$: VTAB 16: CALL  -958: PRINT D$"CREATE";P2$: GOTO 280
  358. 3510  REM   QUIT PROGRAM
  359. 3520  HOME : IF TYPE = 0  THEN  PRINT D$"CLOSE": VTAB 12: HTAB 16: PRINT "BYE BYE!": END 
  360. 3530  VTAB 10: HTAB 4: PRINT "QUESTIONS IN MEMORY WILL BE LOST.": VTAB 13: HTAB 5: PRINT "VERIFY - QUIT PROGRAM? (Y/N) ";: GOSUB 40: IF A$ = ""  THEN  CALL  -198: GOTO 3520
  361. 3540  IF A$ =  CHR$(27)  THEN 280
  362. 3550 A$ =  LEFT$(A$,1): IF A$ < >"Y"  AND A$ < >"N"  THEN  CALL  -198: GOTO 3520
  363. 3560  IF A$ = "Y"  THEN TYPE = 0: GOTO 3520
  364. 3570  GOTO 280
  365. 3580  REM   HAVE OVER 25 QUESTIONS
  366. 3590  POKE 34,0: HOME : FOR I = 1 TO 3: CALL  -198: NEXT : VTAB 8: HTAB 7: PRINT "YOU CAN NOT HAVE MORE THAN": PRINT : HTAB 9: PRINT "25 QUESTIONS IN MEMORY.": GOSUB 3600: GOTO 2140
  367. 3600  VTAB 22: HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE. ";: GET R$: RETURN 
  368. 3610 E1 =  LEN(A$) >15:C3 =  ASC( LEFT$(A$,1)):E2 = C3 <65  OR (C3 >90  AND C3 <96)  OR C3 >122:E3 = 0: FOR I = 1 TO  LEN(A$):C4 =  ASC( MID$ (A$,I,1))
  369. 3620  ON (C4 = 46) GOTO 3630: ON (C4 >64  AND C4 <91) GOTO 3630: ON (C4 >47  AND C4 <58) GOTO 3630:E3 = 1
  370. 3630  NEXT : IF E1 +E2 +E3 = 0  THEN PD = 0: RETURN 
  371. 3640  HOME : VTAB 8: HTAB 7: IF E1 = 1  THEN  PRINT "FILE NAME TOO LONG.": PRINT : HTAB 7
  372. 3650  IF E2 = 1  THEN  PRINT "ILLEGAL FIRST CHARACTER.": PRINT : HTAB 7
  373. 3660  IF E3 = 1  THEN  PRINT "ILLEGAL CHARACTER IN NAME."
  374. 3670  VTAB 23: HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE. ";: GET R$:PD = 1: RETURN 
  375. 3680  REM   DOS ERROR ROUTINE
  376. 3690  ON ( PEEK(771) < >5) GOTO 3700: IF  PEEK(222) = 19  THEN  POKE 771,0: GOTO 280: REM  ERROR OCCURED WHEN DIRECTORY WAS CREATED THAT ALREADY EXISTS
  377. 3700  SPEED= 255: POKE 33,40: POKE 34,0: HOME : FOR IJ = 1 TO 3: CALL  -198: NEXT :Z =  PEEK(222):LN =  PEEK(218) +256 * PEEK(219):M$ = "- DISK ERROR -": IF Z >15  THEN  PRINT D$"CLOSE": GOTO 3720
  378. 3710  PRINT : PRINT D$"CLOSE": VTAB 3: HTAB (40 - LEN(M$))/2: PRINT M$: ON Z GOTO 3720,3720,3750,3740,3780,3780,3720,3750,3760,3770,3730,3720,3720,3720,3720,3780
  379. 3720 M$ = "ERROR AT LINE " + STR$(LN): HTAB (40 - LEN(M$))/2: VTAB 8: PRINT M$: VTAB 11: HTAB 12: PRINT "ERROR CODE = ";Z: VTAB 14: HTAB 4: PRINT "SEE APPLESOFT MANUAL ABOUT ERROR.": END 
  380. 3730 M1$ = "IMPROPER FILE NAME":M2$ = "PLEASE CHECK FILE NAME": GOTO 3790
  381. 3740 M1$ = "WRITE PROTECTION TAB ON DISK":M2$ = "REMOVE WRITE PROTECTION TAB": GOTO 3790
  382. 3750 M1$ = "I/O ERROR":M2$ = "CHECK DISK DRIVE": GOTO 3790
  383. 3760 M1$ = "DISK IS FULL":M2$ = "USE ANOTHER DISK": GOTO 3790
  384. 3770  ON ( PEEK(48896) < >76) GOTO 3720:M1$ = "DIRECTORY FILE LOCKED":M2$ = "CAN NOT DELETE THIS DIRECTORY": GOTO 3790
  385. 3780 M1$ = "FILE NOT FOUND":M2$ = "PLEASE CHECK FILE NAME": ON ( PEEK(771) < >1) GOTO 3790: PRINT D$"DELETE";FX$
  386. 3790  VTAB 8: HTAB (40 - LEN(M1$))/2: PRINT M1$: VTAB 11: HTAB (40 - LEN(M2$))/2: PRINT M2$: CALL  -3288
  387. 3800  VTAB 21: HTAB 6: PRINT "PRESS <RETURN> TO TRY AGAIN": PRINT : HTAB 3: PRINT "PRESS <ESC> TO RETURN TO MAIN MENU.";: GET R$: IF R$ =  CHR$(27)  THEN 280
  388. 3810  PRINT :Z =  PEEK(771): ON (Z = 0) GOTO 10: POKE 771,0: ON Z GOTO 1030,2980,3230,3340,3370
  389. 3820 N = R:PS = R: GOSUB 3860:Z = 0: VTAB 23: HTAB 31: CALL  -868: POKE  -16368,0
  390. 3830  VTAB 23: HTAB 31: PRINT R;: GET Z$: IF Z$ =  >"1"  AND Z$ < =  STR$(NN)  THEN R =  VAL(Z$):N = PS: GOSUB 3860: GOTO 3820
  391. 3840 Z = (Z$ =  CHR$(21)  OR Z$ =  CHR$(10)) -(Z$ =  CHR$(8)  OR Z$ =  CHR$(11)) +10 *(Z$ =  CHR$(13)) +20 *(Z$ =  CHR$(27)): ON   NOT Z GOTO 3830:R = R +Z *(Z <10)
  392. 3850 R = R -NN *(R >NN) +NN *(R <1):N = PS: GOSUB 3860: ON Z <10 GOTO 3820: PRINT : RETURN 
  393. 3860  VTAB 2 +2 *N: HTAB 7: PRINT PP$(R = PS);: RETURN