10  REM MORTGAGE ANALYSIS.  THIS PROGRAM IS A MODIFIED VERSION
20  REM  OF SYSTEM LIBRARY PROGRAM MORGAG,REV. B.
25  REM HP CONTRIBUTED LIBRARY, REV. C, 2/75
30  DIM X$[54],F$[27],M$[36]
40  LET C1=LOG(10)
50  M$="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
60  DEF FNC()=9*(INT(LOG()/C1)+2)
70  PRINT "*  MORTGAGE ANALYSIS  *"
80  PRINT 
90  PRINT "IF YOU WANT TO FIND:"
100  PRINT "     THE RATE, TYPE '1'"
110  PRINT "     THE LIFE, TYPE '2'"
120  PRINT "     THE AMOUNT BORROWED, TYPE '3'"
130  PRINT "     THE MONTHLY PAYMENT, TYPE '4'"
140  PRINT "WHICH DO YOU WANT";
150  INPUT Z
160  PRINT 
170  IF Z=1 THEN 230
180  PRINT "NOMINAL ANNUAL RATE IN PERCENT";
190  INPUT R
200  R=R/100
210  PRINT 
220  IF Z=2 THEN 270
230  PRINT "MORTGAGE LIFE: YEARS, MONTHS";
240  INPUT Y,M
250  PRINT 
260  IF Z=3 THEN 310
270  PRINT "AMOUNT TO BE BORROWED";
280  INPUT A
290  PRINT 
300  IF Z=4 THEN 340
310  PRINT "AMOUNT OF ONE MONTHLY PAYMENT";
320  INPUT P
330  PRINT 
340  PRINT "SETTLEMENT DATE (MO,YEAR)";
350  INPUT T1,T2
360  PRINT 
370  PRINT "TABLE LENGTH (YEARS)";
380  INPUT T3
390  PRINT 
400  PRINT "ANNUAL OR MONTHLY SUMMMARY(1OR0)";
410  INPUT Z1
420  PRINT 
430  X$="11X,1D.DD11X,1D.DD10X,2D.DD09X,3D.DD08X,4D.DD07X,5D.DD"
440  IF Z=2 THEN 470
450  LET N=12*Y+M
460  IF Z=1 THEN 650
470  R=R/12
480  IF Z=3 THEN 580
490  IF Z=4 THEN 630
500  IF (A*R/P)<1 THEN 530
510  PRINT "THE FIRST MONTHS PMT. CHARGE WILL NOT COVER IT'S INTEREST"
520  STOP 
530  LET N=-(LOG(1-(A*R)/P))/LOG(1+R)
540  LET N=INT(N)+1
550  LET Y=INT(N/12)
560  LET M=N-12*Y
570  GOTO 770
580  LET A=(P*(1-1/((1+R)^N)))/R
590  LET A=(A*100+5)/10
600  LET A=INT(A)
610  LET A=A/10
620  GOTO 770
630  P=A*R*(1+R)^N/((1+R)^N-1)
640  GOTO 770
650  R=(P*N/A-1)/12
660  R1=R
670  IF R>0 THEN 720
680  PRINT "RATE IS NEGATIVE OR ZERO"
690  STOP 
700  R=R-2*R1
710  R=R+R1
720  C=P*(1/(R/((1+R)^N-1)+R))
730  IF ABS(C-A)<.01 THEN 770
740  R1=R1/2
750  IF C-A<0 THEN 700
760  GOTO 710
770  PRINT 
780  IF 12*P>(R*A*12+1) THEN 830
790  PRINT "YOUR FIRST YEARS'S PAYMENTS ARE"12*P
800  PRINT "THE FIRST YEARS'S INTEREST IS"R*A*12
810  PRINT "THEREFORE, THE LIFE OF THE MORTGAGE IS UNDEFINED"
820  STOP 
830  PRINT "***********************************************************"
840  PRINT 
850  PRINT "                        MORTGAGE TERMS"
860  PRINT 
870  PRINT "    NOMINAL ANNUAL RATE= ";R*1200;"  %"
880  PRINT 
890  PRINT "    LIFE OF MORTGAGE    =";Y;" YEARS,"M" MONTHS"
900  PRINT 
910  PRINT "    AMOUNT BORROWED    = $";
920  PRINT  USING X$[FNC(A)-8,FNC(A)];A
930  PRINT 
940  PRINT "    MONTHLY PAYMENT    = $";
950  PRINT  USING X$[FNC(P)-8,FNC(P)];P
960  PRINT 
970  PRINT 
980  IF Z=2 THEN 1000
990  GOTO 1010
1000  PRINT "THE MORTGAGE LIFE HAS BEEN ROUNDED UP TO NEAREST MONTH"
1010  PRINT 
1020  PRINT "------------------------------------------------------------"
1030  PRINT 
1040  PRINT "                           MORTGAGE TABLE"
1050  PRINT 
1060  PRINT 
1070  LET Z2=0
1080  LET S1=0
1090  LET S2=0
1100  IF T1=12 THEN 1130
1110  LET M2=T1
1120  GOTO 1150
1130  LET T2=T2+1
1140  LET M2=0
1150  LET M3=M2+1
1160  IF Z1=1 THEN 1240
1170  PRINT "   ","BEGINNING"
1180  PRINT "   ","PRINCIPAL","   ","PRINCIPAL"
1190  PRINT "  MONTH","OUTSTANDING","INTEREST","REPAYMENT"
1200  PRINT 
1210  PRINT 
1220  PRINT "   ","FOR THE CALENDAR YEAR"T2
1230  GOTO 1290
1240  PRINT "   ","   ","   ","ENDING"
1250  PRINT "   ","   ","PRINCIPAL","PRINCIPAL"
1260  PRINT "YEAR","INTEREST","REPAYMENT","OUTSTANDING"
1270  PRINT 
1280  PRINT 
1290  FOR M1=M3 TO 12*T3
1300  LET I1=A*R
1310  LET I1=(I1*1000+5)/10
1320  LET I1=INT(I1)
1330  LET I1=I1/100
1340  IF P<(A+I1) THEN 1370
1350  LET P1=A
1360  GOTO 1380
1370  LET P1=P-I1
1380  LET A1=A
1390  LET A=A1-P1
1400  LET S1=S1+I1
1410  LET S2=S2+P1
1420  LET M2=M2+1
1430  IF Z1=1 THEN 1790
1440  PRINT SPA(4);M$[3*M2-2,3*M2];
1450  IF A1>1 THEN 1480
1460  F$[1,9]="11X,1D.DD"
1470  GOTO 1490
1480  F$[1,9]=X$[FNC(A1)-8,FNC(A1)]
1490  IF I1>1 THEN 1520
1500  F$[10,18]="11X,1D.DD"
1510  GOTO 1530
1520  F$[10,18]=X$[FNC(I1)-8,FNC(I1)]
1530  IF P1>1 THEN 1560
1540  F$[19,27]="11X,1D.DD"
1550  GOTO 1570
1560  F$[19,27]=X$[FNC(P1)-8,FNC(P1)]
1570  PRINT  USING F$;A1,I1,P1
1580  IF M2=12 THEN 1610
1590  IF A>0 THEN 2020
1600  LET Z2=1
1610  PRINT 
1620  PRINT "    PRINCIPAL REPAID DURING ";T2;
1630  PRINT  USING X$[FNC(S2)-8,FNC(S2)];S2
1640  PRINT "    INTEREST PAID DURING    ";T2;
1650  PRINT  USING X$[FNC(S1)-8,FNC(S1)];S1
1660  PRINT "    PRINCIPAL OUTSTANDING AT YEAR END";
1670  IF A>1 THEN 1700
1680  PRINT  USING "11X,D.DD";A
1690  GOTO 1710
1700  PRINT  USING X$[FNC(A)-8,FNC(A)];A
1710  IF Z2=1 THEN 2030
1720  LET T2=T2+1
1730  PRINT 
1740  PRINT "---------------------------------------------------------,-"
1750  PRINT 
1760  IF M1=12*T3 THEN 2030
1770  PRINT "   ","FOR THE CALENDAR YEAR"T2
1780  GOTO 1990
1790  IF M2=12 THEN 1820
1800  IF A>0 THEN 2020
1810  LET Z2=1
1820  PRINT T2;
1830  IF S1>1 THEN 1860
1840  F$[1,9]="11X,1D.DD"
1850  GOTO 1870
1860  F$[1,9]=X$[FNC(S1)-8,FNC(S1)]
1870  IF S2>1 THEN 1900
1880  F$[10,18]="11X,1D.DD"
1890  GOTO 1910
1900  F$[10,18]=X$[FNC(S2)-8,FNC(S2)]
1910  IF A>1 THEN 1940
1920  F$[19,27]="11X,1D.DD"
1930  GOTO 1950
1940  F$[19,27]=X$[FNC(A)-8,FNC(A)]
1950  PRINT  USING F$;S1,S2,A
1960  LET T2=T2+1
1970  IF M1=12*T3 THEN 2030
1980  IF Z2=1 THEN 2030
1990  LET S1=0
2000  LET S2=0
2010  LET M2=0
2020  NEXT M1
2030  PRINT "*****************************************************"
2040  END 
