*COMDECK  COMCRDS            READ CODED LINE TO STRING BUFFER.           COMCRDS
 RDS      CTEXT  COMCRDS - READ CODED LINE TO STRING BUFFER.             COMCRDS
 RDS      SPACE  4,10                                                    COMCRDS
          IF     -DEF,QUAL$,1                                            COMCRDS
          QUAL   COMCRDS                                                 COMCRDS
          BASE   D                                                       COMCRDS
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1970, 1978.        COMCRDS
 RDS      SPACE  4,10                                                    COMCRDS
***       RDS - READ CODED LINE TO STRING BUFFER.                        COMCRDS
*                                                                        COMCRDS
*         R. S. HORECK.      71/05/19.                                   COMCRDS
*         S. R. MCPHERSON.   74/09/30.                                   COMCRDS
*         R. R. RAGAN        77/07/22.                                   COMCRDS
* 
*         ******************************************************* 
*         * 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.                       * 
*         ******************************************************* 
* 
*                                                                        COMCRDS
*         RDS READS A CODED LINE TO A STRING BUFFER, ONE CHARACTER       COMCRDS
*         PER WORD.                                                      COMCRDS
 RDS      SPACE  4,10                                                    COMCRDS
***       RDS READS 1 CODED LINE FROM A CIO BUFFER TO A WORKING          COMCRDS
*         BUFFER ONE CHARACTER PER WORD.  WORDS IN THE CIRCULAR          COMCRDS
*         BUFFER ARE UNPACKED AND STORED ONE CHARACTER PER WORD IN       COMCRDS
*         THE WORKING BUFFER UNTIL THE END OF LINE BYTE IS DETECTED.     COMCRDS
*         IF THE CODED LINE TERMINATES BEFORE THE WORKING BUFFER         COMCRDS
*         IS FILLED, THE WORKING BUFFER IS PADDED WITH SPACE CODES,      COMCRDS
*         UNLESS UPON ENTRY THE COMPLEMENT OF THE WORD COUNT OF          COMCRDS
*         THE WORKING BUFFER IS USED.  IN THIS CASE, THE REMAINDER       COMCRDS
*         OF THE WORKING BUFFER IS NOT SPACE FILLED.  IF THE CODED       COMCRDS
*         LINE EXCEEDS THE SIZE OF THE WORKING BUFFER THE EXCESS         COMCRDS
*         CHARACTERS ARE IGNORED.                                        COMCRDS
*                                                                        COMCRDS
*         ENTRY  (X2) = ADDRESS OF FET FOR FILE.                         COMCRDS
*                (B6) = FWA WORKING BUFFER.                              COMCRDS
*                (B7) = WORD COUNT OF WORKING BUFFER.                    COMCRDS
*                       IF (B7) .LT.  0, IT IS THE COMPLEMENT OF THE     COMCRDS
*                       BUFFER LENGTH AND THE STRING BUFFER WILL         COMCRDS
*                       NOT BE SPACE FILLED.                             COMCRDS
*                                                                        COMCRDS
*         EXIT   (X1) = 0 FOR TRANSFER COMPLETE.                         COMCRDS
*                (X1) = -1 IF EOF DETECTED ON FILE.                      COMCRDS
*                (X1) = -2 IF EOI DETECTED ON FILE.                      COMCRDS
*                (X1) = (B6) IF EOR WAS DETECTED ON FILE BEFORE          COMCRDS
*                             TRANSFER WAS COMPLETED.                    COMCRDS
*                (B6) = ADDRESS PLUS ONE OF LAST CHARACTER FROM CODED    COMCRDS
*                             LINE IN WORKING BUFFER.                    COMCRDS
*                (X2) = ADDRESS OF FET FOR FILE.                         COMCRDS
*                (X7) = LEVEL NUMBER ON EOR.                             COMCRDS
*                (B1) = 1.                                               COMCRDS
*                                                                        COMCRDS
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCRDS
*                B - 1, 2, 3, 4, 5, 6, 7.                                COMCRDS
*                A - 1, 2, 3, 4, 6, 7.                                   COMCRDS
*                                                                        COMCRDS
*         CALLS  LCB=, RDX=.                                             COMCRDS
                                                                         COMCRDS
                                                                         COMCRDS
 +        EQ     RDS1        ENTRY FROM LCB= ON A CONTINUATION READ      COMCRDS
                                                                         COMCRDS
*         SPACE FILL REMAINDER OF BUFFER.                                COMCRDS
                                                                         COMCRDS
 RDS12    EQ     B6,B7,RDS=  IF WORKING BUFFER FULL, RETURN              CPSA104
          SB5    X7          (B5) = LEVEL NUMBER                         COMCRDS
          SX6    1R          * *                                         COMCRDS
          SX4    B7-B6       (X4) = COUNT OF WORDS REMAINING IN BUFFER   COMCRDS
          SB4    -B1         (B4) = -1                                   COMCRDS
          SA6    B6          INITIALIZE (A6)                             COMCRDS
          SB2    X4                                                      COMCRDS
          EQ     B2,B1,RDS=  IF ONLY 1 WORD REMAINING, RETURN            CPSA104
          BX7    X6          (X7) = * *                                  COMCRDS
          LX4    -1          WORD COUNT/2                                COMCRDS
          MI     X4,RDS13    IF WORD COUNT IS ODD                        COMCRDS
          SA6    A6+B1       STORE NEXT WORD                             COMCRDS
          SX4    X4+B4       DECREMENT LOOP COUNT                        COMCRDS
          ZR     X4,RDS14    IF WORD COUNT = 2                           COMCRDS
 RDS13    SX4    X4+B4       DECREMENT LOOP COUNT                        COMCRDS
          SA7    A6+1                                                    COMCRDS
          SA6    A7+B1                                                   COMCRDS
          NZ     X4,RDS13    LOOP TO END OF BUFFER                       COMCRDS
 RDS14    SX7    B5          RESTORE LEVEL NUMBER                        COMCRDS
          EQ     RDS=        RETURN                                      CPSA104
                                                                         COMCRDS
 +        EQ     RDS1        ENTRY FROM LCB= ON A CONTINUATION READ      COMCRDS
                                                                         COMCRDS
 RDS=     SUBR               ENTRY/EXIT                                  COMCRDS
          SA4    RDS12       SET RETURN ADDRESS                          COMCRDS
                                                                         COMCRDS
          IF     -DEF,B1=1,1                                             COMCRDS
          SB1    1                                                       COMCRDS
                                                                         COMCRDS
          SA1    X2+4        (B5) = LIMIT                                COMCRDS
          PL     B7,RDS0     IF BUFFER TO BE SPACE FILLED                COMCRDS
          SA4    RDS=        SKIP SPACE FILLING THE BUFFER               CPSA104
          SB7    -B7                                                     COMCRDS
 RDS0     SA3    X2+B1       (X3) = FIRST, (A3) = ADDRESS OF FIRST       COMCRDS
          SB7    B6+B7       (B7) = LWA+1                                COMCRDS
          SX4    B6          (X4) = FWA WORKING STORAGE                  COMCRDS
          SB5    X1                                                      COMCRDS
                                                                         COMCRDS
*         INITIALIZE REGISTERS FOR TRANSFER.                             COMCRDS
                                                                         COMCRDS
 RDS1     SA1    A3+B1       IN                                          COMCRDS
          SA2    A1+B1       (B4) = OUT                                  COMCRDS
          SB4    X2                                                      COMCRDS
          IX6    X1-X2       IN - OUT                                    COMCRDS
          SX1    B5          LIMIT                                       COMCRDS
          PL     X6,RDS2     IF IN .GE. OUT                              COMCRDS
          IX6    X1-X2       LIMIT - OUT                                 COMCRDS
 RDS2     ZR     X6,=XLCB=   IF NO FREE BUFFER SPACE                     COMCRDS
          MX2    -6          (X2) = CHARACTER MASK                       COMCRDS
          SB3    X6          (B3) = FREE BUFFER SPACE                    COMCRDS
                                                                         COMCRDS
                                                                         COMCRDS
 RDS3     NE     B4,B5,RDS4  IF OUT .NE. LIMIT                           COMCRDS
          SA1    A3                                                      COMCRDS
          SB4    X1          OUT = FIRST                                 COMCRDS
 RDS4     SX6    B4          RESET OUT                                   COMCRDS
          SA6    A2                                                      COMCRDS
          ZR     B3,RDS1     IF FREE BUFFER SPACE EXHAUSTED              COMCRDS
                                                                         COMCRDS
*         READ WORD FROM BUFFER.                                         COMCRDS
                                                                         COMCRDS
          SA1    B4                                                      COMCRDS
          SB4    B4+B1                                                   COMCRDS
          EQ     B7,B6,RDS10 IF MAXIMUM CHARACTERS PROCESSED             COMCRDS
          SB2    B0+         INITIALIZE CHARACTER COUNT                  COMCRDS
          NG     X1,RDS5     IF POSSIBLY 10 SEMI-COLONS                  COMCRDS
          ZR     X1,RDS8     IF ZERO WORD SKIP UNPACKING                 COMCRDS
                                                                         COMCRDS
*         UNPACK WORD TO WORKING BUFFER.                                 COMCRDS
                                                                         COMCRDS
 RDS5     LX1    6                                                       COMCRDS
          SB2    B2+B1       BUMP CHARACTER COUNT                        COMCRDS
          BX6    -X2*X1      PICK UP CHARACTER                           COMCRDS
          BX1    X2*X1       ERASE CHARACTER                             COMCRDS
 RDS6     SA6    B6                                                      COMCRDS
          SB6    B6+B1                                                   COMCRDS
          EQ     B6,B7,RDS10 IF MAXIMUM CHARACTERS PROCESSED             COMCRDS
          NZ     X1,RDS5     IF MORE CHARACTERS THIS WORD                COMCRDS
          SX6    B2-9                                                    COMCRDS
          SB2    B0          RESET CHARACTER COUNT                       COMCRDS
          SB3    B3-B1       DECREMENT FREE BUFFER SPACE                 COMCRDS
          NG     X6,RDS10    IF END OF LINE                              COMCRDS
          ZR     B3,RDS7     IF FREE BUFFER SPACE EXHAUSTED              COMCRDS
          SA1    B4          GET NEXT WORD TO BE UNPACKED                COMCRDS
          SB4    B4+B1                                                   COMCRDS
          NG     X1,RDS6.1   IF POSSIBLY 10 SEMI-COLONS                  COMCRDS
          ZR     X1,RDS10    IF ZERO WORD, END OF LINE                   COMCRDS
 RDS6.1   NZ     X6,RDS5     IF WORD COMPLETLY PROCESSED                 COMCRDS
          EQ     RDS6        PROCESS LAST CHARACTER                      COMCRDS
                                                                         COMCRDS
 RDS7     NZ     X6,RDS3     IF LAST CHARACTER PROCESSED                 COMCRDS
          SA6    B6          PROCESS LAST CHARACTER                      COMCRDS
          SB6    B6+B1                                                   COMCRDS
          EQ     RDS3                                                    COMCRDS
                                                                         COMCRDS
 RDS8     SB2    X4                                                      COMCRDS
          NE     B6,B2,RDS9  IF AT LEAST 1 CHARACTER IN WORKING BUFFER   COMCRDS
          SX6    1R          ASSURE 1 BLANK IN STRING BUFFER             COMCRDS
          SB6    B2+B1                                                   COMCRDS
          SA6    B2                                                      COMCRDS
 RDS9     SA1    B6-B1       CHECK LAST CHARACTER IN BUFFER              COMCRDS
          NZ     X1,RDS10    IF NOT BEGINNING OF END OF LINE             COMCRDS
          SB6    B6-1        ERASE CHARACTER                             COMCRDS
                                                                         COMCRDS
*         SEARCH FOR END OF LINE.                                        COMCRDS
                                                                         COMCRDS
 RDS10    SA1    B4-1        READ LAST WORD PROCESSED                    COMCRDS
          MX7    -12                                                     COMCRDS
          BX7    -X7*X1      CHECK FOR END OF LINE                       COMCRDS
          SB3    B3-1        DECREMENT FREE BUFFER SPACE                 COMCRDS
          NZ     X7,RDS3     IF END OF LINE NOT FOUND                    COMCRDS
          NE     B4,B5,RDS11 IF OUT .NE. LIMIT                           COMCRDS
          SB4    X3+         OUT = FIRST                                 COMCRDS
 RDS11    SA1    A3+B1       RESET IN                                    COMCRDS
          SB2    X4          FWA WORKING BUFFER                          COMCRDS
          SB3    X1+         (B3) = IN                                   COMCRDS
          GE     B6,B2,=XRDX=                                            COMCRDS
          SB6    B2+                                                     COMCRDS
          EQ     =XRDX=      EXIT                                        COMCRDS
 RDS      SPACE  4,10                                                    COMCRDS
          BASE   *                                                       COMCRDS
 QUAL$    IF     -DEF,QUAL$                                              COMCRDS
          QUAL   *                                                       COMCRDS
 RDS=     EQU    /COMCRDS/RDS=                                           COMCRDS
 QUAL$    ENDIF                                                          COMCRDS
 RDS      ENDX                                                           COMCRDS
