*DECK S$CMGFS 
          IDENT  S$CMGFS
          TITLE  S$CMGFS - GET MAX AVAILABLE FIXED BLOCK SIZE 
          COMMENT  GET MAX AVAILABLE FIXED BLOCK SIZE 
  
**        S$CMGFS - GET MAXIMUM AVAILABLE FIXED BLOCK SIZE
* 
*    CALLING SEQUENCE - 
*         S$CMGFS (MAXFREE, FL, GT, MINFREE); 
*            MAXFREE    I 
* 
*    GIVEN -
*         FL = FIELD LENGTH FLAG, 
*              FL = 0   SIZE RETURNED ASSUMES NO FL INCREASE
*                       IS ALLOWED
*              FL = 1   SIZE RETURNED IS THAT WHICH WOULD 
*                       CAUSE FL TO EQUAL MAXFL 
*         GT = GROUP TYPE FLAG, 
*              GT = 0   GROUP TYPE 0 BLOCK
*              GT = 1   GROUP TYPE 1 BLOCK
*         MINFREE = BARE MINIMUM BLOCK SIZE NEEDED
* 
*    DOES - 
*         GETS MAXIMUM AVAILABLE FIXED BLOCK SIZE 
*         USING THE CMM FUNCTION 'CMM.GFS'
*         IF THIS MAXFREE IS LESS THAN MINFREE, THEN
*             IF A USER-RECOVERY ROUTINE HAS NOT BEEN SUPPLIED, THEN
*                 ISSUE FATAL MESSAGE 
*                 ABORT 
*             ELSE
*                 ISSUE WARNING MESSAGE 
*                 MAXFREE = MINFREE 
*                 (I.E. ASSUME ENOUGH MEMORY WILL BE RELEASED BY THE
*                  CMM OWNCODE USER-RECOVERY ROUTINE OR CMM OVERFLOW
*                  ACTION PROCEDURE.  IF IT WON'T, USER WILL GET
*                  *CMM MEMORY INSUFFICIENT* ERROR (OR SOME SIMILAR) )
* 
*    USES - 
*         THE CMM FUNCTION 'CMM.GFS'
  
  
          ENTRY  S$CMGFS
 S$CMGFS  SUBR
          SB2    X1 
          SA0    A1 
          SA1    A0+1        ADDRESS OF FL
          SA1    X1          X1 = FL
          SA2    A0+2        ADDRESS OF GT
          SA2    X2          X2 = GT
          SA5    A0+3        ADDRESS OF MINFREE 
          SA5    X5          X5 = MINFREE 
          RJ     =XCMM.GFS   SET X6 = AVAILABLE FIXED BLOCK SIZE
          *SAVES A0,X0,B2,B3,X5 
          SA6    B2 
          IX0    X6-X5
          IFTHEN X0<0 
            SA1    RA+65B    LOWER 18 BITS POINTS TO -DABA
            BX1    -X1       LOWER 18 BITS POINTS TO  DABA
            SA2    X1        X2 = FIELD LENGTH
            SA3    X1-OWNFG  ADDRESS OF CMM OWNCODE PROCEDURE 
            SA4    X1-ENTRYID NUMBER OF OVERFLOW ROUTINES 
            IFTHEN X3=0 
             ANDIF X4=0 
              MESSAGE (=C$SORT5 - INSUFFICIENT CMM SPACE AVAILABLE$),,R 
              MESSAGE (=C$SORT5 - NO CMM RECOVERY ROUTINE, AND$),,R 
              MESSAGE (=C$SORT5 - NO OVERFLOW ACTION ROUTINE$),,R 
              MESSAGE (=C$SORT5 - JOB ABORTED$),,R
              ABORT 
            ELSE- 
              BX6    X5      SET MAXFREE TO MINFREE 
              SA6    B2 
              MESSAGE (=C$SORT5 - MAY NOT HAVE ENOUGH CMM SPACE$),,R
              MESSAGE (=C$SORT5 - ATTEMPTING TO FREE SPACE BY$),,R
              MESSAGE (=C$SORT5 - USING CMM RECOVERY ROUTINE, OR$),,R 
              MESSAGE (=C$SORT5 - OVERFLOW ACTION ROUTINE$),,R
              ENDIF.
            ENDIF.
  
 OWNFG    EQU    30B         <FIELD LENGTH> - OWNFG   IS ZERO, OR 
                             ADDRESS CMM OWNCODE RECOVERY PROCEDURE 
 ENTRYID  EQU    13B         <FIELD LENGTH> - ENTRYID IS NUMBER OF
                             OVERFLOW ACTION PROCEDURES PUSHED
 RA       EQU    0           TO CLARIFY REFERENCES TO ABSOLUTE ADDRESSES
          EXIT
          END 
