*DECK C$SQRD
          IDENT  C$SQRD 
          TITLE  C$SQRD - SEQUENTIAL READ 
  
          MACHINE  ANY,I
          COMMENT  SEQUENTIAL READ
          SST 
          B1=1
          SPACE  4
**        CBSQRD -  SEQUENTIAL READ 
* 
*         CALLING SEQUENCE
* 
*                MX4 1 IF AT END SPECIFIED, MX4 0 IF NOT
*                SB6  RETURN ADDRESS
*                SA0 ADDR OF FIT
*                EQ  C.RDNSQ   (UPPER)
*                LINE NBR      (LOWER)
*                EQ NORMAL RETURN (IF AT END SPECIFIED) 
*                    AT END CODE (IF ANY) 
*                    NORMAL RETURN
* 
*         DOES - ROUTES READ REQUEST TO CRM GET 
* 
*         USES - ALL REGISTERS EXCEPT A0 CHANGED
* 
 STNDRD1  EQU    CS.STND1 
 ASCII    EQU    CS.ASCII 
 EBCDIC   EQU    CS.EBCDC 
  
 UNIVAC   EQU    8           VALUE OF -UNI- IN -CDST- FIT FIELD 
  
  
*CALL IOMICROS
  
*CALL IODEFSC 
          ENTRY  C.RDNSQ
 C.RDNSQ  BSS    0
          RJ     =XC.SVRTN   SAVE THE RETURN
          STORE  A0,EX=SQERREX     SET ERROR EXIT 
          FETCH  A0,ORFL,X5  GET OPEN REVERSED FLAG 
          ZR     X5,NOTORV   JUMP IF NOT REVERSE READ 
          STORE  A0,DX=RVDATX  SET DATA EXIT
          FETCH  A0,ORFT,X5  GET FIRST TIME FLAG
          PL     X5,NOTFRRV  JUMP IF NOT FIRST ONE
          FETCH  A0,FNEX,X5  OPTIONAL FILE FLAG 
          NG     X5,ATEND    TAKE AT END RETURN IF OPT FILE NOT THERE 
          STORE  A0,DX=B0 
          SKIPFF A0,1,SQ
          CLOSEM A0,N,,SQ          POSITION FILE BEFORE READING REVERSED
          OPENM  A0,,N,SQ 
          SKIPBL A0,1,SQ
          FETCH  A0,FP,X5    GET FILE POSITION
          SX2    X5-#EOS# 
          ZR     X2,RVRD1    DO ANOTHER BKSP IF END OF SECTION
          SX2    X5-#EOP# 
          NZ     X2,RVRD2    NO EXTRA BACKSPACE IF NOT END OF PARTITION 
 RVRD1    BSS    0
 CDCS     IFEQ   OP.DCS,OP.DCS1 
          FETCH  A0,DBFO,X5  GET DATA BASE FILE ORDINAL 
          ZR     X5,RVRD1A   JUMP IF I/O NOT VIA CDCS 
          MX7    59          -1 
          SA7    =XC.SVSKP   SAVE SKIP COUNT
          RJ     =XC.DMSKP   -SKIP- VIA CDCS
          EQ     RVRD2
 RVRD1A   BSS    0
 CDCS     ENDIF 
          SKIPBL A0,1        SKIP BACK ONE
 RVRD2    BSS    0
          STORE  A0,ORFT=NO  CLEAR FIRST TIME 
          EQ     RVRD3
 NOTFRRV  BSS    0
 CDCS     IFEQ   OP.DCS,OP.DCS1 
          FETCH  A0,DBFO,X5 
          ZR     X5,RVRD2A   JUMP IF NOT A CDCS FILE
          SX7    -2 
          SA7    =XC.SVSKP   SAVE SKIP COUNT
          RJ     =XC.DMSKP   -SKIP- VIA CDCS
          EQ     RVRD3
 RVRD2A   BSS    0
 CDCS     ENDIF 
          SKIPBL A0,2        BACK UP 2
 RVRD3    BSS    0
 NOTORV   BSS    0
          STORE  A0,DX=DATAEX  SET DATA EXIT
          RJ     =XC.GTDF    GET DUPL FILE POINTER
          STORE  X0,DX=DATAEX      SET DATA EXIT ADDR 
          FETCH  A0,RECA,X2  GET RECORD AREA ADDRESS
          FETCH  A0,FNEX,X5  GET OP FILE NON EXISTING FLAG
          NG     X5,ATEND    TAKE AT END IF NOT THERE 
          SX6    A0 
          LX6    18 
          BX6    X0+X6
          SA6    =SSVA0X0    SAVE BOTH FET POINTERS 
 CDCS     IFEQ   OP.DCS,OP.DCS1 
          FETCH  A0,DBFO,X5  GET FILE 
          ZR     X5,GET1     JUMP IF NOT CDCS I/O 
          STORE  A0,WSA=X2   SET WSA
          RJ     =XC.DMRD1   -GET- VIA CDCS 
          EQ     =XC.NORRT   TAKE NORMAL RETURN 
 GET1     BSS    0
 CDCS     ENDIF 
          SX1    A0 
          IX1    X1-X0
          ZR     X1,NTDF1    JP IF NOT A DUPLICATED FILE
          FETCH  A0,MRL,X4
          FETCH  X0,MRL,X6
          SA6    =SSAVEMRL
          STORE  X0,MRL=X4   SET MRL TO FIT OF CURRENT STATEMENT
 NTDF1    BSS    0
          GET    X0,X2       READ A RECORD
          SA2    SVA0X0      GET SAVED REAL AND DUPLICATE FIT POINTERS
          SX0    X2          DUPLICATE POINTER
          AX2    18 
          SA0    X2          ORIGINAL POINTER 
          IX3    X2-X0
          ZR     X3,NODUPF   JP IF NOT A DUPLICATE FILE 
          FETCH  X0,RL,X4 
          STORE  A0,RL=X4    PUT RECORD LENGTH INTO ORIGINAL FET
          SA1    SAVEMRL     GET MRL SAVED BEFORE READ
          STORE  X0,MRL=X1   RESTORE IT 
 NODUPF   BSS    0
          FETCH  A0,CDST,X2 
          SX3    X2-STNDRD1 
          ZR     X3,SQRD1 
          SX3    X2-ASCII 
          ZR     X3,SQRD1 
          SX3    X2-EBCDIC
          ZR     X3,SQRD1 
          SX2    X2-UNIVAC   IS TRANSLATION REQUESTED 
          NZ     X2,=XC.NORRT 
          RJ     =YC.UNICY   XLATE UNIVAC TO CYBER
          EQ     =XC.NORRT   TAKE NORMAL EXIT 
 SQRD1    RJ     =YC.12TO6
          EQ     =XC.NORRT
 DATAEX   DATA   0
          SA2    SVA0X0      GET SAVED REAL AND DUPLICATE FIT POINTERS
          SX0    X2          DUPLICATE
          AX2    18 
          SA0    X2          ORIGINAL 
 CDCS     IFEQ   OP.DCS,OP.DCS1,1 
          RJ     =XC.A0B1    RESTORE A0 AND B1 (IF CDCS CALL) 
          FETCH  X0,FP,X2    GET FILE POS 
          SX2    X2-#EOS# 
          NZ     X2,ATEND    JUMP IF FILE POSITION NOT END OF SECTION 
          SA3    =XC.SYSF+#INPT#-1 GET INPUT FILE NAME
          FETCH  A0,LFN,X2   GET FILE NAME
          IX3    X2-X3
          ZR     X3,ATEND    AT END IF EOS ON INPUT - OTHERWISE IGNORE
          EQ     NOTORV      GO DO READ AGAIN 
 RVDATX   DATA   0           READ REVERSE DATA EXIT 
 CDCS     IFEQ   OP.DCS,OP.DCS1,1 
          RJ     =XC.A0B1    RESTORE A0 AND B1 (IF CDCS CALL) 
          FETCH  A0,FP,X2 
          SX3    X2-#BOF# 
          ZR     X3,ATEND    END IF AT BEGINNING OF FILE
          SX2    X2-#BOI# 
          NZ     X2,RVRD1    IGNORE IF NOT BOI
          EQ     ATEND
 ATEND    BSS    0           AT END RETURN
          EQ     =XC.ATEND
          SPACE  2
 CDCS     IFEQ   OP.DCS,OP.DCS1 
          ENTRY  C.SQEX 
 C.SQEX   BSS    0
 CDCS     ENDIF 
 SQERREX  DATA   0
          SA2    SVA0X0      GET SAVED REAL AND DUPLICATE FIT POINTERS
          SX0    X2          DUPLICATE
          AX2    18 
          SA0    X2          ORIGINAL 
 CDCS     IFEQ   OP.DCS,OP.DCS1,1 
          RJ     =XC.A0B1    RESTORE A0 AND B1 (IF CDCS CALL) 
          FETCH  X0,ES,X5    GET ERROR STATUS 
          STORE  A0,ES=X5,4  MOVE IT TO LOCA FIT
          SX5    X5-142B
          NZ     X5,ISERR    JUMP IF NOT SHORT REC ERROR
          FETCH  A0,RT,X5    GET RECORD TYPE
          SX5    X5-#ZT#
          NZ     X5,ISERR    JP IF NOT Z RECORDS
          SX1    2R90        CRM ERROR FILE STATUS
          RJ     =XC.SETFS   SET FILE STATUS
          STORE  A0,FSSET=YES      FLAG THAT IT WAS DONE
          EQ     SQERREX     IGNORE 142 ERROR 
 ISERR    BSS    0
          RJ     =XC.EX      GO TO NORMAL ERROR EXIT PROCESS
          EQ     SQERREX     RETURN IF USER ELECTS TO DO SO 
          END 
