*DECK C$ISRD
          IDENT  C$ISRD 
          TITLE  CBISRD -  INDEXED SEQUENTIAL READ, START 
  
          MACHINE  ANY,I
          COMMENT  INDEXED SEQUENTIAL READ, START 
          SST 
          B1=1
          SPACE  4
**        CBISRD -  INDEXED SEQUENTIAL READ, START
* 
*         CALLING SEQUENCE - READS
* 
*                MX4  1 IF AT END OR INV KEY SPECIFIED
*                MX4  0 IF NOT ABOVE
*                SB3  KEY ORDINAL FOR C.RDSIS ONLY
*                SB6  RETURN ADDRESS
*                SA0  ADDR OF FIT 
*                EQ   C.RDNIS  FOR READ ... NEXT  (UPPER) 
*            OR  EQ   C.RDRIS  FOR RANDOM READ    (UPPER) 
*            OR  EQ   C.RDSIS  FOR READ WITH KEY
*                LINE NBR  (LOWER)
*                EQ   NORMAL RETURN 
*                   INV KEY OR AT END CODE (IF ANY) 
*                   NORMAL RETURN 
* 
*         CALLING SEQUENCE - START
* 
*                MX4  1 IF INV KEY SPECIFIED
*                MX4  0 IF NO INV KEY 
*                SA0  ADDR OF FIT 
*                SX1  KEY LENGTH
*                SB3  KEY NUMBER
*                SB4  RELATION
*            +   EQ   C.STAIS 
*            -   LINE NBR 
*            +   EQ   NORMAL RETURN 
*                   INV KEY CODE
*                   NORMAL
* 
*         DOES   - ROUTES REQUESTS TO CRM 
* 
*         USES   - EVERYTHING EXCEPT A0 
  
  
*CALL IOMICROS
  
*CALL IODEFSC 
          EJECT 
          ENTRY  C.RDNIS
 C.RDNIS  BSS    0           READ NEXT (SEQUENTIAL READ)
          SB5    READNXT
          EQ     INIT 
          SPACE  2
          ENTRY  C.RDRIS
 C.RDRIS  BSS    0           READ RANDOM
          SB3    B0          SET FOR PRIME KEY
          SB5    READR
          EQ     INIT 
          SPACE  2
          ENTRY  C.RDSIS
 C.RDSIS  BSS    0           READ WITH KEY PHRASE 
          SB5    READR
          EQ     INIT 
          SPACE  2
          ENTRY  C.STAIS
 C.STAIS  BSS    0           START
 CDCS     IFNE   OP.DCS,OP.NO 
          SA7    =XC.SVKO    SAVE KEY SUB-SCHEMA ORDINAL, IF ONE
 CDCS     ENDIF 
          SB5    START
          SPACE  2
 INIT     BSS    0
          RJ     =XC.SVRTN   SAVE RETURN
          STORE  A0,EX==XC.ISEX  SET ERROR EXIT 
          FETCH  A0,RECA,X2  GET RECORD AREA ADDRESS
          STORE  A0,DX=ATEND-1  SET DATA EXIT 
 CDCS     IFNE   OP.DCS,OP.NO 
          FETCH  A0,DBFO,X4 
          ZR     X4,INIT1    JUMP IF I/O NOT VIA CDCS 
          STORE  A0,WSA=X2
 INIT1    BSS    0
 CDCS     ENDIF 
          FETCH  A0,FNEX,X5  GET OP FILE NOT THERE FLAG 
          JP     B5          GO TO ROUTINE
          SPACE  4
 READNXT  BSS    0           SEQUENTIAL READ
          NG     X5,ATEND    JUMP IF NOT THERE
          RJ     =XC.SETKR   SET TO KEY OF REFERENCE
          FETCH  A0,EMK,X5   GET EMBEDDED KEY FLAG
          PL     X5,RDNNEMK  JP IF NOT EMBEDDED KEY 
          STORE  A0,KA=0     NO NEED TO MOVE KEY IF EMBEDDED
 RDNNEMK  BSS    0
 CDCS     IFNE   OP.DCS,OP.NO 
          FETCH  A0,DBFO,X4 
          ZR     X4,NTDB1    JUMP IF NOT A DB FILE
          RJ     =XC.DMRD1   -GETN- VIA CDCS
          EQ     =XC.SETDS   SET FILE-STATUS FOR DUP KEYS AND RETURN
 NTDB1    BSS    0
 CDCS     ENDIF 
          GETN   A0,X2       READ A RECORD
          EQ     =XC.SETDS   SET FILE-STATUS FOR DUP KEYS AND RETURN
          SPACE  2
 READR    BSS    0           RANDOM READ
          NG     X5,=XC.INVKY  TAKE THE INVALID KEY EXIT IF OP FILE NULL
          RJ     =XC.SETKY   SET KEY OF REFERENCE 
 CDCS     IFNE   OP.DCS,OP.NO 
          FETCH  A0,DBFO,X4 
          ZR     X4,NTDB2 
          RJ     =XC.DMRD2   -GET- VIA CDCS 
          EQ     =XC.SETDS   SET FILE-STATUS FOR DUP KEYS AND RETURN
 NTDB2    BSS    0
 CDCS     ENDIF 
          GET    A0,X2       READ A RECORD
          EQ     =XC.SETDS   SET FILE-STATUS FOR DUP KEYS AND RETURN
          SPACE  2
 START    BSS    0           START
          STORE  A0,MKL=X3   SET KEY LENGTH 
          STORE  A0,REL=B4   SET RELATION 
          RJ     =XC.SETKY   SET KEY OF REFERENCE 
          FETCH  A0,KL,X5 
          IX5    X5-X3       CHECK SPECIFIED SIZE AGAINST KEY SIZE
          NZ     X5,MKOK     JUMP IF DIFFERENT - IS MAJ KEY ACCESS
          STORE  A0,MKL=X5   CLEAR MAJ KEY
 CDCS     IFNE   OP.DCS,OP.NO 
 MKOK     FETCH  A0,DBFO,X4 
          ZR     X4,MKOK1    JUMP IF I/O NOT VIA CDCS 
          RJ     =XC.DMSTR   -START- VIA CDCS 
          EQ     MKOK2
 MKOK1    BSS    0
 CDCS     ELSE   1
 MKOK     BSS    0
          START  A0          DO A START 
          STORE  A0,RL=B0    CLEAR FIELDS 
 CDCS     IFNE   OP.DCS,OP.NO,1 
 MKOK2    BSS    0
          STORE  A0,MKL=B0
          EQ     =XC.NORRT   NORMAL RETURN - RETURN 00 STATUS 
          SPACE  4
          DATA   0           FOR RJ FROM CRM - IS DATA EXIT 
 ATEND    BSS    0           AT END - MUST FOLLOW 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 SAME
          EQ     =XC.ATEND   GO TO AT END PROCESS 
          END 
