1  REM  ****  HP BASIC PROGRAM LIBRARY  ********************************2  REM
2  REM
3  REM        INST1:  CTC PROJECTION PROGRAMS
4  REM
5  REM        36212  REV B  PART 3 OF 10  6/73
6  REM
7  REM  **************** CONTRIBUTED PROGRAM *****************************
8  REM
9  H$=""
10  DIM F[64],G[32],L[15]
11  DIM A$[20]
12  DIM C$[10]
20  MAT  READ L
21  DATA 7,11,14,15,16,18,19,24,26,27,28,29,30,31,32
30  C$="0123456789"
100  FILES IN2,R1
200  PRINT H$[1,2]"ENTER OR MODIFY VARIABLES;"
202  PRINT "SET UP OR CLEAR PRINT MATRIX (E/M/S/C)";
205  INPUT A$
210  IF A$="END" THEN 9999
215  IF A$[1,1]="E" THEN 1000
220  IF A$[1,1]="M" THEN 2000
222  IF A$[1,1]="S" THEN 3000
223  IF A$[1,1]="C" THEN 500
225  GOSUB 4240
230  GOTO 200
500  PRINT '7'7'7"ARE YOU SURE YOU WANT TO CLEAR THE INCOME STATEMENT FILE";
501  INPUT A$
502  IF A$[1,1]#"Y" THEN 200
505  MAT G=ZER
510  FOR I=1 TO 50
520  MAT  PRINT #2,I;G
530  NEXT I
540  PRINT "PRINT MATRIX NOW ZERO"
550  END 
1000  GOSUB 2300
1001  F4=13
1002  GOSUB 2400
1003  IF P5#1 THEN 1110
1004  PRINT "YTD FIGURES"
1005  MAT G=ZER
1010  Z$="K##"
1015  X$="0"
1020  FOR I1=1 TO 32
1025  Z[1]=I1
1030  GOSUB 9000
1040  INPUT G[I1]
1045  NEXT I1
1050  PRINT "K33";
1055  INPUT M6
1060  PRINT "K34";
1065  INPUT M7
1070  PRINT "K35";
1075  INPUT M8
1090  PRINT "ENTER AS ABOVE";
1095  INPUT A$
1100  IF A$[1,1]#"Y" THEN 1004
1105  MAT  PRINT #2,1;G
1107  PRINT #2,50;M6,M7,M8
1110  PRINT "ENTER MONTHLY VARIABLES"
1115  FOR M=E0 TO E1
1120  MAT G=ZER
1125  PRINT "YEAR";P5;"MONTH";M
1130  FOR L=1 TO 15
1135  Z$="K##"
1140  X$="0"
1145  Z[1]=L[L]
1150  GOSUB 9000
1155  INPUT G[L[L]]
1160  NEXT L
1165  PRINT "ENTER AS ABOVE";
1167  INPUT A$
1170  IF A$[1,1]#"Y" THEN 1120
1172  M1=M+(P5-1)*12
1175  MAT  PRINT #2,M1+1;G
1180  NEXT M
1185  GOTO 200
2000  REM
2002  PRINT H$[1,2]"MODIFY YTD OR MONTHLY VARIABLES (Y/M)";
2005  INPUT A$
2010  IF A$="END" THEN 200
2015  IF A$[1,1]="Y" THEN 2035
2020  IF A$[1,1]="M" THEN 2165
2025  GOSUB 4240
2030  GOTO 2000
2035  MAT  READ #2,1;G
2037  READ #2,50;M6,M7,M8
2040  Z$="K##:"
2045  X$="0"
2050  FOR I=1 TO 8
2055  FOR J=1 TO 4
2060  PRINT TAB(15*(J-1));
2065  Z[1]=J+4*(I-1)
2070  GOSUB 9000
2072  PRINT G[J+4*(I-1)];
2075  NEXT J
2080  PRINT 
2085  NEXT I
2090  PRINT "K33:";M6;TAB(15)"K34:";M7;TAB(30)"K35:";M8
2095  PRINT 
2100  PRINT "MODIFY K#";
2105  INPUT A$
2110  IF A$="END" THEN 2000
2115  GOSUB 4200
2120  IF B1 THEN 2100
2125  IF Z>0 AND Z<36 THEN 2140
2130  GOSUB 4240
2135  GOTO 2100
2140  PRINT "NEW VALUE";
2141  IF Z>32 THEN 2146
2142  INPUT G[Z]
2143  MAT  PRINT #2,1;G
2145  GOTO 2155
2146  GOTO Z-32 OF 2147,2149,2151
2147  INPUT M6
2148  GOTO 2152
2149  INPUT M7
2150  GOTO 2152
2151  INPUT M8
2152  PRINT #2,50;M6,M7,M8
2155  PRINT H$[6,8];
2160  GOTO 2100
2165  GOSUB 2300
2167  PRINT "WHICH MONTH";
2170  INPUT M
2175  IF M>0 AND M<13 THEN 2190
2180  GOSUB 4240
2185  GOTO 2165
2190  M=M+(P5-1)*12
2192  MAT  READ #2,(M+1);G
2195  Z$="K##:"
2200  X$="0"
2205  FOR L=1 TO 15
2210  Z[1]=L[L]
2215  GOSUB 9000
2225  PRINT G[L[L]]
2227  NEXT L
2230  PRINT 
2235  PRINT "MODIFY K#";
2240  INPUT A$
2245  IF A$="END" THEN 2000
2250  GOSUB 4200
2255  IF B1 THEN 2235
2260  FOR L=1 TO 15
2265  IF Z=L[L] THEN 2285
2270  NEXT L
2275  GOSUB 4240
2280  GOTO 2235
2285  PRINT "NEW VALUE";
2290  INPUT G[Z]
2295  MAT  PRINT #2,(M+1);G
2297  PRINT H$[6,8];
2298  GOTO 2235
2300  PRINT "PROJECTED YEAR (1,2,3, OR 4)";
2305  INPUT P5
2310  IF P5>0 AND P5<5 THEN 2330
2315  GOSUB 4240
2320  GOTO 2300
2330  RETURN 
2400  PRINT "MONTHLY INTERVAL (M1,M2)";
2405  INPUT E0,E1
2410  IF E0>0 AND E0<F4 AND E1>0 AND E1<F4 AND E0 <= E1 THEN 2440
2415  GOSUB 4240
2420  GOTO 2400
2440  RETURN 
2500  PRINT "LEASES SOLD";
2505  INPUT A$
2510  H7=0
2512  L3=5
2515  IF A$[1,1]="Y" THEN 2530
2517  L3=4
2520  H7=1
2530  RETURN 
3000  F4=49
3001  GOSUB 2400
3002  GOSUB 2500
3005  PRINT "W A I T !"
3006  GOSUB 3500
3007  READ #2,50;M6,M7,M8
3008  M6=M6*1000
3009  M7=M7*1000
3010  M8=M8*1000
3011  FOR L2=1 TO L3
3012  FOR M=E0 TO E1
3013  C=1
3014  IF L2#5 THEN 3017
3015  C=7
3017  L1=L2
3020  GOSUB 4000
3025  MAT  READ #2,(M+1);G
3030  G[L2]=F[M]
3032  IF L2#1 THEN 3040
3033  L1=6
3034  IF H7 THEN 3036
3035  C=7
3036  GOSUB 4000
3037  G[L2]=G[L2]+F[M]
3040  MAT  PRINT #2,(M+1);G
3045  NEXT M
3050  NEXT L2
3052  L1=5
3053  IF  NOT H7 THEN 3095
3054  C=1
3055  GOSUB 4000
3060  FOR M=E0 TO E1
3065  MAT  READ #2,(M+1);G
3070  G[5]=M6
3075  FOR M1=E0 TO M
3080  G[5]=G[5]+F[M1]
3085  NEXT M1
3087  REM
3090  MAT  PRINT #2,(M+1);G
3092  NEXT M
3095  C=2
3100  FOR M=E0 TO E1
3105  MAT  READ #2,(M+1);G
3110  G[6]=M7
3115  FOR M1=E0 TO M
3120  FOR L1=4 TO 6
3125  GOSUB 4000
3130  G[6]=G[6]+F[M1]
3135  NEXT L1
3140  NEXT M1
3150  REM
3155  MAT  PRINT #2,(M+1);G
3160  NEXT M
3165  REM
3170  FOR M=E0 TO E1
3171  C=3
3172  MAT  READ #2,(M+1);G
3175  FOR L1=1 TO 6
3176  IF  NOT H7 THEN 3180
3177  IF L1=5 THEN 3190
3179  GOTO 3182
3180  IF L1<5 THEN 3182
3181  C=9
3182  GOSUB 4000
3185  G[9]=G[9]+F[M]
3190  NEXT L1
3195  MAT  PRINT #2,(M+1);G
3200  NEXT M
3205  FOR M=E0 TO E1
3210  MAT  READ #2,(M+1);G
3215  G[10]=M8
3220  FOR M1=E0 TO M
3225  K2=0
3230  C=5
3235  FOR L1=1 TO 6
3240  GOSUB 4000
3245  K2=K2+F[M1]
3250  IF L1#5 THEN 3257
3255  K3=F[M1]
3256  GOTO 3260
3257  IF L1#6 THEN 3260
3258  K4=F[M1]
3260  NEXT L1
3265  C=6
3270  L1=5
3275  GOSUB 4000
3276  IF K2#0 THEN 3280
3277  K2=1
3280  G[10]=G[10]+(F[M1]+K3*(1+(G[14]+G[26])*1000/K2))/48
3285  NEXT M1
3286  IF H7 THEN 3290
3287  G[21]=0
3288  GOTO 3295
3290  G[21]=((G[14]+G[26])*1000/K2)*(K3+.25*K4)
3295  MAT  PRINT #2,(M+1);G
3300  NEXT M
3350  FOR M=E0 TO E1
3355  MAT  READ #2,(M+1);G
3360  C=4
3362  FOR L1=1 TO 6
3363  IF H7 OR L1<4 THEN 3367
3365  C=8
3367  GOSUB 4000
3370  G[17]=G[17]+F[M]
3375  NEXT L1
3385  REM
3395  MAT  PRINT #2,(M+1);G
3400  NEXT M
3405  FOR M=E0 TO E1
3407  MAT  READ #2,(M+1);G
3410  FOR I=1 TO 32
3411  FOR K=1 TO 15
3412  IF I=L[K] THEN 3435
3413  NEXT K
3415  X=INT(G[I]/1000)
3420  IF G[I]-X*1000<500 THEN 3430
3425  X=X+1
3430  G[I]=X
3435  NEXT I
3436  X=7
3437  IF H7 THEN 3440
3438  X=6
3440  FOR I=1 TO X
3445  G[8]=G[8]+G[I]
3447  NEXT I
3450  X=11
3451  IF H7 THEN 3453
3452  X=9
3453  FOR I=9 TO X
3454  G[12]=G[12]+G[I]
3455  NEXT I
3456  FOR I=14 TO 19
3457  G[20]=G[20]+G[I]
3458  IF I=17 THEN 3465
3459  IF I>17 THEN 3462
3460  G[20]=G[20]+G[I+12]
3461  GOTO 3465
3462  G[20]=G[20]+G[I+11]
3463  IF I#19 THEN 3465
3464  G[20]=G[20]+G[31]
3465  NEXT I
3470  G[13]=G[8]-G[12]
3475  G[22]=G[20]-G[21]
3480  G[23]=G[13]-G[22]
3485  G[25]=G[23]+G[24]+G[32]
3490  MAT  PRINT #2,(M+1);G
3495  NEXT M
3497  END 
3500  FOR M=E0 TO E1
3505  MAT  READ #2,(M+1);G
3510  FOR I=1 TO 32
3515  FOR J=1 TO 15
3520  IF I=L[J] THEN 3535
3525  NEXT J
3530  G[I]=0
3535  NEXT I
3537  MAT  PRINT #2,(M+1);G
3540  NEXT M
3545  RETURN 
4000  R=32*(L1-1)+1
4010  R1=R+2*(C-1)
4020  READ #1,R1
4025  MAT  READ #1;F
4030  RETURN 
4050  READ #1,R1
4060  MAT  PRINT #1;F
4070  RETURN 
4200  B1=Z=0
4205  S6=1
4210  IF A$[1,1]#"-" THEN 4220
4215  S6=-1
4217  A$=A$[2]
4220  FOR I1=1 TO LEN(A$)
4225  FOR I2=1 TO 10
4230  IF A$[I1,I1]=C$[I2,I2] THEN 4255
4235  NEXT I2
4240  PRINT '7'7"INVALID DATA";H$[3,5];
4245  B1=1
4250  RETURN 
4255  Z=Z*10+I2-1
4260  NEXT I1
4265  Z=Z*S6
4270  RETURN 
9000  REM
9003  LET Z2=Z3=Z4=Z5=Z7=Z8=Z9=1
9004  DIM Y$[10],Z$[72],Z[20]
9005  LET Y$="0123456789"
9006  LET Z0=Z9-1
9007  LET Z0=Z0+1
9008  IF Z0=LEN(Z$)+1 THEN 9059
9009  IF Z$[Z0,Z0]="#" THEN 9016
9010  IF Z$[Z0,Z0+1]=".#" THEN 9016
9011  IF Z$[Z0,Z0+1]="+#" THEN 9014
9012  PRINT Z$[Z0,Z0];
9013  GOTO 9007
9014  LET Z4=0
9015  GOTO 9007
9016  LET Z=100
9017  LET Z6=Z[Z2]
9018  LET Z9=Z0-1
9019  LET Z9=Z9+1
9020  IF Z$[Z9,Z9]="." THEN 9023
9021  IF Z$[Z9,Z9]="#" THEN 9019
9022  GOTO 9027
9023  IF Z5#1 THEN 9027
9024  LET Z5=0
9025  LET Z=Z9
9026  GOTO 9019
9027  IF Z#100 THEN 9029
9028  LET Z=Z9
9029  IF Z4=1 THEN 9034
9030  IF Z6 >= 0 THEN 9033
9031  PRINT "-";
9032  GOTO 9034
9033  PRINT " ";
9034  LET Z6=ABS(Z6)+10^(Z-Z9-1)
9035  FOR Z1=Z-Z0 TO Z+1-Z9 STEP -1
9036  IF Z$[Z-Z1,Z-Z1]#"." THEN 9041
9037  PRINT ".";
9038  LET Z3=0
9039  LET Z7=2
9040  GOTO 9055
9041  LET Z8=INT(Z6/(10^(Z1+Z7-2)))
9042  IF Z6<10^(Z-Z0) THEN 9045
9043  PRINT "#";
9044  GOTO 9055
9045  LET Z6=Z6-Z8*10^(Z1+Z7-2)
9046  IF Y$[Z8+1,Z8+1]="0" THEN 9048
9047  LET Z3=0
9048  IF Z3=0 THEN 9054
9049  IF Z1#1 THEN 9052
9050  PRINT "0";
9051  GOTO 9055
9052  PRINT X$;
9053  GOTO 9055
9054  PRINT Y$[Z8+1,Z8+1];
9055  NEXT Z1
9056  LET Z3=Z4=Z5=Z7=1
9057  LET Z2=Z2+1
9058  GOTO 9006
9059  RETURN 
9900  FOR I=1 TO K
9910  PRINT "     "
9920  NEXT I
9930  RETURN 
9999  END 
