10  COM X[2048],Y[10],P,C$[7]
20  COM E,O,L[10]
25  REM  HPASMB, HP 36806A, 2/74,  (HPEXEC,  PART 2 OF 4)
30  DIM A$[72],B$[72],X$[64],Y$[64]
35  FILES $ASCII
37  Y[10]=1
40  GOTO 4080
100  READ #1;X$,Y$
4000  REM--EXEC CALLS
4010  GOSUB 6000
4020  GOTO B[1] OF 4090,4190,4300,4030,4030,4500,4550,4600,4030,4600,4650
4025  GOTO B[1]-12 OF 4720,4800,4800,5110,5150,5200
4027  IF B[1]=23 THEN 5400
4028  PRINT "RQ ";
4029  GOTO 4040
4030  PRINT "OR ";
4040  P=P-2
4045  FOR J=4 TO 0 STEP -1
4050  PRINT  USING "#,D";INT(P/8^J)-INT(P/8^(J+1))*8
4060  NEXT J
4065  PRINT 
4080  CHAIN "HPASMB",100
4090  REM--READ
4095  IF N1=6 THEN 4170
4100  IF N1#4 THEN 4030
4120  IF A[3]+B[4]*(B[4]>0)-INT((B[4]+1)/2)*(B[4]<0)>2049 THEN 4270
4130  A1=A[3]
4135  GOSUB 6300
4140  IF C[2]#1 THEN 4030
4145  IF C[1]#5 AND C[1]#1 THEN 4170
4150  ENTER 255,T,A$
4152  IF T<0 THEN 4150
4153  PRINT 
4154  IF A$[1,1]=":" THEN 4185
4155  N1=2*B[4]*(B[4]>0)-B[4]*(B[4]<0) MIN LEN(A$)
4160  GOSUB 6700
4165  L[C[1]]=INT((N1+1)/2)*(B[4]>0)-B[4]*(B[4]<0)
4170  P=X[P]+1
4180  CHAIN "HPRUN",55
4185  PRINT "IE ";
4187  GOTO 4040
4190  REM--WRITE
4195  IF N1=6 THEN 4170
4200  IF N1#4 THEN 4030
4210  N1=2*B[4]*(B[4]>0)-B[4]*(B[4]<0)
4220  A1=A[3]
4223  GOSUB 6300
4224  IF C[2]#1 THEN 4030
4225  IF INT(N1/2)+A1>2049 THEN 4270
4227  IF C[1]#6 AND C[1]#1 THEN 4170
4230  GOSUB 6500
4235  PRINT A$
4240  L[C[1]]=B[4]
4250  P=X[P]+1
4260  GOTO 4180
4270  PRINT "CW ";
4280  GOTO 4040
4300  REM--I/O CNTRL
4305  GOSUB 6300
4310  IF N1=3 THEN 4400
4320  IF N1#2 THEN 4030
4340  IF C[5]#8 THEN 4380
4342  IF C[1]#1 AND C[1]#4 THEN 4030
4345  PRINT '18;
4350  FOR J=1 TO 40
4360  PRINT X$[1,1];
4370  NEXT J
4380  P=X[P]+1
4390  GOTO 4180
4400  IF C[5]#9 OR C[1]#1 AND C[1]#6 THEN 4030
4410  PRINT LIN(B[3]*(B[3]>0)-B[3]*(B[3]<0))
4420  GOTO 4380
4500  REM--PRG CMPLT
4510  IF N1#1 THEN 4030
4520  GOTO 4080
4550  REM--PR SUSP
4560  IF N1#1 THEN 4030
4590  GOTO 4170
4600  REM--SEG & MAIN LOAD
4610  IF N1<2 OR N1>7 THEN 4030
4620  GOTO 4080
4650  REM--TIME
4660  IF N1#2 THEN 4030
4665  IF A[2]+4>2048 THEN 6140
4670  X[A[2]]=X[A[2]+1]=X[A[2]+4]=0
4680  X[A[2]+2]=TIM(0)
4690  X[A[2]+3]=TIM(1)
4700  GOTO 4170
4720  REM--I/O STAT
4730  IF N1#4 OR B[2]<1 THEN 4030
4740  X[1]=X[A[3]]=0
4745  J=0
4750  IF B[2]>10 THEN 4770
4760  J=L[B[2]]
4770  X[2]=X[A[4]]=J
4780  GOTO 4170
4790  PRINT "LU ";
4795  GOTO 4040
4800  REM--FILE READ/WRITE
4810  IF N1#6 THEN 4790
4820  GOSUB 6300
4830  IF C[1]#2 AND C[1]#3 THEN 4790
4835  IF C[2]#1 THEN 4030
4840  A1=A[5]
4850  N1=6
4860  GOSUB 6500
4870  ASSIGN A$,1,T
4880  IF T=0 THEN 4910
4890  PRINT "FI ";
4900  GOTO 4040
4910  IF  END #1 THEN 5107
4920  READ #1,B[6]+1
4930  N1=B[4]*(B[4]>0)-INT((B[4]+1)/2)*(B[4]<0)
4935  A1=A[3]
4937  IF A1+N1>2049 THEN 4270
4940  IF B[1]=15 THEN 5000
4950  FOR J=1 TO N1
4960  READ #1;X[A1]
4970  A1=A1+1
4980  NEXT J
4990  GOTO 5090
5000  FOR J=1 TO N1
5010  PRINT #1;X[A1]
5020  A1=A1+1
5030  NEXT J
5040  N1=N1-INT(N1/128)*128
5050  IF N1=0 THEN 5090
5060  FOR J=N1 TO 127
5070  PRINT #1;0
5080  NEXT J
5090  L[C[1]]=B[4]
5100  GOTO 4170
5107  PRINT "IT ";
5108  GOTO 4040
5110  REM--WK AREA STAT
5120  IF N1#4 THEN 4030
5130  X[A[4]]=0
5140  GOTO 4170
5150  REM--WK LIMITS
5160  IF N1#4 THEN 4030
5170  GOTO 4170
5200  REM--SRCH FILE NAM
5210  IF N1#3 THEN 4030
5220  A1=A[2]
5230  N1=6
5240  GOSUB 6500
5260  ASSIGN A$,1,T
5270  IF T=0 THEN 5320
5275  J=0
5280  X[A[3]]=J
5290  X[1]=X[2]=0
5310  GOTO 4170
5320  IF  END #1 THEN 5280
5330  J=1
5340  READ #1,J+1
5350  J=J+1
5360  GOTO 5340
5400  REM--CHG USR DSK
5410  IF N1#2 AND N1#3 THEN 4030
5420  GOTO 4170
6000  REM--GET PARAM
6010  IF P>X[P] OR X[P]>2047 THEN 4030
6020  J=0
6030  N1=X[P]-P
6040  J=J+1
6050  IF J+P#X[P]+1 THEN 6070
6060  RETURN 
6070  A[J]=X[P+J]+1
6080  IF A[J]>0 THEN 6130
6090  A[J]=A[J]+32768.
6100  IF A[J] <= 2048 THEN 6110
6104  PRINT "ADR OUT OF RANGE ";
6105  P=P+J-1
6106  GOTO 4045
6110  A[J]=X[A[J]]+1
6120  GOTO 6080
6130  IF A[J]>2048 THEN 6104
6140  B[J]=X[A[J]]
6150  GOTO 6040
6300  REM--UNDO CNWD
6310  C[1]=B[2]-INT(B[2]/64)*64
6320  B[2]=INT(B[2]/64)
6330  FOR J=2 TO 4
6340  C[J]=B[2]-INT(B[2]/2)*2
6350  B[2]=INT(B[2]/2)
6360  NEXT J
6370  C[5]=(B[2]-INT(B[2]/16)*16)*8+C[2]+2*C[3]+4*C[4]
6380  RETURN 
6500  REM--NUM TO ASCII
6505  A$=""
6510  FOR J=1 TO N1 STEP 2
6520  A=INT(X[A1]/256)+128*(X[A1]<0)+1
6530  K=J
6540  GOSUB 6620
6560  IF K=N1 THEN 6640
6570  K=J+1
6580  A=X[A1]-INT(X[A1]/256)*256
6590  A=A-128*(A>127)+1
6600  GOSUB 6620
6605  A1=A1+1
6610  NEXT J
6615  RETURN 
6620  IF A>64 THEN 6650
6630  A$[K,K]=X$[A,A]
6640  RETURN 
6650  A=A-64
6660  A$[K,K]=Y$[A,A]
6670  RETURN 
6700  REM--ASCII TO NUM
6710  FOR J1=1 TO N1 STEP 2
6720  J=J1
6730  GOSUB 6810
6740  X[A1]=K*256
6750  IF J1=N1 THEN 6805
6760  J=J1+1
6770  GOSUB 6810
6780  X[A1]=X[A1]+K
6790  A1=A1+1
6800  NEXT J1
6805  RETURN 
6810  B$=X$
6815  K=0
6820  IF A$[J,J]<Y$[1,1] THEN 6850
6830  B$=Y$
6840  K=64
6850  FOR K1=16 TO 64 STEP 16
6860  IF A$[J,J] <= B$[K1,K1] THEN 6880
6870  NEXT K1
6875  K1=64
6880  FOR K2=K1 TO K1-15 STEP -1
6890  IF A$[J,J]=B$[K2,K2] THEN 6910
6900  NEXT K2
6910  K=K2+K-1
6920  RETURN 
9999  END 
