home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib24b.dsk / CHART.MANAGER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  26KB  |  395 lines

  1. 10  GOTO 3300
  2. 20 X =  SIN(X): REM ::::::::::::::::::::::::
  3. 30  RETURN : REM  24 COLONS AFTER REM IN LINE 20
  4. 40  REM  **********************
  5. 50  REM  *   CHART.MANAGER    *
  6. 60  REM  *   BY MARK JESKE    *
  7. 70  REM  * COPYRIGHT (C) 1985 *
  8. 80  REM  * BY MICROSPARC, INC *
  9. 90  REM  * CONCORD, MA  01742 *
  10. 100  REM **********************
  11. 110 XX =  FN R(XX):Z$ =  STR$(XX): FOR I = 1 TO  LEN(Z$): IF  MID$ (Z$,I,1) < >"E"  THEN  NEXT I
  12. 120 Z1$ = "": IF I > LEN(Z$)  THEN 140
  13. 130 Z1$ =  MID$ (Z$,I,4):Z$ =  LEFT$(Z$,I -1):W = 6
  14. 140  FOR J = 1 TO  LEN(Z$): IF  MID$ (Z$,J,1) < >"."  THEN  NEXT J
  15. 150  IF J > LEN(Z$)  THEN Z$ = Z$ +".00"
  16. 160 K = W -2: IF K -J <0  THEN 180
  17. 170 Y$ =  LEFT$(Z$,J):Y$ =  RIGHT$(SP$ +Y$,K):Z$ =  RIGHT$(Z$, LEN(Z$) -J):Y$ =  LEFT$(Y$ +Z$ +ZE$,W):Y$ = Y$ +Z1$:W = 10: RETURN 
  18. 180 W = 10:Y$ =  LEFT$(ER$,W): RETURN 
  19. 190  VTAB 23: CALL  -868: VTAB 23
  20. 200  PRINT "ANY KEY TO CONTINUE-(^P SCREEN DUMP)";: GET Z$: IF Z$ < > CHR$(16)  THEN  RETURN 
  21. 210 A =  PEEK(37): PRINT  CHR$(16);
  22. 220 LOC =  PEEK(105) + PEEK(106) *256 +2: PRINT D$"PR#1": PRINT : FOR S = 1 TO 24: VTAB (S): CALL  -990: POKE LOC,40: POKE LOC +1, PEEK(40): POKE LOC +2, PEEK(41)
  23. 230  PRINT SCR$: NEXT S: PRINT D$"PR#0": VTAB A +1: HTAB 1: RETURN 
  24. 240  FOR L = 1 TO NC: PRINT "COLUMN "L" HEADING: ";C$(L): NEXT L: RETURN 
  25. 250  PRINT "----------------------------------------": RETURN 
  26. 260  FOR L = 1 TO NC: IF Z$ = C$(L)  THEN Z = L: RETURN 
  27. 270  NEXT L:Z =  VAL(Z$): IF Z <1  OR Z >NC  THEN  POP : GOTO 3610
  28. 280  RETURN 
  29. 290  PRINT : INPUT "ENTER TITLE FOR GRAPH: ";T$: IF  LEN(T$) >40  THEN  PRINT : PRINT "ONLY 40 CHARACTER ALLOWED, RE-ENTER.": GOTO 290
  30. 300  RETURN 
  31. 310  PRINT : INPUT "ENTER X-AXIS TITLE: ";X$: IF  LEN(X$) >40  THEN  PRINT : PRINT "ONLY 40 CHARACTERS ALLOWED, RE-ENTER.": GOTO 310
  32. 320  RETURN 
  33. 330 R = (MAX(A) -MIN(A))/1.21:JX = 4 *10 ^( INT(.4343 * LOG(R)))
  34. 340  FOR I = 1 TO 5:JX = JX/2:HX =  - FN I( -MAX(A)):LX =  FN I(MIN(A)):XS = HX -LX:GX =  INT(1.0001 *XS/JX): IF GX <5  THEN  NEXT I
  35. 350 B = 2 *JX * INT( -XS/JX/2.1):HX = LX -B:XS = HX -LX: RETURN 
  36. 360 XX = XX *7:YY = YY *8
  37. 370  IF Z$ = ""  THEN  RETURN 
  38. 380  FOR L = 1 TO  LEN(Z$):ZZ$ =  MID$ (Z$,L,1):ZZ =  ASC(ZZ$): IF ZZ$ = " " GOTO 420
  39. 390  IF ZZ >95  THEN ZZ = ZZ -32
  40. 400  IF ZZ <32  OR ZZ >94  THEN 420
  41. 410  GOSUB 440
  42. 420 XX = XX +7: IF XX >273  THEN XX = 0:YY = YY +8: IF YY >184  THEN YY = 0
  43. 430  NEXT L: RETURN 
  44. 440  DRAW ZZ -32 AT XX,YY: RETURN 
  45. 450  PRINT :CF = 0: INPUT "DO YOU WANT THE POINTS CONNECTED ?";Z$: IF  LEFT$(Z$,1) < >"Y"  THEN  RETURN 
  46. 460  PRINT : PRINT "SINCE THIS OPTION WILL SORT THE TWO     COLUMNS YOU SELECTED, BE SURE YOU HAVE  SAVED YOUR DATA BEFORE YOU CONTINUE WITHTHIS PLOT."
  47. 470  PRINT : INPUT "CONTINUE WITH THE PLOT? ";Y$: IF  LEFT$(Y$,1) < >"Y"  THEN  POP : GOSUB 190: GOTO 3510
  48. 480 CF = 1: RETURN 
  49. 490 B = NR(Z1)
  50. 500 A = 0:B = B -1: FOR L = 1 TO B: IF A(L,Z1) < = A(L +1,Z1)  THEN 520
  51. 510 C = A(L,Z1):A(L,Z1) = A(L +1,Z1):A(L +1,Z1) = C:C = A(L,Z):A(L,Z) = A(L +1,Z):A(L +1,Z) = C:A = 1
  52. 520  NEXT L: IF A = 1  THEN 500
  53. 530  RETURN 
  54. 540 XX =  FN X(A(1,Z1)):YY =  FN Y(A(1,Z)): GOSUB 590: IF PF  THEN  HPLOT XX,YY
  55. 550  FOR L = 2 TO NR(Z1):XX =  FN X(A(L,Z1)):YY =  FN Y(A(L,Z)): GOSUB 590: IF   NOT PF  THEN 580
  56. 560  IF CF = 1  THEN  HPLOT  TO XX,YY
  57. 570  IF CF = 0  THEN  HPLOT XX,YY
  58. 580  NEXT L: RETURN 
  59. 590 PF =  -1: IF XX <48  THEN PF = 0
  60. 600  IF XX >279  THEN PF = 0
  61. 610  IF YY <9  THEN PF = 0
  62. 620  IF YY >171  THEN PF = 0
  63. 630  RETURN 
  64. 640  PRINT : INPUT "DO YOU WANT GRID LINES DRAWN ?";Z$:GF = 10: IF  LEFT$(Z$,1) = "Y"  THEN GF = 1
  65. 650  IF  LEFT$(Z$,1) = "N"  THEN GF = 0
  66. 660  IF GF = 10  THEN  PRINT : PRINT "PLEASE ANSWER YES OR NO.": GOTO 640
  67. 670  RETURN 
  68. 680 Z$ = T$:XX = 20 - LEN(T$)/2: IF  LEN(T$) <34  THEN XX = XX +3
  69. 690 YY = 0: GOSUB 360:Z$ = X$:XX = 20 - LEN(X$)/2: IF  LEN(X$) <34  THEN XX = XX +3
  70. 700 YY = 23: GOSUB 360: RETURN 
  71. 710  FOR J = LY TO HY -JY  STEP JY:Z$ =  STR$( FN R(J)):XX = 7 *(7 - LEN(Z$)): IF XX <0  THEN Z$ = ""
  72. 720 YY =  FN Y(J): HPLOT 47,YY TO 49,YY:YY = YY -4: GOSUB 370: NEXT J: RETURN 
  73. 730  FOR L = 1 TO MC:MIN(L) = 99999:MAX(L) =  -99999:SUM(L) = 0:NR(L) = 0: NEXT L
  74. 740  PRINT "HOW MANY COLUMNS OF DATA DO YOU WISH TO ": INPUT "ENTER :";Z$:NC =  VAL(Z$): IF NC <1  OR NC >MC  THEN  PRINT : PRINT "YOU CAN HAVE ONLY 1 TO "MC" COLUMNS.": FOR L = 1 TO 2000: NEXT L: HOME : GOTO 740
  75. 750  VTAB 9: PRINT "PLEASE ENTER A HEADING FOR EACH COLUMN."
  76. 760 A = 1
  77. 770  FOR L = A TO NC
  78. 780  VTAB L +10: PRINT "COLUMN "L" ";: INPUT C$(L): IF C$(L) = ""  THEN  VTAB L +10: CALL  -868: GOTO 780
  79. 790  NEXT L
  80. 800  FOR L = A TO NC:Z = 0
  81. 810  TEXT : HOME : PRINT "PLEASE ENTER YOUR DATA FOR COLUMN "L: PRINT "PRESS 'RETURN' WHEN FINISHED.": PRINT : PRINT "COLUMN "L": "C$(L): GOSUB 250: POKE 34,5
  82. 820 Z = Z +1: PRINT "ROW "Z": ";: INPUT "";Z$:A(Z,L) =  VAL(Z$): IF Z$ = ""  THEN Z = Z -1: GOTO 880
  83. 830  IF A(Z,L) <MIN(L)  THEN MIN(L) = A(Z,L)
  84. 840  IF A(Z,L) >MAX(L)  THEN MAX(L) = A(Z,L)
  85. 850 SUM(L) = SUM(L) +A(Z,L)
  86. 860  IF Z = MR  THEN  PRINT : PRINT "THE MAXIMUM NUMBER OF ROWS HAS BEEN": PRINT "ENTERED.": GOSUB 190: GOTO 880
  87. 870  GOTO 820
  88. 880 NR(L) = Z: IF AF = 1  THEN  RETURN 
  89. 890  NEXT L
  90. 900 TF = 1: PRINT : PRINT : PRINT "ALL DATA HAS BEEN ENTERED.": GOSUB 190: TEXT : GOTO 3510
  91. 910  GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE COLUMN TO ADD TO.": PRINT : INPUT "COLUMN:";Z$
  92. 920  FOR L = 1 TO NC: IF Z$ = C$(L)  THEN Z = L: GOTO 940
  93. 930  NEXT L:Z =  VAL(Z$): IF Z <1  OR Z >NC +(NC <MC)  THEN 3610
  94. 940  IF Z = NC +1  THEN A = Z:NC = Z:MIN(Z) = 99999:MAX(Z) =  -99999:SUM(Z) = 0:NR(Z) = 0: HOME : VTAB 8: PRINT "PLEASE ENTER A COLUMN HEADING.": GOTO 770
  95. 950 L = Z:Z = NR(L):AF = 1: GOSUB 810:AF = 0: GOTO 900
  96. 960  IF NC = 1  THEN L = 1: GOSUB 1050: GOTO 1040
  97. 970  HOME : GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE COLUMN FOR STATISTICAL": PRINT "EVALUATION. ENTER 'ALL' TO COMPUTE EACH": PRINT "COLUMN."
  98. 980  PRINT : INPUT "COLUMN: ";Z$: IF Z$ = "ALL"  THEN 1020
  99. 990  FOR L = 1 TO NC: IF Z$ = C$(L)  THEN  GOSUB 1050: GOTO 1040
  100. 1000  NEXT L
  101. 1010 L =  VAL(Z$): IF L >0  AND L < = NC  THEN  GOSUB 1050: GOTO 1040
  102. 1020  FOR L = 1 TO NC: GOSUB 1050: IF L = NC  THEN 1040
  103. 1030  VTAB 23: GOSUB 200: NEXT L
  104. 1040  VTAB 22: PRINT "THAT'S ALL.": GOSUB 190: GOTO 3510
  105. 1050  HOME : PRINT "BASIC STATS - COLUMN "L": ";C$(L): GOSUB 250: PRINT 
  106. 1060  PRINT "MINIMUM VALUE      =";:XX = MIN(L): GOSUB 110: PRINT Y$: PRINT 
  107. 1070  PRINT "MAXIMUM VALUE      =";:XX = MAX(L): GOSUB 110: PRINT Y$: PRINT 
  108. 1080  PRINT "RANGE              =";:XX = MAX(L) -MIN(L): GOSUB 110: PRINT Y$: PRINT 
  109. 1090  PRINT "SUM                =";:XX = SUM(L): GOSUB 110: PRINT Y$: PRINT 
  110. 1100  PRINT "AVERAGE VALUE      =";:XX = SUM(L)/NR(L): GOSUB 110: PRINT Y$: PRINT 
  111. 1110  PRINT "VARIANCE           =";:XX = 0: FOR J = 1 TO NR(L):XX = XX +(A(J,L) -SUM(L)/NR(L)) ^2: NEXT J:XX = XX/NR(L): GOSUB 110: PRINT Y$: PRINT 
  112. 1120  PRINT "STANDARD DEVIATION =";:XX =  SQR(XX): GOSUB 110: PRINT Y$: RETURN 
  113. 1130 E = 0: FOR L = 1 TO NC: IF NR(L) >E  THEN E = NR(L)
  114. 1140  NEXT L
  115. 1150  INVERSE : PRINT "   ";: FOR L = 1 TO 3: IF L >NC  THEN 1190
  116. 1160  PRINT "  ";: IF  LEN(C$(L)) <10  THEN  PRINT  LEFT$(SP$,10 - LEN(C$(L)));C$(L);: GOTO 1180
  117. 1170  PRINT  LEFT$(C$(L),10);
  118. 1180  NEXT L
  119. 1190  PRINT : PRINT "   ";: FOR L = 1 TO 3: IF L >NC  THEN 1210
  120. 1200  PRINT "           ";L;: NEXT L: REM  11 SPACES
  121. 1210  PRINT : PRINT "   ": NORMAL :A = 1:B = L -1:D = 1:C = 0
  122. 1220 C = C +1: GOSUB 1410: PRINT : IF C <17  THEN 1220
  123. 1230  INVERSE : PRINT "   ": PRINT "PRESS C TO CHANGE A VALUE, ESC TO QUIT.": NORMAL 
  124. 1240  TEXT : VTAB 24: HTAB 1: PRINT "COMMAND: ";: GET Z$
  125. 1250  IF Z$ = "M"  AND C <E  THEN  VTAB 21: HTAB 1: POKE 35,21: POKE 34,3: PRINT : VTAB 21: INVERSE : PRINT "   ";: NORMAL :C = C +1:A = A +1: VTAB 20: HTAB 1: GOSUB 1410: GOTO 1240
  126. 1260  IF Z$ = "I"  AND A >1  THEN  VTAB 4: HTAB 1: POKE 34,3: POKE 35,20: CALL 768:Z = C:C = A -1: GOSUB 1410:C = Z -1:A = A -1: GOTO 1240
  127. 1270  IF Z$ = "K"  AND B <NC  THEN  POKE 32,5: POKE 33,35: POKE 35,20: FOR L = 1 TO 12: CALL 847: NEXT L:Z1 = 30: TEXT :Z = B +1: GOSUB 1470:D = D +1:B = B +1: GOTO 1240
  128. 1280  IF Z$ = "J"  AND D >1  THEN  POKE 32,4: POKE 33,36: POKE 35,20: FOR L = 1 TO 12: CALL 810: NEXT :Z1 = 6: TEXT :Z = D -1: GOSUB 1470:D = D -1:B = B -1: GOTO 1240
  129. 1290  IF Z$ < >"C"  THEN 1390
  130. 1300  POKE 34,23: PRINT 
  131. 1310  INPUT "ENTER COLUMN,ROW TO CHANGE :";Z$,X$:Z1 =  VAL(Z$):Z =  VAL(X$): IF Z <A  OR Z >C  OR Z1 <D  OR Z1 >B  OR Z >NR(Z1)  THEN 1240
  132. 1320  TEXT : VTAB (Z -A) +4: HTAB 6 +((Z1 -D) *12):XX = A(Z,Z1): GOSUB 110: INVERSE : PRINT Y$: VTAB 24: POKE 34,23: NORMAL 
  133. 1330  INPUT "NEW NUMBER :";Z$:XX =  VAL(Z$): TEXT : GOSUB 110: VTAB (Z -A) +4: HTAB 6 +((Z1 -D) *12): PRINT Y$
  134. 1340 SUM(Z1) = SUM(Z1) -A(Z,Z1) +XX:A(Z,Z1) = XX:MIN(Z1) = 99999:MAX(Z1) =  -99999
  135. 1350  FOR L = 1 TO NR(Z1)
  136. 1360  IF A(L,Z1) >MAX(Z1)  THEN MAX(Z1) = A(L,Z1)
  137. 1370  IF A(L,Z1) <MIN(Z1)  THEN MIN(Z1) = A(L,Z1)
  138. 1380  NEXT L: GOTO 1240
  139. 1390  IF Z$ < > CHR$(27)  THEN 1240
  140. 1400  GOTO 3510
  141. 1410  INVERSE : IF C <10  THEN  PRINT "  ";
  142. 1420  IF C > = 10  AND C <100  THEN  PRINT " ";
  143. 1430  PRINT C;: NORMAL 
  144. 1440  FOR L = D TO B: PRINT "  ";: IF C >NR(L)  THEN  PRINT "          ";: GOTO 1460
  145. 1450 XX = A(C,L): GOSUB 110: PRINT Y$;
  146. 1460  NEXT L: RETURN 
  147. 1470  VTAB 1: HTAB Z1 -2: INVERSE : PRINT " ";: IF  LEN(C$(Z)) <10  THEN  PRINT  LEFT$(SP$,10 - LEN(C$(Z)));C$(Z): GOTO 1490
  148. 1480  PRINT  LEFT$(C$(Z),10)
  149. 1490  HTAB Z1 -2: PRINT " ";SP$;Z: NORMAL : PRINT 
  150. 1500  FOR L = A TO C: IF L >NR(Z)  THEN  RETURN 
  151. 1510 XX = A(L,Z): GOSUB 110: HTAB Z1: PRINT Y$: NEXT L: RETURN 
  152. 1520  HOME : GOSUB 240: GOSUB 250: PRINT 
  153. 1530  PRINT "DATA IS SORTED INDEPENDENTLY OF THE ": PRINT "OTHER COLUMNS. PLEASE ENTER THE COLUMN": PRINT "TO SORT, JUST PRESS 'RETURN' TO QUIT.": PRINT 
  154. 1540  INPUT "COLUMN: ";Z$
  155. 1550  GOSUB 260
  156. 1560  PRINT : INPUT "SORT A)SCENDING OR D)ESCENDING: ";Z$:D = 10: IF  LEFT$(Z$,1) = "A"  THEN D = 0
  157. 1570  IF  LEFT$(Z$,1) = "D"  THEN D = 1
  158. 1580  IF D = 10  THEN 3610
  159. 1590  VTAB 20: HTAB 10: INVERSE : PRINT "SORTING, PLEASE WAIT.": NORMAL 
  160. 1600 A = NR(Z) -1:B = A
  161. 1610  FOR L = 1 TO A
  162. 1620  FOR J = 1 TO B
  163. 1630  IF   NOT D  THEN 1660
  164. 1640  IF A(J,Z) > = A(J +1,Z)  THEN 1680
  165. 1650  GOTO 1670
  166. 1660  IF A(J,Z) < = A(J +1,Z)  THEN 1680
  167. 1670 C = A(J +1,Z):A(J +1,Z) = A(J,Z):A(J,Z) = C
  168. 1680  NEXT :B = B -1: NEXT : PRINT : PRINT "FINISHED.": GOSUB 190: GOTO 3510
  169. 1690  HOME : IF NC <2  THEN  VTAB 10: PRINT "YOU MUST HAVE AT LEAST 2 COLUMNS OF DATA": PRINT "FOR LINEAR REGRESSION.": GOSUB 190: GOTO 3510
  170. 1700 A = 0:B = 0:C = 0: GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE COLUMNS TO PERFORM THE": PRINT "REGRESSION ON.": PRINT : PRINT 
  171. 1710  INPUT "(INDEPENDENT VARIABLE X): ";Z$: GOSUB 260:Z1 = Z
  172. 1720  PRINT : INPUT "(DEPENDENT VARIABLE Y): ";Z$: GOSUB 260: IF Z = Z1  THEN 3610
  173. 1730  PRINT : PRINT : HTAB 9: INVERSE : PRINT "COMPUTING, PLEASE WAIT.": NORMAL 
  174. 1740  FOR L = 1 TO NR(Z):A = A +A(L,Z1) *A(L,Z):B = B +A(L,Z1) ^2:C = C +A(L,Z) ^2: NEXT L
  175. 1750 SL = ((SUM(Z1) *SUM(Z))/NR(Z) -A)/((SUM(Z1) ^2/NR(Z)) -B)
  176. 1760 IN = (SUM(Z)/NR(Z)) -(SUM(Z1)/NR(Z)) *SL
  177. 1770  IF RF = 1  THEN  RETURN 
  178. 1780  HOME : PRINT "THE BEST LINEAR FIT FOR THIS DATA IS:": GOSUB 250: VTAB 8: PRINT "Y = ";:XX = SL: GOSUB 110: PRINT Y$;" X + ";:XX = IN: GOSUB 110: PRINT Y$: PRINT 
  179. 1790 XX = (NR(Z) *A -SUM(Z1) *SUM(Z))/ SQR((NR(Z) *B -SUM(Z1) ^2) *(NR(Z) *C -SUM(Z) ^2)): GOSUB 110
  180. 1800  PRINT "CORRELATION COEFFICIENT     =";Y$:XX = XX ^2: GOSUB 110: PRINT : PRINT "COEFFICIENT - DETERMINATION =";Y$
  181. 1810  VTAB 22: CALL  -868: INPUT "WOULD YOU LIKE TO PREDICT VALUES :";Z$: IF  LEFT$(Z$,1) = "N"  THEN  VTAB 22: CALL  -868: GOSUB 190: TEXT : GOTO 3510
  182. 1820  IF  LEFT$(Z$,1) < >"Y"  THEN 1810
  183. 1830  VTAB 22: CALL  -868: INPUT "VALUE TO PREDICT :";Z$:A =  VAL(Z$)
  184. 1840  VTAB 23: CALL  -868: INPUT "INCREMENT BY :";Z$:B =  VAL(Z$): IF B = 0  THEN 1840
  185. 1850  FOR L = 1 TO 7: PRINT : NEXT : VTAB 6: GOSUB 250: POKE 34,7: IF  LEN(C$(Z1)) >14  THEN  PRINT  LEFT$(C$(Z1),15);: GOTO 1870
  186. 1860  PRINT  TAB( 15 - LEN(C$(Z1)));C$(Z1);
  187. 1870  IF  LEN(C$(Z)) >15  THEN  PRINT  TAB( 20) LEFT$(C$(Z),15): GOTO 1890
  188. 1880  PRINT  TAB( 35 - LEN(C$(Z)));C$(Z)
  189. 1890  CALL  -868: PRINT 
  190. 1900  FOR L = A -5 *B TO A +5 *B  STEP B:XX = L: GOSUB 110: PRINT  TAB( 5);Y$;:XX = SL *L +IN: GOSUB 110: PRINT  TAB( 25);Y$: NEXT L
  191. 1910  GOTO 1810
  192. 1920  GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER COLUMN TO TRANSFORM.": PRINT : INPUT "COLUMN :";Z$: GOSUB 260
  193. 1930  PRINT : PRINT "DO YOU WANT TO R)EPLACE THE COLUMN OR": PRINT : INPUT "A)DD AS A NEW COLUMN ?";Z$: IF  LEFT$(Z$,1) = "R"  THEN Z1 = Z: GOTO 1970
  194. 1940  IF  LEFT$(Z$,1) < >"A"  THEN 1930
  195. 1950 Z1 = NC +1
  196. 1960  PRINT : PRINT "PLEASE ENTER HEADING FOR THE NEW COLUMN.": PRINT "COLUMN "Z1":";: INPUT "";C$(Z1): IF C$(Z1) = ""  THEN 1960
  197. 1970  HOME : PRINT "PLEASE ENTER A TRANSFORMATION FORMULA": PRINT : PRINT "USING X AS A DUMMY VARIABLE.": PRINT : PRINT "FOR EXAMPLE, TO SQUARE THE DATA ENTER,": PRINT : PRINT "'X^2' OR TO DIVIDE THE DATA ENTER"
  198. 1980  PRINT : PRINT "'X/100'.": PRINT : PRINT "PLEASE USE STANDARD APPLE SYNTAX.": PRINT 
  199. 1990  INPUT "FORMULA : ";X$: IF X$ = ""  THEN 3610
  200. 2000 A = 16401: PRINT : HTAB 9: INVERSE : PRINT "COMPUTING, PLEASE WAIT": NORMAL 
  201. 2010  FOR L = 1 TO  LEN(X$): RESTORE 
  202. 2020  READ Z$,XX: IF Z$ = "XXX"  THEN 2060
  203. 2030  IF  MID$ (X$,L,3) = Z$  THEN  POKE A,XX:L = L +2: GOTO 2070
  204. 2040  IF  MID$ (X$,L,1) = Z$  THEN  POKE A,XX: GOTO 2070
  205. 2050  GOTO 2020
  206. 2060  POKE A, ASC( MID$ (X$,L,1))
  207. 2070 A = A +1: IF A >16430  THEN  PRINT : PRINT "FORMULA IS TOO LONG, PLEASE RE-ENTER.": PRINT : GOTO 1990
  208. 2080  NEXT L
  209. 2090  DATA  +,200,-,201,*,202,/,203,^,204,INT,211,ABS,212,SQR,218,LOG,220,EXP,221,COS,222,SIN,223,TAN,224,ATN,225,XXX,10
  210. 2100  FOR L = A TO 16430: POKE L,58: NEXT L
  211. 2110  ONERR  GOTO 2200
  212. 2120 X = MAX(Z): GOSUB 20:X = MIN(Z): GOSUB 20: POKE 216,0
  213. 2130 MIN(Z1) = 99999:MAX(Z1) =  -99999:SUM(Z1) = 0
  214. 2140  FOR L = 1 TO NR(Z):X = A(L,Z): GOSUB 20:A(L,Z1) = X:SUM(Z1) = SUM(Z1) +X
  215. 2150  IF X <MIN(Z1)  THEN MIN(Z1) = X
  216. 2160  IF X >MAX(Z1)  THEN MAX(Z1) = X
  217. 2170  NEXT L
  218. 2180  IF Z1 < >Z  THEN NC = NC +1
  219. 2190 NR(Z1) = NR(Z): PRINT : PRINT "DONE.": GOSUB 190: GOTO 3510
  220. 2200  CALL  -3288:E =  PEEK(222): POKE 216,0:L =  PEEK(218) + PEEK(219) *256: PRINT 
  221. 2210  IF E = 133  THEN  PRINT "POSSIBLE DIVISION BY ZERO, PLEASE REDO.": PRINT : GOTO 1990
  222. 2220  IF E = 69  THEN  PRINT "TRANSFORMED DATA WILL BE OUT OF RANGE": PRINT : PRINT "(-1.7E38 TO 1.7E38), PLEASE REDO.": PRINT : GOTO 1990
  223. 2230  IF E = 53  THEN  PRINT "ILLEGAL QUANTITY ERROR": PRINT "PLEASE CHECK DATA OR CHANGE FORMULA.": PRINT : GOTO 1990
  224. 2240  IF E = 16  OR E = 163  THEN  PRINT "UNABLE TO TRANSLATE FORMULA, PLEASE REDO": GOTO 1990
  225. 2250  GOTO 3590
  226. 2260  VTAB 8: PRINT "PRESS 'ESC' TO RETURN TO THE TEXT PAGE.": FOR L = 1 TO 2000: NEXT L: POKE  -16297,0: POKE  -16300,0: POKE  -16304,0
  227. 2270 XX = 0:YY = 0
  228. 2280  XDRAW 10 AT XX *7,YY *8: GET Z$:Z =  ASC(Z$)
  229. 2290  XDRAW 10 AT XX *7,YY *8
  230. 2300  IF Z = 27  THEN  TEXT : GOTO 3510
  231. 2310  IF Z = 9  THEN YY = YY -1: GOTO 2380
  232. 2320  IF Z = 10  OR Z = 8  THEN XX = XX -1:YY = YY -(XX <0): GOTO 2380
  233. 2330  IF Z = 11  OR Z = 21  THEN XX = XX +1:YY = YY +(XX >39): GOTO 2380
  234. 2340  IF Z = 13  THEN YY = YY +1: GOTO 2380
  235. 2350  IF Z = 32  THEN  HCOLOR= 0: FOR L = YY *8 TO YY *8 +7: HPLOT XX *7,L TO XX *7 +6,L: NEXT L: HCOLOR= 3
  236. 2360  IF  ASC(Z$) <32  THEN 2280
  237. 2370  GOSUB 360:XX = XX/7:YY = YY/8: GOTO 2280
  238. 2380  IF YY <0  THEN YY = 23
  239. 2390  IF YY >23  THEN YY = 0
  240. 2400  IF XX <0  THEN XX = 39
  241. 2410  IF XX >39  THEN XX = 0
  242. 2420  GOTO 2280
  243. 2430  IF NC <2  THEN  VTAB 8: PRINT "YOU NEED AT LEAST 2 COLUMNS.": GOSUB 190: GOTO 3510
  244. 2440  GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE 2 COLUMNS TO GRAPH.": PRINT : PRINT 
  245. 2450  INPUT "X-AXIS COLUMN: ";Z$: GOSUB 260:Z1 = Z: PRINT : INPUT "Y-AXIS COLUMN: ";Z$: GOSUB 260: IF Z = Z1  OR NR(Z) = 0  OR NR(Z1) = 0  THEN 3610
  246. 2460  GOSUB 290: GOSUB 310
  247. 2470  GOSUB 450
  248. 2480  GOSUB 640
  249. 2490  HOME : VTAB 5: PRINT "PRESS 'ESC' TO RETURN TO THE TEXT PAGE  ": PRINT "AFTER THE GRAPH IS DRAWN."
  250. 2500 A = Z: GOSUB 330:LY = LX:HY = HX:JY = JX:YS = XS:GY = GS:A = Z1: GOSUB 330
  251. 2510  GOSUB 490
  252. 2520  HGR : POKE  -16302,0: HCOLOR= 3
  253. 2530  HPLOT 48,9 TO 48,171 TO 279,171
  254. 2540  GOSUB 540
  255. 2550  IF GF = 0  THEN 2570
  256. 2560  FOR L = LY TO HY  STEP JY:YY =  FN Y(L): HPLOT 48,YY TO 279,YY: NEXT L: FOR L = LX TO HX  STEP JX:XX =  FN X(L): HPLOT XX,171 TO XX,9: NEXT L
  257. 2570 Z$ = T$:XX = 20 - LEN(T$)/2:YY = 0: GOSUB 360:Z$ = X$:XX = 20 - LEN(X$)/2:YY = 23: GOSUB 360
  258. 2580  FOR J = LX TO HX -JX  STEP JX:Z$ =  STR$( FN R(J)):XX =  FN X(J):YY = 174: HPLOT XX,169 TO XX,172: GOSUB 370: NEXT J
  259. 2590  GOSUB 710
  260. 2600  GET Z$: IF Z$ < > CHR$(27)  THEN 2600
  261. 2610  TEXT : HOME : VTAB 4: PRINT "WOULD YOU LIKE TO PLOT THE LINEAR": PRINT : INPUT "REGRESSION FOR THIS DATA ?";Z$:RF = 10
  262. 2620  IF  LEFT$(Z$,1) = "Y"  THEN RF = 1
  263. 2630  IF  LEFT$(Z$,1) = "N"  THEN RF = 0
  264. 2640  IF RF = 10  THEN  PRINT : PRINT "PLEASE ANSWER YES OR NO.": GOTO 2610
  265. 2650  IF RF = 0  THEN 2700
  266. 2660  GOSUB 1740: POKE  -16297,0: POKE  -16300,0: POKE  -16304,0: FOR L = LX TO HX  STEP JX/20:XX =  FN X(L):YY =  FN Y(SL *L +IN): GOSUB 590: IF PF  THEN  HPLOT XX,YY
  267. 2670  NEXT L
  268. 2680  GET Z$: IF Z$ < > CHR$(27)  THEN 2680
  269. 2690  TEXT : HOME :RF = 0
  270. 2700  IF NC <3  THEN 3510
  271. 2710  PRINT : PRINT "WOULD YOU LIKE TO PLOT 2 OTHER COLUMNS": PRINT : INPUT "USING THE SAME GRAPH ?";Z$: IF  LEFT$(Z$,1) = "N"  THEN  GOSUB 190: GOTO 3510
  272. 2720  IF  LEFT$(Z$,1) < >"Y"  THEN  PRINT : PRINT "PLEASE ANSWER YES OR NO.": GOTO 2710
  273. 2730  HOME : GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE 2 NEW COLUMNS.": PRINT : INPUT "X-AXIS COLUMN: ";Z$: GOSUB 260:Z1 = Z: PRINT : INPUT "Y-AXIS COLUMN: ";Z$: GOSUB 260: IF Z = Z1  THEN 3610
  274. 2740  GOSUB 450: GOSUB 490: POKE  -16297,0: POKE  -16300,0: POKE  -16304,0: GOSUB 540
  275. 2750  GET Z$: IF Z$ < > CHR$(27)  THEN 2750
  276. 2760  GOTO 2610
  277. 2770  END 
  278. 2780  GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE COLUMN TO PLOT WITH.": PRINT : INPUT "COLUMN: ";Z$: GOSUB 260: IF NR(Z) >12  THEN  PRINT "SORRY, ONLY 12 BARS CAN BE PLOTTED.": GOSUB 190: GOTO 3510
  279. 2790  GOSUB 290: GOSUB 310: GOSUB 640
  280. 2800 M$ = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
  281. 2810  PRINT : PRINT "HOW DO YOU WANT THE X AXIS LABELED:": PRINT : PRINT "1.  BY YEAR": PRINT "2.  BY MONTH": PRINT "3.  NOT AT ALL": PRINT : INPUT "SELECTION :";Z$
  282. 2820 LF =  VAL(Z$): IF LF <1  OR LF >3  THEN 2810
  283. 2830  IF LF = 1  THEN  PRINT : INPUT "ENTER STARTING YEAR :";Z$:E =  VAL(Z$): GOTO 2870
  284. 2840  IF LF = 3  THEN 2870
  285. 2850  PRINT : INPUT "ENTER STARTING MONTH :";Z$: FOR L = 1 TO 12: IF  LEFT$(Z$,3) =  MID$ (M$,3 *L -2,3)  THEN E = L: GOTO 2870
  286. 2860  NEXT L: GOTO 2850
  287. 2870 A = Z: GOSUB 330:C = MIN(Z):MIN(Z) = MIN(Z) -.5 *JX: GOSUB 330:MIN(Z) = C:LY = LX:HY = HX:JY = JX:YS = XS:GY = GX
  288. 2880 JX = 231/(NR(Z) +1):A = (JX -4)/2
  289. 2890  HOME : VTAB 5: PRINT "PRESS 'ESC' TO RETURN TO THE TEXT PAGE": PRINT : PRINT "AFTER THE PLOT."
  290. 2900  FOR L = 1 TO 2000: NEXT L
  291. 2910  HGR : POKE  -16302,0: HCOLOR= 3: HPLOT 48,9 TO 48,171 TO 279,171
  292. 2920  IF GF = 1  THEN  FOR L = LY TO HY  STEP JY:YY =  FN Y(L): HPLOT 48,YY TO 279,YY: NEXT L: HPLOT 279,171 TO 279,9
  293. 2930  FOR L = 1 TO NR(Z):YY =  FN Y(A(L,Z)):XX = 48 +(L *JX): FOR J = 171 TO YY  STEP  -1: HPLOT XX -A,J TO XX +A,J: NEXT J: NEXT L
  294. 2940  GOSUB 680: GOSUB 710
  295. 2950  IF LF = 1  THEN  FOR J = 1 TO NR(Z):YY = 174:XX = (48 +(J *JX)) -6:Z$ =  RIGHT$( STR$(E),2): GOSUB 370:E = E +1: NEXT J
  296. 2960  IF LF < >2  THEN 3000
  297. 2970  FOR J = 1 TO NR(Z):YY = 174:XX = (48 +(J *JX)) -3:Z$ =  MID$ (M$,3 *E -2,1): GOSUB 370:E = E +1
  298. 2980  IF E >12  THEN E = 1
  299. 2990  NEXT J
  300. 3000  GET Z$: IF Z$ < > CHR$(27)  THEN 3000
  301. 3010  TEXT : GOTO 3510
  302. 3020  GOSUB 240: GOSUB 250: PRINT : PRINT "PLEASE ENTER THE COLUMN TO PLOT WITH.": PRINT : INPUT "COLUMN: ";Z$: GOSUB 260: IF NR(Z) <2  OR NR(Z) >12  THEN  PRINT : PRINT "SORRY, ONLY 1-12 SLICES ARE ALLOWED.": GOSUB 190: GOTO 3510
  303. 3030  PRINT : PRINT "PLEASE ENTER A LABEL FOR EACH ROW.": PRINT : PRINT  TAB( 20)"--LABEL--": PRINT 
  304. 3040  FOR L = 1 TO NR(Z): PRINT "ROW "L"="; FN R(A(L,Z));: HTAB 20: INPUT L$(L): NEXT L
  305. 3050  PRINT : GOSUB 290: GOSUB 310: HOME : VTAB 5: PRINT "PRESS ESC TO RETURN TO THE TEXT PAGE": PRINT : PRINT "AFTER THE PLOT.": FOR L = 1 TO 2000: NEXT L
  306. 3060  HGR : POKE  -16302,0: HCOLOR= 3: GOTO 3080
  307. 3070 XX = 1.1 *B * COS(A):YY = B * SIN(A): RETURN 
  308. 3080 B = 78:A = 0: GOSUB 3070: HPLOT XX +194,100 -YY
  309. 3090  FOR A = 0 TO 6.35  STEP .05: GOSUB 3070: HPLOT  TO XX +194,100 -YY: NEXT A
  310. 3100 A = 0: FOR L = 1 TO NR(Z):A = A +(A(L,Z)/SUM(Z)) *6.3: GOSUB 3070: HPLOT 194,100 TO XX +194,100 -YY: NEXT L
  311. 3110 XX = 14:YY = (8 -NR(Z)/2):Z$ = "%": GOSUB 360
  312. 3120  FOR J = 1 TO NR(Z):XX = 0:YY = (J +(9 -NR(Z)/2)) *10:Z$ =  CHR$(J +64) +"-" + LEFT$(L$(J),11)
  313. 3130  IF  LEN(Z$) <13  THEN Z$ = Z$ +" ": GOTO 3130
  314. 3140 Z$ = Z$ + STR$( INT((A(J,Z)/SUM(Z) *100) +.5)): GOSUB 370: NEXT J
  315. 3150 C = 0:A = 0: FOR J = 1 TO NR(Z):C = (A(J,Z)/SUM(Z)) *6.3:A = A +.5 *C:B = 70: GOSUB 3070:XX = XX +194:YY = 100 -YY:Z$ =  CHR$(64 +J): GOSUB 370:B = 80:A = A +.5 *C: NEXT J
  316. 3160  GOSUB 680
  317. 3170  GET Z$: IF Z$ < > CHR$(27)  THEN 3170
  318. 3180  TEXT : GOTO 3510
  319. 3190  PRINT "PLEASE READY PRINTER.": PRINT : GOSUB 190
  320. 3200  PRINT : PRINT 
  321. 3210  PRINT D$;"PR#1": PRINT : PRINT "   ";:E = 0: FOR L = 1 TO NC:Y$ = C$(L): IF NR(L) >E  THEN E = NR(L)
  322. 3220  IF  LEN(Y$) <10  THEN Y$ = " " +Y$: GOTO 3220
  323. 3230  PRINT  LEFT$(Y$,10);: NEXT L: PRINT : PRINT "---";: FOR L = 1 TO NC *10: PRINT "-";: NEXT L
  324. 3240  PRINT : FOR L = 1 TO E
  325. 3250  IF L <10  THEN  PRINT "0";
  326. 3260  PRINT L;" ";: FOR Z = 1 TO NC:XX = A(L,Z): GOSUB 110: PRINT Y$;: NEXT Z: PRINT : NEXT L
  327. 3270  PRINT "---";: FOR L = 1 TO NC *10: PRINT "-";: NEXT L: PRINT 
  328. 3280  PRINT D$;"PR#0": PRINT : PRINT : GOSUB 190: GOTO 3510
  329. 3290  PRINT D$"PR#1": PRINT  CHR$(9)"G": PRINT D$"PR#0": GOTO 3510
  330. 3300  IF  PEEK(104) < >64  THEN  POKE 103,1: POKE 104,64: POKE 16384,0: PRINT  CHR$(4)"RUN CHART.MANAGER"
  331. 3310 SCR$ = "":MC = 8:MR = 90
  332. 3320  DIM A(MR,MC),C$(MC),MIN(MC),MAX(MC),NR(MC),SUM(MC),L$(12)
  333. 3330 NC = 0:Z = 0:KB =  -16384:STRB =  -16368:W = 10:ER$ = "**********":SP$ = "          ":ZE$ = "0000000000": REM  10 *'S, 10 SPACES, AND 10 0'S
  334. 3340 CF = 0:RF = 0:TF = 0:GF = 0:AF = 0
  335. 3350 D$ =  CHR$(4)
  336. 3360  DEF  FN R(Z) =  INT(Z *100 +.5)/100
  337. 3370  DEF  FN I(Z) = JX * INT(Z/JX +.0001)
  338. 3380  DEF  FN X(Z) = (231/XS) *(Z -LX) +48
  339. 3390  DEF  FN Y(Z) = 171 -(162/YS) *(Z -LY)
  340. 3400 L = 768
  341. 3410  PRINT D$"BLOAD SHAPE.TABLE": POKE 232,0: POKE 233,9
  342. 3420  SCALE= 1: ROT= 0
  343. 3430  PRINT D$"BLOAD SCROLL"
  344. 3440  REM 
  345. 3450  TEXT : HOME : NORMAL : SPEED= 255
  346. 3460  VTAB 8: PRINT  TAB( 15)"CHART MANAGER"
  347. 3470  VTAB 10: PRINT  TAB( 4)"** COPYRIGHT 1985 BY MICROSPARC **"
  348. 3480  VTAB 12: PRINT  TAB( 14)"BY MARK JESKE"
  349. 3490  VTAB 19: PRINT  TAB( 9)"PRESS ANY KEY TO BEGIN": COLOR= 10: HLIN 0,39 AT 0: HLIN 0,39 AT 46: VLIN 0,47 AT 0: VLIN 0,47 AT 39
  350. 3500  POKE STRB,0: WAIT KB,128: POKE STRB,0
  351. 3510  HOME : INVERSE : PRINT "                --MENU--                ": NORMAL 
  352. 3520  VTAB 3: PRINT "1.  ENTER A NEW DATA TABLE.": PRINT "2.  LIST/EDIT A DATA TABLE.": PRINT "3.  ADD TO A DATA TABLE."
  353. 3530  PRINT "4.  PRINT BASIC STATISTICS FOR A TABLE.": PRINT "5.  TRANSFORM THE DATA.": PRINT "6.  PERFORM LINEAR REGRESSION ON TABLE.": PRINT "7.  SORT THE DATA TABLE.": PRINT "8.  LIST DATA TABLE ON PRINTER."
  354. 3540  PRINT "9.  SAVE THE TABLE TO DISK.": PRINT "10. LOAD A TABLE FROM DISK.": PRINT : PRINT "11. DRAW A SCATTER PLOT.": PRINT "12. DRAW A BAR GRAPH."
  355. 3550  PRINT "13. DRAW A PIE GRAPH.": PRINT "14. LABEL/VIEW A GRAPH.": PRINT "15. SAVE GRAPH TO DISK."
  356. 3560  PRINT "16. LOAD A GRAPH FROM DISK.": PRINT "17. DUMP GRAPHICS SCREEN TO PRINTER.": PRINT "18. END PROGRAM."
  357. 3570  VTAB 23: CALL  -868: INPUT "ENTER A NUMBER AND PRESS 'RETURN' :";Z$:Z =  VAL(Z$): IF Z <1  OR Z >18  THEN 3570
  358. 3580  HOME : IF NC >0  AND (Z = 1  OR Z = 10  OR Z = 18)  THEN  VTAB 5: PRINT "ANY DATA THAT HAS NOT BEEN SAVED WILL": PRINT "BE LOST.  OKAY TO PROCEED?(Y/N)": GET Z$: PRINT : HOME : IF Z$ < >"Y"  THEN 3510
  359. 3590  IF (Z < >1  AND Z < >10  AND Z < >14  AND Z < >16  AND Z < >15  AND Z < >17  AND Z < >18)  AND TF = 0  THEN  VTAB 8: PRINT "THERE IS NO DATA TABLE, TRY 1 OR 10.": GOSUB 190: GOTO 3510
  360. 3600  ON Z GOTO 730,1130,910,960,1920,1690,1520,3190,3810,3870,2430,2780,3020,2260,3920,3940,3290,3730
  361. 3610  PRINT : PRINT "NO SELECTION, OPTION ABORTED.": GOSUB 190: GOTO 3510
  362. 3620  CALL  -3288:E =  PEEK(222): PRINT D$"CLOSE": POKE 216,0:L =  PEEK(218) + PEEK(219) *256
  363. 3630  TEXT : HOME : VTAB 8
  364. 3640  IF E = 9  THEN  PRINT "THIS DISK IS FULL.  PLEASE TRY ANOTHER.": GOTO 3720
  365. 3650  IF E = 5  THEN  PRINT "INCORRECT FILENAME, PLEASE TRY ANOTHER.": GOTO 3720
  366. 3660  IF E = 6  THEN  PRINT "NO SUCH FILENAME, PLEASE TRY ANOTHER.": GOTO 3720
  367. 3670  IF E = 13  THEN  PRINT "INCORRECT FILE TYPE, PLEASE TRY ANOTHER.": GOTO 3720
  368. 3680  IF E = 8  THEN  PRINT "I/O ERROR, PLEASE CHECK DRIVE DOOR.": GOTO 3720
  369. 3690  IF E = 4  THEN  PRINT "THIS DISK IS WRITE PROTECTED, PLEASE TRY": PRINT "ANOTHER DISKETTE.": GOTO 3720
  370. 3700  PRINT CHR(7); CHR$(7): PRINT "ERROR NUMBER "E" HAS OCCURED IN LINE": PRINT : PRINT L".": GOTO 3720
  371. 3710  END 
  372. 3720  GOSUB 3740: GOTO 3510
  373. 3730  HOME : END 
  374. 3740  PRINT 
  375. 3750  PRINT "PRESS ANY KEY TO CONTINUE ";: GET Z$: PRINT Z$: RETURN 
  376. 3760  PRINT : INPUT "DO YOU WANT A CATALOG OF THE DISK :";Z$: IF  LEFT$(Z$,1) = "Y"  THEN  PRINT D$"CATALOG": GET Z$: GOTO 3780
  377. 3770  IF  LEFT$(Z$,1) < >"N"  THEN  PRINT : PRINT "PLEASE ANSWER YES OR NO.": GOTO 3760
  378. 3780  PRINT : PRINT "PLEASE ENTER A FILENAME.": PRINT : PRINT "(NO COMMAS, COLONS, OR QUOTES PLEASE)"
  379. 3790  PRINT : INPUT "FILENAME :";Z$: IF Z$ = ""  THEN  POP : GOTO 3610
  380. 3800  RETURN 
  381. 3810  GOSUB 3760: ONERR  GOTO 3620
  382. 3820  PRINT D$"OPEN"Z$
  383. 3830  PRINT D$"WRITE"Z$
  384. 3840  PRINT NC: FOR L = 1 TO NC: PRINT C$(L): PRINT MAX(L): PRINT MIN(L): PRINT SUM(L): PRINT NR(L): FOR J = 1 TO NR(L): PRINT A(J,L): NEXT J: NEXT L
  385. 3850  PRINT D$"CLOSE"Z$
  386. 3860  PRINT : PRINT "DONE.": POKE 216,0: GOSUB 3740: GOTO 3510
  387. 3870  GOSUB 3760: ONERR  GOTO 3620
  388. 3880  PRINT D$"OPEN"Z$
  389. 3890  PRINT D$"READ"Z$
  390. 3900  INPUT NC: FOR L = 1 TO NC: INPUT C$(L): INPUT MAX(L): INPUT MIN(L): INPUT SUM(L): INPUT NR(L): FOR J = 1 TO NR(L): INPUT A(J,L): NEXT J: NEXT L
  391. 3910  PRINT D$"CLOSE"Z$:TF = 1: POKE 216,0: GOTO 3860
  392. 3920  GOSUB 3760: ONERR  GOTO 3620
  393. 3930  PRINT D$"BSAVE"Z$",A$2000,L$2000": POKE 216,0: GOSUB 3740: GOTO 3510
  394. 3940  GOSUB 3760: ONERR  GOTO 3620
  395. 3950  PRINT D$"BLOAD"Z$",A$2000": POKE 216,0: GOSUB 3740: GOTO 3510