*DECK C$RLSQ
          IDENT  C$RLSQ 
          SST 
          B1=1
          TITLE  CBRLSQ - RELATIVE SEQUENTIAL I-O ROUTINES
* 
**        CBRLSQ - RELATIVE SEQUENTIAL I-O ROUTINES 
          COMMENT  RELATIVE SEQUENTIAL I-O ROUTINES 
* 
*         ENTRY POINTS
* 
*            C.RDNRL - SEQUENTIAL READ
* 
*            C.WRIRL - SEQUENTIAL WRITE 
* 
*                A0 = FIT ON ALL
* 
*         RETURNS 
* 
*                RECORD NUMBER IN X1
* 
*CALL IODEFSC 
*CALL IOMICROS
          ENTRY  C.RDNRL
 C.RDNRL  BSS    0
          RJ     INIT        INITIALIZE 
          FETCH  A0,OPOF,X5  GET OPEN OUTPUT FLAG 
          PL     X5,GETOK    JP IF NOT OPENED OUTPUT
          SX1    #RDOPF      ERROR
          RJ     =XC.FIOER   OUTPUT MSG AND ABORT 
 GETOK    BSS    0
          FETCH  A0,FNEX,X5  FILE NOT EXISTING
          PL     X5,NOTEN    JUMP IF FILE HERE
 ATEND    BSS    0
          STORE  A0,REOI=YES SET AS AT END
          EQ     =XC.ATEND   TAKE AT END
 NOTEN    BSS    0
          FETCH  A0,REOI,X5  GET FILE POSITIONED AT END FLAG
          NG     X5,RAAE     JP IF AT END 
          FETCH  A0,NREC,X4  GET NEXT RECORD POINTER
          ZR     X4,NOTDEF
 RDREC    BSS    0
          RJ     =XC.GETRL   READ AT RECORD 
          RJ     =XC.BMPRP   BUMP RECORD POINTER
          NG     X2,ATEND    JP IF AT END OF FILE (NO MORE RECS)
          NZ     X4,RDREC    READ NEXT ONE IF NONE EXISTS 
          STORE  A0,LORD=YES SET TO INDICATE VALID READ 
          EQ     RTN         EXIT 
 NOTDEF   BSS    0           KEY NOT DEFINED - ERROR CONDITION
          FETCH  A0,USEX,X5 
          ZR     X5,NODECL   JUMP IF NO USE ON EXCEPTION DECLARATIVE
          SX1    2R91        RETURN STATUS CODE 91
          EQ     =XC.INVKY   TAKE INV KEY - WILL DO AT END EXIT 
 NODECL   BSS    0
          SX1    #IOMSG1
          RJ     =XC.FIOER   FATAL - BOMB JOB 
 RAAE     BSS    0           HERE IF READ AFTER AT END
          STORE  A0,IRS=100B  SET CRM ERROR CODE TO PROPER VALUE
          RJ     =XC.EX      GO ABORT JOB 
          SPACE  2
          ENTRY  C.WRIRL
 C.WRIRL  BSS    0           WRITE SEQUENTIALLY 
          RJ     INIT        INITIALIZE 
          RJ     =XC.PUTRL   WRITE THE RECORD 
          RJ     =XC.BMPRP   BUMP RECORD POINTER
 RTN      BSS    0
          SB6    RTN2        SET UP A DUMMY RETURN
          RJ     =XC.SVRTN   PUT PHONY RETURN IN STACK
          EQ     =XC.NORRT   DO NORMAL RETURN PROCESS - RTNS TO DUMMY 
 RTN2     BSS    0           DUMMY RETURN TO HERE 
          RJ     =XC.GETRT   GET THE REGULAR RETURN 
          FETCH  A0,NREC,X1  GET NEXT REC POINTER 
          SX2    B1 
          IX1    X1-X2       POINT TO RECORD JUST PROCESSED 
          JP     B6          TAKE THE NORMAL RETURN 
          EQ     =XC.NORRT   EXIT 
          SPACE  2
 INIT     DATA   0
          RJ     =XC.SVRTN
          STORE  A0,LORD=NO  CLEAR LAST OP READ FLAG
          EQ     INIT 
          END 
