*DECK CMM$ALF 
          IDENT  S$CMALF
          TITLE  S$CMALF -  ALLOCATE FIXED BLOCK
          COMMENT  ALLOCATE FIXED BLOCK 
          SPACE  4
**        S$CMALF -  ALLOCATE FIXED BLOCK 
* 
*     CALLING SEQUENCE- 
*         S$CMALF(P<ARRAY>, SIZE, CODE, ID);
* 
*     GIVEN-
*         SIZE = NUMBER OF WORDS TO BE ALLOCATED
*         CODE = 3-BIT CODE INDICATING THE PERMITTED BLOCK SIZE 
*          VARIATIONS: 000 INDICATES FIXED; A 1 IN ANY POSITION 
*          INDICATES VARYING AS EXPLAINED BELOW. EACH BIT INDICATES 
*          WHETHER A PARTICULAR END OF THE BLOCK CAN MOVE; THE LEFTMOST 
*          BIT IS USED FOR THE FIRST WORD ADDRESS END OF THE BLOCK; 
*          THE SECOND AND THIRD BITS ARE USED FOR THE LAST WORD ADDRESS 
*          END OF THE BLOCK.
*                1XX  FWA CAN INCREASE, SHRINKING BLOCK SIZE
*                X1X  LWA CAN DECREASE, SHRINKING BLOCK SIZE
*                XX1  LWA CAN INCREASE, INCREASING BLOCK SIZE 
*         ID = GROUP ID.  IF THE BLOCK DOES NOT BELONG TO A GROUP, ID=0.
* 
*     DOES- 
*         SETS P<ARRAY> SUCH THAT A REFERENCE TO *ARRAY* WILL REFER TO
*          THE ALLOCATED AREA.
  
  
          ENTRY  S$CMALF
 S$CMALF  SUBR
          SX6    A0          PRESERVE CALLERS F.P. LIST POINTER 
          SA6    SAVEA0 
          SA0    A1          SAVE ADDRESS OF ACTUAL PARAMETER LIST
          SA2    A0+1        ADDRESS OF SIZE
          SA2    X2          X2 = SIZE
          SA3    A0+2        ADDRESS OF CODE
          SA3    X3          CODE 
          MX0    -3          77777777777777777770B
          BX3    -X0*X3      KEEP ONLY RIGHT 3 BITS OF CODE 
          LX3    6           SIZE-CODE IN BITS 11-6 
          SA4    A0+3        ADDRESS OF ID
          SA4    X4          ID 
          MX0    -17         77777777777777400000B
          BX4    -X0*X4      KEEP ONLY RIGHT 17 BITS OF ID
          LX4    12          GROUP-ID IN BITS 28-12 
          BX3    X4+X3       X3 = GROUP-ID, SIZE-CODE 
          CALL   CMM.ALF     SET X1 = BLOCK-FWA 
         *SAVES  A0,X0,B2,B3,X5 
          BX6    X1          BLOCK-FWA
          SA1    A0          ADDRESS OF P<ARRAY>
          SA6    X1          P<ARRAY> := BLOCK-FWA
          SA3    SAVEA0      RESTORE CALLERS F.P. LIST POINTER
          SA0    X3 
          EXIT
          SPACE  4
 SAVEA0   BSS    1           CELL TO PRESERVE CALLERS F.P. POINTER
  
          END 
