*COMDECK,FA=RDW 
          CTEXT  FA=RDW - READ WORDS TO WORKING BUFFER
 RDW      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   FA=RDW 
  
  
**        FA=RDW - READ WORDS TO WORKING BUFFER.
* 
*                *FA=RDW* PARALLELS ITS KRONOS MODEL, *COMCRDW* AS
*         CLOSELY AS POSSIBLE.  RECORD MANAGER COMPLICATED THINGS BY
*         ADDING A NEW LEVEL, *RECORD*, TO THE LOGICAL STRUCTURE
*         HIERARCHY OF FILES.  SINCE CIO-STYLED I/O HAS NO SUCH LEVEL 
*         (A CIO *RECORD* RESEMBLES A RECORD MANAGER *SECTION*),
*         *FA=RDW* IGNORES 7RM RECORD BOUNDARIES AND RETURNS AN 
*         END-OF-DATA STATUS ONLY WHEN END-OF-SECTION IS SENSED.
* 
* 
*         ENTRY  (X2) = PSEUDO-FET WORD 1.
*                (A2) = PSEUDO-FET ADDRESS. 
*                (B1) = 1 
*                (B6) = WSA ADDRESS.
*                (B7) = WSA LENGTH (WORDS). 
* 
*         EXIT   (X1) = 0 FOR TRANSFER COMPLETE.
*                (X1) = -1 IF EOP/EOI DETECTED ON FILE. 
*                (X1) = (B6) IF EOS DETECTED ON FILE BEFORE TRANSFER
*                            WAS COMPLETED. 
*                (X2) = PSEUDO-FET WORD 1.
*                (A2) = PSEUDO-FET ADDRESS. 
*                (B1) = 1 
*                (B6) = ADDRESS PLUS ONE OF LAST WORD TRANSFERRED TO
*                            WORKING STORAGE AREA.
* 
*         USES   X - 1, 2, 3, 4, 6, 7 
*                A - 2, 3, 4, 6, 7
*                B - 2, 3, 4, 6, 7
* 
*         CALLS  FETCH, GETWP, MOVE 
  
  
 FA=RDW   JP     *+4S15      ** ENTRY/EXIT ** 
  
          IFNE   TEST,0,1 
          LE     B7,B0,*+4S15      IF LENGTH ERROR, ABORT JOB 
  
          SB2    A2          (B2) = PSEUDO-FET ADDRESS
          SB3    B7+         (B3) = NR UNTRANSFERRED WORDS
          SB4    B6          (B4) = FWA OF TRANSFER 
 RDW2     SA3    B2+I.IN     (X3) = HOLDING BUFFER -IN- POINTER 
          SA2    A3+B1       (X2) = HOLDING BUFFER -OUT- POINTER
          SX6    B3          NR WORDS REQUESTED 
          IX7    X3-X2       NR WORDS IN HOLDING BUFFER 
          ZR     X7,RDW6     IF HOLDING BUFFER EMPTY
  
*         COMPUTE MINIMUM OF NUMBER OF WORDS REQUESTED VS. WORDS IN 
*         HOLDING BUFFER.  TRANSFER *MIN* WORDS TO WORKING STORAGE AREA.
  
          IX1    X6-X7
          SX3    B6          (X3) = FWA OF TRANSFER 
          AX1    59D
          BX6    X1*X6
          BX7    -X1*X7 
          IX1    X6+X7       (X1) = MIN (REQUESTED, AVAILABLE) NR WORDS 
          SB7    X1 
          IX6    X2+X1
          SB3    B3-B7
          SB6    B6+X1       (B6) = LWA+1 OF TRANSFER 
          SA6    A2          UPDATE -OUT- 
          MOVE   X1,X2,X3 
          SA2    B2          RESTORE (X2) = FILE CONTROL WORD 
          MX1    0           *TRANSFER COMPLETE* STATUS 
          ZR     B3,FA=RDW   IF TRANSFER COMPLETE, EXIT 
          LX3    X2,B1       LEFT ADJUST SPILL FLAG 
          SX1    B6          *EOS DETECTED* STATUS
          PL     X3,FA=RDW   IF FILE NOT SPILLED TO DISK, EXIT
          FETCH  X2,FP,X3,X4
          SX4    #EOS#+#EOP#+#EOI#
          BX3    X4*X3
          NZ     X3,RDW5     IF FILE AT EOS/EOP/EOI 
  
*         REFILL HOLDING BUFFER.
  
 RDW3     SA3    B2+B1       -FIRST-
          SA4    B2+I.LIMIT  -LIMIT-
          IX1    X4-X3       HOLDING BUFFER LENGTH
          GETWP  X2,X3,X1,RDW7     RETURNS (X1) = TRANSFER LENGTH 
 RDW4     ZR     X1,RDW5     IF NO DATA RECEIVED
          BX6    X3 
          IX7    X3+X1
          SA6    A4-B1       RESET -OUT- = -FIRST-
          SA7    A3+B1       SET NEW -IN- 
          JP     RDW2        CONTINUE TRANSFER
  
*         PROCESS END-OF-DATA CONDITION.
  
 RDW5     SA3    B2+B1       -FIRST-
          SX1    B6          *EOS DETECTED* STATUS
          BX6    X3 
          SA6    A3+B1       RESET -IN- = -FIRST- 
          SA6    A6+B1       RESET -OUT- = -FIRST-
          GT     B6,B4,FA=RDW      IF ANY DATA TRANSFERRED TO WSA 
          MX1    -1          *EOP/EOI* STATUS 
          JP     FA=RDW      EXIT 
  
*         PROCESS EMPTY HOLDING BUFFER. 
  
 RDW6     SA2    B2          RESTORE (X2) = PSEUDO-FET WORD 1 
          LX1    X2,B1       LEFT ADJUST SPILL FLAG 
          PL     X1,RDW5     IF FILE NOT SPILLED TO DISK
          JP     RDW3        GO REFILL HOLDING BUFFER 
  
*         PROCESS RECORD MANAGER DATA EXIT. 
  
 RDW7     JP     *+4S15      ** REC MGR SIMULATES -RJ- HERE IF E-O-D ** 
          JP     RDW4        CONTINUE (IGNORE 7RM *RECORD* END) 
  
  
          IF     -DEF,QUAL$,2 
          QUAL   *
 FA=RDW   EQU    /FA=RDW/FA=RDW 
          ENDX
