*COMDECK  COMCMTP            MANAGED TABLE PROCESSORS.                   COMCMTP
 MTP      CTEXT  COMCMTP - MANAGED TABLE PROCESSORS.                     COMCMTP
 MTP      SPACE  4,10                                                    COMCMTP
          IF     -DEF,FTAB,1                                             COMCMTP
 TABLES   HERE                                                           COMCMTP
 MTP      SPACE  4,10                                                    COMCMTP
          IF     -DEF,QUAL$,1                                            COMCMTP
          QUAL   COMCMTP                                                 COMCMTP
          BASE   D                                                       COMCMTP
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1970, 1978.        COMCMTP
 MTP      SPACE  4,10                                                    COMCMTP
***       COMCMTP - MANAGED TABLE PROCESSORS.                            COMCMTP
*                                                                        COMCMTP
*         G. R. MANSFIELD.   70/12/20.                                   COMCMTP
*         G. M. TOWNSEND.    77/06/11.                                   COMCMTP
* 
*         ******************************************************* 
*         * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * 
*         * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING  * 
*         * MAINTAINED BY THE COMPASS PROJECT.  ANY CHANGES     * 
*         * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT  * 
*         * THROUGH THE PROPER PROCEDURE.                       * 
*         ******************************************************* 
* 
*                                                                        COMCMTP
*         COMCMTP CONTAINS ROUTINES FOR PROCESSING MANAGED TABLES.       COMCMTP
*         MACROS FOR CALLS AND GENERATION ARE CONTAINED IN COMCMTM.      COMCMTP
 MTP      SPACE  4,10                                                    COMCMTP
***       THE MANAGED TABLE PROCESSORS ALLOW THE PARTITIONING OF         COMCMTP
*         CENTRAL MEMORY INTO VARIABLE REGIONS (CALLED TABLES).          COMCMTP
*         THESE TABLES ARE REFERENCED BY POINTERS WHICH INDICATE         COMCMTP
*         THE FIRST ADDRESS OF THE TABLE AND THE TABLE LENGTH.           COMCMTP
*         MEMORY IS ALLOCATED TO EACH TABLE AS IT IS REQUIRED AND        COMCMTP
*         THE USER MAY DELETE SPACE FROM THE TABLES.  THE USER IS        COMCMTP
*         EXPECTED TO PROVIDE CERTAIN CONSTANTS FOR USE BY THE           COMCMTP
*         TABLE PROCESSORS.  EACH TABLE IS ALLOWED AT LEAST 1 WORD       COMCMTP
*         OF EXPANSION SPACE TO ALLOW A DUMMY WORD BETWEEN EACH          COMCMTP
*         TABLE.  THIS ALLOWS EFFICIENT SEARCH METHODS TO BE USED.       COMCMTP
*                                                                        COMCMTP
*                                                                        COMCMTP
*                                                                        COMCMTP
*                                                                        COMCMTP
*         DATA PROVIDED BY CALLER.                                       COMCMTP
*                                                                        COMCMTP
*         *MEML* = LOWEST ADDRESS OF MANAGED MEMORY.                     COMCMTP
*         *TOV*  = ADDRESS OF TABLE OVERFLOW PROCESSOR.                  COMCMTP
*                                                                        COMCMTP
*         DATA PROVIDED BY *COMCMTM*.                                    COMCMTP
*                                                                        COMCMTP
*         *NTAB* = NUMBER OF MANAGED TABLES.                             COMCMTP
*         *FTAB* = START OF TABLE ADDRESSES.                             COMCMTP
*         *LTAB* = START OF TABLE LENGTHS.                               COMCMTP
*         *F.TNAM* = ADDRESS POINTER FOR TABLE *TNAM*.                   COMCMTP
*         *L.TNAM* = LENGTH POINTER FOR TABLE *TNAM*.                    COMCMTP
*         *C.TNAM* = WORDS/ENTRY FOR SEARCH ROUTINES.                    COMCMTP
*                                                                        COMCMTP
*         DATA DYNAMICALLY CHANGABLE.                                    COMCMTP
*                                                                        COMCMTP
*         (TN) = NUMBER OF MANAGED TABLES.  SET TO *NTAB* BY             COMCMTP
*                *COMCMTM*.  VALUE MUST BE .LE. *NTAB* DURING USE.       COMCMTP
*         (TO) = TABLE OVERFLOW PROCESSOR.  SET TO *TOV* BY              COMCMTP
*                *COMCMTM*.                                              COMCMTP
*         (LM) = LOW MEMORY LIMIT.  VALUE SET TO *MEML* BY *COMCMTM*.    COMCMTP
*                IF THIS VALUE IS RAISED, *MTU* SHOULD BE CALLED         COMCMTP
*                TO ALLOW ROOM FOR CHANGE.                               COMCMTP
*         (F.TEND) = HIGH MEMORY LIMIT.  VALUE MUST BE INITIALIZED       COMCMTP
*                BY USER.  IF THIS VALUE IS LOWERED, *MTD* SHOULD        COMCMTP
*                BE CALLED TO ALLOW ROOM FOR CHANGE.                     COMCMTP
*         (TOVT) = *TOV* THRESHOLD.  IF THIS WORD IS DEFINED IT          COMCMTP
*                SHOULD CONTAIN THE THRESHOLD FOR CALLING *TOV*; *ATS*   COMCMTP
*                WILL CALL *TOV* WHEN TABLES MUST BE MOVED AND LESS      COMCMTP
*                THAN (TOVT) FREE WORDS REMAIN.  IF NOT DEFINED, AN      COMCMTP
*                EFFECTIVE VALUE OF ZERO IS USED.                        COMCMTP
 ADW      SPACE  4,10                                                    COMCMTP
***       ADW - ADD WORD TO TABLE.                                       COMCMTP
*                                                                        COMCMTP
*         ENTRY  (A0) = TABLE NUMBER.                                    COMCMTP
*                (X1) = WORD.                                            COMCMTP
*                                                                        COMCMTP
*         EXIT   (X1) = WORD.                                            COMCMTP
*                (X6) = WORD.                                            COMCMTP
*                (A6) = ADDRESS OF WORD.                                 COMCMTP
*                (X2) = FWA TABLE.                                       COMCMTP
*                (X3) = LENGTH OF TABLE.                                 COMCMTP
*                                                                        COMCMTP
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCMTP
*                B - NONE.                                               COMCMTP
*                A - 1, 2, 3, 4, 6, 7.                                   COMCMTP
*                                                                        COMCMTP
*         CALLS  ATS.                                                    COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 ADW1     BX6    X1          PLACE ENTRY IN TABLE                        COMCMTP
          IX7    X2+X3                                                   COMCMTP
          SA6    X7                                                      COMCMTP
          SX3    X3+B1                                                   COMCMTP
                                                                         COMCMTP
 ADW      SUBR               ENTRY/EXIT                                  COMCMTP
          SA2    FTAB+A0     SET TABLE DIFFERENTIAL                      COMCMTP
          SA4    A2+B1                                                   COMCMTP
          IX7    X4-X2                                                   COMCMTP
          SA3    LTAB+A0     CURRENT LENGTH                              COMCMTP
          SX6    X3+B1       ADD NEW ENTRY                               COMCMTP
          IX7    X6-X7                                                   COMCMTP
          SA6    A3          UPDATE LENGTH                               COMCMTP
          NG     X7,ADW1     IF ROOM FOR ENTRY + 1 WORD                  COMCMTP
          BX6    X1          SAVE ENTRY                                  COMCMTP
          LX7    X3          RESTORE LENGTH                              COMCMTP
          SA6    ADWA                                                    COMCMTP
          SA7    A3                                                      COMCMTP
          ALLOC  A0,1        ALLOCATE 1 WORD                             COMCMTP
          SA1    ADWA        RESTORE ENTRY                               COMCMTP
          SX3    X3-1        SET ORIGINAL LENGTH                         COMCMTP
          EQ     ADW1        PROCESS ENTRY                               COMCMTP
                                                                         COMCMTP
 ADWA     CON    0                                                       COMCMTP
 AMU      SPACE  4,10                                                    COMCMTP
***       AMU - ACCUMULATE MEMORY USED.                                  COMCMTP
*                                                                        COMCMTP
*         ENTRY  NONE.                                                   COMCMTP
*                                                                        COMCMTP
*         EXIT   MU = MAX(MU,CURRENT ASSIGNED LENGTH)                    COMCMTP
*                                                                        COMCMTP
*         USES   X - 1, 2, 3, 6.                                         COMCMTP
*                B - 2.                                                  COMCMTP
*                A - 1, 2, 6.                                            COMCMTP
*                                                                        COMCMTP
*         CALLS  NONE.                                                   COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 AMU1     IX6    X6+X2       ACCUMULATE LENGTH                           COMCMTP
          SB2    B2-B1                                                   COMCMTP
          SA2    A2+B1       NEXT TABLE                                  COMCMTP
          NE     B2,B1,AMU1  LOOP FOR ALL TABLES                         COMCMTP
          SA1    MU          SET MAX LENGTH                              COMCMTP
          IX3    X6-X1                                                   COMCMTP
          NG     X3,AMUX     RETURN                                      COMCMTP
          SA6    A1                                                      COMCMTP
                                                                         COMCMTP
 AMU      SUBR               ENTRY/EXIT                                  COMCMTP
          SA1    TN          (B2) = NUMBER OF TABLES                     COMCMTP
          MX6    0           CLEAR ACCUMULATION                          COMCMTP
          SB2    X1                                                      COMCMTP
          SA2    LTAB        FIRST TABLE                                 COMCMTP
          EQ     AMU1                                                    COMCMTP
 ATS      SPACE  4,10                                                    COMCMTP
***       ATS - ALLOCATE TABLE SPACE.                                    COMCMTP
*                                                                        COMCMTP
*         ENTRY  (A0) = TABLE INDEX.                                     COMCMTP
*                (X1) = CHANGE (+ OR -) TO TABLE SIZE.                   COMCMTP
*                                                                        COMCMTP
*         EXIT   (X1) = CHANGE.                                          COMCMTP
*                (X2) = FWA OF TABLE.                                    COMCMTP
*                (X3) = NEW LENGTH OF TABLE.                             COMCMTP
*                (X7) .LT. 0 IF TABLES MOVED.                            COMCMTP
*                                                                        COMCMTP
*         IF TABLES NOT MOVED -                                          COMCMTP
*         USES   X - 2, 3, 4, 6, 7.                                      COMCMTP
*                B - NONE.                                               COMCMTP
*                A - 2, 3, 4, 6.                                         COMCMTP
*                                                                        COMCMTP
*         IF TABLES MOVED -                                              COMCMTP
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.                             COMCMTP
*                B - 2, 3, 4, 5, 6, 7.                                   COMCMTP
*                A - 1, 2, 3, 4, 6, 7.                                   COMCMTP
*                                                                        COMCMTP
*         RESTORES X - 0, 1, 5.                                          COMCMTP
*                  B - 2, 3, 4, 5, 6, 7. (EXCEPT -0)                     COMCMTP
*                                                                        COMCMTP
*         CALLS  AMU, MVE=, TOV.                                         COMCMTP
*                                                                        COMCMTP
*         ENTRY CONDITIONS FOR USER ROUTINE *TOV*.                       COMCMTP
*                                                                        COMCMTP
*                (B1) = 1.                                               COMCMTP
*                (B5) = COMPLEMENT OF NUMBER OF WORDS REQUIRED.          COMCMTP
*                (B6) = RETURN ADDRESS TO CONTINUE PROCESSING, I.E.,     COMCMTP
*                       EXIT FROM *TOV* VIA  * JP B6 *  INSTRUCTION.     COMCMTP
*                                                                        COMCMTP
*                THE LOCATION *TOV* MUST CONTAIN EXECUTABLE CODE.  *TOV* COMCMTP
*                IS ENTERED VIA A *JP*, NOT VIA *RJ*.                    COMCMTP
*                                                                        COMCMTP
*         EXIT CONDITIONS FOR *TOV*.                                     COMCMTP
*                                                                        COMCMTP
*                ONLY B1 MUST BE PRESERVED.                              COMCMTP
*                                                                        COMCMTP
*                A POINTER WORD MUST BE INCREMENTED BY THE NUMBER OF     COMCMTP
*                WORDS NEWLY AVAILABLE.  IF *NT* HAS NOT BEEN ALTERED    COMCMTP
*                DURING EXECUTION, THE ADDRESS OF THE POINTER WORD IS    COMCMTP
*                *F.TEND*.                                               COMCMTP
*                IF *NT* HAS CHANGED, THE ADDRESS OF THE POINTER WORD    COMCMTP
*                = FTAB-1 PLUS THE CONTENTS OF *NT*.                     COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 ATS      SUBR               ENTRY/EXIT                                  COMCMTP
          SA2    FTAB+A0     CURRENT FWA                                 COMCMTP
          SA3    LTAB+A0     CURRENT LENGTH                              COMCMTP
          SA4    A2+B1       NEXT TABLE FWA                              COMCMTP
          IX6    X1+X3       NEW LENGTH                                  COMCMTP
          IX7    X4-X2       ROOM BETWEEN TABLES                         COMCMTP
          SA6    A3          SET NEW LENGTH                              COMCMTP
          IX7    X6-X7                                                   COMCMTP
          BX3    X6                                                      COMCMTP
          NG     X7,ATSX     IF ROOM FOR CHANGE + 1 WORD, RETURN         COMCMTP
          IX7    X6-X1       SET PREVIOUS LENGTH                         COMCMTP
                                                                         COMCMTP
*         INITIALIZE FOR TABLE MOVE.                                     COMCMTP
                                                                         COMCMTP
          BX6    X0          SAVE (X0)                                   COMCMTP
          SA7    A3                                                      COMCMTP
          SA6    ATSB                                                    COMCMTP
          BX7    X1          SAVE (X1)                                   COMCMTP
          LX6    X5          SAVE (X5)                                   COMCMTP
          SA7    A6+B1                                                   COMCMTP
          SA6    A7+B1                                                   COMCMTP
          SX7    B2          SAVE B REGISTERS                            COMCMTP
          SX6    B3                                                      COMCMTP
          SA7    A6+B1                                                   COMCMTP
          SA6    A7+B1                                                   COMCMTP
          SX7    B4                                                      COMCMTP
          SX6    B5                                                      COMCMTP
          SA7    A6+B1                                                   COMCMTP
          SA6    A7+B1                                                   COMCMTP
          SX7    B6                                                      COMCMTP
          SX6    B7                                                      COMCMTP
          SA7    A6+1                                                    COMCMTP
          SA6    A7+1                                                    COMCMTP
                                                                         COMCMTP
*         COMPUTE REMAINING TABLE SPACE.                                 COMCMTP
                                                                         COMCMTP
 ATS1     SA2    TN          (B2) = NUMBER OF TABLES                     COMCMTP
          SB2    X2                                                      COMCMTP
          IX4    X1+X2       LENGTH = NUMBER OF TABLES + INCREASE        COMCMTP
          SB3    B2-1                                                    COMCMTP
 ATS2     SB3    B3-B1       LENGTH = LENGTH + TABLE LENGTH              COMCMTP
          SA3    LTAB+B3                                                 COMCMTP
          IX4    X4+X3                                                   COMCMTP
          NZ     B3,ATS2     LOOP FOR ALL TABLES                         COMCMTP
          SA2    LM          SET AVAILABLE LENGTH                        COMCMTP
          SA3    FTAB-1+B2                                               COMCMTP
          IX6    X3-X2                                                   COMCMTP
          SB4    X4          (B4) = TOTAL ASSIGNED LENGTH                COMCMTP
          IX7    X6-X4                                                   COMCMTP
          SB5    X7          (B5) = REMAINING SPACE                      COMCMTP
 QUAL$    IF     DEF,TOVT                                                COMCMTP
          SA1    TOVT                                                    COMCMTP
          IX7    X7-X1       ALLOW FOR THRESHOLD                         COMCMTP
 QUAL$    ENDIF                                                          COMCMTP
          MI     X7,ATS9     IF BELOW THRESHOLD                          COMCMTP
          SA3    FTAB        SET MOVE OFFSET FOR FIRST TABLE             COMCMTP
          MX7    30                                                      COMCMTP
          IX4    X2-X3                                                   COMCMTP
          LX4    30                                                      COMCMTP
          BX4    X7*X4                                                   COMCMTP
          BX7    X3+X4                                                   COMCMTP
          SA7    A3                                                      COMCMTP
          SA1    ATSB+1      INCREMENT SIZE OF REQUESTED TABLE           COMCMTP
          SA2    LTAB+A0                                                 COMCMTP
          IX6    X2+X1                                                   COMCMTP
          SA6    A2                                                      COMCMTP
                                                                         COMCMTP
*         ALLOCATE SPACE BETWEEN TABLES: (LA/2N) + ((TL*LA)/2) + 1.      COMCMTP
*         DETERMINE NEW FWA AND TEMPORARILY SET DIRECTED DISTANCE        COMCMTP
*         (OFFSET) IN TOP HALF OF FWA WORD.                              COMCMTP
                                                                         COMCMTP
          SA1    FTAB-1+B2   (X0) = LWA+1 LAST TABLE                     COMCMTP
          SB6    B2-B1                                                   COMCMTP
          BX0    X1                                                      COMCMTP
 ATS3     SB6    B6-B1       I = I-1                                     COMCMTP
          SA2    FTAB+B6     FWA(I)                                      COMCMTP
          SX4    B5          LA (LENGTH AVAILABLE)                       COMCMTP
          SA1    LTAB+B6     TL (LENGTH OF TABLE)                        COMCMTP
          SX3    B2-B1       N  (NUMBER OF TABLES)                       COMCMTP
          AX5    X4,B1       LA/2                                        COMCMTP
          IX6    X4/X3       L1 = LA/N
          ZR     B4,ATS4     IF NO TABLES ASSIGNED, L = L1               COMCMTP
          SX3    B4          AL (TOTAL ASSIGNED LENGTH)                  COMCMTP
          IX7    X5*X1       (LA/2)*TL                                   COMCMTP
          AX6    1           L1 = LA/2N                                  COMCMTP
          IX7    X7/X3       L2 = (TL*LA)/2 
          IX6    X6+X7       L = L1+L2                                   COMCMTP
 ATS4     SX6    X6+B1       L = L+1                                     COMCMTP
          IX4    X0-X6       FWA(I+1) - L                                COMCMTP
          IX7    X4-X1       FWA(I) = FWA(I+1) - L - TL - 1              COMCMTP
          IX6    X7-X2       OFFSET TO NEW FWA                           COMCMTP
          MX3    30                                                      COMCMTP
          LX6    30          ADD OFFSET TO FWA WORD                      COMCMTP
          BX6    X3*X6                                                   COMCMTP
          LX0    X7          FWA(I+1) = FWA(I)                           COMCMTP
          BX6    X6+X2                                                   COMCMTP
          SA6    A2          30/OFFSET, 30/OLD FWA                       COMCMTP
          NE     B6,B1,ATS3  LOOP                                        COMCMTP
          SA1    ATSB+1                                                  COMCMTP
          SA2    LTAB+A0                                                 COMCMTP
          IX6    X2-X1       REMOVE INCREASE                             COMCMTP
          SA6    A2                                                      COMCMTP
                                                                         COMCMTP
*         MOVE TABLES.  FIRST START AT LAST TABLE AND MOVE ALL TABLES    COMCMTP
*         WHICH MOVE UP;  THEN START AT FIRST TABLE AND MOVE ALL WHICH   COMCMTP
*         MOVE DOWN.                                                     COMCMTP
                                                                         COMCMTP
          SB6    B2-B1                                                   COMCMTP
 ATS5     SB6    B6-B1                                                   COMCMTP
          SA3    FTAB+B6                                                 COMCMTP
          SX2    X3          CURRENT FWA                                 COMCMTP
          MI     X3,ATS6     IF MOVING DOWN                              COMCMTP
          AX3    30                                                      COMCMTP
          IX6    X2+X3       NEW FWA                                     COMCMTP
          ZR     X3,ATS6     IF NOT MOVING                               COMCMTP
          SA1    LTAB+B6     LENGTH                                      COMCMTP
          BX3    X6                                                      COMCMTP
          SA6    A3                                                      COMCMTP
          RJ     =XMVE=      MOVE TABLE                                  COMCMTP
 ATS6     NE     B6,B1,ATS5  IF MORE TABLES TO MOVE UP                   COMCMTP
          SB2    B2-B1                                                   COMCMTP
          SB6    B0                                                      COMCMTP
 ATS7     GE     B6,B2,ATS8  IF NO MORE TO MOVE UP                       COMCMTP
          SA3    FTAB+B6                                                 COMCMTP
          SB6    B6+B1                                                   COMCMTP
          PL     X3,ATS7     IF NOT MOVING DOWN                          COMCMTP
          SX2    X3          CURRENT FWA                                 COMCMTP
          SA1    LTAB+B6-1   LENGTH                                      CPSA104
          AX3    30                                                      COMCMTP
          IX6    X3+X2       NEW FWA                                     COMCMTP
          BX3    X6                                                      COMCMTP
          SA6    A3                                                      COMCMTP
          RJ     =XMVE=      MOVE TABLE                                  COMCMTP
          EQ     ATS7                                                    COMCMTP
                                                                         COMCMTP
*         RESTORE REGISTERS.                                             COMCMTP
                                                                         COMCMTP
 ATS8     RJ     AMU         ACCUMULATE MEMORY USED                      COMCMTP
          SA3    LTAB+A0     ADD INCREASE BACK TO SPECIFIED TABLE        COMCMTP
          SA1    ATSA        COUNT MOVES                                 COMCMTP
          SX6    X1+B1                                                   COMCMTP
          SA6    A1                                                      COMCMTP
          SA2    ATSB        RESTORE (X0)                                COMCMTP
          SA1    A2+B1       RESTORE (X1)                                COMCMTP
          IX6    X1+X3                                                   COMCMTP
          SA6    A3                                                      COMCMTP
          BX0    X2                                                      COMCMTP
          SA3    A1+B1       RESTORE (X5)                                COMCMTP
          SA2    A3+B1       RESTORE B REGISTERS                         COMCMTP
          BX5    X3                                                      COMCMTP
          SB2    X2                                                      COMCMTP
          SA3    A2+B1                                                   COMCMTP
          SB3    X3                                                      COMCMTP
          SA4    A3+B1                                                   COMCMTP
          SB4    X4                                                      COMCMTP
          SA2    A4+B1                                                   COMCMTP
          SB5    X2                                                      COMCMTP
          SA3    A2+B1                                                   COMCMTP
          SB6    X3                                                      COMCMTP
          SA4    A3+B1                                                   COMCMTP
          SB7    X4                                                      COMCMTP
          SA2    FTAB+A0     SET TABLE FWA                               COMCMTP
          SA3    LTAB+A0     SET TABLE LENGTH                            COMCMTP
          SX7    -B1         FLAG TABLES MOVED                           COMCMTP
          EQ     ATSX        RETURN                                      COMCMTP
                                                                         COMCMTP
*         PROCESS TABLE OVERFLOW.                                        COMCMTP
                                                                         COMCMTP
 ATS9     SA3    TO                                                      COMCMTP
          SB2    X3                                                      COMCMTP
          SX6    A0          PRESERVE (A0) FROM USER DEPREDATIONS        COMCMTP
          SB6    ATS10       PASS RETURN ADDRESS TO USER                 COMCMTP
          SA6    ATSC                                                    COMCMTP
          JP     B2                                                      COMCMTP
                                                                         COMCMTP
*         RETURN FROM USER ROUTINE *TOV*.                                COMCMTP
                                                                         COMCMTP
 ATS10    SA1    ATSC        RESTORE (A0), (X1)                          COMCMTP
          SA0    X1+                                                     COMCMTP
          SA1    ATSB+1                                                  COMCMTP
          EQ     ATS1        RE-COMPUTE WITH NEW MEMORY                  COMCMTP
                                                                         COMCMTP
 ATSA     CON    0           COUNT OF TABLE MOVES                        COMCMTP
                                                                         COMCMTP
 ATSB     CON    0,0,0       (X0, X1, X5) SAVE                           COMCMTP
          CON    0,0,0,0,0,0 (B2 - B7) SAVE                              COMCMTP
 ATSC     CON    0           (A0) SAVE IF TABLE OVERFLOW                 COMCMTP
 EQS      SPACE  4,10                                                    COMCMTP
***       EQS -  EQUALITY SEARCH TABLE.                                  COMCMTP
*                                                                        COMCMTP
*         ENTRY  (X6) = ENTRY FOR SEARCH.                                COMCMTP
*                (B7) = WORD COUNT/ENTRY.                                COMCMTP
*                (A0) = TABLE NUMBER.                                    COMCMTP
*                                                                        COMCMTP
*         EXIT   (X2) = ENTRY FOUND.                                     COMCMTP
*                                                                        COMCMTP
*         USES   X - 1, 2, 3, 7.                                         COMCMTP
*                B - NONE.                                               COMCMTP
*                A - 1, 2, 6.                                            COMCMTP
*                                                                        COMCMTP
*         CALLS  NONE.                                                   COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 EQS      SUBR               ENTRY/EXIT                                  COMCMTP
          SA1    FTAB+A0     SET TABLE PARAMETERS                        COMCMTP
          SA2    LTAB+A0                                                 COMCMTP
          IX3    X1+X2       SET SEARCH KEY IN LWA+1                     COMCMTP
          SA6    X3                                                      COMCMTP
          NO                                                             COMCMTP
          SA1    X1          FIRST ENTRY                                 COMCMTP
 +        BX2    X1-X6       COMPARE ENTRIES                             COMCMTP
          SA1    A1+B7       NEXT ENTRY                                  COMCMTP
          NZ     X2,*        LOOP TO MATCH                               COMCMTP
          SX7    A1-B7       CHECK SEARCH                                COMCMTP
          BX2    X7-X3                                                   COMCMTP
          ZR     X2,EQSX     IF NOT FOUND, RETURN                        COMCMTP
          SA2    A1-B7       RETURN ENTRY                                COMCMTP
          EQ     EQSX        RETURN                                      COMCMTP
 MES      SPACE  4,10                                                    COMCMTP
***       MES - MASKED EQUALITY SEARCH TABLE.                            COMCMTP
*                                                                        COMCMTP
*         ENTRY  (X6) = ENTRY FOR SEARCH.                                COMCMTP
*                (X0) = MASK.                                            COMCMTP
*                (B7) = WORD COUNT/ENTRY.                                COMCMTP
*                (A0) = TABLE NUMBER.                                    COMCMTP
*                                                                        COMCMTP
*         EXIT   (X2) = ENTRY FOUND.                                     COMCMTP
*                                                                        COMCMTP
*         USES   X - 1, 2, 3, 4, 7.                                      COMCMTP
*                B - NONE.                                               COMCMTP
*                A - 1, 2, 6.                                            COMCMTP
*                                                                        COMCMTP
*         CALLS  NONE.                                                   COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 MES1     BX4    X0*X2                                                   COMCMTP
          SA1    A1+B7       NEXT ENTRY                                  COMCMTP
          BX2    X6-X1       COMPARE ENTRIES                             COMCMTP
          NZ     X4,MES1     LOOP TO MATCH                               COMCMTP
          SX7    A1-B7       CHECK SEARCH                                COMCMTP
          BX2    X7-X3                                                   COMCMTP
          ZR     X2,MESX     IF NOT FOUND, RETURN                        COMCMTP
          SA2    X7+         RETURN ENTRY                                COMCMTP
                                                                         COMCMTP
 MES      SUBR               ENTRY/EXIT                                  COMCMTP
          SA1    FTAB+A0     SET TABLE PARAMETERS                        COMCMTP
          SA2    LTAB+A0                                                 COMCMTP
          IX3    X1+X2       SET SEARCH KEY IN LWA+1                     COMCMTP
          SA6    X3                                                      COMCMTP
          SA1    X1          FIRST ENTRY                                 COMCMTP
          BX2    X6-X1                                                   COMCMTP
          EQ     MES1                                                    COMCMTP
 MTD      SPACE  4,10                                                    COMCMTP
***       MTD - MOVE TABLES DOWN.                                        COMCMTP
*                                                                        COMCMTP
*         ENTRY  NONE.                                                   COMCMTP
*                                                                        COMCMTP
*         EXIT   (B2) = NUMBER OF TABLES.                                COMCMTP
*                                                                        COMCMTP
*         USES   X - 0, 1, 2, 3, 4, 7.                                   COMCMTP
*                B - 2, 3.                                               COMCMTP
*                A - 1, 2, 3, 7.                                         COMCMTP
*                                                                        COMCMTP
*         CALLS  MVE=.                                                   COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 MTD      SUBR               ENTRY/EXIT                                  COMCMTP
          SA1    LM          LOW MEMORY LIMIT                            COMCMTP
          SA2    TN          (B2) = NUMBER OF TABLES                     COMCMTP
          BX0    X1                                                      COMCMTP
          SB2    X2                                                      COMCMTP
          SB3    1                                                       COMCMTP
 MTD1     SA2    FTAB-1+B3   ORIGIN = PREVIOUS FWA                       COMCMTP
          SA3    LTAB-1+B3   WORD COUNT = LENGTH + 1                     COMCMTP
          BX4    X2-X0       MOVE DIFFERENTIAL                           COMCMTP
          SX1    X3+B1                                                   COMCMTP
          SX7    X0          SET NEW FWA                                 COMCMTP
          IX0    X0+X1       NEXT FWA                                    COMCMTP
          SB3    B3+B1       ADVANCE TABLE NUMBER                        COMCMTP
          ZR     X4,MTD2     IF NO MOVE REQUIRED                         COMCMTP
          SA7    A2                                                      COMCMTP
          SX3    X7          MOVE TABLE                                  COMCMTP
          RJ     =XMVE=                                                  COMCMTP
 MTD2     LT     B3,B2,MTD1  LOOP TO LAST TABLE                          COMCMTP
          EQ     MTDX        RETURN                                      COMCMTP
 MTU      SPACE  4,10                                                    COMCMTP
***       MTU - MOVE TABLES UP.                                          COMCMTP
*                                                                        COMCMTP
*         ENTRY  NONE.                                                   COMCMTP
*                                                                        COMCMTP
*         EXIT   NONE.                                                   COMCMTP
*                                                                        COMCMTP
*         USES   X - 0, 1, 2, 3, 7.                                      COMCMTP
*                B - 3.                                                  COMCMTP
*                A - 1, 2, 7.                                            COMCMTP
*                                                                        COMCMTP
*         CALLS  MVE=.                                                   COMCMTP
                                                                         COMCMTP
                                                                         COMCMTP
 MTU1     SB3    B3-B1       DECREMENT TABLE COUNT                       COMCMTP
          SA2    FTAB+B3                                                 COMCMTP
          SA1    LTAB+B3                                                 COMCMTP
          IX7    X0-X1       NEW FWA = L - LENGTH                        COMCMTP
          LX0    X7          L = NEW FWA                                 COMCMTP
          SA7    A2                                                      COMCMTP
          BX3    X0          MOVE TABLE                                  COMCMTP
          RJ     =XMVE=                                                  COMCMTP
          NZ     B3,MTU1                                                 COMCMTP
                                                                         COMCMTP
 MTU      SUBR               ENTRY/EXIT                                  COMCMTP
          SA1    F.TEND      (X0) = LWA+1 ALL TABLES (L)                 COMCMTP
          SB3    NTAB-1      (B3) = NUMBER OF TABLES - 1                 COMCMTP
          BX0    X1                                                      COMCMTP
          EQ     MTU1                                                    COMCMTP
 MTP      SPACE  4,10                                                    COMCMTP
          BASE   *                                                       COMCMTP
 QUAL$    IF     -DEF,QUAL$                                              COMCMTP
          QUAL   *                                                       COMCMTP
 ADW      EQU    /COMCMTP/ADW                                            COMCMTP
 AMU      EQU    /COMCMTP/AMU                                            COMCMTP
 ATS      EQU    /COMCMTP/ATS                                            COMCMTP
 EQS      EQU    /COMCMTP/EQS                                            COMCMTP
 MES      EQU    /COMCMTP/MES                                            COMCMTP
 MTD      EQU    /COMCMTP/MTD                                            COMCMTP
 MTU      EQU    /COMCMTP/MTU                                            COMCMTP
 QUAL$    ENDIF                                                          COMCMTP
 MTP      ENDX                                                           COMCMTP
