*COMDECK ALF
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.ALF - ALLOCATE FIXED
          IPARAMS 
 OPSYS    MICRO  1,7,*"OS.NAME"_"OS.VER"* 
*CALL CMMCOM
          COMMENT  "SUBSYS"ALLOCATE FIXED.
          B1=1
 CMM.ALF  SPACE  4
***       CMM.ALF - ALLOCATE FIXED. 
* 
* 
*              CMM.ALF ALLOCATES/CREATES A FIXED-POSITION BLOCK OF
*         THE SPECIFIED SIZE, RETURNING ITS FIRST WORD ADDRESS. 
*         THE INITIAL CONTENTS OF THE BLOCK ARE UNDEFINED.
*              IF GROUP-ID IS NON-ZERO, THE BLOCK IS ALLOCATED AS 
*         A MEMBER OF THE IDENTIFIED GROUP. 
*              CMM WILL POSITION EACH BLOCK SO AS TO GUARANTEE EIGHT
*         (8) WORDS PAST THE LWA OF THE BLOCK WHICH MAY BE FETCHED
*         WITHOUT CAUSING AN ADDRESS RANGE ERROR EXIT.
* 
*         ENTRY  (X2) = BLOCK-SIZE. 
*                (X3) = BITS 59-29 -- ZERO. 
*                       BITS 28-12 -- GROUP-ID. 
*                       BITS 11-6  -- SIZE-CODE.
*                       BITS  5-0  -- ZERO. 
* 
*         EXIT   (X1) = BLOCK-FWA.
*                (B1) = 1.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
          SPACE  4,8
**        ***** NOTES REGARDING REGISTER HANDLING FOR REFERENCE HERE
*         ***** AND FOR ALL OTHER FUNCTIONS:  
* 
*         1) IN FUNCTIONS WHICH CALL CMM.ICM, CMM.ICM WILL SAVE AND 
*            RESTORE ANY OF THE X-REGISTERS USED, I.E., THOSE WHICH 
*            NORMALLY CONTAIN THE ENTRY INFORMATION OF THE VARIOUS
*            FUNCTIONS. 
* 
*            CMM.ICM WILL SAVE A0 IN THE HIGH-CORE LOCATION MNSAVEA0, SO
*            THAT IT WILL GO THROUGH THE SAVE MECHANISM IF OVERFLOW 
*            ACTION TAKES PLACE.  UPON RETURN FROM CMM.ICM, A0 WILL 
*            CONTAIN THE FIELD LENGTH.
* 
*            THE FUNCTION MUST RESTORE A0 PRIOR TO ITS FINAL RETURN.
* 
*         2) IN FUNCTIONS WHICH DO NOT CALL CMM.ICM, IT IS THEIR
*            RESPONSIBILITY TO SAVE A0 AND RESTORE IT PRIOR TO
*            RETURNING.  IF THE FUNCTION IS ONE THAT MAY TRIGGER
*            OVERFLOW-ACTION, A0 MUST BE STORED AT MNSAVEA0, OTHERWISE, 
*            IT MAY BE STORED IN A LOCAL TEMP.
  
  
          CMMENT  ALF 
 CMM.ALF  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          RJ     =XCMM.ICM   INITIALIZE AND SET A0
          SX6    3RALF       SAVE FUNCTION NAME 
          SA6    A0-MNFNAME 
          SA1    CMM.ALF     SAVE RETURN ADDRESS
          LX1    30 
          BX6    X1 
          SA6    A0-MNRETURN
  
 IS       IFSAFE
          SA1    A0-IMAPM 
          ZR     X1,ALF102
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE
  
 ALF102   MX1    43 
          BX1    X1*X2       ONLY BITS 0-16 OF BLOCK SIZE LEGAL 
          ZR     X1,ALF104   JMP IF BLOCK SIZE OK 
          UERR   CMESIZE,0   SIZE < 0 
  
 ALF104   SA1    A0-P.ENDZ   CHECK IF FP LWA-END GROWTH BLOCK PRESENT 
          SA1    X1          TRAILER
 ALF105   LX1    -18
          SX1    X1 
          ZR     X1,ALF106   IF ALL REGIONS EXAMINED
          SA1    X1          NEXT HEADER
          BX6    X1 
          DF     X1,ALF105   IF NOT A FIXED BLOCK 
          LX6    59-45
          PL     X6,ALF106   IF LWA-END GROWTH NOT SPECIFIED
          UERR   CMEFPVS,0   NOT ALLOWED TO ALLOCATE A FIXED BLOCK
  
 ALF106   BX6    X3          GROUP-ID 
          AX6    12 
          SA1    A0-P.GID 
          SX6    X6 
          ZR     X6,ALF109   IF GROUP-ID NOT SPECIFIED
          SB6    X1          (B6) = FWA OF GID BLOCK
          AX1    18 
          SB7    X1          (B7) = LENGTH
 ALF107   NZ     B7,ALF108   IF MORE
          UERR   CMENGID,0   NON-ACTIVE GROUP-ID SPECIFIED
  
 ALF108   SA1    B6          NEXT ENTRY 
          SB6    B6-B1
          SB7    B7-B1
          AX1    36 
          SX1    X1 
          IX1    X1-X6
          NZ     X1,ALF107   IF NON-MATCH 
 ALF109   BSS    0
 IS       ENDIF 
  
*         STORE ARGUMENTS IN SAVE AREA. 
  
          BX6    X2          SIZE 
          MX7    -6          SIZE-CODE
          SA6    A0-SIZE                                                 CMM0008
          AX3    6
          BX7    -X7*X3 
  
 IS       IFSAFE
          SB5    X7-10B 
          MI     B5,ALF110
          UERR   CMESC,0     IMPROPERLY SPECIFIED SIZE-CODE 
  
 ALF110   BSS    0
 IS       ENDIF 
  
          AX3    6           GROUP-ID 
          SX6    X3 
          SA6    A0-GID                                                  F182CMM
          SA7    A0-SC                                                   F182CMM
          SX7    X2+B1       SIZE, INCLUDING HEADER 
          ZR     X6,ALF1     IF NO GROUP-ID 
          SX7    X7+B1       2-WORD HEADER NEEDED 
 ALF1     SA7    A0-TOTSIZE                                              F182CMM
          MX2    -17         CHECK RESULTING SIZE FOR SIGN OVERFLOW 
          BX2    X2*X7
          NZ     X2,ALF3     IF > 377777B ISSUE MEMORY ERROR
  
*         INITIAL #EASY# ATTEMPT. 
  
          RJ     ALFE 
          ZR     X1,ALF2     IF NOT SUCCESSFUL
          SA2    A0-MNSAVEA0  RESTORE A0
          SA0    X2 
          EQ     CMM.ALF     RETURN, (X1) = BLOCK-FWA 
  
*         IF OVERFLOW-ACTION CODE NOT PRESENT, CHECK DEFAULT TRIGGER
*         LEVEL AND, IF NOT REACHED, MAKE ONE TRY AT COMPLETING THE 
*         FUNCTION VIA THE #HARD# ATTEMPT.
  
 ALF2     SX2    =YCMM.GOA
          PL     X2,ALF10    IF OVERFLOW-ACTION CODE PRESENT
          SX1    B1           ? SO TO ABORT IF EXCEEDED 
          RJ     =XCMM.CUL   -- COMPUTE UTILIZATION LEVEL --
          RJ     ALFH 
          NZ     X1,ALF6     IF SUCCESSFUL
 ALF3     MERR   ERRFAIL     CANNOT COMPLETE, NOT ENOUGH MEMORY 
  
*         RETURN THRU SAVED RETURN ADDRESS.  ACTUAL WOULD BE
*         CHANGED IF OVERFLOW-ACTION PROCESSING EXECUTED THIS SAME
*         FUNCTION. 
  
 ALF6     SA2    A0-MNSAVEA0  RESTORE A0
          SA3    A0-MNRETURN  RETURN THRU SAVED RETURN ADDRESS
          SA0    X2 
          SB7    X3 
          JP     B7          RETURN, (X1) = BLOCK-FWA 
  
*         OVERFLOW-ACTION PROCESSING. 
  
 ALF10    SX1    ALFE         ? #EASY# PROCESSOR
          SX2    ALFH         ? #HARD# PROCESSOR
          SA3    A0-TOTSIZE   ? SPACE NEEDED
          RJ     =YCMM.GOA   -- GENERAL OVERFLOW ACTION --
          EQ     ALF6        GO TO RETURN 
  
 SIZE     EQU    MNARG1      EQUATES TO SAVE AREA 
 TOTSIZE  EQU    MNARG3      SIZE, INCLUDING HEADER                      F182CMM
 GID      EQU    MNARG4      GROUP-ID                                    F182CMM
 SC       EQU    MNARG5      SIZE-CODE                                   F182CMM
 GIDENT   EQU    MNARG6      GROUP-ID ENTRY FROM CMM INTERNAL BLOCK      F182CMM
 ALFESV   BSS    4           REGISTER SAVE AREA 
 ALFE     SPACE  4,25 
**        ALFE - EASY CASE SUBROUTINE FOR ALLOCATE FIXED. 
* 
* 
*         ENTRY  ARGUMENTS ARE IN SAVE AREA.
*                (B1) = 1.
*                (A0) = FL. 
* 
*         EXIT   (X1) = BLOCK-FWA IF SUCCESS. 
*                       0 IF FAILURE. 
*                (B1) = 1.
*                (A0) = FL. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 5, 6, 7.                                CMM0008
  
  
 ALFE     EQ     *+400000B   ENTRY / EXIT 
          BX6    X0          SAVE X0
          LX7    X5          SAVE X5
          SA6    ALFESV 
          SA7    A6+B1
          SX6    B2-B0       SAVE B2
          SX7    B3-B0       SAVE B3
          SA6    A7+B1
          SA7    A6+B1
          MX6    0           SET FOR NO GROUP-ID
          SX7    B0          SET FOR GROUP-TYPE = 0 
          SA2    A0-TOTSIZE  (X2) = LENGTH, INCLUDING HEADER
          SA3    A0-GID      GROUP-ID 
          ZR     X3,ALFE4    IF NO GROUP-ID 
          SA1    A0-P.GID 
          SB6    X1                                                      CMM0008
          MX4    1
 ALFE3    SA1    B6          FIND GROUP-ID IN INTERNAL TABLE             CMM0008
          SB6    B6-B1                                                   CMM0008
          SX0    A1 
          LX0    18 
          BX6    X1+X0
          BX7    X4*X1
          AX1    36 
          SX1    X1 
          IX1    X1-X3
          NZ     X1,ALFE3    IF MISS
 ALFE4    SA6    A0-GIDENT   SAVE GID TABLE ENTRY 
          LX7    1           SET GROUP-TYPE 
          SB7    X7 
  
*         BEGIN PROCESSING FOR LWA-END GROW BLOCK.
  
          SA4    A0-SC
          LX4    59-0 
          PL     X4,ALFE16   IF NOT LWA-END GROW BLOCK
          SB2    B0          SET NO AVAILABLE REGION
          SA4    A0-B1       INITIALIZE REGION SEARCH 
          SA4    X4 
          AX4    18 
          SA3    HHA         (B6) = MINIMUM ALLOWABLE FWA 
          SB6    X3+B1            = HHA+1 
          MX1    0           (X1) = 0 FOR NO FIND 
          ZR     B7,ALFE6    IF GROUP-TYPE 1
          SA3    RA65        (B6) = DABA+1
          BX3    -X3
          SB6    X3+B1
 ALFE6    ZR     X4,ALFE8    IF ALL REGIONS SEARCHED
          SA3    X4          NEXT REGION HEADER 
          LX3    -18         (X4) = POINTER TO NEXT LOWER REGION
          SX4    X3 
          LX3    18 
          ID     X3,ALFE8    IF FIXED BLOCK, TERMINATE SEARCH 
          MI     X3,ALFE6    IF VP REGION, CONTINUE SEARCH
          SB4    A3          (B4) = REGION FWA
          LT     B4,B6,ALFE10  IF BELOW MINIMUM ALLOWABLE 
          SB5    X3          (X0) = REGION SIZE 
          SX0    B5-B4
          IX7    X0-X2
          MI     X7,ALFE6    IF REGION TOO SMALL
          SB2    B4          SET AVAILABLE REGION 
          EQ     ALFE6       LOOP 
  
 ALFE8    ZR     B2,ALFE36   IF SPACE NOT FOUND 
          EQ     ALFE11 
  
 ALFE10   ZR     B2,ALFE12   IF SPACE NOT FOUND 
 ALFE11   SB7    B2          (B7) = FREE REGION FWA FOR BLOCK 
          EQ     ALFE30      GO SET UP BLOCK
  
 ALFE12   SX7    X3 
          IX7    X7-X2
          SB3    X7 
          GE     B3,B6,ALFE29  IF BLOCK CAN BE PLACED AT HHA+1
          EQ     ALFE36      FAILURE
  
*         BEGIN NORMAL FIXED BLOCK ALLOCATION.
  
 ALFE16   SA3    HHA         (B6) = HHA+1                                CMM0008
          SA1    RA65        START SEARCH AT FIRST REGION 
          BX1    -X1
          SB6    X3+B1                                                   CMM0008
          SB2    377700B     (B2) = MAX. VALUE FOR NO FWA RESTRICTION 
          SB5    X1+B1       (B5) = SEARCH POINTER                       CMM0008
          SA4    =XCMM.SBM   MAXIMUM SMALL BLOCK SIZE 
          SA3    A0-SIZE     ACTUAL BLOCK SIZE
          IX4    X4-X3       (MAX SMALL BLOCK SIZE) - (ACTUAL SIZE) 
          MI     X4,ALFE18   IF NOT A SMALL BLOCK 
          SA3    =XCMM.SBL   (B2) = SMALL BLOCK MEMORY LIMIT
          SB2    X3 
 ALFE18   SA3    B5          (X3) = REGION HEADER                        CMM0008
          SB5    X3          (B5) = POINTER TO NEXT REGION HEADER        CMM0008
          ZR     B5,ALFE26   IF AT TRAILER                               CMM0008
          SB4    A3          (B4) = FWA THIS REGION 
          NZ     B7,ALFE19   IF GROUP-TYPE 1                             CMM0008
          LT     B4,B6,ALFE18  IF REGION BELOW HHA
 ALFE19   MI     X3,ALFE18   IF NOT A FREE REGION 
          SX7    B5-B4       REGION SIZE                                 CMM0008
          IX1    X7-X2       (REGION SIZE) - (SPACE NEEDED) 
          MI     X1,ALFE18   IF FREE REGION NOT LARGE ENOUGH
          LT     B2,B4,ALFE26  IF ADDRESS TOO HIGH FOR A SMALL BLOCK
          SB7    A3          (B7) = FREE REGION FWA TO USE
          EQ     ALFE30      GO SET UP BLOCK
  
 ALFE26   MX1    0           SET RETURN FOR FAILURE 
          NZ     B7,ALFE36   IF GROUP-TYPE 1
  
*         CHECK FOR THE SPECIAL CASE OF A FREE REGION WITHIN WHICH, 
*         IS HHA+1.  IF THE AMOUNT OF SPACE BETWEEN HHA+1 AND THE END 
*         OF THIS REGION IS ENOUGH TO CONTAIN THE BLOCK, THEN THE 
*         BLOCK WILL BE PLACED AT HHA+1.  NOTE THAT THIS CAN ONLY 
*         APPLY TO A GROUP-TYPE 0 BLOCK, SINCE THIS REGION WOULD HAVE 
*         ALREADY BEEN FOUND IF THE BLOCK WERE GROUP-TYPE 1.  NOTE ALSO 
*         THAT THIS CASE MAY NOT BE RARE; SUCH AS IT WILL APPLY IF
*         THE VERY FIRST BLOCK TO BE ALLOCATED IS AN ORDINARY FIXED 
*         BLOCK WITH NO GROUP-ID. 
  
          SA3    RA65        (B3) = REGION FWA
          BX3    -X3
          SB3    X3+B1
 ALFE27   ZR     B3,ALFE36   IF NO SUCH FREE REGION 
          SA4    B3          NEXT REGION
          SB3    X4          (B3) = NEXT REGION FWA 
          SB4    A4          (B4) = REGION FWA
          GE     B4,B6,ALFE36  IF ORIGIN ABOVE HHA+1
          LT     B3,B6,ALFE27  IF REGION ENTIRELY BELOW HHA+1 
          MI     X4,ALFE36   IF NOT A FREE REGION 
          SB5    X2          CHECK SPACE ABOVE HHA+1
          SB5    B3-B5
          LT     B5,B6,ALFE36  IF REGION NOT LARGE ENOUGH 
          LT     B2,B6,ALFE36  IF (HHA+1) TOO HIGH FOR A SMALL BLOCK
  
*         FORM TWO FREE REGIONS FROM ONE.  B4 CONTAINS THE SINGLE 
*         FREE REGION HEADER.  B6 CONTAINS HHA+1. 
  
 ALFE29   SA1    B4 
          SX6    X1          FWD FOR HEADER AT HHA+1
          SX4    B4          BKD FOR HEADER AT HHA+1
          LX4    18 
          BX6    X6+X4       FWD + BKD
          SA6    B6          STORE NEW HEADER AT HHA+1
          SB5    X6          MODIFY FWD IN CURRENT FREE REGION HEADER 
          SX3    B5-B6
          IX7    X1-X3
          SA7    A1 
          SX3    B6-B4       MODIFY BKD IN NEXT REGION HEADER 
          LX3    18 
          SA2    X1 
          IX7    X2+X3
          SA7    A2 
          SB7    B6          SET UP BLOCK AT HHA+1
  
*         SET UP NEWLY-ALLOCATED FIXED BLOCK. 
*         B7 CONTAINS FWA OF FREE REGION. 
  
 ALFE30   SA2    A0-TOTSIZE  ADVANCE TOTAL OF ALLOCATED WORDS 
          SA3    A0-CURALL
          IX6    X2+X3
          SA6    A3 
          SA1    B7          FORM FIXED BLOCK HEADER
          MX3    2           ADD CODE 
          BX6    X1+X3
          SA4    A0-SC       ADD SIZE-CODE
          LX4    45 
          BX6    X6+X4
          SB6    X1          (X4) = EXCESS OF FREE REGION SIZE
          SX4    B6-B7              OVER SIZE OF BLOCK BEING FORMED 
          IX4    X4-X2
          ZR     X4,ALFE34   IF EXACT FIT 
          SX7    B6          FORM NEW FREE HEADER 
          SX3    B7 
          LX3    18 
          BX7    X7+X3
          SA7    B7+X2
          IX6    X6-X4       ADJUST FWD PTR FOR NEW FIXED BLOCK 
          SA5    B6          ADJUST BKD PTR IN NEXT REGION HEADER 
          LX2    18 
          IX7    X5+X2
          SA7    A5 
 ALFE34   SX1    B7+B1       SET BLOCK-FWA FOR RETURN                    CMM0008
          SA6    B7          STORE HEADER, WORD 0 
          SA5    A0-GIDENT
          ZR     X5,ALFE36   IF NO GROUP-ID SPECIFIED 
          SX3    B1          SET N = 1 TO INDICATE WORD 1 PRESENT 
          LX3    44 
          BX6    X6+X3
          SA6    A6 
          SX4    X5          INSERT NEW BLOCK IN CHAIN FOR THIS GROUP-ID
          BX2    X5           SO THAT IT IS THE 1ST ENTRY 
          AX2    18 
          MX0    -36
          BX6    X0*X5
          BX6    X6+X1
          SA6    X2 
          AX5    36          ADD VALUE OF GID 
          SX3    X5 
          LX3    36 
          BX7    X4+X3
          SX0    25B         ADD CODE 
          LX0    54 
          BX7    X7+X0
          SA7    X1 
          SX1    X1+B1       ADVANCE BLOCK-FWA DUE TO 2-WORD HEADER 
          ZR     X4,ALFE36   IF LAST (ONLY) ENTRY IN CHAIN
          SA2    X4          SET PROPER BKD POINTER IN NEXT ENTRY 
          SX7    X2 
          SX5    A7 
          LX5    18 
          BX7    X7+X5
          BX7    X7+X3
          BX7    X7+X0
          SA7    A2 
  
*         RESTORE REGISTERS AND EXIT.  (X1) = 0 OR BLOCK-FWA. 
  
 ALFE36   SA2    ALFESV      RESTORE X0 
          BX0    X2 
          SA5    A2+B1       RESTORE X5                                  CMM0008
          SA2    A5+B1       RESTORE B2                                  CMM0008
          SA3    A2+B1       RESTORE B3 
          SB2    X2-0 
          SB3    X3-0 
          EQ     ALFE        RETURN, (X1) = 0 OR BLOCK-FWA
 ALFH     SPACE  4,25 
**        ALFH - HARD CASE SUBROUTINE FOR ALLOCATE FIXED. 
* 
* 
*         ENTRY  ARGUMENTS ARE IN SAVE AREA.
*                (B1) = 1.
*                (A0) = FL. 
* 
*         EXIT   (X1) = BLOCK-FWA IF SUCCESS. 
*                       0 IF FAILURE. 
*                (B1) = 1.
*                (A0) = FL. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
  
  
 ALFH     EQ     *+400000B   ENTRY / EXIT 
          SA1    A0-B1       GET HEADER OF HIGHEST REGION 
          SA2    X1 
          AX2    18 
          SA3    X2 
          MX4    3
          BX4    X4*X3
          LX4    3
          SB7    X1          (B7) = LWA+1 OF HIGHEST REGION 
          SX4    X4-4 
          ZR     X4,ALFH10   IF PRIMARY VP REGION EXISTS
  
*         FIXED-BLOCK-ONLY CASE.
  
          MX4    0           K = 0
          SB5    X1          (B5) = LWA+1 OF HIGHEST REGION 
          MI     X3,ALFH4    IF HIGHEST REGION IS A FIXED BLOCK 
          SX2    X2 
          SB5    A3          (B5) = FWA OF HIGHEST (FREE) REGION
          IX4    X1-X2       K = SIZE OF FREE REGION
          SA1    A0-GIDENT
          MI     X1,ALFH4    IF GROUP-TYPE 1
          SA2    HHA         ADJ = (HIGHEST REGION LWA+1) - (HHA+1) 
          SB6    X2+B1
          SX2    B7-B6
          PL     X2,ALFH1    JP IF SOME ROOM ABOVE HHA
          BX4    X2          NO ROOM - GROW BY SPACE UP TO HHA
          EQ     ALFH4
  
 ALFH1    BSS    0
          IX6    X4-X2       K = MIN(K,ADJ) 
          BX2    X2-X4
          AX6    59 
          BX2    -X6*X2 
          BX4    X2-X4
 ALFH4    SA1    =XCMM.SBM   MAXIMUM SMALL BLOCK SIZE 
          SA3    A0-SIZE     ACTUAL BLOCK SIZE REQUESTED
          IX1    X1-X3       (MAX SMALL BLOCK SIZE) - (ACTUAL SIZE) 
          MI     X1,ALFH5    IF NOT A SMALL BLOCK 
          SA1    =XCMM.SBL   SMALL BLOCK MEMORY LIMIT 
          SB4    X1 
          LT     B4,B5,ALFH9  IF ADR TOO HIGH, *ALFH* CANNOT HELP,
                               SO JUST TRY *ALFE* ONE MORE TIME 
 ALFH5    SA1    A0-TOTSIZE 
          IX4    X1-X4       K = (BLOCK SIZE INCLUDING HEADER) - K
          SX2    A0 
          SA3    A0-MAXFL 
          IX3    X3-X2       MAXFL - FL 
          SA1    A0-FLINC.C 
          IX2    X4+X1       K + FLINC
          IX6    X2-X3       INC = MIN[(K+FLINC),(MAXFL-FL)]
          BX3    X3-X2
          AX6    59 
          BX3    -X6*X3 
          BX6    X3-X2
          IX7    X6-X4       AVAILABLE - NEEDED 
          MX1    0           SET FOR UNSUCCESSFUL RETURN
          MI     X7,ALFH9    MAKE ONE FINAL *EASY* ATTEMPT               CMMA026
          BX4    X6           ? (X4) = AMOUNT TO INCREASE 
          RJ     =XCMM.CFL   -- INCREASE FL --
 ALFH8    RJ     ALFE 
          NZ     X1,ALFH     IF OK, RETURN WITH (X1) = BLOCK-FWA
  
          IFFAST  1 
          ZR     X1,*+1S17   SYSTEM ERROR 
  
 IS       IFSAFE
          UERR   CMEDAO,0    SYS ERR - DYNAMIC AREA OVERWRITTEN 
  
 IS       ENDIF 
  
ALFH9     RJ     ALFE        EASY                                        CMMA026
          EQ     ALFH                                                    CMMA026
  
*         PROCESSING WHEN VARIABLE BLOCKS ARE PRESENT.
  
 ALFH10   BSS    0
          RJ     ALFE        TRY *ALFE*, AS IT MAY SUCCEED IF AN
          NZ     X1,ALFH      OVERFLOW-ACTION SUBR. FREED SPACE 
  
 IS       IFSAFE
          SX2    =YCMM.VAF
          PL     X2,ALFH102  IF VARIABLE BLOCK CODE PRESENT 
          UERR   CMENEED,3RVAF
  
 ALFH102  BSS    0
 IS       ENDIF 
  
          RJ     =YCMM.VAF   -- VP REGION CODE FOR ALLOCATE FIXED --
          NZ     X1,ALFH8    IF SUCCESS 
          EQ     ALFH        RETURN WITH FAILURE
          SPACE  4,10 
*         ALTERNATE ENTRY POINT TO CMM.ALF TO RETURN TO SCOPE 2 
*         OPERATING SYSTEM. 
  
 OS       IFC    EQ,*"OPSYS"*SCOPE 2* 
          CMMENT  AL2 
 CMM.AL2  BSS    0
          RJ     CMM.ALF
          MJ     440B        RETURN TO OU.UCMR
 OS       ENDIF 
  
