*COMDECK  COMCRDC            READ CODED LINE, *C* FORMAT.                COMCRDC
 RDC      CTEXT  COMCRDC - READ CODED LINE, -C- FORMAT.                  COMCRDC
 RDC      SPACE  4,10                                                    COMCRDC
          IF     -DEF,QUAL$,1                                            COMCRDC
          QUAL   COMCRDC                                                 COMCRDC
          BASE   D                                                       COMCRDC
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1970, 1978.               COMCRDC
 RDC      SPACE  4,10                                                    COMCRDC
***       RDC - READ CODED LINE, -C- FORMAT.                             COMCRDC
*                                                                        COMCRDC
*         G. R. MANSFIELD.   70/10/09.                                   COMCRDC
*         R. R. RAGAN.       77/07/24.                                   COMCRDC
* 
*         ******************************************************* 
*         * 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.                       * 
*         ******************************************************* 
* 
*                                                                        COMCRDC
*         RDC READS A CODED LINE TERMINATED BY A ZERO BYTE FROM          COMCRDC
*         A CIO BUFFER TO A WORKING STORAGE AREA.                        COMCRDC
 RDC      SPACE  4,10                                                    COMCRDC
***       RDC READS 1 CODED LINE FROM A CIO BUFFER TO A                  COMCRDC
*         WORKING BUFFER.                                                COMCRDC
*                                                                        COMCRDC
*         ENTRY  (X2) = ADDRESS OF FET FOR FILE.                         COMCRDC
*                (B6) = FWA WORKING BUFFER.                              COMCRDC
*                (B7) = WORD COUNT OF WORKING BUFFER.                    COMCRDC
*                IF (B7) .LT. 0 THEN -(B7) = WORD COUNT OF WORKING       COMCRDC
*                BUFFER AND RDC WILL NOT READ AND DISCARD WORDS          COMCRDC
*                UNTIL AN END OF LINE FOR LINES LONGER THAN THE          COMCRDC
*                WORKING BUFFER.                                         COMCRDC
*                                                                        COMCRDC
*         EXIT   (X1) = 0 FOR TRANSFER COMPLETE.                         COMCRDC
*                (X1) = -1 IF EOF DETECTED ON FILE.                      COMCRDC
*                (X1) = -2 IF EOI DETECTED ON FILE.                      COMCRDC
*                (X1) = (B6) IF EOR WAS DETECTED ON FILE BEFORE          COMCRDC
*                             TRANSFER WAS COMPLETED.                    COMCRDC
*                (B6) = ADDRESS PLUS ONE OF LAST WORD TRANSFERRED TO     COMCRDC
*                             WORKING BUFFER.                            COMCRDC
*                (X2) = ADDRESS OF FET FOR FILE.                         COMCRDC
*                (X4) = CONTENTS OF LAST DATA WORD TRANSFERRED           COMCRDC
*                            BEFORE EOL GUARANTEED. IF TRANSFER          COMCRDC
*                            COMPLETED ((X1)  = 0).                      COMCRDC
*                (X7) = LEVEL NUMBER ON EOR.                             COMCRDC
*                (B1) = 1.                                               COMCRDC
*                                                                        COMCRDC
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCRDC
*                B - 1, 2, 3, 4, 5, 6, 7.                                COMCRDC
*                A - 1, 2, 3, 4, 6, 7.                                   COMCRDC
*                                                                        COMCRDC
*         CALLS  LCB=, RDX=.                                             COMCRDC
                                                                         COMCRDC
                                                                         COMCRDC
 +        EQ     RDC2                                                    COMCRDC
                                                                         COMCRDC
 RDC=     SUBR               ENTRY/EXIT                                  COMCRDC
          SA4    RDC=        SET RETURN ADDRESS                          CPSA104
          IF     -DEF,B1=1,1                                             COMCRDC
          SB1    1                                                       COMCRDC
          SA1    X2+4        (B5) = LIMIT                                COMCRDC
          SB2    B7          (B2) = ORIGINAL (B7)                        COMCRDC
          PL     B7,RDC1     IF (B7) = POSITIVE WORD COUNT               COMCRDC
          SB7    -B7                                                     COMCRDC
 RDC1     NZ     B2,RDC1A    IF ORIGINAL (B7) IS NON-ZERO 
          SB7    -B1         ENSURE TRANSFER TILL END OF LINE 
 RDC1A    SA3    X2+B1       (X3) = FIRST 
          SB7    B6+B7       (B7) = LWA+1 WORKING BUFFER                 COMCRDC
          MX4    -12         (X4) = BYTE MASK                            COMCRDC
          SB5    X1                                                      COMCRDC
                                                                         COMCRDC
*         INITIALIZE REGISTERS FOR TRANSFER.                             COMCRDC
                                                                         COMCRDC
 RDC2     SA1    A3+B1       (B3) = IN                                   COMCRDC
          SA2    A1+B1       (B4) = OUT                                  COMCRDC
          SB3    X1                                                      COMCRDC
          SB4    X2                                                      COMCRDC
                                                                         COMCRDC
*         TRANSFER DATA FROM CIRCULAR BUFFER TO WORKING BUFFER.          COMCRDC
                                                                         COMCRDC
 RDC3     EQ     B4,B3,=XLCB= LOAD CIRCULAR BUFFER IF OUT = IN           COMCRDC
          SA1    B4          READ WORD                                   COMCRDC
          SB4    B4+B1       (OUT+1)                                     COMCRDC
          BX7    -X4*X1      CHECK LAST BYTE                             COMCRDC
          EQ     B4,B5,RDC6  IF (OUT+1) = LIMIT                          COMCRDC
          BX6    X1                                                      COMCRDC
 RDC4     ZR     X7,RDC5     IF END OF LINE                              COMCRDC
          EQ     B6,B7,RDC3  IF WORKING BUFFER FILLED                    COMCRDC
          SA6    B6          STORE WORD                                  COMCRDC
          SB6    B6+B1                                                   COMCRDC
          NE     B6,B7,RDC3  IF WORKING BUFFER NOT FULL                  COMCRDC
          PL     B2,RDC3     IF REST OF LINE TO BE SKIPPED               COMCRDC
          BX6    X4*X6       CLEAR LAST BYTE                             COMCRDC
          SB6    B6-B1                                                   COMCRDC
                                                                         COMCRDC
*         STORE LAST WORD TO WORKING BUFFER.                             COMCRDC
                                                                         COMCRDC
 RDC5     EQ     B6,B7,RDC7  IF WORKING BUFFER FULL                      COMCRDC
          SA6    B6          STORE LAST WORD                             COMCRDC
          SB6    B6+B1                                                   COMCRDC
          BX4    X1          RETURN LAST WORD BEFORE EOL CLEARED         COMCRDC
          EQ     =XRDX=      EXIT                                        COMCRDC
                                                                         COMCRDC
 RDC6     SB4    X3          (OUT+1) = FIRST                             COMCRDC
          BX6    X1                                                      COMCRDC
          EQ     RDC4        LOOP                                        COMCRDC
                                                                         COMCRDC
 RDC7     SA1    B6-B1       READ LAST WORD IN WORKING BUFFER            COMCRDC
          BX6    X4*X1       CLEAR LAST BYTE                             COMCRDC
          BX4    X1          RETURN LAST WORD BEFORE EOL CLEARED         COMCRDC
          SA6    A1                                                      COMCRDC
          EQ     =XRDX=      EXIT                                        COMCRDC
 RDS      SPACE  4,10                                                    COMCRDC
          BASE   *                                                       COMCRDC
 QUAL$    IF     -DEF,QUAL$                                              COMCRDC
          QUAL   *                                                       COMCRDC
 RDC=     EQU    /COMCRDC/RDC=                                           COMCRDC
 QUAL$    ENDIF                                                          COMCRDC
 RDC      ENDX                                                           COMCRDC
