*COMDECK DUA
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.DUA - DELETE UNL-ACT S
,UBR
*CALL CMMCOM
          COMMENT  "SUBSYS"DELETE UNLOAD-ACTION SUBR. 
          B1=1
 CMM.DUA  SPACE  4
***       CMM.DUA - DELETE UNLOAD-ACTION SUBR.
* 
* 
*              THIS CALL CAUSES THE IDENTIFIED TABLE ENTRY TO BE
*         DELETED IF PENDING.  IF THE IDENTIFIED ENTRY IS NOT IN THE
*         TABLE, NO ACTION OCCURS.
* 
*         ENTRY  (X1) = BITS 59-17 -- ZERO. 
*                       BITS 16-0  -- UNLOAD-ID.
* 
*         EXIT   (B1) = 1.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
  
  
          CMMENT  DUA 
 CMM.DUA  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          SX7    A0 
          SA2    RA65 
          BX2    -X2
  
 IS       IFSAFE
          SX2    X2 
          PL     X2,DUA102
          UERR   CMEFST,0,3RDUA  ILLEGAL 1ST CALL TO CMM
  
 DUA102   BSS    0
 IS       ENDIF 
  
          SA3    X2          (A0) = FL
          SA0    X3 
          SA7    A0-MNSAVEA0  SAVE A0 
          SB5    X1          (B5) = UNLOAD-ID 
  
 IS       IFSAFE
          SX6    3RDUA       SAVE FUNCTION NAME 
          SA6    A0-MNFNAME 
          SA3    CMM.DUA     SAVE RETURN ADDRESS
          LX3    30 
          BX6    X3 
          SA6    A0-MNRETURN
          SA2    A0-IMAPM 
          ZR     X2,DUA104
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE
  
 DUA104   SA4    A0-UNLOADID  LAST (HIGHEST) UNLOAD-ID ASSIGNED 
          SB7    X4 
          GT     B5,B7,DUA105  IF UNLOAD-ID NEVER ASSIGNED
          GE     B5,B1,DUA106  IF NOT TOO SMALL 
 DUA105   UERR   CMENUID,0   NON-EXISTENT UNLOAD-ID 
  
 DUA106   BSS    0
 IS       ENDIF 
  
*         DELETE ENTRY FROM UNLOAD-ACTION TABLE BY SEARCHING FROM THE 
*         END OF THE TABLE FORWARD AND MOVING THE CORRECT NUMBER OF 
*         ENTRIES UP SO AS TO BE ABLE TO FREE THE LAST ENTRY VIA
*         CMM.CIA.
  
          SB4    B1+B1       (B4) = 2 
          SA1    A0-P.UAS 
          SB6    X1+B4       (B6) = 1ST-1 ENTRY 
          AX1    18 
          SB7    X1 
          SB7    B6-B7       (B7) = LAST ENTRY
          SX2    B7-B1        ? (X2) = LWA OF TABLE = FWA OF MOVE 
          SX1    -B4          ? (X1) = WORD COUNT FOR MOVE
 DUA4     EQ     B6,B7,DUA8  IF ENTRY NO LONGER PRESENT 
          SA3    B7          NEXT ENTRY FROM END
          SX1    X1+B4       ADVANCE WORD COUNT 
          AX3    36 
          SB7    X3 
          EQ     B7,B5,DUA5  IF DESIRED ENTRY 
          SB7    A3+B4
          EQ     DUA4        LOOP 
  
 DUA5     SX3    X2+B4        ? (X3) = DESTINATION = SOURCE + 2 
          RJ     =XMVE=      -- MOVE DATA --
          SX1    P.UAS        ? BLOCK NUMBER
          SX2    -B4          ? DELETE 2 WORDS
          RJ     =XCMM.CIA   -- CHANGE INTERNAL AREA -- 
 DUA8     SA2    A0-MNSAVEA0  RESTORE A0
          SA0    X2 
          EQ     CMM.DUA     RETURN 
  
