home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29a.dsk / OCTOBER.1986 / NIBBLE.BANKER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  24KB  |  315 lines

  1. 10  REM  **********************
  2. 20  REM  * NIBBLE.BANKER      *
  3. 30  REM  * BY ROBERT DEVINE   *
  4. 40  REM  * COPYRIGHT (C) 1986 *
  5. 50  REM  * BY MICROSPARC, INC.*
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  GOTO 850
  9. 90  VTAB GV: POKE 36,GH: PRINT GG$;: GOSUB 100: RETURN 
  10. 100  INVERSE : PRINT GP$;: NORMAL 
  11. 110  WAIT  -16384,128:GX$ =  CHR$( PEEK( -16384) -128): POKE  -16368,0
  12. 120 GL = GH + LEN(GG$): POKE 36,GL: PRINT " ";: POKE 36,GL
  13. 130  RETURN 
  14. 140  REM  INPUT SUBROUTINE
  15. 150  READ MX:MZ = 0: HOME : VTAB 23: PRINT " <RETURN> TO ACCEPT": POKE 35,22: ONERR  GOTO 3060
  16. 160  FOR MM = 1 TO MX
  17. 170 MAX = 19
  18. 180  IF MM = 1  THEN MAX = 7
  19. 190  IF MM = 2  THEN MAX = 8
  20. 200  IF MM = 6  THEN MAX = 4
  21. 210  READ VV: READ HH: READ QQ$: READ QC$
  22. 220 QB$ = RR$(MM): IF QB$ = ""  THEN QB$ = QC$
  23. 230 GP$ =  LEFT$(QB$,1): IF GP$ = ""  THEN GP$ = " "
  24. 240  POKE  -16368,0: GOSUB 320:RR$(MM) = QB$: GOSUB 550: IF MZ  THEN  PRINT  CHR$(7);:HH = 29: GOTO 230
  25. 250  NEXT 
  26. 260  IF MM = 8  AND NR >0  THEN RR$(1) = N$(NR -1,1):RR$(5) = "0": GOTO 310
  27. 270  IF MM = 8  AND NR <1  THEN  GOTO 310
  28. 280  POKE 35,24: VTAB 22: PRINT : CALL  -868: PRINT "OK? (Y/N) ";: GET CH$: IF CH$ = "Y"  OR CH$ =  CHR$(121)  THEN 310
  29. 290  IF CH$ < >"N"  AND CH$ < > CHR$(110)  THEN  PRINT  CHR$(7);: GOTO 260
  30. 300  RESTORE : READ MX: HOME : GOTO 160
  31. 310  RETURN 
  32. 320  VTAB VV: POKE 36,1: PRINT QQ$: CALL  -958:
  33. 330  VTAB VV: POKE 36,HH: PRINT ":"QB$;:HH = HH +1: POKE 36,HH
  34. 340 GV = VV:GH = HH:GG$ = "": GOSUB 90:QA$ = GX$: IF  ASC(QA$) >31  AND  ASC(QA$) <127  THEN  PRINT QA$;:HH = HH +1
  35. 350  IF QA$ =  CHR$(27)  THEN MM = 7: RETURN 
  36. 360  IF QA$ =  CHR$(13)  THEN  POKE 36,HH: PRINT QB$: RETURN 
  37. 370  IF  ASC(QA$) <32  OR  ASC(QA$) >122  AND QA$ < > CHR$(13)  THEN  PRINT  CHR$(7):HH = HH -1: GOTO 320
  38. 380 QB$ = QA$: CALL  -868
  39. 390 GP$ = " "
  40. 400 GH = HH:GV = VV:GG$ = ""
  41. 410  GOSUB 90:QA$ = GX$: IF  ASC(QA$) >31  AND  ASC(QA$) <127  OR  ASC(QA$) = 13  THEN  PRINT QA$;:HH = HH +1
  42. 420  IF QA$ =  CHR$(13)  THEN  GOTO 480
  43. 430  IF QA$ =  CHR$(8)  OR QA$ =  CHR$(127)  THEN  GOSUB 490: GOTO 400
  44. 440  IF QA$ =  CHR$(27)  THEN  GOTO 520
  45. 450  IF  ASC(QA$) <32  THEN  VTAB VV: PRINT  CHR$(7);: GOTO 400
  46. 460  IF  LEN(QB$) <MAX  THEN QB$ = QB$ +QA$: GOTO 400
  47. 470  PRINT  CHR$(7);:HH = HH -1: GOTO 400
  48. 480  RETURN 
  49. 490  IF QB$ = ""  THEN  POKE 36,HH: RETURN 
  50. 500  IF  LEN(QB$) >1  THEN QB$ =  LEFT$(QB$, LEN(QB$) -1):HH = HH -1: POKE 36,HH: PRINT " ";: POKE 36,HH: RETURN 
  51. 510 QB$ = "":HH = HH -1: POKE 36,HH: PRINT " ";: POKE 36,HH: RETURN 
  52. 520  IF HH = 30  THEN MM = 7: RETURN 
  53. 530 QB$ = "":HH = 30: POKE 36,HH: CALL  -868: GOTO 400
  54. 540  REM  *** PUT DATA CHECKS HERE **
  55. 550 MZ = 0
  56. 560  IF MM < >1  THEN 590
  57. 570  IF  LEN(RR$(1)) >7  THEN MZ = 1
  58. 580  RETURN 
  59. 590  IF MM < >2  THEN 620
  60. 600  GOSUB 780: IF  LEN(RR$(2)) >8  THEN MZ = 1
  61. 610  RETURN 
  62. 620  IF MM < >3  THEN 650
  63. 630  IF  LEN(RR$(3)) >19  THEN MZ = 1
  64. 640  RETURN 
  65. 650  IF MM < >4  THEN 680
  66. 660  IF  LEN(RR$(4)) >19  THEN MZ = 1
  67. 670  RETURN 
  68. 680  IF MM < >5  THEN 730
  69. 690  IF  VAL(RR$(5)) <.01  OR  VAL(RR$(5)) >999999  THEN MZ = 1: REM  6 9'S
  70. 700 ZZ = 0: FOR X =  LEN(RR$(5)) TO 1  STEP  -1: IF  MID$ (RR$(5),X,1) = "."  THEN ZZ =  LEN(RR$(5)) -X
  71. 710  NEXT : IF ZZ < >0  AND ZZ < >2  THEN MZ = 1
  72. 720  RETURN 
  73. 730  IF MM < >6  THEN 750
  74. 740  IF  LEN(RR$(6)) >4  THEN MZ = 1
  75. 750  RETURN 
  76. 760  DATA  6,10,29 ,CHECK#,,11,29,DATE (MM/DD/YY),,12,29,PAID TO,,13,29,DESCRIPTION,
  77. 770  DATA  14,29,AMOUNT,"0",15,29,CODE,
  78. 780  IF  MID$ (RR$(2),2,1) = "/"  AND  LEFT$(RR$(2),1) <":"  AND  LEFT$(RR$(2),1) >"/"  THEN RR$(2) = "0" +RR$(2)
  79. 790  IF  MID$ (RR$(2),5,1) = "/"  AND  MID$ (RR$(2),4,1) <":"  AND  MID$ (RR$(2),4,1) >"/"  THEN RR$(2) =  LEFT$(RR$(2),3) +"0" + RIGHT$(RR$(2),4)
  80. 800  IF  MID$ (RR$(2),3,1) < >"/"  OR  MID$ (RR$(2),6,1) < >"/"  THEN  GOSUB 840: RETURN 
  81. 810  IF  VAL( LEFT$(RR$(2),2)) >12  OR  VAL( LEFT$(RR$(2),2)) <1  THEN  GOSUB 840: RETURN 
  82. 820  IF  VAL( MID$ (RR$(2),4,2)) >31  OR  VAL( MID$ (RR$(2),4,2)) <1  THEN  GOSUB 840: RETURN 
  83. 830  RETURN 
  84. 840 MZ = 1: RETURN 
  85. 850 A$ = "Z":RC = 1: DIM RR$(7):PQ = 0: DIM N$(400,6),R(400): ONERR  GOTO 3060
  86. 860 F$(0) = "RECORD #":F$(1) = "CHECK #":F$(2) = "DATE ":F$(3) = "PAID TO":F$(4) = "DESCRIPTION ":F$(5) = "AMOUNT ":F$(6) = "CODE ":F$(7) = "MASTER SORT":D$ =  CHR$(4): GOTO 1080
  87. 870 VV = R:QC$ = I$:RR$(1) = "": GOSUB 320
  88. 880  IF  LEN(RR$(1)) >L  THEN  PRINT  CHR$(7);: GOTO 870
  89. 890 I$ = RR$(1): RETURN 
  90. 900  VTAB R: POKE 36,CC -1:GG$ = "":GV = R:GH = CC -1:GP$ = " ": GOSUB 90:IN$ = GX$: IF  ASC(IN$) >127  THEN 980
  91. 910  IF  ASC(IN$) = 127  OR  ASC(IN$) = 8  THEN 960
  92. 920  ON ( ASC(IN$) = 27) GOTO 870: ON ( ASC(IN$) = 13) GOTO 950: IF  ASC(IN$) <32  OR  ASC(IN$) = 44  OR  ASC(IN$) = 58  OR  ASC(IN$) = 34  THEN 980
  93. 930  IF LC = L  THEN 980
  94. 940 LC = LC +1:II$ = II$ +IN$:CC = CC +1: PRINT IN$: GOTO 900
  95. 950 I$ = II$: RETURN 
  96. 960 I$ = "": VTAB R: POKE 36,C: CALL  -868: CALL  -198: GOTO 870
  97. 970 CC = CC -1:LC = LC -1:II$ =  LEFT$(II$,LC): POKE 36,CC: PRINT " ": RETURN 
  98. 980  CALL  -198: GOTO 900
  99. 990  VTAB 21: PRINT "PRESENT ACCOUNT BALANCE IS $ ";: GOSUB 1000: PRINT PB$:RC = 0: RETURN 
  100. 1000  ON (RC = 0) GOTO 1010:PB =  VAL(SB$): FOR X = 1 TO NR:PB = PB - VAL(N$(X,5)): NEXT X
  101. 1010 Y = 0:PB =  INT((PB +.0051) *100)/100:PB$ =  STR$(PB): FOR M = 1 TO  LEN(PB$): IF  MID$ (PB$,M,1) = "."  THEN Y = M
  102. 1020  NEXT : IF Y = 0  THEN PB$ = PB$ +".00": RETURN 
  103. 1030  IF  LEN(PB$) = Y +2  THEN  RETURN 
  104. 1040 PB$ = PB$ +"0": RETURN 
  105. 1050  ON ( PEEK(222) = 6) GOTO 1160: PRINT D$"CLOSE": HOME : ON ( PEEK(222) <4  AND  PEEK(222) >21) GOTO 1190
  106. 1060  VTAB 10: POKE 36,15: PRINT "AN ERROR OCCURRED WHILE READING OR SAVING RECORDS": PRINT 
  107. 1070  POKE 36,14: PRINT "CHECK DISK DRIVE OR INVALID FILE NAME AND TRY AGAIN": PRINT : PRINT "PRESS <RETURN> TO CONTINUE ";: GET Q$: PRINT : ON A$ = "Z" GOTO 1080: GOTO 1190
  108. 1080  PRINT D$"PR#3": PRINT : HOME : PRINT "NIBBLE BANKER": PRINT "BY ROBERT R. DEVINE": PRINT "COPYRIGHT 1986 BY MICROSPARC, INC."
  109. 1090  FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT : PRINT : PRINT : PRINT : PRINT 
  110. 1100  PRINT "ENTER 1 OR 2 TO SEE CATALOG OF DISK IN THAT DRIVE": PRINT : PRINT "ENTER NAME OF ACCOUNT TO LOAD OR CREATE: ";
  111. 1110  INPUT FILE$:F =  VAL(FILE$): IF F = 1  OR F = 2  THEN  HOME : PRINT D$"CATALOG,D"F: GOTO 1100
  112. 1120  IF  LEN(FILE$) <1  THEN  GOTO 1080
  113. 1130  IF FILE$ =  CHR$(27)  THEN  TEXT : HOME : END 
  114. 1140  ONERR  GOTO 1160
  115. 1150  PRINT D$"VERIFY "FILE$: HOME : VTAB 10: POKE 36,25: PRINT "LOADING "FILE$" RECORDS FILE":A$ = "": POKE 216,0: GOTO 1320
  116. 1160  IF  PEEK(222) < >6  THEN  GOTO 3060
  117. 1170  HOME : VTAB 10: POKE 36,25: PRINT "DID NOT FIND "FILE$" ON DISK": PRINT : POKE 36,20: PRINT "DO YOU WANT TO START A NEW FILE (Y/N) ? ";: GET Q$: PRINT Q$: IF Q$ < >"Y"  AND Q$ < > CHR$(121)  THEN  GOTO 1080
  118. 1180 NF$ = "N": GOTO 1190
  119. 1190  HOME : PRINT "CURRENT FILE IS: "FILE$;: POKE 36,60: PRINT "<ESC> TO QUIT": FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT 
  120. 1200  VTAB 3: PRINT "THERE ARE "NR" RECORDS ON FILE": PRINT : PRINT "SELECT FROM:": PRINT 
  121. 1210  ONERR  GOTO 3060
  122. 1220 L(1) = 8:L(2) = 8:L(3) = 19:L(4) = 15:L(5) = 8:L(6) = 6:L(0) = 3
  123. 1230  PRINT "A. SAVE FILE TO DISK": PRINT "B. SORT FILE": PRINT "C. PRINT REPORT": PRINT "D. VIEW SPECIFIC RECORDS": PRINT "E. ENTER NEW RECORDS"
  124. 1240  PRINT "F. MAKE CHANGES TO RECORDS": PRINT "G. SET STARTING BALANCE": PRINT "H. SELECT A DIFFERENT ACCOUNT": PRINT : GOSUB 990
  125. 1250  PRINT ::GV = 23:GG$ = "SELECT OPTION: ":GH = 1:GP$ = " ": GOSUB 90:Q$ = GX$
  126. 1260  IF Q$ =  CHR$(27)  THEN 3030
  127. 1270  IF  ASC(Q$) >96  THEN QV =  ASC(Q$):QV = QV -32:Q$ =  CHR$(QV)
  128. 1280  ON (Q$ <"A"  OR Q$ >"H"  OR  LEN(Q$) = 0) GOTO 1250:A =  ASC(Q$) -64: PRINT Q$
  129. 1290  ON (NR >0) GOTO 1310: IF A = 5  OR A > = 7  THEN 1310
  130. 1300  VTAB 22: INVERSE : PRINT " YOU MUST READ OR ENTER RECORDS FIRST ": NORMAL : PRINT "PRESS <RETURN> TO CONTINUE";: GET Q$: PRINT : VTAB 21: CALL  -958: GOSUB 990: GOTO 1250
  131. 1310  ON A GOTO 1340,1400,1640,1930,2490,2660,2930,3020,3030: GOTO 1250
  132. 1320  ONERR  GOTO 3060
  133. 1330  PRINT D$"OPEN "FILE$: PRINT D$"READ "FILE$: INPUT NR: FOR X = 1 TO NR: FOR Y = 1 TO 6: INPUT N$(X,Y): NEXT Y,X: INPUT SB$: PRINT D$"CLOSE": GOTO 1190
  134. 1340  HOME : VTAB 10: POKE 36,32: PRINT "*** WARNING ***": PRINT : POKE 36,20: PRINT "<S>AVE WILL WRITE OVER YOUR OLD RECORDS.": POKE 36,28: PRINT "DO YOU WANT TO DO THIS ?";: GET A$: PRINT A$: IF A$ < >"Y"  AND A$ < > CHR$(121)  THEN  GOTO 1190
  135. 1350  IF NF$ = "N"  THEN 1380
  136. 1360 PQ = 1: PRINT D$"OPEN "FILE$: PRINT D$"READ "FILE$: INPUT Y: PRINT D$"CLOSE": HOME : VTAB 10: IF Y < = NR  THEN 1380
  137. 1370  POKE 36,24: PRINT "YOU ARE ABOUT TO LOSE "Y -NR" RECORDS": PRINT : POKE 36,20: PRINT "DO YOU STILL WANT TO SAVE YOUR RECORDS ?";: GET Q$: IF Q$ < >"Y"  AND Q$ < > CHR$(121)  THEN PQ = 0: GOTO 1190
  138. 1380  HOME : VTAB 10: POKE 36,29:PQ = 1: PRINT "SAVING RECORDS TO DISK": PRINT D$"OPEN "FILE$: PRINT D$"WRITE "FILE$
  139. 1390  PRINT NR: FOR X = 1 TO NR: FOR Y = 1 TO 6: PRINT N$(X,Y): NEXT Y,X: PRINT SB$: PRINT D$"CLOSE":PQ = 0: GOTO 1190
  140. 1400  HOME : PRINT "SORT RECORDS MENU";: POKE 36,60: PRINT "<ESC> FOR MAIN MENU": FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT 
  141. 1410  VTAB 4: PRINT "FIELD DESCRIPTIONS:": PRINT : PRINT : PRINT "A. CHECK #": PRINT "B. DATE": PRINT "C. PAID TO...":
  142. 1420  PRINT "D. DESCRIPTION": PRINT "E. AMOUNT": PRINT "F. CODE": PRINT "G. ** MASTER SORT **": PRINT : PRINT 
  143. 1430 GV = 17:GH = 1:GG$ = "SELECT FIELD: ":GP$ = " ": GOSUB 90:Q$ = GX$: IF Q$ =  CHR$(27)  THEN 1190
  144. 1440  IF  ASC(Q$) >96  THEN QV =  ASC(Q$):QV = QV -32:Q$ =  CHR$(QV)
  145. 1450  IF Q$ <"A"  OR Q$ >"G"  THEN  PRINT : GOTO 1430
  146. 1460 S =  ASC(Q$) -64: ON (S = 8) GOTO 1190: PRINT F$(S)
  147. 1470  PRINT : PRINT "***** SORTING *****": PRINT 
  148. 1480 C = NR
  149. 1490  IF S = 2  THEN  FOR X = 1 TO NR:N$(X,2) =  RIGHT$(N$(X,2),2) + LEFT$(N$(X,2),6): VTAB 20: POKE 36,8: PRINT " * ": NEXT 
  150. 1500 C =  INT(C/3) +1: FOR A = 1 TO NR -C: VTAB 20: POKE 36,8: PRINT "* *"
  151. 1510  IF (S = 1  OR S = 5)  THEN  ON ( VAL(N$(A,S)) < =  VAL(N$(A +C,S))) GOTO 1600: GOTO 1540
  152. 1520  IF S <7  THEN  ON (N$(A,S) < = N$(A +C,S)) GOTO 1600: GOTO 1540
  153. 1530  IF N$(A,6) +N$(A,3) +N$(A,4) < = N$(A +C,6) +N$(A +C,3) +N$(A +C,4)  THEN 1600
  154. 1540  FOR J = 1 TO 6:T$(J) = N$(A +C,J): NEXT J:B = A
  155. 1550  FOR J = 1 TO 6:N$(B +C,J) = N$(B,J): NEXT J:B = B -C: IF B < = 0  THEN 1590
  156. 1560  IF (S = 1  OR S = 5)  THEN  ON ( VAL(T$(S)) < VAL(N$(B,S))) GOTO 1550: GOTO 1590
  157. 1570  IF S <7  THEN  ON (T$(S) <N$(B,S)) GOTO 1550: GOTO 1590
  158. 1580  IF T$(6) +T$(3) +T$(4) <N$(B,6) +N$(B,3) +N$(B,4)  THEN 1550
  159. 1590  FOR J = 1 TO 6:N$(B +C,J) = T$(J): NEXT J
  160. 1600  VTAB 20: POKE 36,8: PRINT " * ": NEXT A: IF C >1  THEN 1500
  161. 1610  PRINT : IF Q$ = "Y"  OR Q$ =  CHR$(121)  THEN  GOTO 1670
  162. 1620  IF S = 2  THEN  FOR X = 1 TO NR:N$(X,2) =  RIGHT$(N$(X,2),6) + LEFT$(N$(X,2),2): VTAB 20: POKE 36,8: PRINT " * ": NEXT 
  163. 1630  GOTO 1190
  164. 1640  HOME : VTAB 10: POKE 36,17: PRINT "DO YOU WANT *** MASTER SORT *** FIRST (Y/N) ?";: GET Q$: IF Q$ < >"Y"  AND Q$ < >"N"  AND Q$ < > CHR$(121)  AND Q$ < > CHR$(110)  THEN  GOTO 1640
  165. 1650  IF Q$ = "N"  OR Q$ =  CHR$(110)  THEN  GOTO 1670
  166. 1660 S = 7: HOME : VTAB 10: GOTO 1470
  167. 1670  HOME : PRINT :TD = 0:TE = 0: VTAB 10: POKE 36,29: PRINT "<Q> QUIT PRINTING": PRINT : POKE 36,18: PRINT "<SPACE> PAUSE - ANOTHER KEY TO CONTINUE": PRINT : POKE 36,11: PRINT "<I>MAGEWRITER, <E>PSON, <S>CREEN OR <R>ETURN - MAIN MENU";: GET Q$: PRINT Q$
  168. 1680  IF  ASC(Q$) >96  THEN QV =  ASC(Q$):QV = QV -32:Q$ =  CHR$(QV)
  169. 1690  ON (Q$ < >"I"  AND Q$ < >"E"  AND Q$ < >"S"  AND Q$ < >"R") GOTO 1670: ON Q$ = "R" GOTO 1190: IF Q$ < >"S"  THEN  HOME : POKE 35,0: PRINT  CHR$(12); CHR$(21): GOTO 1710
  170. 1700  HOME : PRINT FILE$" EXPENSE REPORT": GOSUB 1750: GOTO 1810
  171. 1710  PRINT D$"PR#1": PRINT  CHR$(9)"80N": GOSUB 1730:CT = 0: GOTO 1810
  172. 1720  PRINT  CHR$(12)
  173. 1730  IF Q$ = "I"  THEN  PRINT  CHR$(27)"N"FILE$" EXPENSE REPORT": PRINT : GOTO 1750: REM  FOR IMAGEWRITER
  174. 1740  PRINT  CHR$(14)FILE$" EXPENSE REPORT" CHR$(20): PRINT : REM  FOR EPSON
  175. 1750  PRINT "REC   CHECK#   MO/DA     PAID TO ...         DESCRIPTION         AMOUNT  CODE": FOR Y = 1 TO 79: PRINT "=";: NEXT : PRINT : IF Q$ = "S"  THEN  POKE 34,3: REM  3/3/5/9/9/2 SPACES
  176. 1760  RETURN 
  177. 1770  POKE 36,63: PRINT "========":PB = TL: GOSUB 1010: POKE 36,71 - LEN(PB$): REM  8 SPACES
  178. 1780  IF N$(X,1) = "DEPST"  OR N$(X,1) = "depst"  THEN PB$ = " " + RIGHT$(PB$,( LEN(PB$) -1)) +"+"
  179. 1790  PRINT PB$: PRINT :CT = CT +3: IF  SGN(TL) =  -1  THEN TD = TD +TL:TL = 0: RETURN 
  180. 1800 TE = TE +TL:TL = 0: RETURN 
  181. 1810 TL = 0: FOR X = 1 TO NR
  182. 1820 SP =  PEEK( -16384): POKE  -16368,0: ON (SP = 32) GOTO 1820
  183. 1830  IF SP = 81  THEN  PRINT D$"PR#3": HOME : VTAB 10: POKE 36,29: PRINT "REPORT CANCELLED BY USER": PRINT : POKE 36,27: PRINT "PRESS <RETURN> TO CONTINUE";: GET Q$: PRINT : TEXT :RC = 1: GOTO 1190
  184. 1840  IF CT > = 55  AND (Q$ < >"S")  THEN CT = 0: GOSUB 1720
  185. 1850  PRINT X;: POKE 36,6: PRINT N$(X,1);: POKE 36,15: PRINT N$(X,2);: POKE 36,25: PRINT N$(X,3);
  186. 1860  POKE 36,45: PRINT N$(X,4);:PB =  VAL(N$(X,5)): GOSUB 1010: POKE 36,71 - LEN(PB$)
  187. 1870  IF N$(X,1) = "DEPST"  OR N$(X,1) = "depst"  THEN PB$ = " " + RIGHT$(PB$,( LEN(PB$) -1)) +"+"
  188. 1880  PRINT PB$;: POKE 36,73: PRINT N$(X,6):CT = CT +1
  189. 1890 TL = TL + VAL(N$(X,5)): IF N$(X,6) < >N$(X +1,6)  THEN  GOSUB 1770
  190. 1900  NEXT X: FOR X = 1 TO 79: PRINT "=";: NEXT : PRINT : PRINT "TOTAL DEPOSITS ARE $ ";:PB =  -1 *TD: GOSUB 1010: POKE 36,29 - LEN(PB$): PRINT PB$: PRINT "TOTAL EXPENSES ARE $ ";:PB = TE: GOSUB 1010: POKE 36,29 - LEN(PB$): PRINT PB$
  191. 1910 RC = 1: IF Q$ = "S"  THEN  PRINT "PRESS <RETURN> TO CONTINUE";: GET Q$: PRINT : TEXT : HOME : GOTO 1190
  192. 1920  POKE 35,24: PRINT  CHR$(12): PRINT D$"PR#0": PRINT D$"PR#3": PRINT : GOTO 1190: REM  FOR PRINTERS
  193. 1930  HOME :TL = 0:A$ = "":A = 0:B = 0:A1$ = "":B1$ = "":I$ = ""
  194. 1940  PRINT : PRINT "VIEW RECORDS MENU";: POKE 36,60: PRINT "<ESC> FOR MAIN MENU": FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT 
  195. 1950  PRINT : FOR X = 0 TO 6: POKE 36,1: PRINT  CHR$(X +65)". "F$(X): NEXT 
  196. 1960 L(3) = 14:L(4) = 10
  197. 1970  PRINT :GV = 13:GH = 1:GG$ = "SELECT CATEGORY (A-G) ":GP$ = " ": GOSUB 90
  198. 1980 Q$ = GX$: IF  ASC(Q$) >96  THEN QV =  ASC(Q$):QV = QV -32:Q$ =  CHR$(QV)
  199. 1990  ON (Q$ =  CHR$(27)) GOTO 1190: ON (Q$ <"A"  OR Q$ >"G") GOTO 1970: PRINT Q$:A =  ASC(Q$) -65
  200. 2000  IF A = 7  THEN 1190
  201. 2010  PRINT : VTAB 15: POKE 36,1:QQ$ = "MATCH WHICH " +F$(A) +"?":R = 15:HH = 29:L = L(A):QB$ = "ALL":GP$ = "A":MM = 0:MAX = 19: GOSUB 870:I$ = QB$: IF MM = 7  THEN 1190
  202. 2020  PRINT :A1$ = I$: ON ( LEN(I$) = 0) GOTO 2010: ON (I$ = "ALL") GOTO 2110:I$ = "": IF A = 0  AND  VAL(A1$) >NR  THEN 2010
  203. 2030  PRINT :GV = 17:GH = 1:GG$ = "AND SECOND CATEGORY (Y/N)? ": GOSUB 90:A$ = GX$: ON (A$ =  CHR$(27)) GOTO 1190
  204. 2040  IF A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(121)  AND A$ < > CHR$(110)  THEN  GOTO 2030
  205. 2050  PRINT A$: IF A$ = "N"  OR A$ =  CHR$(110)  THEN 2110
  206. 2060  PRINT :GV = 19:GH = 1:GG$ = "SELECT CATEGORY (A-G) ": GOSUB 90
  207. 2070 Q$ = GX$: IF  ASC(Q$) >96  THEN QV =  ASC(Q$):QV = QV -32:Q$ =  CHR$(QV)
  208. 2080  ON (Q$ =  CHR$(27)) GOTO 1190: ON (Q$ <"A"  OR Q$ >"G") GOTO 2060:B =  ASC(Q$) -65: PRINT Q$
  209. 2090  PRINT : VTAB 21: POKE 36,1:QQ$ = "MATCH WHICH " +F$(B):R = 21:HH = 29:QB$ = " ":GP$ = " ":MM = 0:MAX = 19: GOSUB 870:I$ = QB$: IF MM = 7  THEN 1190
  210. 2100  PRINT :B1$ = I$: ON ( LEN(I$) = 0) GOTO 2090:I$ = "": IF B = 0  AND  VAL(B1$) >NR  THEN 2090
  211. 2110  PRINT : VTAB 23: POKE 36,1: PRINT "OK? (Y/N)";: GET M$: PRINT M$
  212. 2120  IF M$ < >"Y"  AND M$ < > CHR$(121)  THEN  GOTO 1930
  213. 2130  HOME : VTAB 10: POKE 36,26: PRINT "PRESS <Q> TO QUIT PRINTING": PRINT : POKE 36,15: PRINT "PRESS <SPACE> TO PAUSE - ANY OTHER KEY TO CONTINUE"
  214. 2140  PRINT : POKE 36,17: PRINT "<S>CREEN, <P>RINTER OR <R>ETURN TO MAIN MENU ? ";: GET Q$: PRINT : IF Q$ < >"S"  AND Q$ < >"P"  AND Q$ < >"R"  THEN  GOTO 2130
  215. 2150  IF  ASC(Q$) >96  THEN QV =  ASC(Q$):QV = QV -32:Q$ =  CHR$(QV)
  216. 2160  IF Q$ = "P"  THEN  PRINT D$"PR#1": PRINT  CHR$(9)"80N": GOSUB 2180: GOTO 2280
  217. 2170  ON (Q$ = "R") GOTO 1190: ON (Q$ < >"S") GOTO 2140: GOSUB 2180: GOTO 2280
  218. 2180  HOME : PRINT "SELECTION: "F$(A);
  219. 2190  IF (A = B)  AND (A$ = "N"  OR A$ =  CHR$(110))  THEN 2230
  220. 2200  IF A1$ = "ALL" GOTO 2230
  221. 2210  IF A = B  THEN  PRINT ">= "A1$;: IF (A$ < >"Y"  AND A$ < > CHR$(121)) GOTO 2260
  222. 2220  IF A = B  THEN  GOTO 2240
  223. 2230  PRINT "= "A1$;: ON (A$ = "Y"  OR A$ =  CHR$(121)) GOTO 2240: PRINT : GOTO 2260
  224. 2240  PRINT "  AND  ";: PRINT F$(B);: IF A = B  THEN  PRINT "<= "B1$: GOTO 2260
  225. 2250  PRINT "= "B1$
  226. 2260  PRINT "REC#";: POKE 36,6: PRINT "CHK#";: POKE 36,15: PRINT "DATE";: POKE 36,25: PRINT "PAID TO...";: POKE 36,45: PRINT "DESCRIPTION";: POKE 36,64: PRINT "AMOUNT";: POKE 36,73: PRINT "CODE"
  227. 2270  FOR M = 0 TO 79: PRINT "=";: NEXT : PRINT : POKE 34,3: RETURN 
  228. 2280  FOR X = 1 TO NR: IF A = 0  AND X =  VAL(A1$)  THEN 2420
  229. 2290 SP =  PEEK( -16384): POKE  -16368,0: ON (SP = 32) GOTO 2290: IF SP = 81  THEN 1820
  230. 2300  IF A = 0  AND (A = B)  AND (X > =  VAL(A1$))  AND (X < =  VAL(B1$))  THEN 2420
  231. 2310  IF A1$ = "ALL"  THEN 2420
  232. 2320  IF A = B  AND (A = 1  OR A = 5)  THEN  ON ( VAL(N$(X,A)) > =  VAL(A1$)  AND  VAL(N$(X,B)) < =  VAL(B1$)) GOTO 2420: GOTO 2340
  233. 2330  IF A = B  AND (A < >0)  THEN  IF  LEFT$(N$(X,A), LEN(A1$)) > = A1$  AND  LEFT$(N$(X,B), LEN(B1$)) < = B1$  THEN 2420
  234. 2340  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN  IF ( LEFT$(N$(X,A), LEN(A1$)) = A1$  AND  LEFT$(N$(X,B), LEN(B1$)) = B1$)  THEN 2420
  235. 2350  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN 2370
  236. 2360  IF  LEFT$(N$(X,A), LEN(A1$)) = A1$  THEN 2420
  237. 2370  NEXT X: FOR X = 1 TO 80: PRINT "=";: NEXT X: PRINT 
  238. 2380 PB = TL * -1: GOSUB 1010: POKE 36,70 - LEN(PB$)
  239. 2390  PRINT PB$:A$ = ""
  240. 2400  IF Q$ = "P"  THEN  PRINT D$"PR#0": PRINT D$"PR#3": HOME : PRINT : VTAB 20
  241. 2410 RC = 1: VTAB 22: POKE 36,27: PRINT "WANT TO SEE MORE RECORDS ?";: GET A$: PRINT A$: ON (A$ < >"Y"  AND A$ < >"N"  AND A$ < > CHR$(121)  AND A$ < > CHR$(110)) GOTO 2410: POKE 34,0: HOME : ON ((A$ = "N"  OR A$ =  CHR$(110))) GOTO 1190: GOTO 1930
  242. 2420 AM =  VAL(N$(X,5)):TL = TL +AM
  243. 2430  PRINT X;: POKE 36,6: PRINT N$(X,1);: POKE 36,15: PRINT N$(X,2);: POKE 36,25: PRINT N$(X,3);: POKE 36,45: PRINT N$(X,4);:PB =  VAL(N$(X,5)): GOSUB 1010: POKE 36,70 - LEN(PB$)
  244. 2440  IF N$(X,1) = "DEPST"  OR N$(X,1) = "depst"  THEN PB$ = " " + RIGHT$(PB$,( LEN(PB$) -1)) +"+"
  245. 2450  PRINT PB$;: POKE 36,73: PRINT N$(X,6)
  246. 2460  IF (X/55 =  INT(X/55))  AND (Q$ < >"S")  THEN  PRINT  CHR$(12): GOSUB 2180
  247. 2470  GOTO 2370
  248. 2480  HOME : VTAB 10: PRINT "<S>CREEN OR <P>RINTER ?";: GET Q$: PRINT : IF Q$ = "P"  THEN  PRINT D$"PR#1": PRINT  CHR$(9)"80N": PRINT  CHR$(27)"N" CHR$(0): GOTO 2180
  249. 2490 HN = 0: FOR X = 1 TO NR +1: IF  VAL(N$(X,1)) >HN  THEN HN =  VAL(N$(X,1))
  250. 2500  NEXT 
  251. 2510  HOME :I$ = "": PRINT "CURRENT FILE IS: "FILE$;: POKE 36,60: PRINT "<ESC> FOR MAIN MENU": FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT 
  252. 2520  VTAB 3: PRINT "THE LAST CHECK ON FILE IS "HN: VTAB 4: PRINT "YOU ARE ENTERING RECORD # "NR +1
  253. 2530 RR$(1) = "": FOR MM = 3 TO 6:RR$(MM) = "": NEXT 
  254. 2540  IF NR > = 225  THEN  VTAB 20: PRINT "YOU ARE LIMITED TO 225 RECORDS": PRINT "SAVE THIS FILE AND BEGIN A NEW ONE": PRINT : PRINT "PRESS <RETURN> TO CONTINUE";: GET Q$: PRINT Q$: GOTO 1190
  255. 2550  GOSUB 1000
  256. 2560  VTAB 7: PRINT "ENTER 'DEPST' AS CHECK # WHEN ENTERING DEPOSITS": IF NR = 0  THEN 2580
  257. 2570  VTAB 5: PRINT "RECORD "NR" IS CHECK # ";N$(NR,1)
  258. 2580  POKE 34,9: RESTORE :MM = 0: GOSUB 150: TEXT 
  259. 2590  FOR R = 1 TO 6:N$(NR +1,R) = RR$(R): NEXT :RR$(1) = "": FOR R = 3 TO 6:RR$(R) = "": NEXT 
  260. 2600  IF N$(NR +1,1) = "DEPST"  OR N$(NR +1,1) = "depst"  THEN N$(NR +1,5) = "-" +N$(NR +1,5): REM  IT'S A DEPOSIT
  261. 2610  IF MM = 8  THEN 1190
  262. 2620 PB = PB - VAL(N$(NR +1,5)): VTAB 21: CALL  -958: VTAB 21: PRINT "NEW ACCOUNT BALANCE $ ";: GOSUB 1010: PRINT PB$
  263. 2630  IF MM = 8  THEN NR = NR -1
  264. 2640 NR = NR +1: VTAB 17: CALL  -868: VTAB 23: PRINT "ENTER MORE RECORDS ? (Y/N)";: GET A$: PRINT : IF A$ = "Y"  OR A$ =  CHR$(121)  THEN 2490
  265. 2650  GOTO 1190
  266. 2660  HOME : PRINT "CHANGE RECORDS MENU";: POKE 36,60: PRINT "<ESC> FOR MAIN MENU": FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT 
  267. 2670  VTAB 7: PRINT "A. CHANGE A RECORD": PRINT "B. DELETE A RECORD"
  268. 2680  VTAB 10: PRINT "USE 'VIEW RECORDS' OPTION IF YOU DON'T KNOW THE RECORD #"
  269. 2690  PRINT :GV = 12:GH = 1:GG$ = "SELECT OPTION: ":GP$ = " ": GOSUB 90:A$ = GX$: IF A$ =  CHR$(27)  THEN 1190
  270. 2700  IF  ASC(A$) >96  THEN QV =  ASC(A$):QV = QV -32:A$ =  CHR$(QV)
  271. 2710  ON (A$ <"A"  OR A$ >"B") GOTO 2690: PRINT A$
  272. 2720 A =  ASC(A$) -64: PRINT : ON A GOTO 2770,2730: GOTO 2690
  273. 2730  INPUT "DELETE WHAT RECORD # ";B$:B =  VAL(B$)
  274. 2740  IF B >NR  THEN  PRINT : POKE 36,23: PRINT "THERE ARE ONLY "NR" RECORDS ON FILE": PRINT : PRINT "PRESS <RETURN> TO CONTINUE ";: GET Q$: PRINT : GOTO 2660
  275. 2750  GOSUB 2800: PRINT "DELETE THIS RECORD (Y/N) ?";: GET Q$: PRINT Q$: IF Q$ < >"Y"  AND Q$ < > CHR$(121)  THEN 2660
  276. 2760  FOR X = B TO NR -1: FOR Y = 1 TO 6:N$(X,Y) = N$(X +1,Y): NEXT Y,X:NR = NR -1: HOME : VTAB 12: PRINT "RECORD # "B" DELETED": PRINT : FOR X = 1 TO 2500: NEXT : GOTO 2660
  277. 2770  INPUT "CHANGE WHAT RECORD # ? ";B$:B =  VAL(B$): ON (B >NR) GOTO 2740: IF B$ =  CHR$(27)  THEN 1190
  278. 2780  GOSUB 2800: POKE 36,1: VTAB 23: PRINT "CHANGE THIS ONE?";: GET CH$: IF CH$ < >"Y"  AND CH$ < > CHR$(121)  THEN 2660
  279. 2790  PRINT : GOTO 2840
  280. 2800  PRINT : FOR A = 1 TO 6: PRINT F$(A);: POKE 36,29
  281. 2810  IF A = 5  AND  VAL(N$(B,A)) <0  THEN QB$ = N$(B,A):QB$ =  RIGHT$(QB$, LEN(QB$) -1): PRINT QB$" ";: GOTO 2830
  282. 2820  PRINT N$(B,A)" ";
  283. 2830  FOR I = 1 TO 19 - LEN(N$(B,A)): PRINT " ";: NEXT I: PRINT : NEXT A: PRINT : RETURN 
  284. 2840  VTAB 15: PRINT : PRINT " ": POKE 36,1: VTAB 16: FOR A = 1 TO 6:R = A +15:I$ = ""
  285. 2850  IF A = 5  AND  VAL(N$(B,A)) <0  THEN HH = 29:L = L(A):QQ$ = FA$(A):QB$ = N$(B,A):QB$ =  RIGHT$(QB$, LEN(QB$) -1): GOTO 2870
  286. 2860 HH = 29:L = L(A):QQ$ = F$(A):QB$ = N$(B,A)
  287. 2870 MM = 0:MAX = 19:GP$ =  LEFT$(QB$,1): GOSUB 870
  288. 2880  IF A = 5  AND  VAL(N$(B,A)) <0  THEN QB$ = "-" +QB$
  289. 2890 N$(B,A) = QB$: IF A = 5  THEN RC = 1
  290. 2900  IF MM = 7  THEN 1190
  291. 2910  NEXT A: PRINT : POKE 36,1: VTAB 23: CALL  -868: PRINT "OK? (Y/N) ";: GET CH$: IF CH$ < >"Y"  AND CH$ < > CHR$(121)  THEN  PRINT : GOTO 2840
  292. 2920  GOTO 2660
  293. 2930  HOME : PRINT "SET STARTING BALANCE";: POKE 36,60: PRINT "<ESC> FOR MAIN MENU": FOR X = 1 TO 78: PRINT "=";: NEXT : PRINT 
  294. 2940  VTAB 23: PRINT "<RETURN> TO ACCEPT": POKE 35,19
  295. 2950 QQ$ = "ENTER NEW STARTING BALANCE $ ":MAX = 9:R = 10:I$ = "":QB$ = SB$:GP$ =  LEFT$(SB$,1):MM = 0:HH = 29:L = 9: GOSUB 870
  296. 2960  IF  VAL(QB$) >999999  OR  VAL(QB$) < -999999  THEN  PRINT  CHR$(7);: GOTO 2950: REM  6 9'S
  297. 2970  IF  LEN(QB$) <1  THEN QB$ = "0": GOTO 3000
  298. 2980 ZZ = 0: FOR X =  LEN(QB$) TO 1  STEP  -1: IF  MID$ (QB$,X,1) = "."  THEN ZZ =  LEN(QB$) -X
  299. 2990  NEXT : IF ZZ < >0  AND ZZ < >2  THEN  PRINT  CHR$(7);: GOTO 2950
  300. 3000 SB$ = QB$: TEXT 
  301. 3010 RC = 1: GOTO 1190
  302. 3020  HOME : VTAB 10: POKE 36,11: PRINT "HAVE YOU SAVED YOUR WORK ON THE "FILE$" CHECKING FILE ?";: GET Q$: PRINT Q$: ON ((Q$ < >"Y"  AND Q$ < > CHR$(121))) GOTO 1190: CLEAR : GOTO 850
  303. 3030  HOME : VTAB 10: POKE 36,11: PRINT "HAVE YOU REMEMBERED TO SAVE ALL OF YOUR WORK TO THE DISK?";: GET A$: IF A$ < >"Y"  AND A$ < > CHR$(121)  THEN 1190
  304. 3040  TEXT : HOME : END 
  305. 3050  REM  ***** STANDARD ERROR HANDLING ROUTINE ****
  306. 3060 ER =  PEEK(222):EL =  PEEK(219) *256 + PEEK(218)
  307. 3070  IF PQ = 1  THEN  CALL  -3288: PRINT  CHR$(7);: GOTO 1340
  308. 3080  IF ER = 3  THEN  PRINT "NO DEVICE CONNECTED": GOTO 3140
  309. 3090  IF ER = 6  THEN  PRINT "FILE NOT FOUND": GOTO 3140
  310. 3100  IF ER = 8  THEN  PRINT "I/O ERROR": GOTO 3140
  311. 3110  IF ER = 16  THEN  PRINT "SYNTAX ERROR IN LINE "EL: GOTO 3140
  312. 3120  IF ER = 255  THEN  RESUME 
  313. 3130  PRINT "UNANTICIPATED ERROR# "ER" IN LINE "EL
  314. 3140  POKE 216,0: PRINT 
  315. 3150  PRINT  CHR$(4)"CLOSE": VTAB 23: PRINT "PRESS <RETURN> TO RESTART";: GET CH$: CALL  -3288: RESTORE : CLEAR : TEXT : HOME : GOTO 850