*DECK CMMFFA
          IDENT  CMM.FFA
  
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.FFA - FIXED FREE ALGOR
,ITHM 
*CALL CMMCOM
          COMMENT  "SUBSYS"FIXED FREE ALGORITHM.
          B1=1
 CMM.FFA  SPACE  4
**        CMM.FFA - FIXED FREE ALGORITHM. 
* 
* 
*              THIS ROUTINE IS CALLED AFTER SPACE HAS BEEN FREED FROM 
*         A FIXED BLOCK. IT TRYS TO REDUCE THE FL.
* 
*         ENTRY  (B1) = 1.
*                (A0) = FL. 
* 
*         EXIT   (B1) = 1.
*                (A0) = FL. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
  
  
          ENTRY  CMM.FFA
 CMM.FFA  EQ     *+400000B   ENTRY / EXIT 
          SA2    A0-OP1 
          NZ     X2,CMM.FFA  IF IN NO-READJUSTMENT PERIOD 
  
*         IF HIGHEST BLOCK IS VARIABLE, CALL CMM.VFA IF PRESENT;
*         OTHERWISE USE THE FIXED BLOCK ALGORITHM.
  
          SA2    A0-B1
          SA3    X2 
          AX3    18 
          SX4    X3 
          IX7    X2-X4       SIZE OF HIGHEST REGION 
          SA1    X4          EXAMINE HIGHEST REGION 
          ID     X1,CMM.FFA  IF HIGHEST REGION IS A FIXED BLOCK 
          SB7    B0          SET FOR NO FREE SPACE AT END 
          MI     X1,FFA2     IF HIGHEST REGION IS VP REGION 
          SB7    X7          SET FREE SPACE = HIGHEST FREE REGION SIZE
          LX1    -18
          SA1    X1          EXAMINE 2ND-HIGHEST REGION 
          ID     X1,FFA4     IF 2ND-HIGHEST IS A FIXED BLOCK
 FFA2     BSS    0
          SX6    =YCMM.VFA
          MI     X6,FFA4     IF CMM.VFA NOT PRESENT 
          RJ     =YCMM.VFA   -- VARIABLE FREE ALGORITHM --
          EQ     CMM.FFA     RETURN 
  
 FFA4     SA3    A0-FLF.C    (B6) = EXCESS REQUIRED FOR FL REDUCTION
          SB6    X3 
          SX4    B6-B7        ? (X4) = -(AMOUNT TO REDUCE)
          PL     X4,CMM.FFA  IF NOT WORTH REDUCING
          RJ     =XCMM.CFL   -- CHANGE FL DOWN -- 
          EQ     CMM.FFA     RETURN 
  
          END 
