*DECK GMEMCMM 
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
USETEXT COMACBX 
FUNC GMEMCMM ((ADR),L) U; 
# TITLE GMEMCMM - OBTAIN MEMORY VIA CYBER MEMORY MANAGER. # 
  
        BEGIN    # GMEMCMM #
  
# 
**    GMEMCMM     RELEASE AND OBTAIN MEMORY.
* 
*     GMEMCMM CALLS COMMON MEMORY MANAGER TO RELEASE MEMORY CURRENTLY 
*     ASSIGNED AND TO OBTAIN THE AMOUNT OF MEMORY REQUESTED.
* 
*     FUNC GMEMCMM ((ADR), L) U 
* 
*     ENTRY      ADR = FWA OF CURRENTLY ASSIGNED BLOCK (TO BE RELEASED).
*                    = 0, IF NO BLOCK CURRENTLY ASSIGNED. 
*                L   = LENGTH OF BLOCK REQUIRED.
* 
*     EXIT       GMEMCMM = FWA OF BLOCK OBTAINED. 
* 
*     PROCESS    IF ADR NON-ZERO, 
*                  CALL RMEMCMM TO RELEASE CURRENT BLOCK (SETS ADR = 0).
*                CALL CMMALF TO OBTAIN NEW BLOCK
*                GMEMCMM = FWA OF BLOCK.
# 
  
      ITEM ADR        U;           # ADDR OF BLOCK TO RELEASE # 
      ITEM L          U;           # LENGTH OF BLOCK NEEDED # 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CMMALF;               # CMM ROUTINE TO ALLOCATE MEMORY # 
        FUNC RMEMCMM    U;         # FREE CMM-ALLOCATED MEMORY #
        END 
# 
****  XREF END
# 
  
                                               CONTROL EJECT; 
      IF  ADR  NE  0
      THEN
        BEGIN 
        ADR  =   RMEMCMM(ADR);      # FREE MEMORY CURRENTLY ASSIGNED #
        END 
  
      CMMALF (L, 0, GROUPNAME, ADR);
      GMEMCMM = ADR;
  
      END      # GMEMCMM #
  
      TERM
