*DECK CMM$AFF 
          IDENT  CMM$AFF     ALLOCATES/FREES A FIXED-POSITION BLOCK 
 CMM$AFF  TITLE  CMM$AFF - ALLOCATE/FREE A FIXED BLOCK
          COMMENT **** CMM TRACE CODE PRESENT                        ***
          COMMENT  ALLOCATE/FREE A FIXED BLOCK
          SPACE  2
          ENTRY  QU$ALF 
                             THIS FUNCTION ALLOCATES SPACE FOR A FIXED- 
                             POSITION BLOCK, WITH A GIVEN SIZE-CODE,
                             WITHIN A GIVEN GROUP, AND RETURNS ITS
                             FIRST-WORD-ADDRESS.
                             CALLING SEQUENCE IS
  
                               <BLOCK-FWA> = CMM$ALF(<BLOCK-SIZE>,
                                                     <SIZE-CODE>, 
                                                     <GROUP-ID>)
QU$ALF    DATA   0
          SA2    QU$ALF      SAVE THE CALLERS ADDRESS FOR TRACE       **
          LX2    30                                                  ***
          SX6    X2-1                                                ***
          SA6    CMM$XYZ                                             ***
          SA2    X1          X2 = BLOCK-SIZE
          LX6    X2 
          SA6    SAVE        SAVE SIZE TO BE USED UPON RETURN FROM CMM
          SA3    A1+1 
          SA3    X3          X3 = SIZE-CODE 
          LX3    6           SIZE-CODE IN BITS 11-6 
          SA4    A1+2 
          SA4    X4          X4 = GROUP-ID
          LX4    12          GROUP-ID IN BITS 28-12 
          BX3    X3+X4       MERGE SIZE-CODE AND GROUP-ID IN X3 
          RJ     =XCMM.ALF
          SA2    CMM$PRS     FETCH PRESET VALUE 
          BX6    X1          CMM.ALF RETURNS BLOCK-FWA IN X1
          BX7    X2 
          SB1    1
          SA1    SAVE 
          ZR     X1,QU$ALF   NO MEMORY TO PRESET IF SIZE WAS ZERO 
          SB7    X1          GET SIZE IN LOOP CONTROL REGISTER
LOOP      SB7    B7-B1       COMPUTE ADDRESS OF WORD TO CLEAR 
          SA7    X6+B7
          GT     B7,B0,LOOP 
          BX7    -X7*X7      CLEAR CMM$PRS
          SA7    CMM$PRS
          EQ     QU$ALF 
  
SAVE      BSS    1
          ENTRY  CMM$PRS
CMM$PRS   DATA   0           CMM$ALF PRESETS TO THIS VALUE
          ENTRY  CMM$XYZ                                             ***
CMM$XYZ   DATA   0                                                   ***
          SPACE  2
          ENTRY  QU$FRF 
                             THIS PROCEDURE FREES A FIXED-POSITION BLOCK
                             WHOSE FIRST-WORD-ADDRESS IS GIVEN. 
                             CALLING SEQUENCE IS
  
                               CALL CMM$FRF(P<ARRAY>);
QU$FRF    DATA   0
          SA2    QU$FRF      SAVE THE CALLERS ADDRESS FOR TRACE 
          LX2    30                                                  ***
          SX6    X2-1                                                ***
          SA6    =XCMM$XYZ                                           ***
          SA1    X1 
          RJ     =XCMM.FRF
          EQ     QU$FRF 
          END 
