*COMDECK  COMCRDW            READ WORDS TO WORKING BUFFER.               COMCRDW
 RDW      CTEXT  COMCRDW - READ WORDS TO WORKING BUFFER.                 COMCRDW
 RDW      SPACE  4,10                                                    COMCRDW
          IF     -DEF,QUAL$,1                                            COMCRDW
          QUAL   COMCRDW                                                 COMCRDW
          BASE   D                                                       COMCRDW
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1970, 1978.               COMCRDW
 RDW      SPACE  4,10                                                    COMCRDW
***       RDW - READ WORDS TO WORKING BUFFER.                            COMCRDW
*                                                                        COMCRDW
*         D. A. CAHLANDER.   70/11/29.                                   COMCRDW
*         R. E. TATE.        73/11/04.                                   COMCRDW
*         R. R. RAGAN.       77/07/21.                                   COMCRDW
*         C. J. CONRAD.      81/08/06.
* 
*         ******************************************************* 
*         * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * 
*         * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING  * 
*         * MAINTAINED BY THE COMPASS PROJECT.  ANY CHANGES     * 
*         * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT  * 
*         * THROUGH THE PROPER PROCEDURE.                       * 
*         ******************************************************* 
* 
*                                                                        COMCRDW
*         RDW READS A GIVEN NUMBER OF WORDS FROM A CIO BUFFER            COMCRDW
*         TO A WORKING STORAGE AREA.  IT ALSO CONTAINS THE LOAD CIO      COMCRDW
*         BUFFER AND READ EXIT ROUTINES REQUIRED BY RDC,RDH, AND RDS.    COMCRDW
 RDW      SPACE  4,10                                                    COMCRDW
***       RDW READS A GIVEN NUMBER OF WORDS FROM A CIO BUFFER TO         COMCRDW
*         A WORKING BUFFER.  THIS DECK ALSO CONTAINS LCB=, RDX=.         COMCRDW
*                                                                        COMCRDW
*         THE THRESHOLD CONDITION TO ISSUE READ FUNCTIONS 
*         IS BUFFER HALF EMPTY FOR BUFFERS LARGER 
*         THAN 511 DECIMAL WORDS, AND BUFFER TOTALLY
*         EMPTY FOR SMALLER BUFFERS.  IF THE SYMBOL 
*         RDX$ IS DEFINED, THEN THE THRESHOLD IS
*         BUFFER EMPTY FOR ALL BUFFER SIZES.
* 
*         ENTRY  (X2) = ADDRESS OF FET FOR FILE.                         COMCRDW
*                (B6) = FWA WORKING BUFFER.                              COMCRDW
*                (B7) = WORD COUNT OF WORKING BUFFER.                    COMCRDW
*                                                                        COMCRDW
*         EXIT   (X1) = 0 FOR TRANSFER COMPLETE.                         COMCRDW
*                (X1) = -1 IF EOF DETECTED ON FILE.                      COMCRDW
*                (X1) = -2 IF EOI DETECTED ON FILE.                      COMCRDW
*                (X1) = -3 IF *CIO=* WAS CALLED TO READ MORE DATA AND    COMCRDW
*                       RETURNED AN ERROR STATUS.                        COMCRDW
*                (X1) = (B6) IF EOR WAS DETECTED ON FILE BEFORE          COMCRDW
*                             TRANSFER WAS COMPLETED.                    COMCRDW
*                (B6) = ADDRESS PLUS ONE OF LAST WORD TRANSFERRED TO     COMCRDW
*                             WORKING BUFFER.                            COMCRDW
*                (B7) = WORD COUNT REMAINING TO BE TRANSFERRED.          COMCRDW
*                (X2) = ADDRESS OF FET FOR FILE.                         COMCRDW
*                (X7) = ERROR STATUS IF (X1) = -3.                       COMCRDW
*                (X7) = LEVEL NUMBER ON EOR.                             COMCRDW
*                (B1) = 1.                                               COMCRDW
*                                                                        COMCRDW
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCRDW
*                B - 1, 2, 3, 4, 5, 6, 7.                                COMCRDW
*                A - 1, 2, 3, 4, 6, 7.                                   COMCRDW
*                                                                        COMCRDW
*         CALLS  CIO=.                                                   COMCRDW
                                                                         COMCRDW
                                                                         COMCRDW
*         PROCESS 1 WORD OR BUFFER EMPTY.                                COMCRDW
                                                                         COMCRDW
 RDW18    ZR     B3,RDW11    IF NO DATA                                  COMCRDW
          BX7    X1          STORE 1 WORD                                COMCRDW
          SA7    B6                                                      COMCRDW
 RDW19    SX6    B4+B3       ADVANCE OUT                                 COMCRDW
          SB4    B4+B3                                                   COMCRDW
          SB6    B6+B3                                                   COMCRDW
          SB7    B7-B3                                                   COMCRDW
          NE     B4,B5,RDW20 IF OUT .NE. LIMIT                           COMCRDW
          SA1    X2+B1       READ FIRST                                  COMCRDW
          SX6    X1          OUT = FIRST                                 COMCRDW
 RDW20    SA6    A3          UPDATE OUT                                  COMCRDW
 RDW21    BSS    0
          BX1    X1-X1       RESPONSE = 0                                COMCRDW
          NZ     B7,RDW1     IF NOT END OF TRANSFER                      COMCRDW
                                                                         COMCRDW
 RDW=     SUBR               ENTRY/EXIT                                  COMCRDW
          ZR     B7,RDW21    IF ZERO WORD COUNT, SET COMPLETE AND EXIT. 
 RDW1     SA3    X2+3        (B4) = OUT                                  COMCRDW
          SA1    X2+2        (B3) = IN                                   COMCRDW
          IF     -DEF,B1=1,1                                             COMCRDW
          SB1    1                                                       COMCRDW
          SA4    A3+B1       (B5) = LIMIT                                COMCRDW
          SB4    X3                                                      COMCRDW
          SB3    X1                                                      COMCRDW
          SA1    X3          READ FIRST WORD                             COMCRDW
          SB5    X4                                                      COMCRDW
          GE     B3,B4,RDW2  IF NO END AROUND                            COMCRDW
          SB3    B5                                                      COMCRDW
 RDW2     SB3    B3-B4       FREE DATA LENGTH                            COMCRDW
          LE     B3,B7,RDW3  IF NOT ENOUGH ROOM                          COMCRDW
          SB3    B7                                                      COMCRDW
 RDWA     BSS    0                                                       COMCRDW
 RDW3     SA3    RDWB        PRESET CMU CODE                             COMCRDW
          RJ     RDW16       PRESET CMU CODE                             COMCRDW
*         LE     B3,B1,RDW18 IF 1 WORD OR LESS OF DATA (NO CMU)          COMCRDW
*         BX7    X1          (NO CMU)                                    COMCRDW
*         SA1    A1+B1       (NO CMU)                                    COMCRDW
*                                                                        COMCRDW
*         LE     B3,B1,RDW18 IF 1 WORD OR LESS OF DATA (CMU)             COMCRDW
*         EQ     RDW14       (CMU)                                       COMCRDW
                                                                         COMCRDW
*         INITIALIZE REGISTERS FOR TRANSFER.                             COMCRDW
                                                                         COMCRDW
 RDW4     SX4    B3-B1                                                   COMCRDW
          MX6    -3                                                      COMCRDW
          SA7    B6                                                      COMCRDW
          BX3    -X6*X4      NUMBER OF ODD WORDS                         COMCRDW
          AX4    3           NUMBER OF BLOCKS                            COMCRDW
                                                                         COMCRDW
*         TRANSFER UP TO 7 WORDS.                                        COMCRDW
                                                                         COMCRDW
          ZR     X3,RDW6     IF NO ODD WORDS                             COMCRDW
          SB2    X3                                                      COMCRDW
 RDW5     SB2    B2-B1                                                   COMCRDW
          BX7    X1                                                      COMCRDW
          SA1    A1+B1                                                   COMCRDW
          SA7    A7+B1                                                   COMCRDW
          NZ     B2,RDW5     IF MORE WORDS                               COMCRDW
                                                                         COMCRDW
*         PRE-READ REGISTERS.                                            COMCRDW
                                                                         COMCRDW
 RDW6     ZR     X4,RDW19    IF NO BLOCKS                                COMCRDW
          SB5    X2                                                      COMCRDW
          SA2    A1+B1                                                   COMCRDW
          SB2    B1+B1       (B2) = 2                                    COMCRDW
          SA3    A2+B1                                                   COMCRDW
          SB4    X4          (B4) = LOOP COUNT                           COMCRDW
          SA4    A3+B1                                                   COMCRDW
                                                                         COMCRDW
*         TRANSFER 8 WORD BLOCKS.                                        COMCRDW
                                                                         COMCRDW
 RDW7     BX6    X1                                                      COMCRDW
          LX7    X2                                                      COMCRDW
          SA1    A3+B2                                                   COMCRDW
          SA2    A4+B2                                                   COMCRDW
          SA6    A7+B1                                                   COMCRDW
          SB4    B4-B1                                                   COMCRDW
          SA7    A6+B1                                                   COMCRDW
          BX6    X3                                                      COMCRDW
          LX7    X4                                                      COMCRDW
          SA3    A1+B2                                                   COMCRDW
          SA4    A2+B2                                                   COMCRDW
          SA6    A6+B2                                                   COMCRDW
          SA7    A7+B2                                                   COMCRDW
          BX6    X1                                                      COMCRDW
          LX7    X2                                                      COMCRDW
          SA1    A3+B2                                                   COMCRDW
          SA2    A4+B2                                                   COMCRDW
          SA6    A6+B2                                                   COMCRDW
          SA7    A7+B2                                                   COMCRDW
          BX6    X3                                                      COMCRDW
          LX7    X4                                                      COMCRDW
          SA3    A1+B2                                                   COMCRDW
          SA4    A2+B2                                                   COMCRDW
          SA6    A6+B2                                                   COMCRDW
          SA7    A7+B2                                                   COMCRDW
          NZ     B4,RDW7     LOOP                                        COMCRDW
                                                                         COMCRDW
*         READ EXIT.                                                     COMCRDW
                                                                         COMCRDW
          SX2    B5          RESET FET ADDRESS                           COMCRDW
          SA3    B5+3        OUT                                         COMCRDW
          SA1    A3+B1       (B5) = LIMIT                                COMCRDW
          SB5    X1                                                      COMCRDW
 RDW8     SA4    X2          CHECK BUFFER STATUS                         COMCRDW
          SB6    B6+B3                                                   COMCRDW
          SB7    B7-B3                                                   COMCRDW
          SB4    X3+B3       ADVANCE OUT                                 COMCRDW
          SX6    X3+B3                                                   COMCRDW
          LX4    59-0                                                    COMCRDW
          SA1    X2+1        READ FIRST                                  COMCRDW
          NE     B4,B5,RDW9  IF OUT .NE. LIMIT                           COMCRDW
          SX6    X1+         OUT = FIRST                                 COMCRDW
 RDX$     IF     DEF,RDX$ 
 RDW9     EQ     RDW20       CLEAN UP AND RETURN
 RDX$     ELSE
                                                                         COMCRDW
*         TRY TO BUFFER AHEAD.                                           COMCRDW
                                                                         COMCRDW
 RDW9     PL     X4,RDW20    IF BUFFER BUSY                              COMCRDW
          LX4    59-4-59-0                                               COMCRDW
          NG     X4,RDW20    IF EOR/EOF SET                              COMCRDW
          SA4    X2+2        READ IN                                     COMCRDW
          SB2    X1          (LIMIT - FIRST)                             COMCRDW
          SX1    B5-B2                                                   COMCRDW
          IX7    X4-X6       (IN-OUT)                                    COMCRDW
          LX3    X7,B1       2*(IN-OUT)                                  COMCRDW
          AX7    60          SIGN OF (IN-OUT)                            COMCRDW
          BX4    X7-X1       INVERT BUFFER IF OUT .GE. IN                COMCRDW
          IX7    X4-X3       BUFFER SIZE - 2*(IN-OUT)                    COMCRDW
          AX1    9                                                       COMCRDW
          NG     X7,RDW20    IF BUFFER THRESHOLD NOT REACHED             COMCRDW
          ZR     X1,RDW20    IF BUFFER NOT BIG ENOUGH TO READ AHEAD      COMCRDW
          SA6    A3+         UPDATE OUT                                  COMCRDW
 RDX$     ENDIF 
 RDW10    SA1    A1          REREAD FIRST                                COMCRDW
          AX1    54                                                      COMCRDW
          SX7    740770B/2                                               COMCRDW
          SB2    X1+77B-61B  CHECK FOR NOS/BE TERMINAL                   COMCRDW
          SA1    X2                                                      COMCRDW
          LX4    X7,B1                                                   COMCRDW
          ZR     B2,RDW20    IF A TERMINAL SUPPRESS READ AHEAD           COMCRDW
          LX4    X7,B1                                                   COMCRDW
          BX7    X4*X1                                                   COMCRDW
          RJ     =XCIO=                                                  COMCRDW
          MX1    -2          RESPONSE = -3                               COMCRDW
          NZ     X7,RDW=     IF ERROR ON LAST *CIO* REQUEST, RETURN      CPSA104
          BX1    X1-X1       RESPONSE = 0                                COMCRDW
          NZ     B7,RDW1     IF NOT DONE                                 COMCRDW
          EQ     RDW=        RETURN                                      CPSA104
                                                                         COMCRDW
*         LOAD CIRCULAR BUFFER.                                          COMCRDW
                                                                         COMCRDW
 RDW11    SA1    X2          CHECK BUFFER STATUS                         COMCRDW
          SA3    X2+2        READ IN                                     COMCRDW
          LX1    59-0                                                    COMCRDW
          PL     X1,RDW13    IF BUFFER BUSY                              COMCRDW
          SB3    X3                                                      COMCRDW
          LX1    59-4-59+0                                               COMCRDW
          NE     B3,B4,RDW1  IF BUFFER NOT EMPTY                         COMCRDW
          PL     X1,RDW10    IF NOT EOR SET                              COMCRDW
          SA3    X2+B1       SET IN = OUT = FIRST                        COMCRDW
          MX7    -4                                                      COMCRDW
          LX6    X1,B1                                                   COMCRDW
          LX1    60+0-14-59+4                                            COMCRDW
          BX7    -X7*X1      (X7) = LEVEL NUMBER                         COMCRDW
          SX1    B6                                                      COMCRDW
          PL     X6,RDW12    IF NOT EOF                                  COMCRDW
          LX6    59-9-59+3                                               COMCRDW
          MX1    -1                                                      COMCRDW
          PL     X6,RDW12    IF NOT EOI                                  COMCRDW
          SX1    -2                                                      COMCRDW
 RDW12    SX6    X3+                                                     COMCRDW
          SA6    A3+B1       STORE IN                                    COMCRDW
          SA6    A6+B1       STORE OUT                                   COMCRDW
          EQ     RDW=        RETURN                                      CPSA104
                                                                         COMCRDW
*         RECALL WAITING FOR I/O.                                        COMCRDW
                                                                         COMCRDW
 RDW13    RECALL                                                         COMCRDW
          EQ     RDW1                                                    COMCRDW
                                                                         COMCRDW
*         MOVE DATA WITH CMU.                                            COMCRDW
                                                                         COMCRDW
 RDW14    SX4    B3-819                                                  COMCRDW
          PL     X4,RDW15    IF MOVE TOO BIG FOR CMU                     COMCRDW
          SX4    B3          10 * WORDS = CHARACTERS                     COMCRDW
          LX6    X4,B1                                                   COMCRDW
          BX1    X0          SAVE X0                                     COMCRDW
          LX4    3                                                       COMCRDW
          IX6    X4+X6                                                   COMCRDW
          SX7    B6          SET DESTINATION ADDRESS                     COMCRDW
          LX3    30                                                      COMCRDW
          MX4    -4                                                      COMCRDW
          BX7    X7+X3                                                   COMCRDW
          BX3    X4*X6       EXTRACT UPPER PORTION OF CHARACTER COUNT    COMCRDW
          LX3    48-4                                                    COMCRDW
          BX4    -X4*X6                                                  COMCRDW
          BX7    X3+X7                                                   COMCRDW
          LX4    26                                                      COMCRDW
          BX7    X4+X7                                                   COMCRDW
          AX3    51                                                      COMCRDW
          SA7    RDWB        STORE DESCRIPTOR WORD                       COMCRDW
          IM     RDWB        MOVE DATA                                   COMCRDW
          BX0    X1          RESTORE X0                                  COMCRDW
          ZR     X3,RDW19    IF NO READ EXIT CHECK                       COMCRDW
          SX3    B4          SET OUT                                     COMCRDW
          EQ     RDW8                                                    COMCRDW
                                                                         COMCRDW
 RDW15    BX7    X1                                                      COMCRDW
          SA1    A1+B1                                                   COMCRDW
          EQ     RDW4                                                    COMCRDW
                                                                         COMCRDW
*         PRESET FOR CMU.                                                COMCRDW
*         RDWB IS READ UP AND THEN RETURN JUMPED TO IN ORDER TO VOID     COMCRDW
*         THE INSTRUCTION STACK.                                         COMCRDW
                                                                         COMCRDW
 RDWB     LE     B3,B1,RDW18  IF 1 WORD OR LESS (CMU)                    COMCRDW
          EQ     RDW14                                                   COMCRDW
                                                                         COMCRDW
 RDW16    EQU    RDWB        USED TO VOID STACK AT PRESET                COMCRDW
                                                                         COMCRDW
*         PRESET FOR CMU.                                                COMCRDW
                                                                         COMCRDW
          SA4    RA.CMU      CHECK IF CMU AVAILABLE                      COMCRDW
          SB3    RDWA                                                    COMCRDW
          NG     X4,RDW17    IF CMU                                      COMCRDW
          SA3    RDWC                                                    COMCRDW
 RDW17    BX6    X3                                                      COMCRDW
          SA6    B3                                                      COMCRDW
          RJ     *           VOID INSTRUCTION STACK.
          EQ     RDW1                                                    COMCRDW
                                                                         COMCRDW
 RDWC     LE     B3,B1,RDW18  IF 1 WORD OR LESS (NO CMU)                 COMCRDW
          BX7    X1                                                      COMCRDW
          SA1    A1+B1                                                   COMCRDW
 RDX      SPACE  4,10                                                    COMCRDW
**        RDX - READ EXIT.                                               COMCRDW
*         EXIT FROM READ SUBROUTINE TO CALLER.                           COMCRDW
*         IF CIRCULAR BUFFER IS BUSY, OR EOR/EOF IS SENSED, NO ACTION    COMCRDW
*         IS TAKEN.                                                      COMCRDW
*         OTHERWISE, THE WORD COUNT REMAINING IN THE BUFFER IS CHECKED   COMCRDW
*         AND PREVIOUS READ FUNCTION ISSUED IF NECESSARY.                COMCRDW
*                                                                        COMCRDW
*         ENTRY  (A2) = ADDRESS OF OUT.                                  COMCRDW
*                (A3) = ADDRESS OF FIRST.                                COMCRDW
*                (A4) = RETURN ADDRESS.                                  COMCRDW
*                (X3) = FIRST.                                           COMCRDW
*                (B3) = IN.                                              COMCRDW
*                (B4) = OUT.                                             COMCRDW
*                (B5) = LIMIT.                                           COMCRDW
*                (B1) = 1.                                               COMCRDW
*                                                                        COMCRDW
*         EXIT   TO RETURN ADDRESS.                                      COMCRDW
*                (X2) = FET ADDRESS.                                     COMCRDW
*                (X1) = 0.                                               COMCRDW
*                (B1) = 1.                                               COMCRDW
*                                                                        COMCRDW
*         USES   A - 1, 6.                                               COMCRDW
*                B - 2.                                                  COMCRDW
*                X - 1, 2, 3, 6, 7.                                      COMCRDW
*                                                                        COMCRDW
*         CALLS  CIO=.                                                   COMCRDW
                                                                         COMCRDW
                                                                         COMCRDW
 RDX=     SA1    A3-B1       CHECK BUFFER STATUS                         COMCRDW
          SX6    B4          STORE OUT                                   COMCRDW
          LX1    59-0                                                    COMCRDW
          SA6    A2                                                      COMCRDW
          SX2    A3-B1       RESET (X2)                                  COMCRDW
 RDX$     IF     -DEF,RDX$
          PL     X1,RDX1     IF BUFFER BUSY                              COMCRDW
          LX1    59-4-59+0                                               COMCRDW
          NG     X1,RDX1     IF EOR/EOF SET                              COMCRDW
                                                                         COMCRDW
*         IF BUFFER IS NOT BUSY, CHECK BUFFER SIZE.                      COMCRDW
*         ISSUE READ IF BUFFER THRESHOLD IS REACHED.                     COMCRDW
                                                                         COMCRDW
          SA1    A2-B1       REREAD IN
          SB3    X1 
          SX6    B3-B4       (IN-OUT)                                    COMCRDW
          SB2    X3          (LIMIT-FIRST)                               COMCRDW
          AX3    54                                                      COMCRDW
          SX7    X3+77B-61B  CHECK IF NOS/BE TERMINAL                    COMCRDW
          LX3    X6,B1       2*(IN-OUT)                                  COMCRDW
          ZR     X7,RDX1     IF TERMINAL SUPPRESS READ AHEAD             COMCRDW
          SX7    B5-B2                                                   COMCRDW
          AX6    60          SIGN OF (IN-OUT)                            COMCRDW
          BX6    X6-X7       INVERT BUFFER IF OUT .GE. IN                COMCRDW
          IX6    X6-X3       BUFFER SIZE - 2 * ( IN - OUT )              COMCRDW
          AX7    9
          NG     X6,RDX1     IF BUFFER THRESHOLD NOT REACHED             COMCRDW
          ZR     X7,RDX1     IF BUFFER NOT BIG ENOUGH TO READ AHEAD      COMCRDW
          SA1    X2          ISSUE PREVIOUS READ FUNCTION 
          SX6    740770B/2                                               COMCRDW
          LX6    1
          BX7    X6*X1                                                   COMCRDW
          RJ     =XCIO=                                                  COMCRDW
 RDX1     SX1    B0          RESPONSE = 0                                COMCRDW
 RDX$     ELSE
          SX1    B0+         RESPONSE = 0 
 RDX$     ENDIF 
          SB2    A4          SET RETURN ADDRESS                          COMCRDW
          JP     B2          RETURN                                      COMCRDW
 LCB      SPACE  4                                                       COMCRDW
**        LCB - LOAD CIRCULAR BUFFER.                                    COMCRDW
*         REQUEST READ IF BUFFER IS EMPTY, NOT BUSY AND NOT EOR/EOF.     COMCRDW
*         IF BUFFER IS BUSY, RECALL AND RETURN.                          COMCRDW
*                                                                        COMCRDW
*         ENTRY  (A2) = ADDRESS OF OUT.                                  COMCRDW
*                (A3) = ADDRESS OF FIRST.                                COMCRDW
*                (A4) = RETURN ADDRESS.                                  COMCRDW
*                (B4) = OUT.                                             COMCRDW
*                                                                        COMCRDW
*         EXIT   TO RETURN ADDRESS - 1 IF CONTINUATION READ.             COMCRDW
*                TO RETURN ADDRESS IF EOR/EOF.                           COMCRDW
*                (X1) = LAST WORD ADDRESS OF WORKING BUFFER.             COMCRDW
*                (X1) = -1 IF EOF.                                       COMCRDW
*                (X1) = -2 IF EOI.                                       COMCRDW
*                (X2) = FET ADDRESS.                                     COMCRDW
*                (X7) = LEVEL NUMBER ON EOR.                             COMCRDW
*                (B1) = 1.                                               COMCRDW
*                                                                        COMCRDW
*         USES   A - 1, 6, 7.                                            COMCRDW
*                B - 3.                                                  COMCRDW
*                X - 1, 2, 6, 7.                                         COMCRDW
*                                                                        COMCRDW
*         CALLS  CIO=.                                                   COMCRDW
* 
*         MACROS READ, RECALL.
                                                                         COMCRDW
                                                                         COMCRDW
 LCB=     SA1    A3-B1       CHECK BUFFER STATUS                         COMCRDW
          SX6    B4          STORE OUT                                   COMCRDW
          LX1    59-0                                                    COMCRDW
          SA6    A2                                                      COMCRDW
          NG     X1,LCB2     IF BUFFER NOT BUSY                          COMCRDW
          RECALL                                                         COMCRDW
 LCB1     SB3    A4-B1       CONTINUE READ                               COMCRDW
          SX2    A3-B1       RESET (X2)                                  COMCRDW
          JP     B3                                                      COMCRDW
                                                                         COMCRDW
 LCB2     SA1    A2-B1       RE-READ IN                                  COMCRDW
          SB3    X1                                                      COMCRDW
          NE     B3,B4,LCB1  IF BUFFER NOT EMPTY                         COMCRDW
          SA1    A3-B1       CHECK BUFFER STATUS                         COMCRDW
          LX1    59-4                                                    COMCRDW
          NG     X1,LCB3     IF EOR SET                                  COMCRDW
          SX6    740770B/2   ISSUE PREVIOUS READ FUNCTION                COMCRDW
          LX1    4                                                       COMCRDW
          SX2    A3-B1                                                   COMCRDW
          BX7    X6*X1                                                   COMCRDW
          LX7    1                                                       COMCRDW
          RJ     =XCIO=                                                  COMCRDW
          SB3    A4-B1       CONTINUE READ                               COMCRDW
          JP     B3                                                      COMCRDW
                                                                         COMCRDW
 LCB3     LX2    B1,X1                                                   COMCRDW
          SA1    A3          SET IN = OUT = FIRST                        COMCRDW
          SX6    X1                                                      COMCRDW
          AX1    48                                                      COMCRDW
          SB3    X1-2RTT     CHECK FOR NOS TERMINAL                      COMCRDW
          SA6    A1+B1                                                   COMCRDW
          SX1    -B1         RESPONSE = -1                               COMCRDW
          NG     X2,LCB4     IF EOF                                      COMCRDW
          MX7    -4                                                      COMCRDW
          SX1    B6          RESPONSE = LAST WORD ADDRESS                COMCRDW
          LX2    60+0-14-59+3                                            COMCRDW
          BX7    -X7*X2      (X7) = LEVEL NUMBER                         COMCRDW
          NZ     B3,LCB4     IF NOT A NOS TERMINAL                       COMCRDW
          SB3    X7                                                      COMCRDW
          EQ     B3,B1,LCB6  IF LEVEL 1                                  COMCRDW
 LCB4     SA6    A6+B1       STORE OUT                                   CPSA107
          NG     X1,LCB7     IF EOF/EOI                                  COMCRDW
 LCB5     SB3    A4          SET RETURN ADDRESS                          COMCRDW
          SX2    A3-B1       RESET (X2)                                  CPSA107
          JP     B3          RETURN                                      COMCRDW
                                                                         COMCRDW
 LCB6     SA6    A6+B1       STORE OUT                                   COMCRDW
          READ   A3-B1       RESTART READ                                COMCRDW
          SB3    A4-B1       CONTINUE READ                               COMCRDW
          JP     B3                                                      COMCRDW
                                                                         COMCRDW
 LCB7     LX2    59-9-59+3                                               CPSA107
          PL     X2,LCB5     IF NOT EOI                                  CPSA107
          LX1    1           RESPONSE= -2                                COMCRDW
          SB3    A4          SET RETURN ADDRESS                          COMCRDW
          SX2    A3-B1       RESET (X2)                                  CPSA107
          JP     B3          RETURN                                      COMCRDW
 RDW      SPACE  4,10                                                    COMCRDW
          BASE   *                                                       COMCRDW
 QUAL$    IF     -DEF,QUAL$                                              COMCRDW
          QUAL   *                                                       COMCRDW
 RDW=     EQU    /COMCRDW/RDW=                                           COMCRDW
 RDX=     EQU    /COMCRDW/RDX=                                           COMCRDW
 LCB=     EQU    /COMCRDW/LCB=                                           COMCRDW
 QUAL$    ENDIF                                                          COMCRDW
 RDW      ENDX                                                           COMCRDW
