Google
 

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