1  REM  ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM         UPDTQ : CTC MANUFACTURING PARTS CONTROL 
4  REM
5  REM         36210 REV  B  PART 2 OF 23   2/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ***********************************
10  REM *MANUFACTURING*
11  REM *UPDATES ON ORDER-ON HAND VALUES AND DOES MULT PULLS OR RTS*
12  DIM P$[10],Q$[10],R$[10]
13  DIM A$[20],B$[20],C$[10],T$[20],X$[20],E$[5]
14  DIM L[9],P[13],Q[13],R[13],W[25],A[6],U[25]
40  READ N9,O3
45  DATA 13,21
47  DATA 50,200,200,200,200,200,200,50,50
50  DATA "G1","G2","G3","G4","G5","G6","G7","G8","G9"
100  FILES G1,FS1,FS2,TRANSF,G0
150  C$="0123456789"
160  MAT  READ L
300  GOSUB 9400
400  FOR I=1 TO O3
410  READ #5;W[I]
415  NEXT I
420  MAT  READ #5;A
430  READ #5;K5,K6,T5
1000  PRINT '29'31"ENTER TODAY'S DATE (MDY): ";
1010  INPUT A$
1020  GOSUB 9500
1030  IF G1 THEN 1000
1040  PRINT '29'31'31'31'31'31"FOLLOWING ARE ALLOWABLE MODES AND THEIR CODES:"
1045  PRINT 
1050  PRINT "PULL (PU), RETURN TO INVENTORY (RT), NEW ORDER (NO),";
1055  PRINT "CANCELLED ORDER (CO)"
1060  PRINT 
1070  PRINT 
2000  REM ****INPUT ATA AND UPDATE ON HAND - ON ORDER****
2010  PRINT "PART#";
2020  INPUT X$
2022  IF X$="0" THEN 9999
2024  IF LEN(X$)=10 THEN 2030
2026  GOSUB 9900
2028  GOTO 2010
2030  IF X$[3,3]#"-" THEN 2026
2032  IF X$[8,8]#"-" THEN 2026
2034  A$=X$[1,1]
2036  GOSUB 8000
2038  IF G1 OR Z=0 THEN 2026
2042  P=Z
2044  A$=X$[2,2]
2046  GOSUB 8000
2048  IF G1 THEN 2026
2050  P1=Z
2052  A$[1,4]=X$[4,7]
2054  A$[5]=X$[9]
2056  GOSUB 8000
2058  IF G1 THEN 2026
2060  P2=Z
2070  IF P=1 THEN 7200
2089  S1=Z0=0
2090  PRINT "MODE: ";
2100  INPUT T$
2110  PRINT "QUANTITY: ";
2120  INPUT A$
2130  IF A$[1,1]#"-" THEN 2150
2140  A$=A$[2,10]
2150  IF LEN(A$)<8 THEN 2200
2160  GOSUB 9900
2170  GOTO 2110
2200  GOSUB 8000
2210  Q=Q1=Z
2212  IF S1 THEN 7300
2220  IF T$#"PU" THEN 2320
2240  O=0
2250  H=-Q
2260  GOTO 2400
2320  IF T$#"RT" THEN 2370
2340  O=0
2350  H=Q
2360  GOTO 2400
2370  IF T$#"NO" THEN 2380
2374  O=Q
2376  H=0
2378  GOTO 2400
2380  IF T$#"CO" THEN 2390
2382  O=-Q
2384  H=0
2386  GOTO 2400
2390  PRINT '7'7'7'7'7'7'7'7'7'7"MODE ILLEGAL--ENTER AGAIN"'7'7'7'7'7'7'7'7
2394  PRINT '26'26'26'31;
2396  GOTO 2090
2400  GOSUB 6000
2405  IF G1 AND S1 THEN 7350
2410  IF G1 THEN 1070
2420  T=R[3]
2425  R[3]=R[3]+O
2430  IF SGN(R[3])#-1 THEN 2440
2435  R[3]=0
2440  IF (R[4]+H)<0 THEN 2600
2442  T1=R[4]
2445  R[4]=R[4]+H
2450  GOTO F1 OF 2455,2465
2455  MAT P=R
2460  GOTO 2500
2465  MAT Q=R
2500  PRINT #1,R1;P$
2510  MAT  PRINT #1;P
2520  PRINT #1;Q$
2530  MAT  PRINT #1;Q
2590  IF S1 THEN 7375
2592  GOSUB 5000
2595  GOSUB 9200
2597  GOTO 1070
2600  IF S1 THEN 2615
2605  PRINT '7'7'7'7'7"ON HAND LESS THAN 0; ON HAND BEFORE =";R[4]
2610  GOTO 1070
2615  T1=R[4]
2620  R[4]=0
2630  GOTO 2450
5000  GOSUB 9700
5010  GOSUB 9600
5020  GOSUB 9650
5025  GOSUB 9800
5030  PRINT "ON ORDER:";R[3];"ON HAND:";R[4];"MAX:";M5;"MIN:";M6
5040  RETURN 
6000  REM
6005  G1=0
6010  RESTORE 50
6015  FOR I=1 TO P
6020  READ E$
6025  NEXT I
6030  IF P#2 THEN 6055
6035  IF P1=0 AND P2<35000. THEN 6065
6040  E$[3]="A"
6050  GOTO 6065
6055  IF P#4 AND P#7 THEN 6065
6060  IF P1 >= 2 THEN 6040
6065  ASSIGN E$,1,N1
6070  N1=0
6075  N2=L[P]
6080  IF N2-N1<2 THEN 6165
6082  R1=N1+INT((N2-N1)/2)
6085  READ #1,R1;P$
6090  MAT  READ #1;P
6095  X=P[1]
6100  GOSUB 6400
6102  U1=X1
6103  U2=X2
6105  READ #1;Q$
6110  MAT  READ #1;Q
6115  X=Q[1]
6120  GOSUB 6400
6125  U3=X1
6130  U4=X2
6135  IF P[1]=0 THEN 6205
6140  IF U1=P1 AND U2=P2 THEN 6185
6145  IF U1<P1 THEN 6155
6150  IF U1>P1 OR U2>P2 THEN 6205
6155  IF Q[1]=0 THEN 6165
6160  IF U3=P1 AND U4=P2 THEN 6195
6162  IF U3>P1 THEN 6165
6163  IF U3<P1 OR U4<P2 THEN 6215
6165  PRINT '7'7"PART NO NOT ON FILE"
6170  G1=1
6180  RETURN 
6185  F1=1
6187  R$=P$
6188  MAT R=P
6190  RETURN 
6195  F1=2
6197  R$=Q$
6198  MAT R=Q
6200  RETURN 
6205  N2=R1
6210  GOTO 6080
6215  N1=R1
6220  GOTO 6080
6400  X1=INT(ABS(X)/10^6)
6405  X2=ABS(X)-X1*10^6
6410  IF SGN(X)>-1 THEN 6430
6420  X1=X1+8
6430  RETURN 
7200  REM ****DETERMINE SUB FINISHED OR PARTS****
7205  PRINT "SUB ASSEMBLY 'FINISHED' OR 'PARTS'";
7210  INPUT X$
7215  IF X$="PARTS" THEN 7234
7220  IF X$="FINISHED" THEN 2089
7225  GOSUB 9900
7230  GOTO 7205
7234  S1=1
7235  T$="SB"
7236  PRINT "PARTS 'PULLED' OR 'RETURNED'";
7240  INPUT X$
7245  IF X$#"PULLED" THEN 7260
7247  Z0=1
7255  GOTO 2110
7260  IF X$#"RETURNED" THEN 7275
7265  Z0=2
7270  GOTO 2110
7275  GOSUB 9900
7280  GOTO 7236
7300  REM ****ROUTINE TO DO MULT PULL OR RETURN****
7302  G2=0
7303  S=2
7312  IF  END #S THEN 7600
7315  K1=1
7320  READ #S;B
7325  IF SGN(B)>-1 THEN 7320
7326  K1=2
7327  READ #S;A
7328  IF P*10+P1<A THEN 7620
7329  IF P*10+P1>A THEN 7315
7330  IF P2<-B THEN 7620
7332  IF P2>-B THEN 7315
7335  T=T1=0
7336  R$=""
7338  GOSUB 9200
7340  IF  END #S THEN 7660
7350  K1=1
7352  READ #S;P2
7353  IF SGN(P2)=-1 THEN 7450
7354  K1=2
7356  READ #S;B
7358  B1=INT(B/100)
7360  B=B-B1*100
7361  P=INT(B/10)
7362  P1=B-P*10
7363  Q=Q1*B1
7365  GOTO Z0 OF 2240,2340
7375  IF G2 THEN 7350
7376  PRINT #4;"",P*10+P1,P2,T1,R[4], END 
7380  GOTO 7350
7450  READ #2,1
7455  READ #3,1
7460  IF G2 THEN 9999
7465  GOTO 1070
7600  S=S+1
7610  IF S<4 THEN 7647
7620  PRINT '7'7"SUBASSY NOT ON SUB-COMP FILE"
7630  READ #2,1
7640  READ #3,1
7645  GOTO 1070
7647  IF  END #S THEN 7600
7650  GOTO K1 OF 7320,7327
7660  S=S+1
7662  IF S>3 THEN 7450
7665  IF  END #S THEN 7660
7670  GOTO K1 OF 7352,7356
8000  G1=Z=0
8010  FOR I1=1 TO LEN(A$)
8020  FOR I2=1 TO 10
8030  IF A$[I1,I1]=C$[I2,I2] THEN 8070
8040  NEXT I2
8050  G1=1
8060  RETURN 
8070  Z=Z*10+I2-1
8080  NEXT I1
8090  RETURN 
9200  REM ****PRINT UPDATE ON TRANSACTION FILE****
9205  IF  END #4 THEN 9310
9210  PRINT #4;P*10+P1,P2,R$,T$,Z0,T,T1,A$,D, END 
9220  RETURN 
9310  PRINT '7'7'7'7'7"TRANSACTION FILE FULL--CALL OPERATOR"'7'7'7'7
9320  PRINT "LAST TRANSACTION NOT RECORDED ON TRANSACTION FILE"
9330  IF S1 THEN 9340
9335  STOP 
9340  G2=1
9350  GOTO 7350
9400  REM****READ TRANSFILE TO END ****
9410  IF TYP(4)=3 THEN 9470
9420  IF TYP(4)#1 THEN 9450
9430  READ #4;X
9440  GOTO 9410
9450  READ #4;A$
9460  GOTO 9410
9470  RETURN 
9500  REM****CHECK DATE****
9502  G1=0
9505  IF LEN(A$)<5 THEN 9565
9510  IF LEN(A$)>6 THEN 9565
9515  GOSUB 8000
9520  IF G1 THEN 9565
9525  M=INT(Z/10^4)
9527  IF M<1 OR M>12 THEN 9565
9530  D=INT((Z-M*10^4)/100)
9532  IF D<1 OR D>31 THEN 9565
9535  Y=Z-M*10^4-D*100
9537  IF Y<72 THEN 9565
9540  D=M*10^4+D*100+Y
9555  G1=0
9560  RETURN 
9565  GOSUB 9900
9570  G1=1
9580  RETURN 
9600  T0=0
9605  FOR I=1 TO O3
9607  IF U[I]=99 THEN 9640
9610  T0=T0+(R[2]*U[I]*W[I])
9640  NEXT I
9645  RETURN 
9650  IF (T0/T5)<K5 THEN 9690
9655  IF K5 <= T0/T5 AND T0/T5<K6 THEN 9680
9662  I=1
9665  RETURN 
9680  I=3
9685  RETURN 
9690  I=5
9695  RETURN 
9700  J=1
9720  FOR I=5 TO 9
9730  U[J]=INT(R[I]/1000)
9740  U[J+1]=R[I]-U[J]*1000
9750  J=J+2
9760  NEXT I
9765  FOR I=10 TO N9
9770  U[J]=INT(R[I]/10^4)
9775  U[J+1]=INT((R[I]-U[J]*10^4)/100)
9780  U[J+2]=R[I]-U[J]*10^4-U[J+1]*100
9785  J=J+3
9790  NEXT I
9795  RETURN 
9800  M5=M6=0
9820  FOR I1=1 TO O3
9830  IF U[I1]=99 THEN 9860
9840  M5=M5+(A[I]*U[I1]*W[I1])
9850  M6=M6+(A[I+1]*U[I1]*W[I1])
9855  NEXT I1
9860  RETURN 
9900  REM **** PRINT DATA OUT OF BOUNDS ****
9910  PRINT '7'7'7'7'7'7'7'7'7'7"DATA OUT OF BOUNDS"'7'7'7'7'7'7'7'7'7'7
9920  PRINT '26'26'31;
9930  RETURN 
9998  PRINT #11; END 
9999  END 
