home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib25a.dsk / OCTOBER.1985 / METERMAN.bas next >
BASIC Source File  |  2023-02-26  |  16KB  |  276 lines

  1. 10  REM **********************
  2. 20  REM *     METERMAN       *
  3. 30  REM *   BY RUDY A. GUY   *
  4. 40  REM * COPYRIGHT (C) 1985 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80  ONERR  GOTO 2680
  9. 90  IF  PEEK(64435) < >6  THEN 2760: REM  CHECK FOR //e or //c
  10. 100  HOME : POKE 49153,0: POKE 49237,0: POKE 1024,123:F8 =  PEEK(1024) < >123: POKE 49236,0: POKE 49152,0: IF F8 GOTO 2760: REM CHECK FOR 80 COLUMN CARD
  11. 110  REM  INITIALIZE
  12. 120  LOMEM: 24576
  13. 130 D$ =  CHR$(4)
  14. 140  DIM M$(12): FOR I = 1 TO 12: READ M$(I): NEXT : DATA   "January","February","March","April","May","June","July","August","September","October","November","December"
  15. 150  DIM UN(60),BC(60),TC(60),CP(60),YR$(25):C = 4: REM   UTILITY CATEGORIES
  16. 160  FOR I = 1 TO C: READ UT$(I): NEXT : DATA  ELECTRICITY,GAS,OIL,WATER
  17. 170  REM  TITLE PAGE
  18. 180  PRINT D$"PR#3": PRINT 
  19. 190  REM  CHECK FOR ACTIVE YEARS ON SYSTEM
  20. 200 EF = 1: PRINT D$"VERIFY YEARS"
  21. 210  PRINT D$"OPEN YEARS,L5": PRINT D$"READ YEARS,R0": INPUT YR: FOR I = 1 TO YR: PRINT D$"READ YEARS,R"I: INPUT YR$(I): NEXT : PRINT D$"CLOSE"
  22. 220  IF YR = 1  THEN 240
  23. 230  GOSUB 2600
  24. 240  IF  PEEK(10) = 18  THEN YR$ =  STR$( PEEK(11)) + STR$( PEEK(12)): GOTO 370
  25. 250  HOME : VTAB 3: PRINT "Current years on system:": PRINT 
  26. 260  FOR I = 1 TO YR: PRINT YR$(I)"      ";: REM  6 SPACES
  27. 270  NEXT : PRINT 
  28. 280  VTAB 18: PRINT "Enter 'A' to add another year, 'D' to delete a year."
  29. 290  VTAB 20: HTAB 1: CALL  -958: VTAB 20: PRINT : INPUT "With what year do you want to work? ";YR$
  30. 300  IF YR$ = "A"  OR YR$ = "a"  THEN  HOME : GOTO 1960
  31. 310  IF YR$ = "D"  OR YR$ = "d"  THEN  VTAB 12: PRINT  CHR$(11): GOTO 2400
  32. 320  IF  LEN(YR$) <4  THEN  PRINT  CHR$(7): GOTO 290
  33. 330 CK = 0: FOR I = 1 TO YR: IF YR$ = YR$(I)  THEN CK = CK +1
  34. 340  NEXT 
  35. 350  IF   NOT CK  THEN  PRINT  CHR$(7)"That year is not on the system!  Press RETURN to resume.";: GET YN$: PRINT : GOTO 290
  36. 360  POKE 10,18: POKE 11, VAL( LEFT$(YR$,2)): POKE 12, VAL( RIGHT$(YR$,2))
  37. 370  REM  MAIN MENU
  38. 380  HOME : VTAB 3: PRINT "Year :";: INVERSE : PRINT YR$: NORMAL 
  39. 390  VTAB 1:A$ = "** Copyright (C) 1985 by MicroSPARC, Inc. **": GOSUB 2380
  40. 400  VTAB 5:A$ = "*** Nibble Meter Man by Rudy A. Guy ***": GOSUB 2380
  41. 410  VTAB 7:A$ = "*** Main Menu ***": INVERSE : GOSUB 2380: NORMAL : PRINT 
  42. 420 A$ = "[1] Change/Review a utility    ": GOSUB 2380:A$ = "[2] Change default year        ": GOSUB 2380:A$ = "[3] Compare utility information": GOSUB 2380: REM 4/8 SPACES
  43. 430 A$ = "[4] Graph utility information  ": GOSUB 2380:A$ = "[5] Exit to BASIC              ": GOSUB 2380: PRINT : REM 2/12 SPACES
  44. 440  VTAB 15: HTAB 1: CALL  -958: VTAB 15:A$ = "Please select 1-5 :": GOSUB 2380: VTAB  PEEK(37): POKE 1403,50: INPUT "";SE$
  45. 450 SE =  VAL(SE$): IF SE <1  OR SE >5  THEN  PRINT  CHR$(7): GOTO 440
  46. 460  ON SE GOTO 490,1190,1210,1770
  47. 470  VTAB 20: INPUT "Are you sure you want to quit? ";YN$: ON YN$ < >"Y" GOTO 380: HOME : VTAB 12: PRINT "Done": POKE 10,0: END 
  48. 480  REM  ENTER/EDIT DATA
  49. 490  POKE 216,0: REM  TURN OFF PRESENT ONERR
  50. 500  ONERR  GOTO 530
  51. 510 I = 0: POKE 34,23: HOME 
  52. 520 I = I +1: PRINT D$"VERIFY "UT$(I);YR$:U(I) = 1
  53. 530  IF I <4  THEN 520
  54. 540  POKE 216,0: ONERR  GOTO 2680
  55. 550  TEXT : HOME 
  56. 560  PRINT "YEAR :";: INVERSE : PRINT YR$: NORMAL 
  57. 570  VTAB 5: PRINT "Utility information on the system for "YR$":": PRINT 
  58. 580 U = 0
  59. 590  FOR I = 1 TO C: IF U(I) = 1  THEN U = U +1: POKE 1403,35: PRINT U". "UT$(I):T$(U) = UT$(I)
  60. 600  NEXT : PRINT 
  61. 610  IF U <C  THEN  PRINT "Enter an 'A' to track another utility for "YR$".": PRINT 
  62. 620  INPUT "With which utility do you want to work? ";UT$: IF UT$ = ""  THEN 550
  63. 630  IF UT$ = "A"  OR UT$ = "a"  THEN  VTAB 3:AD = 1: GOSUB 2050: GOTO 500
  64. 640  IF  VAL(UT$) <1  OR  VAL(UT$) >U  THEN  PRINT  CHR$(7): GOTO 550
  65. 650 UT$ = T$( VAL(UT$))
  66. 660  PRINT D$"OPEN "UT$;YR$: PRINT D$"READ "UT$;YR$: FOR I = 1 TO 12: INPUT UN(I),BC(I),TC(I):CP(I) = 0: IF UN(I) < >0  THEN CP(I) = BC(I)/UN(I)
  67. 670  NEXT : PRINT D$"CLOSE"
  68. 680 CK = 0:UN = 0:BC = 0:TC = 0:CP = 0
  69. 690  HOME : PRINT "Year :";: INVERSE : PRINT YR$;: NORMAL : POKE 1403,20: PRINT "Utility :";: INVERSE : PRINT UT$;: NORMAL : POKE 1403,60: PRINT "Control-P to Print"
  70. 700  GOSUB 2250
  71. 710  PRINT "Month";: POKE 1403,24: PRINT "Units";: POKE 1403,35: PRINT "Base Cost";: POKE 1403,50: PRINT "Cost/Unit";: POKE 1403,64: PRINT "Total Cost"
  72. 720  GOSUB 2250
  73. 730 X = 0
  74. 740  FOR I = 1 TO 12
  75. 750  PRINT M$(I);: POKE 1403,14: PRINT "|";
  76. 760  GOSUB 2260: POKE 1403,15: INVERSE : PRINT X$;: NORMAL :X$ =  STR$(UN(I)): POKE 1403,29 - LEN(X$): PRINT X$;"|";
  77. 770  GOSUB 2260: INVERSE : PRINT X$;: NORMAL :X$ =  STR$(BC(I)): GOSUB 2290: POKE 1403,44 - LEN(X$): PRINT X$;"|";
  78. 780 X$ =  STR$(CP(I))
  79. 790  IF  LEN(X$) <5  THEN X$ = X$ +"0": GOTO 790
  80. 800  IF  LEN(X$) >5  THEN X$ =  LEFT$(X$,5)
  81. 810  POKE 1403,59 - LEN(X$): PRINT X$;"|";
  82. 820  GOSUB 2260: INVERSE : PRINT X$;: NORMAL :X$ =  STR$(TC(I)): GOSUB 2290: POKE 1403,74 - LEN(X$): PRINT X$
  83. 830  IF CH  THEN  RETURN 
  84. 840 UN = UN +UN(I):BC = BC +BC(I):TC = TC +TC(I)
  85. 850  NEXT 
  86. 860  GOSUB 2250
  87. 870  IF UN >0  THEN CP = BC/UN
  88. 880  PRINT "Totals ";:X$ =  STR$(UN): POKE 1403,29 - LEN(X$): PRINT X$;:X$ =  STR$(BC): GOSUB 2290: POKE 1403,44 - LEN(X$): PRINT X$;
  89. 890 X$ =  STR$(CP): IF  LEN(X$) >5  THEN X$ =  LEFT$(X$,5): GOTO 910
  90. 900  IF  LEN(X$) <5  THEN X$ = X$ +"0": GOTO 900
  91. 910  POKE 1403,59 - LEN(X$): PRINT X$;:X$ =  STR$(TC): GOSUB 2290: POKE 1403,74 - LEN(X$): PRINT X$
  92. 920  IF CH  THEN CH = 0: RETURN 
  93. 930  GOSUB 2250
  94. 940  PRINT "You may change 'units', 'base cost', or 'total cost'. 'Cost/Unit' changes with  modifications to 'units' and 'base cost'. '0' or RETURN to quit editing.": GOSUB 2250
  95. 950  PRINT : POKE 34,22
  96. 960  HOME : INPUT "#";SE$:SE =  VAL(SE$): IF SE >36  THEN  PRINT  CHR$(7): GOTO 960
  97. 970  IF SE$ =  CHR$(16)  THEN  POKE 34,19: HOME : GOSUB 1790: POKE  -16368,0: GOTO 940
  98. 980  IF SE = 0  AND CK = 0  THEN 1180
  99. 990  IF SE = 0  THEN 1170
  100. 1000 CK = CK +1
  101. 1010  IF SE <4  THEN I = 1: GOTO 1060
  102. 1020 TE = SE:TE = TE/3:TE$ =  STR$(TE):TE$ =  RIGHT$(TE$,2)
  103. 1030  IF TE$ = "33"  OR TE$ = "34"  THEN I =  INT(SE/3) +1:SE = 1: GOTO 1060
  104. 1040  IF TE$ = "67"  THEN I =  INT(SE/3) +1:SE = 2: GOTO 1060
  105. 1050 I =  INT(SE/3):SE = 3
  106. 1060  IF SE <1  THEN 1130
  107. 1070  HOME : ON SE GOSUB 1080,1090,1100: GOTO 1130
  108. 1080  PRINT "Enter new 'unit' amount for ";M$(I)": ";: INPUT "";T$: GOSUB 1110:UN(I) =  VAL(T$): RETURN 
  109. 1090  PRINT "Enter new 'base cost' amount for ";M$(I)": ";: INPUT "";T$: GOSUB 1110:BC(I) =  VAL(T$): RETURN 
  110. 1100  PRINT "Enter new 'total cost' amount for ";M$(I)": ";: INPUT "";T$: GOSUB 1110:TC(I) =  VAL(T$): RETURN 
  111. 1110  IF T$ = ""  THEN  POP : RETURN 
  112. 1120  RETURN 
  113. 1130  IF SE <3  AND UN(I) < >0  THEN CP(I) = BC(I)/UN(I)
  114. 1140  VTAB I +4: PRINT  CHR$(26): VTAB I +4:X = (3 *I) -3:CH = 1: GOSUB 750
  115. 1150  VTAB 18: PRINT  CHR$(26): VTAB 18
  116. 1160 UN = 0:CP = 0:TC = 0:BC = 0: FOR I = 1 TO 12:UN = UN +UN(I):BC = BC +BC(I):TC = TC +TC(I): NEXT : GOSUB 870: GOTO 960
  117. 1170  PRINT D$"DELETE "UT$;YR$: PRINT D$"OPEN "UT$;YR$: PRINT D$"WRITE "UT$;YR$: FOR I = 1 TO 12: PRINT UN(I): PRINT BC(I): PRINT TC(I): NEXT : PRINT D$"CLOSE"
  118. 1180  FOR I = 1 TO 12:UN(I) = 0:BC(I) = 0:TC(I) = 0:CP(I) = 0: NEXT : TEXT : GOTO 380
  119. 1190  FOR I = 1 TO 4:U(I) = 0:T$(I) = "": NEXT : POKE 10,0: GOTO 220
  120. 1200  REM  COMPARE YEARLY DATA
  121. 1210  HOME 
  122. 1220  IF YR <2  THEN  VTAB 12: PRINT  CHR$(7)"Sorry, you must have at least two years of data on the system.": PRINT : INPUT "Press <Return> to resume.";YN$: GOTO 380
  123. 1230  VTAB 5:A$ = "Utility Comparisons": GOSUB 2380: PRINT 
  124. 1240  GOSUB 2600
  125. 1250  VTAB 7: FOR I = 1 TO YR: PRINT YR$(I);"      ";: NEXT : PRINT : PRINT : REM 6 SPACES
  126. 1260  PRINT "How many years do you wish to compare (up to ";(YR <5) *YR +(YR > = 5) *5;") ";: INPUT NU$:NU =  VAL(NU$): IF NU <2  OR NU >5  OR NU >YR  THEN  PRINT  CHR$(7): GOTO 1210
  127. 1270  PRINT : FOR I = 1 TO NU
  128. 1280  PRINT "Please enter year #";I;": ";: INPUT "";CY$(I):CK = 0
  129. 1290  FOR J = 1 TO YR: IF CY$(I) = YR$(J)  THEN CK = 1:J = YR
  130. 1300  NEXT : IF CK  THEN CK = 0: GOTO 1320
  131. 1310  PRINT  CHR$(7): VTAB  PEEK(37) -1: CALL  -958: GOTO 1280
  132. 1320  NEXT 
  133. 1330  HOME : PRINT "Utility comparison of:": PRINT : FOR I = 1 TO NU:A$ = CY$(I): GOSUB 2380: NEXT 
  134. 1340  VTAB 9: PRINT "Which utility would you like to see? Please enter number.": PRINT : FOR I = 1 TO C: POKE 1403,35: PRINT I" "UT$(I): NEXT 
  135. 1350  PRINT : INPUT "Number :";SE$:SE =  VAL(SE$): IF SE <1  OR SE >4  THEN  PRINT  CHR$(7): GOTO 1330
  136. 1360  POKE 34,22: POKE 216,0: ONERR  GOTO 1380
  137. 1370  FOR I = 1 TO NU: PRINT D$;"VERIFY "UT$(SE);CY$(I): NEXT : GOTO 1390
  138. 1380  CALL  -3288: PRINT  CHR$(7): PRINT "Sorry, there is no "UT$(SE)" data for "CY$(I)".": PRINT : INPUT "Press RETURN to resume.";YN$: TEXT : GOTO 380
  139. 1390  POKE 216,0: ONERR  GOTO 2680
  140. 1400 J = 0: FOR I = 1 TO NU
  141. 1410  PRINT D$"OPEN "UT$(SE);CY$(I): PRINT D$"READ "UT$(SE);CY$(I)
  142. 1420 J = J +1: INPUT UN(J),BC(J),TC(J): IF J/12 < > INT(J/12)  THEN 1420
  143. 1430  PRINT D$;"CLOSE": NEXT 
  144. 1440  TEXT : HOME : PRINT "Utility :";: INVERSE : PRINT UT$(SE): NORMAL 
  145. 1450  GOSUB 2250: PRINT "Year/Month";: POKE 1403,25: PRINT "Units";: POKE 1403,36: PRINT "Base Cost";: POKE 1403,51: PRINT "Cost/Unit";: POKE 1403,65: PRINT "Total Cost"
  146. 1460  GOSUB 2250
  147. 1470 M = 0: FOR I = 1 TO 12
  148. 1480  FOR J = 0 TO NU *12  STEP 12:M = M +1: IF M >NU  THEN 1540
  149. 1490  PRINT CY$(M)" "M$(I);:X$ =  STR$(UN(I +J)): POKE 1403,29 - LEN(X$): PRINT X$;:X$ =  STR$(BC(I +J)): GOSUB 2290: POKE 1403,44 - LEN(X$): PRINT X$;
  150. 1500  IF UN(I +J) = 0  THEN X$ = ".0000": GOTO 1530
  151. 1510 X$ =  STR$(BC(I +J)/UN(I +J)): IF  LEN(X$) >5  THEN X$ =  LEFT$(X$,5): GOTO 1530
  152. 1520  IF  LEN(X$) <5  THEN X$ = X$ +"0": GOTO 1520
  153. 1530  POKE 1403,59 - LEN(X$): PRINT X$;:X$ =  STR$(TC(I +J)): GOSUB 2290: POKE 1403,74 - LEN(X$): PRINT X$
  154. 1540  NEXT J:M = 0: PRINT 
  155. 1550  IF I = NU  THEN 1570
  156. 1560  IF I/(7 -NU) =  INT(I/(7 -NU))  THEN  GOSUB 1710
  157. 1570  NEXT 
  158. 1580 J = 1: FOR I = 1 TO NU:UN = 0:BC = 0:CP = 0:TC = 0: FOR J = J TO J +11
  159. 1590 UN = UN +UN(J):BC = BC +BC(J):TC = TC +TC(J): NEXT 
  160. 1600  IF UN >0  THEN CP = BC/UN
  161. 1610  PRINT CY$(I);" Totals";:X$ =  STR$(UN): POKE 1403,29 - LEN(X$): PRINT X$;:X$ =  STR$(BC): GOSUB 2290: POKE 1403,44 - LEN(X$): PRINT X$;
  162. 1620 X$ =  STR$(CP): IF  LEN(X$) >5  THEN X$ =  LEFT$(X$,5): GOTO 1640
  163. 1630  IF  LEN(X$) <5  THEN X$ = X$ +"0": GOTO 1630
  164. 1640  POKE 1403,59 - LEN(X$): PRINT X$;:X$ =  STR$(TC): GOSUB 2290: POKE 1403,74 - LEN(X$): PRINT X$
  165. 1650  NEXT 
  166. 1660  VTAB 24: PRINT "Press 'P' to print or <ESC> to go to menu.";
  167. 1670 K =  PEEK( -16384): IF K <128 GOTO 1670
  168. 1680  IF K = 208  OR K = 240  THEN  POKE  -16368,0: POKE 34,23: HOME : GOSUB 1790: POKE  -16368,0: GOTO 1660
  169. 1690  IF K = 155  THEN  POKE  -16368,0: TEXT : GOTO 380
  170. 1700  GOTO 1670
  171. 1710  VTAB 24: PRINT "Press <ESC> to quit, <Return> to continue or 'P' to print.";
  172. 1720 K =  PEEK( -16384)
  173. 1730  IF K = 155  THEN  POKE  -16368,0: POP : TEXT : GOTO 380
  174. 1740  IF K = 141  THEN  POKE  -16368,0: POKE 34,4: HOME : RETURN 
  175. 1750  IF K = 208  OR K = 240  THEN  POKE  -16368,0: POKE 34,23: HOME : GOSUB 1790: POKE  -16368,0: POKE 34,4: HOME : RETURN 
  176. 1760  GOTO 1720
  177. 1770  PRINT D$"RUN METERMAN.GRAPH"
  178. 1780  REM  PRINT ROUTINE W/SCREEN READ
  179. 1790  IF  PEEK(48896) < >76  THEN  FOR II = 0 TO 3:HK(II) =  PEEK(43603 +II): NEXT 
  180. 1800  PRINT : PRINT D$;"PR#1": PRINT  CHR$(9)"80N": REM  PRINT 80 COLUMN SCREEN
  181. 1810  FOR XX = 1024 TO 1104  STEP 40
  182. 1820  FOR YY = XX TO XX +896  STEP 128
  183. 1830  FOR ZZ = YY TO YY +39
  184. 1840  POKE 49237,0
  185. 1850 L =  PEEK(ZZ):L$ = L$ + CHR$(L)
  186. 1860  POKE 49236,0
  187. 1870 L =  PEEK(ZZ):L$ = L$ + CHR$(L)
  188. 1880  NEXT ZZ
  189. 1890  PRINT L$:L$ = ""
  190. 1900  NEXT YY
  191. 1910  NEXT XX
  192. 1920  PRINT : PRINT D$;"PR#0": IF  PEEK(48896) = 76  THEN  PRINT D$;"PR#A$C307": RETURN 
  193. 1930  FOR II = 0 TO 3: POKE 43603 +II,HK(II): NEXT : RETURN 
  194. 1940  REM  CREATE DATA FILE
  195. 1950  HOME : PRINT : VTAB 5: PRINT "There are no data files on this disk. Do you want to create one?";: INPUT "";YN$: IF  LEFT$(YN$,1) = "n"  OR  LEFT$(YN$,1) = "N"  THEN 470
  196. 1960  VTAB 7: INPUT "What year do you want to add? ";YR$: IF  LEN(YR$) <2  OR  LEN(YR$) >4  THEN  PRINT  CHR$(7): PRINT  CHR$(26): PRINT : GOTO 1960
  197. 1970  IF  LEN(YR$) <4  THEN YR$ = "19" +YR$
  198. 1980  IF YR = 0  THEN 2030
  199. 1990 FL = 0: FOR I = 1 TO YR
  200. 2000  IF YR$ = YR$(I)  THEN FL = 1
  201. 2010  NEXT 
  202. 2020  IF FL  THEN  PRINT : PRINT  CHR$(7)"That year already exists.": PRINT : INPUT "Press RETURN to resume.";YN$:FL = 0: HOME : GOTO 1960
  203. 2030 YR = YR +1:YR$(YR) = YR$
  204. 2040 EF = 2: PRINT D$"OPEN YEARS,L5": PRINT D$"WRITE YEARS,R0": PRINT YR: PRINT D$"WRITE YEARS,R"YR: PRINT YR$: PRINT D$"CLOSE"
  205. 2050  PRINT  CHR$(11): VTAB 9: FOR I = 1 TO 4: POKE 1403,35: IF U(I) = 1  THEN  INVERSE 
  206. 2060  PRINT I".";: NORMAL : PRINT UT$(I): NEXT : PRINT  CHR$(11)
  207. 2070  PRINT : INPUT "Enter number of utility to track (0 or RETURN to end) :";NU$:NU =  VAL(NU$): IF NU <0  OR NU >4  THEN  PRINT  CHR$(7): GOTO 2050
  208. 2080  IF NU = 0  THEN 2100
  209. 2090 U(NU) =  ABS(U(NU) -1): GOTO 2050
  210. 2100  FOR I = 1 TO 4: IF U(I) = 1  THEN NU = NU +1
  211. 2110  NEXT : IF NU = 0  THEN  PRINT : PRINT  CHR$(7)"No utilities were selected!": PRINT : INPUT "Press RETURN to resume.";YN$: GOTO 2050
  212. 2120  IF AD  THEN 2180
  213. 2130  FOR I = 1 TO 4: IF U(I) < >1  THEN 2160
  214. 2140 EF = 3: PRINT D$"OPEN "UT$(I);YR$: PRINT D$"WRITE "UT$(I);YR$: FOR J = 1 TO 12: FOR K = 1 TO 3: PRINT 0: NEXT K,J: PRINT D$"CLOSE"
  215. 2150 U(I) = 0
  216. 2160  NEXT 
  217. 2170  HOME : GOTO 380
  218. 2180  POKE 216,0: ONERR  GOTO 2210
  219. 2190 I = 0: IF U = NU  THEN  RETURN 
  220. 2200 I = I +1: PRINT D$"VERIFY "UT$(I);YR$: GOTO 2220
  221. 2210  IF U(I)  THEN  PRINT D$"OPEN "UT$(I);YR$: PRINT D$"WRITE "UT$(I);YR$: FOR J = 1 TO 12: FOR K = 1 TO 3: PRINT 0: NEXT K,J: PRINT D$"CLOSE"
  222. 2220  IF I = 4  THEN  POKE 216,0: ONERR  GOTO 2680
  223. 2230  IF I <4  THEN 2200
  224. 2240  GOTO 500
  225. 2250  FOR I = 1 TO 80: PRINT "=";: NEXT : RETURN 
  226. 2260 X = X +1: IF X >9  THEN X$ =  STR$(X): RETURN 
  227. 2270 X$ = " " + STR$(X): RETURN 
  228. 2280  REM  DOLLAR/CENTS FORMATTER
  229. 2290  IF  LEN(X$) = 1  THEN X$ = X$ +".00": RETURN 
  230. 2300  FOR D = 1 TO  LEN(X$)
  231. 2310  IF  MID$ (X$,D,1) = "."  THEN  GOSUB 2340
  232. 2320  NEXT 
  233. 2330 X$ = X$ +".00": RETURN 
  234. 2340  IF D =  LEN(X$) -1  THEN X$ = X$ +"0": POP : RETURN 
  235. 2350  IF D =  LEN(X$) -2  THEN  POP : RETURN 
  236. 2360 X$ =  LEFT$(X$,D +2): POP : RETURN 
  237. 2370  REM  CENTER ROUTINE
  238. 2380 HT = 40 - LEN(A$)/2: POKE 1403,HT: PRINT A$: RETURN 
  239. 2390  REM  DELETE A YEAR
  240. 2400  INPUT "What year do you want to delete ? (RETURN to cancel) ";DY$
  241. 2410  IF DY$ = ""  THEN  HOME : GOTO 250
  242. 2420 FL = 0: FOR I = 1 TO YR
  243. 2430  IF YR$(I) = DY$  THEN FL = 1:YR$(I) = "_": REM  UNDERLINE
  244. 2440  NEXT 
  245. 2450  IF   NOT FL  THEN  PRINT : PRINT  CHR$(7)"That year is not on the system. Press RETURN to resume.";: INPUT "";YN$: VTAB 12: PRINT  CHR$(11): GOTO 2400
  246. 2460 FL = 0:UT = 0
  247. 2470  POKE 216,0: ONERR  GOTO 2480
  248. 2480 UT = UT +1: IF UT = 5  THEN 2510
  249. 2490  PRINT  CHR$(4)"DELETE "UT$(UT);DY$
  250. 2500  GOTO 2480
  251. 2510  POKE 216,0: ONERR  GOTO 2680
  252. 2520  IF YR = 1  THEN YR = 0: PRINT  CHR$(4)"DELETE YEARS": GOTO 200
  253. 2530 EF = 4: PRINT  CHR$(4)"OPEN YEARS,L5": PRINT  CHR$(4)"WRITE YEARS,R0": PRINT YR -1
  254. 2540  GOSUB 2600
  255. 2550  FOR I = 1 TO YR -1
  256. 2560  PRINT  CHR$(4)"WRITE YEARS,R"I: PRINT YR$(I)
  257. 2570  NEXT : PRINT  CHR$(4)"CLOSE"
  258. 2580  GOTO 200
  259. 2590  REM  SORT YEARS
  260. 2600  FOR I = 1 TO YR -1
  261. 2610  FOR J = I +1 TO YR
  262. 2620  IF YR$(I) < = YR$(J)  THEN 2640
  263. 2630 T$ = YR$(I):YR$(I) = YR$(J):YR$(J) = T$
  264. 2640  NEXT J
  265. 2650  NEXT I
  266. 2660  RETURN 
  267. 2670  REM  ERROR HANDLING ROUTINE
  268. 2680 ER =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256: CALL  -3288
  269. 2690  IF ER = 6  AND EF = 1  THEN 1950: REM    CREATE A FILE
  270. 2700  TEXT : HOME : VTAB 12
  271. 2710  IF ER = 255  AND  LEN(YR$) <4  THEN 250
  272. 2720  IF ER = 255  THEN  GOTO 380
  273. 2730  IF ER = 8  THEN  HOME : VTAB 12: PRINT "A disk error has occurred. Please check drive door and disk. Press RETURN to    retry.";: INPUT "";YN$: HOME : ON EF GOTO 200,2040,2140,2530
  274. 2740  IF ER = 22  THEN 250
  275. 2750  PRINT "An error has occurred in line ";EL;". The error code is ";ER;".": PRINT "Please refer to your manual.": END 
  276. 2760  TEXT : HOME : VTAB 12: PRINT "SORRY, THIS PROGRAM WAS DESIGNED TO WORK ONLY ON AN APPLE //C OR 80-COL. //E.": END