1  REM  ****  HP BASIC PROGRAM LIBRARY  ********************************2  REM
2  REM
3  REM        CSHFLO:  CTC PROJECTION PROGRAMS
4  REM
5  REM        36212  REV B  PART 6 OF 10  6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8  REM
9  H$=""
10  DIM F[64],G[32],H[32],L[11]
11  DIM A$[20]
12  DIM C$[10]
20  MAT  READ L
21  DATA 6,7,8,9,15,16,17,18,19,20,21
30  C$="0123456789"
100  FILES IN2,R1,R2
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"ARE YOU SURE YOU WANT TO CLEAR THE CASH FLOW FILE";
501  INPUT A$
502  IF A$[1,1]#"Y" THEN 200
505  MAT H=ZER
510  FOR I=1 TO 50
520  MAT  PRINT #3,I;H
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 "INITIAL VALUES"
1005  MAT H=ZER
1010  PRINT "L4";
1015  INPUT H[4]
1020  PRINT "L24";
1025  INPUT H[24]
1090  PRINT "ENTER AS ABOVE";
1095  INPUT A$
1100  IF A$[1,1]#"Y" THEN 1004
1105  MAT  PRINT #3,1;H
1110  PRINT "ENTER MONTHLY VARIABLES"
1115  FOR M=E0 TO E1
1120  MAT H=ZER
1125  PRINT "YEAR";P5;"MONTH";M
1130  FOR L=1 TO 11
1135  Z$="L##"
1140  X$="0"
1145  Z[1]=L[L]
1150  GOSUB 9000
1155  INPUT H[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 #3,M1+1;H
1180  NEXT M
1185  GOTO 200
2000  REM
2002  PRINT H$[1,2]"MOD INITIAL OR MONTHLY VARIABLES (I/M)";
2005  INPUT A$
2010  IF A$="END" THEN 200
2015  IF A$[1,1]="I" THEN 2035
2020  IF A$[1,1]="M" THEN 2165
2025  GOSUB 4240
2030  GOTO 2000
2035  MAT  READ #3,1;H
2040  PRINT "L4:";H[4]
2050  PRINT "L24:";H[24]
2100  PRINT "MODIFY L#";
2105  INPUT A$
2110  IF A$="END" THEN 2000
2115  GOSUB 4200
2120  IF B1 THEN 2100
2125  IF Z=4 OR Z=24 THEN 2140
2130  GOSUB 4240
2135  GOTO 2100
2140  PRINT "NEW VALUE";
2145  INPUT H[Z]
2150  MAT  PRINT #3,1;H
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 #3,(M+1);H
2195  Z$="L##:"
2200  X$="0"
2205  FOR L=1 TO 11
2210  Z[1]=L[L]
2215  GOSUB 9000
2225  PRINT H[L[L]]
2227  NEXT L
2230  PRINT 
2235  PRINT "MODIFY L#";
2240  INPUT A$
2245  IF A$="END" THEN 2000
2250  GOSUB 4200
2255  IF B1 THEN 2235
2260  FOR L=1 TO 11
2265  IF Z=L[L] THEN 2285
2270  NEXT L
2275  GOSUB 4240
2280  GOTO 2235
2285  PRINT "NEW VALUE";
2290  INPUT H[Z]
2295  MAT  PRINT #3,(M+1);H
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 
3000  F4=49
3001  GOSUB 2400
3005  PRINT "W A I T !"
3006  GOSUB 3500
3010  MAT  READ #3,1;H
3015  L4=H[4]
3020  L5=H[24]
3025  T2=0
3030  FOR M=E0 TO E1
3035  MAT  READ #3,(M+1);H
3037  GOSUB 3600
3042  IF M=E0 OR M=E0+1 THEN 3050
3045  H[5]=L4*1000
3050  FOR L1=1 TO 6
3055  C=1
3060  GOSUB 4000
3065  IF L1#6 THEN 3080
3070  T2=T2+F[M]
3072  IF M=E0 OR M=E0+1 THEN 3130
3073  H[7]=0
3075  IF T2<515000. THEN 3130
3076  GOSUB 3700
3077  GOTO 3130
3080  IF L1=5 THEN 3130
3085  IF L1#4 THEN 3120
3105  IF M<2 THEN 3130
3110  H[3]=H[3]+F[M-1]
3115  GOTO 3130
3120  IF M<3 THEN 3130
3125  H[2]=H[2]+F[M-2]
3130  IF L1<4 OR M=E0 OR M=E0+1 THEN 3155
3132  FOR M1=E0 TO M
3135  IF M1<3 THEN 3153
3136  IF L1#5 THEN 3140
3137  C=1
3138  GOSUB 4000
3139  H[5]=H[5]+F[M1-2]
3140  C=2
3145  GOSUB 4000
3150  H[5]=H[5]+F[M1-2]
3153  NEXT M1
3155  IF M>47 OR M=E0 OR M=E0+1 THEN 3190
3160  C=6
3165  GOSUB 4000
3170  IF L1=5 THEN 3185
3175  H[10]=H[10]+F[M+1]
3180  GOTO 3190
3185  H[11]=F[M+1]
3190  C=5
3192  GOSUB 4000
3193  H[12]=H[12]+F[M]
3195  IF M<2 THEN 3280
3200  C=4
3205  GOSUB 4000
3210  GOTO L1 OF 3215,3235,3235,3245,3245,3215
3215  H[13]=H[13]+.5*F[M-1]
3220  IF M<4 THEN 3280
3225  H[13]=H[13]+.5*F[M-3]
3230  GOTO 3280
3235  H[13]=H[13]+F[M-1]
3240  GOTO 3280
3245  H[13]=H[13]+F[M-1]/3
3250  IF M<4 THEN 3280
3255  H[13]=H[13]+2*F[M-3]/3
3280  NEXT L1
3285  MAT  PRINT #3,(M+1);H
3295  NEXT M
3297  T2=L5
3300  FOR M=E0 TO E1
3305  MAT  READ #3,(M+1);H
3310  FOR I=2 TO 21
3312  IF I=4 THEN 3360
3315  FOR L=1 TO 11
3320  IF I=L[L] THEN 3350
3325  NEXT L
3330  X=INT(H[I]/1000)
3335  IF H[I]-X*1000<500 THEN 3345
3340  X=X+1
3345  H[I]=X
3350  IF I>9 THEN 3355
3352  H[25]=H[25]+H[I]
3353  GOTO 3360
3355  H[26]=H[26]+H[I]
3360  NEXT I
3365  H[22]=H[25]-H[26]
3375  H[23]=T2
3380  T2=H[24]=H[22]+H[23]
3385  MAT  PRINT #3,(M+1);H
3390  NEXT M
3395  END 
3500  FOR M=E0 TO E1
3505  MAT  READ #3,(M+1);H
3510  FOR I=1 TO 32
3515  FOR J=1 TO 11
3520  IF I=L[J] THEN 3535
3525  NEXT J
3530  H[I]=0
3535  NEXT I
3537  MAT  PRINT #3,(M+1);H
3540  NEXT M
3545  RETURN 
3600  IF M<3 THEN 3650
3605  J=12
3610  FOR I=14 TO 19
3620  IF I#17 THEN 3630
3622  J=11
3625  GOTO 3640
3630  MAT  READ #2,(M+1);G
3632  H[13]=H[13]+G[I]
3635  MAT  READ #2,(M-1);G
3637  H[14]=H[14]+G[I+J]
3640  NEXT I
3645  H[14]=H[14]*1000
3650  H[13]=(H[13]+2)*1000
3660  RETURN 
3700  H[7]=F[M]
3705  X=INT(H[7]/1000)
3710  IF H[7]-X*1000<500 THEN 3720
3715  X=X+1
3720  H[7]=X
3730  RETURN 
4000  R=32*(L1-1)+1
4010  R1=R+2*(C-1)
4020  READ #1,R1
4025  MAT  READ #1;F
4030  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 
