*DECK CHKCMM                       26MAY81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
      FUNC CHKCMM ((ADR), (L) ) U;
        BEGIN    # CHKCMM # 
# 
**    CHKCMM     RELEASE AND OBTAIN MEMORY. 
* 
*     CHKCMM CALLS COMMON MEMORY MANAGER TO RELEASE MEMORY CURRENTLY
*     ASSIGNED AND TO OBTAIN THE AMOUNT OF MEMORY REQUESTED.
* 
*     FUNC CHKCMM ((ADR), (L) ) U 
* 
*     ENTRY      ACN = APPLICATION CONNECTION NUMBER (AFT INDEX). 
*                FILECMM = GROUP ID (ASSIGNED BY CMM PREVIOUSLY). 
*                ADR = FWA OF CURRENTLY ASSIGNED BLOCK (TO BE RELEASED).
*                    = 0, IF NO BLOCK CURRENTLY ASSIGNED. 
*                L   = LENGTH OF BLOCK REQUIRED.
* 
*     EXIT       CHKCMM = FWA OF BLOCK OBTAINED, IF L NE 0, 
*                       = 0, IF L EQ 0. 
* 
*     PROCESS    IF ADR NON-ZERO: 
*                  CALL CMMFRF TO RELEASE CURRENT BLOCK.
*                CALL CMMALF TO OBTAIN NEW BLOCK
*                CHKCMM = 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 # 
        PROC CMMFRF;               # FREE CMM-ALLOCATED MEMORY #
        PROC NAME;                 # DEBUGGING TOOL # 
        END 
# 
****  XREF END
# 
  
  
  
        $BEGIN
        NAME("CHKCMM");              # DEBUG #
        $END
  
      IF ADR NE 0 
      THEN
        BEGIN 
        CMMFRF(ADR);               # FREE MEMORY CURRENTLY ASSIGNED # 
        END 
  
      IF L NE 0 
      THEN
        BEGIN 
        CMMALF(L, 0, FILECMM, ADR);  # GET NEW MEMORY # 
        CHKCMM = ADR; 
        END 
  
      ELSE
        BEGIN 
        CHKCMM = 0; 
        END 
  
      END      # CHKCMM # 
    TERM
