PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

PC-SIG Diskette Library (Disk #25)

[PCjs Machine "ibm5150"]

Waiting for machine "ibm5150" to load....

Information about “FINANCE”

Finance is a collection of standard financial programs, designed so that
anyone can use them.  The programs prompt for input and are easy to run.
Some of the routines included are; Depreciation, Interest and Bond yield
calculators. A perfect item for all of you budding financial geniuses.

How to Start:  To run BASIC programs consult the directions in GETTING
STARTED for your configuration.

File Descriptions:

FINANCE  BAS  20 Miscellaneous financial programs
GROWTH   BAS  Growth rate and projections
FINANCE1 BAS  5 more financial programs
REPORTS  BAS  Budget management report
GROWTH1  BAS  Calculates compound growth
KALCOL   BAS  Kaleidescope - mono/color  (Subroutine form)
PRLIST   BAS  Miscellaneous printer routines

CRC.TXT

PC-SIG Disk No. #25, version v1.1

The following is a list of the file checksums which should be produced by
the CRCK4 program on disk #9 (and others).  If the CRC numbers do not match
you may have a bad file.  To use type:  CRCK4 <filespec>

CRCK4 output for this disk:


CRCK ver 4.2B (MS DOS VERSION )
CTL-S pauses, CTL-C aborts

--> FILE:  FINANCE .BAS         CRC = 7A F8

--> FILE:  KALCOL  .BAS         CRC = 97 27

--> FILE:  PRLIST  .BAS         CRC = 46 8D

--> FILE:  GROWTH  .BAS         CRC = 71 00

--> FILE:  REPORTS .BAS         CRC = 8F 51

--> FILE:  FINANCE1.BAS         CRC = CF D8

--> FILE:  GROWTH1 .BAS         CRC = 26 31

 ---------------------> SUM OF CRCS = 4F 06

DONE

These and other Public Domain and user-supported programs from:

PC Software Interest Group
1125 Stewart Ct  Suite G
Sunnyvale, CA 94086
(408) 730-9291

FINANCE.BAS

5 REM * PUBLIC DOMAIN SOFTWARE *
10 COLOR 15:CLS:KEY OFF:SCREEN 0,0,0:WIDTH "SCRN:",80
20 ON ERROR GOTO 4010
30 PRINT "ENTER THE NUMBER OF ONE OF THE FOLLOWING PROGRAMS:"
40 PRINT
50 PRINT "   1 - PRESENT VALUE OF A FUTURE SUM"
60 PRINT "   2 - SIMPLE INTEREST FOR DAYS"
70 PRINT "   3 - FUTURE VALUE OF A PRESENT SUM"
80 PRINT "   4 - AMORTIZATION SCHEDULE"
90 PRINT "   5 - INTEREST RATE - COMPOUND INTEREST"
100 PRINT "   6 - INTEREST RATE - INSTALLMENT LOAN"
110 PRINT "   7 - DAYS BETWEEN DATES"
120 PRINT "   8 - TERM OF AN INSTALLMENT LOAN"
130 PRINT "   9 - PRESENT VALUE OF A SERIES OF PAYMENTS"
140 PRINT "  10 - REAL ESTATE CAPITAL INVESTMENT"
141 PRINT "  11 - NOMINAL & EFFECTIVE INTEREST RATES
142 PRINT "  12 - INTERNAL RATE OF RETURN
143 PRINT "  13 - FUTURE VALUE OF REGULAR DEPOSITS
144 PRINT "  14 - REGULAR DEPOSITS FOR FUTURE VALUE
145 PRINT "  15 - DEPRECIATION - AMOUNT
146 PRINT "  16 - DEPRECIATION - RATE
147 PRINT "  17 - DEPRECIATION - SALVAGE VALUE
148 PRINT "  18 - DEPRECIATION - SCHEDULE
149 PRINT "  19 - BOND - PRESENT VALUE
150 PRINT "  20 - BOND - YIELD TO MATURITY
151 PRINT:INPUT "TYPE PROGRAM NUMBER (OR SPACE BAR TO EXIT) AND PRESS 'ENTER'";F
160 IF F<1 THEN STOP
170 ON F GOTO 190,390,550,720,1030,1310,1670,1940,2220,2510,4220,4380,4630,4820,4950,5100,5190,5290,5590,5750
180 RUN
190 F=0:R=0:M=0:N=0
200 CLS:PRINT:PRINT "THIS PROGRAM CALCULATES THE PRESENT VALUE OF"
210 PRINT "A FUTURE SUM, DISCOUNTING IT FOR A PARTICULAR"
220 PRINT "INTEREST RATE, COMPOUNDED AS INSTRUCTED."
230 PRINT:INPUT "STATE THE FUTURE SUM, IN DOLLARS ";F
240 INPUT "STATE THE ANNUAL INTEREST RATE, IN % ";R
250 INPUT "STATE THE NUMBER OF PERIODS IN ONE YEAR ";M
260 INPUT "STATE THE NUMBER OF PERIODS TO BE CALCULATED ";N
270 I=R/M:I=I/100
280 T=1+I:A=T
290 IF N=1 GOTO 310
300 FOR X=1 TO (N-1):S=A*T:A=S:NEXT X
310 P=F/A:CLS:PRINT:PRINT:PRINT
320 PRINT " A FUTURE SUM OF $";F;" FOR ";N;" PERIODS,"
330 PRINT " WHERE THERE ARE";M;"PERIODS PER YEAR AT"
340 PRINT R;"% PER YEAR IS WORTH, IN  TODAY'S DOLLARS:"
350 PRINT:PRINT TAB(30);"$";P
360 PRINT:INPUT "PRESS ENTER TO RETURN. ";A$
370 RUN
380 END
390 P=0:D=0:R=0
400 CLS:PRINT:PRINT "THIS ROUTINE CALCULATES SIMPLE INTEREST ON
410 PRINT "DOLLARS HELD IN DEPOSIT FOR A SPECIFIED PERIOD
420 PRINT "USING A SPECIFIED PERCENTAGE OF INTEREST.":PRINT
430 INPUT "HOW LARGE IS THE DEPOSIT (IN DOLLARS)";P
440 INPUT "HOW LONG WILL YOU LEAVE IT IN (IN DAYS)";D
450 INPUT "WHAT INTEREST RATE DO YOU EXPECT (IN %)";R
460 CLS:PRINT:PRINT:PRINT "FOR A STARTING PRINCIPAL OF $";P;"AT A"
470 PRINT "RATE OF";R;"% FOR ";D;"DAYS, THE INTEREST"
480 PRINT "AMOUNTS TO $";
490 I=R/100/365*D*P
500 IF I>327.68 GOTO 520
510 I=INT(I*100+0.5)/100
520 PRINT TAB(12);I;"OR $";I/D;"PER DAY.":PRINT:PRINT:PRINT
530 INPUT "PRESS ENTER TO RETURN.";A$:RUN
540 END
550 CLS:P=0:R=0:M=0:N=0
560 PRINT:INPUT "ENTER PRESENT SUM, IN DOLLARS:";P
570 PRINT:INPUT "ENTER ANNUAL INTEREST RATE, IN % ";R
580 PRINT:INPUT "ENTER NUMBER OF PERIODS IN ONE YEAR ";M
590 PRINT:INPUT "ENTER NUMBER OF PERIODS TO MATURITY ";N
600 I=R/M:I=I/100:T=I+1:A=T
610 IF N=1 THEN GOTO 630
620 FOR K=1 TO (N-1):S=A*T:A=S:NEXT K
630 F=P*A:CLS
640 CLS:PRINT "FOR A PRESENT SUM OF $";P;"AT AN ANNUAL"
650 PRINT "INTEREST RATE OF";R;"%, FOR ";N;"PERIODS, WHERE"
660 PRINT "THERE ARE";M;"PERIODS PER YEAR:"
670 PRINT:PRINT "THE FUTURE VALUE IS $";F
680 PRINT "THE INCREASE IS $";F-P;", OR";(F/P)*100-100;"%"
690 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU.";A$
700 RUN
710 END
720 DEFDBL I,T:C=0:P=0:L=0:R=0:M=0:CLS
730 INPUT " PRINCIPAL, DOLLARS AND CENTS ";P
740 INPUT " # OF PERIODS, IN MONTHS ";L
750 INPUT " ANNUAL INTEREST RATE, IN % ";R
760 INPUT " PAYMENT, IF  KNOWN, (ENTER) IF  NOT ";M
770 I=R/1200
780 T=1-1/(1+I)^L:K=P
790 IF M<>0 THEN GOTO 810
800 M=P*I/T
810 GOSUB 990
820 FOR Z=1 TO L
830 IF C<12 GOTO 880
840 PRINT " YEAR OF LOAN ";INT(Z-1)/12;
850 PRINT "    $";K;"FOR ";L;"MONTHS AT";R;"%"
860 INPUT "PRESS ENTER TO CONTINUE, 1 TO RETURN TO MENU ";CH:IF CH=1 THEN 10
870 C=0:GOSUB 990
880 A=P*I
890 A=INT(A*100+0.5)/100
900 M=INT(M*100+0.5)/100
910 B=M-A:P=P-B
920 B=INT(B*100+0.5)/100
930 P=INT(P*100+0.5)/100
940 PRINT USING "####    ";Z;:PRINT USING "###,###.##";P;M;B;A
950 IF  P<=0  THEN  970
960 C=C+1:NEXT Z
970 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU.";A$:RUN
980 END
990 CLS
1000 PRINT "PAYMENT   REMAINING  MONTHLY   PRINCIPAL INTEREST"
1010 PRINT "NUMBER    PRINCIPAL  PAYMENT   PAYMENT   PAYMENT
1020 RETURN
1030 CLS:PRINT:PRINT:PRINT
1040 INPUT "STATE THE FUTURE VALUE, IN $";FV
1050 IF F=2 THEN 1130
1060 INPUT "STATE THE PRESENT VALUE, IN $";PV
1070 IF F=1 THEN 1130
1080 INPUT "STATE THE NUMBER OF INTEREST PERIODS PER YEAR ";PY
1090 IF F=3 THEN 1130
1100 PRINT "STATE THE LENGTH OF TIME OF THE TOTAL FOR WHICH"
1110 PRINT "INTEREST IS TO BE FIGURED, USING THE FOLLOWING"
1120 INPUT "FORMAT (YY,MM,DD) ";Y,M,D
1130 PD=Y*PY+M*PY/12+D*PY/365
1140 I=((FV/PV)^(1/PD)-1)*100*PY
1150 A$="###.##":F=O
1160 CLS:PRINT:PRINT:PRINT "FOR A FUTURE SUM OF $";FV;"WITH A PRESENT VALUE"
1170 PRINT "OF $";PV;"WHERE THERE ARE";PY;"PERIODS PER YEAR,
1180 PRINT "OVER";Y;"YEARS,";M;"MONTHS AND";D;"DAYS, THE"
1190 PRINT "ANNUAL INTEREST RATE IS ";:PRINT USING A$;I;:PRINT " %"
1200 PRINT:PRINT "WHAT DO YOU WANT TO DO?"
1210 PRINT "   1 - CHANGE PRESENT VALUE"
1220 PRINT "   2 - CHANGE FUTURE VALUE"
1230 PRINT "   3 - CHANGE PERIODS PER YEAR
1240 PRINT "   4 - CHANGE TIME RANGE
1250 PRINT "   5 - RERUN ENTIRE PROGRAM"
1260 PRINT "   6 - RETURN TO MENU"
1270 PRINT:INPUT "ENTER THE NUMBER OF YOUR CHOICE";F
1280 IF F<1 OR F>6 THEN 1160
1290 F=INT(F):ON F GOTO 1060,1040,1080,1100,1030,10
1300 END
1310 CLEAR:F=0:CLS:DEFDBL I:A$="##.## %"
1320 ON ERROR GOTO 4010
1330 PRINT:PRINT "STATE THE PRESENT VALUE (AMOUNT), IN $ ";:INPUT PV
1340 IF F=1 GOTO 1420
1350 INPUT "STATE THE NUMBER OF TERMS PER YEAR";NY
1360 IF F=3 GOTO 1420
1370 INPUT "STATE THE NUMBER OF PERIODS OF THE LOAN";N
1380 IF F=2 GOTO 1420
1390 INPUT "STATE THE AMOUNT OF EACH PAYMENT, IN $";P
1400 IF F=4 GOTO 1420
1410 CLS:PRINT:PRINT "THIS IS AN ITERATIVE PROCESS AND WILL TAKE A FEW SECONDS"
1420 I=0.008
1430 I1=P/PV*((1+I)^N-1)/(1+I)^N
1440 IF ABS(I-I1)<0.000001 THEN 1470
1450 I=I1
1460 GOTO 1430
1470 I=I1*NY*100
1480 CLS:PRINT
1490 PRINT "FOR A LOAN WITH A PRESENT VALUE OF $";PV
1500 PRINT "AND";N;"PAYMENTS OF $";P;", WHERE THERE"
1510 PRINT "ARE";NY;"PAYMENTS PER YEAR, THE ANNUAL"
1520 PRINT "INTEREST RATE IS ";
1530 PRINT USING A$;I
1540 F=0:PRINT
1550 PRINT "DO YOU WANT  TO :"
1560 PRINT "   1 - CHANGE LOAN VALUE"
1570 PRINT "   2 - CHANGE NUMBER OF INTEREST PERIODS"
1580 PRINT "   3 - CHANGE PERIODS PER YEAR"
1590 PRINT "   4 - CHANGE PAYMENT AMOUNT"
1600 PRINT "   5 - RERUN ENTIRE PROGRAM"
1610 PRINT "   6 - RETURN TO MENU"
1620 PRINT:INPUT "ENTER THE NUMBER OF YOUR CHOICE";F
1630 IF F<1 OR F>6 THEN 1620
1640 ON F GOTO 1330,1370,1350,1390,1310,10
1650 F=INT(F):RUN
1660 END
1670 CLS:CH=0:PRINT:PRINT
1680 PRINT "USING THE FOR MAT  (MM,DD,YYYY),
1690 INPUT "ENTER THE FIRST DATE ";M,D,Y:GOSUB 1870
1700 N=M:F=D:Z=Y:E=T
1710 IF CH=1 GOTO 1740
1720 INPUT "ENTER THE SECOND DATE ";M,D,Y:GOSUB 1870
1730 P=M:G=D:W=Y:L=T
1740 IF E>L THEN PRINT "CHECK THE DATES.  TRY AGAIN":GOTO 1690
1750 O=L-E:CLS:PRINT:PRINT:PRINT
1760 PRINT "THE LENGTH IN DAYS FROM ";N;"/";F;"/";Z
1770 PRINT " TO  ";P;"/";G;"/";W;" IS";O;" DAYS."
1780 CH=0:PRINT:PRINT "DO YOU WISH  TO :"
1790 PRINT "   1 - CHANGE EARLY DATE"
1800 PRINT "   2 - CHANGE LATEST DATE"
1810 PRINT "   3 - RERUN ENTIRE PROGRAM"
1820 PRINT "   4 - RETURN TO MENU"
1830 INPUT "ENTER THE NUMBER OF YOUR CHOICE";CH
1840 IF (CH<>INT(CH)) OR CH>4 THEN 1830
1850 IF CH<=0 THEN 1830
1860 ON CH GOTO 1690,1720,1670,10
1870 YY=Y-1:T=365*YY+FIX(YY/4)-FIX(YY/100)+FIX(YY/400)
1880 CD=30*(M-1)+FIX((M-1)/3)+D
1890 IF M=2 OR M=9 OR M>10 THEN CD=CD+1:GOTO 1910
1900 IF M>2 AND M<8 AND M<>6 THEN CD=CD-1
1910 IF M<3 OR Y<>4*FIX(Y/4) THEN 1930
1920 IF Y=400*FIX(Y/400) OR Y<>100*FIX(Y/100) THEN CD=CD+1
1930 T=T+CD:RETURN
1940 CLS:PRINT:PRINT "THIS PROGRAM WILL DETERMINE THE LENGTH OF TIME NEEDED"
1950 PRINT " TO  PAY AN INSTALLMENT LOAN.  PLEASE PROVIDE THE "
1960 PRINT "FOLLOWING INFORMATION."
1970 PRINT:INPUT "WHAT WAS THE ORIGINAL AMOUNT OF THE LOAN";OA
1980 IF F=1 GOTO 2040
1990 INPUT "HOW MUCH IS THE PAYMENT";PT
2000 IF F=2 GOTO 2040
2010 INPUT "HOW MANY PAYMENTS PER YEAR";PY
2020 IF F=3 GOTO 2040
2030 INPUT "WHAT IS THE ANNUAL INTEREST RATE";IR
2040 CLS:IO=OA*IR/100/PY
2050 IF PT<=IO THEN PRINT "IMPOSSIBLE!  THE PAYMENT DOES NOT COVER THE INTEREST. INTEREST ONLY FOR THE PERIOD IS $";IO;" TRY AGAIN.":GOTO 1970
2060 Y=-(LOG(1-(OA*(IR/100))/(PY*PT))/(LOG(1+(IR/100)/PY)*PY))
2070 NP=Y*PY
2080 PRINT "FOR AN ORIGINAL LOAN AMOUNT OF $";OA;"PAYABLE"
2090 PRINT "AT";IR;"% WITH";PY;"PAYMENTS PER YEAR, THE NUMBER OF
2100 PRINT "$";PT;" PAYMENTS NECESSARY TO PAY THE LOAN IS";NP
2110 PRINT "OR";Y;" YEARS."
2120 PRINT:PRINT "WHAT DO YOU WANT TO DO:"
2130 PRINT "    1 - CHANGE ORIGINAL LOAN AMOUNT
2140 PRINT "    2 - CHANGE AMOUNT OF PAYMENT
2150 PRINT "    3 - CHANGE PAYMENTS PER YEAR
2160 PRINT "    4 - CHANGE ANNUAL INTEREST RATE
2170 PRINT "    5 - RERUN ENTIRE PROGRAM
2180 PRINT "    6 - RETURN TO MENU
2190 PRINT:PRINT "ENTER THE NUMBER OF YOUR CHOICE:";:INPUT F
2200 IF F<>ABS(INT(F)) OR F>6 THEN 2190
2210 ON F GOTO 1970,1990,2010,2030,1940,10
2220 CLS:PRINT:PRINT "THIS PROGRAM DETERMINES THE PRESENT VALUE OF A SERIES"
2230 PRINT "OF PAYMENTS.  IT IS NORMALLY USED TO DETERMINE THE AMOUNT
2240 PRINT "REMAINING ON A LOAN.  YOU MUST KNOW THE AMOUNT OF THE
2250 PRINT "REGULAR PAYMENT, THE NUMBER OF PAYMENTS REMAINING,
2260 PRINT "THE NUMBER OF PAYMENTS PER YEAR AND THE INTEREST RATE.
2270 PRINT:INPUT "HOW MUCH IS THE REGULAR PAYMENT";PT
2280 IF F=1 GOTO 2340
2290 INPUT "HOW MANY PAYMENTS REMAIN       ";NP
2300 IF F=2 GOTO 2340
2310 INPUT "HOW MANY PAYMENTS PER YEAR     ";PY
2320 IF F=3 GOTO 2340
2330 INPUT "WHAT IS THE ANNUAL INTEREST RATE";IR
2340 I=IR/100:CLS:T1=1+(I/PY):T1=T1^NP:T1=1/T1:T1=1-T1
2350 PR=PT*PY*T1/I
2360 PRINT "FOR ";NP;" PAYMENTS OF $";PT;"WHERE THERE ARE";PY
2370 PRINT "PAYMENTS PER YEAR AT AN ANNUAL INTEREST RATE OF";IR;"%"
2380 PRINT "THE ORIGINAL PRINCIPAL (OR THE VALUE OF THE REMAINING
2390 PRINT "PAYMENTS) IS $";PR
2400 PRINT:PRINT:PRINT "WHAT DO YOU WANT TO DO:
2410 PRINT "    1 - CHANGE PAYMENT AMOUNT
2420 PRINT "    2 - CHANGE NUMBER OF PAYMENTS
2430 PRINT "    3 - CHANGE PAYMENTS PER YEAR
2440 PRINT "    4 - CHANGE ANNUAL INTEREST RATE
2450 PRINT "    5 - RERUN ENTIRE PROGRAM
2460 PRINT "    6 - RETURN TO MENU
2470 INPUT "ENTER THE NUMBER OF YOUR CHOICE";F
2480 IF F<>ABS(INT(F)) OR F>6 THEN 2470
2490 ON F GOTO 2270,2290,2310,2330,2220,10
2500 END
2510 CLEAR 30
2520 ON ERROR GOTO 4010
2530 DEFDBL A-E,G-W:DEFINT F,X,Z
2540 A1$="####,###.##"
2550 A2$="###,###.##"
2560 A3$="##.##"
2570 A4$="##"
2580 A5$="###,###.##-"
2590 A6$="#####,###.##"
2600 CLS:PRINT "WHAT IS THE PURCHASE PRICE OF THE PROPERTY";
2610 INPUT GP
2620 IF X=4 GOTO 3010
2630 PRINT "WHAT IS THE VACANCY ALLOWANCE (IN %)";
2640 INPUT VA
2650 IF X=2 GOTO 3010
2660 PRINT "HOW MANY UNITS DOES THE PROPERTY HAVE";:INPUT UN
2670 PRINT "HOW MANY SQUARE FEET OF USABLE SPACE";:INPUT SF
2680 PRINT "WHAT IS THE ANTICIPATED GROSS INCOME";
2690 INPUT GI
2700 IF X=1 THEN 3010
2710 PRINT "WHAT IS THE EXPECTED EXPENSE RATIO, THAT IS, THE"
2720 INPUT "EXPENSES OVER THE GROSS INCOME, IN %";ER
2730 IF X=3 THEN 3010
2740 INPUT "HOW MANY MORTGAGES WILL THERE BE, 1 OR 2";MN:CLS:IF MN>2 GOTO 2740
2750 CLS:PRINT "FOR INTEREST ONLY OR BALLOON MORTGAGES,"
2760 PRINT "MONTHS = 1000"
2770 DEFINT I
2780 MT=0
2790 FOR I=1 TO 2:AM(I)=0:TM(I)=0:RT(I)=0:Y1(I)=0
2800 CF(I)=0:PT(I)=0:NEXT I
2810 FOR I=1 TO MN
2820 PRINT:PRINT "FOR MORTGAGE NUMBER ";I;"GIVE THE FOLLOWING"
2830 INPUT "TOTAL AMOUNT OF THE MORTGAGE";AM(I)
2840 INPUT "THE TERM, IN MONTHS";TM(I)
2850 INPUT "THE INTEREST RATE, IN % ";RT(I)
2860 MT=MT+AM(I)
2870 NEXT I
2880 IF X=5 GOTO 3010
2890 CLS:PRINT "DESCRIBE DEPRECIATION METHODS"
2900 INPUT "ALLOCATION TO BUILDING IN % ";D1
2910 INPUT "ALLOCATION TO PERSONALTY IN %";D2
2920 IF D1+D2>=100 THEN PRINT " TOO MUCH":FOR F3=1 TO 1000:NEXT F3:GOTO 2900
2930 PRINT "WHAT METHOD OF DEPRECIATION IS TO BE USED"
2940 PRINT "FOR THE BUILDING.  INPUT SL, DDB, 125%, OR 150%";
2950 INPUT DB$:IF Y=10 THEN 3300
2960 INPUT "TERM OF BUILDING DEPRECIATION, IN YRS";YB
2970 PRINT "WHAT METHOD OF DEPRECIATION IS TO BE USED"
2980 PRINT "FOR PERSONAL PROPERTY.  INPUT SL, DDB, 125% OR 150%";
2990 INPUT DP$:IF Y=11 THEN GOTO 3350
3000 INPUT "TERM OF PERSONAL PROPERTY DEP. IN YRS";YP
3010 CLS:PRINT "COMPUTER WORKING - BE WITH YOU IN A FEW SECONDS...."
3020 VS=VA*GI/100
3030 ER(1)=ER*(GI-VS)/100
3040 OI=GI-VS-ER(1)
3050 IF MN=0 THEN 3230
3060 DEFDBL I:M1=0:M2=0:PT(1)=0:PT(2)=0:IT(1)=0:IT(2)=0
3070 FOR X=1 TO MN
3080  IF TM(X)=1000 THEN IT(X)=AM(X)*(RT(X)/100):GOTO 3200
3090  I(X)=RT(X)/1200
3100  T=(I(X)+1)^(-TM(X)):T=1-T:MP(X)=I(X)*AM(X)/T
3110  MP(X)=INT(MP(X)*100+0.5)/100
3120  IT(X)=0:PT(X)=0:RP=AM(X)
3130  FOR Z=1 TO 12
3140   IM=INT(RP*I(X)*100+0.5)/100
3150   PM=MP(X)-IM
3160   IT(X)=IT(X)+IM
3170   PT(X)=PT(X)+PM
3180   RP=RP-PM
3190  NEXT Z
3200  IT=IT+IT(X):PT=PT+PT(X)
3210 NEXT X
3220 M1=PT(1)+IT(1):M2=PT(2)+IT(2)
3230 CF=OI-M1-M2
3240 PP=PT(1)+PT(2)
3250 AM=AM(1)+AM(2)
3260 RN=CF+PP
3270 EQ=GP-AM
3280 RT=RN/EQ*100
3290 DP=0
3300 IF DB$="DDB" THEN DP=D1*GP/YB/50:GOTO 3350
3310 IF DB$="SL" THEN DP=D1*GP/YB/100:GOTO 3350
3320 IF DB$="125%" THEN DP=D1*GP/YB*0.0125:GOTO 3350
3330 IF DB$="150%" THEN DP=D1*GP/YB*0.015:GOTO 3350
3340 PRINT:PRINT "ENTER PROPER DEPRECIATION METHOD":FOR Y=1 TO 1000:NEXT Y:Y=10:GOTO 2930
3350 IF DP$="DDB" THEN DP=DP+D2/YP/50:GOTO 3400
3360 IF DP$="SL" THEN DP=DP+D2*GP/YP/100:GOTO 3400
3370 IF DP$="125%" THEN DP=DP+D2*GP/YP*0.0125:GOTO 3400
3380 IF DP$="150%" THEN DP=DP+D2*GP/YP*0.015:GOTO 3400
3390 PRINT:PRINT "NEED METHOD FOR PERSONAL PROPERTY DEPRECIATION":FOR Y=1 TO 1000:NEXT Y:Y=11:GOTO 2970
3400 TI=RN-DP
3410 PU=GP/UN
3420 PF=GP/SF
3430 CR=OI/GP*100
3440 MR=GP/(GI-VS)
3450 '
3460 CLS:FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT
3470 PRINT "COMPUTED GROSS     ";:PRINT USING A1$;GI;
3480 PRINT TAB(33)"MTG PMT YR1  #1         #2"
3490 PRINT "VAC ALLOWANCE ";:PRINT USING A4$;VA;:PRINT " %  ";:PRINT USING A2$;VS;
3500 PRINT TAB(33)"PRINCIPAL ";:PRINT USING A2$;PT(1);:PRINT " ";:PRINT USING A2$;PT(2)
3510 PRINT "EXP. RATIO ";:PRINT USING A3$;ER;:PRINT " %";:PRINT " ";:PRINT USING A1$;ER(1);
3520 PRINT TAB(33)"INTEREST  ";:PRINT USING A2$;IT(1);:PRINT " ";:PRINT USING A2$;IT(2)
3530 PRINT "NET OPER INC.      ";:PRINT USING A1$;OI;:PRINT TAB(33)"TOTAL     ";:PRINT USING A2$;M1;:PRINT " ";:PRINT USING A2$;M2
3540 FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT
3560 PRINT "CASH FLOW           ";:PRINT USING A5$;CF;:PRINT " ";:PRINT TAB(33)"PURCH PRICE        ";:PRINT USING A6$;GP
3570 PRINT "PRIN. PAYMENT       ";:PRINT USING A5$;PP;
3580 PRINT TAB(33)"MORTGAGE TOTAL     ";:PRINT USING A6$;AM
3590 PRINT "EQU RTN = ";:PRINT USING A3$;RT;:PRINT " %   ";:PRINT USING A5$;RN;
3600 PRINT TAB(33)"EQUITY             ";:PRINT USING A6$;EQ
3610 PRINT "DEPRECIATION        ";:PRINT USING A5$;DP;
3620 PRINT TAB(33)"RTN ON CAP RATE         ";:PRINT USING A3$;CR;:PRINT " %"
3630 PRINT "TAXABLE INCOME      ";:PRINT USING A5$;TI;
3640 PRINT TAB(33)"MULTIPLIER (X EARNINGS)   ";:PRINT USING A3$;MR
3650 FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT
3660 PRINT "PRICE PER UNIT = ";:PRINT USING A1$;PU;
3670 PRINT TAB(33)"PRICE / SQ FT =      ";:PRINT USING A2$;PF
3680 FOR X=0 TO 63:PRINT "+";:NEXT X:PRINT:PRINT
3690 PRINT "DO YOU WISH TO  1 - DISPLAY CURRENT VALUES"
3692 PRINT "                2 - CHANGE A VALUE"
3694 PRINT "                3 - RERUN THE PROGRAM"
3696 PRINT "                4 - RETURN TO MENU"
3710 PRINT:INPUT "ENTER THE NUMBER OF YOUR CHOICE:";F
3720 IF F<>ABS(INT(F)) OR F>4 GOTO 3710
3730 ON F GOTO 3740,3880,2510,10
3740 CLS:PRINT "PRICE";TAB(33)"";:PRINT USING A6$;GP
3750 PRINT "GROSS INCOME";TAB(33)"";:PRINT USING A6$;GI
3760 PRINT:PRINT "DEPRECIATION";TAB(20)"% ALLOC.";TAB(30)"YEARS";TAB(40)"TYPE
3770 PRINT "BUILDING";TAB(20)D1;TAB(30)YB;TAB(40)DB$
3780 PRINT "PERSONAL PROP.";TAB(20)D2;TAB(30)YP;TAB(40)DP$
3790 IF MN=0 THEN PRINT:PRINT "THERE ARE NO MORTGAGES":GOTO 3830
3800 PRINT:FOR X1=1 TO MN:PRINT "MTG. #";X1;"IS $";:PRINT USING A6$;AM(X1);:PRINT " AT";RT(X1);"% ";:IF TM(X1)=1000 THEN PRINT "FIRST YEAR INTEREST ONLY":GOTO 3820
3810 PRINT "OVER";TM(X1);" PERIODS."
3820 NEXT X1
3830 PRINT:PRINT "THE BUILDING HAS"UN;"UNITS AND";SF;"SQUARE FEET.
3840 PRINT:PRINT "DO YOU WISH TO  1 - DISPLAY FIRST YEAR"
3842 PRINT "                2 - CHANGE A VALUE"
3844 PRINT "                3 - RERUN PROGRAM"
3850 PRINT "                4 - RETURN TO MENU"
3855 PRINT:PRINT "ENTER THE NUMBER OF YOUR CHOICE ";:INPUT X
3860 X=ABS(INT(X)):ON X GOTO 3450,3880,2510,10
3870 GOTO 3840
3880 CLS
3890 PRINT:PRINT "DO YOU WISH TO CHANGE:
3900 PRINT "    1 - COMPUTED GROSS INCOME
3910 PRINT "    2 - VACANCY ALLOWANCE
3920 PRINT "    3 - EXPENSE RATIO
3930 PRINT "    4 - PURCHASE PRICE
3940 PRINT "    5 - MORTGAGE INFORMATION
3950 PRINT "    6 - DEPRECIATION INFORMATION
3960 PRINT:PRINT "ENTER THE NUMBER OF YOUR CHOICE ";:INPUT X
3970 IF X<>ABS(INT(X)) OR F>6 THEN 3960
3980 ON X GOTO 2680,2630,2710,2600,2740,2890
3990 GOTO 3960
4000 END
4010 CLS:IF ERR/2+1=11 THEN PRINT "A DIVIDE BY ZERO ERROR HAS OCCURRED.  THIS USUALLY" ELSE 4050
4020 PRINT "MEANS THAT A VALUE WAS NOT ENTERED PROPERLY.  IT
4030 PRINT "MIGHT MEAN THAT THE ERROR OTHERWISE WAS COMPUTED.
4040 INPUT "LET'S GO BACK AND TRY AGAIN.  PRESS ENTER WHEN READY";A$:RUN
4050 PRINT "ERROR";ERR;"HAS OCCURRED ON LINE";ERL;
4055 PRINT ".  LET'S GO BACK AND TRY AGAIN."
4060 PRINT:INPUT "PRESS ENTER FOR MENU.";A$:RUN
4220 'NOMINAL & EFFECTIVE INTEREST RATES
4230 CLEAR:ON ERROR GOTO 5950
4240 CLS:PRINT "THIS PROGRAM GIVES YOU THE NOMINAL AND EFFECTIVE
4250 PRINT "INTEREST RATES WHEN GIVEN THE FUTURE VALUE, PRESENT
4260 PRINT "VALUE, NUMBER OF PERIODS BETWEEN THE TWO, AND THE NUMBER
4270 PRINT "OF COMPOUNDING PERIODS PER YEAR.
4280 PRINT:INPUT "ENTER FUTURE VALUE";FV
4290 INPUT "ENTER PRESENT VALUE";PV
4300 INPUT "ENTER TOTAL NUMBER OF PERIODS";NP
4310 INPUT "ENTER NUMBER OF PERIODS PER YEAR";PY
4320 NR=(PY*((FV/PV)^(1/NP))-PY)*100
4330 ER=((FV/PV)^(PY/NP)-1)*100
4340 PRINT:PRINT "THE NOMINAL RATE IS";NR;" %
4350 PRINT "THE EFFECTIVE RATE IS";ER;" %
4360 GOTO 4060
4380 'INTERNAL RATE OF RETURN
4390 CLEAR:CLS:ON ERROR GOTO 5950
4400 PRINT "THIS PROGRAM FIGURES THE INTERNAL RATE OF RETURN
4410 PRINT "ON AN INVESTMENT, THE PERIODIC EARNINGS OF THAT
4420 PRINT "INVESTMENT, DISCOUNTED FOR THE PRESENT VALUE OF
4430 PRINT "THE EXPECTED SALES PRICE.":PRINT
4440 INPUT "ENTER THE PURCHASE PRICE OR INVESTMENT";PV
4450 INPUT "ENTER THE EXPECTED SALE PRICE";FV
4460 INPUT "ENTER THE NUMBER OF PERIODS PER YEAR";PY
4470 INPUT "ENTER THE TOTAL NUMBER OF PERIODS";N
4480 DIM EP(N)
4490 FOR X=1 TO N:PRINT "ENTER THE EARNINGS FOR PERIOD #";X;:INPUT EP(X):NEXT X
4500 CLS:PRINT:PRINT:PRINT:PRINT "COMPUTER WORKING.  BE WITH YOU IN A FEW SECONDS. . . .
4510 IR=0.15/PY:I1=0.25
4520 PF=FV/(1+IR)^N
4530 TE=0
4540 FOR X=1 TO N
4550 PE=EP(X)/(1+IR)^X
4560 TE=TE+PE
4570 NEXT X
4580 I1=IR*(PF+TE)/PV
4590 IF ABS(IR-I1)<0.000001 THEN IR=IR*PY*100:GOTO 4610
4600 IR=I1:GOTO 4520
4610 CLS:PRINT:PRINT:PRINT:PRINT "THE RATE OF RETURN IS";IR;"%"
4620 GOTO 970
4630 CLS:CLEAR:PRINT "THIS PROGRAM WILL GIVE YOU THE FUTURE VALUE OF A SERIES
4640 ON ERROR GOTO 5950
4650 PRINT "OF REGULAR DEPOSITS, WHERE EACH DEPOSIT IS IDENTICAL,
4660 PRINT "AND INTEREST IS COMPOUNDED WITH THE SAME FREQUENCY
4670 PRINT "THAT THE DEPOSITS ARE MADE.  THIS IS KNOWN AS
4680 PRINT "AN ANNUITY DUE, THAT IS, PAYMENTS ARE MADE
4690 PRINT "IN ADVANCE OF THE INTEREST BEING PAID, SUCH AS A
4700 PRINT "SAVINGS ACCOUNT OR INSURANCE POLICY.
4710 INPUT "ENTER THE AMOUNT OF THE REGULAR DEPOSIT ";RD
4720 INPUT "ENTER THE NUMBER OF DEPOSITS PER YEAR ";PY
4730 PRINT "USING THE FORMAT (YY,MM),ENTER THE YEARS AND
4740 INPUT "MONTHS OF THE TERM ";Y,M
4750 Y=Y+M/12
4760 INPUT "ENTER THE NOMINAL ANNUAL INTEREST RATE, IN %";IR
4770 I=IR/PY/100
4780 T=(1+I)^(PY*Y):T=T-1:T=T/I:FV=RD*T
4790 PRINT:PRINT "THE FUTURE VALUE IS $";FV
4800 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
4810 S TO P
4820 CLS:PRINT "THIS PROGRAM COMPUTES THE AMOUNT OF REGULAR DEPOSITS
4830 PRINT "NEEDED TO PRODCE A PARTICULAR FUTURE VALUE.  IT IS
4840 PRINT "AN EXAMPLE OF AN ANNUITY DUE.":PRINT
4850 INPUT "WHAT IS THE FUTURE VALUE";FV
4860 INPUT "ENTER THE NUMBER OF DEPOSITS PER YEAR";PY
4870 PRINT "ENTER THE NUMBER OF YEARS, USING THE
4880 INPUT "FORMAT (YY,MM) ";Y,M
4890 Y=Y+M/12
4900 INPUT "ENTER THE NOMINAL ANNUAL INTEREST RATE, IN %";IR
4910 I=IR/PY/100
4920 T=(1+I)^(PY*Y):T=T-1:T=I/T:RD=FV*T
4930 PRINT:PRINT "THE AMOUNT OF THE REGULAR DEPOSIT IS $";RD
4940 PRINT:INPUT "PRESS ENTER FOR MENU";A$:RUN
4950 CLS:PRINT "APPLYING A PARTICULAR DEPRECIATION RATE TO A SET
4960 PRINT "INVESTMENT, THIS PROGRAM DETERMINES THE AMOUNT OF
4970 PRINT "DEPRECIATION FOR EACH YEAR.":PRINT
4980 INPUT "ENTER THE AQUISITION PRICE ";PR
4990 INPUT "ENTER THE DEPRECIATION RATE, IN % ";DR
5000 INPUT "ENTER THE NUMBER OF YEARS OF DEPRECIATION ";YD
5010 DR=DR/100:DT=0
5020 PRINT "YEAR","DEPREC.","REMAINDER
5030 FOR X=1 TO YD
5040  DP=DR*PR*(1-DR)^(X-1)
5050  DT=DT+DP
5060  PRINT X,DP,PR-DT
5070  IF YD>12 THEN INPUT "PRESS ENTER TO CONTINUE";A$
5080 NEXT X
5090 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5100 CLS:PRINT "THIS PROGRAM DETERMINES THE DEPRECIATION RATE
5110 PRINT "IF THE CURRENT VALUE, ORIGINAL PRICE, AND HOLDING
5120 PRINT "TIME ARE KNOWN.":PRINT
5130 INPUT "ENTER THE CURRENT VALUE ";DP
5140 INPUT "ENTER THE ORIGINAL PRICE ";OP
5150 INPUT "ENTER THE HOLDING TIME, IN YEARS ";YD
5160 DR=(1-(DP/OP)^(1/YD))*100
5170 PRINT:PRINT "THE DEPRECIATION RATE IS";DR;" %"
5180 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5190 CLS:PRINT "THIS PROGRAM DETERMINES THE SALVAGE VALUE
5200 PRINT "OF AN ITEM GIVEN THE AGE, DEPRECIATION RATE AND
5210 PRINT "ORIGINAL PRICE.
5220 PRINT:INPUT "ENTER THE AGE OF THE ITEM, IN YEARS";YD
5230 INPUT "ENTER THE DEPRECIATION RATE, IN % ";DR
5240 INPUT "ENTER THE ORIGINAL PRICE ";OP
5250 PRINT:DR=DR/100
5260 SV=OP*(1-DR)^YD
5270 PRINT "THE SALVAGE VALUE IS $";SV
5280 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5290 CLS:PRINT "THIS PROGRAM PRINTS A DEPRECIATION SCHEDULE FOR
5300 PRINT "AN ITEM.  YOU MUST KNOW THE METHOD, AND INPUT THE
5310 PRINT "PROPER FACTOR FOR THAT METHOD.  FOR STRAIGHT LINE
5320 PRINT "DEPRECIATION, INPUT 100, FOR 125% DECLINING BALANCE
5330 PRINT "INPUT 125, FOR 150% DECLINING BALANCE INPUT 150,
5340 PRINT "AND FOR DOUBLE DECLINING BALANCE INPUT 200":PRINT
5350 INPUT "ENTER THE DEPRECIATION FACTOR ";DF
5360 INPUT "ENTER THE ORIGINAL PRICE ";OP
5370 INPUT "ENTER THE SALVAGE VALUE  ";SV
5380 INPUT "ENTER THE NUMBER OF YEARS OF DEPRECIATION";YD
5390 PRINT
5400 PRINT "YEAR","DEP.","REMAINING VALUE
5410 DV=OP-SV:RV=OP:C=0
5420 IF DF=100 THEN GOTO 5500
5430 FOR X=1 TO YD
5440  C=C+1
5450 DP=DF/YD/100*RV:RV=RV-DP
5460  PRINT X,DP,RV
5470  IF C>11 THEN PRINT:INPUT "PRESS ENTER TO CONTINUE";A$:C=0
5480 NEXT X
5490 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5500 RV=DV
5510 C=0
5520 FOR X=1 TO YD
5530  C=C+1
5540  DP=DV/YD:RV=RV-DP
5550  IF C>11 THEN PRINT:INPUT "PRESS ENTER TO CONTINUE";A$:C=0
5560  PRINTX,DP,RV+SV
5570 NEXT X
5580 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU ";A$:RUN
5590 CLS:CLEAR:PRINT "THIS PROGRAM DETERMINES THE PRESENT VALUE OF A COUPON
5600 ON ERROR GOTO 5950
5610 PRINT "BOND AT THE RATE OF INTEREST SELECTED BY YOU.  IT IS
5620 PRINT "NECESSARY FOR YOU TO GIVE THE COMPUTER YOUR RATE OF
5630 PRINT "INTEREST AND THE FINANCIAL INFORMATION ON THE BOND.
5640 PRINT:INPUT "ENTER YOUR DESIRED RATE OF INTEREST, IN %";IR
5650 INPUT "ENTER THE FACE (REDEMPTION) AMOUNT OF THE BOND";AM
5660 INPUT "ENTER THE NUMBER OF PAYMENT PERIODS PER YEAR";PY
5670 INPUT "ENTER THE NUMBER OF PERIODS TO MATURITY";PN
5680 INPUT "ENTER THE PERIODIC PAYMENT, IN $";PP
5690 PRINT:PRINT
5700 IR=IR/PY/100:PV=AM/(1+IR)^PN
5710 T=(1+IR)^(-PN):T=1-T:T=T/IR:T=T*PP
5720 PV=PV+T
5730 PRINT "THE PRESENT VALUE IS $";PV
5740 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU";A$:RUN
5750 CLS:CLEAR
5760 ON ERROR GOTO 5950
5770 PRINT "THIS PROGRAM DETERMINES THE YIELD TO MATURITY ON
5780 PRINT "A BOND GIVEN THE CURRENT PURCHASE PRICE.  THIS IS
5790 PRINT "THE TRUE RATE OF RETURN ON A BOND.
5800 PRINT:INPUT "ENTER THE PURCHASE PRICE OF THE BOND, IN $";PV
5810 INPUT "ENTER THE REDEMPTION (FACE) VALUE ";FV
5820 INPUT "ENTER THE ANNUAL QUOTED INTEREST RATE ";IR
5830 INPUT "ENTER THE NUMBER OF COUPON PAYMENTS PER YEAR ";PY
5840 INPUT "ENTER THE NUMBER OF PAYMENT PERIODS REMAINING ";N
5850 INPUT "ENTER THE AMOUNT OF THE COUPON PAYMENT ";CP
5860 PRINT:PRINT "COMPUTER WORKING.  BE WITH YOU IN A FEW SECONDS . . .
5870 IR=0.08/PY
5880 PF=FV/(1+IR)^N
5890 T=(1+IR)^(-N):T=1-T:T=T/IR*CP
5900 I1=IR*(PF+T)/PV
5910 IF ABS(IR-I1)<0.000001 THEN IR=IR*PY*100:GOTO 5930
5920 IR=I1:GOTO 5880
5930 PRINT:PRINT "THE YIELD TO MATURITY IS";IR;" %"
5940 PRINT:INPUT "PRESS ENTER TO RETURN TO MENU ";A$:RUN
5950 CLS
5960 IF ERR/2+1=11 THEN PRINT "A DIVIDE BY ZERO ERROR HAS OCCURRED."ELSE6030
5970 PRINT:PRINT "THIS USUALLY MEANS THAT SOME INFOR MATION REQUIRED  TO
5980 PRINT "BE ENTERED IN TO  THE PROGRAM HAS BEEN OMITTED.  IT MAY
5990 PRINT "ALSO MEAN THAT THE ZERO WAS COMPUTED FROM VALID DATA
6000 PRINT "AND THE COMPUTER IS UNABLE TO PROCEED.  A SECOND RUN
6010 PRINT "SHOULD TELL US.  PRESS ENTER FOR MENU":INPUT A$
6020 RUN
6030 PRINT "AN ERROR HAS OCCURRED.  LET'S GO BACK
6040 INPUT "AND TRY AGAIN.  PRESS ENTER FOR MENU. ";A$:RUN
6100 REM * PUBLIC DOMAIN SOFTWARE *

FINANCE1.BAS

10 '
50 CLEAR 2000
85 D$="$###,#.###":E$="$#######,#.##":G$="$#####,#.##":H$="######,#.##"
90 A1$="INITIAL BALANCE : $":A2$="NUMBER OF PAYMENTS PER YEAR :"
92 O1$="REGULAR PAYMENT":O2$="TOTAL OF PAYMENTS":O3$="TOTAL INTEREST PAID"
94 H1$="VALUE OF INVESTMENT":H2$="VALUE OF ACCUM. INTEREST":H3$="TOTAL VALUE"
95 DEFDBL Q,Y,X,W,P,D,O,J,K,R,C,S,L,H,I:DIM A(20)
100 CLS:PRINT TAB(10)"IBM PERSONAL COMPUTER HOME FINANCE PROGRAMS":PRINT :PRINT
110 PRINT:PRINT"LOAN AMORITIZATION CALCULATIONS";:PRINT TAB(50)"1"
120 PRINT:PRINT"LOAN AMORITIZATION SCHEDULE";:PRINT TAB(50)"2"
130 PRINT:PRINT"ANNUITIES CALCULATIONS";:PRINT TAB(50)"3"
140 PRINT:PRINT"HOME OWNER'S COST CALCULATIONS";:PRINT TAB(50)"4"
150 PRINT:PRINT"DEPRECIATIONS SCHEDULES";:PRINT TAB(50)"5"
160 PRINT:INPUT"WHICH PROGRAM :";X:IF X<1 OR X>5 THEN 100
180 ON X GOTO 2000,2600,3000,1000,4000
1000 CLS:PRINT TAB(14)"HOME OWNER'S REAL MONTHLY COST ESTIMATE"
1010 PRINT:INPUT"YOUR MONTHLY PAYMENT (WITH PROPERTY TAX) :$";A1
1025 X=A1*12:PRINT"ANNUALLY THIS AMOUNTS TO : $";X
1030 PRINT:INPUT"YOUR MORTGAGE IS : $";A2
1035 INPUT"YOUR ANNUAL INTEREST RATE IS : %";A3
1040 Q=(A3/100)*A2:GOSUB 2850:V=Q
1045 PRINT"FIRST YEAR'S INTEREST WILL BE : $";V
1050 PRINT:INPUT"ANNUAL PROPERTY TAXES ARE : $";A4
1055 D=V+A4:PRINT"DEDUCTIBLE INTEREST & TAXES TOTAL : $";D
1060 PRINT:INPUT"YOU ESTIMATE YOU ARE IN WHAT TAX BRACKET : %";A5
1065 A5=A5/100:Q=A5*D:F=Q
1070 PRINT"YOUR DEDUCTIONS WILL SAVE YOU : ";USINGG$;F
1075 INPUT"ESTIMATE YOUR PROPERTY VALUE INCREASE NEXT YEAR : %";A6:PRINT:PRINT:PRINT:PRINT
1080 A6=A6/100:Q=A6*A2:S=Q
1085 PRINT"YOUR PROPERTY WILL INCREASE IN VALUE : ";USINGG$;S
1090 M=ABS(X-D):PRINT"YOUR MORTAGE REDUCTION WILL AMOUNT TO : $";M
1095 N=F+S+M:PRINT"YOUR TOTAL BENEFITS NEXT YEAR WILL AMOUNT TO : $";N
1100 Q=N/12:O=Q:J=A1-O
1105 PRINT:PRINT"MONTHLY PAYMENT IS :";TAB(5) USING G$;A1
1110 PRINT"YOUR MONTHLY BENEFITS ARE :";TAB(35) USING G$;O
1115 PRINT"YOUR REAL MONTHLY COST IS :";TAB(35) USING G$;J
1120 PRINT:PRINT"THE ABOVE RESULTS ARE ESTIMATES ONLY"
1125 INPUT"PRESS ENTER TO RETURN TO MENU ";X$:GOTO 10
2000 CLS:PRINT TAB(15)"LOAN AMORITIZATION CALCULATION"
2010 PRINT:PRINT A1$;:INPUT A1
2015 GOSUB 5000:PRINT:PRINT A2$;:INPUT V
2020 A2=A2/V/100:X=1+A2:Y=V*A3/12:P=X^Y:B=1/P:C=A1*A2/(1-B):R=C*A3:K=R-A1
2060 PRINT STRING$(45,"=")
2065 PRINT O1$;TAB(35) USING E$;C
2070 PRINT O2$;TAB(35) USING E$;R
2075 PRINT O3$;TAB(35) USING E$;K
2080 PRINT:INPUT"CONTINUE (Y/N) ";C$:IF C$="Y" GOTO 2000 ELSE IF C$="N" GOTO 10
2083 GOTO 2080
2600 CLS:PRINT TAB(18)"LOAN AMORTIZATION SCHEDULE"
2615 PRINT:PRINT:I=0:R=0:H=0:S=0:X=0:A1=0:A4=0:A3=0
2620 INPUT"BEGINNING BALANCE : $";H:A(0)=H
2630 INPUT"ANNUAL INTEREST RATE : %";A1:L=(A1/12)/100
2640 INPUT"LOAN TERM (YRS,MONTHS) :";N,A6:N=N*12+A6
2645 INPUT"# OF MONTH OF FIRST PAYMENT :";A7:IF A7=0 THEN A7=1
2646 PRINT"ENTER 0 FOR COMPUTER CALCULATION OF PAYMENT"
2648 INPUT"MONTHLY PAYMENT :$";X:IF X>0 THEN 2665
2655 X=(1+L):Y=-N:P=X^Y:X=H*(L/(1-P)):X=(INT(100*X))/100
2665 GOSUB 2670:GOTO 2685
2670 CLS:PRINT"BAL";USING E$;A(0)
2673 PRINT"INTEREST %";A1
2675 PRINT"MONTHLY PAYMENT";USING G$;X
2680 PRINT"MONTH      PRINCIPLE      INTEREST   INT TO DATE    BALANCE"
2682 RETURN
2685 A3=A7:N=N+A7-1
2687 A9=0:A(10)=0:FOR Z=A3 TO A3+12-A7
2690 PRINT Z;
2695 I=H*L:I=(INT(100*I))/100:S=S+I:A4=X-I:H=H-A4
2703 R=R+A4:A9=A9+I:A(10)=A(10)+A4:IF Z=-1 THEN PRINT"LAST";
2704 PRINT TAB(8) USING G$;A4;:PRINT TAB(23) USING G$;I;:PRINT TAB(35) USING E$;S;:PRINT TAB(49) USING E$;H
2712 IF Z=-1 THEN 2720
2713 IF H<=X THEN I=(INT(100*H*L))/100:S=S+I:A4=H:Z=-1:H=0:GOTO 2703
2714 IF Z=N THEN Z=-1:GOTO 2720
2715 NEXT Z:A3=A3+13-A7:A7=1
2720 PRINT"TOTALS";:PRINT TAB(8) USING G$;A(10);:PRINT TAB(23) USING G$;A9;
2725 INPUT"    CONTINUE (Y/N)";C$:IF C$<>"Y" THEN 2800
2727 IF (C$="Y") AND (Z=-1) THEN 2800
2730 GOSUB 2670:GOTO 2687
2800 CLS:PRINT"TOTAL PRINCIPLE PAID ";USING E$;R
2810 PRINT"TOTAL INTEREST PAID  ";USING E$;S
2815 G=H*L/30
2818 PRINT
2820 IF H=0 THEN 2830
2823 PRINT"FINAL PAYMENT IS     ";USING E$;H
2824 PRINT"INTEREST PER DAY IS     ";USING D$;G
2830 INPUT"AGAIN ";C$:IF C$="Y" THEN 2600
2845 IF C$="N" THEN 10 ELSE 2830
2850 RETURN
3000 '
3001 CLS:PRINT TAB(18)"ANNUITIES CALCULATIONS"
3005 PRINT:PRINT:PRINT"FUTURE VALUE OF A SINGLE DEPOSIT";TAB(55)"1"
3010 PRINT:PRINT"PRESENT VALUE REQUIRED FOR A FUTURE VALUE";TAB(55)"2"
3015 PRINT:PRINT"FUTURE VALUE OF REGULAR DEPOSITS";TAB(55)"3"
3020 PRINT:PRINT"REGULAR DEPOSITS REQUIRED TO ACHIEVE A FUTURE VALUE";TAB(55)"4"
3030 PRINT:PRINT"EXIT THIS PROGRAM";TAB(55)"5"
3035 PRINT:INPUT"WHICH PROGRAM : ";X:IF X<1 OR X>5 THEN 3000
3050 ON X GOTO 3100,3200,3300,3400,10
3100 CLS:PRINT TAB(10)"FUTURE VALUE OF A DEPOSIT"
3105 INPUT"INITIAL INVESTMENT : $";A1
3110 GOSUB 5000
3115 PRINT:INPUT"NUMBER OF COMPOUNDING PERIODS/YR :";V
3120 A2=A2/V/100:X=1+A2:Y=(A3/12)*V:P=X^Y:Q=P*A1:W=Q-A1:GOSUB 5100
3130 GOSUB 9500:GOTO 3000
3200 CLS:PRINT TAB(12)"PRESENT VALUE REQUIRED FOR A FUTURE VALUE"
3210 INPUT"FUTURE VALUE EXPECTED : $";A1
3220 GOSUB 5000:PRINT:INPUT"NUMBER OF COMPOUNDING PERIODS/YR ; ";V
3225 A2=A2/V/100:X=1+A2:Y=-A3/12*V:P=X^Y
3230 Q=P*A1:W=A1-Q:D=A1:A1=Q:Q=D:PRINT:GOSUB5100
3235 GOTO 3130
3300 CLS:PRINT TAB(20)"FUTURE VALUE OF REGULAR DEPOSITS"
3310 INPUT"DEPOSIT : $";A1
3313 GOSUB 3315:GOTO 3320
3315 GOSUB 5000:PRINT:INPUT"NUMBER OF DEPOSITS PER YEAR : ";V
3317 PRINT:INPUT"NUMBER OF COMPOUNDING PERIODS PER YEAR : ";T:S=V/T
3319 RETURN
3320 A2=A2/T/100:X=1+A2:Y=A3/12*T:P=X^Y:Q=(A1*V/T)*((P-1)/A2):A1=A1*A3/12*V
3330 W=Q-A1:PRINT:GOSUB 5100:GOTO 3130
3400 CLS:PRINT TAB(5)"REGULAR DEPOSITS REQUIRED TO ACHIEVE A FUTURE VALUE"
3410 INPUT"FUTURE VALUE : $";A1:GOSUB 3315:A2=A2/T/100:X=1+A2:Y=A3/12*T:P=X^Y:Q=A1*(A2/(P-1)):Q=Q*T/V:C=Q*V*A3/12
3430 PRINT STRING$(50,"=")
3435 PRINT"REGULAR DEPOSIT REQUIRED"TAB(35) USING G$;Q
3440 W=A1-C:Q=A1:A1=C:GOSUB 5105:GOTO 3130
4000 CLS:PRINT TAB(25)"DEPRECIATION SCHEDULES"
4010 PRINT:PRINT"STRAIGHT LINE METHOD";TAB(50)"1"
4020 PRINT:PRINT"SUM OF THE YEARS DIGITS METHOD";TAB(50)"2"
4030 PRINT:PRINT"DECLINING BALANCE METHOD";TAB(50)"3"
4050 PRINT:INPUT"WHICH PROGRAM";X:IF X=4 THEN 100
4060 IF X<1 OR X>4 THEN 4000
4065 A(20)=X
4070 ON X GOTO 4100,4200,4300
4072 PRINT:PRINT"EXIT THE PROGRAM";TAB(50)"4"
4100 CLS:A$="STRAIGHT LINE":B$=" METHOD":PRINT TAB(23)A$;B$:PRINT:GOSUB 4900
4105 I=18:X=A3/A4:GOSUB 4500:GOSUB 4550:GOTO 4000
4200 CLS:A$="SUM OF THE YEARS":B$=" DIGITS METHOD"
4205 PRINT TAB(13)A$;B$:PRINT:GOSUB 4900
4210 E=0:FOR Z=1 TO A4:E=E+Z:NEXT
4220 I=18:GOSUB 4500:GOSUB 4550:GOTO 4000
4300 CLS:A$="DECLINING":B$=" BALANCE METHOD"
4307 PRINT TAB(22)A$;B$:I=22
4310 GOSUB 4950
4340 A3=A3/100/A4:GOSUB 4500:GOSUB 4550:GOTO 4000
4500 CLS:PRINT TAB(I)A$;B$:PRINT TAB(3)"YEARS";TAB(25)"DEPRECIATION";
4506 PRINT TAB(48)"DEPRECIATED":PRINT TAB(28)"VALUE";TAB(52)"VALUE"
4510 RETURN
4550 A7=0:V=0:U=A1
4555 FOR Z=A7 TO (A7+11)
4560 GOSUB 4600
4563 IF Z=0 THEN X=0
4565 PRINT TAB(4)Z;
4566 PRINT TAB(24) USING G$;X;
4567 PRINT TAB(46) USING E$;V
4570 IF Z=>A4 THEN 4590
4575 NEXT Z:A7=A7+12
4580 INPUT"CONTINUE (Y/N) ";C$:IF C$<>"Y" THEN 4000+A(20)*100
4585 CLS:GOSUB 4500:GOTO 4555
4590 GOSUB 9500:GOTO 4000
4600 W=A(20):ON W GOTO 4670,4680,4690
4670 X=A3/A4:V=U:U=A1-X:A1=U:RETURN
4680 IF V<>0 THEN X=(A4+1-Z)/E*A3:U=A1-X:A1=U:V=U:RETURN
4685 V=U:RETURN
4690 IF V<>0 THEN X=U*A3:U=A1-X:A1=U:V=U:RETURN
4695 V=U:RETURN
4900 PRINT"PURCHASE PRICE";TAB(30)"$";:INPUT A1
4910 PRINT"RESALE PRICE";TAB(30)"$";:INPUT A2
4920 A3=A1-A2
4930 PRINT"TERM OF DEPRECIATION (YRS)"TAB(30);:INPUT A4:RETURN
4950 PRINT"PURCHASE PRICE"TAB(30)"$";:INPUT A1
4960 PRINT"DECLINING BALANCE FACTOR"TAB(30)"%";:INPUT A3
4970 PRINT"TERM OF DEPRECIATION (YRS)"TAB(30);:INPUT A4
4980 RETURN
5000 PRINT:INPUT"ANNUAL INTEREST RATE : %";A2
5010 PRINT:INPUT"TERM (YRS,MONTHS) : ";A3,A4:PD=A3:A3=A3*12+A4
5015 RETURN
5100 PRINT STRING$(50,"=")
5105 PRINT H1$;TAB(35) USING E$;A1
5110 PRINT H2$;TAB(35) USING E$;W
5115 PRINT H3$;TAB(35) USING E$;Q
5120 RETURN
9500 FOR Z=1 TO 6000:NEXT:RETURN

GROWTH.BAS

5 'THIS PROGRAM REQUIRES BASICA AND A COLOR MONITOR
10 KEY OFF
20 CLS
30 WIDTH 40
40 DIM F(24)
50 PRINT "      Growth Rate and Projections"
60 PRINT
70 PRINT
80 PRINT "   This program analyzes sales or other figures from past months,computes an"
82 PRINT "average growth rate, and projects futurefigures."
84 PRINT "   You specify the number of past and   future months."
86 PRINT "   The total number of months cannot    exceed 24."
90 PRINT
100 PRINT
200 INPUT "How many past months ";M
210 INPUT "How many months to project ";P
220 IF M+P>24 THEN PRINT :PRINT "ONLY 24 MONTHS TOTAL, PLEASE!":GOTO 100
230 PRINT
240 PRINT "Now enter amounts for past months:"
250 PRINT
260 FOR J=1 TO M
270 PRINT "month";J;
280 INPUT F(J)
290 NEXT J
300 T=LOG(F(1))
310 V=0
320 FOR J=2 TO M
330 L=LOG(F(J))
340 T=T+L
350 V=V+(J-1)*L
360 NEXT J
370 A=6*(2*V/(M-1)-T)/M/(M+1)
380 A=EXP(A)-1
390 AGF=EXP(T/M-A*(M-1)/2)
400 FOR J=M+1 TO M+P
410 F(J)=INT(AGF*(1+A)^(J-1)+0.5)
420 NEXT J
430 MIN=F(1)
440 MAX=F(1)
450 FOR J=1 TO M+P
460 IF F(J)>MAX THEN MAX=F(J)
470 IF F(J)<MIN THEN MIN=F(J)
480 NEXT J
490 S=168/(MAX+MIN)
1000 CLS
1010 FOR J=1 TO M+P
1020 IF J>M+P THEN J=24:GOTO 1050
1030 PRINT
1040 PRINT "Month";J;TAB(10);F(J);
1050 NEXT J
1060 PRINT TAB(18);"Growth Rate:";INT(A*10000+0.5)/100;"%";
1100 GOSUB 2000
1110 FOR J=1 TO M+P
1120 IF J>M THEN C=1
1130 PSET (J*11+45,200-INT(S*F(J))),C
1140 NEXT J
1200 GOSUB 2000
1210 PSET (56,200-INT(S*F(1))),C
1220 FOR J=2 TO M+P
1230 IF J>M THEN C=1
1240 LINE -(J*11+45,200-INT(S*F(J))),C
1250 NEXT J
1300 GOSUB 2000
1310 FOR J=1 TO M+P
1320 IF J>M THEN C=1
1330 LINE (J*11+45,200)-(J*11+54,200-INT(S*F(J))),C,BF
1340 NEXT J
1400 A$=INPUT$(1)
1410 SCREEN 0,0,0
1420 RUN
2000  A$=INPUT$(1)
2010 CLS
2020 SCREEN 1,0
2030 COLOR 0,0
2040 C=2
2050 PRINT "        Average Growth Rate Is ";INT(A*10000+0.5)/100;"%"
2060 PRINT "Amount"
2070 PRINT "  ||   <------------ Month ------------>";
2080 PRINT "  \/   1   3   6   9  12  15  18  21  24";
2090 FOR J=5 TO 25 STEP 5
2100 LOCATE J,1
2110 PRINT INT((168-(J/5-1)*40)/S+0.5);
2120 NEXT J
2130 RETURN

GROWTH1.BAS

10 REM  this program calculates interest compounded annually
20 REM  written by: J.M. ROBICHAUD (WTC-TORONTO)
30 REM  course    : 5600              CLASS 67
40  CLS
50 PRINT
60 PRINT "      THIS PROGRAM WILL CALCULATE THE COMPOUNDED GROWTH "
70 PRINT "      FOR PRINCIPAL AMOUNT ENTERED ,  "
80 PRINT "          THE NUMBER OF YEARS SPECIFIED      "
90 PRINT "          AND INTEREST RATE SPECIFIED    "
100 PRINT
110 PRINT "      TO END THE PROGRAM ENTER 0 FOR ANY REQUESTED INPUT "
120 PRINT
130 PRINT
140 PRINT " enter amount of money invested                     "
150 INPUT X
160 IF X=0 THEN 520
170 PRINT " enter interest rate "
180 INPUT R
190 IF R=0 THEN 520
200 PRINT " enter no. of years "
210 INPUT N
220 IF N=0 THEN 520
230 CLS
240 PRINT " ","  COMPOUNDED GROWTH TABLE FOR A ";R;"% ";"INTEREST RATE"
250 PRINT "amount";TAB(10);N;" yrs";TAB(22);N+1;" yrs";
260 PRINT TAB(34);N+2;" yrs";TAB(46);N+3;" yrs";TAB(58);N+4;" yrs"
270 PRINT
280 X1 = X
290 FOR I = 1 TO 19
300  Q1 = X1 * (1 + R/100) ^ (N)
310 REM  round to 2 decimals for printing
320  Q1 = INT(Q1*100 + 0.5)/100
330  Q2 = X1 * (1 + R/100) ^ (N+1)
340  Q2 = INT(Q2*100 + 0.5)/100
350  Q3 = X1 * (1 + R/100) ^ (N+2)
360  Q3 = INT(Q3*100 + 0.5)/100
370  Q4 = X1 * (1 + R/100) ^ (N+3)
380  Q4 = INT(Q4*100 + 0.5)/100
390  Q5 = X1 * (1 + R/100) ^ (N+4)
400  Q5 = INT(Q5*100 + 0.5)/100
410  PRINT X1;TAB(10);Q1;TAB(22);Q2;TAB(34);Q3;TAB(46);Q4;TAB(58);Q5
420  X1 = X1 + 100
430 REM  increment by 1000 after the first 1000
440  IF I > 10 THEN X1 = X1 + 900
450 NEXT I
460 PRINT
470 PRINT " DO YOU HAVE MORE. ENTER Y OR N ";
480 INPUT H$
490 IF H$="Y" THEN 40
500 PRINT
510 PRINT " ........... HAVE A GOOD DAY .............."
520 END

KALCOL.BAS

10 'kaleidoC.bas
20 WIDTH 40
30 KEY OFF
40 SCREEN 0,1,0,0
50 COLOR 7,0
60 CLS
70 D=-1:W=1:S=11:L=5:G=169:M=60
80 DIM R$(S)
90 FOR COUNT = 1 TO L
100 FOR J = 0 TO S
110 A$ = CHR$(RND*222+32)
120 A$ = STRING$(W,A$)
130 IF COUNT = L THEN A$="    "
140 R$(J)=A$
150 NEXT J
160 D=-D
170 P=0:Q=S
180 IF D<0 THEN Q=0:P=S
190 FOR K=P TO Q STEP D
200 COLOR  INT(RND*17)
210 IF COUNT = L THEN COLOR 7
220 FOR J=K TO Q STEP D
230 LOCATE 12+J,20+(K*W),0:PRINT R$(K)
240 LOCATE 12+K,20+(J*W):PRINT R$(K)
250 LOCATE 12-J,20+(K*W):PRINT R$(K)
260 LOCATE 12-K,20+(J*W):PRINT R$(K)
270 LOCATE 12+J,19-(K*W):PRINT R$(K)
280 LOCATE 12+K,19-(J*W):PRINT R$(K)
290 LOCATE 12-J,19-(K*W):PRINT R$(K)
300 LOCATE 12-K,19-(J*W):PRINT R$(K)
310 NEXT J
320 NEXT K
330 FOR N=1 TO 100:NEXT N
340 NEXT COUNT
350 GOTO 90
65000 X$=CHR$(13):KEY 7,"run 65030 "+X$:KEY 8,"run 65140"+X$
65020 'switch to mono
65030 KEY OFF:CLS:LOCATE ,,0:DEF SEG=0:POKE &H410,PEEK(&H410) OR &H30:DEF SEG:SCREEN 0:WIDTH 80:KEY ON:LOCATE ,,1,12,13:END
65130 'switch to color
65140 KEY OFF:CLS:LOCATE ,,0:DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR &H10:DEF SEG:WIDTH 40:LOCATE ,,1,6,7:END

PRLIST.BAS

10 REM PRINTER
20 REM PROGRAM TO DEAL WITH THE IBM 80 CPS PRINTER
30 REM FUNCTIONS:  SETUP PRINTER MODES
40 REM             PRINT PAGINATED LISTINGS OF TEXT FILES
50 REM             ISSUE CONTROLS TO PRINTER
60 REM AUTHOR:  WILL FASTIE
70 REM CREATED: 12 DEC 1981
80 REM EDITED:  26 JAN 1982  2355
90 REM SOURCE:  PRINTER.BAS
100 REM NOTE:   OPERATES ON CURRENT DISPLAY DEVICE, CURRENT MODE
110 REM ***** CONSTANTS
120 PROG$ = "PRINTER v1.01  26 JAN 1982"
130 ESC$=CHR$(27)
140 CLRLPT$=ESC$+"Q"+ESC$+"5"+ESC$+"F"+ESC$+"H"
150 PWIDTH=80
160 REM ***** INITIAL MENU
170 KEY OFF: CLS: SCREEN 0,0,0
180 PRINT PROG$: PRINT
190 PRINT "THE PRINTER MUST BE ONLINE TO"
200 PRINT "PERFORM THESE FUNCTIONS."
210 PRINT
220 PRINT "FUNCTIONS:";
230 PRINT TAB(13);"P - PRINT A TEXT FILE"
240 PRINT TAB(13);"S - SETUP PRINTER"
250 PRINT TAB(13);"R - RESET PRINTER"
260 PRINT TAB(13);"T - ADVANCE PAPER TO TOP"
270 PRINT TAB(13);"Q - QUIT (RETURN TO DOS)"
280 PRINT TAB(13);"X - EXIT TO BASIC"
290 MENSEL = CSRLIN+1
300 PLOC = MENSEL: GOSUB 1270
310 INPUT "   ENTER FUNCTION:   ",X$:  IF X$="" THEN BEEP: GOTO 300
320 GOSUB 1210
330 X = INSTR("PSRTQX",X$): IF X = 0 THEN BEEP: GOTO 300
340 ON X GOSUB 360, 770, 1080, 1120, 1150, 1180
350 GOTO 160
360 REM ***** PRINT PAGINATED LISTING
370 CLS
380 PRINT PROG$: PRINT
390 PRINT "ADJUST THE PAPER IN THE PRINTER SO THAT"
400 PRINT "THE PERFORATION IS AT THE PAPER BAIL."
410 PRINT "PUT THE PRINTER ONLINE."
420 PRINT
430 PRINT "FILES MUST BE ASCII TEXT FILES."
440 PRINT
450 PRINT "NO FILENAME EXTENSION IS ASSUMED,"
460 PRINT "SO ENTER THE FILENAME EXACTLY."
470 PRINT "DEPRESS ENTER KEY TO RETURN TO MENU."
480 PRINT "PRESS ESC KEY TO ABORT PRINTING."
490 PRINT
500 INPUT "FILE TO PRINT:  ",X$
510 IF LEN(X$) = 0 THEN RETURN
520 GOSUB 1210
530 WIDTH "lpt1:",PWIDTH
540 OPEN X$ FOR INPUT AS 1
550 PAGENR = 0
560 LINENR = 1
570 IF EOF  (1) THEN 650
580 LINE INPUT #1, L$
590 IF LINENR = 1 THEN GOSUB 690
600 LPRINT L$
610 IF INKEY$ = ESC$ THEN 650
620 LINENR = LINENR + INT((LEN(L$)+79)/80)
630 IF LINENR > 54 THEN LINENR = 1
640 GOTO 570
650 REM CLOSE FILE AND RETURN
660 CLOSE
670 GOSUB 1120
680 GOTO 500
690 REM ***** SUBROUTINE TO PRINT PAGE HEADING
700 IF PAGENR <> 0 THEN LPRINT CHR$(12);
710 PAGENR = PAGENR + 1
720 LPRINT: LPRINT
730 LPRINT ESC$+"S";X$;" ";ESC$+"T";
740 LPRINT "-- PRINTED ON ";DATE$;" AT ";TIME$;" -- PAGE";PAGENR
750 LPRINT: LPRINT
760 RETURN
770 REM ***** SETUP PRINTER
780 CLS: PRINT PROG$
790 PRINT: PRINT "PRINTER ENHANCEMENTS ARE:"
800 PRINT
810 PRINT "    IT - ITALICS CHAR. SET"
820 PRINT "    C  - COMPRESSED PRINT"
830 PRINT "    E  - EMPHASIZED PRINT"
840 PRINT "    DS - DOUBLE STRIKE"
850 PRINT
860 PRINT "ENTER ENHANCEMENTS SEPARATED BY SPACES."
870 PRINT
880 PRINT "EXAMPLES:"
890 PRINT
900 PRINT "   C E    - ILLEGAL"
910 PRINT "          - 10   CPI, NORMAL"
920 PRINT "   E      - 10   CPI, BOLD"
930 PRINT "   DS C   -16.5  CPI, DOUBLE"
940 PRINT
950 INPUT "    ENTER ENHANCEMENTS:  ",O$
960 X$=O$: GOSUB 1210: O$=X$
970 LPRINT CLRLPT$;
980 IF INSTR(O$,"IT") THEN LPRINT ESC$;"4";
990 IF INSTR(O$,"C")  THEN LPRINT ESC$;"P";
1000 IF INSTR(O$,"E") THEN LPRINT ESC$;"E";
1010 IF INSTR(O$,"DS") THEN LPRINT ESC$;"G";
1020 PRINT
1030 PLOC=CSRLIN
1040 GOSUB 1270
1050 INPUT "ENTER DESIRED LINE WIDTH:  ",PWIDTH
1060 IF 1 > PWIDTH OR PWIDTH > 132 THEN 1040
1070 RETURN
1080 REM ***** RESET PRINTER TO DEFAULTS
1090 LPRINT CLRLPT$;
1100 PWIDTH=80
1110 RETURN
1120 REM ***** FORM FEED TO PRINTER
1130 LPRINT CHR$(12);
1140 RETURN
1150 REM ***** RETURN TO DOS
1160 CLS
1170 SYSTEM
1180 REM ***** EXIT TO BASIC
1190 CLS
1200 END
1210 REM ***** SUBROUTINE TO UPPERFY A STRING (IN X$)
1220 FOR X = 1 TO LEN(X$)
1230   XC$ = MID$(X$,X,1)
1240   IF "a" <= XC$ AND XC$ <= "z" THEN MID$(X$,X,1) = CHR$(ASC(XC$)- 32)
1250 NEXT X
1260 RETURN
1270 REM ***** SUBROUTINE AT SPECIFIED LINE AND CLEAR IT
1280 LOCATE PLOC,1
1290 PRINT STRING$(40," ");
1300 LOCATE PLOC,1
1310 RETURN
1320 REM ***** SUBROUTINE TO WAIT FOR ANY KEYSTROKE
1330 PRINT "DEPRESS ANY KEY TO CONTINUE...";
1340 GOSUB 1360
1350 RETURN
1360 REM ***** SUBROUTINE TO GET A KEYSTROKE INTO X$
1370 X$ = INKEY$
1380 IF X$ = "" THEN 1370
1390 RETURN

REPORTS.BAS

10 '  BUDGET MANAGEMENT - REPORT
100 CLEAR (3600) : DEFINT I - N
110 M1 = 61 : M2 = 50 : M3 = 25 : M4 = 20 : M5 = M4
120 AD$ = CHR$ (25) : EL$ = CHR$ (30) : CU$ = CHR$ (27) : BL$ = CHR$ (29)
130 DIM A1%(M1),A2$(M1),A3#(M1),A4#(M1),A6%(M1)
140 DIM C1%(M2),C2%(M2),C3$(M2),C4(M2),C5%(M2),C6%(M2)
150 DIM E1%(M3),E2$(M3),E3(M3),E4%(M3)
160 DIM D1%(M4),D2$(M4),D3(M4)
170 DIM S1%(M5),S2$(M5),S3(M5)
190 ON ERROR GOTO 200 : DK = 1 : I = INSTR ("A","A") : GOTO 210
200 DK = 0 : RESUME 210
210 ON ERROR GOTO 0
220 CLS : PRINT : PRINT TAB( 10)"BUDGET MANAGEMENT - REPORT " : PRINT
230 IF DT<10100 THEN PRINT "ENTER TODAY'S DATE (MM/DD/YY)";:X%=1:GOSUB 900:DT=VAL(DT$):X%=0:GOTO 220
240 PRINT TAB( 15)"0) STOP◙" TAB( 15)"1) READ-IN MORE DATA◙" TAB( 15)"2) REPORT
260 PRINT : J = 3 : INPUT "ENTER YOUR CHOICE";J
270 IF J = 0 THEN E = 99 : GOSUB 5000
275 IF (J-1)*(J-2)<>0 GOTO 220 ELSE IF F=0 AND J=2 THEN GOSUB 9500
280 ON J GOSUB 9500,2000 : GOTO 220
290 C$ = LEFT$ (C$ + " " + STRING$ (30,"."),30) : RETURN
300 YN = - 1 : INPUT B$ : IF B$ = "" THEN B$ = C$
305 C$ = LEFT$ (B$,1) : IF C$ = "Y" THEN YN = 1 : RETURN :ELSE IF C$ = "N" THEN YN = 0 : RETURN
310 PRINT "WAKE UP! PLEASE ANSWER YES(Y), OR NO(N)"; : IF F1 = 1 THEN RETURN : :ELSE 300
320 FOR DY = 1 TO 1000 : NEXT : RETURN
400 CLS : PRINT TAB( 18); : ON J GOTO 401,402
401 PRINT "DATA INPUT" : RETURN
402 PRINT "BUDGET REPORTER" : RETURN
450 LO = 1 : H% = K : II = 0
460 IF LO = H% AND  NN < > ABS (A1%(LO)) RETURN
470 MD = INT ((LO + H%) / 2) : IF NN = ABS (A1%(MD))II = MD : RETURN
480 IF NN > ABS (A1%(MD)) THEN LO = MD + 1 : GOTO 460 : :ELSE H% = MD - 1 : GOTO 460
500 D1 = INT (D / 10000!)
510 D2 = INT ((D - D1 * 10000!) / 100) : D3 = D - 10000! * D1 - 100 * D2 : RETURN
550 D1 = 0 : GOTO 510
900 INPUT B$
902 IF LEN (B$) < > 5 + 3 * X% THEN 930 :ELSE D1$ = LEFT$ (B$,2) : D2$ = MID$ (B$,4,2) : D3$ = RIGHT$ (B$,2) : IF VAL (D1$) < 1 OR VAL (D1$) > 12 THEN 930
905 IF VAL (D2$) < 1 OR VAL (D2$) > 31 THEN 930 :ELSE IF X% = 1 THEN IF VAL (D3$) < 0 THEN 930
910 DT$ = D1$ + D2$ : IF X% = 1 THEN DT$ = DT$ + D3$ : RETURN :ELSE RETURN
930 DT$ = " " : RETURN
950 PRINT USING "##/##"; INT (D / 100);D - 100 * INT (D / 100); : RETURN
960 PRINT USING "##/##/##"; INT (DT / 10000!); INT ((DT - 10000! * INT (DT / 10000!)) / 100);DT - 100 * INT (DT / 100); : RETURN
1000 A$ = INKEY$ : IF A$ < > "@" RETURN
1010 AB = 1 : PRINT : PRINT TAB( 5)"* ABORTED *" : PRINT : IF IO = 2 LPRINT "*** ABORTED ***"
1020 IF IO = 1 THEN GOSUB 1500 : RETURN :ELSE RETURN
1500 IF DK = 1 CMD "T"
1510 PRINT @980,"PRESS ENTER TO CONTINUE"; : INPUT A$
1520 IF DK = 1 THEN CMD "R" : RETURN :ELSE RETURN
2000 GOSUB 400 : PRINT : PRINT TAB( 5)"REPORT WILL GO TO◙◙" TAB( 15)"0) RETURN TO MENU◙" TAB( 15)"1) VIDEO DISPLAY◙" TAB( 15)"2) LINE PRINTER
2020 PRINT : PRINT "ENTER YOUR CHOICE"; : INPUT B$ : IO = VAL (B$) : IF IO = 0 OR B$ = "END" THEN RETURN
2025 IF (IO - 1) * (IO - 2) < > 0 THEN 2000
2030 IF IO = 2 PRINT : INPUT "READY LINE PRINTER, THEN PRESS ENTER";A$
2040 GOSUB 400 : PRINT : PRINT TAB( 5)"TYPE OF REPORT IS◙" TAB( 15)"0) RETURN TO MENU◙" TAB( 15)"1) ACCOUNTS◙" TAB( 15)"2) OUTSTANDING CHECKS◙" TAB( 15)"3) CANCELLED CHECKS
2050 PP = 0 : PRINT TAB( 15)"4) CASH EXPENSES◙" TAB( 15)"5) DEPOSITS◙" TAB( 15)"6) SAVINGS
2080 PRINT : PRINT "ENTER YOUR CHOICE"; : INPUT B$ : TY = VAL (B$) : IF TY = 0 OR B$ = "END" THEN RETURN
2085 IF TY < 1 OR TY > 6 THEN 2040
2090 GOSUB 400 : PRINT : PRINT TAB( 5)"SEARCHING FOR
2100 PRINT TAB( 15)"0) RETURN TO MENU◙" TAB( 15)"1) CANCELLED DATE◙" TAB( 15)"2) CHECK NUMBER◙" TAB( 15)"3) EXPENSES ACCOUNT◙" TAB( 15)"4) DATE ENTERED
2110 PRINT TAB( 15)"5) DESCRIPTION◙" TAB( 15)"6) AMOUNT◙" TAB( 15)"7) ALL" : LK = 0 : PRINT
2130 PRINT "ENTER YOUR CHOICE"; : INPUT B$ : LK = VAL (B$) : IF B$ = "END" OR LK = 0 THEN RETURN
2135 IF LK < 1 OR LK > 7 THEN 2090 :ELSE IF TY = 3 THEN 2190
2140 IF TY = 1 AND (LK = 3 OR LK > 4) THEN 2190
2150 IF TY = 2 AND LK > 1 THEN 2190
2160 IF TY = 4 AND LK > 2 THEN 2190
2170 IF (TY = 5 OR TY = 6) AND LK > 3 THEN 2190
2180 PRINT TAB( 5)"* BAD REQUEST *" : GOSUB 320 : GOTO 2040
2190 PRINT : IF LK = 5 PRINT "ENTER DESCRIPTION"; TAB( 32); : INPUT R$ : GOTO 2300
2200 ON LK GOTO 2201,2202,2203,2201,2300,2206,2300
2201 PRINT "<LOW DATE>, <HIGH DATE>"; : GOTO 2210
2202 PRINT "<LOW CHECK#>, <HIGH CHECK#>"; : GOTO 2210
2203 PRINT "<LOW ACCOUNT#>, <HIGH ACCOUNT#>"; : GOTO 2210
2206 PRINT "<LOW AMOUNT>, <HIGH AMOUNT>";
2210 PRINT TAB( 32); : IF LK < > 1 AND LK < > 4 THEN 2250
2220 INPUT B$,C$ : GOSUB 902 : IF DT$ = " " THEN 2270 :ELSE R1 = VAL (DT$)
2230 B$ = C$ : GOSUB 902 : IF DT$ = " " THEN 2270 :ELSE R2 = VAL (DT$) : GOTO 2260
2250 INPUT R1,R2
2260 IF R1 < = R2 THEN 2300
2270 PRINT TAB( 5)"* BAD RANGE *" : GOTO 2190
2300 IF IO = 1 THEN 2330
2305 IF PEEK (14312) < 128 THEN 2330
2320 PRINT : PRINT "LINE PRINTER NOT READY!!" : INPUT "TYPE 1 WHEN READY, OR 0 TO RETURN TO MENU";I : IF I = 0 THEN RETURN :ELSE 2305
2330 GOSUB 3000
2340 GOSUB 3500 : GOSUB 1000 : IF AB = 1 THEN 2040
2360 GOSUB 4500 : GOSUB 1000 : IF AB = 1 THEN 2040
2365 IF EOD = 1 AND PP = 0 THEN A$ = "     * NO ENTRIES *" : IF IO = 1 THEN PRINT A$ : :ELSE LPRINT A$
2370 IF EOD = 1 THEN 2410
2380 GOSUB 6000 : PP = 1 : GOSUB 1000 : IF AB = 1 THEN 2040
2390 IF IO = 1 THEN CNT = CNT + 1 : IF CNT > 14 THEN GOSUB 1500 : GOTO 2340 : :ELSE 2360
2400 IF PEEK (16425) > 62 THEN LPRINT CHR$ (12) : GOTO 2340 : :ELSE 2360
2410 IF IO = 1 GOSUB 1500 : GOTO 2040
2420 LPRINT CHR$ (12) : GOTO 2040
3000 POKE 16424,67 : POKE 16425,1 : PG = 0 : CNT = 0 : EOD = 0 : KK = 0 : AB = 0
3010 ON TY GOTO 3011,3012,3013,3014,3015,3016
3011 H$ = "ACCOUNTS" : GOTO 3020
3012 H$ = "OUTSTANDING CHECKS" : GOTO 3020
3013 H$ = "CANCELLED CHECKS" : GOTO 3020
3014 H$ = "CASH EXPENSES" : GOTO 3020
3015 H$ = "DEPOSITS" : GOTO 3020
3016 H$ = "SAVINGS"
3020 IF IO = 2 THEN 3100
3030 IF TY < > 1 THEN 3060
3040 T$ = "   NO.       NAME                 CURRENT    BUDGET   REMAINING
3050 F$ = " ##### %                      %  #####.##  #####.##   #####.##-" : RETURN
3060 T$ = "DATE         DESCRIPTION           AMOUNT" : F$ = "##/##     %                  %  ######.##-
3070 IF TY > 1 AND TY < 4T$ = "  NO.     " + T$ : F$ = "######    " + F$ : :ELSE T$ = STRING$ (10," ") + T$ : F$ = STRING$ (10," ") + F$
3080 IF TY > 1 AND TY < 5T$ = T$ + "   EXP. ACCT" : F$ = F$ + "  ######"
3090 IF TY = 3 THEN T$ = "  NO.   WRTN   CAN      DESCRIPTION           AMOUNT  EXP. ACCT" : F$ = "######  ##/## ##/##  %                  %  ######.##   ######" : RETURN :ELSE RETURN
3100 IF TY < > 1 THEN 3130
3110 T$ = "  ACCOUNT        NAME                      CURRENT        BUDGET               PERCENT    REMAINING
3120 F$ = "   ##### %                            %  ###,###.##    ###,###.##             #####.##   ###,###.##-" : RETURN
3130 T$ = "DATE            DESCRIPTION                      AMOUNT
3135 F$ = "##/##       %                          %      ###,###.##-
3140 IF TY > 1 AND TY < 4 THEN T$ = "  NUMBER       " + T$ : F$ = "  ######       " + F$ : :ELSE T$ = STRING$ (15," ") + T$ : F$ = STRING$ (15," ") + F$
3150 IF TY > 1 AND TY < 5T$ = T$ + "       EXPENSE" : F$ = F$ + "      #####
3160 IF TY = 3 THEN T$ = T$ + "      CANCELLED" : F$ = F$ + "         ##/##" : RETURN :ELSE RETURN
3500 PG = PG + 1 : IF IO = 2 THEN 3530
3510 CLS : D = DT : GOSUB 500 : PRINT USING "BUDGET MANAGEMENT :  %                  %  PAGE ##  DATE ##/##/##";H$;PG;D1;D2;D3
3520 GOSUB 1000 : IF AB = 1 THEN RETURN :ELSE PRINT T$ : CNT = 2 : RETURN
3530 GOSUB 3900 : LPRINT TAB( 40);"BUDGET MANAGEMENT REPORT" + STRING$ (25," "); : LPRINT USING "PAGE ##";PG
3540 LPRINT TAB( 40)"** "H$" REPORT **" : LPRINT TAB( 45)"DATE :  "; : D = DT : GOSUB 500 : LPRINT USING "##/##/##";D1;D2;D3
3550 GOSUB 1000 : IF AB = 1 THEN RETURN :ELSE GOSUB 3910 : LPRINT T$ : FOR I = 1 TO LEN (T$) : IF MID$ (T$,I,1) = " " THEN LPRINT " "; : :ELSE LPRINT "=";
3560 NEXT : LPRINT " " : RETURN
3900 LPRINT STRING$ (110,"-")
3910 FOR DY = 1 TO 2 : LPRINT " " : NEXT : RETURN
4500 EOD = 0 : KK = KK + 1 : ON TY GOTO 4540,4600,4680,4690,4740,4780
4510 EOD = 1 : RETURN
4540 C$ = A2$(KK) : IF KK > K1 THEN 4510 :ELSE IF LK = 7 THEN 4580 :ELSE ON LK GOTO 4510,4510,4550,4510,4560,4570
4550 K = ABS (A1%(KK)) : IF K < INT (R1) OR K > INT (R2) THEN 4500 :ELSE 4580
4560 IF R$ < > C$ THEN 4500 :ELSE 4580
4570 R = CSNG (A3#(KK)) : IF R < R1 OR R > R2 THEN 4500 :ELSE 4580
4580 IF A4#(KK) = 0# THEN P = 0 : R# = 0# : :ELSE R# = A4#(KK) - A3#(KK) : P = A3#(KK) / A4#(KK) * 100
4590 L = INT (A6%(KK) - 10 * INT (A6%(KK) / 10)) : C$ = STRING$ (2 * L," ") + A2$(KK)
4595 IF L = 0 AND IO = 2 THEN LPRINT " " : RETURN :ELSE RETURN
4600 IF KK > K2 THEN 4510 :ELSE IF C6%(KK) < > 0 THEN 4500
4610 C$ = C3$(KK) : IF LK = 7 THEN RETURN :ELSE ON LK GOTO 4670,4620,4660,4630,4910,4650
4620 R = C1%(KK) : GOTO 4900
4630 R = C2%(KK) : GOTO 4900
4650 R = C4(KK) : GOTO 4900
4660 R = ABS (A1%(C5%(KK))) : GOTO 4900
4670 R = C6%(KK) : GOTO 4900
4680 IF KK > K2 THEN 4510 :ELSE IF C6%(KK) = 0 THEN 4500 :ELSE 4610
4690 C$ = E2$(KK) : IF KK > K3 THEN 4510 :ELSE IF LK = 7 THEN RETURN :ELSE ON LK GOTO 4510,4510,4730,4700,4910,4720
4700 R = E1%(KK) : GOTO 4900
4720 R = E3(KK) : GOTO 4900
4730 R = ABS (A1%(E4%(KK))) : GOTO 4900
4740 C$ = D2$(KK) : IF KK > K4 THEN 4510 :ELSE IF LK = 7 THEN RETURN :ELSE ON LK GOTO 4510,4510,4510,4750,4910,4770
4750 R = D1%(KK) : GOTO 4900
4770 R = D3(KK) : GOTO 4900
4780 C$ = S2$(KK) : IF KK > K5 THEN 4510 :ELSE IF LK = 7 THEN RETURN :ELSE ON LK GOTO 4500,4500,4500,4790,4910,4810
4790 R = S1%(KK) : GOTO 4900
4810 R = S3(KK) : GOTO 4900
4900 IF R < R1 OR R > R2 THEN 4500 :ELSE RETURN
4910 IF R$ < > C$ THEN 4500 :ELSE RETURN
5000 IF E = 99 PRINT "* END OF RUN *" : END
5010 PRINT TAB( 5); : ON E GOTO 5011,5012,5013,5014,5015,5016,5017
5011 PRINT "* FILE NOT FOUND *" : RETURN
5012 PRINT "* INPUT DATA EXCEEDS MEMORY ALLOCATION *" : RETURN
6000 GOSUB 290 : ON TY GOTO 6006,6001,6001,6003,6004,6005
6001 D = C2%(KK)
6002 IF TY = 3 THEN GOSUB 550 : DY = D2 : YN = D3 : D = C6%(KK) : GOTO 6006 :ELSE 6006
6003 D = E1%(KK) : GOTO 6006
6004 D = D1%(KK) : GOTO 6006
6005 D = S1%(KK)
6006 GOSUB 550 : IF IO = 2 THEN 6100 :ELSE ON TY GOTO 6010,6020,6030,6040,6050,6060
6010 PRINT USING F$; ABS (A1%(KK));C$;A3#(KK);A4#(KK);R# : RETURN
6020 PRINT USING F$;C1%(KK);D2;D3;C$;C4(KK); ABS (A1%(C5%(KK))) : RETURN
6030 PRINT USING F$;C1%(KK);DY;YN;D2;D3;C$;C4(KK); ABS (A1%(C5%(KK))) : RETURN
6040 PRINT USING F$;D2;D3;C$;E3(KK); ABS (A1%(E4%(KK))) : RETURN
6050 PRINT USING F$;D2;D3;C$;D3(KK) : RETURN
6060 PRINT USING F$;D2;D3;C$;S3(KK) : RETURN
6100 ON TY GOTO 6110,6120,6130,6140,6150,6160
6110 LPRINT USING F$; ABS (A1%(KK));C$;A3#(KK);A4#(KK);P;R# : RETURN
6120 LPRINT USING F$;C1%(KK);D2;D3;C$;C4(KK); ABS (A1%(C5%(KK))) : RETURN
6130 LPRINT USING F$;C1%(KK);DY;YN;C$;C4(KK); ABS (A1%(C5%(KK)));D2;D3 : RETURN
6140 LPRINT USING F$;D2;D3;C$;E3(KK); ABS (A1%(E4%(KK))) : RETURN
6150 LPRINT USING F$;D2;D3;C$;D3(KK) : RETURN
6160 LPRINT USING F$;D2;D3;C$;S3(KK) : RETURN
9400 POKE I1,I2 : RETURN
9500 JJ = J : J = 1 : GOSUB 400 : J = JJ : PRINT : I1 = 15423 : I2 = 32
9505 IO = 0 : IF DK = 1 THEN DV = 1 : ON ERROR GOTO 9900
9510 IF DK = 1 THEN LINE INPUT "FILESPEC OF INPUT FILE :  ";B$ : OPEN "I",DV,B$ : ON ERROR GOTO 0
9520 IF DK = 0 THEN DV = - 1 : INPUT "LOAD DATA TAPE(PLAY), THEN PRESS ENTER";A$
9530 INPUT #DV,D : PRINT "DATE OF DATA :      "; : GOSUB 950 : PRINT : PRINT "READING ACCOUNTS
9535 IF F = 1 THEN 9660
9540 INPUT #DV,K1 : IF K1 + 1 > M1 THEN 9700
9550 IF K1 < > 0 FOR I = 1 TO K1 + 1 : INPUT #DV,A1%(I),A2$(I),A3#(I),A4#(I),A6%(I) : GOSUB 9400 : NEXT
9560 PRINT "READING CHECKS" : INPUT #DV,K2 : IF K2 > M2 THEN 9700
9570 IF K2 < > 0 FOR I = 1 TO K2 : INPUT #DV,C1%(I),C2%(I),C3$(I),C4(I),C5%(I),C6%(I) : GOSUB 9400 : NEXT
9580 PRINT "READING CASH EXPENSES" : INPUT #DV,K3 : IF K3 > M3 THEN 9700
9590 IF K3 < > 0 FOR I = 1 TO K3 : INPUT #DV,E1%(I),E2$(I),E3(I),E4%(I) : GOSUB 9400 : NEXT
9600 PRINT "READING DEPOSITS" : INPUT #DV,K4 : IF K4 > M4 THEN 9700
9610 IF K4 < > 0 FOR I = 1 TO K4 : INPUT #DV,D1%(I),D2$(I),D3(I) : GOSUB 9400 : NEXT
9620 PRINT "READING SAVINGS DATA" : INPUT #DV,K5 : IF K5 > M5 THEN 9700
9630 IF K5 < > 0 THEN FOR I = 1 TO K5 : INPUT #DV,S1%(I),S2$(I),S3(I) : GOSUB 9400 : NEXT
9640 F = 1 : IF DK = 1 THEN CLOSE : RETURN :ELSE RETURN
9660 INPUT #DV,K : IF K = 0 THEN 9680
9665 FOR I = 1 TO K : INPUT #DV,NN,A2$,A3#,A4#,A6% : GOSUB 9400 : IF I < 4 NEXT
9670 NN = ABS (NN) : GOSUB 450 : IF II = 0 NEXT : GOTO 9680
9675 A3#(II) = A3#(II) + A3# : A4#(II) = A4#(II) + A4# : NEXT
9680 GOSUB 320 : F = 1 : IF DK = 1 THEN CLOSE : RETURN :ELSE RETURN
9700 E = 2 : GOSUB 5000 : GOSUB 320 : RETURN
9900 I = ERR / 2 + 1 : IF I = 54 THEN E = 1 : GOSUB 5000 : RESUME 9510
9910 PRINT : PRINT "UNEXPECTED ERROR #"I"IN LINE" ERL "-- RUN ABORTED" : END

Directory of PC-SIG Library Disk #0025

 Volume in drive A has no label
 Directory of A:\

CRC      TXT       889  11-09-84   8:38a
CRCK4    COM      1536  10-21-82   7:54p
FINANCE  BAS     22016   1-31-83   9:54p
FINANCE1 BAS      6400   1-25-82
GROWTH   BAS      1792   1-01-80
GROWTH1  BAS      1536   7-18-82   4:13p
KALCOL   BAS       896   1-01-80
PRLIST   BAS      3584   1-01-80  12:15a
REPORTS  BAS     10496   1-01-80
        9 file(s)      49145 bytes
                      110080 bytes free