*DECK C$DAEX
          IDENT  C$DAEX 
          TITLE  CBDAEX - DIRECT ACCESS ERROR EXIT ROUTINE
  
          MACHINE  ANY,I
          COMMENT  DIRECT ACCESS ERROR EXIT 
          SST 
          B1=1
          SPACE  4
**        CBHAEX - DIRECT ACCESS ERROR EXIT ROUTINE 
* 
*         CALLING SEQUENCE
*                CALLED BY CRM WHEN ERROR EXIT IS ENTERED 
* 
*         DOES   GOES TO INVALID KEY IF THE ERROR IS A VALID INVALID KEY
*                ELSE, GOES TO C.EX 
* 
*         USES   ES FIELD IN FIT - REGISTERS NOT IMPORTANT
* 
  
  
          ENTRY  C.DAEX 
 C.DAEX   DATA   0
 CDCS     IFNE   OP.DCS,OP.NO,1 
          RJ     =XC.A0B1    RESTORE A0 AND B1 (IF CDCS CALL) 
          SB3    B0 
          RJ     =XC.SETKY   RESET KEY TO PRIME KEY AND REY OF REF TO SA
          FETCH  A0,ES,X5    GET CRM ERROR CODE 
          SX6    X5-166B     SEE IF ERROR 166 - INCOMPLETE FIT
          NZ     X6,NOT166   JUMP IF NOT SO 
          FETCH  A0,PD,X4,4  GET PROCESSING DIRECTION 
          SX6    X4-#OUTPUT#
          NZ     X6,NOT166   SKIP IF NOT OPENED FOR OUTPUT
          FETCH  A0,HMB,X4,4  GET BLOCK COUNT (HOME BLOCKS) 
          NZ     X4,NOT166   SKIP IF IT IS SET
          SX1    #DAOC1      OPEN OUTPUT WITH HBM NOT SET - ILLEGAL 
          RJ     =XC.FIOER   GIVE DIAG AND ABORT
 NOT166   BSS    0
          SB3    INVKTBS     SIZE OF TABLE
          MX6    30 
          SA2    INVKTB 
 FINDIK   BSS    0           LOOK FOR KEY IN TABLE
          SA2    B3+INVKTB-1
          SB3    B3-B1
          BX3    -X6*X2 
          IX3    X3-X5
          ZR     X3,INVKFND  JUMP IF IT IS AN INV KEY 
          NZ     B3,FINDIK   JUMP IF TABLE HAS SOME LEFT
          RJ     =XC.EX      ERROR - NOT AN INVALID KEY 
          EQ     C.DAEX      CONTINUE IF AN ACCEPTABLE ERROR
 INVKFND  BSS    0
          AX2    30          POSITION STATUS CODE 
          BX1    -X6*X2 
          EQ     =XC.INVKY   GO TO INVALID KEY PROCESS
* 
*       THE INVALID KEY TABLE HAS THE FILE STATUS CODE IN DISPLAY CODE I
*       IN BITS 41-30 AND THE CRM ERROR CODE IN THE LOWER 30 (IN BINARY)
* 
 INVKTB   BSS    0
          VFD    30/2R24,30/253B   FILE LIMITS EXCEEDED 
          VFD    30/2R21,30/304B  OFV BLOCKS
          VFD    30/2R22,30/446B  DUPLICATE KEY 
          VFD    30/2R22,30/503B  DUPLICATE KEY ON ALT KEY
          VFD    30/2R23,30/506B  NO ALT KEY FOUND
          VFD    30/2R23,30/445B  NO KEY FOUND
 INVKTBS  EQU    *-INVKTB 
          END 
