18 PRINT"[147]":POKE53280,0:POKE53281,0 19 PRINT"****************************************"; 20 PRINT"* BUDGET-MASTER *"; 21 PRINT"** BY **"; 22 PRINT"* DENNIS BLOOMFIELD *"; 23 PRINT"****************************************" 24 : 26 NI=16 27 FL=0:P=0:MC$="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECXXX" 28 IN$="0":HD$="" 29 BL$=" " 30 DIM I$(NI),H$(3),AM(2,NI):READI$(0) 31 OPEN2,8,2,"BUDGET.FILE" 32 FORDE=1TONI:INPUT#2,I$(DE),AM(0,DE):NEXT:CLOSE2 33 FORDE=0TO3:READH$(DE):NEXT 34 A$="":Z$="":O$="":ND$="MON-YR":NA$=ND$:OF$="":NF$="" 35 M1$="[158]RETURN FOR MENU[154]" 50 PRINTHD$;TAB(8);"[158]HIT ANY KEY TO CONTINUE" 55 GOSUB1090 100 P=0:PRINT"[147] MENU "; 102 PRINT" CURRENTLY WORKING ON: ";NA$;" [146]"; 104 PRINT" [158]G[154]ENERATE/ALTER CATAGORIES" 105 PRINT" [158]C[154]URRENT BUDGET TO SCREEN" 110 PRINT" [158]E[154]NTER/ALTER MONTHLY DATA" 115 PRINT" [158]P[154]RINT CURRENT BUDGET" 120 PRINT" [158]S[154]AVE CURRENT BUDGET" 125 PRINT" [158]L[154]OAD DATA FILE" 130 PRINT" [158]R[154]EPORT GENERATOR" 132 PRINT" [158]D[154]ISC COMMAND MENU" 135 PRINT" [158]Q[154]UIT BUDGET PROGRAM" 140 PRINT" SELECTION? " 150 A=0:GOSUB1090:GOSUB1010:IFA<1ORA>9THENGOSUB998:GOTO100 155 IFA<4ORA=7THEN180 160 GOSUB930 175 IFA$<>"Y"THEN100 180 ONAGOSUB200,300,400,500,600,700,2050,800,60000 185 IFA=9THENGOSUB62000:REM WRITE FILE 190 FL=0:LC=0:GOTO100 200 SP$=" ":PRINT"[147] ";:FORDE=0TO1:PRINTH$(DE);SP$;:NEXT 205 PRINTH$(2);:SP$=" ":PRINTSP$;H$(3);" [154]":GOSUB960 210 FORDE=1TONI:GOSUB950 211 IFDE=>10THENPRINT" "; 212 IFDE<10THENPRINT" "; 214 PRINTDE;I$(DE);:D=AM(0,DE):GOSUB992:PRINTSP$; 217 PRINTAM(0,DE); 220 FORR=1TO2:D=AM(R,DE):GOSUB992:PRINTSP$; 225 IFR=2THEN227 226 PRINTAM(R,DE);:NEXT 227 PRINTAM(R,DE):NEXT:NEXT 228 PRINT" [183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183] "; 230 PRINT"  ";I$(0);"[157] "; 240 GOSUB970:D=AM(0,0):GOSUB992:PRINTSP$; 250 PRINTAM(0,0); 260 FORR=1TO2:DE=0:D=AM(R,DE):GOSUB992:PRINTSP$; 265 IFR=2THEN267 266 PRINTAM(R,DE);:NEXT 267 PRINTAM(R,DE):NEXT 269 IFFL<>0THEN298 270 PRINT"[154] INCOME:"+IN$+" IDEAL BALANCE: ";(IN-AM(0,0)) 280 PRINT" ACTUAL BALANCE:";(IN-AM(1,0)) 296 PRINTHD$;" [158]HIT ANY KEY TO CONTINUE[154]" 297 GOSUB1090:PRINTHD$;BL$;:RETURN 298 RETURN 300 FL=1:GOSUB200:PRINTHD$;"[145] [158] RETURN , IN , OR ITEM # [154]" 310 N$="":PRINTHD$;:INPUT" ITEM NUMBER";N$ 312 IFN$="IN"THENGOSUB360:GOTO300 313 IFN$=""THEN350 314 N=VAL(N$) 315 IFN>NIORN<1THENGOSUB998:GOTO310 320 PRINTHD$;"[145][145] THE CURRENT VALUE OF ";I$(N);" = ";AM(1,N) 325 PRINT" [158] RETURN, MENU, + OR - AMOUNT [154]":PRINTBL$ 330 Z$="":INPUT"[145][145] NEW AMOUNT ";Z$ 331 IFZ$=""THEN300 332 IFZ$="M"THEN350 333 O$=LEFT$(Z$,1) 334 IFO$<>"+"ANDO$<>"-"THEN320 335 M$=RIGHT$(Z$,LEN(Z$)-1):M=VAL(M$) 336 IFO$="-"THENAM(1,N)=AM(1,N)-M 337 IFO$="+"THENAM(1,N)=AM(1,N)+M 340 GOTO300 350 PRINT"":RETURN 360 PRINTHD$;" CURRENT INCOME IS: ";IN 365 INPUT" NEW INCOME";IN$ 366 IFIN$=""THENRETURN 367 O$=LEFT$(IN$,1) 368 IFO$<>"+"ANDO$<>"-"THENPRINTHD$;"";BL$;"[145]";:GOTO365 369 M$=RIGHT$(IN$,LEN(IN$)-1):M=VAL(M$) 370 IFO$="-"THENIN=IN-M 371 IFO$="+"THENIN=IN+M 375 IN$=STR$(IN):RETURN 400 S2$=" ":LC=LC+32 401 PRINT"[147][158]PRINTER READY? (Y)" 402 PRINT"ANY OTHER KEY TO ABORT":GOSUB1090:IFA$="Y"THEN406 403 IFA$<>"Y"ANDP=0THENPRINT"PRINT-OUT ABORTED" 404 IFA$<>"Y"ANDP=>1THENPRINT"REPORT TERMINATED":RE=NM 405 FORDE=1TO1000:NEXT:RETURN 406 PRINT"[147]":FORDE=1TONI:GOSUB950:NEXT:GOSUB960:GOSUB970:OPEN4,4 407 PRINT#4,S2$;S2$;" ";CHR$(14);NA$;CHR$(15);:PRINT#4,CHR$(10) 408 PRINT#4," ";:FORR=0TO3:PRINT#4,H$(R);:IFR<>3THENPRINT#4,S2$; 409 NEXT:PRINT#4,CHR$(13) 410 FORR=1TO68:PRINT#4,CHR$(163);:NEXT 411 FORR=1TO3:PRINT#4:NEXT 412 S2$=" " 413 FORDE=1TONI 415 IFDE<10THENPRINT#4," "; 416 IFDE=>10THENPRINT#4," "; 420 PRINT#4,DE;"-";I$(DE); 425 FORR=0TO2:D=AM(R,DE):GOSUB992 430 PRINT#4,S2$+SP$; 432 IFR=3THENPRINT#4," "; 435 PRINT#4,AM(R,DE);:NEXT:PRINT#4:NEXT 440 PRINT#4:PRINT#4:FORR=1TO68:PRINT#4,CHR$(163);:NEXT 442 GOSUB960:PRINT#4:PRINT#4," ";I$(0);" "; 445 GOSUB970:FORR=0TO2:DE=0:D=AM(R,DE):GOSUB992 450 PRINT#4,S2$+SP$; 452 IFR=3THENPRINT#4," "; 455 PRINT#4,AM(R,DE);:NEXT:PRINT#4 460 PRINT#4:PRINT#4," INCOME . . . . . . . . ."; 462 D=IN:GOSUB992:PRINT#4,SP$;D 465 PRINT#4," IDEAL BALANCE . . . . ."; 467 D=(IN-AM(0,0)):GOSUB992:PRINT#4,SP$;D 470 PRINT#4," ACTUAL BALANCE . . . . ."; 472 D=(IN-AM(1,0)):GOSUB992:PRINT#4,SP$;D 474 IFP>0THEN496 475 PRINT"ANOTHER COPY? (Y)" 478 GOSUB1090:IFA$<>"Y"THEN496 488 IFLC>32THENLC=0:FORR=1TO2:PRINT#4:NEXT 490 PRINT#4:CLOSE4:PRINT"[147]":FORDE=1TO1000:NEXT:GOTO400 495 IFLC>32THENLC=0:FORR=1TO2:PRINT#4:NEXT:GOTO497 496 IFLC>32THENLC=0 497 PRINT#4:CLOSE4 498 RETURN 500 PRINT"[147][154]";M1$ 501 PRINT"FILE TO SAVE: [158]";NA$:PRINT"[154]FILENAME OK? (Y-N)" 502 GOSUB1090:IFA$=CHR$(13)THENRETURN 503 IFA$<>"Y"THENGOSUB980:GOTO500 507 PRINT"SAVING: [158]";NA$ 510 OPEN15,8,15 511 OPEN2,8,2,"@0:"+NA$+",S,W" 515 PRINT#2,IN$ 516 FORDE=0TONI 517 PRINT#2,I$(DE) 518 NEXT 520 FORDE=0TONI 521 FORR=0TO2 522 PRINT#2,AM(R,DE) 523 NEXT 524 NEXT 530 FL=FL+1:GOSUB630:RETURN 600 PRINT"[147][154]";M1$ 601 PRINT"FILE TO LOAD: [158]";NA$:PRINT"[154]FILENAME OK? (Y-N)" 602 GOSUB1090:IFA$=CHR$(13)THENRETURN 603 IFA$<>"Y"THENGOSUB980:GOTO600 606 PRINT"LOADING: [158]";NA$ 610 OPEN15,8,15 611 OPEN2,8,2,"0:"+NA$+",S,R" 615 INPUT#2,IN$ 616 IN=VAL(IN$) 617 FORDE=0TONI 618 INPUT#2,I$(DE) 619 NEXT 620 FORDE=0TONI 621 FORR=0TO2 622 INPUT#2,AM(R,DE) 623 NEXT 624 NEXT 630 INPUT#15,E1$,E2$,E3$,E4$ 635 PRINT" ";E1$;" ";E2$;" ";E3$;" ";E4$;" ":FORDE=1TO700:NEXT 636 IFE2$<>"OK"ANDP=0ANDFL=0THENGOSUB900 640 CLOSE2 645 CLOSE15,8,15:RETURN 700 PRINT"[147]";M1$:PRINT"[158]P[146]RINTER OR [158]S[146]CREEN?" 701 GOSUB1090:IFA$=CHR$(13)THENRETURN 702 IFA$<>"P"ANDA$<>"S"THENGOSUB998:PRINT"[147][158]";:GOTO700 703 GOSUB920 705 PRINT"[158]STARTING":GOSUB981:IFNA$=ND$THENRETURN 710 INPUT"[158]NUMBER OF MONTHS TO REPORT";NM:IFNM=0THENRETURN 711 IFNM>12THEN700 715 IFA$="P"THEN750 720 FORRE=1TONM:GOSUB798:PRINT"[147]":GOSUB606 725 PRINT"[147]REPORT FOR MONTH OF: [158]";NA$;"[154]":FORDE=1TO2000:NEXT 726 IFE2$="OK"THEN730 727 IFE2$<>"OK"THENPRINT"[158]";NA$;" ";E2$ 728 PRINT"REPORT TERMINATED[154]":GOSUB900:GOTO742 730 GOSUB200:YI=YI+IN:Y1=Y1+(IN-AM(0,0)):Y2=Y2+(IN-AM(1,0)) 735 PRINT"[147]REPORT TOTALS TO:[158] ";NA$;"[154]" 739 DE=0:PRINT"INCOME TOTAL [158]";:D=YI:GOSUB992:PRINTSP$;YI 740 PRINT"[154]IDEAL BAL. TOTAL [158]";:D=Y1:GOSUB992:PRINTSP$;Y1 741 PRINT"[154]ACTUAL BAL. TOTAL[158]";:D=Y2:GOSUB992:PRINTSP$;Y2 742 IFE2$="OK"THEN745 744 FORDE=1TO2000:NEXT:RETURN 745 GOSUB296 746 IFRE=NMTHEN749 747 GOSUB1110 748 NEXT:RETURN 749 NEXT:RETURN 750 FORRE=1TONM:P=P+1:GOSUB798 753 PRINT"[147]":GOSUB606 754 IFE2$<>"OK"THEN756 755 GOTO760 756 PRINT"[147]";NA$;" ";E2$;"--REPORT TERMINATED" 757 OPEN4,4:PRINT#4:PRINT#4:PRINT#4 758 PRINT#4," ";NA$;" ";E2$;"-REPORT TERMINATED" 759 CLOSE4,4:GOTO765 760 GOSUB400:IFA$<>"Y"ANDRE=NMANDP=NMTHEN765 761 YI=YI+IN:Y1=Y1+(IN-AM(0,0)):Y2=Y2+(IN-AM(1,0)) 763 GOSUB1110 764 NEXT 765 OPEN4,4:IFA$<>"Y"THEN768 766 IFLC=0THENFORDE=1TO25:PRINT#4:NEXT:GOTO768 767 IFLC=32THENFORDE=1TO4:PRINT#4:NEXT 768 PRINT#4," REPORT TOTALS":PRINT#4 770 PRINT#4," INCOME TOTAL [158]";:D=YI:GOSUB992 771 PRINT#4,SP$;YI 772 PRINT#4," IDEAL BAL. TOTAL [158]";:D=Y1:GOSUB992 773 PRINT#4,SP$;Y1 775 PRINT#4," ACTUAL BAL. TOTAL[158]";:D=Y2:GOSUB992 776 PRINT#4,SP$;Y2 777 PRINT#4 778 CLOSE4 779 RETURN 798 FORDE=0TONI:I$(DE)="":NEXT:GOSUB960:GOSUB970:RETURN 800 PRINT"[147][154]":GOTO63000 900 GOSUB976:GOSUB975:DE=0:IN$="0":IN=0 910 GOSUB950:NA$=ND$:RETURN 920 YI=0:Y1=0:Y2=0:RETURN 930 PRINT" [158]ARE YOU SURE?(Y)[145]":FORDE=1TO300:NEXT 935 PRINT" [145]":FORDE=1TO300:NEXT 940 GETA$:IFA$=""THEN930 945 RETURN 950 AM(2,DE)=AM(0,DE)-AM(1,DE):RETURN 960 FORR=0TO2:AM(R,0)=0:NEXT:RETURN 970 FORR=0TO2:FORDE=1TONI:AM(R,0)=AM(R,0)+AM(R,DE):NEXT:NEXT:RETURN 975 RESTORE:FORDE=0TONI:READA$:I$(DE)=A$:NEXT:RETURN 976 FORR=1TO2:FORDE=0TONI:AM(R,DE)=0:NEXT:NEXT:RETURN 980 PRINT"[147][158]RETURN TO ESCAPE[154]" 981 NA$="":M$="":INPUT"[158]MONTH NAME";M$:IFM$=""THEN990 982 CH$=LEFT$(M$,3) 983 FORDE=1TO34STEP3:IFCH$=MID$(MC$,DE,3)THEN986 984 NEXT 985 GOSUB998::GOTO980 986 Y$="":INPUT"YEAR";Y$:IFY$=""THEN990 987 YR$=RIGHT$(Y$,2) 988 NA$=NA$+CH$+CHR$(45)+YR$ 990 IFNA$=""THENNA$=ND$ 991 RETURN 992 IFABS(D)<10THENSP$=" ":RETURN 993 IFABS(D)<100THENSP$=" ":RETURN 994 IFABS(D)<1000THENSP$=" ":RETURN 995 IFABS(D)<10000THENSP$=" ":RETURN 996 IFABS(D)<100000THENSP$=" ":RETURN 997 SP$="":RETURN 998 PRINTHD$;" [158]INVALID INPUT, PLEASE DO AGAIN![154]":FORDE=1TO1500:NEXT 999 PRINTHD$;BL$:RETURN 1010 IFA$="C"THENA=1 1020 IFA$="E"THENA=2 1030 IFA$="P"THENA=3 1040 IFA$="S"THENA=4 1050 IFA$="L"THENA=5 1060 IFA$="R"THENA=6 1070 IFA$="D"THENA=7 1075 IFA$="Q"THENA=8 1076 IFA$="G"THENA=9 1080 RETURN 1090 GETA$:IFA$=""THEN1090 1100 RETURN 1110 FORDE=1TO34STEP3 1115 IFCH$=MID$(MC$,DE,3)THENNA$=(MID$(MC$,DE+3,3))+"-"+YR$ 1120 NEXT:CH$=LEFT$(NA$,3):IFCH$<>"XXX"THENRETURN 1125 IFCH$="XXX"THENCH$="JAN":Y=VAL(RIGHT$(NA$,2)) 1127 IFCH$="XXX"THENNA$="":NY=Y+1:Y$=STR$(NY) 1130 YR$=RIGHT$(Y$,2):NA$=CH$+"-"+YR$:RETURN 2003 DATA"TOTALS" 2009 : 2010 : 2011 : 2016 DATA"ITEM#","IDEAL","REAL ","DIFF." 2022 : 2023 : 2050 A=0:PRINT"[147]";BL$;" DISC OPTIONS ";BL$ 2055 PRINT"[146]";TAB(13);"[158]D[154]IRECTORY" 2060 PRINTTAB(13);"[158]R[154]ENAME FILE" 2065 PRINTTAB(13);"[158]S[154]CRATCH FILE" 2070 PRINTTAB(13);"[158]F[154]ORMAT DISK" 2075 PRINTTAB(13);"[158]I[154]NITIALIZE DRIVE" 2077 PRINTTAB(13);"[158]V[154]ALIDATE DISK" 2080 PRINTTAB(13);"";M1$ 2082 PRINT"";BL$;" SELECTION? ";BL$ 2085 GOSUB1090 2090 IFA$="D"THENA=1 2095 IFA$="R"THENA=2 2100 IFA$="S"THENA=3 2105 IFA$="F"THENA=4 2110 IFA$="I"THENA=5 2112 IFA$="V"THENA=6 2115 IFA$=CHR$(13)THENRETURN 2120 IFA<1ORA>6THEN2050 2125 ONAGOSUB2135,2225,2265,2295,2355,2365 2130 GOTO2050 2135 PRINT"[147][158]ANY KEY TO PAUSE/RESTART LISTING[154]":PRINT:OPEN1,8,0,"$0" 2140 GET#1,A$,B$ 2145 GET#1,A$,B$ 2150 GET#1,A$,B$ 2155 C=0 2160 IFA$<>""THENC=ASC(A$) 2165 IFB$<>""THENC=C+ASC(B$)*256 2167 IFC<10THENPRINT" "; 2170 PRINT" ";MID$(STR$(C),2);TAB(4);" "; 2175 GET#1,B$:IFST<>0THEN2215 2180 IFB$<>CHR$(34)THEN2175 2185 GET#1,B$:IFB$<>CHR$(34)THENPRINTB$;:GOTO2185 2190 GET#1,B$:IFB$=CHR$(32)THEN2190 2195 PRINTTAB(28);:C$="" 2200 C$=C$+B$:GET#1,B$:IFB$<>""THEN2200 2205 PRINTLEFT$(C$,3) 2206 GETA$:IFA$<>""THENPRINT:PRINT"";M1$ 2208 IFA$<>""THENGOSUB1090:IFA$=CHR$(13)THEN2220 2210 IFST=0THEN2145 2215 PRINT"[157]BLOCKS FREE" 2220 CLOSE1:IFA$=CHR$(13)THEN2222 2221 PRINT:GOSUB296 2222 RETURN 2225 PRINT"[147]";M1$ 2228 OF$="":INPUT"OLD FILENAME";OF$ 2229 IFOF$=""THEN2260 2230 NF$="":INPUT"NEW FILENAME";NF$ 2235 IFNF$=""THEN2260 2240 OPEN15,8,15:PRINT#15,"R0:"+NF$+"="+OF$ 2245 INPUT#15,E1$,E2$,E3$,E4$ 2250 PRINT"[158]";E1$;" ";E2$;" ";E3$;" ";E4$;"[146]":FORDE=1TO1000:NEXT 2255 CLOSE15,8,15 2260 RETURN 2265 GOSUB930:IFA$<>"Y"THEN2290 2268 PRINT"[147]";M1$ 2270 OF$="":INPUT"FILENAME TO SCRATCH";OF$ 2275 IFOF$=""THEN2290 2280 OPEN15,8,15:PRINT#15,"S0:"+OF$ 2285 GOSUB 2245 2290 RETURN 2295 GOSUB930:IFA$<>"Y"THEN2350 2298 PRINT"[147]";M1$ 2300 PRINT"INPUT DISC NAME (16 CHAR. MAX)" 2302 OF$="":INPUT"NAME: ";OF$ 2312 IFLEN(OF$)>16THENGOSUB998:GOTO2298 2325 IFOF$=""THEN2350 2330 PRINT"INPUT DISC ID CODE (2 CHAR. MAX)" 2331 NF$="":INPUT"ID CODE: ";NF$ 2332 IFLEN(NF$)>2THENGOSUB998:GOTO2298 2335 IFNF$=""THEN2350 2340 OPEN15,8,15:PRINT#15,"N0:"+OF$+","+NF$ 2345 GOSUB2245 2350 RETURN 2355 PRINT"[147]INITIALIZING DRIVE" 2360 OPEN15,8,15:PRINT#15,"I0:":PRINT"";:GOSUB2245:RETURN 2365 PRINT"[147]VALIDATING DISC" 2370 OPEN15,8,15:PRINT#15,"V0:":PRINT"";:GOSUB2245:RETURN 60000 REM ENTER/ALTER CATAGORIES 60010 PRINT"[147]" 60020 PRINTSPC(10)"1. EDIT/CHANGE CATAGORIES" 60030 PRINTSPC(10)"2. EDIT/CHANGE IDEAL AMOUNTS" 60040 PRINT"WHICH ?" 60045 POKE198,0:WAIT198,1:GETZ$:IFZ$="\"THENRETURN 60047 IFZ$<>"1"ANDZ$<>"2"THENPOKE53280,RND(1)*15:GOTO60045 60050 IFZ$="2"THEN61000 60060 PRINT"[147] EDIT/CHANGE CATAGORIES" 60070 FORDE=1TONI:DE$=STR$(DE):PRINTMID$(DE$,LEN(DE$)-1)". "I$(DE):NEXT 60080 INPUT"CHANGE WHICH ? [157][157][157][157][157][157]";CN$:CN=VAL(CN$):IFCN$="\"THEN60000 60085 IFCN<1ORCN>NITHENPRINT"TRY A NUMBER BETWEEN 1 AND"NI"[145][145][145]":GOTO60080 60087 PRINT"CHANGE "I$(CN)" TO: [157][157][157][157][157][157][157][157][157][157]";:INPUTI$(CN) 60090 I$(CN)=LEFT$(I$(CN)+" ",5) 60095 GOTO60060 61000 PRINT"[147] EDIT/CHANGE IDEAL AMOUNTS" 61010 FORDE=1TONI:DE$=STR$(DE):PRINTMID$(DE$,LEN(DE$)-1)". IDEAL AMOUNT FOR "; 61012 PRINTI$(DE)" IS:"AM(0,DE):NEXT 61020 INPUT"CHANGE WHICH ? [157][157][157][157][157][157]";CN$:CN=VAL(CN$):IFCN$="\"THEN60000 61025 IFCN<1ORCN>NITHENPRINT"TRY A NUMBER BETWEEN 1 AND"NI"[145][145][145]":GOTO61020 61087 PRINT"CHANGE "AM(0,CN)" TO: [157][157][157][157][157][157][157][157][157][157]";:INPUTAM(0,CN):GOTO61000 62000 REM RE-WRITE THE FILE 62002 PRINT"PLEASE WAIT...RE-WRITING A FILE." 62005 OPEN15,8,15,"S0:BUDGET.FILE" 62008 OPEN2,8,2,"0:BUDGET.FILE,S,W" 62010 FORDE=1TONI:PRINT"."; 62020 I$(DE)=LEFT$(I$(DE)+" ",5) 62030 PRINT#2,I$(DE)","AM(0,DE) 62040 NEXT 62050 CLOSE2 62060 INPUT#15,ER,ER$:IFER<>0THENPRINT"SORRY...WE HAD AN ERROR:"ER,ER$:GOTO50 62070 CLOSE2:CLOSE15:RETURN 62999 END 63000 REM CONNECT BACK TO L.S. 63002 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 63004 POKE198,0:POKE631,13:POKE632,13:POKE198,2:END