1  REM  ****  HP BASIC PROGRAM LIBRARY  ****************************
2  REM
3  REM        BSHEET:  CTC PROJECTION PROGRAMS
4  REM
5  REM        36212  REV B  PART 8 OF 10  6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  *********************************
8  REM
9  H$=""
10  DIM F[64],G[32],H[32],I[32],L[8],T[5]
11  DIM A$[20]
12  DIM C$[10]
20  MAT  READ L
21  DATA 4,9,10,13,14,18,19,20
30  C$="0123456789"
100  FILES IN1,R1,R2,R3
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 BALANCE SHEET FILE";
501  INPUT A$
502  IF A$[1,1]#"Y" THEN 200
505  MAT I=ZER
510  FOR I=1 TO 50
515  IF  END #4 THEN 540
520  MAT  PRINT #4,I;I
530  NEXT I
540  PRINT "PRINT MATRIX NOW ZERO"
550  END 
1000  F4=49
1002  GOSUB 2400
1004  PRINT H$[1,2]"INITIAL VALUES"
1005  MAT I=ZER
1006  X$="0"
1008  Z$="R##"
1010  FOR L2=1 TO 21
1015  Z[1]=L2
1020  GOSUB 9000
1025  INPUT I[L2]
1030  NEXT L2
1035  PRINT "ENTER AS ABOVE";
1037  INPUT A$
1040  IF A$[1,1]#"Y" THEN 1004
1045  MAT  PRINT #4,1;I
1050  FOR M=E0 TO E1
1055  MAT  READ #4,(M+1);H
1060  FOR L=1 TO 8
1065  H[L[L]]=I[L[L]]
1090  NEXT L
1095  MAT  PRINT #4,(M+1);H
1100  NEXT M
1105  GOTO 200
2000  REM
2001  F4=49
2002  GOSUB 2400
2005  Z$="R##:"
2010  X$="0"
2015  PRINT H$[1,2];
2017  MAT  READ #4,1;I
2020  FOR I=1 TO 21
2025  Z[1]=I
2030  GOSUB 9000
2035  PRINT I[I]
2040  NEXT I
2045  PRINT 
2050  PRINT "MODIFY#";
2055  INPUT A$
2060  IF A$="END" THEN 200
2065  GOSUB 4200
2070  IF B1 THEN 2050
2075  IF Z>0 AND Z<22 THEN 2090
2080  GOSUB 4240
2085  GOTO 2050
2090  PRINT "NEW VALUE";
2095  INPUT I[Z]
2100  MAT  PRINT #4,1;I
2105  FOR L=1 TO 8
2110  IF Z=L[L] THEN 2130
2115  NEXT L
2120  PRINT H$[6,8];
2125  GOTO 2050
2130  FOR M=E0 TO E1
2135  MAT  READ #4,(M+1);H
2140  H[Z]=I[Z]
2145  MAT  PRINT #4,(M+1);H
2150  NEXT M
2160  GOTO 2120
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 !"
3010  FOR M=E0 TO E1
3015  MAT  READ #4,(M+1);I
3050  REM *SUMS OVER INPUT FILE*
3055  MAT T=ZER
3070  FOR L1=1 TO 6
3075  FOR P=1 TO 16
3080  GOSUB 4000
3085  IF M>45 THEN 3095
3090  T[1]=T[1]+F[M+3]*F[49]
3095  T[2]=T[2]+F[M]*F[49]
3100  IF L1#5 THEN 3115
3105  T[4]=T[4]+F[M]*(F[49]+F[50])
3110  GOTO 3125
3115  IF L1#6 THEN 3125
3120  T[3]=T[3]+F[M]*F[54]
3125  NEXT P
3130  NEXT L1
3135  T[3]=T[3]*.485
3140  T[5]=T[4]*.25
3145  REM *ROUND SUMS TO 1000'S*
3150  FOR I=1 TO 5
3155  X=INT(T[I]/1000)
3160  IF T[I]-X*1000<500 THEN 3175
3165  X=X+1
3175  T[I]=X
3180  NEXT I
3200  REM * ADD K'S (MAT G) AND L'S (MAT H) *
3210  MAT  READ #2,(M+1);G
3215  MAT  READ #3,(M+1);H
3220  I[1]=H[22]
3225  I[2]=G[8]-G[7]-(H[2]+H[3]+H[5]+H[6])
3230  I[3]=T[1]-T[2]
3235  I[5]=T[3]
3237  I[6]=I[11]=0
3240  IF M>46 THEN 3265
3245  MAT  READ #3,(M+2+1);H
3250  I[6]=H[16]
3255  I[11]=H[14]+H[16]
3260  MAT  READ #3,(M+1);H
3265  I[7]=T[4]+G[21]
3270  I[8]=-(G[10]+G[31])
3280  I[11]=I[11]+T[1]-(G[24]+G[32])-(H[26]-H[12]-H[13]-H[17]-H[19])
3290  I[12]=H[8]-H[19]
3300  I[15]=H[9]
3310  I[16]=-H[17]
3315  I[17]=T[3]-T[5]
3320  I[21]=G[25]
3322  IF M#E0 AND M#(E0+1) THEN 3325
3323  I[17]=I[17]+H[7]
3325  FOR J=1 TO 21
3330  FOR L=1 TO 8
3335  IF J=L[L] THEN 3370
3340  NEXT L
3345  IF M#E0 THEN 3360
3350  MAT  READ #4,1;H
3355  GOTO 3365
3360  MAT  READ #4,M;H
3365  I[J]=I[J]+H[J]
3370  NEXT J
3371  GOSUB 3600
3375  X=I[24]-I[29]
3380  IF X=0 THEN 3400
3385  I[11]=I[11]+X
3387  I[25]=I[25]+X
3390  I[27]=I[27]+X
3395  I[29]=I[29]+X
3400  MAT  PRINT #4,(M+1);I
3405  NEXT M
3410  MAT  READ #4,1;I
3415  GOSUB 3600
3420  MAT  PRINT #4,1;I
3425  END 
3500  FOR M=E0 TO E1
3505  MAT  READ #4,(M+1);I
3510  FOR I=1 TO 32
3515  FOR J=1 TO 8
3520  IF I=L[J] THEN 3535
3525  NEXT J
3530  I[I]=0
3535  NEXT I
3537  MAT  PRINT #4,(M+1);I
3540  NEXT M
3545  RETURN 
3600  I[22]=I[1]+I[2]+I[3]+I[4]
3605  I[23]=I[6]+I[7]+I[8]
3610  I[24]=I[22]+I[5]+I[23]+I[9]
3615  I[25]=I[10]+I[11]+I[12]+I[13]
3620  I[26]=I[15]+I[16]
3625  I[27]=I[25]+I[14]+I[26]+I[17]
3630  I[28]=I[18]+I[19]+I[20]+I[21]
3635  I[29]=I[27]+I[28]
3640  RETURN 
4000  R=32*(L1-1)+1
4010  R1=R+2*(P-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 
