10 REM Calculates the Term and cost of servicing the mortgage 20 REM Interest is charged on a monthly basis @ 1/12th annual rate 30 REM Also gives mortgagee's accrued income from reinvesting the 40 REM monthly premiums at the same interest rate 50 REM Rounding:- >= 0.005 = 0.01 : < 0.005 = 0.00 60 REM (C) DP-J 2Apr91:updated 6Dec91 70 : 80 MODE3 90 PRINTTAB(15,5)"FOR USE OF 8 BIT SOFTWARE USER GROUP MEMBERS ONLY" 100 PRINTTAB(25,7)"Not for PD distribution" 110 PRINTTAB(25,12)"-- REPAYMENT MORTGAGES --" 120 @%=&0002020C 130 INPUTTAB(0,15)"Mortgage Principal ` "P 140 INPUT"Annual Interest Rate% "i 150 INPUT"First payment date (dd,mm,yy) "d$,m0,y0 160 INPUT"Desired Mortgage Term (years) "n%:n%=12*n% 170 PROCpremiums 180 PROCdisplay 190 PRINT'TAB(20)"OK, FINISHED"' 200 END 210 : 220 DEF PROCpremiums 230 M=P*((i/1200)*(1+i/1200)^n%)/((1+i/1200)^n%-1) 240 PRINT'"Monthly premiums are ` ";M 250 PROCnewpremium 260 ENDPROC 270 : 280 DEF PROCnewpremium 290 PRINT'"Do you wish to pay a different premium (Yy/Nn) ?":REPEAT:g$=CHR$(GET AND 95):UNTIL INSTR("YN",g$)<>0 300 IFg$="Y" INPUT"How much ?"M 310 ENDPROC 320 : 330 DEF PROCdisplay 340 RESTORE:FORj=1TOm0:READm0$:NEXT:REM store start month string 350 m=m0-1:IFm<1 m=12:y=y0-1 ELSE y=y0 360 RESTORE:FORj=1TOm:READm$:NEXT:REM initialise DATA pointer to m 370 Pbal=P:Mar=0:REM Pbal is the Principal balance at end of month 380 REM Mar is Mortgagee's Accrued Return at end of month 390 mth%=0:Itodate=0:REM mth% is month counter 400 flag%=0 410 PRINT'"Detailed Listing (L) or Summary only (S) ?" 420 VDU14:VDU26 430 REPEAT:g$=CHR$(GET AND 95):UNTIL INSTR("LS",g$)<>0:CLS 440 IFg$="L" PROClist ELSE PRINTTAB(18,12)"JUST HAVING A BYTE .....BACK SOON":PROCsummary 450 PRINT'"Loan Principal "P 460 PRINT"Annual Interest Rate%"i 470 PRINT"Monthly Repayment "M 480 PRINT'"First payment date ";d$" ";m0$" ";:IFy0<10 PRINT"0";STR$(y0) ELSE PRINTSTR$(y0) 490 PRINT" Mortgage Term : months "STR$(mth%) 500 PRINT" Final " STR$(mth%)"";:PROCth:PRINT" month payment"SPC(3-LENSTR$(mth%))Mfinal 510 PRINT'"Completion Date "d$" ";m$" ";:IFy<10 PRINT"0";STR$(y) ELSE PRINTSTR$(y) 520 PRINT" Total Interest charges "Itodate 530 Tcost=(mth%-1)*M+(M+Pbal):PRINT" Total Cost "Tcost 540 @%=&0002030C:PRINT" Cost Factor "Tcost/P 550 @%=&0002020C:PRINT'"Mortgagee's accrued returns"Mar 560 @%=&0002030C:PRINT" Return Factor "Mar/P 570 @%=&0002020C:m=m0:y=y0 580 VDU15 590 PRINT'"Do you want to see an earlier Closing Balance (Yy/Nn) ?" 600 REPEAT:g$=CHR$(GET AND 95):UNTIL INSTR("YyNn",g$)<>0 610 IFg$="Y" PROCclosing:PRINT'"Another date (YyNn) ?":GOTO600 620 PRINT'"REPEAT ? (Rr) or NEW MORTGAGE ? (Mm) or QUIT ? (Qq) ":REPEAT:g$=CHR$(GET AND 95):UNTIL INSTR("RrMmQq",g$)<>0 630 IFg$="R" PROCnewpremium:PROCdisplay 640 IFg$="M" RUN 650 ENDPROC 660 : 670 DEF PROCclosing 680 INPUT"What date ? mm,yy "mm,yy; 690 IFyy<10 yy$="0"+STR$(yy) ELSE yy$=STR$(yy):REM Convert 00-09 decimal to 00-09 string for year 2000-2009 700 IFyymth% OR mm>12 PRINT"INVALID DATE ":GOTO680 730 Pbal=P:Mar=0:mth%=0:PROCsummary:PRINT'"Closing balance at "d$;"/"STR$(mm);"/"yy$" is ` "X;" plus early closure penalty, if any." 740 ENDPROC 750 : 760 DEF PROClist 770 PRINTTAB(2)"Due";TAB(12)"Month";TAB(21)"Interest";TAB(33)"Monthly";TAB(45)"Total";TAB(56)"Balance";TAB(70)"Mar" 780 PRINTTAB(2)"date";TAB(12)"ref no";TAB(23)"due";TAB(33)"payment";TAB(44)"Int paid";TAB(57)"Owing" 790 VDU28,0,24,79,3 800 PRINT'TAB(42)"(Mortgage =";TAB(60-LEN(STR$(INT(P))));P")" 810 REPEAT 820 m=m+1:IFm MOD12=1 RESTORE:READm$:y=y+1:y=y MOD100 ELSE READm$ 830 PRINTd$" ";m$" ";:IFy<10 PRINT"0";STR$(y);ELSE PRINTSTR$(y); 840 mth%=mth%+1 :PRINTTAB(15-LENSTR$(mth%))STR$(mth%); 850 Idue=Pbal*i/1200:Itodate=Itodate+Idue:PRINTIdue; 860 IF M<=Pbal PRINTM; ELSE Mfinal=Pbal+Idue:PRINTMfinal; 870 PRINTItodate; 880 Pbal=Pbal+Idue-M:IF Pbal<0 PRINT0;:Mar=Mar+Mar*i/1200+Pbal+M:PRINTMar ELSE PRINTPbal;:IFmth%=1 Mar=M:PRINTMar ELSE Mar=Mar+Mar*i/1200+M:PRINTMar 890 UNTIL Pbal<.01 900 ENDPROC 910 : 920 DEF PROCsummary 930 REPEAT 940 mth%=mth%+1 950 Idue=Pbal*i/1200 :Itodate=Itodate+Idue:Pbal=Pbal+Idue-M 960 IFmth%=flag% X=Pbal+M:REM X is closing balance 970 IF Pbal<.01 Mfinal=Pbal+M:Mar=Mar+Mar*i/1200+Pbal+M ELSE Mar=Mar+Mar*i/1200+M 980 UNTIL Pbal<.01 990 y=(y0+(m0+mth%-1) DIV12) MOD100 :REM Calc. final year. MOD100 for y>2000 1000 m=(m0+mth%-1) MOD12:IFm=0 m=12:y=y-1:REM Calc. final month 1010 RESTORE:FORj=1TOm:READm$:NEXT 1020 IF flag%=0 CLS 1030 ENDPROC 1040 : 1050 DEF PROCth 1060 Z%=mth% MOD100 1070 IF Z%>10 AND Z%<14 Z%=0 1080 Z%=Z% MOD10 1090 IF Z%=1 PRINT"st";:ENDPROC 1100 IF Z%=2 PRINT"nd";:ENDPROC 1110 IF Z%=3 PRINT"rd";:ENDPROC 1120 PRINT"th";:ENDPROC 1130 : 1140 DATA Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec