home *** CD-ROM | disk | FTP | other *** search
Wrap
2 REM ************************* 3 REM ** APPLE T.R.A.C. ** 4 REM ** MICRO-SPARC, INC. ** 5 REM ** P.O. BOX 325 ** 6 REM ** LINCOLN MASS 01773 ** 7 REM ** COPYRIGHT (C) 1981 ** 8 REM ************************* 9 GOTO 10000: REM ** HEADER ROUTINE ** 10 REM ';' PRINTING 11 PRINT SPC( PK -SY)V$; 12 SY = SY +(PK -SY) + LEN(V$) 13 RETURN 15 REM END OF LINE PRINTING 16 PRINT SPC( PK -SY)V$ 17 PK = 0:SY = 0 18 RETURN 22 M = R: REM ** SORT ROUTINE ** 23 M = INT(M/2): IF M = 0 THEN 95 24 J = 1:K = R -M 25 H = J 30 V = H +M 40 IF WK(H,SR) <WK(V,SR) THEN 87 50 FOR F = 1 TO 5 55 TK = WK(H,F):WK(H,F) = WK(V,F):WK(V,F) = TK 70 NEXT 72 T$ = W$(H,6):W$(H,6) = W$(V,6):W$(V,6) = T$ 75 H = H -M 80 IF H <1 THEN 87 85 GOTO 30 87 J = J +1 89 IF J >K THEN 23 91 GOTO 25 95 FLASH : PRINT "SORT COMPLETED": NORMAL 97 RETURN 100 REM ** WRITE ACCOUNTS ON SCREEN ** 105 HOME : HTAB 8: INVERSE : PRINT "* ADD ";F$;" RECORDS *": NORMAL 110 FOR N = 1 TO 12: PRINT N$(N); 120 HTAB 20: PRINT N$(N +12) 130 NEXT N 135 PRINT 140 IF FL = 1 THEN INVERSE : PRINT "1=MC 2=VSA 3=AMEX 4=GAS 5=OTHER" 142 IF FL = 2 THEN INVERSE : PRINT "ENTER CHECK# 999 FOR CASH ENTRY" 145 PRINT "TYPE ACCOUNT#, 'REDO', 'EDIT' OR 'END'": NORMAL 150 PRINT 160 POKE 34, PEEK(37): RETURN 175 RETURN 200 REM ** INPUT DATA ** 202 GOSUB 100 203 I = I +1: NORMAL 204 VTAB 19: CALL -868: PRINT "REC #";I 205 VTAB 20: CALL -868: INVERSE : INPUT "ACCOUNT #";W$(I,1) 207 GOSUB 270 210 IF W$(I,1) = "END" THEN NORMAL :I = I -1: RETURN 214 IF W$(I,1) = "REDO" THEN I = I -1:I = I +(I = 0): GOTO 204 215 IF W$(I,1) = "REDO" THEN I = I -1:I = I +(I = 0): GOTO 204 217 IF W$(I,1) = "EDIT" THEN IS = I: INPUT "RECORD # TO EDIT?";I:W$(IS,1) = "": GOTO 204 220 W = VAL(W$(I,1)): IF W >24 OR W <1 THEN GOSUB 280: GOTO 205 225 VTAB 21: CALL -868: PRINT F$;: INPUT "";W$(I,2) 226 GOSUB 270 227 W = VAL(W$(I,2)): IF FL = 1 AND (W <1 OR W >5) THEN GOSUB 280: GOTO 225 230 VTAB 21: HTAB 25: CALL -868: INPUT "MONTH,DAY:";W$(I,3),W$(I,4) 231 GOSUB 270 232 WM = VAL(W$(I,3)):WD = VAL(W$(I,4)): IF WM >12 OR WD >31 THEN GOSUB 280: GOTO 230 235 VTAB 22: CALL -868: PRINT "PAID TO: ";: NORMAL : PRINT "--------------";: HTAB 10: INPUT "";W$(I,6): INVERSE 236 GOSUB 270: IF W$(I,6) = "" THEN W$(I,6) = " " 237 IF LEN(W$(I,6)) >14 THEN VTAB 23: PRINT "MAX 14 CHARS ALLOWED..PLEASE REENTER": GOTO 235 240 VTAB 22: HTAB 25: CALL -868: INPUT "AMOUNT:";W$(I,5) 241 GOSUB 270: IF LEN(W$(I,5)) = 0 THEN PRINT "": GOTO 240 242 IF ASC(W$(I,5)) <48 OR ASC(W$(I,5)) >57 THEN VTAB 23: PRINT "NOT A NUMBER..PLEASE REENTER": GOTO 240 250 HOME : PRINT "LAST ACCT#";W$(I,1);" CD#";W$(I,2);" DT ";W$(I,3);"/";W$(I,4);" AMT $";W$(I,5) 254 IF IS >0 THEN X = I: GOSUB 1050:I = IS:IS = 0: GOTO 204 255 GOTO 203 270 VTAB 23: CALL -868: RETURN 280 VTAB 23: PRINT "INVALID ENTRY.. PLEASE REENTER": RETURN 800 REM ** PRINT SUMMARY ** 801 YY = T:T = YY *(XX < >0) 805 PRINT D$;"PR#1" 807 PRINT CHR$(9);"100N" 810 PRINT CHR$(2); CHR$(30) 820 PRINT TAB( 25)F$;" SUMMARY REPORT" 825 PRINT TAB( 27)"TODAY'S DATE ";MT;"/";D;"/";Y 827 IF OM = 3 THEN PRINT TAB( 27)"SORTED ";A$ 828 FF$ = RIGHT$(F$,7) 830 PRINT :PK = 1:V$ = "SEQ": GOSUB 10:PK = 12:V$ = "** PAID TO **": GOSUB 10:PK = 28:V$ = "ACC": GOSUB 10:PK = 36:V$ = FF$: GOSUB 10:PK = 44:V$ = "MO": GOSUB 10:PK = 50:V$ = "DAY": GOSUB 10 832 PK = 56:V$ = "AMOUNT": GOSUB 15 835 FOR X = 1 TO 70: PRINT "=";: NEXT X: PRINT 840 FOR X = 1 TO I 845 PK = 1:V$ = STR$(X): GOSUB 10 850 PK = 9:V$ = W$(X,6): GOSUB 10 855 PK = (31 - LEN(W$(X,1))):V$ = W$(X,1): GOSUB 10 860 PK = (41 - LEN(W$(X,2))):V$ = W$(X,2): GOSUB 10 865 PK = (46 - LEN(W$(X,3))):V$ = W$(X,3): GOSUB 10 870 PK = (52 - LEN(W$(X,4))):V$ = W$(X,4): GOSUB 10 875 W = VAL(W$(X,5)) 876 T = T +W: IF FL = 1 THEN CC = VAL(W$(X,2)):CC(CC) = CC(CC) +W: REM ** GRAND TOTAL AND CR CD TOTALS" 877 T = INT(T *100 +.5)/100:CC(CC) = INT(CC(CC) *100 +.5)/100 880 P = W: GOSUB 980 885 V$ = STR$(W):PK = (52 +B -C -1): GOSUB 15 890 NEXT X 892 FOR X = 1 TO 70: PRINT "-";: NEXT X: PRINT 895 P = T: GOSUB 980 900 PK = 1:V$ = " *** TOTAL ***": GOSUB 10:PK = (52 +B -C -1):V$ = STR$(T): GOSUB 15 905 IF FL < >1 THEN 990: REM ** SKIP CR CD SUMMARY ** 907 PRINT : PRINT 910 FOR X = 1 TO 5:P = CC(X): GOSUB 980: PRINT CD$(X);:V$ = STR$(CC(X)):PK = (15 +B -C -1): GOSUB 15: NEXT 960 GOTO 990 980 B = 9:C = (P > = 10) +(P > = 100) +(P > = 1000) +(P > = 10000): RETURN 990 PRINT CHR$(9);"40N": REM CTRL I 40N 995 PRINT D$;"PR#0" 998 IF SW = 1 THEN RETURN 999 TEXT : CLEAR :BU = 1: GOTO 10002: REM ** RETURN TO MENU ** 1000 REM ** ADD TO CURRENT FILE ** 1005 ONERR GOTO 1950 1010 PRINT D$;"OPEN";F$;",L40" 1020 PRINT D$;"READ";F$;",R0" 1025 INPUT R 1035 PRINT D$;"CLOSE";F$ 1040 I = R: GOSUB 200: REM **INPUT** 1045 TEXT 1050 PRINT D$;"OPEN";F$;",L40" 1052 IF IS >0 THEN 1080: REM DIRECT EDIT 1060 PRINT D$;"WRITE";F$;",R0" 1065 PRINT I 1070 FOR X = R +1 TO I 1080 PRINT D$;"WRITE";F$;",R";X 1085 PRINT W$(X,1): PRINT W$(X,2): PRINT W$(X,3): PRINT W$(X,4): PRINT W$(X,5): PRINT W$(X,6) 1087 IF IS >0 THEN 1095 1090 NEXT X 1095 PRINT D$;"CLOSE";F$ 1097 IF IS >0 THEN RETURN 1100 IF SW = 1 THEN RETURN 1105 BU = 1: GOTO 10500: REM ** RETURN TO MAIN MENU 1950 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN 1998 1955 PRINT D$;"CLOSE";F$ 1956 PRINT D$;"OPEN";F$ 1957 PRINT D$;"WRITE";F$;",R0" 1958 PRINT 0 1959 PRINT D$;"CLOSE";F$ 1960 R = 0: GOTO 1040 1998 PRINT "CHECK APPLESOFT MANUAL PG. 136 FOR ERR": PRINT "THE ERROR IS #"; PEEK(222): PRINT "LOCATED IN LINE #"; PEEK(218) + PEEK(219) *256 1999 END 2000 REM ** DELETE RECORDS ** 2001 Z = 0 2005 HOME : VTAB 10: FLASH : PRINT "READING ";F$;" FILE": NORMAL 2010 PRINT D$;"OPEN";F$;",L40" 2020 PRINT D$;"READ";F$;",R0" 2025 INPUT R 2027 IF R = 0 THEN INVERSE : PRINT " NO RECORDS STORED IN ";F$: NORMAL :BZ = 1: GOTO 2050 2030 FOR X = 1 TO R 2035 PRINT D$;"READ";F$;",R";X 2040 INPUT W$(X,1),W$(X,2),W$(X,3),W$(X,4),W$(X,5),W$(X,6) 2045 NEXT X 2050 PRINT D$;"CLOSE";F$ 2055 IF SW = 1 THEN RETURN 2056 ONERR GOTO 2060 2057 PRINT D$;"OPEN POSTED ";F$;",L40" 2058 PRINT D$;"READ POSTED ";F$;",R0" 2059 INPUT R2: GOTO 2065 2060 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN 1998 2061 PRINT D$;"CLOSE POSTED ";F$ 2062 PRINT D$;"OPEN POSTED ";F$;",L40" 2063 PRINT D$;"WRITE POSTED ";F$;",R0" 2064 PRINT 0:R2 = 0 2065 PRINT D$ 2066 HOME : HTAB 8: PRINT "* POST ";F$;" RECORDS *" 2067 PRINT : PRINT "POSTING A RECORD WILL:": PRINT : PRINT " - DELETE RECORD FROM ";F$;" FILE" 2068 PRINT " - ADD AMOUNT TO Y-T-D BALANCES" 2069 PRINT " - WRITE RECORD TO POSTED ";F$;" FILE": PRINT : PRINT 2070 VTAB 15: PRINT "WHICH RECORD # DO YOU WANT TO POST?" 2071 VTAB 16: CALL -868: INVERSE : INPUT "ENTER RECORD # OR TYPE 'END': ";DL$ 2072 IF DL$ = "END" THEN NORMAL : GOTO 2085 2073 DL = VAL(DL$):DL$ = "": IF DL >R THEN VTAB 18: PRINT "NO SUCH RECORD. HIGHEST RECORD IS ";R: GOTO 2070 2074 IF W$(DL,1) = " " AND W$(DL,2) = " " THEN VTAB 18: PRINT "RECORD ALREADY POSTED": GOTO 2070 2075 VTAB 18: CALL -868: PRINT "DELETED: ";W$(DL,6);" $";W$(DL,5) 2076 R2 = R2 +1 2077 PRINT D$;"WRITE POSTED ";F$;",R";R2 2078 PRINT W$(DL,1): PRINT W$(DL,2): PRINT W$(DL,3): PRINT W$(DL,4): PRINT W$(DL,5): PRINT W$(DL,6) 2079 PRINT D$ 2080 Z = Z +1: FOR X = 1 TO 5:W(Z,X) = VAL(W$(DL,X)): NEXT X: REM ** TRANSFER TO WORK AREA ** 2081 W$(DL,1) = " ":W$(DL,2) = " ": REM ** FLAG FOR LATER COMPRESSING ** 2083 GOTO 2071 2085 REM ** COMPRESS FILE ** 2087 N = 0:S = 0 2088 S = S +1 2090 N = N +1 2094 IF N >R THEN 2205 2095 IF W$(N,1) = " " AND W$(N,2) = " " THEN 2090 2200 FOR X = 1 TO 6:W$(S,X) = W$(N,X): NEXT X 2202 GOTO 2088 2205 REM ** WRITE COMPRESSED FILE TO DISK ** 2210 I = S -1:R = 0:SW = 1: GOSUB 1050:SW = 0 2220 REM CLOSE POSTED RECORD FILE 2224 PRINT D$;"WRITE POSTED ";F$;",R0" 2226 PRINT R2 2228 PRINT D$;"CLOSE POSTED ";F$ 2250 REM ** READ YTD BALANCES ** 2255 ONERR GOTO 2500 2257 TEXT : HOME : VTAB 10: FLASH : PRINT "READING YEAR-TO-DATE FILES": NORMAL 2260 PRINT D$;"OPEN BALANCES" 2265 PRINT D$;"READ BALANCES" 2270 FOR X = 1 TO 24: FOR N = 1 TO 12 2275 INPUT BAL(X,N) 2280 NEXT N,X 2285 PRINT D$;"CLOSE BALANCES" 2290 IF SW = 1 THEN RETURN 2300 REM ** UPDATE YTD BALANCES ** 2305 FOR X = 1 TO Z:BAL(W(X,1),W(X,3)) = BAL(W(X,1),W(X,3)) +W(X,5) 2310 NEXT X 2320 PRINT D$;"OPEN BALANCES" 2325 PRINT D$;"WRITE BALANCES" 2330 FOR X = 1 TO 24: FOR N = 1 TO 12 2335 PRINT BAL(X,N) 2340 NEXT N,X 2345 PRINT D$;"CLOSE BALANCES" 2400 REM LIST FILE SUMMARY AFTER POSTING 2410 IF PRTYPE = 1 THEN GOSUB 5100 2420 IF PRTYPE = 2 THEN SW = 1: GOSUB 800:SW = 0 2435 GOTO 10500: REM RETURN TO MAIN MENU 2500 REM ** INITIAL RECORD ** 2505 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN 1998 2510 PRINT D$;"CLOSE BALANCES" 2511 PRINT D$;"OPENBALANCES" 2512 PRINT D$;"WRITEBALANCES,R0" 2513 PRINT 0 2514 PRINT D$;"CLOSEBALANCES" 2515 GOTO 2300 3000 REM ** SORT SETUP ** 3001 H = 0:K = 0:J = 0:V = 0:R = 0:CM = 0:F = 0: REM SORT VARIABLES 3002 FLASH : PRINT "INITIALIZING SORT TABLE": NORMAL 3003 FOR X = 0 TO 150: FOR YY = 0 TO 5:WK(X,YY) = 0: NEXT : NEXT 3005 SW = 1: GOSUB 2000:SW = 0: REM ** READ FILE ** 3010 CALL -936: HTAB 8: PRINT "* SORT ";F$;" RECORDS *" 3015 PRINT : PRINT "WHICH FIELD DO YOU WANT TO SORT ON?" 3020 HTAB 10: PRINT "1 = ACCOUNT NUMBER": HTAB 10: PRINT "2 = CR CARD/CHECK NUMBER": HTAB 10: PRINT "3 = MONTH": HTAB 10: PRINT "4 = DOLLAR AMOUNT" 3025 PRINT : INVERSE : INPUT "ENTER YOUR SELECTION: ";SR: NORMAL 3026 IF SR = 1 THEN A$ = "BY ACCOUNT NUMBER" 3027 IF SR = 2 THEN A$ = "BY CARD/CHECK NUMBER" 3028 IF SR = 3 THEN A$ = "BY MONTH" 3029 IF SR = 4 THEN A$ = "BY DOLLAR AMOUNT":SR = 5 3030 IF SR >5 THEN 3010 3032 FOR X = 1 TO R: FOR N = 1 TO 5:WK(X,N) = VAL(W$(X,N)): NEXT N,X: REM ** CONVERT STRINGS TO DIGITS ** 3035 FLASH : PRINT "SORT IN PROGRESS": NORMAL : GOSUB 22 3040 FOR X = 1 TO R: FOR N = 1 TO 5:W$(X,N) = STR$(WK(X,N)): NEXT N,X 3042 X$ = "":I = R: PRINT "PRINT SORTED LIST ON PRINTER? ": INVERSE : INPUT "ENTER 'Y' OR 'N' :";X$: NORMAL 3043 IF X$ = "Y" AND PRTYPE = 1 THEN GOSUB 5100 3044 IF X$ = "Y" AND PRTYPE = 2 THEN SW = 1: GOSUB 800:SW = 0 3047 R = 0 3050 PRINT "SAVE SORTED LIST ON THE DISK?": INVERSE : INPUT "ENTER 'Y' OR 'N' :";X$: NORMAL : IF X$ = "Y" THEN SW = 1: GOSUB 1050:SW = 0 3051 GOSUB 270 3052 IF X$ = "Y" OR X$ = "N" THEN 3055 3053 GOSUB 280: GOTO 3050 3055 GOTO 10500: REM * RETURN TO MAIN MENU 4000 REM ** REPORT OPTIONS ** 4002 TEXT : HOME 4010 HTAB 12: PRINT "** REPORT OPTIONS **" 4015 PRINT : PRINT "1 = LIST AND TOTAL CREDIT CARD FILE" 4020 PRINT "2 = LIST AND TOTAL CHECK FILE" 4025 PRINT "3 = TREND ANALYSIS & AVERAGE MONTH" 4030 PRINT "4 = YEAR TO DATE SPENDING PROFILE" 4040 PRINT "5 = HI-RES SPENDING GRAPH" 4045 PRINT "6 = LIST POSTED CREDIT CARD FILE" 4047 PRINT "7 = LIST POSTED CHECK FILE" 4050 VTAB 15: INVERSE : INPUT "ENTER SELECTION :";RP: NORMAL 4055 GOSUB 270 4060 IF RP = 1 THEN FL = 1:F$ = "CARD #": GOTO 4100 4062 IF RP = 2 THEN FL = 2:F$ = "CHECK #": GOTO 4100 4064 IF RP = 3 THEN GOTO 4200 4066 IF RP = 4 THEN GOTO 4300 4068 IF RP = 6 THEN FL = 1:F$ = "POSTED CARD #": GOTO 5700 4070 IF RP = 7 THEN FL = 2:F$ = "POSTED CHECK #": GOTO 5700 4075 IF RP < >5 THEN GOSUB 280: GOTO 4050 4080 PRINT D$;"RUN TRAC GRAPH ROUTINE" 4100 REM ** LIST FILE ** 4103 T = 0: FOR X = 0 TO 5:CC(X) = 0: NEXT X: REM INIT RPT VARIABLES 4105 SW = 1: GOSUB 2000:SW = 0: REM ** READ FILE ** 4110 I = R: IF I = 0 THEN VTAB 24: INVERSE : PRINT "NO RECORDS IN ";F$: NORMAL : FOR X = 1 TO 1000: NEXT X: GOTO 4130 4115 IF PRTYPE = 1 THEN GOSUB 5100 4120 IF PRTYPE = 2 THEN SW = 1: GOSUB 800:SW = 0 4130 GOTO 10500: REM RETURN TO MAIN MENU 4200 REM ** TREND ANALYSIS ** 4201 TA = 0:AV(0) = 0:TL(0) = 0: FOR X = 1 TO 12:TL(X) = 0:AV(X) = 0:AV(X +12) = 0: NEXT X: REM INIT RPT VAR 4202 SW = 1: GOSUB 2250: REM ** READ YTD FILE ** 4204 F$ = "CARD #": GOSUB 2000: REM ** READ CARD FILE ** 4205 IF BZ = 1 THEN BZ = 0: GOTO 4208 4206 GOSUB 4390: REM ** ADD CR CDS TO BALANCES ** 4208 F$ = "CHECK #": GOSUB 2000: REM ** READ CHECK FILE ** 4209 IF BZ = 1 THEN BZ = 0: GOTO 4212 4210 GOSUB 4390: REM ** ADD CHECKS TO BALANCES ** 4212 SW = 0: REM ** SHUT OFF SWITCH ** 4215 FOR X = 1 TO 24: FOR N = 1 TO MT:AV(X) = AV(X) +BAL(X,N):TL(N) = TL(N) +BAL(X,N):BAL(X,N) = INT(BAL(X,N) *100 +.5)/100: NEXT N,X: REM *CROSSFOOT & SUM* 4216 FOR X = 1 TO 24:AV(X) = AV(X)/MT:AV(X) = INT(AV(X) *100 +.5)/100:TA = TA +AV(X): IF TL(MT) >0 THEN PC(X,1) = INT((BAL(X,MT) *100)/TL(MT)) 4217 IF TL(MT -1) >0 THEN PC(X,2) = INT((BAL(X,MT -1) *100)/TL(MT -1)) 4218 NEXT X 4219 FOR X = 1 TO 24: IF TA >0 THEN PC(X,3) = INT((AV(X) *100)/TA) 4220 NM$(X) = N$(X): NEXT X 4221 IF PRTYPE = 1 THEN GOTO 5200 4222 PRINT D$;"PR#1" 4223 PRINT CHR$(9);"90N" 4224 IF PQ = 1 THEN PRINT CHR$(2); CHR$(30) 4228 POKE 36,24: PRINT "TREND ANALYSIS FOR THE MONTH OF ** ";MO$(MT);" **": PRINT 4229 XM = 4:XP = 2 4230 PRINT "ACCOUNT DESCR'";: PRINT TAB( 8)"CURR MO";: PRINT TAB( XP)"% TOT";: PRINT TAB( XM)"LAST MO";: PRINT TAB( XP)"% TOT";: PRINT TAB( XM)"AVG MO";: PRINT TAB( XP)"% TOT"; 4232 PRINT TAB( XM)"CUR VS. AVG" 4234 FOR X = 1 TO 80: PRINT "=";: NEXT X: PRINT 4236 FOR X = 1 TO 24 4238 PK = 1:V$ = NM$(X): GOSUB 10: 4239 IF BAL(X,MT) = 0 THEN 4247 4240 P = BAL(X,MT): GOSUB 4295:B = 5 4242 V$ = STR$(BAL(X,MT)):PK = (20 +B -C -1): GOSUB 10 4244 P = PC(X,1): GOSUB 4295:B = 3 4246 V$ = STR$(PC(X,1)) +"%":PK = (30 +B -C -1): GOSUB 10 4247 IF BAL(X,MT -1) = 0 THEN 4255 4248 P = BAL(X,MT -1): GOSUB 4295:B = 5 4250 V$ = STR$(BAL(X,MT -1)):PK = (36 +B -C -1): GOSUB 10 4252 P = PC(X,2): GOSUB 4295:B = 3 4254 V$ = STR$(PC(X,2)) +"%":PK = (46 +B -C -1): GOSUB 10 4255 IF AV(X) = 0 THEN PRINT : GOTO 4270 4256 P = AV(X): GOSUB 4295:B = 5 4258 V$ = STR$(AV(X)):PK = (51 +B -C -1): GOSUB 10 4260 P = PC(X,3): GOSUB 4295:B = 3 4262 V$ = STR$(PC(X,3)) +"%":PK = (61 +B -C -1): GOSUB 10 4264 IF BAL(X,MT) >AV(X) THEN X$ = "ABOVE AVG" 4266 IF BAL(X,MT) <AV(X) THEN X$ = "BELOW AVG" 4268 IF BAL(X,MT) = AV(X) THEN X$ = "EQUALS AVG" 4269 V$ = X$:PK = 70: GOSUB 15 4270 PK = 0:SY = 0: NEXT X 4272 FOR X = 1 TO 80: PRINT "-";: NEXT X: PRINT 4274 PK = 1:V$ = "** TOTALS **": GOSUB 10 4276 P = TL(MT): GOSUB 4295:B = 5:V$ = STR$(TL(MT)):PK = 20 +B -C -1: GOSUB 10 4278 P = TL(MT -1): GOSUB 4295:B = 5:V$ = STR$(TL(MT -1)):PK = 36 +B -C -1: GOSUB 10 4280 P = TA: GOSUB 4295:B = 5:V$ = STR$(TA):PK = 51 +B -C -1: GOSUB 15 4294 GOTO 4395: REM SHUT OFF PRINTER 4295 C = (P > = 10) +(P > = 100) +(P > = 1000) +(P > = 10000): RETURN 4300 REM ** YEAR TO DATE SPENDING ** 4302 FOR X = 1 TO 12:TL(X) = 0: NEXT X: REM INIT RPT VAR 4305 SW = 1: GOSUB 2250: REM ** READ YTD FILE ** 4310 F$ = "CARD #": GOSUB 2000: REM ** READ CARD FILE ** 4313 REM ** ADD CURRENT CARDS TO BALANCE ** 4314 IF BZ = 1 THEN BZ = 0: GOTO 4325 4315 GOSUB 4390 4325 F$ = "CHECK #": GOSUB 2000: REM ** READ CHECK FILE" 4326 IF BZ = 1 THEN BZ = 0: GOTO 4332 4330 GOSUB 4390 4332 SW = 0: REM ** SHUT OFF SWITCH ** 4333 IF PRTYPE = 1 THEN 5500 4335 PRINT D$;"PR#1" 4336 PRINT CHR$(9);"130N" 4337 IF PQ = 1 THEN PRINT CHR$(2); CHR$(31) 4338 IF PQ = 2 THEN PRINT CHR$(27); CHR$(20) 4339 IF PQ = 3 THEN PRINT CHR$(15) 4340 PK = 30:V$ = "YEAR-TO-DATE SPENDING ANALYSIS": GOSUB 15:PK = 35:V$ = "TODAY'S DATE: " + STR$(MT) +"/" + STR$(D) +"/" + STR$(Y): GOSUB 15 4344 XN = 7:XJ = 10 4346 PRINT TAB( 1)"EXPENSE DESCR'";: PRINT TAB( XJ)MO$(1);: PRINT TAB( XN)MO$(2);: PRINT TAB( XN)MO$(3);: PRINT TAB( XN)MO$(4);: PRINT TAB( XN)MO$(5);: PRINT TAB( XN)MO$(6); 4348 PRINT TAB( XN)MO$(7);: PRINT TAB( XN)MO$(8);: PRINT TAB( XN)MO$(9);: PRINT TAB( XN)MO$(10);: PRINT TAB( XN)MO$(11);: PRINT TAB( XN)MO$(12) 4350 FOR X = 1 TO 130: PRINT "=";: NEXT X 4351 PRINT :L = 0 4352 FOR X = 1 TO 24:NM$(X) = N$(X): NEXT X 4354 FOR X = 1 TO 24:PK = 1:V$ = NM$(X): GOSUB 10 4356 FOR N = 1 TO 12: IF BAL(X,N) = 0 THEN 4362 4358 P = BAL(X,N): GOSUB 4295 4360 B = 14:PK = ((N *9) +B -C -1):V$ = STR$(BAL(X,N)): GOSUB 10 4361 TL(N) = TL(N) +BAL(X,N) 4362 NEXT N:PK = 0:SY = 0: PRINT 4364 NEXT X 4366 FOR X = 1 TO 130: PRINT "-";: NEXT X: PRINT 4368 PK = 1:V$ = "** TOTALS ** ": GOSUB 10 4370 FOR X = 1 TO 12 4372 P = TL(X): GOSUB 4295 4374 B = 14:PK = ((X *9) +B -C -1):V$ = STR$(TL(X)): GOSUB 10 4376 NEXT X: PRINT 4389 GOTO 4395 4390 FOR X = 1 TO R:WK(X,1) = VAL(W$(X,1)):WK(X,2) = VAL(W$(X,3)):WK(X,3) = VAL(W$(X,5)) 4392 BAL(WK(X,1),WK(X,2)) = BAL(WK(X,1),WK(X,2)) +WK(X,3): NEXT X: RETURN 4393 IF PQ = 3 THEN PRINT CHR$(18) 4395 PRINT CHR$(9);"40N" 4397 IF PQ = 2 THEN PRINT CHR$(27); CHR$(19) 4398 IF PQ = 3 THEN PRINT CHR$(18) 4399 PRINT D$;"PR#0" 4400 CLEAR :BU = 1: GOTO 10002: REM ** RETURN TO MENU 5100 X = 0:YY = T:T = 0: IF XX THEN T = YY 5102 FOR J = 1 TO 5:CC(J) = 0: NEXT 5110 HOME : PRINT TAB( 7);F$;" SUMMARY REPORT" 5115 IF OM = 3 THEN PRINT TAB( 7)"SORTED ";A$ 5120 PRINT : PRINT "# * PAID TO * A# "; 5125 IF FL = 1 THEN PRINT "CARD# "; 5127 IF FL = 2 THEN PRINT "CHECK#"; 5130 PRINT " MO DY AMOUNT": PRINT :CTR = 0 5132 POKE 34, PEEK(37) +1 5135 X = X +1: IF X >I THEN GOTO 5180 5140 CTR = CTR +1: IF CTR >16 THEN VTAB 24: INVERSE : INPUT "HIT RETURN TO CONTINUE";X$: NORMAL : VTAB 5: CALL -958:CTR = 1 5142 PRINT X; 5144 POKE 36,3: PRINT LEFT$(W$(X,6),10); 5146 POKE 36,17 - LEN(W$(X,1)): PRINT W$(X,1); 5148 POKE 36,23 - LEN(W$(X,2)): PRINT W$(X,2); 5150 POKE 36,27 - LEN(W$(X,3)): PRINT W$(X,3); 5152 POKE 36,30 - LEN(W$(X,4)): PRINT W$(X,4); 5160 W = VAL(W$(X,5)) 5162 T = T +W: IF FL = 1 THEN CC = VAL(W$(X,2)):CC(CC) = CC(CC) +W: REM *GRAND TOTALS AND CR CD TOTALS 5164 T = INT(T *100 +.5)/100:CC(CC) = INT(CC(CC) *100 +.5)/100 5166 P = W: GOSUB 980 5168 POKE 36,27 +B -C -1: PRINT W 5170 GOTO 5135 5180 FOR X = 0 TO 38: PRINT "-";: NEXT X: PRINT 5182 P = T: GOSUB 980 5184 POKE 36,1: PRINT "*** TOTALS ***";: POKE 36,26 +B -C: PRINT T 5186 IF FL < >1 THEN 5195: REM SKIP CARD SUMMARY 5188 VTAB 24: INVERSE : INPUT "HIT RETURN FOR CARD TOTALS";X$: NORMAL 5190 TEXT : HOME : HTAB 10: PRINT "* CARD TOTALS *" 5192 VTAB 4: FOR X = 1 TO 5:P = CC(X): GOSUB 980: PRINT CD$(X);: POKE 36,(15 +B -C -1): PRINT CC(X): NEXT X 5195 VTAB 24: INVERSE : INPUT "HIT RETURN TO CONTINUE";X$: NORMAL 5199 TEXT : RETURN 5200 HOME 5205 POKE 36,4: PRINT "TREND ANALYSIS FOR ** ";MO$(MT);" **" 5210 XM = 4:XP = 2 5215 PRINT "DSCR";: POKE 36,9: PRINT "CUR MO";: POKE 36,18: PRINT "%";: POKE 36,21: PRINT "LST MO";: POKE 36,29: PRINT "%";: POKE 36,32: PRINT "AVG MO" 5220 FOR X = 0 TO 39: PRINT "=";: NEXT X: PRINT 5225 FOR X = 1 TO 24 5230 PRINT LEFT$(NM$(X),9); 5235 IF BAL(X,MT) = 0 THEN 5260 5240 P = BAL(X,MT): GOSUB 5340:B = 5 5245 POKE 36,8 +B -C -1: PRINT BAL(X,MT); 5250 P = PC(X,1): GOSUB 5340:B = 3 5255 POKE 36,(17 +B -C -1): PRINT PC(X,1); 5260 IF BAL(X,MT -1) = 0 THEN 5285 5265 P = BAL(X,MT -1): GOSUB 5340:B = 5 5270 POKE 36,(20 +B -C -1): PRINT BAL(X,MT -1); 5275 P = PC(X,2): GOSUB 5340:B = 3 5280 POKE 36,(28 +B -C -1): PRINT PC(X,2); 5285 IF AV(X) = 0 THEN PRINT : GOTO 5305 5290 P = AV(X): GOSUB 5340:B = 5 5295 POKE 36,31 +B -C -1: PRINT AV(X) 5300 P = PC(X,3): GOSUB 5340:B = 3 5305 IF X = 18 THEN INPUT "HIT RETURN FOR LAST PART OF REPORT ";XX$ 5310 NEXT X 5315 PRINT "** TOTALS **"; 5320 P = TL(MT): GOSUB 5340:B = 5: POKE 36,9 +B -C -1: PRINT TL(MT); 5325 P = TL(MT -1): GOSUB 5340:B = 5: POKE 36,21 +B -C -1: PRINT TL(MT -1); 5330 P = TA: GOSUB 5340:B = 5: POKE 36,32 +B -C -1: PRINT TA 5335 INPUT "PRESS RETURN TO GO TO MENU ";XX$: GOTO 5630 5340 C = (P > = 10) +(P > = 100) +(P > = 1000) +(P > = 10000): RETURN 5500 REM **YTD SPENDING-SCREEN VERSION 5545 HOME :ZT = 8 5550 POKE 36,5: PRINT "YEAR-TO-DATE SPENDING ANALYSIS": POKE 36,5: PRINT "TODAY'S DATE: ";MT;"/";D;"/";Y 5555 FOR N = 1 TO 12 STEP 3: PRINT "DESCR"; 5560 FOR I = N TO N +2:ZT = ZT +9: POKE 36,ZT: PRINT MO$(I);: NEXT I: PRINT :ZT = 8 5565 FOR X = 1 TO 24: PRINT LEFT$(N$(X),10); 5570 FOR I = N TO N +2:ZT = ZT +9:P = BAL(X,I): GOSUB 5340 5575 POKE 36,ZT -C -1: PRINT BAL(X,I);:TL(I) = TL(I) +BAL(X,I): NEXT I: PRINT :ZT = 8 5580 IF X = 18 THEN INPUT "PRESS RETURN FOR REST OF REPORT";XX$ 5585 NEXT X 5590 FOR YY = 0 TO 39: PRINT "-";: NEXT YY: PRINT 5595 PRINT "**TOTALS**";:ZT = 8: FOR I = N TO N +2:ZT = ZT +9:P = TL(I): GOSUB 5340: POKE 36,ZT -C -1: PRINT TL(I);: NEXT I: PRINT :ZT = 8 5600 INPUT "PRESS RETURN FOR NEXT 3 MONTHS";XX$ 5605 NEXT N 5610 INPUT "PRESS RETURN TO GO TO MENU";XX$ 5615 GOTO 5630 5620 FOR X = 1 TO R:WK(X,1) = VAL(W$(X,1)):WK(X,2) = VAL(W$(X,3)):WK(X,3) = VAL(W$(X,5)) 5625 BAL(WK(X,1),WK(X,2)) = BAL(WK(X,1),WK(X,2)) +WK(X,3): NEXT X: RETURN 5630 GOTO 10500: REM RETURN TO MENU 5700 REM *LIST POSTED CARD/CHECK FILES 5701 T = 0:E1 = 0: FOR X = 0 TO 5:CC(X) = 0: NEXT X: REM INIT VARIABLES 5705 ONERR GOTO 5790 5710 PRINT D$;"OPEN ";F$;",L40" 5715 PRINT D$;"READ ";F$;",R0" 5720 INPUT R 5730 IF R = 0 THEN GOTO 5792 5740 REM ** PRINT RECORD 100 AT TIME 5742 XX = 0 5745 FLASH : PRINT "READ 100 RECORDS OF ";F$: NORMAL 5750 B1 = E1 +1: IF (R -E1) >100 THEN E1 = E1 +100:I = 100: GOTO 5760 5755 IF (R -E1) < = 100 THEN I = (R -E1):E1 = R 5760 FOR Z = B1 TO E1:XX = XX +1 5765 PRINT D$;"READ ";F$;",R";Z 5770 INPUT W$(XX,1),W$(XX,2),W$(XX,3),W$(XX,4),W$(XX,5),W$(XX,6) 5774 NEXT 5775 PRINT D$: IF PRTYPE = 1 THEN SW = 1: GOSUB 5100:SW = 0 5776 IF PRTYPE = 2 THEN SW = 1: GOSUB 800:SW = 0 5780 IF E1 <R THEN GOTO 5740 5785 GOTO 5792: REM CLOSE FILE 5790 ER = PEEK(222): POKE 216,0: IF ER < >5 THEN 1998 5792 PRINT D$;"CLOSE ";F$ 5794 PRINT D$: IF E1 = 0 THEN INVERSE : PRINT "NO RECORDS IN ";F$: NORMAL : FOR X = 1 TO 1000: NEXT X 5799 XX = 0: GOTO 10500: REM RETURN TO MAIN MENU 10000 REM * DISPLAY INTRODUCTION SCREEN 10002 TEXT : HOME 10003 XL = PEEK(54):XH = PEEK(55) 10005 HTAB 7: PRINT "HOME FINANCE MANAGEMENT" 10010 FOR I = 0 TO 39: PRINT "=";: NEXT I 10015 PRINT "THIS IS YOUR PERSONAL SYSTEM FOR MANAG-": PRINT "ING CREDIT CARDS, CHECKS AND OVERALL": PRINT "HOME FINANCES." 10020 PRINT : PRINT "YOU'LL BE ASKED TO SELECT FROM THESE ": PRINT "OPTIONS:" 10025 HTAB 10: PRINT "ADD": HTAB 10: PRINT "POST": HTAB 10: PRINT "SORT": HTAB 10: PRINT "REPORT": HTAB 10: PRINT "END THE SESSION" 10030 PRINT : PRINT "TRAC WILL MAINTAIN YOUR EXPENSE DATA": PRINT "IN THE FOLLOWING FILES:" 10040 PRINT : HTAB 10: PRINT "CREDIT CARD FILE": HTAB 10: PRINT "CHECK FILE": HTAB 10: PRINT "YEAR-TO-DATE FILE" 10050 HTAB 10: PRINT "POSTED CREDIT CARD FILE": HTAB 10: PRINT "POSTED CHECK FILE" 10060 VTAB 24: INVERSE : INPUT "HIT RETURN TO CONTINUE ";X$: NORMAL 10100 HOME : POKE 33,37: POKE 32,3 10110 PRINT : HTAB 13: PRINT "* ADD *" 10120 PRINT : PRINT "USE THE 'ADD' OPTION TO ENTER DETAIL": PRINT "EXPENSE TRANSACTIONS INTO THE CREDIT": PRINT "CARD AND CHECK FILES." 10130 VTAB 8: HTAB 13: PRINT "* POST *" 10150 PRINT : PRINT "USE THE 'POST' OPTION TO REMOVE": PRINT "A DETAIL TRANSACTION FROM ITS": PRINT "ACTIVE FILE AND UPDATE THE YEAR-": PRINT "TO-DATE BALANCES. NOTE: EACH" 10160 PRINT "'POSTED' TRANSACTION WILL BE WRITTEN": PRINT "TO AN AUDIT TRAIL FILE FOR FUTURE": PRINT "REFERENCE." 10170 PRINT : HTAB 13: PRINT "* * *" 10180 PRINT : PRINT "FOR EACH OPTION, FOLLOW THE ": PRINT "INSTRUCTIONS ON THE SCREEN." 10190 VTAB 24: INVERSE : INPUT "HIT RETURN TO CONTINUE ";X$: NORMAL : POKE 32,0: POKE 33,40 10200 REM * ACCEPT OUTPUT DEVICE TYPE 10210 TEXT : HOME 10220 HTAB 8: PRINT "* INITIALIZATION SCREEN *" 10230 VTAB 3: PRINT "ENTER THE REPORT OUTPUT DEVICE": PRINT "YOU WISH TO USE." 10240 PRINT : HTAB 10: PRINT "1 = SCREEN ONLY": HTAB 10: PRINT "2 = PRINTER" 10250 VTAB 10: INVERSE : INPUT "ENTER YOUR SELECTION:";PRTYPE: NORMAL 10260 IF PRTYPE <1 OR PRTYPE >2 THEN GOSUB 280: GOTO 10250 10270 IF PRTYPE = 2 THEN PRINT : PRINT "1= CENTRONICS COMPATIBLE": PRINT "2= CENTRONICS 737": PRINT "3= EPSON MX-80 PRINTER": INPUT "ENTER SELECTION ";PQ: IF PQ <1 OR PQ >3 THEN 10270 10300 REM * ACCEPT REPORT DATE 10310 VTAB 20: INVERSE : PRINT "ENTER THE REPORT HEADING DATE: ": NORMAL 10320 VTAB 22: CALL -868: INVERSE : INPUT "IN MO,DAY,YR :";MT,D,Y: NORMAL 10330 IF MT >12 OR D >31 THEN GOSUB 280: GOTO 10320 10400 REM * FILL CONSTANT ARRAYS 10410 D$ = "<CTRL-D>": REM CTRL-D 10420 PRINT D$;"NOMON I,O,C" 10430 DIM N$(24),MO$(13),CD$(5) 10440 FOR X = 1 TO 24: READ N$(X): NEXT X 10450 FOR X = 1 TO 12: READ MO$(X): NEXT X 10460 FOR X = 1 TO 5: READ CD$(X): NEXT X 10470 DIM BAL(24,12),W$(150,6),W(75,13),TL(12),NM$(24),AV(24),PC(24,3),WK(150,5),CC(5) 10500 REM *** MAIN LOOP *** 10510 CALL -936 10530 I = 0 10540 HTAB 13: PRINT "* MAIN MENU *" 10550 VTAB 3: PRINT "ENTER THE NUMBER OF THE OPTION YOU WANT": PRINT "TO USE.": HTAB 10: PRINT "1 = ADD RECORDS": HTAB 10: PRINT "2 = POST (DELETE) RECORDS" 10560 HTAB 10: PRINT "3 = SORT RECORDS ": HTAB 10: PRINT "4 = REPORT/LIST OPTIONS": HTAB 10: PRINT "5 = END THE SESSION" 10570 VTAB 11: INVERSE : INPUT "ENTER YOUR SELECTION: ";OM: NORMAL 10580 GOSUB 270 10590 IF OM = 5 THEN PRINT "ALL DONE": END 10600 IF OM <1 OR OM >5 THEN GOSUB 280: GOTO 10570 10605 IF OM = 4 THEN GOTO 10660 10610 VTAB 15: PRINT "ENTER THE NUMBER OF THE FILE TO BE USED." 10620 HTAB 10: PRINT "1 = CREDIT CARDS": HTAB 10: PRINT "2 = CHECKS" 10630 VTAB 20: INVERSE : INPUT "ENTER YOUR SELECTION:";FL: NORMAL 10635 IF FL < >1 AND FL < >2 THEN GOSUB 280: GOTO 10630 10640 IF FL = 1 THEN F$ = "CARD #" 10650 IF FL = 2 THEN F$ = "CHECK #" 10660 ON OM GOTO 1000,2000,3000,4000 11000 DATA 1. AUTO EXPENSE,2. BOOKS/MAGS.,3. BUSINESS EXP,4. CLOTHES ADULT,5. CLOTHES KIDS,6. DONATIONS,7. ELECTRICITY,8. ENTERTAINMENT 11005 DATA 9. FOOD,10. GIFTS,11. HOBBY-ADULT,12. HOBBY-KIDS,13. HOME-GAS,14. HOME-MAINT',15. INSURANCE,16. INVESTMENTS,17. LIQ/CIG'S,18. MORTGAGE 11010 DATA 19. TELEPHONE,20. TAX-LOCAL,21. TAX-STATE,22. TAX-FEDERAL,23. VACATION,24. WATER 11020 DATA JAN,FEB,MAR,APR,MAY,JUN,JLY,AUG,SEP,OCT,NOV,DEC 11030 DATA MASTERCHARGE = $,VISA CARD = $,AM EXPRESS = $,GASOLINE = $,OTHER CARDS = $