*COMDECK  COMCRDH            READ CODED LINE, *H* FORMAT.                COMCRDH
 RDH      CTEXT  COMCRDH - READ CODED LINE, -H- FORMAT.                  COMCRDH
 RDH      SPACE  4,10                                                    COMCRDH
          IF     -DEF,QUAL$,1                                            COMCRDH
          QUAL   COMCRDH                                                 COMCRDH
          BASE   D                                                       COMCRDH
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1970, 1978.               COMCRDH
 RDH      SPACE  4,10                                                    COMCRDH
***       RDH - READ CODED LINE, -H- FORMAT.                             COMCRDH
*                                                                        COMCRDH
*         G. R. MANSFIELD.   70/10/09.                                   COMCRDH
*         R. R. RAGAN.       77/07/24.                                   COMCRDH
* 
*         ******************************************************* 
*         * 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.                       * 
*         ******************************************************* 
* 
*                                                                        COMCRDH
*         RDH READS A CODED LINE TERMINATED BY A ZERO BYTE FROM          COMCRDH
*         A CIO BUFFER TO A WORKING STORAGE AREA AND SUPPLIES            COMCRDH
*         TRAILING SPACE FILL.                                           COMCRDH
 RDH      SPACE  4,10                                                    COMCRDH
***       RDH READS 1 CODED LINE FROM A CIO BUFFER TO A WORKING          COMCRDH
*         BUFFER WITH TRAILING SPACE FILL.                               COMCRDH
*                                                                        COMCRDH
*         ENTRY  (X2) = ADDRESS OF FET FOR FILE.                         COMCRDH
*                (B6) = FWA WORKING BUFFER.                              COMCRDH
*                (B7) = WORD COUNT OF WORKING BUFFER.                    COMCRDH
*                                                                        COMCRDH
*         EXIT   (X1) = 0 FOR TRANSFER COMPLETE.                         COMCRDH
*                (X1) = -1 IF EOF DETECTED ON FILE.                      COMCRDH
*                (X1) = -2 IF EOI DETECTED ON FILE.                      COMCRDH
*                (X1) = (B6) IF EOR WAS DETECTED ON FILE BEFORE          COMCRDH
*                             TRANSFER WAS COMPLETED.                    COMCRDH
*                (B6) = ADDRESS PLUS ONE OF LAST WORD TRANSFERRED TO     COMCRDH
*                             WORKING BUFFER.                            COMCRDH
*                (X2) = ADDRESS OF FET FOR FILE.                         COMCRDH
*                (X7) = LEVEL NUMBER ON EOR.                             COMCRDH
*                (B1) = 1.                                               COMCRDH
*                                                                        COMCRDH
*         USES   X - 1, 2, 3, 4, 6, 7.                                   COMCRDH
*                B - 1, 2, 3, 4, 5, 6, 7.                                COMCRDH
*                A - 1, 2, 3, 4, 6.                                      COMCRDH
*                                                                        COMCRDH
*         CALLS  LCB=, RDX=.                                             COMCRDH
                                                                         COMCRDH
                                                                         COMCRDH
 RDH=     SUBR               ENTRY/EXIT                                  COMCRDH
          SA4    RDH6        SET RETURN ADDRESS                          COMCRDH
          IF     -DEF,B1=1,1                                             COMCRDH
          SB1    1                                                       COMCRDH
          SA1    X2+4        (B5) = LIMIT                                COMCRDH
          SA3    X2+B1       (X3) = FIRST                                COMCRDH
          SB7    B6+B7       (B7) = LWA+1 WORKING BUFFER                 COMCRDH
          SB5    X1                                                      COMCRDH
          SX6    B6 
          SA6    RDHC        SAVE FWA WORKING BUFFER
          BX4    X4-X4       (X4) = FLAG FOR 11 CHAR LINE TERMINATOR     COMCRDH
                                                                         COMCRDH
*         INITIALIZE REGISTERS FOR TRANSFER.                             COMCRDH
                                                                         COMCRDH
 RDH1     SA1    A3+B1       (B3) = IN                                   COMCRDH
          SA2    A1+B1       (B4) = OUT                                  COMCRDH
          MX7    -12         (X7) = BYTE MASK                            COMCRDH
          SB3    X1                                                      COMCRDH
          SB4    X2+                                                     COMCRDH
                                                                         COMCRDH
*         TRANSFER DATA FROM CIRCULAR BUFFER TO WORKING BUFFER.          COMCRDH
                                                                         COMCRDH
 RDH2     EQ     B4,B3,=XLCB= LOAD CIRCULAR BUFFER IF OUT = IN           COMCRDH
          SA1    B4          READ WORD                                   COMCRDH
          SB4    B4+B1       (OUT+1)                                     COMCRDH
          BX2    -X7*X1      CHECK LAST BYTE                             COMCRDH
          EQ     B4,B5,RDH4  IF (OUT+1) = LIMIT                          COMCRDH
          BX6    X1                                                      COMCRDH
 RDH3     ZR     X2,RDH5     IF END OF LINE                              COMCRDH
          EQ     B6,B7,RDH2  IF WORKING BUFFER FILLED                    COMCRDH
          SA6    B6          STORE WORD                                  COMCRDH
          SB6    B6+B1       ADVANCE WORKING BUFFER                      COMCRDH
          NE     B6,B7,RDH2  IF WORKING BUFFER NOT FULL                  COMCRDH
          NZ     X4,RDH2     IF END OF WORKING BUFFER HIT PREVIOUSLY     COMCRDH
                                                                         COMCRDH
*         SAVE LAST WORD THAT WOULD HAVE FIT INTO THE WORKING BUFFER     COMCRDH
*         IN X4 AND BACK UP B6 TO ALLOW A PEEK AT THE NEXT WORD.         COMCRDH
*         THIS MUST BE DONE IN CASE THE LAST WORD TO FIT IN THE          COMCRDH
*         WORKING BUFFER HAS CHARACTER 10 = 00B AND THE NEXT WORD        COMCRDH
*         MIGHT BE ALL ZERO CONSTITUTING AN 11 CHARACTER LINE            COMCRDH
*         TERMINATOR. IF IT IS AN 11 CHARACTER LINE TERMINATOR THEN      COMCRDH
*         THE 00B CHARACTER MUST BE CHANGED TO A BLANK.                  COMCRDH
                                                                         COMCRDH
          BX4    X6          SAVE LAST WORD TO FIT IN BUFFER             COMCRDH
          SB6    B6-B1       ALLOW PEEK AT NEXT WORD                     COMCRDH
          EQ     RDH2                                                    COMCRDH
                                                                         COMCRDH
 RDH4     SB4    X3          (OUT+1) = FIRST                             COMCRDH
          BX6    X1                                                      COMCRDH
          EQ     RDH3                                                    COMCRDH
                                                                         COMCRDH
*         SPACE FILL LAST WORD.                                          COMCRDH
                                                                         COMCRDH
 RDH5     EQ     B6,B7,RDH8  IF WORKING BUFFER FILLED                    COMCRDH
          ZR     X4,RDH5.1   IF BUFFER NEVER FILLED                      COMCRDH
          SB6    B6+B1                                                   COMCRDH
          NZ     X6,=XRDX=   IF NO NEED TO CONSIDER FILLING A 00B CHAR   COMCRDH
 RDH5.1   NZ     X6,RDH5.2   IF NOT FULL ZERO WORD                       COMCRDH
          SA1    RDHC 
          SB2    X1 
          EQ     B2,B6,RDH5.2      IF NO PREVIOUS WORD IN LINE
          SA1    B6-B1       CHECK LAST CHARACTER OF PREVIOUS WORD       COMCRDH
          MX7    -6                                                      COMCRDH
          BX7    -X7*X1                                                  COMCRDH
          NZ     X7,=XRDX=   IF NOT TRAILING ZERO CHARACTER              COMCRDH
          SX7    1R          INSERT BLANK CHARACTER                      COMCRDH
          BX6    X7+X1                                                   COMCRDH
          SA6    A1                                                      COMCRDH
          EQ     =XRDX=      EXIT                                        COMCRDH
                                                                         COMCRDH
 RDH5.2   SA1    RDHA        =40404040404040404040B                      COMCRDH
          SX7    B1                                                      COMCRDH
          IX7    X6-X7                                                   COMCRDH
          SB2    60-5                                                    COMCRDH
          BX4    -X7+X6                                                  COMCRDH
          BX7    X1*X4                                                   COMCRDH
          LX4    X7,B2                                                   COMCRDH
          SA1    A1+B1       =1H                                         COMCRDH
          IX2    X7-X4                                                   COMCRDH
          BX7    X7+X2                                                   COMCRDH
          BX4    -X7*X1                                                  COMCRDH
          IX6    X6+X4                                                   COMCRDH
          SA6    B6                                                      COMCRDH
          SB6    B6+B1                                                   COMCRDH
          EQ     =XRDX=      EXIT                                        COMCRDH
                                                                         COMCRDH
*         SPACE FILL REMAINDER OF WORKING BUFFER.                        COMCRDH
                                                                         COMCRDH
 +        EQ     RDH1                                                    COMCRDH
                                                                         COMCRDH
 RDH6     EQ     B6,B7,RDH=  IF WORKING BUFFER FULL, RETURN              CPSA104
          SA4    RDHB        =1H                                         COMCRDH
          BX6    X4                                                      COMCRDH
 RDH7     SA6    B6                                                      COMCRDH
          SB6    B6+B1                                                   COMCRDH
          NE     B6,B7,RDH7                                              COMCRDH
          EQ     RDH=        RETURN                                      CPSA104
                                                                         COMCRDH
 RDH8     BX6    X4                                                      COMCRDH
          SA6    B6-B1       STORE SAVED LAST WORD INTO BUFFER           COMCRDH
          EQ     =XRDX=      EXIT                                        COMCRDH
                                                                         COMCRDH
 RDHA     CON    40404040404040404040B                                   COMCRDH
 RDHB     DATA   1H                                                      COMCRDH
 RDHC     CON    0           SAVE FWA WORKING BUFFER
 RDH      SPACE  4,10                                                    COMCRDH
          BASE   *                                                       COMCRDH
 QUAL$    IF     -DEF,QUAL$                                              COMCRDH
          QUAL   *                                                       COMCRDH
 RDH=     EQU    /COMCRDH/RDH=                                           COMCRDH
 QUAL$    ENDIF                                                          COMCRDH
 RDH      ENDX                                                           COMCRDH
