Compucolor.org – Virtual Media

Listing of file='BUDGET.BAS;01' on disk='vmedia/home_budget_3-sector.ccvf'

0 REM  ****************** BUDGET ***************************
1 REM
50 PLOT 27,11:CLEAR 4000
52 DD= PEEK (65535):DSK$= MID$ (STR$ (DD- 1),2)+ ":"
54 GOTO 350
56 REM
58 REM  ****************** YES/NO ***************************
60 POKE 33278,0
62 IF PEEK (33278)= 0GOTO 62
64 IF PEEK (33278)= 89THEN PRINT "ES":Q$= "Y":RETURN
66 IF PEEK (33278)= 78THEN PRINT "O":Q$= "N":RETURN
68 PLOT 26,32,26:GOTO 60
70 REM
72 REM  ************** INKEY (SINGLE KEY INPUT) *************
74 POKE 33278,0
76 Y= PEEK (33278)
78 IF Y= 0GOTO 76
80 Y$= CHR$ (Y):RETURN
82 REM
112 REM  ************* FORMAT MONEY **************************
113 REM  MO ->->-> MO$
114 RH$= STR$ ((1000* (MO* SGN (MO)- INT (MO* SGN (MO)))+ 1005)/ 10)
115 IF VAL (RH$)> = 200THEN MO= (MO* SGN (MO)+ 1)* SGN (MO)
116 LH$= STR$ (INT (MO* SGN (MO))* SGN (MO)):IF VAL (LH$)= 0AND SGN (MO)= - 1THEN LH$= "-0"
117 LH$= "$"+ LH$
118 IF LEN (LH$)> = 6THEN 120
119 LH$= " "+ LH$:GOTO 118
120 RH$= MID$ (RH$,3,2):MO$= LH$+ "."+ RH$:RETURN
210 REM
330 REM  ************* MAIN PROGRAM *************************
340 REM
350 NLNGTH$= "            "
400 IF DD= 1THEN PLOT 12,14,3,10,15:INPUT "LOAD DATA DISK AND HIT <RETURN> ";A
420 PLOT 12,14,3,28,1:PRINT "BUDGET":PLOT 15
430 PLOT 15,3,10,14:PRINT "52 = WEEKLY"
440 PLOT 3,10,15:PRINT "26 = FORTNIGHTLY"
450 PLOT 3,10,16:PRINT "12 = MONTHLY"
460 PLOT 3,10,17:PRINT " 4 = QUARTERLY   ETC."
470 PLOT 3,10,25,11:INPUT "SELECT PERIOD....";PERIOD
480 IF PERIOD< 1OR PERIOD> 366THEN PLOT 7:GOTO 470
486 PLOT 3,10,30,11:INPUT "ENTER DATE (D.M.YY)....";TD$:GOSUB 21000:IF ERR= 1THEN PLOT 7:GOTO 486
490 FILE "R",1,DSK$+ "INCTIT",1
500 FILE "R",2,DSK$+ "INCOME",1
510 F1LAG= 0:FTAL= 0:ATAL= 0:BAL= 0
520 GET 1,1;NTREC:GET 2,1;NIREC
522 GOSUB 2000:PRINT PR$;PL$;EM$
523 PRINT SP$;GR$;TAB( 20+ TB)"***";SH$;" BUDGET FOR  ";TD$;RH$;" ***":PRINT SP$;BL$;TAB( 24+ TB);"=--=--=--=-=--=--=--="
524 PRINT :PRINT SP$;TAB( 20+ TB)BL$;"INCOME";TAB( 39+ TB)RED$;"EXPENDITURE";TAB( 55+ TB)GR$;"BALANCE"
526 GOSUB 1600:PRINT
530 REM      REPEAT FOR ALL INCOME RECORDS
540 FOR REC= 2TO NTREC- 1
550 ACNUM= REC- 1
560 GET 1,REC,13;BUDCAT$[1]
570 IF BUDCAT$< > "1"THEN 720
580 GET 1,REC;NAME$[12],DUMMY$[2],FRQ$[2],FCAST
590 FRQ= VAL (FRQ$)
591 IF ACNUM< > 1THEN 610
592 FILE "R",3,DSK$+ "PAYS",1:GET 3,1;NREC,NSAL:ACT= 0:IF NREC= 2THEN FILE "C",3:GOTO 650
593 FOR IBYTE= 1TO NSAL- 1
594   GET 3,NREC- 1,IBYTE* 4+ 10;ITEM
595   ACT= ACT+ ITEM
596 NEXT IBYTE
597 FILE "C",3:GOTO 660
598
600 REM      REPEAT BACKWARDS TO FIND LATEST INCOME
610 FOR IREC= (NIREC- 1)TO 2STEP - 1
620 GET 2,IREC;IACNUM$[2]
630 IF VAL (IACNUM$)= ACNUMTHEN GET 2,IREC,24;ACT:GOTO 660
640 NEXT IREC
650 ACT= FCAST:F1LAG= 1
660 ACT= ACT* FRQ/ PERIOD
662 FCAST= FCAST* FRQ/ PERIOD
670 ATAL= ATAL+ ACT:FTAL= FTAL+ FCAST
690 PRINT SP$;GR$;NAME$;" ";:MO= ACT:GOSUB 114:PRINT BL$;MO$;
700 IF F1LAG= 1THEN PRINT MA$;"*";GR$:F1LAG= 0:GOTO 720
710 PRINT
720 NEXT REC
725 BAL= BAL+ ATAL
730 PRINT :PRINT SP$;YE$;SI$;"   GROSS INCOME        ";RI$;:MO= ATAL:GOSUB 114:PRINT BL$;MO$;"                      ";:MO= BAL:GOSUB 114:PRINT GR$;MO$:PRINT
740 FILE "C",1,2
750 FILE "R",1,DSK$+ "EXPTIT",1
760 FILE "R",2,DSK$+ "EXPEND",1:FILE "R",3,DSK$+ "PAYS",1
764 GET 1,1,5;NTREC:GET 2,1;NEREC:GET 3,1;NPREC
770 FTAL= 0:ATAL= 0:KOUNT= 0:START= 2
780 REM      REPEAT FOR BUDGET CATEGORIES 1 TO 4
790 FOR RBUD= 1TO 4
792 FSUB= 0:ASUB= 0:IF RBUD= 2THEN KOUNT= KOUNT+ 1
800 REM         REPEAT FOR EACH EXPENDITURE CATEGORY
810 FOR REC= STARTTO NTREC- 1
820 GET 1,REC,13;BUDCAT$[1]:GET 1,REC,23;IACNUM$[2]:GET 1,REC,38;FINISH$[1]
830 IF NOT (VAL (BUDCAT$)= RBUDAND FINISH$< > "Y"AND VAL (IACNUM$)= 1)THEN 990:REM  NEXT REC
840 GET 1,REC;NAME$[12],DUMMY$[2],FRQ$[2],FCAST:RACNUM= REC- 1
850 FRQ= VAL (FRQ$)
860 IF RBUD> = 4OR RACNUM> 15THEN 910:REM  USE FORECAST VALUES
861 REM  IF REC>16 THEN 870
862 GET 3,NPREC- 1,(REC- 1)* 4+ 38;ACT:GOTO 930
870 REM  FOR EREC=NEREC TO 2 STEP -1
880 REM  GET 2,EREC;ACNUM$[2]
890 REM  IF VAL (ACNUM$)=RACNUM THEN GET 2,EREC,29;ACT:GOTO 930
900 REM  NEXT EREC
910 ACT= FCAST
920 F1LAG= 1
930 ACT= ACT* FRQ/ PERIOD
932 FCAST= FCAST* FRQ/ PERIOD
940 ASUB= ASUB+ ACT
950 FSUB= FSUB+ FCAST
960 PRINT SP$;NAME$;"                      ";:MO= ACT:GOSUB 114:PRINT RED$;MO$;GR$;
970 IF F1LAG= 1THEN PRINT MA$;"*";GR$:F1LAG= 0:GOTO 990
980 PRINT
990 IF RBUD= 2AND KOUNT= 1AND REC= 16THEN 1010
1000 NEXT REC
1010 BAL= BAL- ASUB
1020 IF RB= 1THEN PRINT SP$;YE$;SI$;"   STATUTORY EXPENSES                       ";RI$;
1025 IF RB= 1THEN MO= ASUB:GOSUB 114:PRINT RE$;MO$;:MO= BAL:GOSUB 114:PRINT GR$;" ";MO$:PRINT :GOTO 1070
1030 IF NOT (RBUD= 2AND KOUNT= 1)THEN 1045
1032 PRINT SP$;YE$;SI$;"   FIXED EXPENSES                           ";RI$;:MO= ASUB:GOSUB 114:PRINT RE$;MO$;:MO= BAL:GOSUB 114:PRINT GR$;" "MO$:PRINT
1040 START= 17:RBUD= RBUD- 1:GOTO 1070
1045 START= 2
1050 IF RBUD= 2THEN PRINT SP$;YE$;SI$;"   ANNUAL EXPENSES                          ";RI$;
1055 IF RBUD= 2THEN MO= ASUB:GOSUB 114:PRINT RE$;MO$;:MO= BAL:GOSUB 114:PRINT GR$;" ";MO$:PRINT :GOTO 1070
1060 IF RBUD= 3THEN PRINT SP$;YE$;SI$;"   LOAN REPAYMENTS                          ";RI$;
1062 IF RBUD= 3THEN MO= ASUB:GOSUB 114:PRINT RE$;MO$;:MO= BAL:GOSUB 114:PRINT GR$;" ";MO$:PRINT :GOTO 1070
1065 PRINT SP$;YE$;SI$;"   GENERAL EXPENSES                         ";RI$;:MO= ASUB:GOSUB 114:PRINT RE$;MO$;:MO= BAL:GOSUB 114:PRINT GR$;" ";MO$:PRINT
1070 FTAL= FTAL+ FSUB:ATAL= ATAL+ ASUB
1080 NEXT RBUD
1090 GOSUB 1500
1092 PRINT :GOSUB 2500:INPUT "HIT <RET> TO CONTINUE....";ANS
1100 FILE "C",1,2,3
1110 PLOT 12,3,10,14,11:PRINT "ANOTHER BUDGET (Y/N)? ";:GOSUB 60
1120 IF Q$= "Y"THEN 420
1125 IF Q$< > "N"THEN PLOT 7:GOTO 1110
1190 PLOT 12,3,5,12:INPUT "LOAD APPROPRIATE PROGRAM DISK AND HIT <RETURN> ";ANS:LOAD "MENU":RUN
1480
1490 REM  SUB ULINE
1500   PRINT SP$;MA$;
1505   FOR IJ= 1TO 63:PRINT "=";:NEXT IJ:PRINT GR$
1510 RETURN :END
1520
1590 REM  SUB ULINE2
1600   PRINT SP$;MA$;
1605   FOR IJ= 1TO 63:PRINT "-";:NEXT IJ:PRINT GR$
1610 RETURN :END
1620
2000 PLOT 3,0,31,11:PRINT "TO PRINTER OR SCREEN: ";:GOSUB 74:IF Y$= "P"THEN PRINT "RINTER":GOTO 2080
2005 IF Y$< > "S"THEN PLOT 7:GOTO 2000
2010 PRINT "CREEN"
2020 REM  IF OUTPUT TO SCREEN
2030   PFLAG= 0
2045     PLNGTH$= "":SITAL$= "":RITAL$= "":SHEAVY$= "":RH$= ""
2050     EMPH$= "":SPACE$= "":BLUE$= "":MAGENTA$= "":PRNTR$= "":CYAN$= "":GREEN$= "":WHITE$= "":RED$= "":YELLOW$= "":GOTO 2150
2060   REM  ENDIF
2070 REM  ELSE
2080   PLOT 3,0,31,11:INPUT "TURN ON PRINTER & SET PAPER: HIT <RETURN> WHEN READY ";A:PLOT 12
2090   POKE 33289,132:PFLAG= 1:TMP= PEEK (33265)
2110     FILE "R",6,DSK$+ "PRNTER",1:GET 6,1;PRNTER$[7],EMPH$[4],DUMMY$[20],PLNGTH$[4],DUMMY$[12],SITAL$[4],RITAL$[4],SHEAVY$[4],RH$[4]
2115     FILE "C",6
2120     SPACE$= "         ":BLUE$= "":MAGENTA$= "":CYAN$= "":GREEN$= "":WHITE$= "":RED$= "":YELLOW$= ""
2130   REM  ENDIF
2140 REM  ENDIF
2150 TB= LEN (SPACE$):RETURN
2160 REM
2170 REM
2480 REM  ************ POST PRINTING PROCEDURE ****************
2490 REM
2500 IF PFLAG= 1THEN POKE 33265,TMP:POKE 33289,64
2510 RETURN
2520 REM
21000 REM  ******************** DATE ROUTINE *******************
21005 REM
21010 REM  INPUT DATE AS D.M.YY ,ASSIGN TO TD$, AND CALL THIS
21015 REM  OUTPUT IS TD$ IN THE FORM OF '12 JAN 81'
21020 REM
21025 ERR= 0:IF LEN (TD$)= 0THEN ERR= 1:GOTO 21120
21027 FOR JI= 1TO LEN (TD$):T6= ASC (MID$ (TD$,JI,1)):IF NOT (T6= 46OR (T6> 47AND T6< 58))THEN ERR= 1:GOTO 21120
21029 NEXT JI
21030 STRMTH$= "  JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
21035 IF  MID$ (TD$,2,1)= "."THEN TD$= "0"+ TD$
21070 IF MID$ (TD$,5,1)= "."THEN TD$= LEFT$ (TD$,3)+ "0"+ RIGHT$ (TD$,4)
21080 MM= VAL (MID$ (TD$,4,2))
21090 MM$= " "+ MID$ (STRMTH$,MM* 3,3)+ " "
21100 TD$= LEFT$ (TD$,2)+ MM$+ RIGHT$ (TD$,2)
21110 IF  LEFT$ (TD$,1)= "0"THEN TD$= " "+ RIGHT$ (TD$,8)
21120 RETURN