*DECK CMMVFA
          IDENT  CMM.VFA
  
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.VFA - VAR. FREE ALGORI
,THM
*CALL CMMCOM
          COMMENT  "SUBSYS"VARIABLE FREE ALGORITHM. 
          B1=1
 CMM.VFA  SPACE  4,10 
**        CMM.VFA - VARIABLE FREE ALGORITHM.
* 
* 
*              THIS ROUTINE IS CALLED AFTER A FREEING FUNCTION ON 
*         A VARIABLE BLOCK.  IT REDUCES THE FIELD LENGTH IF POSSIBLE. 
* 
*         ENTRY  (B1) = 1.
*                (A0) = FL. 
* 
*         EXIT   (B1) = 1.
*                (A0) = NEW FL. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 5, 6, 7. 
  
  
          ENTRY  CMM.VFA
 CMM.VFA  EQ     *+400000B   ENTRY / EXIT 
          SA1    A0-OP1 
          NZ     X1,CMM.VFA  IF IN NO-READJUSTMENT PERIOD 
          ERRNZ  P.ENDZ-1 
          SA2    A0-B1        ? (X1) = FWA PRIMARY VP REGION
          SA3    X2 
          AX3    18 
          SX1    X3 
          SX2    FLV1         ? (X2) = REQD AMT FOR REDUCTION TO OCCUR
          SB1    B0           ? (B1) = 0 - FL INCREASE NOT ALLOWED
          RJ     =XCMM.PMV   -- PROCESS MULTIPLE VARIABLE REGIONS --
          ZR     X6,CMM.VFA  RETURN IF FEWER THAN *FLV1* FREE WORDS 
          SX7    X7+FLV1     SAVE TOTAL FREE WORDS IN REGION
          SA7    VFAFR
          SX1    FLV2         ? (X1) = TOTAL FREE WORDS WHEN DONE 
          MX2    0            ? (X2) = 0 - NO CHANGE TO BLOCK TOTALS
          RJ     =XCMM.CRD   -- COMPUTE REGION DISTRIBUTION --
          SA6    VFAFX       SAVE FIXED BLOCK AMOUNT
          SA1    A0-B1        ? (X1) = LWA+1 PRIMARY VP REGION
          BX2    X6           ? (X2) = SPACE FOR POTENTIAL FIXED BLOCKS 
          SA4    VFAFR        ? (X3) = AMOUNT OF FREE SPACE TO RELEASE
          SX3    X4-FLV2             = (TOTAL FREE) - FLV2
          RJ     =XCMM.RVR   -- REARRANGE VARIABLE REGION --
          SA1    A0-B1        ? (X1) = FWA OF PRIMARY VP REGION 
          SA1    X1 
          AX1    18 
          SX1    X1 
          SA2    VFAFX        ? (X2) = SPACE FOR POTENTIAL FIXED BLOCKS 
          RJ     =XCMM.AFR   -- ADD FREE REGION --
          SA4    VFAFR        ? (X4) = -(AMOUNT TO DECREASE FL) 
          SX3    FLV2                = -[(TOTAL FREE)-FLV2] 
          IX4    X3-X4
          RJ     =XCMM.CFL   -- CHANGE FIELD LENGTH --
          EQ     CMM.VFA     RETURN 
  
 VFAFR    BSS    1           TOTAL FREE SPACE IN REGION BEFORE REDUCTION
 VFAFX    BSS    1           RE-DISTRIBUTION AMOUNT FOR FIXED BLOCKS
  
          END 
