home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib09.dsk / MICRO-CALC.II.bas < prev    next >
BASIC Source File  |  2023-02-26  |  14KB  |  218 lines

  1. 1  REM  **********************
  2. 2  REM  *    MICRO-CALC.II   *
  3. 3  REM  *   BY STEVEN BOHN   *
  4. 4  REM  * COPYRIGHT (C) 1982 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 20  ONERR  GOTO 2060
  9. 30  POKE 4,0: HIMEM: 32510
  10. 40  DIM LC(21),CL$(21),RO$(21),WK(21,21),TS$(21),F$(21,21),CC$(100)
  11. 50 WO$ = "          ": REM  TEN SPACES
  12. 60  PRINT : PRINT  CHR$(4);"OPEN TEMP-FILE"
  13. 70  PRINT  CHR$(4);"READ TEMP-FILE"
  14. 80  INPUT NR: INPUT NC: INPUT NM$
  15. 90  FOR I = 1 TO NC: INPUT LC(I): NEXT I
  16. 100  FOR I = 1 TO NR: INPUT RO$(I): IF  LEN(RO$(I)) <10  THEN RO$(I) =  LEFT$(WO$,10 - LEN(RO$(I))) +RO$(I)
  17. 110  NEXT I
  18. 120  FOR I = 1 TO NC: INPUT CL$(I): IF  LEN(CL$(I)) <LC(I)  THEN CL$(I) =  LEFT$(WO$,LC(I) - LEN(CL$(I))) +CL$(I)
  19. 130  NEXT I
  20. 140  FOR N = 1 TO NR: FOR M = 1 TO NC: INPUT WK(N,M): NEXT M: NEXT N
  21. 150  PRINT  CHR$(4);"CLOSE TEMP-FILE": PRINT  CHR$(4);"DELETE TEMP-FILE"
  22. 160  REM  --- BUILD SAVE FILE ---
  23. 170 Z$ =  CHR$(34):Y$ = Z$ + CHR$(58):LN = 10000:CC = CC +1:A$ = "10000":CC$(CC) = A$ +"REM --- DATA ---":CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  24. 180 ND = 0: FOR N = 1 TO NR: FOR M = 1 TO NC: IF WK(N,M) = 3  THEN ND = ND +1
  25. 190  NEXT M: NEXT N
  26. 200 CC$(CC) = A$ +"NR=" + STR$(NR) + CHR$(58) +"NC=" + STR$(NC) + CHR$(58) +"ND=" + STR$(ND) + CHR$(58) +"NM$=" + CHR$(34) +NM$ + CHR$(34)
  27. 210 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  28. 220 CC$(CC) = A$ +"RO$(1)=" +Z$ +RO$(1) +Y$ +"RO$(2)=" +Z$ +RO$(2) +Y$ +"RO$(3)=" +Z$ +RO$(3) +Y$ +"RO$(4)=" +Z$ +RO$(4) +Y$ +"RO$(5)=" +Z$ +RO$(5) +Z$
  29. 230 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  30. 240 CC$(CC) = A$ +"RO$(6)=" +Z$ +RO$(6) +Y$ +"RO$(7)=" +Z$ +RO$(7) +Y$ +"RO$(8)=" +Z$ +RO$(8) +Y$ +"RO$(9)=" +Z$ +RO$(9) +Y$ +"RO$(10)=" +Z$ +RO$(10) +Z$
  31. 250 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  32. 260 CC$(CC) = A$ +"RO$(11)=" +Z$ +RO$(11) +Y$ +"RO$(12)=" +Z$ +RO$(12) +Y$ +"RO$(13)=" +Z$ +RO$(13) +Y$ +"RO$(14)=" +Z$ +RO$(14) +Y$ +"RO$(15)=" +Z$ +RO$(15) +Z$
  33. 270 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  34. 280 CC$(CC) = A$ +"RO$(16)=" +Z$ +RO$(16) +Y$ +"RO$(17)=" +Z$ +RO$(17) +Y$ +"RO$(18)=" +Z$ +RO$(18) +Y$ +"RO$(19)=" +Z$ +RO$(19) +Y$ +"RO$(20)=" +Z$ +RO$(20) +Z$
  35. 290 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  36. 300 CC$(CC) = A$ +"CL$(1)=" +Z$ +CL$(1) +Y$ +"CL$(2)=" +Z$ +CL$(2) +Y$ +"CL$(3)=" +Z$ +CL$(3) +Y$ +"CL$(4)=" +Z$ +CL$(4) +Y$ +"CL$(5)=" +Z$ +CL$(5) +Z$
  37. 310 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  38. 320 CC$(CC) = A$ +"CL$(6)=" +Z$ +CL$(6) +Y$ +"CL$(7)=" +Z$ +CL$(7) +Y$ +"CL$(8)=" +Z$ +CL$(8) +Y$ +"CL$(9)=" +Z$ +CL$(9) +Y$ +"CL$(10)=" +Z$ +CL$(10) +Z$
  39. 330 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  40. 340 CC$(CC) = A$ +"CL$(11)=" +Z$ +CL$(11) +Y$ +"CL$(12)=" +Z$ +CL$(12) +Y$ +"CL$(13)=" +Z$ +CL$(13) +Y$ +"CL$(14)=" +Z$ +CL$(14) +Y$ +"CL$(15)=" +Z$ +CL$(15) +Z$
  41. 350 CC = CC +1:LN = LN +1:A$ =  STR$(LN)
  42. 360 CC$(CC) = A$ +"CL$(16)=" +Z$ +CL$(16) +Y$ +"CL$(17)=" +Z$ +CL$(17) +Y$ +"CL$(18)=" +Z$ +CL$(18) +Y$ +"CL$(19)=" +Z$ +CL$(19) +Y$ +"CL$(20)=" +Z$ +CL$(20) +Z$
  43. 370 CC = CC +1:LN = LN +1:A$ =  STR$(LN):CC$(CC) = A$ +" RETURN":FX = 0
  44. 380 CC = CC +1
  45. 390  REM  --- ENTER FORMULA ---
  46. 400 X =  FRE(0)
  47. 410  FOR N = 1 TO NR: FOR M = 1 TO NC: IF WK(N,M) = 2  THEN 430
  48. 420  HOME : NEXT M: NEXT N: GOTO 990
  49. 430  HOME : INVERSE : VTAB 2: HTAB 4: PRINT "         ENTER FORMULA          ": VTAB 3: HTAB 4: PRINT "   ESCAPE TO ENTER ROW/COLUMN   ": VTAB 4: HTAB 4: PRINT "RETURN WHEN DONE--CTRL-V TO VIEW": NORMAL : POKE 34,5
  50. 440  VTAB 6: HTAB 6: PRINT "FORMULA FOR ROW ";N;" , COLUMN ";M
  51. 450  IF DF = 1  THEN  VTAB 13: HTAB 1: INVERSE : PRINT "OLD FORMULA";: NORMAL : PRINT " = ";F$(N,M)
  52. 460  VTAB 8: HTAB 12: INVERSE : PRINT CL$(M): VTAB 10: HTAB 11 - LEN(RO$(N)): PRINT RO$(N): NORMAL :B$ = ""
  53. 470  IF LZ = 1  THEN LZ = 0:B$ = LZ$:LZ$ = ""
  54. 480  VTAB 10: HTAB 12: PRINT B$;: GET A$
  55. 490  IF A$ =  CHR$(13)  THEN 570
  56. 500  IF A$ =  CHR$(22)  THEN  GOSUB 860: GOTO 430
  57. 510  IF A$ =  CHR$(27)  THEN 640
  58. 520  IF A$ =  CHR$(8)  THEN B$ = "":C$ = "": HOME : GOTO 440
  59. 530  IF A$ =  CHR$(94)  THEN 550
  60. 540 A =  ASC(A$): IF A <40  OR A >62  OR A = 44  OR A = 58  OR A = 59  OR A = 61  THEN 480
  61. 550 B$ = B$ +A$: IF  LEN(B$) >200  THEN B$ = "":C$ = "": HOME : GOTO 440
  62. 560 C$ = C$ +A$: GOTO 480
  63. 570  IF B$ = ""  THEN 480
  64. 580  VTAB 16: HTAB 11: INVERSE : PRINT "IS THIS CORRECT?";: NORMAL : GET A$: IF A$ = "Y"  THEN F$(N,M) = C$:C$ = "": HOME 
  65. 590  IF A$ = "Y"  THEN  IF FX = 1  THEN  RETURN 
  66. 600  IF A$ = "Y"  THEN 420
  67. 610  IF A$ = "N"  THEN B$ = "":C$ = B$:D$ = B$: VTAB 16: HTAB 11: PRINT WO$;WO$: VTAB 10: HTAB 12: CALL  -958: GOTO 480
  68. 620  PRINT  CHR$(7);: GOTO 580
  69. 630  REM  -- GET ROW & COLUMN --
  70. 640  VTAB 15: HTAB 1: INVERSE : PRINT "ENTER ROW NUMBER";: NORMAL : PRINT WO$;: VTAB 15: HTAB 17: GET A$: IF A$ =  CHR$(81)  THEN 850
  71. 650  IF A$ =  CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 640
  72. 660 D$ = A$: PRINT A$;: GET A$: IF A$ =  CHR$(81)  THEN 850
  73. 670  IF A$ =  CHR$(8)  THEN D$ = "":A$ = "": GOTO 640
  74. 680  IF A$ =  CHR$(13)  THEN D =  VAL(D$): IF D <1  THEN  PRINT  CHR$(7);: GOTO 640
  75. 690  IF A$ =  CHR$(13)  THEN 730
  76. 700 D$ = D$ +A$: PRINT A$;
  77. 710  GET A$: IF A$ =  CHR$(8)  THEN D$ = "":A$ = "": GOTO 640
  78. 720  IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 710
  79. 730 D =  VAL(D$): IF D <1  OR D >20  THEN  PRINT  CHR$(7);: GOTO 640
  80. 740  VTAB 16: HTAB 1: INVERSE : PRINT "ENTER COLUMN NUMBER";: NORMAL : PRINT WO$;: VTAB 16: HTAB 20: GET A$: IF A$ =  CHR$(81)  THEN 850
  81. 750  IF A$ =  CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 740
  82. 760 D$ = A$: PRINT A$;: GET A$: IF A$ =  CHR$(81)  THEN 850
  83. 770  IF A$ =  CHR$(8)  THEN D$ = "":A$ = "": GOTO 740
  84. 780  IF A$ =  CHR$(13)  THEN E =  VAL(D$): IF E <1  THEN  PRINT  CHR$(7);: GOTO 740
  85. 790  IF A$ =  CHR$(13)  THEN 830
  86. 800 D$ = D$ +A$: PRINT A$;
  87. 810  GET A$: IF A$ =  CHR$(8)  THEN D$ = "":A$ = "": GOTO 740
  88. 820  IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 810
  89. 830 E =  VAL(D$): IF E <1  OR E >20  THEN  PRINT  CHR$(7);: GOTO 740
  90. 840 D$ = "":A$ =  CHR$(91) + STR$(D) + CHR$(44) + STR$(E) + CHR$(93):B$ = B$ +A$:E$ =  CHR$(68) + CHR$(40) + STR$(D) + CHR$(44) + STR$(E) + CHR$(41):C$ = C$ +E$
  91. 850  VTAB 15: HTAB 1: CALL  -958: VTAB 10: HTAB 12: PRINT B$: GOTO 480
  92. 860  TEXT : HOME : INVERSE : VTAB 4: HTAB 11: PRINT WO$;WO$;WO$;: NORMAL : PRINT : POKE 3,1: CALL 32512: FOR I = 1 TO NR
  93. 870  VTAB 4 +I: HTAB 1: PRINT RO$(I);: NEXT I: NORMAL 
  94. 880  VTAB 1: HTAB 1: INVERSE : PRINT "<- OR < SHIFT FILE > OR ->   R = RESUME ";: NORMAL 
  95. 890  VTAB 4: HTAB 11: GET A$
  96. 900  IF A$ =  CHR$(8)  THEN Y = Y +10
  97. 910  IF A$ =  CHR$(21)  THEN Y = Y -10
  98. 920  IF A$ =  CHR$(60)  OR A$ =  CHR$(44)  THEN Y = Y +1
  99. 930  IF A$ =  CHR$(62)  OR A$ =  CHR$(46)  THEN Y = Y -1
  100. 940  IF A$ =  CHR$(82)  THEN LZ = 1:LZ$ = B$: RETURN 
  101. 950  IF Y >255  THEN Y = Y -255
  102. 960  IF Y <0  THEN Y = 255 +Y
  103. 970  POKE 3,Y: CALL 32512: GOTO 890
  104. 980  REM  --- REVIEW FORMULAS ---
  105. 990 B$ = "": TEXT : HOME : VTAB 12: HTAB 1: INVERSE : PRINT "DO YOU WISH TO REVIEW FORMULAS ?";: NORMAL : GET A$: IF A$ < >"Y"  THEN 1110
  106. 1000  FOR N = 1 TO NR: FOR M = 1 TO NC
  107. 1010  IF WK(N,M) = 2  THEN 1030
  108. 1020  NEXT M: NEXT N: GOTO 1110
  109. 1030  TEXT : HOME : VTAB 5: HTAB 21: PRINT "COLUMN #";M
  110. 1032  INVERSE : VTAB 6: HTAB 21: PRINT CL$(M);: NORMAL : VTAB 7: HTAB 1: PRINT "ROW #";N;" ";: INVERSE : PRINT RO$(N);: NORMAL 
  111. 1040  VTAB 7: HTAB 21: PRINT F$(N,M)
  112. 1050  TEXT : VTAB 22: HTAB 3: PRINT "(PRESS 'Q' TO QUIT, 'C' TO CHANGE)";: GET A$: IF A$ =  CHR$(13)  THEN 1020
  113. 1060  IF A$ = "Q"  THEN  FOR N = 1 TO 2: NEXT N: FOR M = 1 TO 2: NEXT M: HOME : VTAB 10: PRINT "PRESS RETURN TO QUIT,": PRINT "ANY OTHER KEY TO REVIEW/CHANGE";: GET B$: PRINT B$: IF B$ < > CHR$(13)  THEN  HOME : GOTO 1000
  114. 1070  IF B$ =  CHR$(13)  THEN 1230
  115. 1080  IF A$ = "C"  THEN 1110
  116. 1090  PRINT  CHR$(7);: GOTO 1050
  117. 1100  REM  --- CHANGE FORMULA ---
  118. 1110  TEXT : HOME : INVERSE : VTAB 3: HTAB 11: PRINT "HIT (R) TO REVIEW": NORMAL : VTAB 1: HTAB 1: PRINT "DO YOU WISH TO CHANGE A FORMULA ? ";: GET A$: IF A$ = "N"  THEN  FOR N = 1 TO 2: NEXT N: FOR M = 1 TO 2: NEXT M: GOTO 1230
  119. 1120  IF A$ = "R"  THEN 990
  120. 1130  IF A$ < >"Y"  THEN 1110
  121. 1140 FX = 1: HOME : HTAB 11: PRINT "(PRESS 'Q' TO QUIT)": PRINT : INPUT "ENTER ROW NUMBER ->";N$
  122. 1150  IF  LEFT$(NM$,1) = "Q"  THEN 990
  123. 1160 N =  VAL(N$): IF N <1  OR N >NR  THEN 1140
  124. 1170  HOME : HTAB 11: PRINT "(PRESS 'Q' TO QUIT)": PRINT : INPUT "ENTER COLUMN NUMBER ->";N$
  125. 1180  IF  LEFT$(N$,1) = "Q"  THEN 990
  126. 1190 M =  VAL(N$): IF M <1  OR M >NC  THEN 1170
  127. 1200  IF WK(N,M) < >2  THEN 1140
  128. 1210 DF = 1: GOSUB 430:FX = 0:DF = 0: GOTO 1110
  129. 1220  REM  --- BUILD DATA ---
  130. 1230  HOME : VTAB 12: HTAB 13: INVERSE : PRINT "SAVING FORMULAS": NORMAL 
  131. 1240 CC$(CC) =  STR$(11000) +"REM--- FORMULAS ---":CC = CC +1
  132. 1250  FOR M = 1 TO NC
  133. 1260 CC = CC +1:LN = 11000 +(100 *M):A$ =  STR$(LN)
  134. 1270 CC$(CC) = A$ +"REM--- NO DATA ---"
  135. 1280  FOR N = 1 TO NR
  136. 1290  IF F$(N,M) = ""  THEN  NEXT N: GOTO 1330
  137. 1300 B$ = "F(" + STR$(N) + CHR$(44) + STR$(M) + CHR$(41) + CHR$(61) +F$(N,M)
  138. 1310  IF  LEN(A$) + LEN(B$) <200  THEN A$ = A$ +B$ + CHR$(58):CC$(CC) = A$: NEXT N: GOTO 1330
  139. 1320 CC$(CC) = A$:CC = CC +1:LN = LN +1:A$ =  STR$(LN) +B$ + CHR$(58):CC$(CC) = A$: NEXT N
  140. 1330 CC = CC +1:LN = LN +1:CC$(CC) =  STR$(LN) +"RETURN": NEXT M: FOR M = 1 TO NC: FOR N = 1 TO NR:F$(N,M) = "": NEXT N: NEXT M:X =  FRE(0): GOSUB 1350: GOTO 1920
  141. 1340  REM  --- CUSTOM DATA ---
  142. 1350  HOME :FX = 0:CC = CC +1:LN = LN +1:ND = 0: FOR N = 1 TO NR: FOR M = 1 TO NC: IF WK(N,M) = 3  THEN ND = ND +1
  143. 1360  NEXT M: NEXT N: DIM DF$(ND +11):NE = 5
  144. 1370  TEXT : HOME : HTAB 2: INVERSE : PRINT "     ENTER CUSTOM DATA SEQUENCE    ": VTAB 2: HTAB 2: PRINT "Q=QUIT  R=RESTART  CTRL-V=VIEW FILE"
  145. 1380  VTAB 3: HTAB 2: PRINT "          <- MOVE DATA ->          ": NORMAL 
  146. 1390  VTAB 4: CALL  -958:NE = NE +1: IF NE >ND +5  THEN 1650
  147. 1400  FOR I =  -5 TO 5: IF DF$(NE +I) < >""  THEN  HTAB 15: VTAB 13 +I: PRINT NE -5 +I;")";DF$(NE +I);
  148. 1410  NEXT I: VTAB 13: HTAB 8: PRINT "ROW -> ";: INVERSE : PRINT NE -5;")";: NORMAL : PRINT DF$(NE);: VTAB 13: HTAB 25: PRINT "<- COLUMN"
  149. 1420  IF DF$(NE) = ""  THEN 1440
  150. 1430  INVERSE : VTAB 14: HTAB 1
  151. 1435  PRINT RO$( VAL( LEFT$(DF$(NE),2)));: VTAB 14: HTAB 28: PRINT CL$( VAL( RIGHT$(DF$(NE),1)) +10 * VAL( MID$ (DF$(NE), LEN(DF$(NE)) -1,1)));
  152. 1440  NORMAL : VTAB 5: HTAB 1: PRINT "                        ";: VTAB 5: HTAB 1: PRINT "ENTER ROW NUMBER ";: GET A$
  153. 1450  IF A$ = "Q"  THEN  RETURN 
  154. 1460  IF A$ = "R"  THEN NE = 5: GOTO 1390
  155. 1470  IF A$ =  CHR$(22)  THEN  GOSUB 860:NE = NE -1: GOTO 1370
  156. 1480  IF A$ =  CHR$(8)  THEN NE = NE -2: IF NE <5  THEN NE = 5: GOTO 1390
  157. 1490  IF A$ =  CHR$(8)  THEN 1390
  158. 1500  IF A$ =  CHR$(21)  THEN  IF DF$(NE) < >""  THEN 1390
  159. 1510  IF  VAL(A$) <1  THEN 1440
  160. 1520  PRINT A$;: INPUT "";B$:B$ = A$ +B$:B =  VAL(B$): IF B <1  OR B >20  THEN 1440
  161. 1530 N = B
  162. 1540  VTAB 5: HTAB 1: PRINT "ENTER COLUMN NUMBER ";: GET A$
  163. 1550  IF A$ = "Q"  THEN  RETURN 
  164. 1560  IF A$ = "R"  THEN NE = 5: GOTO 1390
  165. 1570  IF A$ =  CHR$(22)  THEN  GOSUB 860:NE = NE -1: GOTO 1370
  166. 1580  IF A$ =  CHR$(8)  THEN NE = NE -2: IF NE <5  THEN NE = 5: GOTO 1390
  167. 1590  IF A$ =  CHR$(8)  THEN 1390
  168. 1600  IF A$ =  CHR$(21)  THEN  IF DF$(NE) < >""  THEN 1390
  169. 1610  IF  VAL(A$) <1  THEN 1440
  170. 1620  PRINT A$;: INPUT "";B$:B$ = A$ +B$:B =  VAL(B$): IF B <1  OR B >20  THEN 1540
  171. 1630 M = B: IF WK(N,M) < >3  THEN 1440
  172. 1640 DF$(NE) =  STR$(N) + CHR$(44) + STR$(M): GOTO 1390
  173. 1650  VTAB 22: HTAB 1: PRINT "DONE, PRESS 'S' TO SAVE OR <- -> TO VIEW";:NE = 5
  174. 1660  GET A$: IF A$ = "S"  THEN  PRINT A$;: HOME : INVERSE : VTAB 10: HTAB 5: PRINT "SAVING CUSTOM DATA SEQUENCE": VTAB 11: HTAB 5: PRINT "MAY TAKE   SEVERAL  MINUTES": NORMAL : GOTO 1810
  175. 1670  VTAB 3: HTAB 2: FLASH : PRINT "S=SAVE";: VTAB 3: HTAB 29: PRINT "C=CHANGE";: NORMAL 
  176. 1680  VTAB 4: CALL  -958
  177. 1690  IF A$ = "R"  THEN NE = 5: GOTO 1390
  178. 1700  IF A$ =  CHR$(8)  THEN NE = NE -1: IF NE <6  THEN NE = ND +5
  179. 1710  IF A$ =  CHR$(44)  OR A$ =  CHR$(60)  THEN NE = NE -10: IF NE <6  THEN NE = ND
  180. 1720  IF A$ =  CHR$(21)  THEN NE = NE +1: IF NE >ND +5  THEN NE = 6
  181. 1730  IF A$ =  CHR$(46)  OR A$ =  CHR$(62)  THEN NE = NE +10: IF NE >ND +5  THEN NE = 11
  182. 1740  IF A$ =  CHR$(22)  THEN  GOSUB 860: HOME : HTAB 2
  183. 1742  INVERSE : PRINT "     ENTER CUSTOM DATA SEQUENCE    ": HTAB 2: PRINT "Q=QUIT  R=RESTART  CTRL-V=VIEW FILE": HTAB 2: PRINT "          <- MOVE DATA ->          ": NORMAL : GOTO 1670
  184. 1750  IF A$ = "C"  THEN 1850
  185. 1760  FOR I =  -5 TO 5: IF DF$(NE +I) < >""  THEN  HTAB 15: VTAB 13 +I: PRINT NE -5 +I;")";DF$(NE +I);
  186. 1770  NEXT I: VTAB 13: HTAB 8: PRINT "ROW -> ";: INVERSE : PRINT NE -5;")";: NORMAL : PRINT DF$(NE);: VTAB 13: HTAB 25: PRINT "<- COLUMN"
  187. 1780  IF DF$(NE) = ""  THEN 1800
  188. 1790  INVERSE : VTAB 14: HTAB 1
  189. 1795  PRINT RO$( VAL( LEFT$(DF$(NE),2)));: VTAB 14: HTAB 28: PRINT CL$( VAL( RIGHT$(DF$(NE),1)) +10 * VAL( MID$ (DF$(NE), LEN(DF$(NE)) -1,1)));
  190. 1800  NORMAL : GOTO 1660
  191. 1810 NE = 5:CD = 0:CC$(CC) =  STR$(LN) +"DATA ": FOR I = 6 TO ND +5
  192. 1820 CD = CD +1: IF CD <44  THEN CC$(CC) = CC$(CC) +DF$(I) + CHR$(44): NEXT I: RETURN 
  193. 1830 CC$(CC) = CC$(CC) +DF$(I):CC = CC +1:LN = LN +1:CC$(CC) =  STR$(LN) +"DATA ":CD = 0
  194. 1840  NEXT I: RETURN 
  195. 1850  VTAB 5: HTAB 1: PRINT "ENTER STEP NUMBER, ROW, COLUMN ": INPUT "ENTER ->";A$,B$,C$:A =  VAL(A$):R =  VAL(B$):C =  VAL(C$)
  196. 1860  IF A >ND  THEN 1680
  197. 1870  IF R >NR  THEN 1680
  198. 1880  IF C >NC  THEN 1680
  199. 1890  IF WK(R,C) < >3  THEN 1680
  200. 1900 DF$(A +5) =  STR$(R) + CHR$(44) + STR$(C): GOTO 1680
  201. 1910  REM  --- SAVE TO DISK ---
  202. 1920  TEXT : HOME : NORMAL 
  203. 1930  VTAB 12: HTAB 5: PRINT "NOW WRITING AND SAVING :"
  204. 1932  INVERSE : VTAB 14: HTAB 5: PRINT NM$: NORMAL : VTAB 16: HTAB 5: PRINT "MAY TAKE SEVERAL MINUTES"
  205. 1940  PRINT  CHR$(13) + CHR$(4);"OPEN WORKER": PRINT  CHR$(4);"DELETE WORKER"
  206. 1950  PRINT  CHR$(4);"OPEN WORKER": PRINT  CHR$(4);"WRITE WORKER"
  207. 1960  PRINT "LOAD SCRATCH-PAD"
  208. 1970  PRINT "TEXT"
  209. 1980  FOR I = 1 TO CC: PRINT CC$(I): NEXT I: PRINT "HOME"
  210. 1990  PRINT "PRINT" + CHR$(34) +"PLEASE INSERT THE DISKETTE THAT YOU ARE SAVING YOUR PROGRAM ONTO" + CHR$(34)
  211. 2000  PRINT "PRINT" + CHR$(34) +"PRESS THE >>>>>SPACE BAR<<<<< WHEN READY" + CHR$(34): PRINT "CALL 32661"
  212. 2010  PRINT "SAVE";NM$
  213. 2020  PRINT "RUN"
  214. 2030  PRINT  CHR$(4);"CLOSE WORKER"
  215. 2040  PRINT  CHR$(4);"EXEC WORKER"
  216. 2050  END 
  217. 2060 A =  PEEK(222):B =  PEEK(218) + PEEK(219) *256: IF A = 9  THEN  HOME : PRINT  CHR$(7);: VTAB 10: FLASH : PRINT "DISK FULL - PLEASE USE ANOTHER": NORMAL : FOR I = 1 TO 1000: GOTO 1520
  218. 2070  HOME : VTAB 10: PRINT "ERROR NUMBER ";A: PRINT "IN LINE NUMBER ";B: END