*DECK C$DAOC
          IDENT  C$DAOC 
          TITLE  C$DAOC - DIRECT ACCESS OPEN, CLOSE 
  
          MACHINE  ANY,I
          COMMENT  DIRECT ACCESS OPEN, CLOSE
          SST 
          B1=1
          SPACE  4
**        CBDAOC - DIRECT ACCESS I-O OPEN CLOSE 
* 
*         CALLING SEQUENCE
*            C.OPDA 
*                SB6  RETURN ADDRESS
*                SB5  C.OPX - X = IN, OUT, OR IO
*                SA0  ADDR OF FIT 
*                EQ   =XC.OPDA
* 
*            C.CLODA
*                SB6  RETURN ADDRESS
*                SB3  REWIND OPT - #R# IF NORMAL, #LOCK# IF LOCK
*                SA0  ADDR OF FIT 
*                EQ   =XC.CLODA 
* 
*         DOES  - ROUTES ALL REQUESTS TO CRM
*         USES   - ALL REGISTERS EXCEPT A0
* 
  
  
*CALL IOMICROS
  
*CALL IODEFSC 
 C.OPIDA  EJECT 
          ENTRY  C.OPNDA
 C.OPNDA  BSS    0           OPEN NEW (OUTPUT)
          STORE  A0,HMB=X1   SET NBR OF HOME BLOCKS 
          ENTRY  C.OPDA 
 C.OPDA   BSS    0
          FETCH  A0,USHA,X5  GET HASHING DECLARATIVE ORD IF THERE 
          ZR     X5,NOHASH   JUMP IF NONE 
          STORE  A0,HRL=HASHER     SET FOR HASHING
 NOHASH   BSS    0
          EQ     =XC.CAMOP   GO TO COMMON AAM OPEN ROUTINE
          SPACE  4
          ENTRY  C.CLODA
 C.CLODA  BSS    0
          EQ     =XC.CLOSE   GO TO COMMON CLOSE 
 -        VFD    12/0,18/=XCTRL$AA  FORCE ADV ACCESS MODULE TO LOAD 
 HASHER   SPACE  4
* 
**        HASHER IS CALLED BY THE DA PROCESSOR TO HASH THE KEY
* 
*                IT TRANSFERS TO THE HASHING DECLARATIVE AND THEN 
*                RETURNS THE SPECIAL REGISTER HASHED-VALUE TO THE USER. 
* 
 HASHER   DATA   0
          RJ     =XC.A0B1    RESET A0 AND B1
          SA4    =XC.USETB   GET ADDR OF USE JUMP VECTOR
          FETCH  A0,USHA,X5  GET ORD OF USE FOR HASHING 
          IX4    X4+X5
          SA4    X4-1        GET TABLE ENTRY
          BX6    X4 
          SA6    HASHRJ      STORE IN JUMP
          SX6    A1 
          SA6    =SSAVEA1    SAVE ADDR OF A1
          SA2    A1+3        GET ADDR OF RETURN FOR HASHED-VALUE
          BX7    X2 
          SA7    =SHASHLCN   SAVE IT
          FETCH  A0,PKA,X4   PRIME KEY ADDRESS
          SA2    A1+B1       GET ADDRESS OF THEIR KEY 
          IX3    X2-X4
          ZR     X3,NOMOVE   JP IF THEIR KEY AND OURS IN SAME PLACE 
          SB3    X4          FWA OF RECEIVER
          SB5    X2          SENDING ADDRESS
          FETCH  A0,KEYT,X5  ENSURE PRIMARY KEY BCP 
          SA5    X5          FIRST ENTRY IS PRIMARY KEY 
          LX5    19          SEE SYMPL COMDECK -FITDEFS-
          MX2    -4 
          BX5    -X2*X5      ISOLATE BCP OF PRIME KEY 
          SB4    X5          BCP OF RECEIVER
          SA1    A1          ADDRESS OF LENGTH IN X1
          MX2    0           NO BLANKS APPENDED 
          SA1    X1          LENGTH 
          SB7    X1          KEY LENGTH 
          SB6    B0          SENDING BCP
          RJ     =XC.MOVE    MOVE KEY TO COBOL KEY AREA 
 NOMOVE   BSS    0
          RJ     *+1         CLEAR INSTRUCTION STACK
          DATA   0
 HASHRJ   DATA   0           RJ TO DECLARATIVE PUT HERE 
          SA2    C.HASHV     GET HASHED-VALUE 
          SA1    SAVEA1      GET SAVED A1 VALUE 
          SA3    HASHLCN     GET ADDR OF PLACE TO RTN VALUE 
          BX6    X2 
          SA6    X3          SEND RESULT BACK 
          SA1    X1          RESTORE A1 AND X1
          EQ     HASHER      EXIT 
          USE    /C.HASHV/
 C.HASHV  DATA   0           SPECIAL REGISTER HASHED-VALUE
          USE    *
          END 
