1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM         IPRT : CTC MANUFACTURING PARTS CONTROL
4  REM
5  REM         36210 REV  B  PART 9 OF 23   2/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
10  REM *PRINTS THE MANUFACTURING INVENTORY FILE*
11  DIM P[13],U[30],W[30]
12  DIM Y$[10],P$[10],X$[20],A$[20],C$[1]
13  Y$="0123456789"
14  P0=0
20  READ O,O1,O2,N9
25  DATA 21,7,9,13
50  DATA "G1","G2","G3","G4","G5","G6","G7","G8","G9"
100  FILES G1,G0
110  FOR I=1 TO O
120  READ #2;W[I]
130  NEXT I
140  READ #2;A1,A2,B1,B2,C1,C2,K5,K6,T1
150  PRINT "ENTER TODAY'S DATE (MDY)";
160  INPUT X
161  D1=INT(X/10^4)
162  IF D1>0 AND D1<13 THEN 165
163  PRINT '7'7"INVALID DATE"
164  GOTO 150
165  D2=INT((X-D1*10^4)/100)
166  IF D2<1 OR D2>31 THEN 163
167  D3=X-D1*10^4-D2*100
168  IF D3<72 OR D3>99 THEN 163
180  Q3=0
200  PRINT "WITH WHAT PART NO. DO YOU WISH TO BEGIN";
205  INPUT X$
210  IF X$="0" THEN 900
215  IF LEN(X$)=10 THEN 230
220  PRINT '7'7'7"INVALID DATA"
225  GOTO 200
230  IF X$[3,3]#"-" THEN 220
235  IF X$[8,8]#"-" THEN 220
240  A$=X$[1,1]
245  GOSUB 4200
250  IF G1 OR Z=0 THEN 220
255  Q=Z
260  A$=X$[2,2]
265  GOSUB 4200
270  IF G1 THEN 220
275  Q1=Z
280  A$[1,4]=X$[4,7]
285  A$[5]=X$[9,10]
290  GOSUB 4200
295  IF G1 THEN 220
297  Q2=Z
300  RESTORE 50
305  FOR I=1 TO Q
310  READ A$
315  NEXT I
320  IF Q#2 THEN 340
325  IF Q1=0 AND Q2<35001. THEN 350
330  A$[3]="A"
332  Q3=1
335  GOTO 350
340  IF Q#4 AND Q#7 THEN 350
345  IF Q1 >= 2 THEN 330
350  ASSIGN A$,1,W5
800  IF  END #1 THEN 820
805  READ #1;P$
810  MAT  READ #1;P
815  IF P[1]#0 THEN 830
820  PRINT "BEG.PART# NOT ON FILE"
830  X=INT(ABS(P[1])/10^6)
835  X1=ABS(P[1])-X*10^6
840  IF SGN(P[1])#-1 THEN 850
845  X=X+8
850  IF X=Q1 AND X1=Q2 THEN 880
855  IF X<Q1 THEN 805
860  IF X>Q1 THEN 820
865  IF X1<Q2 THEN 805
870  GOTO 820
880  REM
890  IF  END #1 THEN 2650
892  K1=66
893  GOSUB 8000
895  GOTO 1020
900  READ A$
905  ASSIGN A$,1,W5
910  Q=1
920  IF  END #1 THEN 2650
930  K1=66
935  GOSUB 8000
1000  REM
1015  READ #1;P$
1016  MAT  READ #1;P
1017  IF P[1]=0 THEN 2650
1020  REM ****BREAK UP Q INTO U****
1025  GOSUB 9700
1037  REM ****DETERMINE T--TOTAL AVE. WEEKLY $USAGE OF ITEM****
1039  GOSUB 9200
1040  REM****DETERMINE CATEGORY****
1050  GOSUB 9250
1060  REM ****DETERMINE MIN AND MAX****
1070  IF C$#"A" THEN 1090
1075  Y5=A1
1080  Y6=A2
1085  GOSUB 9400
1088  GOTO 2000
1090  IF C$#"B" THEN 1120
1100  Y5=B1
1105  Y6=B2
1110  GOSUB 9400
1115  GOTO 2000
1120  IF C$#"C" THEN 1170
1130  Y5=C1
1140  Y6=C2
1150  GOSUB 9400
1160  GOTO 2000
1170  PRINT '7'7'7'7'7'7'7'7'7'7"ERROR IN DETERMINING C$";C$
1180  END 
2000  REM * PRINT A LINE OF DATA *
2005  GOSUB 9800
2010  PRINT TAB(11);P$;TAB(23);C$;TAB(28);
2015  X$=" "
2020  Z$="##  "
2025  Z[1]=U[22]
2030  GOSUB 7000
2035  Z$="$#####.## "
2040  Z[1]=P[2]
2045  GOSUB 7000
2050  Z$="#######  "
2055  Z[1]=M5
2060  GOSUB 7000
2062  PRINT " ";
2065  Z[1]=P[3]
2070  GOSUB 7000
2080  Z$="      ###"
2085  L1=1
2090  L2=7
2095  GOSUB 2900
2100  PRINT "   ";
2125  M7=(M5-M6)/2+M6
2126  X$="***"
2127  IF P[4]>M5 THEN 2140
2128  X$=""
2129  IF M7<P[4] AND P[4] <= M5 THEN 2140
2130  X$="#"
2131  IF M6<P[4] AND P[4] <= M7 THEN 2134
2132  X$="*"
2133  GOTO 2140
2134  IF P[3]>0 THEN 2140
2135  X$="HOT"
2140  PRINT X$;
2142  PRINT 
2145  PRINT TAB(41);
2147  X$=" "
2150  Z$="+#######  "
2155  Z[1]=M6
2160  GOSUB 7000
2165  Z[1]=P[4]
2170  GOSUB 7000
2180  Z$="      ###"
2185  L1=11
2190  L2=17
2195  GOSUB 2900
2200  PRINT 
2201  PRINT TAB(61);
2202  L1=18
2203  L2=20
2204  GOSUB 2900
2205  PRINT 
2210  K=1
2215  GOSUB 9900
2220  K1=K1+4
2230  IF K1<60 THEN 2250
2245  GOSUB 8000
2250  GOTO 1015
2650  IF Q3 OR (Q#2 AND Q#4 AND Q#7) THEN 2665
2655  A$[3]="A"
2660  Q3=1
2662  GOTO 2685
2665  Q=Q+1
2670  IF Q>9 THEN 9999
2675  Q3=0
2680  READ A$
2685  ASSIGN A$,1,W5
2690  GOTO 1015
2900  FOR I=L1 TO L2
2902  IF U[I]#99 THEN 2910
2904  PRINT "       **";
2906  GOTO 2930
2910  Z[1]=U[I]
2920  GOSUB 7000
2930  NEXT I
2940  RETURN 
4200  G1=Z=0
4205  FOR I1=1 TO LEN(A$)
4210  FOR I2=1 TO 10
4215  IF A$[I1,I1]=Y$[I2,I2] THEN 4240
4220  NEXT I2
4225  G1=1
4230  RETURN 
4240  Z=Z*10+I2-1
4245  NEXT I1
4250  RETURN 
7000  REM
7020  V=Z2=Z3=Z4=Z5=Z7=Z8=Z9=1
7025  DIM V$[72],Z$[72]
7035  Z0=Z9-1
7040  Z0=Z0+1
7045  IF Z0=LEN(Z$)+1 THEN 7365
7050  IF Z$[Z0,Z0]="#" THEN 7090
7055  IF Z$[Z0,Z0+1]=".#" THEN 7090
7060  IF Z$[Z0,Z0+1]="+#" THEN 7080
7065  V$[V,V]=Z$[Z0,Z0]
7070  V=V+1
7075  GOTO 7040
7080  Z4=0
7085  GOTO 7040
7090  Z=100
7095  Z6=Z[Z2]
7100  Z9=Z0-1
7105  Z9=Z9+1
7110  IF Z$[Z9,Z9]="." THEN 7125
7115  IF Z$[Z9,Z9]="#" THEN 7105
7120  GOTO 7145
7125  IF Z5#1 THEN 7145
7130  Z5=0
7135  Z=Z9
7140  GOTO 7105
7145  IF Z#100 THEN 7155
7150  Z=Z9
7155  IF Z4=1 THEN 7190
7160  IF Z6 >= 0 THEN 7180
7165  V$[V,V]="-"
7170  V=V+1
7175  GOTO 7190
7180  V$[V,V]=" "
7185  V=V+1
7190  IF Z=Z9 THEN 7205
7195  Z6=ABS(Z6)+5*10^(Z-Z9)
7200  GOTO 7210
7205  Z6=ABS(Z6)+.5
7210  Z7=10^(Z-Z0-1)
7215  Z4=10*Z7
7220  FOR Z1=Z-Z0 TO Z+1-Z9 STEP -1
7225  IF Z1#0 THEN 7250
7230  V$[V,V]="."
7235  V=V+1
7240  Z3=0
7245  GOTO 7345
7250  Z8=INT(Z6/Z7)
7255  IF Z6<Z4 THEN 7275
7260  V$[V,V]="#"
7265  V=V+1
7270  GOTO 7340
7275  Z6=Z6-Z8*Z7
7280  IF Z8=0 THEN 7290
7285  Z3=0
7290  IF Z3=0 THEN 7330
7295  IF Z1#1 THEN 7315
7300  V$[V,V]="0"
7305  V=V+1
7310  GOTO 7340
7315  V$[V,V]=X$
7320  V=V+1
7325  GOTO 7340
7330  V$[V,V]=Y$[Z8+1,Z8+1]
7335  V=V+1
7340  Z7=Z7/10
7345  NEXT Z1
7350  Z3=Z4=Z5=Z7=1
7355  Z2=Z2+1
7360  GOTO 7035
7365  PRINT V$;
7370  V$=""
7375  RETURN 
8000  K=66-K1+4
8002  GOSUB 9900
8004  PRINT "DATE: ";
8006  Z$="##/##/##"
8008  X$=" "
8010  Z[1]=D1
8012  Z[2]=D2
8014  Z[3]=D3
8016  GOSUB 7000
8018  PRINT TAB(32)"M A N U F A C T U R I N G  C O M P O N E N T  P A R T S  F I L E";
8019  PRINT "";TAB(19)"PAGE: ";
8020  Z$="###"
8022  P0=P0+1
8024  Z[1]=P0
8026  GOSUB 7000
8027  PRINT 
8028  PRINT 
8029  PRINT 
8030  PRINT "   CTC      PART     CATE- LEAD  STANDARD MAX QTY  ";
8040  PRINT " ON ORDER 3300/3000 2200-350 3360-100 3300-200 2200-000 ";
8050  PRINT "2200-300 2200-200"
8060  PRINT "PART NO.  DESCRIPT   GORY  TIME    COST   MIN QTY   ";
8070  PRINT " ON HAND  3360-200 3300-300     VT06 2200-112 2200-400 2200-401 2200-402"
8075  PRINT TAB(62)"2200-420   2200PS 2200-404"
8080  K=2
8090  GOSUB 9900
8100  K1=12
8120  RETURN 
9200  REM ****DETERMINE T--TOTAL AVE. WEEKLY $ USAGE OF ITEM****
9202  T=0
9230  FOR I=1 TO O
9232  IF U[I]=99 THEN 9240
9235  T=T+(P[2]*U[I]*W[I])
9240  NEXT I
9245  RETURN 
9250  REM ****DETERMINE CATEGORY--A,B,OR C****
9260  IF (T/T1)<K5 THEN 9300
9265  IF K5 <= T/T1 AND T/T1<K6 THEN 9290
9270  C$="A"
9275  RETURN 
9290  C$="B"
9295  RETURN 
9300  C$="C"
9320  RETURN 
9400  REM ****DETERMINE MAX AND MIN****
9410  M5=0
9420  M6=0
9430  FOR I=1 TO O
9435  IF U[I]=99 THEN 9460
9440  M5=M5+(Y5*U[I]*W[I])
9450  M6=M6+(Y6*U[I]*W[I])
9460  NEXT I
9470  RETURN 
9700  REM ****BREAD UP Q INTO U****
9710  J=1
9720  FOR I=5 TO 9
9730  U[J]=INT(P[I]/1000)
9740  U[J+1]=P[I]-U[J]*1000
9750  J=J+2
9760  NEXT I
9765  FOR I=10 TO N9
9770  U[J]=INT(P[I]/10^4)
9772  U[J+1]=INT((P[I]-U[J]*10^4)/100)
9774  U[J+2]=P[I]-U[J]*10^4-U[J+1]*100
9776  J=J+3
9778  NEXT I
9780  RETURN 
9800  Z$="##-####-##"
9805  X$="0"
9810  X1=INT(ABS(P[1])/10^6)
9815  Z[2]=INT((ABS(P[1])-X1*10^6)/100)
9820  Z[3]=ABS(P[1])-X1*10^6-Z[2]*100
9825  IF SGN(P[1])>-1 THEN 9840
9830  X1=X1+8
9840  Z[1]=Q*10+X1
9850  GOSUB 7000
9860  RETURN 
9900  REM ****SKIP K LINES ON PRINTED OUTPUT****
9910  FOR I=1 TO K
9920  PRINT 
9930  NEXT I
9940  RETURN 
9950  REM ****SKIP K SPACES ON A LINE OF PRINTED OUTPUT****
9960  FOR I=1 TO K
9970  PRINT " ";
9980  NEXT I
9990  RETURN 
9999  END 
