!**************************************! ! AMORT - CREATE AMORTIZATION SCHEDULE ! ! 12/15/87 - Gregory Scott Berthume ! !**************************************! MAP1 WORK'VARIABLES MAP2 SYSDAT,S,6 MAP2 TODAY,S,8 MAP2 DAY,S,2 MAP2 YEAR,F MAP2 YEARS,F MAP2 FLTDAT,F MAP2 PAGENO,F,6,0 MAP2 TAMOUNT,F MAP2 X,F,6,0 MAP2 LP,F MAP2 P,F,6,0 MAP2 M,F MAP2 INXCTL,F MAP2 CNGCTL,F MAP2 ENTRY,S,30 MAP2 NAME,S,30 MAP2 DATE'DUE,S,6 MAP2 PLINE,S,80 MAP2 RATE,F MAP2 AMOUNT,F MAP2 PAYMNT,F MAP2 M'RATE,F MAP2 TOTAL'PTI,F MAP2 TOTAL'PTP,F MAP2 TI,F,6,0 MAP2 TP,F,6,0 MAP2 PAID'TO'PRINCIPAL,F,6,0 MAP2 BALANCE,F,6,0 MAP2 INTEREST,F MAP2 MONTH,S,9 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 YEAR'END'TOTALS: PLINE[14;18] = "------------------" PLINE[35;12] = "------------" PLINE[50;12] = "------------" : CALL PRINT PLINE[14;15] = "YEAR END TOTALS" PLINE[37;10] = TOTAL'PTI/100 USING "###,###.##" PLINE[52;10] = TOTAL'PTP/100 USING "###,###.##" TOTAL'PTI = 0 : TOTAL'PTP = 0 CALL PRINT : CALL PRINT RETURN THATS'ALL: CALL PRINT PLINE[14;18] = "------------------" PLINE[35;12] = "------------" PLINE[50;12] = "------------" : CALL PRINT PLINE[14;15] = "YEAR END TOTALS" TOTAL'PTI = TOTAL'PTI + INTEREST TOTAL'PTP = TOTAL'PTP + AMOUNT PLINE[37;10] = TOTAL'PTI/100 USING "###,###.##" PLINE[52;10] = TOTAL'PTP/100 USING "###,###.##" CALL PRINT RETURN LOAN'TOTALS: CALL PRINT : CALL PRINT : CALL PRINT TI = TI + INTEREST : TP = TP + AMOUNT PLINE[14;12] = "LOAN TOTALS:" PLINE[37;10] = TI/100 USING "###,###.##" PLINE[52;10] = TP/100 USING "###,###.##" CALL PRINT RETURN HEADING: PAGENO = PAGENO + 1 PLINE[1;48] = " AMORTIZATION SCHEDULE" CALL PRINT PLINE[1;43] = " PREPARED BY:" CALL PRINT PLINE[1;47] = " BASIC SYSTEMS, INC." CALL PRINT CALL PRINT : CALL PRINT TODAY = SYSDAT[1,2] + "/" + SYSDAT[3,4] + "/" + SYSDAT[5,6] PLINE[1;8] =TODAY PLINE[70;5] = "PAGE " PLINE[76;1] = PAGENO CALL PRINT : CALL PRINT PLINE[1;5] = "FOR: " : PLINE[6;30] = NAME : PLINE[38;16] = "ON THE AMOUNT OF" PLINE[66;11] = TAMOUNT/100 USING "$$##,###.##" CALL PRINT PLINE[1;11] = "PAYMENTS = " : PLINE[13;8] = PAYMNT/100 USING "#,###.##" PLINE[38;2] = "AT" : PLINE[41;5] = RATE/100 USING "##.##" : PLINE[46;1] = "%" CALL PRINT : CALL PRINT PRINT #1," PAYMENT PAYMENT PAID TO PAID TO REMAINING" PRINT #1," NUMBER DATE INTEREST PRINCIPAL PRINCIPAL" CALL PRINT RETURN 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 ANYCNG: CNGCTL = 2 XCALL ANYCN,CNGCTL,WHATNO RETURN DO'OVER: CHAIN "AMORT" TRAP: CHAIN "AMORT"