1 '**************************************************************************** **** This is a complete rewrite of my not so famous **** **** Monthly Budget Forecaster ****
2 '**** I will not be held responsible for anything that happens ****
5 '**** Please don't try and sell it.(nobody would by it) **** **** Any improvements or comments will be appreciated **** **** Please let me know about them. ****
6 '**** Joseph A. Hansen **** **** 7200 Stuart Drive **** **** Raleigh, N.C. 27609 Voice 919-847-8718 ****
55 COLOR 0,7:LOCATE 3,26:PRINT" MONTHLY BUDGET FORECASTER ";
60 COLOR 7,0:LOCATE 4,30:PRINT"Version 2.1 11/82";:LOCATE 6,32:PRINT" by";
65 LOCATE 10,31:COLOR 25,0:PRINT "JOSEPH A HANSEN":COLOR 0,7:LOCATE 20,27,0,0,31:PRINT" HIT ANY KEY TO CONTINUE ":COLOR 7,0
70 LOCATE 23,1:PRINT"No copyright, Soft and Friendly Not Inc., Joseph A. Hansen President";:LOCATE 24,1:PRINT"and his great and beautiful wife, Elizabeth L. Hansen, Vice President";:LOCATE 25,1:PRINT"and his daughter, Christine E. Hansen, Assistant";
71 LOCATE 1,1:COLOR 7,0:PRINT"If date or time is not correct, hit Esc key. DATE=> ";DATE$;" time=> ";TIME$;
76 LOCATE 20,1:PRINT SPACE$(70);:LOCATE 19,20:GOSUB 96:INPUT"Enter DATE ",DAT$:LOCATE 20,20:GOSUB 96:INPUT"Enter TIME ",TIM$:DATE$=DAT$:TIME$=TIM$:RUN
88 '
89 ' ***** main keybord input *****
90 '
91 X$=INKEY$:IF X$="" THEN GOTO 91 ELSE IF X$="X" THEN GOTO 95 ELSE RETURN
95 IF ERRO=1 THEN RETURN ELSE ERRO=0:GOTO 100
96 FOR I=1 TO 3:SOUND 1000*I,1:NEXT:RETURN
98 '
99 ' ***** main menu *****
100 LP$=INKEY$:COLOR 7,0:CLS:LOCATE 1,29:PRINT DATE$;" ";TIME$;:COLOR 0,7:LOCATE 2,28:PRINT " ****** M E N U ******* ":DEF SEG=0:POKE 1050,PEEK(1052):COLOR 7,0
282 RESTORE:CLOSE:COLOR 7,0:CLS:COLOR 31,7:LOCATE 9,25:PRINT" **** E R R O R **** ":COLOR 7,0:SOUND 100,30
284 IF ERR=52 OR ERR=53 THEN LOCATE 15,20:PRINT"File not found. Error line is => ";ERL;:GOTO 290
285 IF ERR=61 THEN LOCATE 15,20:PRINT"Disk Full. Error line is => ";ERL;:GOTO 290
286 IF ERR=27 THEN LOCATE 15,20:PRINT"Printer not ready. Error line is => ";ERL;:GOTO 290
287 IF ERR=6 OR ERR=11 THEN LOCATE 15,20:PRINT"Division by zero or Overflow. Error line is =>";ERL;:LOCATE 17,15:PRINT"Make sure data is loaded before using percentage vunction";:GOTO 290
289 LOCATE 15,20:PRINT" Catastrophic Error":LOCATE 17,20:PRINT"Error line is < ";ERL;" Error code is = ";ERR
290 LOCATE 19,20:PRINT"F1 to ABORT and return to menu":LOCATE 20,20:PRINT"F2 to Exit Program":ERRO=1:GOSUB 90:ERRO=0:IF X$="X" THEN RESUME 100 ELSE IF X$="Z" THEN RESUME 800
305 COLOR 7,0:CLS:PER$="_ ##_ %":LOCATE 24,25:COLOR 0,7:PRINT" Hit any key to continue ";:N=0:COLOR 0,7:LOCATE 1,28:PRINT" **** PERCENTAGES **** ";
307 LOCATE 3,1:PRINT"CODE";:LOCATE 3,8:PRINT" TYPE ";:LOCATE 3,24:PRINT" % ";:LOCATE 3,40:PRINT"CODE";:LOCATE 3,48:PRINT" TYPE ";:LOCATE 3,63:PRINT" % ";
309 COLOR 7,0:FOR I=4 TO 22:READ A$:GOSUB 340:LOCATE I,1:PRINT A$;:PRINT USING PER$;PER;:NEXT:FOR I=4 TO 10:READ A$:GOSUB 340:LOCATE I,40:PRINT A$;:PRINT USING PER$;PER;:NEXT
311 FOR I=0 TO 18:F=A(I)+F:NEXT:FOR I=19 TO 25:NF=NF+A(I):NEXT:F=F/TOTALIN:NF=NF/TOTALIN:F=F*100:NF=NF*100:F=CINT(F):NF=CINT(NF)
313 LOCATE 15,40:PRINT" FIXED BILLS PERCENTAGE ";:PRINT USING PER$;F;:LOCATE 17,40:PRINT" NON FIXED ";:PRINT USING PER$;NF;:GOTO 350
399 '********************************* save data to disk ******************
400 CLS:LOCATE 3,25:COLOR 0,7:PRINT" **** SAVE DATA TO DISK **** ";:LOCATE 2,30:COLOR 7,0:PRINT DATE$;" ";TIME$:LOCATE 13,25:COLOR 31,0:GOSUB 96:GOSUB 96:PRINT"THIS SECTION WRITES TO DISK.";:COLOR 7,0
402 LOCATE 15,21:PRINT"!! Are you sure you want to do this ????";:LOCATE 17,26:PRINT"Enter (Y)es continue";
404 LOCATE 19,32:COLOR 31,0:PRINT"F1 to ABORT";:COLOR 7,0:GOSUB 90:IF X$="y" OR X$="Y" THEN GOTO 405 ELSE SOUND 100,5:GOTO 402
420 COLOR 7,0:LOCATE 15,1:PRINT SPACE$ (75):IF FROM=1 THEN GOTO 430 ELSE LOCATE 15,20:PRINT"Enter MONTH-YEAR you want to save ( MM-YY )";:LOCATE 14,57:GOSUB 96:INPUT;" ",DAT$:IF DAT$="X" THEN GOTO 100
425 IF LEN(DAT$) < 4 OR LEN(DAT$) > 5 THEN SOUND 100,5:LOCATE 17,25:PRINT"Invalid date, try again.";:FOR I=1 TO 800:NEXT:LOCATE 17,25:PRINT SPACE$(40);:GOTO 420
430 FROM=0:COLOR 7,0:LOCATE 14,55:PRINT SPACE$(10);:GOSUB 96:LOCATE 15,10:PRINT"You want to save data for month of ";DAT$;" is this correct (Y/N)";:LOCATE 12,15:GOSUB 96:GOSUB 90:IF X$="y" OR X$ ="Y" THEN 440 ELSE IF X$="n" OR X$="N" THEN GOTO 405
432 SOUND 100,5:GOTO 430
440 ON ERROR GOTO 280:OPEN DR$+DAT$ FOR OUTPUT AS #1
450 FOR I=0 TO 29:WRITE #1,A(I):NEXT
460 CLOSE #1:GOTO 100
468 '
469 '********************************** summary of months ********************
473 COLOR 7,0:FOR I=0 TO 29:A(I)=0:B(I)=0:NEXT:LOCATE 10,14 :GOSUB 96:INPUT;"ENTER THE STARTING MONTH AND YEAR MM-YY ",SM$:IF SM$="X" THEN GOTO 100
480 LOCATE 12,14:GOSUB 96:INPUT;"ENTER THE ENDING MONTH AND YEAR MM-YY ",EM$:IF EM$="X" THEN GOTO 100
485 IF LEN(SM$) < 4 OR LEN(EM$) < 4 OR LEN(SM$) > 5 OR LEN(EM$) > 5 THEN LOCATE 14,18:PRINT"Invalid date, try again.";:FOR I=1 TO 800:NEXT:LOCATE 14,15:PRINT SPACE$(40);:GOTO 473
490 ON ERROR GOTO 280:DAT$=SM$:GOTO 530
500 OPEN DR$+DAT$ FOR INPUT AS #1:FOR I=0 TO 29:INPUT #1,B(I):NEXT:CLOSE:FOR I= 0 TO 29 :A(I)=A(I)+B(I):NEXT
510 IF DAT$=EM$ THEN GOTO 550 ELSE IF LEFT$(DAT$,2)="12" THEN Y=VAL(RIGHT$(DAT$,2)):Y=Y+1:DAAT$="1-"+STR$(Y):DAT$=MID$(DAAT$,1,2)+RIGHT$(DAAT$,2):GOTO 530
530 LOCATE 5,25:PRINT"READING DATA FOR MONTH OF":LOCATE 7,37:PRINT" ":LOCATE 7,35:PRINT DAT$:IF LEN(DAT$)=4 THEN P=1 ELSE IF LEN(DAT$)=5 THEN P=2 ELSE GOTO 390
540 GOTO 500
550 DAT$=SM$+" TO "+EM$:GOTO 810
558 '
559 '********************************** shortcut to this month ***************
560 CLS
570 DATTT$=LEFT$(DATE$,2) + "-" + RIGHT$(DATE$,2)
580 IF LEFT$(DATTT$,1)="0" THEN DATTT$=MID$(DATE$,2,1) + "-" + RIGHT$(DATE$,2)
590 ON ERROR GOTO 280
600 OPEN DR$+DATTT$ FOR INPUT AS #1:ON ERROR GOTO 280
660 IF X$="+" THEN GOTO 690 ELSE IF X$="-" THEN GOTO 710 ELSE IF X$="*" THEN GOTO 720 ELSE IF X$="/" THEN GOTO 750 ELSE IF X$="=" THEN GOTO 730 ELSE IF X$="C" OR X$="c" THEN GOTO 635
670 IF X$="E"OR X$="e" THEN GOTO 860
680 NUM$=NUM$+X$:NUMB$=NUM$:GOSUB 700:GOTO 650
690 TOTAL1=VAL(NUMB$)+TOTAL1:GOTO 640
700 LOCATE 17,72:PRINT" ";:LOCATE 17,72:PRINT USING ZX$;VAL(NUM$);:RETURN
710 M$="":TOTAL1= TOTAL1- VAL(NUMB$):GOTO 640
720 M$="1":TOTAL1= VAL(NUMB$):GOTO 640
730 IF M$="1" THEN GOTO 740 ELSE IF M$="2" THEN GOTO 760 ELSE LOCATE 17,72:PRINT" ";:LOCATE 17,72:PRINT USING ZX$;TOTAL1;:GOTO 640
740 M$="":TOTAL1=VAL(NUMB$)*TOTAL1:LOCATE 17,72:PRINT" ";:LOCATE 17,72:PRINT USING ZX$;TOTAL1;:GOTO 640
750 M$="2":TOTAL1=VAL(NUMB$):GOTO 640
760 M$="":TOTAL1=TOTAL1/VAL(NUMB$):LOCATE 17,72:PRINT" ";:LOCATE 17,72:PRINT USING ZX$;TOTAL1;:GOTO 640
800 '
801 '**************** Exit Program *****************************************
802 LP$=INKEY$:CLS:LOCATE 4,23:COLOR 0,7:PRINT" **** E X I T P R O G R A M **** ":COLOR 7,0:LOCATE 10,28:PRINT"(B) ==== Exit to BASICA":LOCATE 11,28:PRINT"(D) ==== Exit to DOS":LOCATE 15,28:COLOR 31,0:PRINT"F1 to ABORT EXIT":COLOR 7,0:GOSUB 96
805 GOSUB 90:IF X$="d" OR X$="D" THEN SOUND 100,30:GOTO 807:ELSE IF X$="b" OR X$="B" THEN KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):LOCATE ,,,13,13:CLS:KEY ON:ON ERROR GOTO 0:DEF SEG=&H40:POKE &H17,PEEK(&H17) AND 223:END
806 SOUND 100,5:GOTO 805
807 LOCATE 10,28:PRINT SPACE$(30):LOCATE 11,25:COLOR 15,0:PRINT"This function puts you into DOS.";:LOCATE 13,21:PRINT"!! ARE YOU SURE YOU WANT TO DO THIS !!";:GOSUB 90:IF X$="y" OR X$="Y" THEN COLOR 7,0:CLS:SYSTEM:DEF SEG=&H40:POKE &H17,PEEK(&H17) AND 22
808 IF X$="n" OR X$="N" THEN GOTO 100 ELSE SOUND 100,5:GOTO 807
809 '***************************** MAIN FORCAST DISPLAY ***************
810 CLS:COLOR 0,7:LOCATE 1,4:PRINT" FIXED EXPENSES ":LOCATE 1,54:PRINT" NON FIXED ":LOCATE 3,1:PRINT"CODE":LOCATE 3,10:PRINT" TYPE ":LOCATE 3,23:PRINT" AMOUNT ":LOCATE 3,40:PRINT"CODE":LOCATE 3,50:PRINT" TYPE ":LOCATE 3,63:PRINT" AMOUNT ":COLOR 7,0
820 LOCATE 1,34:COLOR 0,7:PRINT" ";DAT$;" ";
828 '
829 '********* PRINTS FIXED EXPENSE ************
830 TOTALOUT=0:TOTALIN=0:COLOR 7,0:LOCATE 4,1:FOR I=0 TO 18:READ A$:PRINT A$;:PRINT" ";:PRINT USING "#####.##";A(I):NEXT
838 '
839 '********* PRINTS NON FIXED EXPENSE ************
840 FOR L=4 TO 10:LOCATE L,40:READ A$:PRINT A$;:PRINT" ";:PRINT USING "#####.##";A(L+15);:NEXT:LOCATE 12,45:COLOR 0,7:PRINT" INCOME ":COLOR 7,0
848 '
849 '********* PRINTS INCOME ************
850 FOR L= 13 TO 16:LOCATE L,40:READ A$:PRINT A$;:PRINT" ";:PRINT USING "#####.##";A(L+13);:NEXT:RESTORE:GOSUB 910
855 '
856 '********* INPUT ON MAIN BUDGET DISPLAY ************
899 '********************* after amount entry *******************
900 IF Z$="X" THEN GOTO 100 ELSE A(X)=VAL(Z$):LOCATE 23,15:PRINT" Stand By Please ";:LOCATE 24,13:PRINT" Updating amount for ";TEMP$;" ";:PRINT USING ZX$;VAL(Z$);:PRINT" ";:GOTO 830
910 COLOR 7,0:FOR I = 0 TO 25:TOTALOUT=TOTALOUT+A(I):NEXT:FOR I=26 TO 29:TOTALIN=A(I)+TOTALIN:NEXT:LOCATE 19,40:PRINT" TOTAL INCOME =====>";:PRINT USING "##,###.##";TOTALIN:LOCATE 20,40:PRINT" TOTAL EXPENSE ====>";:PRINT USING "##,###.##";TOTALOUT
920 BUDGET=TOTALIN-TOTALOUT
930 LOCATE 22,40:IF BUDGET > 0 OR BUDGET =0 THEN PRINT" BALANCE ==========>";:PRINT USING "##,###.##";BUDGET:RETURN
940 COLOR 31,0:LOCATE 22,40:PRINT" NEGATIVE BALANCE==>";:PRINT USING "##,###.##";BUDGET:COLOR 7,0
950 RETURN
980 SOUND 100,5:GOTO 970
999 '
1000 '******************** SEE FILES ON DISK ****************************
1004 LOCATE 25,20:PRINT"Enter drive (A) or (B) or F1 for MENU";:GOSUB 96:GOSUB 90:LOCATE 4,34:COLOR 0,7:PRINT"Drive ";X$;:COLOR 7,0
1005 LOCATE 22,25:COLOR 31,0:PRINT"Stand by Please.";:COLOR 7,0:FOR I=6 TO 22:LOCATE I,1:PRINT SPACE$(79);:NEXT
1006 LOCATE 6,1:IF X$="a" OR X$="A" THEN FILES ELSE IF X$="b" OR X$="B" THEN FILES"b:*.*" ELSE SOUND 100,5:GOTO 1004
1007 GOTO 1004
1998 '
1999 '*************************** loan program *************************
2000 COLOR 7,0:CLS:LOCATE 15,1:PRINT" You will have to insert your own program here. I used the one from the DOS diskette. I could not send it in this program as that is against the law.
2010 LOCATE 17,1:PRINT"whatever you use make sure you return to line 100.";
2020 LOCATE 25,20:COLOR 0,7:PRINT" Hit any key to continue ";:GOSUB 96:GOSUB 90:GOTO 100
4007 LOCATE 10,12:COLOR 7,0:PRINT"Do you want output to (D)isplay or (P)rinter ";:GOSUB 96:GOSUB 90:IF X$="d" OR X$="D" THEN OUTPUT$="scrn:" ELSE IF X$="p" OR X$="P" THEN OUTPUT$="lpt1:" ELSE SOUND 100,5:GOTO 4007
4110 LOCATE 10,12:COLOR 7,0:PRINT SPACE$(50);:IF OUTPUT$="lpt1:" THEN LOCATE 8,19:COLOR 7,0:PRINT"As the computer on startrek would say";:COLOR 31,0:LOCATE 15,28:PRINT" **** W O R K I N G **** ";:COLOR 7,0:LOCATE 25,63:PRINT SPACE$(14);
4113 LOCATE 24,1:ON ERROR GOTO 280
4115 OPEN DR$+"BUDGET.DOC" FOR INPUT AS #1
4120 OPEN OUTPUT$ FOR OUTPUT AS #2
4125 IF EOF(1) GOTO 5000
4130 INPUT #1,H$
4135 PRINT #2,H$
4136 LINES=LINES+1:IF OUTPUT$="lpt1:" THEN GOTO 4125 ELSE IF LINES=16 THEN GOSUB 5010
4140 GOTO 4125
5000 CLOSE:LOCATE 25,1:COLOR 31,0:PRINT"End, Enter to continue";:COLOR 7,0:GOSUB 90:GOTO 100
5010 LINES=0:LOCATE 25,1:COLOR 31,0:PRINT"Hit enter to continue";:COLOR 7,0:GOSUB 90:LOCATE 25,1:PRINT SPACE$(22);:LOCATE 24,1:RETURN
10000 '****************** DATA STATMENTS *****************************
10005 DATA " 00 MORTGAGE ======>"," 01 VISA ==========>"," 02 FOOD ==========>
10010 DATA " 03 POWER =========>"," 04 WATER & SEWER =>"," 05 CAR INSURANCE =>
10015 DATA " 06 CABLE TV ======>"," 07 T.O.M. INS ====>"," 08 TELEPHONE =====>
10020 DATA " 09 CAR PAYMENT ===>"," 10 H.F.C (VAN) ===>"," 11 GASOLINE ======>
10030 DATA " 12 RAVENSCHROFT ==>"," 13 NEWSPAPER =====>"," 14 SPECIAL =======>