%DYNAMICROUTINESPEC DEFINE(%STRING (63)S) %DYNAMICROUTINESPEC PROMPT(%STRING (15)S) %EXTERNALROUTINE MORT(%STRING (63)S) %INTEGER I, J, K, YEAR %REAL DEPR PA %REAL HOUSE APPR %REAL BSOC INT, MONTHLY, CAP REP %OWNINTEGER TITLE=0 %IF S#'' %START DEFINE('ST1,'.S) SELECT OUTPUT(1) %FINISH ! ! HOUSE APPR=1.02; ! REAL INCREASE (AFTER ! DEPRECIATION) !! !************************************************* !* * !* USE OF THE FLAG 'ENDOW' * !* * !* ENDOW = 0 - STANDARD POLICY * !* &1=1 - PROTECTION POL., INS PAID ANNUALLY * !* &2=2 - ENDOWMENT POLICY * !* &4=4 - PROT. POL, INSURANCE ACCUMULATED * !* * !* &16=16 - PRINTS YEARLY FIGURES * !* * !************************************************* !! %ROUTINE EVAL(%REAL MONTHLY, BSOC INT, LUMP SUM, %INTEGER %C ATYEAR, ENDOW) %ROUTINESPEC DONE %ROUTINESPEC PROFIT %ROUTINESPEC POSN AT(%INTEGER YEAR) %REAL R12 %REAL DEPR FACT, TAX RATE %REAL VALUE, P0, IRATE, IRATE1, IPREM, IPREM2, IPREMX %REAL W, R, TR, TAX RLF, PAID, W0, T0, TR0, ORIGW, PAID2, TEMP %REAL EXTRA, DF0, PROT, EX2, H APPR, ORIGV, Z1, Z2, Z3, Z4 %REAL CR, IRATEM %INTEGER Y, YR, I, J, FLAG, INFLATION, MONTH %IF ENDOW&4=4 %START ; ! ANNUAL INSURANCE ADDED IN IPREM2=35.00/12 IPREM=0; ! THIS IS ADDED TO 'PAID' ANNUAL %FINISHELSESTART ; ! ANNUAL PREMIUM ADDED TO 'PAID' IPREM=35.00/12; ! ADDED TO PAID IPREM2=0; ! ADDED TO CAPITAL SUM %FINISH YR=-100; ! YEAR FOR LUMP SUM REPAYMENT YR=AT YEAR %IF LUMP SUM>0 CR=LUMP SUM TAX RATE=0.30 VALUE=43000 BSOC INT=BSOC INT+0.0025 %IF ENDOW&2=2 IRATE=BSOC INT; ! CURRENT INTEREST RATE ORIGV=VALUE R=MONTHLY W=6000; ORIGW=W IRATEM=IRATE/12; ! MONTHLY INTEREST RATE IRATE1=1+IRATEM %IF ENDOW&2=2 %START ; ! ENDOWMENT POLICY EXTRA=9.04 %FINISHELSESTART %IF ENDOW&1=1 %THEN EXTRA=1.00 %ELSE EXTRA=0 %FINISH EX2=EXTRA-EXTRA*TAX RATE/2; ! TAX RELIEF R12=12*R ! ! PRINTSTRING( 'BSOC INT ') PRINT(BSOC INT*100, 2, 2) PRINTSTRING( '% MONTHLY ') PRINT(R+EXTRA, 3, 2) PRINTSTRING( ' AFTER TAX (INITIALLY):') PRINT(R+EX2-W*IRATEM*TAX RATE, 3, 2) %IF ENDOW&2=2 %THEN PRINTSTRING( ' ENDOWMENT POLICY') %IF ENDOW&1=1 %THEN PRINTSTRING( ' +PROTECTION POLICY') %IF ENDOW&4=4 %THEN PRINTSTRING( %C ' PROTECTION POLICY+INSURANCE ADDED TO CAP. SUM') NEWLINES(2) !! !! %CYCLE INFLATION=0, 2, 20 IPREMX = IPREM2 DEPR PA=INFLATION/100 DEPR FACT=1.0 Y=0 TAX RLF=0 PAID=0 W0=-1; T0=-1; P0=-1 H APPR=HOUSE APPR+DEPR PA W=ORIGW; VALUE=ORIGV L20: %CYCLE MONTH=1, 1, 12 ! WORK OUT NEW CAPITAL ! OUTSTANDING %IF W>0 %AND ENDOW&2=0 %THEN W=W*IRATE1-R+IPREMX ! STANDARD POLICY ONLY !! ! IF A LUMP SUM HAS BEEN ! REPAID, DO THE SAME SUMS ! ASSUMING THAT IT ! HAD NOT BEEN REPAID, AS ! WELL, TO EVALUATE PROFIT ON ! LUMP SUM ! SELLING AFTER 5 YEARS. %IF W0>0 %THEN W0=W0*IRATE1+IPREMX-R PAID2=(R+EXTRA)*DEPR FACT+IPREM PAID=PAID+PAID2 ! ACCUMULATE TOTAL PAID IN ! CURRENT TERMS TEMP=W*IRATEM*DEPR FACT %IF PAID20 %THEN T0=T0+TAX RATE*W0*IRATEM*DEPR FACT %IF Y=YR %AND CR>0 %THENSTART ! CAPITAL REPAYT TAKES PLACE ! THIS YEAR. SAVE ! CURRENT CAP OUTSTDG, TAX ! AND VALUE W0=W; T0=TAX RLF W=W-CR; DF0=DEPR FACT %FINISH %IF -2000REP %FINISH %REPEAT %IF Y=25 %AND ENDOW&2=2 %THEN DONE %AND ->REP %IF ENDOW&16=16 %THEN DONE; ! MONITORING BIT VALUE=H APPR*VALUE; ! STEP UP HOUSE VALUE %IF Y=5 %THEN POSN AT(Y) %IF Y=YR+5 %THEN PROFIT; ! EVALUATE 5-YEAR PROFIT %IF Y>40 %START DONE ->REP %FINISH DEPR FACT=DEPR FACT*(1-DEPR PA) Y=Y+1 ->L20; ! TO TREAT A FURTHER YEAR REP: %REPEAT PRINTSTRING( ' ------------------------------------------------------------------- ') %IF Y>40 %START; PRINTSTRING('EVER INCREASING LOAN') PRINTSTRING(' OF #'); PRINT(W,10,0) %FINISH NEWLINES(5) !! !! !! !!********************************************************** !******* !! !! !! %ROUTINE DONE %IF TITLE=0 %START TITLE=1 NEWLINES(2) PRINTSTRING( 'FIGS ARE 1980 VALUES') SPACES(55) PRINTSTRING( ' POSITION AT SELLING AFTER 5 YEARS') PRINTSTRING( ' MONEY MONTHLY CAP AT YRS TOTAL LESS TAX NET PD OFF') SPACES(14) PRINTSTRING( 'RECEIPTS CAPITAL NET PAID PROCEEDS') PRINTSTRING( ' DEP REPAYT FROM NOW COST RLF COST IN(YRS)') SPACES(13) PRINTSTRING( 'FROMSALE OUTSTDG FROM NOW (NET) ') %FINISH NEWLINE WRITE(INFLATION, 3); PRINTSTRING( "%") PRINT(R, 5, 2) %IF YR#-100 %START PRINT(CR, 5, 2) WRITE(YR, 11) %FINISHELSE SPACES(21) PRINT(PAID, 5, 2) PRINT(TAX RLF, 5, 2) PRINT(PAID-TAX RLF, 5, 2) WRITE(Y, 5) %IF Y>5 %START PRINT(Z1, 18, 2) PRINT(Z2, 6, 2) PRINT(Z3, 6, 2) PRINT(Z4, 8, 2) %FINISH %END %ROUTINE PROFIT NEWLINE PRINTSTRING( 'PROFIT SELLING AT 5 YEARS =') PRINT((W0-W)*DEPR FACT-T0+TAX RLF-CR, 5, 2) ! ! W0 IS CAPITAL THAT WOULD ! HAVE BEEN OUTSTANDING HAD ! LUMP SUM NOT ! BEEN PAID. W IS CAPITAL ! AMOUNT OUTSTANDING NOW. SO ! PROFIT ON ! LUMP SUM IS THE DIFFERENCE ! BETWEEN THESE LES TH LUMP SUM. ! NEWLINE %END %ROUTINE POSN AT(%INTEGER YEAR) ! !PRINT RECEIPTS FROM SALE ! LESS CAPITAL AMOUNT OUTSTANDING ! LESS NET AMOUNT PAID OUT. ! Z1=VALUE*DEPR FACT Z2=W*DEPR FACT Z3=PAID-TAX RLF Z4=(VALUE-W)*DEPR FACT-PAID+TAX RLF %END ; ! POSN AT %END ; ! EVAL DEPR PA=0.00 LOOP: PROMPT('MONTHLY REP?') READ(MONTHLY) %RETURNIF MONTHLY=0 PROMPT('BSOC INT(%)?') READ(BSOC INT) BSOC INT=BSOC INT/100 PROMPT('ENDOW?') READ(I) PROMPT('CAP REPAY?') READ(CAP REP) %IF CAP REP#0 %START PROMPT('AT YEAR?') READ(YEAR) %FINISHELSE YEAR=0 NEWPAGE TITLE=0 EVAL(MONTHLY, BSOC INT, CAP REP, YEAR, I) ->LOOP %END ; ! MORT %EXTERNALROUTINE SAVING(%STRING (63)S) %INTEGER I, J, K %OWNREAL DEPR PA=0.10 %REAL DEPR FACT, SUM, MONTHLY, IRATE %INTEGER YEAR, MONTH, INFLATION, INT2 !! !! %IF S#'' %START DEFINE('ST1,'.S) SELECT OUTPUT(1) %FINISH LOOP: PROMPT('MONTHLY PAY?') READ(MONTHLY) %IF MONTHLY=0 %THENRETURN NEWPAGE PRINTSTRING( 'SAVING A FIXED MONTHLY AMOUNT (') PRINT(MONTHLY, 1, 2) PRINTSTRING( ') OVER 10 YEARS ALL FIGURES ARE AT 1980 MONEY VALUES ') PRINTSTRING( ' INFLATION / INTEREST RATES ') SPACES(4) %CYCLE I=5, 1, 15; WRITE(I, 10); %REPEAT NEWLINE %CYCLE INFLATION=0, 1, 20 WRITE(INFLATION, 2); PRINTSTRING( "%") %CYCLE INT2=5, 1, 15 IRATE=INT2/100 SUM=0 DEPR FACT=1; DEPR PA=INFLATION/100 %CYCLE YEAR=1, 1, 10 %CYCLE MONTH=1, 1, 12 SUM=SUM+MONTHLY+SUM*IRATE/12 %REPEAT DEPR FACT=DEPR FACT*(1-DEPR PA) %REPEAT PRINT(SUM*DEPR FACT, 7, 2) %REPEAT NEWLINE %REPEAT ->LOOP %END %ENDOFFILE