home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib34b.dsk / BILL.KEEPER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  19KB  |  288 lines

  1. 10  REM **********************
  2. 20  REM *    BILL  KEEPER    *
  3. 30  REM *  BY HAROLD MURZYN  *
  4. 40  REM * COPYRIGHT (C) 1988 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80  TEXT : HOME : VTAB 5: HTAB 10: PRINT "**********************": HTAB 10: PRINT "*    BILL  KEEPER    *": HTAB 10: PRINT "*  BY HAROLD MURZYN  *": HTAB 10: PRINT "* COPYRIGHT (C) 1988 *": REM  22 *
  9. 90  HTAB 10: PRINT "* BY MICROSPARC, INC *": HTAB 10: PRINT "* CONCORD, MA  01742 *": HTAB 10: PRINT "**********************": SPEED= 255
  10. 100  REM *** INITIALIZATION ***
  11. 110 SL = 6:DR = 1:PS = 1:DF$ = "BILL.DATA.1988"
  12. 120 LP$ =  CHR$(9) +"80N": REM  PRINTER INIT STRING
  13. 130 SP$ =  CHR$(9) +"80N": REM  PRINTER DE-INIT STRING
  14. 140 D$ =  CHR$(4)
  15. 150  DIM BL$(3),NA$(40),NU$(40,12),T$(19),MN$(12)
  16. 160  FOR X = 1 TO 39:BL$(1) = BL$(1) +" ":BL$(2) = BL$(2) +"=":BL$(3) = BL$(3) +"-": NEXT :I$ = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC": FOR X = 1 TO 12:MN$(X) =  MID$ (I$,(X *3) -2,3): NEXT 
  17. 170  FOR X = 1 TO 15:MN$(0) = MN$(0) +" ": NEXT : FOR X = 1 TO 19: READ T$(X): NEXT :T8 = 3
  18. 180  DATA WORK WITH DATA,CHANGE DISK INFO.,LOAD DATA FILE,SAVE DATA FILE,PRINT THE DATA,QUIT PROGRAM,DISK SLOT #,DISK DRIVE #,DATA FILE NAME,CATALOG DISK,ENTER/VIEW DATA,ENTER/CHANGE NAMES,VIEW DATA GRAPHS
  19. 190  DATA  VIEW TOTALS FOR ANY MONTH,VIEW YEAR TO DATE TOTALS,ALL CATEGORIES,ONE CATEGORY,TOTALS FOR A MONTH,TOTALS YEAR TO DATE
  20. 200  ONERR  GOTO 2780
  21. 210  HOME : PRINT  CHR$(27) + CHR$(17): PRINT D$;"PR#0": GOTO 730
  22. 220  REM *** SUBROUTINES ***
  23. 230  REM *** CLEAR TOP 3 LINES ***
  24. 240  VTAB 1: HTAB 1: PRINT BL$(1),BL$(1),BL$(1): RETURN 
  25. 250  REM *** WAIT FOR KEY PRESS ***
  26. 260  IF  PEEK(49152) <128  THEN 260
  27. 270  RETURN 
  28. 280  REM *** RETURN ASC OF KEY PRESSED ***
  29. 290  GOSUB 260:K =  PEEK(49152) -128: RETURN 
  30. 300  POKE  -16368,0: GOSUB 290: POKE  -16368,0: RETURN 
  31. 310  REM *** ESCAPE TO MAIN MENU ***
  32. 320  REM *** Y OR N TO MAIN MENU ***
  33. 330  GOSUB 300: IF K = 27  OR T1 = 8  AND K = 78  OR K = 110  THEN T1 = 0: POP : GOTO 730
  34. 340  IF T1 = 8  AND K = 89  OR K = 121  THEN  RETURN 
  35. 350  GOTO 330
  36. 370  REM *** TURN ON/OFF PRINTER ***
  37. 380  PRINT D$;"PR#";PS: PRINT LP$: RETURN 
  38. 390  PRINT SP$: PRINT D$;"PR#0": RETURN 
  39. 400  REM *** CONVERT STRING TO $ 0.00 FORMAT ***
  40. 410 T = 0: FOR Z = 1 TO  LEN(I$): IF  ASC( MID$ (I$,Z,1)) <46  OR  ASC( MID$ (I$,Z,1)) >57  THEN 500
  41. 420  IF  ASC( MID$ (I$,Z,1)) = 46  THEN T = T +1: IF T >1  THEN 500
  42. 430  IF  ASC( MID$ (I$,Z,1)) = 47  THEN 500
  43. 440  NEXT :T =  VAL(I$):T =  INT(T *100 +.5)/100:I$ =  STR$(T):T = 0: FOR Z = 1 TO  LEN(I$): IF T < >0  AND  ASC( MID$ (I$,Z,1)) = 46  THEN 500
  44. 450  IF  ASC( MID$ (I$,Z,1)) = 46  THEN T = Z
  45. 460  NEXT : IF T = 0  THEN I$ = I$ +".00"
  46. 470  IF T =  LEN(I$)  THEN I$ = I$ +"00"
  47. 480  IF T =  LEN(I$) -1  THEN I$ = I$ +"0"
  48. 490  RETURN 
  49. 500 I$ = "": RETURN 
  50. 510  REM *** MENU SCREENS ***
  51. 520  IF T5 < >0  THEN  NORMAL : RETURN 
  52. 530  HTAB 13: VTAB (X *2) -T1: PRINT T$(X +T2): NORMAL : RETURN 
  53. 540  VTAB 16: HTAB 1: IF T1 < >8  THEN  VTAB 18
  54. 550  INVERSE : PRINT "<- OR ->";: NORMAL : PRINT " TO CHANGE";: INVERSE : HTAB 24: PRINT "<RETURN>";: NORMAL : PRINT " ACCEPTS": VTAB 20: PRINT BL$(3): HTAB 8: PRINT "CURRENT DISK INFORMATION": PRINT BL$(3): IF T1 < >8  THEN 570
  55. 560  VTAB 18: HTAB 10: INVERSE : PRINT "<ESCAPE>";: NORMAL : PRINT " FOR MAIN MENU"
  56. 570  VTAB 23: PRINT "DRIVE-S";SL;",D";DR;: HTAB 14: PRINT "DATA FILE--";DF$; SPC( 15 - LEN(DF$)): RETURN 
  57. 580  INVERSE : GOSUB 520
  58. 590  GOSUB 300: IF K = 8  OR K = 11  THEN 670
  59. 600  IF K = 10  OR K = 21  THEN 690
  60. 610  IF T3 = 1  AND T4 = 7  THEN 640
  61. 620  IF T5 >47  AND K = 27  THEN  POP :T5 = 0: GOTO 790
  62. 630  IF K = 27  THEN  POP : GOTO 730
  63. 640  IF T5 < >0  AND K >T5  AND K <T6  THEN X = K -48: GOTO 710
  64. 650  IF K = 13  THEN  RETURN 
  65. 660  GOTO 590
  66. 670  GOSUB 520:X = X -1: IF X <T3  THEN X = T4
  67. 680  GOTO 700
  68. 690  GOSUB 520:X = X +1: IF X >T4  THEN X = T3
  69. 700  IF T5 = 0  THEN 580
  70. 710  VTAB 5: HTAB T7: INVERSE : PRINT X: NORMAL : GOTO 590
  71. 720  REM *** MAIN MENU ***
  72. 730  TEXT : HOME : HTAB 10: PRINT "BILL KEEPER--MAIN MENU": HTAB 10: PRINT  LEFT$(BL$(2),22):T = 1:T1 =  -2:T2 = 0:T3 = 1:T4 = 6:T5 = 0: FOR X = 1 TO 6: GOSUB 520: NEXT : GOSUB 540:X = T8: GOSUB 580
  73. 740 T8 = X: ON X GOTO 760,780,2640,2640,810,2750
  74. 750  REM *** WORKING MENU ***
  75. 760  POKE 35,19: HOME : HTAB 14: PRINT "WORKING MENU":T1 = 8: TEXT : GOSUB 540: POKE 34,2: POKE 35,15: HOME :T1 =  -2:T2 = 10:T3 = 1:T4 = 5:T5 = 0: FOR X = 1 TO 5: GOSUB 520: NEXT :X = 1: GOSUB 580: TEXT : ON X GOTO 1090,1090,1090,1440,1550
  76. 770  REM *** CHANGE INFO MENU ***
  77. 780  POKE 35,19: HOME : HTAB 9: PRINT "CHANGE DISK INFO. MENU":T1 = 8
  78. 790  TEXT : GOSUB 540: POKE 34,2: POKE 35,15: HOME :T1 =  -3:T2 = 6:T3 = 1:T4 = 4:T5 = 0: FOR X = 1 TO 4: GOSUB 520: NEXT :X = 1: GOSUB 580: ON X GOTO 2390,2400,2410,2590
  79. 800  REM *** PRINT DATA MENU ***
  80. 810  POKE 35,19: HOME : HTAB 13: PRINT "PRINT DATA MENU":T1 = 8: TEXT : GOSUB 540: POKE 34,2: POKE 35,15: HOME :T1 =  -3:T2 = 15:T3 = 1:T4 = 4:T5 = 0: FOR X = 1 TO 4: GOSUB 520: NEXT :X = 1: GOSUB 580
  81. 820  TEXT : HOME : VTAB 10: HTAB 3: PRINT "TURN ON PRINTER THEN PRESS ";: INVERSE : PRINT "<RETURN>";: NORMAL : VTAB 13: HTAB 3: PRINT "OR PRESS ";: INVERSE : PRINT "<ESCAPE>";: NORMAL : PRINT " TO RETURN TO MENU"
  82. 830  GOSUB 290: IF K = 27  THEN 810
  83. 840  IF K < >13  THEN 830
  84. 850  ON X GOTO 870,1020,1050,1070
  85. 860  REM *** PRINT ALL FILES ***
  86. 870 X = 1: HOME : VTAB 10: HTAB 13: PRINT "PRINTING DATA": GOSUB 380
  87. 880  IF X >40  THEN 1000
  88. 890  IF  LEN(NA$(X)) = 0  OR NA$(X) = MN$(0)  THEN X = X +1: GOTO 880
  89. 900 Y = X +1
  90. 910  IF Y >40  THEN 930
  91. 920  IF  LEN(NA$(Y)) = 0  THEN Y = Y +1: GOTO 910
  92. 930  HTAB 3: PRINT NA$(X);: IF Y <41  THEN  HTAB 22: PRINT NA$(Y)
  93. 940  PRINT : FOR Z = 1 TO 12: HTAB 6: PRINT MN$(Z);: HTAB 18 - LEN(NU$(X,Z)): PRINT NU$(X,Z);: IF Y <41  THEN  HTAB 25: PRINT MN$(Z);: HTAB 37 - LEN(NU$(Y,Z)): PRINT NU$(Y,Z)
  94. 950  IF Y >40  THEN  PRINT 
  95. 960  NEXT : PRINT : HTAB 2: PRINT  LEFT$(BL$(3),16);: IF Y <41  THEN  HTAB 21: PRINT  LEFT$(BL$(3),16)
  96. 970  IF Y >40  THEN  PRINT 
  97. 980  HTAB 2: PRINT "TOTAL";: HTAB 18 - LEN(NU$(X,0)): PRINT NU$(X,0);: IF Y <41  THEN  HTAB 21: PRINT "TOTAL";: HTAB 37 - LEN(NU$(Y,0)): PRINT NU$(Y,0)
  98. 990  PRINT : PRINT :X = Y +1: GOTO 880
  99. 1000  GOSUB 390: GOTO 810
  100. 1010  REM *** SINGLE PRINTOUT ***
  101. 1020 X = 6: GOTO 1090
  102. 1030  HOME : GOSUB 380:CY = 1: GOSUB 1360: GOSUB 390: GOTO 1020
  103. 1040  REM *** PRINT ANY MONTH ***
  104. 1050 CY = 1: GOSUB 1440: HOME : GOSUB 380: HTAB 11: PRINT "TOTALS FOR ";MN$(X): GOSUB 1570:CY = 0: GOSUB 390: GOTO 1050
  105. 1060  REM *** PRINT YR TO DATE ***
  106. 1070  HOME : GOSUB 380:CY = 1: HTAB 11: PRINT "YEAR TO DATE TOTALS":Z = 0: GOSUB 1570:CY = 0: GOSUB 390: GOTO 810
  107. 1080  REM *** DATA MENU ***
  108. 1090 T1 = 0: HOME : FOR Y = 1 TO 20: IF PG  THEN T1 = 20
  109. 1100  HTAB 3: IF Y >10  THEN  HTAB 23: VTAB ((Y -10) *2) +2: GOTO 1120
  110. 1110  VTAB (Y *2) +2
  111. 1120  INVERSE : PRINT  CHR$(Y +64);: NORMAL : PRINT " ";NA$(Y +T1): NEXT : IF FL  THEN FL = 0: GOTO 1180
  112. 1130  GOSUB 240: VTAB 1: INVERSE : PRINT "<SPACE>";: HTAB 9: PRINT "<LETTER KEYS A THRU T>";: HTAB 32: PRINT "<ESCAPE>": NORMAL : PRINT "FOR PG";: HTAB 34: PRINT "MENU": VTAB 3: HTAB 1: PRINT BL$(2)
  113. 1140  VTAB 2: HTAB 9: IF X = 2  THEN  PRINT " NAME TO ENTER/CHANGE": GOTO 1180
  114. 1150  PRINT "CATEGORY TO ";: IF X = 1  THEN  PRINT "ENTER DATA"
  115. 1160  IF X = 3  THEN  PRINT "GRAPH DATA"
  116. 1170  IF X = 6  THEN  PRINT "PRINT DATA"
  117. 1180  POKE 34,3: INVERSE : VTAB 2: HTAB 7: IF   NOT PG  THEN  PRINT "2": GOTO 1200
  118. 1190  PRINT "1"
  119. 1200  NORMAL : GOSUB 300: IF K = 27  AND X = 6  THEN CY = 0: TEXT :PG = 0: GOTO 810
  120. 1210  IF K = 27  THEN  TEXT : HOME :PG = 0: GOTO 760
  121. 1220  IF K < >32  THEN 1260
  122. 1230  IF PG  THEN PG = 0: GOTO 1250
  123. 1240 PG = 1
  124. 1250 FL = 1: POKE 34,3: GOTO 1090
  125. 1260  IF K <65  OR K >116  THEN 1180
  126. 1270  IF K >84  AND K <97  THEN 1180
  127. 1280  POKE 34,0: IF FL  THEN FL = 0
  128. 1290 L = K -64: IF K >84  THEN L = L -32
  129. 1300  IF PG  THEN L = L +20
  130. 1310  IF X = 2  THEN 1330
  131. 1320  IF  LEN(NA$(L)) = 0  OR NA$(L) = MN$(0)  THEN 1180
  132. 1330  ON X GOTO 1350,2150,2030,2780,2780,1030,2030
  133. 1340  REM *** SINGLE LISTING ***
  134. 1350  HOME : INVERSE : HTAB 5: PRINT "<- OR -> ARROW KEYS";: HTAB 32: PRINT "<ESCAPE>": NORMAL : PRINT "TO SELECT MONTH TO ENTER DATA";: HTAB 32: PRINT "FOR MENU": PRINT BL$(3)
  135. 1360 TL = 0: VTAB 5: HTAB 11: PRINT NA$(L): IF CY  THEN  PRINT 
  136. 1370  FOR Y = 1 TO 12: HTAB 14: VTAB Y +6: INVERSE : PRINT MN$(Y);: NORMAL :TL = TL + VAL(NU$(L,Y)): HTAB 26 - LEN(NU$(L,Y)): PRINT NU$(L,Y)
  137. 1380  NEXT : VTAB 19: HTAB 10: PRINT  LEFT$(BL$(3),16): INVERSE : HTAB 10: PRINT "TOTAL";: NORMAL :I$ =  STR$(TL): GOSUB 410: HTAB 26 - LEN(I$): PRINT I$:NU$(L,0) = I$: IF CY  THEN  RETURN 
  138. 1390  GOSUB 300: IF K = 8  OR K = 11  THEN T1 = 18: GOTO 1740
  139. 1400  IF K = 10  OR K = 21  THEN T1 = 7: GOTO 1740
  140. 1410  IF K = 27  THEN 1090
  141. 1420  GOTO 1390
  142. 1430  REM *** TOTALS ANY MONTH ***
  143. 1440  TEXT : HOME : HTAB 9: PRINT "TOTALS FOR WHAT MONTH ?": FOR X = 1 TO 12: GOSUB 1510: NEXT :X = 1:T1 = 8: GOSUB 540
  144. 1450  INVERSE : GOSUB 1510: NORMAL : GOSUB 300: IF K = 8  OR K = 11  THEN  GOSUB 1510:X = X -1: IF X <1  THEN X = 12
  145. 1460  IF K = 10  OR K = 21  THEN  GOSUB 1510:X = X +1: IF X >12  THEN X = 1
  146. 1470  IF K = 13  THEN Z = X: GOTO 1520
  147. 1480  IF K < >27  THEN 1450
  148. 1490  IF CY  THEN CY = 0: GOTO 810
  149. 1500  GOTO 760
  150. 1510  HTAB 18: VTAB (X +2): PRINT MN$(X): RETURN 
  151. 1520  IF CY  THEN  RETURN 
  152. 1530  HOME : VTAB 2: HTAB 14: PRINT "TOTALS FOR ";MN$(X): GOTO 1560
  153. 1540  REM *** YR TO DATE TOTALS ***
  154. 1550 Z = 0: HOME : VTAB 2: HTAB 11: PRINT T$(19)
  155. 1560  VTAB 1: HTAB 1: INVERSE : PRINT "<RETURN>";: HTAB 32: PRINT "<ESCAPE>": NORMAL : PRINT "CONTINUE";: HTAB 34: PRINT "MENU": PRINT BL$(2): POKE 34,4: NORMAL :Y = 5: VTAB Y
  156. 1570 TL = 0: FOR X = 1 TO 40: IF NA$(X) = ""  OR NA$(X) = MN$(0)  THEN 1650
  157. 1580  IF CY  OR Y <23  THEN 1640
  158. 1590  IF Y = 23  OR Y = 41  THEN 1610
  159. 1600  GOTO 1640
  160. 1610  GOSUB 300: IF K = 27  THEN CY = 0: GOTO 1720
  161. 1620  IF K < >13  THEN 1610
  162. 1630  HOME 
  163. 1640  HTAB 7: PRINT NA$(X);: HTAB 33 - LEN(NU$(X,Z)): PRINT NU$(X,Z):TL = TL + VAL(NU$(X,Z)):Y = Y +1
  164. 1650  NEXT :I$ =  STR$(TL): GOSUB 410: IF I$ = "0"  THEN I$ = "0.00"
  165. 1660  HTAB 7: PRINT  LEFT$(BL$(3),26): HTAB 7: PRINT "TOTAL";: HTAB 33 - LEN(I$): PRINT I$: IF CY  THEN  RETURN 
  166. 1670  GOSUB 1690
  167. 1680  GOSUB 240: VTAB 1: HTAB 9: PRINT "PRESS ";: INVERSE : PRINT "<RETURN>";: NORMAL : PRINT " FOR MENU": PRINT BL$(2)
  168. 1690  GOSUB 300: IF X = 41  AND K = 13  THEN X = 0: GOTO 1680
  169. 1700  IF X = 0  AND K = 13  THEN 1720
  170. 1710  IF K < >27  THEN 1690
  171. 1720  TEXT : HOME : GOTO 760
  172. 1730  REM *** ENTER DATA ***
  173. 1740  GOSUB 240: VTAB 1: HTAB 1: INVERSE : PRINT "<- OR -> KEY";: HTAB 19: PRINT "<RETURN>";: HTAB 32: PRINT "<ESCAPE>": NORMAL : VTAB 2: HTAB 1: PRINT "SELECT MONTH";: HTAB 20: PRINT "ACCEPT";: HTAB 34: PRINT "MENU": PRINT BL$(3)
  174. 1750  FOR Y = 1 TO 12: HTAB 14: VTAB Y +6: PRINT MN$(Y): NEXT : VTAB T1: HTAB 10: PRINT "--->":VT = T1
  175. 1760  GOSUB 300: IF K = 8  OR K = 10  OR K = 11  OR K = 21  THEN 1800
  176. 1770  IF K = 13  THEN 1830
  177. 1780  IF K = 27  THEN 1350
  178. 1790  GOTO 1760
  179. 1800  VTAB VT: HTAB 10: PRINT  SPC( 4): IF K = 8  OR K = 11  THEN VT = VT -1: IF VT = 6  THEN VT = 18
  180. 1810  IF K = 10  OR K = 21  THEN VT = VT +1: IF VT = 19  THEN VT = 7
  181. 1820  VTAB VT: HTAB 10: PRINT "--->": GOTO 1760
  182. 1830  HOME : VTAB 5: HTAB 15: PRINT NA$(L): VTAB 10: PRINT "THE CURRENT AMOUNT FOR ";MN$(VT -6);".";"IS  ";: PRINT NU$(L,VT -6)
  183. 1840  VTAB 15: HTAB 8: PRINT "PLEASE ENTER NEW AMOUNT": PRINT : HTAB 6: PRINT "OR PRESS ";: INVERSE : PRINT "<RETURN>";: NORMAL : PRINT " TO ACCEPT"
  184. 1850  GOSUB 290: IF K = 13  OR K = 27  THEN  HOME : GOTO 1350
  185. 1860  IF K <46  OR K >57  OR K = 47  THEN 1850
  186. 1870 SA = 1: VTAB 15: PRINT BL$(1): PRINT : PRINT BL$(1):I$ = "": FOR Y = 1 TO 8
  187. 1880  GOSUB 290: IF K = 46  OR K >47  AND K <58  THEN 1960
  188. 1890  IF K = 13  THEN 1970
  189. 1900  IF K = 27  THEN 1350
  190. 1910  IF K < >8  THEN 1880
  191. 1920  IF Y  THEN  POKE  -16368,0: IF Y < = 2  THEN Y = 1: GOTO 1940
  192. 1930 I$ =  LEFT$(I$, LEN(I$) -1):Y =  LEN(I$) +1: GOTO 1950
  193. 1940 I$ = ""
  194. 1950  HTAB 15: VTAB 13: PRINT I$; SPC( 15 - LEN(I$)): GOTO 1880
  195. 1960 I$ = I$ + CHR$(K): VTAB 13: HTAB (14 +Y): PRINT  CHR$(K): POKE  -16368,0: NEXT 
  196. 1970  IF I$ = ""  OR I$ = "."  THEN 2000
  197. 1980  GOSUB 410: IF  VAL(I$) >99999.99  THEN 2000
  198. 1990  IF I$ < >""  THEN NU$(L,VT -6) = I$: GOTO 1350
  199. 2000  VTAB 19: HTAB 12: PRINT "INVALID ENTRY": PRINT : HTAB 8: PRINT "PLEASE PRESS ";: INVERSE : PRINT "<RETURN>": NORMAL 
  200. 2010  GOSUB 300: GOTO 1830
  201. 2020  REM *** GRAPH ***
  202. 2030 Y = 50: HOME 
  203. 2040  FOR Z = 1 TO 12: IF  VAL(NU$(L,Z)) >Y  THEN Y = Y *2: GOTO 2040
  204. 2050  NEXT : FOR Z = 1 TO 12: HTAB 30: VTAB (Z +5): PRINT  LEFT$(MN$(Z),1);: HTAB 40 - LEN(NU$(L,Z)): PRINT NU$(L,Z): NEXT :T =  INT(Y/10):T2 = T: FOR Z = 10 TO 1  STEP  -1: HTAB 1: VTAB (Z *2): PRINT T2:T2 = T2 +T: NEXT 
  205. 2060  VTAB 22: HTAB 1: PRINT "0": FOR Z = 1 TO 12: VTAB 23: HTAB (Z *2) +5: PRINT  LEFT$(MN$(Z),1);: NEXT : FOR Z = 1 TO 12: HTAB (Z *2) +5: IF  VAL(NU$(L,Z)) = 0  THEN  VTAB 22: GOTO 2080
  206. 2070  VTAB 22 - INT((( VAL(NU$(L,Z))/Y) *20) +.5)
  207. 2080  PRINT "*": NEXT 
  208. 2088  VTAB 24: HTAB 20 - LEN(NA$(L))/2: INVERSE : PRINT NA$(L);: NORMAL 
  209. 2089  VTAB 1: HTAB 1: PRINT  SPC( 8)"PRESS ";: INVERSE : PRINT "<ESCAPE>";: NORMAL : PRINT " FOR MENU";:
  210. 2090  VTAB 24: HTAB 20 - LEN(NA$(L))/2: PRINT NA$(L);:
  211. 2100  VTAB 1: HTAB 1: PRINT  SPC( 8)"PRESS ";: INVERSE : PRINT "<ESCAPE>";: NORMAL : PRINT " FOR MENU";:
  212. 2110  ON ( PEEK(49152) = 155) GOTO 1090: GOTO 2110
  213. 2120  REM 
  214. 2130  POKE  -16368,0: PRINT  CHR$(7);: GOTO 2180
  215. 2140  REM *** CHANGE TITLES ***
  216. 2150  TEXT : HOME : VTAB 5: HTAB 7: INVERSE : PRINT "OLD TITLE=";: NORMAL : PRINT " ";NA$(L): VTAB 10: HTAB 7: PRINT "PRESS <RETURN> TO ACCEPT": PRINT : HTAB 19: PRINT "OR": PRINT : HTAB 12: PRINT "ENTER NEW TITLE"
  217. 2160  GOSUB 260: IF  PEEK(49152) = 155  OR  PEEK(49152) = 141  THEN 1090
  218. 2170  VTAB 10: HTAB 1: PRINT BL$(1): PRINT : PRINT BL$(1): PRINT : PRINT BL$(1): VTAB 10: HTAB 9: PRINT "WHAT IS THE NEW TITLE ?": VTAB 20: HTAB 6: PRINT "DON'T USE MORE THAN 15 LETTERS":I$ = "":Y = 1
  219. 2180  GOSUB 290: IF K >64  AND K <91  THEN 2270
  220. 2190  IF K = 32  OR K >45  AND K <58  THEN 2270
  221. 2200  IF K >96  AND K <123  THEN 2270
  222. 2210  IF K = 13  THEN 2280
  223. 2220  IF K = 27  THEN  POKE  -16368,0: GOTO 2150
  224. 2230  IF K < >8  THEN 2180
  225. 2240  POKE  -16368,0: IF Y <3  THEN Y = 1:I$ = "": GOTO 2260
  226. 2250 I$ =  LEFT$(I$, LEN(I$) -1):Y =  LEN(I$) +1
  227. 2260  HTAB 12: VTAB 15: PRINT I$; SPC( 15 - LEN(I$)): GOTO 2180
  228. 2270 VA = (Y <16)  AND (K = 13  OR K = 27  OR K >31): ON   NOT VA GOTO 2130:I$ = I$ + CHR$(K): VTAB 15: HTAB (11 +Y): PRINT  CHR$(K);: POKE  -16368,0:Y = Y +1: GOTO 2180
  229. 2280  FOR Y = 1 TO 15 - LEN(I$):I$ = I$ +" ": NEXT 
  230. 2290  IF I$ = ""  OR I$ = " "  OR I$ = MN$(0)  THEN I$ = "": GOTO 1090
  231. 2300  IF NA$(L) = ""  THEN 2360
  232. 2310  HOME : VTAB 8: HTAB 4: PRINT "DO YOU WISH TO KEEP ANY DATA THAT": HTAB 4: PRINT "WAS STORED UNDER THE OLD TITLE.": PRINT : HTAB 12: PRINT NA$(L): NORMAL : PRINT : HTAB 13: PRINT "PRESS Y OR N"
  233. 2320  GOSUB 300: IF K = 89  OR K = 121  THEN 2370
  234. 2330  IF K = 27  THEN 1090
  235. 2340  IF K = 78  OR K = 110  THEN 2360
  236. 2350  GOTO 2320
  237. 2360  FOR Z = 0 TO 12:NU$(L,Z) = "0.00": NEXT 
  238. 2370 NA$(L) = I$:SA = 1: GOTO 1090
  239. 2380  REM *** CHANGE INFO ***
  240. 2390 X = SL: HOME : GOSUB 570: VTAB 5: HTAB 9: PRINT "THE CURRENT SLOT IS #";X:T1 = 8:T3 = 4:T4 = 7:T5 = 51:T6 = 56:T7 = 30: GOSUB 580:SL = X:T5 = 0: GOTO 790
  241. 2400 X = DR: HOME : VTAB 5: HTAB 9: PRINT "THE CURRENT DRIVE IS #";X:T1 = 8:T3 = 1:T4 = 2:T5 = 48:T6 = 51:T7 = 31: GOSUB 580:DR = X:T5 = 0: GOTO 790
  242. 2410  POKE 35,19: HOME : VTAB 5: PRINT "ENTER A FILENAME TO SAVE DATA ON DISK": PRINT : PRINT "USE 15 OR FEWER CHARACTERS IN THE NAME": VTAB 16: INVERSE : PRINT "<RETURN>";: NORMAL : PRINT " TO ACCEPT THE CURRENT FILE NAME"
  243. 2420 I$ = "":Y = 1
  244. 2430  GOSUB 290: IF K >64  AND K <91  THEN 2520
  245. 2440  ON Y = 1 GOTO 2460: IF K = 47  THEN  PRINT  CHR$(7);: POKE  -16368,0: GOTO 2430
  246. 2450  IF K >45  AND K <58  THEN 2520
  247. 2460  IF K = 13  THEN 2530
  248. 2470  IF K = 27  THEN 2540
  249. 2480  IF K < >8  THEN 2430
  250. 2490  POKE  -16368,0: IF Y < = 2  THEN Y = 1:I$ = "": GOTO 2510
  251. 2500 I$ =  LEFT$(I$, LEN(I$) -1):Y =  LEN(I$) +1
  252. 2510  HTAB 12: VTAB 10: PRINT I$; SPC( 15 - LEN(I$)): GOTO 2430
  253. 2520 I$ = I$ + CHR$(K): VTAB 10: HTAB 11 +Y: PRINT  CHR$(K);: POKE  -16368,0: IF Y <15  THEN Y = Y +1: GOTO 2430
  254. 2530  IF I$ < >""  THEN DF$ = I$
  255. 2540 T1 = 8: VTAB 16: PRINT  SPC( 40): GOTO 790
  256. 2550  HOME : VTAB 5: HTAB 5: INVERSE : PRINT I$: NORMAL : PRINT : PRINT "IS NOT A VALID FILENAME": PRINT : PRINT "PRESS ";: INVERSE : PRINT "<ESCAPE>": NORMAL 
  257. 2560  GOSUB 300: IF K < >27  THEN 2560
  258. 2570  GOTO 2410
  259. 2580  REM *** CATALOG ***
  260. 2590 I$ = "CATALOG": IF  PEEK(48896) = 76  THEN I$ = "CAT"
  261. 2600  TEXT : HOME : PRINT D$;I$;",S";SL;",D";DR: PRINT : PRINT "PRESS ";: INVERSE : PRINT "<RETURN>": NORMAL : PRINT 
  262. 2610  GOSUB 300: IF K = 13  OR K = 27  THEN T1 = 0: GOTO 780
  263. 2620  GOTO 2610
  264. 2630  REM *** SAVE & LOAD DATA ***
  265. 2640 T2 = X: TEXT : HOME : PRINT D$;"VERIFY";DF$;",S";SL;",D";DR: GOTO 2680
  266. 2650  HOME : VTAB 10: HTAB 5: INVERSE : PRINT DF$: NORMAL : PRINT : HTAB 5: PRINT "DOES NOT EXIST ON THIS DISK"
  267. 2660  IF T2 = 4  THEN  PRINT : HTAB 5: PRINT "DO YOU WISH TO OPEN THIS FILE": PRINT : HTAB 5: PRINT "PRESS Y OR N":T1 = 8: GOSUB 330: GOTO 2700
  268. 2670  PRINT : HTAB 5: PRINT "PRESS ";: INVERSE : PRINT "<RETURN>";: NORMAL : PRINT " TO CONTINUE": GOSUB 300: HOME : VTAB 10: HTAB 15: PRINT "WORKING": FOR X = 1 TO 40: FOR Y = 0 TO 12:NU$(X,Y) = "0.00": NEXT Y,X: GOTO 2720
  269. 2680  IF T2 = 3  THEN 2700
  270. 2690  VTAB 10: HTAB 5: INVERSE : PRINT DF$: NORMAL : PRINT : HTAB 5: PRINT "ALREADY EXISTS ON THIS DISK": PRINT : HTAB 5: PRINT "DO YOU WISH TO SAVE THIS FILE ANYWAY": PRINT : HTAB 5: PRINT "PRESS Y OR N":T1 = 8: GOSUB 330
  271. 2700  HOME : VTAB 10: HTAB 10: IF T2 = 4  THEN 2730
  272. 2710  PRINT "LOADING ";DF$: PRINT D$;"OPEN";DF$;",S";SL;",D";DR: PRINT D$;"READ";DF$: FOR X = 1 TO 40: INPUT NA$(X): FOR Y = 0 TO 12: INPUT NU$(X,Y): NEXT Y,X: PRINT D$;"CLOSE"
  273. 2720 T8 = 1: GOTO 730
  274. 2730  PRINT "SAVING ";DF$: PRINT D$;"OPEN";DF$",S"SL",D"DR: PRINT D$;"WRITE";DF$: FOR X = 1 TO 40: PRINT NA$(X): FOR Y = 0 TO 12: PRINT NU$(X,Y): NEXT Y,X: PRINT D$;"CLOSE":SA = 0: GOTO 730
  275. 2740  REM *** QUIT ***
  276. 2750  HOME : IF SA = 1  THEN  VTAB 10: HTAB 7: PRINT "YOU HAVE NOT SAVED YOUR DATA.": PRINT : HTAB 7: PRINT "DO YOU WISH TO QUIT ANYWAY ?": PRINT : HTAB 14: PRINT "PRESS Y OR N":T1 = 8: GOSUB 330
  277. 2760  HOME : VTAB 10: HTAB 8: PRINT "DO YOU REALLY WISH TO QUIT": PRINT : HTAB 15: PRINT "PRESS Y OR N":T1 = 8: GOSUB 330: HOME : END 
  278. 2770  PRINT D$"PR#0": REM  ERROR TRAP
  279. 2780 T =  PEEK(222):I$ = "AN ERROR HAS OCCURED"
  280. 2790  IF T = 11  THEN I$ = "INVALID FILE NAME"
  281. 2800  IF T = 10  THEN I$ = "FILE IS LOCKED"
  282. 2810  IF T = 9  THEN I$ = "DISK IS FULL"
  283. 2820  IF T = 8  THEN I$ = "CHECK DRIVE DOOR OR DISK"
  284. 2830  IF T = 6  THEN 2650
  285. 2840  IF T = 5  THEN  PRINT D$;"CLOSE";DF$: GOTO 730
  286. 2850  IF T = 4  THEN I$ = "REMOVE WRITE PROTECT TAB"
  287. 2860  TEXT : HOME : VTAB 10: HTAB 5: PRINT I$: VTAB 12: HTAB 5: PRINT "PRESS ";: INVERSE : PRINT "<RETURN>";: NORMAL : PRINT " FOR MENU"
  288. 2870  GOSUB 300:T1 = 0: GOTO 730