home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib29a.dsk
/
NOVEMBER.1986
/
LOAN.SCHED.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
6KB
|
123 lines
10 REM ************************
20 REM * LOAN.SCHED *
30 REM * BY R.K. KLEPAC, PH.D.*
40 REM * COPYRIGHT 1986 *
50 REM * BY MICROSPARC, INC. *
60 REM * CONCORD, MA 01742 *
70 REM ************************
80 GOTO 260
90 REM ******* PAYMENT CALC SBRTN *****
100 I = J/1200
110 PMT = (K *I)/(1 -(1 +I) ^( -A(6)))
120 RETURN
130 REM ******* PRINT USING SUBRTN *****
140 IF P <0 THEN P = 0
150 P$ = STR$( INT((P +.005) *100))
160 IF LEN(P$) <3 THEN P$ = LEFT$("000",(3 - LEN(P$))) +P$
170 IF LEN(P$) > = 7 THEN P$ = LEFT$(P$,5): GOTO 190
180 P$ = LEFT$(P$,( LEN(P$) -2)) +"." + RIGHT$(P$,2)
190 P$ = RIGHT$(" " +P$,PL): IF VAL(P$) +1 <P THEN P$ = " >9999"
200 RETURN
210 REM ******* CONTINUE SBRTN *********
220 VTAB (24): CALL -868: INVERSE : PRINT BP$" PRESS <RETURN> TO CONTINUE ";: NORMAL : GET DUMMY$: PRINT DUMMY$: RETURN
230 REM ******* CTRL-C TO QUIT SBRTN ***
240 VTAB 24: INVERSE : PRINT " HOLD DOWN 'CTRL' & PRESS 'C' TO QUIT ";: NORMAL : POKE 35,23: PRINT : RETURN
250 REM ******* MAIN PROGRM SETUP ******
260 Q$(1) = "LARGEST LOAN AMOUNT": ONERR GOTO 1190
270 Q$(2) = "CHANGE IN LOAN AMOUNT"
280 Q$(3) = "LARGEST INTEREST RATE"
290 Q$(4) = "CHANGE IN INTEREST RATE"
300 Q$(5) = "SMALLEST INTEREST RATE"
310 Q$(6) = "LOAN TERM (MONTHS)"
320 Q$(7) = "TABLE TO PRNTR OR SCRN (P/S)"
330 Q$(8) = "PRINTER SLOT"
340 D$ = CHR$(4)
350 BP$ = CHR$(7)
360 REM ******* INPUT PARAMETERS *******
370 HOME :CE$ = " ** LOAN SCHEDULE ** ": HTAB 21 -( LEN(CE$)/2): INVERSE : PRINT CE$: NORMAL
380 TB = 2
390 VTAB (TB +1): FOR I = 1 TO 39: PRINT "=";: NEXT : PRINT
400 FOR I = 1 TO 6:VT = (TB +(2 *I)): VTAB (VT): CALL -868
410 PRINT I". "Q$(I);: HTAB 33: IF A$(I) < >"" THEN PRINT A$(I): GOTO 480
420 VTAB (VT): HTAB 33: PRINT A$(I);: CALL -868: GET X$: PRINT X$: IF X$ < >"," AND X$ < >";" AND X$ < >":" THEN GOTO 440
430 INVERSE : PRINT : PRINT BP$" USE NO COMMAS OR OTHER PUNCTUATION ": NORMAL : GOTO 420
440 IF X$ = CHR$(13) THEN 480
450 IF X$ = CHR$(8) THEN LA = LEN(A$(I)): IF LA < = 1 THEN A$(I) = "": GOTO 420
460 IF X$ = CHR$(8) THEN LA = LA -1:A$(I) = LEFT$(A$(I),LA): GOTO 420
470 A$(I) = A$(I) +X$: GOTO 420
480 NEXT
490 I = 7: VTAB (TB +(2 *I)): PRINT I". "Q$(I);: IF A$(I) < >"" THEN HTAB 33: PRINT A$(I): GOTO 510
500 VTAB (TB +(2 *I)): HTAB 33: INPUT "";A$(I): VTAB (TB +(2 *I)): HTAB 27: PRINT " "
510 IF A$(7) = "P" OR A$(7) = "S" THEN 530
520 FLASH : VTAB 16: HTAB 27: CALL -868: PRINT BP$"(P/S)";: NORMAL : GOTO 500
530 I = 8: VTAB (TB +(2 *I)): PRINT I". "Q$(I);: IF A$(I) = "" OR VAL(A$(I)) <0 OR VAL(A$(I)) >7 THEN GOTO 550
540 HTAB 33: PRINT A$(I): GOTO 570
550 VTAB (TB +(2 *I)): HTAB 33: CALL -868: INPUT "";A$(I): GOTO 530
560 REM ***** EDIT/EXIT ROUTINES *******
570 VTAB (TB +17): FOR I = 1 TO 39: PRINT "=";: NEXT : PRINT
580 VTAB (TB +21): INVERSE : PRINT " TYPE 'Q' TO QUIT ": NORMAL : VTAB (TB +19): PRINT "ANY CHANGES? (Y/N) -->";: GET Y$: PRINT Y$: CALL -958
590 IF Y$ = "Q" THEN HOME : VTAB 10: PRINT "TO RESTART PROGRAM, TYPE:": VTAB 12: HTAB 2: PRINT "GOTO 370": VTAB 14: PRINT "THEN PRESS <RETURN>": VTAB 11: END
600 IF Y$ = "Y" THEN GOTO 720
610 IF Y$ = "N" THEN GOTO 640
620 IF ASC(Y$) > = 49 AND ASC(Y$) < = 56 THEN W$ = Y$: GOTO 730
630 PRINT BP$: GOTO 570
640 FOR I = 1 TO 6:A(I) = VAL(A$(I)): NEXT
650 J = 1
660 IF A$(J) = "" THEN VTAB (TB +17): PRINT BP$: INVERSE : PRINT " PLEASE ENTER "Q$(J)" ": NORMAL :W$ = STR$(J): GOTO 730
670 J = J +1: IF J = 9 THEN J = 1: GOTO 690
680 GOTO 660
690 IF A$(7) = "S" THEN GOTO 770
700 IF A$(7) = "P" THEN GOTO 950
710 PRINT BP$: GOTO 570
720 VTAB (TB +19): CALL -868: PRINT "CHANGE WHICH ONE? (1-8) --> ";: GET W$: PRINT W$: VTAB (TB +17)
730 W = VAL(W$): IF W <1 OR W >8 THEN PRINT BP$: GOTO 720
740 VTAB (TB +19): CALL -868: INVERSE : PRINT " TYPE NEW ENTRY IN TABLE ABOVE ";: NORMAL
750 VTAB (TB +(2 *W)): HTAB 33: CALL -868: INPUT "";A$(W): GOTO 370
760 REM ******* SCREEN OUTPUT **********
770 ONERR GOTO 1190
780 HOME : HTAB (13): INVERSE : PRINT " TERM: ";A(6);" MONTHS ": NORMAL
790 VTAB (2): PRINT " RATE";: IF A(2) = 0 THEN P$ = STR$( INT(A(1))):PL = 8: GOSUB 190: PRINT P$;: PRINT : GOTO 810
800 FOR K = A(1) -3 *A(2) TO A(1) STEP A(2):P$ = STR$( INT(K)):PL = 8: GOSUB 190: PRINT P$;: NEXT K: PRINT
810 VTAB 3: FOR DASH = 0 TO 39: PRINT "-";: NEXT DASH: PRINT : POKE 34,4: GOSUB 240: HOME
820 REM ***.BODY.OF.OUTPUT.TABLE.***
830 J = A(3)
840 P = J:PL = 8: GOSUB 140: PRINT P$;: IF A(2) = 0 THEN K = A(1): GOSUB 100:P = PMT:PL = 8: GOSUB 140: PRINT P$: GOTO 890
850 FOR K = A(1) -3 *A(2) TO A(1) STEP A(2)
860 GOSUB 100
870 P = PMT:PL = 8: GOSUB 140: PRINT P$;
880 NEXT K
890 J = J -A(4): IF A(4) = 0 THEN GOSUB 220: GOTO 930
900 IF PEEK(37) <22 AND J >0 AND J >A(5) THEN 840
910 GOSUB 220
920 IF J >0 AND J >A(5) THEN GOSUB 240: HOME : GOTO 840
930 TEXT : HOME : GOTO 370
940 REM ******* PRINTER OUTPUT ********
950 GOSUB 240: ONERR GOTO 1190
960 PRINT D$"PR#"A$(8): PRINT :F3 = 0
970 IF A(4) <.5 THEN F2 = 1
980 HOME : HTAB (33): PRINT "TERM: ";A(6);" MONTHS"
990 VTAB (2): PRINT " RATE";
1000 FOR K = A(1) -8 *A(2) TO A(1) STEP A(2):P$ = STR$( INT(K)):PL = 8: GOSUB 190: PRINT P$;: NEXT K
1010 PRINT
1020 FOR DASH = 1 TO 79: PRINT "-";: NEXT DASH
1030 PRINT
1040 REM
1050 J = A(3)
1060 P = J:PL = 8: GOSUB 140: IF F2 AND RIGHT$(P$,2) = "00" THEN PRINT
1070 PRINT P$;
1080 FOR K = A(1) -8 *A(2) TO A(1) STEP A(2)
1090 GOSUB 100
1100 P = PMT:PL = 8: GOSUB 140: PRINT P$;
1110 NEXT K
1120 J = J -A(4): IF F2 THEN 1140
1130 F3 = F3 +1: IF F3 = 4 THEN F3 = 0: PRINT : GOTO 1150
1140 J$ = STR$(J): IF RIGHT$(J$,2) = "00" THEN PRINT : PRINT
1150 IF J > = A(5) AND J >0 THEN PRINT : GOTO 1060
1160 PRINT : PRINT D$"PR#0"
1170 TEXT : HOME : GOTO 370
1180 REM ******* ERROR TRAPS **********
1190 E = PEEK(222):LINE = PEEK(218) +256 * PEEK(219)
1200 IF E = 255 THEN TEXT : HOME : GOTO 370
1210 HOME : VTAB 12: PRINT "ERROR "E" IN LINE "LINE
1220 PRINT : PRINT "<ESC> TO QUIT, <RETURN> TO CHANGE DATA";: GET Z$: IF Z$ < > CHR$(27) GOTO 370
1230 TEXT : END