*COMDECK AGR
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.AGR - ACTIVATE GROUP
*CALL CMMCOM
          COMMENT  "SUBSYS"ACTIVATE GROUP.
          B1=1
 CMM.AGR  SPACE  4
***       CMM.AGR - ACTIVATE GROUP. 
* 
* 
*              A NEW LOGICAL BLOCK GROUP IS ACTIVATED AND A GROUP-ID
*         UNIQUELY IDENTIFING THIS GROUP IS CREATED.  THIS GROUP-ID 
*         WILL BE A POSITIVE INTEGER.  THE GROUP REMAINS ACTIVE UNTIL 
*         A CALL OF FREE-GROUP WITH THIS GROUP-ID IS MADE.  DURING
*         THE PERIOD IT IS ACTIVE, BLOCKS MAY BE ALLOCATED AS MEMBERS 
*         OF THIS GROUP.  BLOCKS WHICH ARE ALLOCATED AS MEMBERS OF TYPE 
*         1 GROUPS MUST HAVE A LIFETIME SHORTER THAN THE NEXT INCREASE
*         IN THE SIZE OF THE STATIC AREA, AND WILL BE PREFERENTIALLY
*         ALLOCATED BELOW HHA.
* 
*         ENTRY  (X1) = GROUP-TYPE. 
* 
*         EXIT   (X2) = GROUP-ID. 
*                (B1) = 1.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
  
  
          CMMENT  AGR 
 CMM.AGR  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          RJ     =XCMM.ICM   INITIALIZE AND SET A0
          SX6    3RAGR       SAVE FUNCTION NAME 
          SA6    A0-MNFNAME 
          SA2    CMM.AGR     SAVE RETURN ADDRESS
          LX2    30 
          BX6    X2 
          SA6    A0-MNRETURN
  
 IS       IFSAFE
          SA2    A0-IMAPM 
          ZR     X2,AGR102
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE
  
 AGR102   MX6    -1 
          BX6    X6*X1
          ZR     X6,AGR103   IF GROUP-TYPE 0 OR 1 
          UERR   CMEGT,0     IMPROPERLY SPECIFIED GROUP-TYPE
  
 AGR103   BSS    0
 IS       ENDIF 
  
          SX6    X1          SAVE GROUP-TYPE
          SA2    A0-P.GID    LOOK FOR UNUSED, BUT ALLOCATED, ENTRY
          SA3    X2+B1        IN P.GID
          AX2    18 
          SB4    X2 
 AGR2     ZR     B4,AGR4     IF NO MORE ENTRIES 
          SA3    A3-B1
          SB4    B4-B1
          NZ     X3,AGR2     IF ENTRY BEING USED
          SB7    A3          (B7) = ADDRESS OF FREE ENTRY 
          EQ     AGR6        GO ADD NEW ENTRY 
  
 AGR4     SX1    P.GID        ? ADD ONE WORD
          SX2    B1           ? TO GROUP-ID INTERNAL BLOCK
          RJ     =XCMM.CIA   -- CHANGE INTERNAL AREA -- 
 AGR6     SA1    A0-GROUPID   GET NEXT VALUE FOR GROUP-ID 
          SX7    X1+B1
          BX2    X7          SET RETURN 
          SA7    A1 
          LX6    59          FORM GROUP-ID TABLE ENTRY
          LX7    36 
          BX6    X6+X7
          SA6    B7          STORE AT SPOT FOR NEW ENTRY
          SA3    A0-MNSAVEA0  RESTORE A0
          SA0    X3 
          EQ     CMM.AGR     RETURN, (X2) = GROUP-ID
  
