*COMDECK DOE
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.DOE - DELETE OVERFLOW 
,ENTRY
*CALL CMMCOM
          COMMENT  "SUBSYS"DELETE OVERFLOW ENTRY. 
          B1=1
 CMM.DOE  SPACE  4,10 
***       CMM.DOE - DELETE OVERFLOW ENTRY.
* 
* 
*              IF THE ENTRY-ID VALUE IDENTIFIES AN ENTRY NOW IN THE 
*         OVERFLOW-ACTION STACK, THEN THAT ENTRY IS DELETED FROM THE
*         STACK (IT NEED NOT NECESSARILY BE THE ONE ON THE TOP OF THE 
*         STACK).  IF THE ENTRY-ID VALUE DOES NOT IDENTIFY AN ENTRY NOW 
*         IN THE STACK, THEN NO ACTION OCCURS.
* 
*         ENTRY  (X1) = BITS 59-17 -- ZERO. 
*                       BITS 16-0  -- ENTRY-ID. 
* 
*         EXIT   (B1) = 1.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
  
  
          CMMENT  DOE 
 CMM.DOE  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          SA2    RA65 
          SX6    A0          SAVE A0
          BX2    -X2
  
 IS       IFSAFE
          SX1    X1 
          SX2    X2 
          PL     X2,DOE102
          UERR   CMEFST,0,3RDOE  ILLEGAL 1ST CALL TO CMM
  
 DOE102   BSS    0
 IS       ENDIF 
  
          SA3    X2          (A0) = FL
          SA0    X3 
          SA6    A0-MNSAVEA0  SAVE A0 
          SB4    X1          (B4) = ENTRY-ID
  
 IS       IFSAFE
          SX7    3RDOE       SAVE FUNCTION NAME 
          SA7    A0-MNFNAME 
          SA3    CMM.DOE     SAVE RETURN ADDRESS
          LX3    30 
          BX6    X3 
          SA6    A0-MNRETURN
          SA4    A0-IMAPM 
          ZR     X4,DOE104
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE
  
 DOE104   SA2    A0-ENTRYID  VERIFY ENTRY-ID IN RANGE OF VALUES 
          SB5    X2           ALREADY RETURNED BY CMM 
          LT     B4,B1,DOE105  IF ENTRY-ID @ 0
          LE     B4,B5,DOE106  IF @ LAST ONE RETURNED 
 DOE105   UERR   CMENEID,0   NON-EXISTENT ENTRY-ID
  
 DOE106   BSS    0
 IS       ENDIF 
  
*         REMOVE SPECIFIED ENTRY BY SHIFTING DOWN BY ONE ENTRY, ALL 
*         THOSE ENTRIES ABOVE THE ONE BEING REMOVED.  NOTE THAT DUE 
*         TO THE LAYOUT OF THE INTERNAL TABLES, LOGICAL DOWN WITHIN 
*         THE TABLE ACTUALLY MEANS TO A HIGHER ADDRESS IN CORE. 
  
          SA2    A0-P.OAS 
          SB7    B1+B1       (B7) = 2 
          SX1    -B7         (X1) = NO. OF WORDS IN P.OAS TO MOVE DOWN
          SB6    X2 
          AX2    18          (B5) = P.OAS SIZE
          SB5    X2 
          SA3    B6-B5       TOP-1 ENTRY
          SX4    B4          (X4) = ENTRY-ID
          SX2    A3+B1        ? (X2) = SOURCE ADDRESS 
 DOE4     ZR     B5,DOE8     IF ALREADY REMOVED FROM O-A STACK
          SA3    A3+B7       NEXT-LOWER ENTRY 
          SX1    X1+B7        ? (X1) = COUNT OF WORDS TO MOVE DOWN
          AX3    36          COMPARE ENTRY-ID 
          SB5    B5-B7
          SX3    X3 
          IX6    X4-X3
          NZ     X6,DOE4     IF NO MATCH
          SX3    X2+B7        ? (X3) = DESTINATION ADDRESS
          RJ     =XMVE=      -- MOVE DATA --
          SX1    P.OAS        ? (X1) = INTERNAL TABLE NUMBER
          SX2    -2           ? (X2) = ENTRY SIZE 
          RJ     =XCMM.CIA   -- CHANGE INTERNAL AREA -- 
 DOE8     SA2    A0-MNSAVEA0  RESTORE A0
          SA0    X2 
          EQ     CMM.DOE     RETURN 
  
