*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 
  
 RDWA     BSS    1           PRESERVE X5 HERE 
 RDWB     BSS    1           PRESERVE A5 HERE 
  
  
 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
          BX6    X5 
          SA6    RDWA        PRESERVE X5
          SX6    A5 
          SA6    RDWB        PRESERVE A5
          FETCH  X2,FP,X3,X4
          SA4    RDWB 
          SA5    X4          RESTORE A5 
          SA4    RDWA 
          BX5    X4          RESTORE X5 
          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 
  
          IF     -ABS,FA=RDW,1
          ENTRY  FA=RDW 
  
          ENDX
