*DECK DB$MFI
          IDENT  DB$MFI 
*#
* *   DB$MFI -- INITIALIZE CMM OWN.EXIT          PAGE  1
* *   C O GIMBER                                 5/26/77
* 
* DC  PURPOSE 
* 
*     CALL CMM TO INITIALIZE CMM OWN.EXIT SO THAT CDCS CAN
*     ABORT INDIVIDUAL USER JOBS IF A CMM REQUEST CANNOT BE 
*     SATISFIED EVEN WITH ALL OVERFLOW ACTION TAKEN.
* 
* DC  DESCRIPTION 
* 
*     DB$MFI IS CALLED BY CDCS INITIALIZATION.
*     DB$MFI CALLS CMM.OWN SO THAT CMM WILL JUMP TO AN INTERNAL 
*       LOCATION WITHIN DB$MFI BEFORE ABORTING THE CONTROL POINT
*     ON THE JUMP TO THE INTERNAL LOCATION: 
*       THE CMM REQUEST ADDRESS IS SAVED AND CHECKED FOR THE EXISTENCE
*         OF ERROR NUMBERS. 
*       IF THE LEFT-MOST 30 BITS ARE NON-ZERO, A SYSTEM ERROR HAS 
*         OCCURRED, AND DB$MFO9 IS CALLED TO ABORT CDCS.
*         A MEMORY ERROR CODE 3 MEANS "OVERFLOW ACTIONS EXHAUSTED". 
*         IT IS HANDLED THE SAME AS NO ERROR. 
*       IF THE LEFT-MOST 30 BITS ARE ZERO, A CHECK IS MADE TO SEE IF
*         THE USER'S REQUEST (DB$MFRQ) EXCEEDS HALF THE AVAILABLE 
*         MEMORY (DB$MFMX) AND IF SO, CALL DB$MFO8 TO ABORT THE USER. 
*       OTHERWISE, JUMP TO THE ROUTINE SPECIFIED BY DB$MFPA TO HANDLE 
*         THE MEMORY OVERFLOW.
*#
          ENTRY  DB$MFMX
          ENTRY  DB$MFPA
          ENTRY  DB$MFRA
          ENTRY  DB$MFRQ
          ENTRY DB$MFI
DB$MFI    EQ   *+1S17 
          SX1    OWNEXIT
          RJ   =XCMM.OWN
          EQ   DB$MFI 
*#
* 
*     CMM-OWN CODE ROUTINE
*         IF SYSTEM ERROR, THEN ABORT CDCS. 
*         IT IS POSSIBLE THAT AN FDL AND/OR AAM REQUEST WAS IN PROCESS. 
*           NOTIFY FDL AND AAM THAT ANY REQUEST IN PROCESS IS BEING 
*           ABANDONED.
*         IF USER REQUESTS MORE THAN HALF THE AVAILABLE MEMORY, ABORT 
*           THE USER. 
*         OTHERWISE, JUMP TO ROUTINE SPECIFIED BY DB$MFPA.
*#
OWNEXIT   BSS    0
          BX6    X1 
          SA6    DB$MFRA
          RJ   DB$MFI              RESTORE CMM.OWN EXIT MODE
          SA1    DB$MFRA
          AX1    30 
          LX1    -18
          ZR   X1,OWNEXIT1         IF ZERO, NOT A SYSTEM ERROR
          MX2    -2                X2 = -3
          IX1    X1+X2             CODE 3 IS AN EXPECTED ERROR
          ZR   X1,OWNEXIT1
          MX2    -1                X2 = -1
          IX1    X1+X2             CODE 4 IS A TOLERATED ERROR
          ZR   X1,OWNEXIT1
          RJ   =XDB$MFO9           ABORT CDCS 
  
OWNEXIT1  BSS    0
  
          SX1    =YFDL.ROS
          MI   X1,NOROS 
          RJ   =YFDL.ROS           NOTIFY FDL OF POSSIBLE ABANDONMENT 
NOROS     BSS    0
  
          SA1    =XCMMX.AA         LINKAGE TO CMMX$AA 
          SA2    RJWORD 
          SX1    X1 
          MX0    -1 
          IX3    X1+X0
          LX1    30 
          PL   X3,CMMXOK
          RJ   =XDB$MFO9           NOT LINKED TO CMMX$AA
  
CMMXOK    BX6    X2+X1
          SA6    CMMXRJ 
          RJ   CMMXVS              RJ TO VOID THE STACK 
CMMXVS    EQ   *+1S17 
CMMXRJ    RJ   *+1S17              NOTIFY AAM OF POSSIBLE ABANDONMENT 
  
          SA1    DB$MFRQ           SIZE OF USER REQUEST 
          SA2    DB$MFMX           MAXIMUM MEMORY AVAILABILITY
          IX1    X1+X1
          IX1    X2-X1
          PL   X1,OWNEXIT2         IF POSITIVE,GO TO CONTENTS OF DB$MFPA
          RJ   =XDB$MFO8           ABORT THE USER 
  
OWNEXIT2  SA1    DB$MFPA           GET JUMP ADDRESS 
          SA2    OWNEXIT4          GET RJ INSTRUCTION 
          MX6    18 
          LX1    30                PUT ADDR IN UPPER HALF OF WORD 
          LX6    48 
          BX6    -X6*X2            CLEAR THE OLD ADDRESS
          BX6    X6+X1             PUT THE NEW ADDRESS IN THE RJ WORD 
          SA6    A2 
          RJ   OWNEXIT3            RJ TO VOID THE STACK 
  
OWNEXIT3  EQ   *+1S17 
OWNEXIT4  RJ   *+1S17              WILL RJ TO CONTENTS OF DB$MFPA 
  
RJWORD    RJ     0                 A DUMMY RJ WORD FOR MODIFICATION 
  
DB$MFMX   BSS    1                 MAXIMUM MEMORY AVAILABILITY
DB$MFPA   BSS    1                 ADDR OF PROC TO HANDLE MEMORY OVERFLW
DB$MFRA   BSS    1                 CMM REQUEST ADDRESS
DB$MFRQ   BSS    1                 SIZE OF CURRENT MEMORY REQUEST 
          END 
