Trailing-Edge
-
PDP-10 Archives
-
decuslib10-02
-
43,50250/tblcel.f4
There are no other files named tblcel.f4 in the archive.
SUBROUTINE TBLCEL
C
C TBLTRN ROUTINE FOR OPERATIONS WHICH REQUIRE EITHER
C GARBAGE COLLECTION OR INVERSE GARBAGE COLLECTION
C
C DONALD BARTH, CHEM. DEPT., HARVARD UNIVERSITY
C
C KODE = 1 NOT USED
C KODE = 2 DUPLICATES UNKNOWN ADDRESS REFERENCES
C KODE = 3 HANDLES 1ST LOC IN STATEMENT
C KODE = 4 REMOVES CELLS WITH ZERO ID
C KODE = 5 HANDLES OTHER LOC'S IN STATEMENT
C KODE = 6 TURNS BIT ON IN KNOWN WORD AND
C REPAIRS LOC LIST IF ENTRY IS PART
C OF LIST CONTAINING BYTE INFORMATION.
C KODE = 7 CLEANS UP AFTER EWD
C KODE = 8 ASSIGNS LOCATION TO LABEL AND INSERTS
C VALUE OF LOCATION WHERE PREVIOUSLY
C REQUESTED
C KODE = 9 INSERTS NEW DATA INTO CELL WITH ID AT NEW
C OR REMOVES A CELL AND ANY FOLLOWING WITH
C ZERO IDENTIFIER
C KODE = 10 IS VALUE RETURNED IF ERROR IS FOUND
C KODE = 11 IS VALUE RETURNED IF NO MORE ROOM
C
COMMON/TBLTRN/I,IADDRS,IADJST,IBASE,IBLANK,IDGT(16),
1IERR,IFILL,IFKNT,IKODE,ILEFT,ILINE,ILPT,ILTR,IBYTE,
2IMASK,LMAX,NMORE,IMOST,INSERT,IOCT(13),IOPRTR,IOUT,
3IPAREN,IPNCTN(11),IPRCN,IRADIX,IREAD,IREPT,IRIGHT,
4ISHIFT,ISIGN,ISTAR,ISTORE(478),ITEN,ITEST,ITITLE(6),
5ITTY,IWIDE,IWRITE,J,JADJST,JBASE,JBLANK,JERR,KPAREN,
6JFKNT,JKODE(37),JLEFT,JMASK,JMORE,JPAREN,JRADIX,LOOP,
7JRIGHT,JSHIFT,JSIGN,K,KADJST,KBASE,KERR,KIND,KLINE,
8KLM,KLTR,KMASK,KNT,KNTLTR,KNTWRD,KODE,KRADIX,IDBG,
9KREAD,KSHIFT,L,LEAST,LETTER(160),LMASK,LOCK,LSTNEW,
1LTTR(160),M,MASK,MASTER(5000),MAX,MLEFT,MORE,MOST,
2MRIGHT,MULT,N,NEW,NEXT,NSIGN,NTITLE(6),NUMBER,LRADIX,
3KMAX,INLINE,JPNCTN(50),KPNCTN(50),LPNCTN,JOPRTR,NLTR,
4JBYTE,ILOOP,ISKIP,IVALUE,INSN(6),JNSN,IMAX,JMAX,
5KNSN,MLTR,JLTR,JLOOP,IPFX,JPFX,LSIGN,IIARG,JJARG,
6KKARG,LLARG,JVALUE,MIN,IAC,IARG,JARG,KARG,LARG,JSTFY,
7LENGTH(20),LNGMIN,IORDER,IRMV,KSIGN
C
GO TO(104,75,40,84,40,21,1,12,39),KODE
C
C CLEAN UP AFTER EWD DEFINTION
1 IF(INSERT.EQ.0)GO TO 7
IF(KNTWRD.GT.3)GO TO 2
IF(MASTER(IADDRS).NE.66)GO TO 7
2 LEAST=MASTER(IADDRS+1)-2
LSTNEW=LEAST+1
MASTER(LSTNEW)=-IADDRS+1
MASTER(IADDRS-1)=-LSTNEW
MASTER(IADDRS)=66
I=INSERT
J=MOST-MULT+I
GO TO 4
3 I=I-1
IF(I.EQ.0)GO TO 5
J=MOST-MULT+I
IF(MASTER(J).EQ.0)GO TO 3
4 IF((LEAST-2).LT.J)GO TO 104
MASTER(LEAST)=I
MASTER(LEAST-1)=MASTER(J)
LEAST=LEAST-2
GO TO 3
5 IF(LEAST.NE.(LSTNEW-3))GO TO 6
LSTNEW=IADDRS
MASTER(IADDRS)=1000+MASTER(LEAST+2)
MASTER(IADDRS-1)=MASTER(LEAST+1)
LEAST=MASTER(IADDRS+1)
6 MASTER(LSTNEW+1)=LEAST
MASTER(LEAST)=0
7 MOST=MOST-MULT
IMOST=MOST
MULT=0
INSERT=0
NEXT=0
NUMBER=IRMV+1
LOCK=0
IF(MASTER(IKODE).EQ.29)GO TO 8
IF(MASTER(IKODE).NE.66)GO TO 9
8 IF(MASTER(IKODE-1).EQ.0)GO TO 9
I=-MASTER(IKODE-1)
IF(NUMBER.LT.I)NUMBER=I+1
MASTER(I)=0
IF(IMASK.NE.I)GO TO 9
IMASK=0
IF(MASTER(IADDRS).NE.29)GO TO 9
IMASK=-MASTER(IADDRS-1)
IF(IMASK.NE.0)LMASK=MASTER(IMASK+1)
9 IF(IRMV.NE.0)MASTER(IRMV)=0
MASTER(IKODE)=MASTER(IADDRS)
MASTER(IKODE-1)=MASTER(IADDRS-1)
MASTER(IADDRS)=0
IF(IKODE.EQ.IRMV)NUMBER=0
IF(NUMBER.LT.IADDRS)NUMBER=IADDRS+1
IF(MASTER(IKODE).EQ.29)GO TO 10
IF(MASTER(IKODE).EQ.66)GO TO 10
IF(MASTER(IKODE).NE.8)GO TO 85
10 I=-MASTER(IKODE-1)
IF(I.EQ.0)GO TO 85
IF(MASTER(I+1).EQ.(I-2))GO TO 11
MASTER(I)=-IKODE+1
GO TO 85
11 MASTER(IKODE-1)=0
MASTER(I)=0
IF(NUMBER.LT.I)NUMBER=I+1
GO TO 85
C
C SYMBOL IS LABEL OF CURRENT TABLE ENTRY
C IN THIS SECTION, ISIGN, NSIGN, KSHIFT AND KIND
C ARE USED AS TEMPORARY VARIABLES SINCE I,J,K,L,M,
C INDEX AND LIMIT ARE USED IN BIT DEPOSIT SECTION.
12 NUMBER=0
IF(MASTER(NEW).LE.1)GO TO 13
IF(MASTER(NEW-1).LT.0)NUMBER=-MASTER(NEW-1)+1
MASTER(NEW-1)=0
13 MASTER(NEW)=2
KSHIFT=MASTER(NEW-1)
N=MOST+MORE
MASTER(NEW-1)=N
IF(MASK.NE.0)MASK=MASK+2
I=MOST+NEXT
IF(JSIGN.LT.0)GO TO 14
IF(IADDRS.NE.NEW)GO TO 14
J=MOST+JMORE
MASTER(J)=ITBPUT(MASTER(J),N,JSIGN,JSHIFT,JBASE)
JSIGN=-1
14 IF(MORE.LE.NEXT)GO TO 15
NEXT=NEXT+1
I=I+1
IF(I.GE.LEAST)GO TO 104
MASTER(I)=0
GO TO 14
15 INSERT=MULT+NEXT
IMOST=MOST
IF(NUMBER.NE.0)GO TO 85
16 IF(KSHIFT.EQ.0)GO TO 106
IF(KSHIFT.LT.0)GO TO 17
J=KSHIFT/8080
L=KSHIFT-(8080*J)
K=L/101
L=L-(101*K)-50
M=K/5
K=K-(5*M)
KSHIFT=MASTER(J)
MASTER(J)=ITBPUT(0,N,K,L,M+2)
GO TO 16
17 KSHIFT=-KSHIFT+1
NSIGN=KSHIFT
ISIGN=MASTER(KSHIFT)
MASTER(KSHIFT-1)=1-KSHIFT
18 KSHIFT=KSHIFT-2
IF(KSHIFT.EQ.ISIGN)GO TO 19
ISHIFT=MASTER(KSHIFT-1)
MORE=MASTER(KSHIFT)
K=ISHIFT/101
ISHIFT=ISHIFT-(101*K)-50
M=K/5
K=K-(5*M)
IF(MORE.LT.0)GO TO 20
MASTER(MORE)=ITBPUT(MASTER(MORE),N,K,ISHIFT,M+2)
GO TO 18
19 NUMBER=NSIGN
GO TO 85
20 MORE=-MORE
NUMBER=N
C
C DEPOSIT BIT INTO KNOWN ENTRY
21 LIMIT=1
L=0
IF(NUMBER.GT.0)GO TO 22
NUMBER=-NUMBER
L=MASTER(NUMBER-2)
LIMIT=MASTER(NUMBER-3)
NUMBER=MASTER(NUMBER-1)
C LIMIT CONTAINS ORIGINAL MULT AND L CONTAINS
C ORIGINAL IREPT
IF(MORE.GT.LIMIT)GO TO 102
22 NUMBER=NUMBER+MORE-1
IF(NUMBER.GT.MOST)GO TO 29
IF((NUMBER+(L*LIMIT)).GT.MOST)GO TO 102
C IF DESTINATION SET IS BELOW PRESENT
C ENTRY, MAKE SURE IT IS NOT IN AN ADDRESS LIST
I=MAX
IF(NUMBER.LE.(MOST-MULT))GO TO 23
IF((NUMBER-MOST+MULT).GT.INSERT)
1INSERT=NUMBER-MOST+MULT
23 NEW=I
I=MASTER(I)
IF(I.EQ.0)GO TO 31
IF(MASTER(NEW-1).NE.1)GO TO 23
K=NEW-2
INDEX=MASTER(K)
24 IF(INDEX.LE.0)GO TO 23
INDEX=INDEX/8080
IF(INDEX.EQ.NUMBER)GO TO 27
J=L
M=NUMBER
25 IF(J.EQ.0)GO TO 26
J=J-1
M=M+LIMIT
IF(INDEX.NE.M)GO TO 25
GO TO 102
26 K=INDEX
INDEX=MASTER(INDEX)
GO TO 24
27 NMORE=MASTER(K)
J=L
28 IF((MASTER(K)/8080).NE.INDEX)GO TO 102
MASTER(K)=MASTER(INDEX)
MASTER(INDEX)=0
INDEX=INDEX+LIMIT
J=J-1
IF(J.GE.0)GO TO 28
MORE=L
NEW=NEW-1
IF(MASTER(K).GE.0)GO TO 32
J=-MASTER(K)
MASTER(J)=-K
GO TO 32
C IF DESTINATION SET IS IN PRESENT ENTRY, MAKE
C SURE THAT IT HAS BEEN INITIALIZED (SET TO ZERO).
29 LOCK=2
I=MOST+NEXT
30 IF(I.GE.NUMBER)GO TO 31
NEXT=NEXT+1
I=I+1
IF(I.GE.LEAST)GO TO 104
MASTER(I)=0
GO TO 30
31 INSERT=MULT+NEXT
IMOST=MOST
NEW=0
32 IF(KODE.NE.8)GO TO 33
I=MASTER(KSHIFT-1)/101
J=I/5
I=I-5*J
J=J+2
GO TO 35
33 IF(KODE.EQ.8)GO TO 35
IF(IBYTE.NE.2)GO TO 34
IF(JBYTE.NE.1)GO TO 34
MASTER(NUMBER)=ITBPUT(MASTER(NUMBER),1,4,ISHIFT,2)
GO TO 36
34 MASTER(NUMBER)=ITBPUT(MASTER(NUMBER),1,2,ISHIFT,IBYTE)
GO TO 36
35 MASTER(NUMBER)=ITBPUT(MASTER(NUMBER),1,I,ISHIFT,J)
36 IF(L.EQ.0)GO TO 37
L=L-1
NUMBER=NUMBER+LIMIT
GO TO 33
37 IF(NEW.EQ.0)GO TO 74
J=MOST+NEXT+1
I=J+MORE+MORE+1
INDEX=I
L=NMORE/8080
NMORE=NMORE-8080*L
38 MASTER(INDEX)=L
MASTER(INDEX-1)=NMORE
L=L+LIMIT
INDEX=INDEX-2
IF(INDEX.GE.J)GO TO 38
NEW=NEW-1
GO TO 56
C
C INSERT NEW DATA INTO CELL WITH ID AT NEW
C IF NUMBER POINTS TO TOP OF DATA BELOW LEAST.
C REMOVE PRESENT CELL AND ANY FOLLOWING IF NUMBER
C POINTS TO START OF A CELL.
39 IF(NUMBER.GE.LEAST)GO TO 85
I=NUMBER
J=MOST+NEXT+1
GO TO 61
C
C IOPRTR=0,ISIGN.GE.0 UNKNOWN LABEL FOLLOWING LOC
C IOPRTR=0,ISIGN=-1 UNKNOWN LABEL FOLLOWING BIT
C IOPRTR=+,ISIGN.GE.0 ARGUMENT IN MASK DEFINITION
C IOPRTR=+,ISIGN=-1 ORIGIN INCREMENT IN MASK
C DEFINITION
C IOPRTR=+,ISIGN.LT.-1 AUTOMATIC ARGUMENT IN MASK
C DEFINITION
40 NEW=NEW-1
IF(KODE.NE.3)GO TO 41
IF(LOCK.GT.1)GO TO 41
I=MOST+MORE
GO TO 56
41 J=MOST+NEXT+1
I=J+1
IF(IOPRTR.EQ.15)GO TO 42
IF(IOPRTR.NE.37)GO TO 53
42 IF(ISIGN.EQ.-1)GO TO 43
IF(ISIGN.LT.0)GO TO 45
C DEFINITION OF ARGUMENT OF MASK
MASTER(I)=JPAREN
MASTER(J)=505*(IBASE-2)+101*ISIGN+ISHIFT+50
GO TO 56
C DEFINITION OF ORIGIN INCREMENT OF MASK
43 INDEX=-MASTER(NEW)
IF(NMORE.EQ.0)NMORE=1
IF(INDEX.EQ.0)GO TO 44
INDEX=MASTER(INDEX+1)+2
IF(MASTER(INDEX).NE.0)GO TO 44
MASTER(INDEX-1)=MASTER(INDEX-1)+NMORE
GO TO 106
44 MASTER(I)=0
MASTER(J)=NMORE
GO TO 56
C DEFINITION OF AUTOMATIC ARGUMENT OF MASK
45 ISIGN=-ISIGN
K=-MASTER(NEW)-1
L=MASTER(K+2)
N=K
GO TO 47
46 N=K
M=MASTER(K)
K=K-2
IF(M.LT.0)K=K+M
47 IF(K.GT.L)GO TO 46
NMORE=JPAREN
IF(NSIGN.LT.0)NSIGN=IPAREN
IF(ISIGN.NE.MAX)GO TO 48
MASTER(I)=NMORE
MASTER(J)=NUMBER
GO TO 51
48 IF(MASTER(ISIGN).LT.1001)GO TO 49
MASTER(I)=NMORE+MASTER(ISIGN)-1001
MASTER(J)=NUMBER
GO TO 51
49 K=J+ISIGN-MASTER(ISIGN+1)-1
I=K-1
50 K=K-2
ISIGN=ISIGN-2
MASTER(K+1)=MASTER(ISIGN+1)+NMORE-1
MASTER(K)=MASTER(ISIGN)
IF(K.NE.J)GO TO 50
51 K=N
L=I
IF(M.GT.0)GO TO 52
I=I+2
N=I
52 MASTER(N)=J-L-1
MASTER(N-1)=MASTER(K-1)
L=MASTER(N-1)/101
L=L-(5*(L/5))
MASTER(N-1)=MASTER(N-1)+101*(NSIGN-L)
GO TO 56
C UNKNOWN LABEL FOLLOWING LOC
53 IF(ISIGN.LT.0)GO TO 54
MASTER(I)=MOST+MORE
MASTER(J)=505*(IBASE-2)+101*ISIGN+ISHIFT+50
GO TO 56
C UNKNOWN LABEL FOLLOWING BIT
54 MASTER(I)=-MORE
ISIGN=4
IF(IBYTE.NE.2)ISIGN=2
IF(JBYTE.NE.1)ISIGN=2
MASTER(J)=505*(IBYTE-2)+101*ISIGN+ISHIFT+50
GO TO 56
55 NEW=NEW/8080
56 INDEX=NEW
NEW=MASTER(INDEX)
IF(NEW.EQ.0)GO TO 57
IF(NEW.GT.0)GO TO 55
NEW=-NEW
IF(KODE.NE.3)GO TO 61
IF(LOCK.GT.1)GO TO 61
GO TO 58
57 IF(KODE.NE.3)GO TO 60
IF(LOCK.GT.1)GO TO 60
GO TO 59
C ADD IMMEDIATE REFERENCE
58 MASTER(NEW)=-I
59 MASTER(I)=-NEW
MASTER(INDEX)=(8080*I)+(101*ISIGN)+50
1+(505*(IBASE-2))+ISHIFT
GO TO 106
C ADD NEW STORAGE CELL
C REPLACE PREVIOUS SYMBOL IF STILL UNDEFINED
60 IF(MASTER(LSTNEW).EQ.0)LEAST=LSTNEW+1
IF((LEAST-2).LE.I)GO TO 104
LSTNEW=LEAST-1
MASTER(INDEX)=1-LEAST
MASTER(LEAST)=LEAST-2
MASTER(LEAST-1)=-INDEX
LEAST=LEAST-2
MASTER(LEAST)=0
NEW=LSTNEW
C ADD TO OLD STORAGE CELL
C
C THIS IS A GENERAL PROCEDURE TO INSERT THE
C CONTENTS OF A BUFFER AREA IN MASTER ARRAY
C INTO THE END OF A SYMBOL DICTIONARY CELL.
C THE BUFFER AREA EXTENDS FROM I AT UPPER
C END TO J AT LOWER END (NORMALLY MOST+NEXT+1).
C THIS BUFFER IS INSERTED INTO THE CELL HAVING
C ITS IDENTIFIER AT NEW. THE BUFFER AREA IS
C USED AS A CIRCULAR BUFFER, AND IS DESTROYED.
61 IF(LEAST.LE.I)GO TO 104
KOUNT=21
LONG=I-J+1
62 KOUNT=KOUNT-1
IF(KOUNT.EQ.0)GO TO 63
INDEX=LENGTH(KOUNT)
IF(INDEX.GT.NEW)GO TO 63
IF(INDEX.EQ.0)GO TO 62
LENGTH(KOUNT)=INDEX-LONG
GO TO 62
63 IF(LNGMIN.LT.NEW)LNGMIN=LNGMIN-LONG
KOUNT=1
INDEX=I
LEAST=MASTER(NEW+1)
MASTER(NEW+1)=LEAST-LONG
LIMIT=LEAST
IF(KODE.NE.8)GO TO 64
IF(NSIGN.LT.NEW)NSIGN=NSIGN-LONG
IF(KSHIFT.LT.NEW)KSHIFT=KSHIFT-LONG
IF(ISIGN.LT.NEW)ISIGN=ISIGN-LONG
64 IF(IADDRS.LT.NEW)IADDRS=IADDRS-LONG
IF(IARG.EQ.0)GO TO 65
IF(IARG.LT.NEW)IARG=IARG-LONG
65 IF(IIARG.EQ.0)GO TO 66
IF(IIARG.LT.NEW)IIARG=IIARG-LONG
66 IF(LSTNEW.LT.NEW)LSTNEW=LSTNEW-LONG
IF(MASK.GT.NEW)GO TO 67
IF(IMASK.GT.NEW)GO TO 67
LMASK=LMASK-LONG
IF(MASK.NE.0)MASK=MASK-LONG
IF(IMASK.NE.0)IMASK=IMASK-LONG
67 LIMIT=MASTER(LIMIT)
IF(LIMIT.EQ.0)GO TO 72
MASTER(LEAST)=LIMIT-LONG
INDIC=MASTER(LEAST-1)
IF(INDIC.GE.0)GO TO 69
INDIC=-INDIC
IF(INDIC.LT.J)GO TO 68
IF(INDIC.LE.LEAST)GO TO 73
IF(INDIC.LT.(NEW-1))INDIC=INDIC-LONG
MASTER(LEAST-1)=-INDIC
IF(INDIC.GT.LEAST)GO TO 68
INDIC=INDEX-LEAST+INDIC
IF(INDIC.LT.J)INDIC=INDIC+LONG
68 MASTER(INDIC)=-LEAST+LONG+1
GO TO 73
69 IF(INDIC.EQ.1)GO TO 70
IF(INDIC.EQ.2)GO TO 70
IF(INDIC.EQ.29)GO TO 70
IF(INDIC.EQ.66)GO TO 70
IF(INDIC.NE.8)GO TO 73
70 INDIC=MASTER(LEAST-2)
IF(INDIC.GE.0)GO TO 73
INDIC=-INDIC
IF(INDIC.LE.LEAST)GO TO 73
IF(INDIC.LT.NEW)INDIC=INDIC-LONG
MASTER(LEAST-2)=-INDIC
IF(INDIC.GT.LEAST)GO TO 71
INDIC=INDEX-LEAST+INDIC
IF(INDIC.LT.J)INDIC=INDIC+LONG
71 MASTER(INDIC)=-LEAST+LONG+2
GO TO 73
72 LIMIT=LEAST-LONG-1
KOUNT=0
C ROLL IN CONTENTS OF BUFFER
73 INDIC=MASTER(LEAST)
MASTER(LEAST)=MASTER(INDEX)
MASTER(INDEX)=INDIC
INDEX=INDEX-1
LEAST=LEAST-1
IF(INDEX.LT.J)INDEX=I
IF(LEAST.GT.LIMIT)GO TO 73
IF(KOUNT.NE.0)GO TO 67
LEAST=LEAST+1
IF(KODE.NE.2)GO TO 74
IF(LONG.EQ.3)GO TO 76
GO TO 82
74 IF(KODE.EQ.8)GO TO 18
GO TO 106
C
C DUPLICATE UNKNOWN ADDRESS REFERENCES
75 N=MAX
MORE=MOST-(MULT*(IREPT+1))
76 K=N
N=MASTER(N)
IF(N.EQ.0)GO TO 106
IF(MASTER(K-1).EQ.1)GO TO 77
IF(MASTER(K-1).NE.2)GO TO 76
IF(MASTER(K-2).LE.MORE)GO TO 76
J=MOST+1
I=J+2
INDEX=K-2
MASTER(I)=MASTER(INDEX)
MASTER(I-1)=IREPT
MASTER(J)=MULT
GO TO 60
77 NEW=MASTER(K-2)
GO TO 79
78 NEW=MASTER(NEW)
79 IF(NEW.LT.0)GO TO 81
IF(NEW.EQ.0)GO TO 76
C
C DUPLICATE IMMEDIATE REFERENCE
KOUNT=NEW
NEW=NEW/8080
IF(NEW.LE.MORE)GO TO 78
M=-MASTER(NEW)
L=NEW+(IREPT*MULT)
IF(M.GT.0)MASTER(M)=-L
MASTER(L)=-M
80 IF(NEW.EQ.L)GO TO 78
KOUNT=KOUNT+(8080*MULT)
MASTER(NEW)=KOUNT
NEW=NEW+MULT
GO TO 80
C
C DUPLICATE STORAGE CELL REFERENCE
81 NEW=-NEW
M=NEW+1
L=MASTER(M)
82 M=M-2
IF(M.EQ.L)GO TO 76
IF(MASTER(M).LE.MORE)GO TO 82
IF(MOST.GE.(LEAST-IREPT))GO TO 104
J=MOST+1
I=MOST+IREPT+IREPT
KOUNT=I
NUMBER=MASTER(M)
83 NUMBER=NUMBER+MULT
MASTER(KOUNT)=NUMBER
MASTER(KOUNT-1)=MASTER(M-1)
KOUNT=KOUNT-2
IF(KOUNT.GE.J)GO TO 83
GO TO 61
C
C ENTER HERE TO PERFORM XSY OR XAD
84 NUMBER=KSIGN
C
C ENTER HERE TO REMOVE SINGLE CELL FROM DICTIONARY
C NUMBER POINTS TO TOP (POINTER) OF THIS CELL
85 IF(NUMBER.LE.LEAST)GO TO 106
LEAST=NUMBER
LIMIT=MASTER(NUMBER)
I=21
J=LNGMIN
IF(LNGMIN.GT.NUMBER)GO TO 88
LNGMIN=NUMBER
86 I=I-1
IF(I.EQ.0)GO TO 87
J=LENGTH(I)
IF(J.GT.NUMBER)GO TO 88
LENGTH(I)=0
GO TO 86
87 J=MAX
88 LSTNEW=J
J=MASTER(J)
IF(J.GT.NUMBER)GO TO 88
LSTNEW=LSTNEW-1
IF(LIMIT.EQ.(NUMBER-1))GO TO 95
GO TO 90
89 LIMIT=MASTER(NUMBER)
IF(LIMIT.LE.0)GO TO 105
IF(LIMIT.EQ.(NUMBER-1))GO TO 95
INDEX=MASTER(NUMBER-1)
IF(INDEX.NE.0)GO TO 96
C ADJUST BYTE PATTERN POINTERS
90 IF(IADDRS.LT.LEAST)IADDRS=IADDRS+NUMBER-LIMIT
IF(IARG.EQ.0)GO TO 91
IF(IARG.LT.LEAST)IARG=IARG+NUMBER-LIMIT
91 IF(IIARG.EQ.0)GO TO 92
IF(IIARG.LT.LEAST)IIARG=IIARG+NUMBER-LIMIT
92 IF(MASK.GT.LEAST)GO TO 95
IF(IMASK.GT.LEAST)GO TO 95
IF(MASK.EQ.0)GO TO 93
MASK=MASK+NUMBER-LIMIT
LMASK=LMASK+NUMBER-LIMIT
IF(IMASK.NE.0)GO TO 94
93 IF(IMASK.EQ.0)GO TO 95
LMASK=LMASK+NUMBER-LIMIT
94 IMASK=IMASK+NUMBER-LIMIT
95 NUMBER=LIMIT
GO TO 89
96 LSTNEW=LEAST-1
MASTER(NUMBER)=LEAST+LIMIT-NUMBER
IF(INDEX.GT.0)GO TO 97
INDEX=-INDEX
MASTER(INDEX)=1-LEAST
IF(LNGMIN.EQ.LEAST)LNGMIN=LNGMIN+LIMIT-NUMBER
GO TO 101
97 J=NUMBER-LIMIT-3
IF(J.GT.20)J=20
IF(J.LT.I)GO TO 98
IF(I.NE.J)LENGTH(J)=LEAST
LNGMIN=LEAST+LIMIT-NUMBER
I=J
GO TO 99
98 I=21
99 IF(INDEX.EQ.1)GO TO 100
IF(INDEX.EQ.2)GO TO 100
IF(INDEX.EQ.29)GO TO 100
IF(INDEX.EQ.66)GO TO 100
IF(INDEX.NE.8)GO TO 101
100 INDEX=MASTER(NUMBER-2)
IF(INDEX.GE.0)GO TO 101
INDEX=-INDEX
MASTER(INDEX)=2-LEAST
101 MASTER(LEAST)=MASTER(NUMBER)
LEAST=LEAST-1
NUMBER=NUMBER-1
IF(NUMBER.LE.LIMIT)GO TO 89
GO TO 101
C
C ERROR RETURNS
102 WRITE(ITTY,103)
103 FORMAT(1X,34HINCORRECT BIT OPERATOR DESTINATION)
KODE=10
GO TO 106
104 KODE=11
C
C RETURN TO MAIN PROGRAM
105 MASTER(LEAST)=0
106 RETURN
END