!**************************************!
! AMORT - CREATE AMORTIZATION SCHEDULE !
! 12/15/87 - Gregory Scott Berthume !
! COMPIL and RUN from the dot !
!**************************************!
XCALL RDATE,FLTDAT
SYSDAT = FLTDAT USING "#ZZZZZ"
on error goto TRAP
XCALL NOECHO
PRINT TAB(-1,0);TAB(-1,32);" PRINT AMORTIZATION SCHEDULE FOR: ";TAB(-1,33)
GET'NAME:
PRINT TAB(08,12);"PLEASE ENTER NAME ";
XCALL INPUT,08,30,30,0,"AE",ENTRY,INXCTL,1
IF INXCTL = 2 THEN END
NAME = ENTRY : PRINT TAB(2,2);NAME
GET'RATE:
PRINT TAB(10,12);"ENTER INTEREST RATE ";
XCALL INPUT,10,33,4,0," E",ENTRY,INXCTL,1
IF ENTRY = "" THEN ENTRY = 1200
PRINT TAB(10,33);ENTRY/100 USING "##.##";"%"
IF INXCTL = 2 THEN END
RATE = ENTRY
GET'AMOUNT:
PRINT TAB(12,12);"ENTER PRINCIPAL ";
XCALL INPUT,12,29,10,0,"$ ",ENTRY,INXCTL,1
IF INXCTL = 2 THEN END
AMOUNT = ENTRY[1,10] : TAMOUNT = AMOUNT
GET'PAYMNT:
PRINT TAB(14,12);"ENTER MONTHLY PAYMENT AMOUNT ";
XCALL INPUT,14,43,6,0,"$ ",ENTRY,INXCTL,1
IF INXCTL = 2 THEN END
PAYMNT = ENTRY[1,6]
GET'DATE'DUE:
PRINT TAB(16,12);"ENTER DATE 1ST PAYMENT DUE ";
XCALL INPUT,16,43,6,0,"DE",ENTRY,INXCTL,1
IF INXCTL = 2 THEN END
CALL ANYCNG : ON CNGCTL GOTO DO'OVER
DATE'DUE = ENTRY
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! COMPUTE PAID TO INTEREST & PAID TO PRINCIPAL WITH REMAINING PRINCIPAL !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
XCALL WAIT,2
OPEN #1,"AMORT.PRT", OUTPUT
CALL HEADING
M'RATE = ((RATE / 100) / 12) *.01
DAY = DATE'DUE[3,4] : YEAR = DATE'DUE[5,6] : YEAR = VAL(YEAR)
M = VAL(DATE'DUE[1,2])
PRINT'REPORT:
INTEREST = (M'RATE * AMOUNT) : TOTAL'PTI = TOTAL'PTI + INTEREST
TI = TI + INTEREST
PAID'TO'PRINCIPAL = (PAYMNT - INTEREST) : TOTAL'PTP = TOTAL'PTP + PAID'TO'PRINCIPAL
TP = TP + PAID'TO'PRINCIPAL
AMOUNT = AMOUNT - PAID'TO'PRINCIPAL
GOSUB MONTH
M = M + 1 : X = X + 1
PLINE[4;3] = X USING "###"
YEARS =(1900 + YEAR) USING "####"
PLINE[14;LEN(MONTH)+10] = MONTH + " " + DAY +", " + YEARS
PLINE[38;9] = INTEREST/100 USING "##,###.##"
PLINE[53;9] = PAID'TO'PRINCIPAL/100 USING "##,###.##"
PLINE[67;10] = AMOUNT/100 USING "###,###.##"
CALL PRINT
IF MONTH = "DECEMBER" THEN YEAR = YEAR + 1
IF MONTH = "DECEMBER" THEN GOSUB YEAR'END'TOTALS
IF (AMOUNT < PAYMNT) THEN GOTO SPOOL
GOTO PRINT'REPORT
SPOOL:
GOSUB MONTH : X = X + 1 : CALL PRINT
INTEREST = (M'RATE * AMOUNT)
PLINE[4;3] = X USING "###"
PLINE[14;LEN(MONTH)+10] = MONTH + " " + DAY +", " + YEARS
PLINE[38;9] = INTEREST/100 USING "##,###.##"
LP = (AMOUNT + INTEREST)
PLINE[52;10] = AMOUNT/100 USING "###,###.##"
PLINE[68;9] = 0 USING "##,###.##"
CALL PRINT
PLINE[14;14] = "LAST PAYMENT ="
PLINE[30;9] = LP/100 USING "##,###.##"
CALL PRINT
GOSUB THATS'ALL
GOSUB LOAN'TOTALS
END'PROGRAM:
CLOSE #1
PRINT TAB(15,22);"# OF PAYMENTS = ";X
XCALL MESAG,"FILE NAME = AMORT.PRT",2
END
MONTH:
IF M = 1 THEN MONTH = "JANUARY"
IF M = 2 THEN MONTH = "FEBRUARY"
IF M = 3 THEN MONTH = "MARCH"
IF M = 4 THEN MONTH = "APRIL"
IF M = 5 THEN MONTH = "MAY"
IF M = 6 THEN MONTH = "JUNE"
IF M = 7 THEN MONTH = "JULY"
IF M = 8 THEN MONTH = "AUGUST"
IF M = 9 THEN MONTH = "SEPTEMBER"
IF M =10 THEN MONTH = "OCTOBER"
IF M =11 THEN MONTH = "NOVEMBER"
IF M =12 THEN MONTH = "DECEMBER"
IF M = 12 THEN M = 0
RETURN
PRINT:
PRINT #1, PLINE : PLINE = ""
P = P + 1 : IF P = 55 THEN CALL DIVIDE
RETURN
DIVIDE:
PRINT #1,CHR$(12)
P = 1
CALL HEADING
RETURN