COMCRDH 
COMMON
          CTEXT  COMCRDH - READ CODED LINE, -H- FORMAT. 
 RDH      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCRDH
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RDH      SPACE  4
***       RDH - READ CODED LINE, -H- FORMAT.
*         G. R. MANSFIELD.  70/10/09. 
 RDH      SPACE  4
***              RDH READS 1 CODED LINE FROM A CIO BUFFER TO A WORKING
*         BUFFER WITH TRAILING SPACE FILL.
* 
*         ENTRY  (X2) = ADDRESS OF FET FOR FILE.
*                (B6) = FWA WORKING BUFFER. 
*                (B7) = WORD COUNT OF WORKING BUFFER. 
* 
*         EXIT   (X1) = 0 FOR TRANSFER COMPLETE.
*                (X1) = -1 IF EOF DETECTED ON FILE. 
*                (X1) = -2 IF EOI DETECTED ON FILE. 
*                (X1) = (B6) IF EOR WAS DETECTED ON FILE BEFORE 
*                             TRANSFER WAS COMPLETED. 
*                (B6) = ADDRESS PLUS ONE OF LAST WORD TRANSFERRED TO
*                             WORKING BUFFER. 
*                (X2) = ADDRESS OF FET FOR FILE.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                B - ALL. 
*                A - 1, 2, 3, 4, 6, 7.
* 
*         CALLS  LCB=, RDX=.
  
  
 RDH=     PS                 ENTRY/EXIT 
          SX1    B0+
          ZR     B7,RDH=     IF NO ROOM IN WORKING BUFFER 
          SA4    RDH6        SET RETURN ADDRESS 
  
          IF     -DEF,B1=1,1
          SB1    1
  
          SA1    X2+4        (B5) = LIMIT 
          SA3    X2+B1       (X3) = FIRST 
          SB7    B6+B7       (B7) = LWA+1 WORKING BUFFER
          SB5    X1+
          BX4    X4-X4       INDICATE NO PRIOR DATA CHECK 
          SX6    B6          SAVE FWA WORKING BUFFER
          SA6    RDHC 
  
*         INITIALIZE REGISTERS FOR TRANSFER.
  
 RDH1     SA1    A3+B1       (B3) = IN
          SA2    A1+B1       (B4) = OUT 
          MX7    -12         (X7) = BYTE MASK 
          SB3    X1 
          SB4    X2+
  
*         TRANSFER DATA FROM CIRCULAR BUFFER TO WORKING BUFFER. 
  
 RDH2     EQ     B4,B3,=XLCB= LOAD CIRCULAR BUFFER IF OUT = IN
          SA1    B4          READ WORD
          SB4    B4+B1       (OUT+1)
          BX2    -X7*X1      CHECK LAST BYTE
          EQ     B4,B5,RDH4  IF (OUT+1) = LIMIT 
          BX6    X1 
 RDH3     ZR     X2,RDH5     IF END OF LINE 
          SX4    B0+         INDICATE NO PRIOR DATA CHECK 
          EQ     B6,B7,RDH2  IF WORKING BUFFER FILLED 
          SA6    B6          STORE WORD 
          SB6    B6+B1       ADVANCE WORKING BUFFER 
          MX4    -6          CHECK PRIOR DATA FOR TRAILING BINARY ZERO
          EQ     RDH2        LOOP 
  
 RDH4     SB4    X3          (OUT+1) = FIRST
          BX6    X1 
          EQ     RDH3 
  
*         INSERT BLANK IF LAST CHARACTER OF PREVIOUS WORD PRECEEDING
*         ZERO WORD END OF LINE IS TRAILING BINARY ZERO CHARACTER 
*         AND LINE WAS NOT TRUNCATED. 
  
 RDH5     NZ     X1,RDH5.1   IF NOT ZERO WORD END OF LINE 
          ZR     X4,RDH5.1   IF NOT TO CHECK PRIOR DATA 
          SA1    B6-B1       GET PREVIOUS WORD FROM WORKING BUFFER
          BX2    -X4*X1 
          NZ     X2,RDH5.1   IF NOT TRAILING BINARY ZERO CHARACTER
          SX7    1R          INSERT BLANK CHARACTER 
          BX7    X1+X7
          SA7    A1 
  
*         SPACE FILL LAST WORD. 
  
 RDH5.1   EQ     B6,B7,=XRDX=  IF WORKING BUFFER FILLED 
          SA1    RDHA        =40404040404040404040B 
          SX7    B1 
          IX7    X6-X7
          SB2    60-5 
          BX4    -X7+X6 
          BX7    X1*X4
          LX4    X7,B2
          SA1    A1+B1       =1H
          IX2    X7-X4
          BX7    X7+X2
          BX4    -X7*X1 
          IX6    X6+X4
          SA6    B6 
          SB6    B6+B1
          EQ     =XRDX=      EXIT 
  
*         SPACE FILL REMAINDER OF WORKING BUFFER. 
  
 +        EQ     RDH1 
  
 RDH6     EQ     B6,B7,RDH=  RETURN IF WORKING BUFFER FULL
          SA4    RDHC        FWA OF WORKING BUFFER
          SB2    X4 
          EQ     B6,B2,RDH=  IF WORKING BUFFER EMPTY
          SA4    RDHB        =1H
          BX6    X4 
 RDH7     SA6    B6 
          SB6    B6+B1
          NE     B6,B7,RDH7 
          EQ     RDH=        RETURN 
  
 RDHA     CON    40404040404040404040B
 RDHB     DATA   1H 
 RDHC     CON    0           FWA WORKING BUFFER 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 RDH=     EQU    /COMCRDH/RDH=
 QUAL$    ENDIF 
          ENDX
