1  REM  ****  HP BASIC PROGRAM LIBRARY  **************************
2  REM
3  REM        EXPROJ:  CTC PROJECTION PROGRAMS
4  REM
5  REM        36212  REV B  PART 10 OF 10  6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  *******************************
8  REM
9  H$=""
10  DIM F[64],P[16],G[32],H[32],L[15]
11  DIM A$[20]
12  DIM C$[10]
20  C$="0123456789"
21  MAT  READ P
22  DATA 2.2E+06,2.2002E+06,2.20022E+06,2.2003E+06,2.20035E+06,2.2004E+06,2.2005E+06
23  DATA 3.0001E+06,3.3001E+06,3.3002E+06,3.3003E+06,3.3601E+06,3.3602E+06,4.46E+06
24  DATA 5.5E+06,5.50036E+06
30  MAT  READ L
31  DATA 7,11,14,15,16,18,19,24,26,27,28,29,30,31,32
100  FILES IN1,R1
200  PRINT "EXPAND PRODUCTS OR INCOME STATEMENT (P/I)";
210  INPUT A$
220  IF A$="END" THEN 9999
230  F1=0
235  IF A$[1,1]="P" THEN 300
240  F1=1
245  IF A$[1,1]="I" THEN 300
250  PRINT '1'7'7'7"WHAT";
255  GOTO 210
300  PRINT "BASE YEAR";
302  INPUT Y9
304  PRINT "BASE MONTH";
305  INPUT M9
320  IF Y9>0 AND Y9<5 AND M9>0 AND M9<13 THEN 340
325  PRINT '7'7'7'7"INVALID DATA";H$[3,5];
330  GOTO 300
340  Y8=Y9
345  IF M9<12 THEN 500
350  Y8=Y9+1
355  IF Y8<5 THEN 500
360  PRINT '7'7"ONLY 48 MONTHS PROVIDED"
365  STOP 
500  IF F1 THEN 2000
1000  PRINT H$[1,2];
1005  FOR P=1 TO 16
1010  Z$="####-###"
1015  X$="0"
1020  Z[1]=INT(P[P]/1000)
1025  Z[2]=P[P]-Z[1]*1000
1030  GOSUB 9000
1040  PRINT 
1050  GOSUB 3000
1070  FOR L1=1 TO 6
1075  GOSUB 4000
1080  M8=M9+1
1085  FOR I=Y9 TO 4
1086  M7=(I-1)*12
1087  IF I#Y9 THEN 1090
1088  M7=M7+M9
1090  FOR J=M8 TO 12
1091  M1=(I-1)*12+J
1092  IF M8#1 THEN 1100
1094  Y5=J*(Y[I]/12)+1
1096  GOTO 1105
1100  Y5=(J-M9)*(Y[I]/12)+1
1105  X=F[M7]*Y5
1110  GOSUB 3100
1115  F[M1]=X
1120  NEXT J
1122  M8=1
1125  NEXT I
1127  GOSUB 4050
1130  NEXT L1
1140  PRINT 
1150  NEXT P
1155  PRINT "PRODUCTS EXPANDED - GO ON TO INCOME STATEMENT";
1160  INPUT A$
1165  IF A$[1,1]#"Y" THEN 9999
2000  PRINT H$[1,2];
2005  FOR L=1 TO 8
2010  Z$="K##"
2015  X$="0"
2030  Z[1]=L[L]
2035  GOSUB 9000
2040  PRINT 
2050  GOSUB 3000
2055  M8=M9+1
2065  FOR I=Y9 TO 4
2066  M7=(I-1)*12
2067  IF I#Y9 THEN 2070
2068  M7=M7+M9
2070  FOR J=M8 TO 12
2071  IF M8#1 THEN 2074
2072  Y5=J*(Y[I]/12)+1
2073  GOTO 2075
2074  Y5=(J-M9)*(Y[I]/12)+1
2075  M1=(I-1)*12+J
2080  MAT  READ #2,(M1+1);G
2085  MAT  READ #2,(M7+1);H
2090  X=H[L[L]]*Y5
2092  GOSUB 3100
2095  G[L[L]]=X
2097  IF L<3 THEN 2130
2100  K=L+6
2105  IF L<8 THEN 2112
2110  K=L+7
2112  X=H[L[K]]*Y5
2115  GOSUB 3100
2117  G[L[K]]=X
2120  IF L#7 THEN 2130
2122  X=H[31]*Y5
2125  GOSUB 3100
2127  G[31]=X
2130  MAT  PRINT #2,(M1+1);G
2135  NEXT J
2137  M8=1
2140  NEXT I
2145  PRINT 
2150  NEXT L
2160  PRINT "INCOME STATEMENT EXTENDED"
2170  END 
3000  REM
3010  Z$="% FOR YR#"
3015  FOR I=Y8 TO 4
3020  Z[1]=I
3030  GOSUB 9000
3040  INPUT Y[I]
3050  Y[I]=Y[I]*.01
3060  NEXT I
3070  RETURN 
3100  X1=INT(X)
3110  IF X-X1<.5 THEN 3130
3120  X1=X1+1
3130  X=X1
3140  RETURN 
4000  R=32*(L1-1)+1
4010  R1=R+2*(P-1)
4020  READ #1,R1
4025  MAT  READ #1;F
4030  RETURN 
4050  READ #1,R1
4060  MAT  PRINT #1;F
4070  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 
9999  END 
