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

  1. 10  REM  *****************************
  2. 11  REM  *      MICROCALC            *
  3. 12  REM  *    BY STEPHEN BOHN        *
  4. 13  REM  *   COPYRIGHT (C) 1982      *
  5. 14  REM  *   BY MICRO-SPARC INC      *
  6. 15  REM  *   LINCOLN, MA. 01773      *
  7. 16  REM  *   ALL RIGHTS RESERVED     *
  8. 17  REM  *****************************
  9. 20  POKE 4,0: HIMEM: 32510
  10. 25 G$ = "                                                                                                                                                                                                                                 "
  11. 26  REM  225 SPACES BETWEEN QUOTES IN LINE 25
  12. 30  PRINT  CHR$(4);"BRUN CLEARER": PRINT  CHR$(4);"BLOAD DISPLAYER"
  13. 40  DIM LC(21),CL$(21),RO$(21),WK(21,21),TS$(21),CT$(21,21)
  14. 50 Z$ =  CHR$(34):Y$ = Z$ + CHR$(58):WO$ = "          ": REM  TEN SPACES
  15. 60 Q$(3) = "   ":Q$(4) = "    ":Q$(5) = "     ":Q$(6) = "      ":Q$(7) = "       ":Q$(8) = "        ":Q$(9) = "         "
  16. 70 D$(3) = ".00":D$(4) = "$.00":D$(5) = "$ .00":D$(6) = "$  .00":D$(7) = "$   .00":D$(8) = "$    .00":D$(9) = "$     .00"
  17. 80  REM  --- COLUMN WIDTHS ---
  18. 90  TEXT : HOME : POKE 33,41: FOR I = 5 TO 24: VTAB (I): HTAB 21: PRINT "....................";: NEXT I: POKE 33,40
  19. 100  VTAB 1: HTAB 1: INVERSE : PRINT "ENTER> COLUMN WIDTH ": PRINT "1-9 FOR WIDTH       ": PRINT "Q TO QUIT": PRINT "         "
  20. 110  FOR I = 1 TO 20: VTAB (4 +I): HTAB 1: PRINT "         ";: NEXT I: NORMAL : VTAB 4: HTAB 21: FOR I = 1 TO 20
  21. 120  GET A$: IF A$ = "Q"  AND I >1  THEN 210
  22. 130  IF A$ =  CHR$(8)  THEN I = I -1: PRINT A$;: CALL  -868: IF I <1  THEN I = 1: PRINT " ";
  23. 140  IF A$ =  CHR$(8)  AND I <1  THEN I = 1: PRINT " ";
  24. 150  IF A$ =  CHR$(8)  THEN 120
  25. 160 A =  VAL(A$): IF A <1  THEN 120
  26. 170  IF I <1  THEN I = 1
  27. 180 LC(I) = A: PRINT A$;: NEXT I
  28. 190  VTAB 4: HTAB 20: GET A$: IF A$ =  CHR$(8)  THEN  FOR I = 1 TO 20:LC(I) = 0: GOTO 90
  29. 200  IF A$ < > CHR$(81)  THEN  PRINT  CHR$(7);: GOTO 190
  30. 210 NC = I -1: VTAB 1: HTAB 1: PRINT WO$;WO$: PRINT WO$;WO$: PRINT WO$;WO$
  31. 220  REM  --- COLUMN NAMES ---
  32. 230  VTAB 3: HTAB 20: CALL  -868: INVERSE : VTAB 1: HTAB 1: PRINT "ENTER> COLUMN NAMES": NORMAL : PRINT "         ": FOR I = 1 TO NC:K = 0: VTAB 3: HTAB 1: PRINT WO$;
  33. 240  VTAB 2: HTAB 1: INVERSE : PRINT "NAME FOR COLUMN #";I;: VTAB 4: HTAB 1: PRINT "COL. NAME ";: NORMAL : VTAB 3: HTAB 1: PRINT WO$;
  34. 250 LM = LC(I):B$ = ""
  35. 260  VTAB 3: HTAB 10: GET A$
  36. 270  IF A$ =  CHR$(8)  THEN  IF B$ = ""  THEN 320
  37. 280  IF A$ =  CHR$(8)  THEN  VTAB 3: HTAB 1: PRINT WO$;: INVERSE : VTAB 4 +I: HTAB 1: PRINT WO$;: NORMAL :B$ = "   ": GOSUB 380:B$ = "": GOTO 260
  38. 290  IF  LEN(B$) = LM  THEN  IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 260
  39. 300  IF A$ =  CHR$(13)  THEN 350
  40. 310 B$ = B$ +A$: GOSUB 380: VTAB 3: HTAB 10 - LEN(B$): INVERSE : PRINT B$;: NORMAL : GOTO 260
  41. 320 B$ = "   ": GOSUB 380: VTAB 3: HTAB 1: PRINT WO$;: VTAB 4 +I: HTAB 1: INVERSE : PRINT "         ";: NORMAL :I = I -1: IF I <1  THEN I = 1
  42. 330  GOSUB 380: VTAB 4 +I: HTAB 1: INVERSE : PRINT "         ";: NORMAL : VTAB 2: HTAB 18: PRINT "  ";: INVERSE : VTAB 2: HTAB 18: PRINT I;: NORMAL 
  43. 340 B$ = "": GOTO 250
  44. 350  IF  LEN(B$) = LM  THEN CL$(I) = B$:B$ = "": GOTO 370
  45. 360 CL$(I) = B$ + LEFT$(WO$,LM - LEN(B$))
  46. 370  VTAB 3: HTAB 1: PRINT WO$;: HTAB 1: VTAB 4 +I: INVERSE : PRINT CL$(I);: VTAB 4 +I: HTAB 10: PRINT "-";I;: NORMAL : NEXT I: NORMAL : GOTO 420
  47. 380  IF  LEN(B$) >2  THEN  VTAB 3: HTAB 20 +I: PRINT  MID$ (B$,3,1);
  48. 390  IF  LEN(B$) >1  THEN  VTAB 2: HTAB 20 +I: PRINT  MID$ (B$,2,1);
  49. 400  VTAB 1: HTAB 20 +I: PRINT  LEFT$(B$,1);: RETURN 
  50. 410  REM  --- ROW NAMES ---
  51. 420  VTAB 1: HTAB 1: PRINT WO$;WO$: PRINT WO$;WO$: PRINT WO$;WO$
  52. 430 B$ = "":A$ = "": VTAB 1: HTAB 1: INVERSE : PRINT "HOW MANY ROWS ?";: NORMAL :N = 0
  53. 440  GET A$:N = N +1: IF A$ =  CHR$(13)  THEN 470
  54. 450  IF A$ =  CHR$(8)  THEN N = 0: GOTO 420
  55. 460  PRINT A$;:B$ = B$ +A$: IF N <2  THEN 440
  56. 470 A =  VAL(B$): IF A <1  OR A >20  THEN 420
  57. 480  VTAB 1: HTAB 1: PRINT WO$;WO$: PRINT WO$;WO$: PRINT WO$:A$ = "":B$ = ""
  58. 490  VTAB 4: HTAB 11: PRINT "  ROW NAME";: FOR XX = 1 TO 20: VTAB 4 +XX: HTAB 9 +(XX <10): PRINT XX;"  ";: NEXT XX
  59. 500  VTAB 1: HTAB 1: INVERSE : PRINT "ENTER> ROW NAMES ": NORMAL :NR = A: FOR I = 1 TO NR
  60. 510 FX = 0
  61. 520  FOR J = 1 TO 10
  62. 530  VTAB 4 +I: HTAB 20: GET A$: IF A$ =  CHR$(13)  THEN RO$(I) = B$:B$ = "": GOTO 600
  63. 540  IF FX = 1  AND A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 530
  64. 550  IF A$ =  CHR$(8)  AND B$ = ""  THEN I = I -1: IF I <1  THEN I = 1
  65. 560  IF A$ =  CHR$(8)  AND B$ = ""  THEN RO$(I) = "": VTAB 4 +I: HTAB 11: PRINT WO$;: GOTO 520
  66. 570  IF A$ =  CHR$(8)  THEN B$ = "":RO$(I) = "": VTAB 4 +I: HTAB 11: PRINT WO$;: GOTO 520
  67. 580  VTAB 4 +I: HTAB 20 - LEN(B$):B$ = B$ +A$: PRINT B$;
  68. 590  NEXT J:FX = 1: GOTO 530
  69. 600  IF  LEN(RO$(I)) = 10  THEN  NEXT I: GOTO 630
  70. 610 RO$(I) =  LEFT$(WO$,(10 - LEN(RO$(I)))) +RO$(I): NEXT I
  71. 620  REM  - CH<CTRL-A>ANGE SOMETHING -
  72. 630  VTAB 1: HTAB 1: PRINT WO$;WO$: PRINT WO$;WO$: PRINT WO$;WO$
  73. 640  INVERSE : VTAB 1: HTAB 1: PRINT "DO YOU WISH TO      ": PRINT "CHANGE A ROW OR     ": PRINT "COLUMN NAME (Y/N) ?";: GET A$: PRINT A$;: IF A$ = "N"  THEN 710
  74. 650  IF A$ < >"Y"  THEN 640
  75. 660  VTAB 1: HTAB 1: PRINT "CHANGE 1)ROW NAME   ": PRINT "       2)COLUMN NAME": PRINT "       3)QUIT/ALL OK": PRINT WO$;WO$: VTAB 4: HTAB 1: PRINT "WHICH ?             ";: GET A$: PRINT A$;:A =  VAL(A$): IF A <1  OR A >3  THEN 660
  76. 670  NORMAL : IF A = 3  THEN 710
  77. 680 B$ = "": ON A GOSUB 1210,1090
  78. 690  VTAB 2: HTAB 1: PRINT WO$;WO$;: VTAB 4: HTAB 1: PRINT "MORE(Y/N)?";WO$;: VTAB 4: HTAB 11: GET A$: PRINT A$;: IF A$ = "Y"  THEN  INVERSE : GOTO 660
  79. 700  IF A$ < >"N"  THEN 690
  80. 710  VTAB 4: CALL  -868
  81. 720  VTAB 5: HTAB 1: INVERSE : PRINT "C=COMMENT ": PRINT "F=FORMULA ": PRINT "D=DATA    ": PRINT "<=BKSPACE ": NORMAL 
  82. 730  POKE 33,20: VTAB 1: HTAB 1: PRINT WO$;WO$;WO$;WO$;WO$;WO$;WO$;WO$;: POKE 33,40: INVERSE : FOR XX = 9 TO 24: HTAB 1: VTAB XX: PRINT WO$;: NEXT XX: NORMAL 
  83. 740  FOR I = 1 TO 20: VTAB 4 +I: HTAB 9 +(I <10): PRINT I;: NEXT I: VTAB 4: HTAB 21: PRINT "12345678901234567890";:
  84. 750  POKE 33,41: FOR N = 1 TO NR: FOR M = 1 TO NC: GOSUB 760: GOSUB 880: GOSUB 930: NEXT M: NEXT N: GOTO 960
  85. 760  INVERSE : GOSUB 880
  86. 770  IF FY = 0  THEN  GOSUB 930
  87. 780  NORMAL 
  88. 790  VTAB 4 +N: HTAB 20 +M: GET A$
  89. 800  IF LC(M) <4  THEN A$ = "C"
  90. 810  IF A$ = "C"  THEN  PRINT A$;:WK(N,M) = 1: RETURN 
  91. 820  IF A$ = "F"  THEN  PRINT A$;:WK(N,M) = 2: RETURN 
  92. 830  IF A$ = "D"  THEN  PRINT A$;:WK(N,M) = 3:ND = ND +1: RETURN 
  93. 840  IF A$ =  CHR$(8)  THEN  NORMAL : GOSUB 880: GOSUB 930:M = M -1: IF M = 0  THEN M = NC:N = N -1: IF N = 0  THEN  RETURN 
  94. 850  REM  BACKSP<CTRL-A>ACE
  95. 860  GOTO 760
  96. 870  REM  --- PRINT ROUTINE ---
  97. 880 AA =  LEN(CL$(M)): IF AA = 0  THEN C1$ =  CHR$(32):C2$ = C1$:C3$ = C1$: GOTO 920
  98. 890  IF AA = 1  THEN C1$ =  CHR$(32):C2$ = C1$:C3$ =  LEFT$(CL$(M),1): GOTO 920
  99. 900  IF AA = 2  THEN C1$ =  CHR$(32):C2$ =  LEFT$(CL$(M),1):C3$ =  RIGHT$(CL$(M),1): GOTO 920
  100. 910 C1$ =  LEFT$(CL$(M),1):C2$ =  MID$ (CL$(M),2,1):C3$ =  MID$ (CL$(M),3,1)
  101. 920  VTAB 1: HTAB 20 +M: PRINT C1$;: VTAB 2: HTAB 20 +M: PRINT C2$;: VTAB 3: HTAB 20 +M: PRINT C3$;: RETURN 
  102. 930  VTAB 4 +N: HTAB 11: PRINT RO$(N);
  103. 940  RETURN 
  104. 950  REM  --- IS THIS CORRECT ---
  105. 960 B$ = "": VTAB 1: HTAB 1: PRINT WO$;WO$: PRINT WO$;WO$
  106. 970  VTAB 1: HTAB 1: INVERSE : PRINT "IS THIS CORRECT ?";: NORMAL : GET A$: PRINT A$;: IF A$ = "Y"  THEN  GOTO 1340
  107. 980  IF A$ < >"N"  THEN 960
  108. 990  VTAB 1: HTAB 1: PRINT WO$;WO$
  109. 1000  VTAB 1: HTAB 1: INVERSE : PRINT "ENTER COLUMN NO.";: NORMAL : GET A$: IF A$ =  CHR$(13)  THEN 1000
  110. 1010  PRINT A$;:B$ = A$: GET A$: IF A$ =  CHR$(13)  THEN 1030
  111. 1020  PRINT A$;:B$ = B$ +A$
  112. 1030 M =  VAL(B$): IF M <1  OR M >NC  THEN 990
  113. 1040  VTAB 2: HTAB 1: INVERSE : PRINT "ENTER ROW NO.";::: NORMAL : GET A$: IF A$ =  CHR$(13)  THEN 1040
  114. 1050  PRINT A$;:B$ = A$: GET A$: IF A$ =  CHR$(13)  THEN 1070
  115. 1060  PRINT A$;:B$ = B$ +A$
  116. 1070 N =  VAL(B$): IF N <1  OR N >NR  THEN 1040
  117. 1080  GOSUB 760: GOSUB 880: NORMAL : VTAB 4 +N: HTAB 11: PRINT RO$(N);: GOTO 960
  118. 1090  VTAB 1: HTAB 1: POKE 33,20: PRINT WO$;WO$;WO$;WO$;WO$;WO$;WO$;WO$: VTAB 1: HTAB 1: INVERSE : INPUT "ENTER COLUMN NO.->";A$: NORMAL :M =  VAL(A$): IF M <1  OR M >NC  THEN 1090
  119. 1100  POKE 33,40: VTAB 2: HTAB 1: PRINT "OLD NAME =";CL$(M)
  120. 1110  VTAB 4: HTAB 1: INVERSE : PRINT "NEW NAME >";: NORMAL 
  121. 1120  VTAB 4: HTAB 11: GET A$: IF A$ =  CHR$(13)  THEN  VTAB 1: HTAB 1: PRINT WO$;WO$: GOTO 1180
  122. 1130  VTAB 4: HTAB 10: PRINT " " +B$ +A$
  123. 1140  IF A$ =  CHR$(8)  THEN B$ = "": VTAB 4: HTAB 11: PRINT WO$;: GOTO 1120
  124. 1150 B$ = B$ +A$: IF  LEN(B$) = LC(M)  THEN 1170
  125. 1160  GOTO 1120
  126. 1170  VTAB 4: HTAB 11: GET A$: IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 1170
  127. 1180  IF B$ = ""  THEN  RETURN 
  128. 1190  IF  LEN(B$) = LC(M)  THEN CL$(M) = B$: GOSUB 880::: INVERSE : VTAB 4 +M: HTAB 1: PRINT CL$(M);: NORMAL : RETURN 
  129. 1200 CL$(M) = B$ + LEFT$(WO$,LC(M) - LEN(B$)): GOSUB 880: INVERSE : VTAB 4 +M: HTAB 1: PRINT CL$(M);: NORMAL : RETURN 
  130. 1210  VTAB 1: HTAB 1: POKE 33,20: PRINT WO$;WO$;WO$;WO$;WO$;WO$;WO$;WO$;: VTAB 1: HTAB 1: INVERSE : INPUT "ENTER ROW NO. ->";A$: NORMAL :N =  VAL(A$): IF N <1  OR N >NR  THEN 1210
  131. 1220  POKE 33,40: VTAB 2: HTAB 1: PRINT "OLD NAME =";RO$(N)
  132. 1230  VTAB 4: HTAB 1: INVERSE : PRINT "NEW NAME >";: NORMAL 
  133. 1240  VTAB 4: HTAB 11: GET A$: IF A$ =  CHR$(13)  THEN  VTAB 1: HTAB 1: PRINT WO$;WO$: GOTO 1300
  134. 1250  VTAB 4: HTAB 10: PRINT " " +B$ +A$
  135. 1260  IF A$ =  CHR$(8)  THEN B$ = "": VTAB 4: HTAB 11: PRINT WO$;: GOTO 1240
  136. 1270 B$ = B$ +A$: IF  LEN(B$) = 10  THEN 1290
  137. 1280  GOTO 1240
  138. 1290  VTAB 4: HTAB 11: GET A$: IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 1290
  139. 1300  IF B$ = ""  THEN  RETURN 
  140. 1310  IF  LEN(B$) = 10  THEN RO$(N) = B$: GOSUB 930: RETURN 
  141. 1320 RO$(N) =  LEFT$(WO$,(10 - LEN(B$))) +B$: GOSUB 930: RETURN 
  142. 1330  REM  --- ENTER COMMENTS ---
  143. 1340  HOME : VTAB 10: PRINT "ONE MOMENT PLEASE.":X =  FRE(0): HOME 
  144. 1350  VTAB 4: HTAB 12: INVERSE : PRINT "ENTER COMMENTS": NORMAL 
  145. 1360  FOR N = 1 TO NR: FOR M = 1 TO NC: IF WK(N,M) = 1  THEN 1380
  146. 1370  NEXT M: NEXT N:B$ = "": GOTO 1520
  147. 1380  VTAB 11: HTAB 8: PRINT "   ": VTAB 11: HTAB 8: PRINT N: VTAB 9: HTAB 21: PRINT "   ": VTAB 9: HTAB 21: PRINT M
  148. 1390  VTAB 10: HTAB 21: PRINT WO$;: VTAB 10: HTAB 21: INVERSE : PRINT CL$(M);:XL = LC(M): VTAB 11: HTAB 10: PRINT WO$: VTAB 11: HTAB 20 - LEN(RO$(N)): PRINT RO$(N);: NORMAL 
  149. 1400 NN = N:MM = M +1: IF MM >NC  THEN MM = 0:NN = 0
  150. 1410  IF WK(NN,MM) = 1  THEN XL = LC(M) +1
  151. 1420  VTAB 11: HTAB 21 + LEN(B$): GET A$: IF A$ =  CHR$(13)  THEN 1470
  152. 1430  IF A$ =  CHR$(8)  THEN B$ = "": VTAB 11: HTAB 20: PRINT WO$;WO$;: GOTO 1420
  153. 1440  IF  LEN(B$) <1  AND A$ =  CHR$(36)  THEN  PRINT  CHR$(7);: GOTO 1420
  154. 1450  IF  LEN(B$) <XL  THEN B$ = B$ +A$: VTAB 11: HTAB 21: PRINT B$;: GOTO 1420
  155. 1460  PRINT  CHR$(7);: GOTO 1420
  156. 1470 CT$(N,M) = B$:B$ = "": VTAB 11: HTAB 21: PRINT WO$: IF  LEN(CT$(N,M)) > = LC(M)  THEN 1490
  157. 1480 CT$(N,M) = CT$(N,M) + LEFT$(WO$,LC(M) - LEN(CT$(N,M)))
  158. 1490  IF FY = 1  THEN  RETURN 
  159. 1500  GOTO 1370
  160. 1510  REM  --- STORE IN MEMORY ---
  161. 1520  TEXT : HOME : VTAB 8: HTAB 8: INVERSE : PRINT "     COMPILING DATA     ": VTAB 9: HTAB 8: PRINT "MAY TAKE ";: FLASH : PRINT "SEVERAL";: INVERSE : PRINT " MINUTES": NORMAL 
  162. 1530  FOR N = 1 TO NR:TS$(N) =  CHR$(58): FOR M = 1 TO NC: IF WK(N,M) = 2  THEN TS$(N) = TS$(N) +Q$(LC(M)) + CHR$(58): GOTO 1580
  163. 1540  IF WK(N,M) = 3  THEN TS$(N) = TS$(N) +D$(LC(M)) + CHR$(58): GOTO 1580
  164. 1550 NN = N:MM = M +1: IF MM >NC  THEN MM = 0:NN = 0
  165. 1560  IF  LEN(CT$(N,M)) >LC(M)  AND WK(NN,MM) = 1  THEN TS$(N) = TS$(N) +CT$(N,M): GOTO 1580
  166. 1570 TS$(N) = TS$(N) +CT$(N,M) + CHR$(58)
  167. 1580  NEXT M: NEXT N:TS$(0) =  CHR$(58): FOR M = 1 TO NC:TS$(0) = TS$(0) +CL$(M) + CHR$(58): NEXT M
  168. 1590 U =  LEN(TS$(1)): POKE 32742,U +1: FOR I = 0 TO NR: POKE 5,I +1:G$ = " " +TS$(I): CALL 32688:TS$(I) = "": NEXT 
  169. 1600  REM  --- DISPLAY ---
  170. 1610  TEXT : HOME : INVERSE : VTAB 4: HTAB 11: PRINT WO$;WO$;WO$;: NORMAL : PRINT : POKE 3,1: CALL 32512: FOR I = 1 TO NR
  171. 1620  VTAB 4 +I: HTAB 1: PRINT RO$(I);: NEXT I: NORMAL :B$ = "Z"
  172. 1630  VTAB 1: HTAB 1: INVERSE : PRINT "<- OR < SHIFT FILE > OR ->   S = SAVE   ";: PRINT "       (Q =RESTART)          C = CHANGE ";: NORMAL 
  173. 1640  IF B$ < >"Z"  THEN 1610
  174. 1650  VTAB 4: HTAB 11: GET A$: IF A$ =  CHR$(8)  THEN Y = Y +10
  175. 1660  IF A$ =  CHR$(21)  THEN Y = Y -10
  176. 1670  IF A$ =  CHR$(60)  OR A$ =  CHR$(44)  THEN Y = Y +1
  177. 1680  IF A$ =  CHR$(62)  OR A$ =  CHR$(46)  THEN Y = Y -1
  178. 1690  IF A$ =  CHR$(83)  THEN 1750
  179. 1700  IF A$ =  CHR$(67)  THEN 1770
  180. 1710  IF A$ =  CHR$(81)  THEN  PRINT : HOME : VTAB 12::: INVERSE : PRINT "TO ERASE CURRENT FORMAT AND RESTART     ";: PRINT "TYPE 'E' ";: NORMAL : GET B$: IF B$ = "E"  THEN  PRINT B$: PRINT  CHR$(4);"RUN MICRO-CALC"
  181. 1720  IF Y >255  THEN Y = Y -255
  182. 1730  IF Y <0  THEN Y = 255 +Y
  183. 1740  POKE 3,Y: CALL 32512: GOTO 1640
  184. 1750  VTAB 1: HTAB 1: CALL  -868: VTAB 2: CALL  -868: VTAB 1: HTAB 9: INVERSE : PRINT "IS ALL INFORMATION CORRECT ?";: GET A$: NORMAL : PRINT A$;: IF A$ = "Y"  THEN  HOME : GOTO 2260
  185. 1760  IF A$ < >"N"  THEN  PRINT  CHR$(7);: GOTO 1750
  186. 1770  TEXT : HOME :B$ = ""
  187. 1780  VTAB 1: HTAB 1: INVERSE : PRINT "         ENTER NUMBER TO CHANGE         ";: PRINT "1)COLUMN NAME   2)ROW NAME   3)COMMENTS ";: PRINT "4)ALL CORRECT   5)VIEW FILE             ";: NORMAL 
  188. 1790  VTAB 4: HTAB 1: INVERSE : PRINT "(CHANGES WILL NOT APPEAR ON DISPLAY YET)";: NORMAL : VTAB 1: HTAB 40: GET A$:A =  VAL(A$): IF A <1  OR A >5  THEN 1790
  189. 1800  PRINT A$;
  190. 1810  IF A = 4  THEN FX = 0: GOTO 1520
  191. 1820 FX = 1: ON A GOSUB 1840,1960,2080,2530,2530
  192. 1830  GOTO 1770
  193. 1840  TEXT : HOME : VTAB 1: HTAB 1: INVERSE : INPUT "ENTER COLUMN NUMBER ->";A$: NORMAL :M =  VAL(A$): IF M <1  OR M >NC  THEN 1780
  194. 1850  VTAB 2: HTAB 1: PRINT CL$(M)
  195. 1860  VTAB 4: HTAB 1: INVERSE : PRINT "ENTER COLUMN NAME ->";: NORMAL 
  196. 1870  VTAB 4: HTAB 21: GET A$: IF A$ =  CHR$(13)  THEN 1930
  197. 1880  VTAB 4: HTAB 21: PRINT B$ +A$
  198. 1890  IF A$ =  CHR$(8)  THEN B$ = "": GOTO 1870
  199. 1900 B$ = B$ +A$: IF  LEN(B$) = LC(M)  THEN 1920
  200. 1910  GOTO 1870
  201. 1920  VTAB 4: HTAB 21: GET A$: IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 1920
  202. 1930  IF B$ = ""  THEN  RETURN 
  203. 1940  IF  LEN(B$) = LC(M)  THEN CL$(M) = B$:B$ = "": RETURN 
  204. 1950 CL$(M) = B$ + LEFT$(WO$,LC(M) - LEN(B$)): RETURN 
  205. 1960  TEXT : HOME : VTAB 1: HTAB 1: INVERSE : INPUT "ENTER ROW NUMBER ->";A$: NORMAL :N =  VAL(A$): IF N <1  OR N >NR  THEN 1780
  206. 1970  VTAB 2: HTAB 1: PRINT RO$(N)
  207. 1980  VTAB 4: HTAB 1: INVERSE : PRINT "ENTER ROW NAME ->";: NORMAL 
  208. 1990  VTAB 4: HTAB 18: GET A$: IF A$ =  CHR$(13)  THEN 2050
  209. 2000  VTAB 4: HTAB 18: PRINT B$ +A$
  210. 2010  IF A$ =  CHR$(8)  THEN B$ = "": GOTO 1990
  211. 2020 B$ = B$ +A$: IF  LEN(B$) = 10  THEN 2040
  212. 2030  GOTO 1990
  213. 2040  VTAB 4: HTAB 21: GET A$: IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 2040
  214. 2050  IF B$ = ""  THEN  RETURN 
  215. 2060  IF  LEN(B$) = 10  THEN RO$(N) = B$:B$ = "": RETURN 
  216. 2070 RO$(N) =  LEFT$(WO$,(10 - LEN(B$))) +B$: RETURN 
  217. 2080  TEXT : HOME 
  218. 2090  VTAB 1: HTAB 1: INVERSE : INPUT "ENTER ROW NUMBER ->";A$:N =  VAL(A$): IF N <1  OR N >NR  THEN 1780
  219. 2100  VTAB 2: HTAB 1: INPUT "ENTER COLUMN NUMBER ->";A$:M =  VAL(A$): IF M <1  OR M >NC  THEN 1780
  220. 2110  IF WK(N,M) < >1  THEN  RETURN 
  221. 2120  VTAB 10: HTAB 1: PRINT "OLD COMMENT ->";: NORMAL : PRINT CT$(N,M): INVERSE 
  222. 2130  VTAB 5: HTAB 1: PRINT RO$(N);: VTAB 4: HTAB 12: PRINT CL$(M);: NORMAL :B$ = ""
  223. 2140 NN = N:MM = M +1: IF MM >NC  THEN MM = 0:NN = 0
  224. 2150 LX = LC(M): IF WK(NN,MM) = 1  THEN LX = LX +1
  225. 2160  VTAB 5: HTAB 12 + LEN(B$): GET A$
  226. 2170  VTAB 5: HTAB 12: PRINT B$ +A$
  227. 2180  IF A$ =  CHR$(13)  THEN 2240
  228. 2190  IF A$ =  CHR$(8)  THEN B$ = "": VTAB 5: HTAB 12: PRINT WO$;: GOTO 2160
  229. 2200 B$ = B$ +A$: IF  LEN(B$) = LX  THEN  PRINT  CHR$(7);: GOTO 2220
  230. 2210  GOTO 2160
  231. 2220  VTAB 5: HTAB 13 +LX: GET A$: IF A$ =  CHR$(8)  THEN B$ = "": VTAB 5: HTAB 13: PRINT WO$;WO$;: GOTO 2160
  232. 2230  IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);: GOTO 2220
  233. 2240  IF  LEN(B$) <LX  THEN CT$(N,M) = B$ + LEFT$(WO$,LX - LEN(B$)): RETURN 
  234. 2250 CT$(N,M) = B$: RETURN 
  235. 2260  HOME :B$ = "": VTAB 1: HTAB 1: INVERSE : PRINT "           ENTER NAME OF FILE           ";: NORMAL : PRINT "->";
  236. 2270  VTAB 2: HTAB 4: PRINT  CHR$(60) + CHR$(45)
  237. 2280  VTAB 1: HTAB 1: GET A$
  238. 2290  IF A$ =  CHR$(13)  THEN 2360
  239. 2300  IF A$ =  CHR$(8)  THEN B$ = "": GOTO 2260
  240. 2310  VTAB 2: HTAB 3: PRINT B$ +A$ + CHR$(60) + CHR$(45)
  241. 2320 B$ = B$ +A$: IF  LEN(B$) >18  THEN  PRINT  CHR$(7);: GOTO 2340
  242. 2330  GOTO 2280
  243. 2340  PRINT : PRINT "USE 18 CHARACTERS OR LESS !": VTAB 1: HTAB 1: GET A$: IF A$ =  CHR$(8)  THEN B$ = "": GOTO 2260
  244. 2350  IF A$ < > CHR$(13)  THEN  PRINT  CHR$(7);:B$ = "": GOTO 2260
  245. 2360  IF B$ = ""  THEN 2280
  246. 2370  VTAB 6: PRINT "PLEASE INSERT DISK THAT YOU ARE SAVING": INVERSE : PRINT B$;: NORMAL : PRINT " ONTO": PRINT : INVERSE : VTAB 9: HTAB 8: INPUT "PRESS RETURN WHEN READY";A$: NORMAL 
  247. 2380  PRINT : PRINT  CHR$(4);"BSAVE DISPLAYER"; CHR$(44);"A$7F00"; CHR$(44);"L$ED"
  248. 2390 NM$ = B$: PRINT A$;: PRINT : PRINT  CHR$(4);"BSAVE F.";NM$; CHR$(44);"A32768"; CHR$(44);"L5376"
  249. 2400  HOME : VTAB 6: HTAB 8: PRINT "PLEASE REINSERT DISKETTE": VTAB 7: HTAB 8: PRINT "CONTAINING  ";: INVERSE : PRINT "MICRO - CALC"
  250. 2410  FOR I = 1 TO 4: PRINT  CHR$(7);: NEXT I
  251. 2420  INVERSE : VTAB 9: HTAB 8: INPUT "PRESS RETURN WHEN READY";A$: NORMAL 
  252. 2430  TEXT : HOME : VTAB 12: HTAB 15: INVERSE : PRINT "SAVING DATA": NORMAL 
  253. 2440  PRINT : PRINT  CHR$(4);"OPEN TEMP-FILE"
  254. 2450  PRINT  CHR$(4);"WRITE TEMP-FILE"
  255. 2460  PRINT NR: PRINT NC: PRINT NM$
  256. 2470  FOR I = 1 TO NC: PRINT LC(I): NEXT I
  257. 2480  FOR I = 1 TO NR: PRINT RO$(I): NEXT I
  258. 2490  FOR I = 1 TO NC: PRINT CL$(I): NEXT I
  259. 2500  FOR N = 1 TO NR: FOR M = 1 TO NC: PRINT WK(N,M): NEXT M: NEXT N
  260. 2510  PRINT  CHR$(4);"CLOSE TEMP-FILE"
  261. 2520  PRINT  CHR$(4);"RUN MICRO-CALC.II"
  262. 2530  TEXT : HOME : INVERSE : VTAB 4: HTAB 11: PRINT WO$;WO$;WO$;: NORMAL : PRINT : POKE 3,1: CALL 32512: FOR I = 1 TO NR
  263. 2540  VTAB 4 +I: HTAB 1: PRINT RO$(I);: NEXT I: NORMAL 
  264. 2550  VTAB 1: HTAB 1: INVERSE : PRINT "<- OR < SHIFT FILE > OR ->   R = RESUME ";: NORMAL 
  265. 2560  VTAB 4: HTAB 11: GET A$
  266. 2570  IF A$ =  CHR$(8)  THEN Y = Y +10
  267. 2580  IF A$ =  CHR$(21)  THEN Y = Y -10
  268. 2590  IF A$ =  CHR$(60)  OR A$ =  CHR$(44)  THEN Y = Y +1
  269. 2600  IF A$ =  CHR$(62)  OR A$ =  CHR$(46)  THEN Y = Y -1
  270. 2610  IF A$ =  CHR$(82)  THEN LZ = 1:LZ$ = B$: RETURN 
  271. 2620  IF Y >255  THEN Y = Y -255
  272. 2630  IF Y <0  THEN Y = 255 +Y
  273. 2640  POKE 3,Y: CALL 32512: GOTO 2560