*COMDECK GOS
          TITLE  COMMON MEMORY MANAGER, V1.0, CMM.GOS - GET OVERFLOW STA
,TS 
*CALL CMMCOM
          COMMENT  "SUBSYS"GET OVERFLOW STATISTICS. 
          B1=1
 CMM.GOS  SPACE  4
***       CMM.GOS - GET OVERFLOW STATISTICS.
* 
* 
*              THE INFORMATION SHOWN BELOW IS RETURNED BY CMM.
*         THIS FUNCTION IS ESPECIALLY INTENDED FOR USE BY OVERFLOW- 
*         ACTION SUBROUTINES TO OBTAIN THE INFORMATION THEY NEED IN 
*         ORDER TO CHOOSE A PLAN FOR RECOVERY.
* 
*         ENTRY  NONE.
* 
*         EXIT   (B1) = 1.
*                (X1) = FWA OF THE FOLLOWING ARRAY: 
* 
*                WORD 0  - VALUE OF DABA. 
*                WORD 1  - VALUE OF HHA.
*                WORD 2  - VALUE OF FL. 
*                WORD 3  - VALUE OF MAXFL.
*                WORD 4  - CURRENT UTILIZATION LEVEL. 
*                WORD 5  - CURRENT TRIGGER LEVEL. 
*                WORD 6  - MAXIMUM AVAILABLE CONTIGUOUS WORDS BETWEEN 
*                          TWO BLOCKS.
*                WORD 7  - CURRENT CONTIGUOUS WORDS TRIGGER LEVEL.
*                WORD 8  - NUMBER OF ENTRIES IN THE OVERFLOW-ACTION 
*                          STACK. 
*                WORD 9  - NUMBER OF FIXED POSITION BLOCKS. 
*                WORD 10 - NUMBER OF VARIABLE POSITION BLOCKS.
*                WORD 11 - NUMBER OF ALLOCATED FIXED POSITION WORDS.
*                WORD 12 - NUMBER OF ALLOCATED VARIABLE POSITION WORDS. 
*                WORD 13 - NUMBER OF FREE AREAS.
*                WORD 14 - NUMBER OF FREE WORDS.
* 
*         SAVES  X - 0, 5.
*                B - 2, 3.
*                A - 0. 
  
  
          CMMENT  GOS 
 CMM.GOS  EQ     *+400000B   ENTRY / EXIT 
          SB1    1
          RJ     =XCMM.ICM   INITIALIZE AND SET A0
  
 IS       IFSAFE
          SX7    3RGOS       SAVE FUNCTION NAME 
          SA7    A0-MNFNAME 
          SA4    CMM.GOS     SAVE RETURN ADDRESS
          LX4    30 
          BX6    X4 
          SA6    A0-MNRETURN
          SA2    A0-IMAPM 
          ZR     X2,GOS102
          UERR   CMEPMR,0    CALLED FROM POINTER-MAINTENANCE ROUTINE
  
 GOS102   BSS    0
 IS       ENDIF 
  
*         GET KEY ADDRESSES.
  
          SX7    A0          FL 
          SA2    RA65        DABA 
          BX6    -X2
          SA7    AFL
          SA3    HHA         HHA
          SX6    X6 
          SA6    ADABA
          SA4    A0-MAXFL    MAXFL
          SX7    X3 
          BX6    X4 
          SA7    AHHA 
          SA6    AMAXFL 
  
*         GET CURRENT UTILIZATION LEVELS. 
  
          MX1    0            ? SO AS TO RETURN REGARDLESS
          RJ     =XCMM.CUL   -- COMPUTE UTILIZATION LEVEL --
          BX6    X1          UL 
          LX7    X2          MC 
          SA6    AUL
          SA7    AMC
  
*         GET TRIGGER LEVELS. 
  
          SA1    =0."DEFTRIG"  SET DEFAULT TRIGGER LEVEL
          SX6    B1          (X6) = DEFAULT CONTIGUOUS-WORDS TRIGGER
          SA2    A0-P.OAS 
          SB7    X2          (B7) = FETCH ADDRESS 
          AX2    18 
          SB6    X2          (B6) = REMAINING WORDS 
          SB5    B0          (B5) = O-A-S ENTRY COUNT 
          SB4    B1+B1       (B4) = 2 
          ZR     B6,GOS3     IF OV-ACTION STACK EMPTY 
          SA1    =1.0        SET MAXIMUM TRIGGER LEVEL
 GOS2     SA2    B7          NEXT O-A-S ENTRY 
          SB7    B7-B4
          SB6    B6-B4
          SB5    B5+B1
          SX4    X2          CONTIGUOUS TRIGGER THIS ENTRY
          IX7    X4-X6       SET MAX[(TC THIS ENTRY),TC]
          BX4    X4-X6
          AX7    59 
          BX4    -X7*X4 
          BX6    X4-X6
          SA3    A2-B1       TRIGGER-LEVEL THIS ENTRY 
          IX7    X1-X3       SET MIN[(TL THIS ENTRY),TL]
          BX3    X1-X3
          AX7    59 
          BX3    -X7*X3 
          BX1    X3-X1
          NZ     B6,GOS2     LOOP 
 GOS3     SA6    ATC         TC 
          BX7    X1          TL 
          SA7    ATL
          SX6    B5          OV-ACTION STACK SIZE 
          SA6    AOAS 
  
*         GET DYNAMIC AREA STATISTICS.
  
          SX7    B0          INITIALIZE NO. FIXED BLOCKS
          MX6    0           INITIALIZE NO. VARIABLE BLOCKS 
          SB4    B0          INITIALIZE NO. ALLOCATED FIXED WORDS 
          SB5    B0          INITIALIZE NO. ALLOCATED VARIABLE WORDS
          SB6    B1          INITIALIZE NO. FREE AREAS
          SA1    A0-MAXFL    INITIALIZE NO. FREE WORDS
          SX2    A0           = [MAXFL-FL] + [ENDZ-(DABA+1)]
          IX4    X1-X2
          SA3    A0-B1
          IX4    X4+X3
          SA1    RA65 
          BX1    -X1
          SX1    X1+B1       (X1) = DABA+1
          IX4    X4-X1
          SB7    X4 
 GOS4     SA2    X1          (X2) = NEXT HEADER 
          SX1    X2          (X1) = FWD 
          ZR     X1,GOS9     IF AT TRAILER
          MI     X2,GOS5     IF NOT A FREE REGION 
          SB6    B6+B1       ADVANCE FREE AREAS 
          EQ     GOS4        LOOP 
  
 GOS5     DF     X2,GOS6     IF VARIABLE REGION 
          SX7    X7+B1       ADVANCE FIXED BLOCKS 
          SX4    A2          BLOCK-SIZE = FWD - FWA 
          IX4    X1-X4
          SB4    B4+X4       ADVANCE FIXED WORDS
          BX4    -X4         REDUCE FREE WORDS
          SB7    B7+X4
          EQ     GOS4        LOOP 
  
 GOS6     SB5    B5+B1       ADD 1 VARIABLE-POS WORD FOR HEADER 
          SB7    B7-B1       SUBTRACT 1 FREE WORD FOR HEADER
          LX2    -36
          SX2    X2 
 GOS7     ZR     X2,GOS4     IF NO MORE BLOCKS IN REGION
          SA3    X2          (X3) = NEXT VP BLOCK HEADER WORD 0 
          SX2    X3          (X2) = FWD POINTER TO THE NEXT 
          SX6    X6+B1       ADVANCE VARIABLE BLOCKS
          AX3    36          (X3) = BLOCK LENGTH + 4-WD HEADER
          SX3    X3+4 
          SB5    B5+X3       ADVANCE VARIABLE WORDS 
          BX3    -X3         REDUCE FREE WORDS
          SB7    B7+X3
          EQ     GOS7        LOOP THRU VP REGION
  
 GOS9     SA7    AFB         NO. FIXED BLOCKS 
          SA6    AVB         NO. VARIABLE BLOCKS
          SX7    B4          NO. ALLOCATED FIXED WORDS
          SX6    B5          NO. ALLOCATED VARIABLE WORDS 
          SA7    AFW
          SA6    AVW
          SX7    B6          NO. FREE AREAS 
          SX6    B7          NO. FREE WORDS 
          SA7    AFRA 
          SA6    AFRW 
          SX1    AREA        (X1) = FWA RETURN AREA 
          SA4    A0-MNSAVEA0  RESTORE A0
          SA0    X4 
          EQ     CMM.GOS     RETURN 
  
*         RETURN AREA.
  
 AREA     BSS    0
 ADABA    BSS    1           DABA 
 AHHA     BSS    1           HHA
 AFL      BSS    1           FL 
 AMAXFL   BSS    1           MAXFL
 AUL      BSS    1           CURRENT UTILIZATION LEVEL
 ATL      BSS    1           CURRENT TRIGGER LEVEL
 AMC      BSS    1           CURRENT MAX. CONTIGUOUS FREE WORDS 
 ATC      BSS    1           CURRENT CONTIGUOUS WORDS TRIGGER LEVEL 
 AOAS     BSS    1           NO. OF ENTRIES IN OV-ACTION STACK
 AFB      BSS    1           NUMBER OF FIXED BLOCKS 
 AVB      BSS    1           NUMBER OF VARIABLE BLOCKS
 AFW      BSS    1           NUMBER OF ALLOCATED FIXED-POS WORDS
 AVW      BSS    1           NUMBER OF ALLOCATED VARIABLE-POS WORDS 
 AFRA     BSS    1           NUMBER OF FREE AREAS 
 AFRW     BSS    1           NUMBER OF FREE WORDS 
  
