*COMDECK FA=SET 
          CTEXT  FA=SET - SET FILE TABLES 
 SET      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   FA=SET 
  
  
 #RM      IFEQ   CP#RM,0
  
**        FA=SET - SET FILE ENVIRONMENT TABLE  (CIO DIRECT I/O).
* 
*         SETS CIO BUFFER ADDRESSES IN FET.  EITHER THE FWA OR LWA+1 OF 
*         THE BUFFER SPACE IS REQUIRED AS AN INPUT PARAMETER.  THE OTHER
*         ADDRESS IS COMPUTED.  BOTH ADDRESSES ARE IN REGISTERS ON EXIT.
*         BUFFER LENGTH IS OBTAINED FROM THE FET (I.CBSET). 
* 
* 
*         ENTRY  (X2) = FET ADDRESS 
*                (B1) = 1 
*                (B2) = BUFFER FWA OR 0 
*                (B3) = 0 OR BUFFER LWA+1 
* 
*         EXIT   (X2) = FET ADDRESS 
*                (B1) = 1 
*                (B2) = BUFFER FWA
*                (B3) = BUFFER LWA+1
* 
*         USES   X - 1, 3, 4, 6, 7
*                A - 1, 4, 6, 7 
*                B - 2, 3 
* 
*         CALLS  NONE 
  
  
 FA=SET   JP     *+4S15      ** ENTRY/EXIT ** 
          SA1    X2          (X1) = FET WORD 1
          LX1    59-0 
          MI     X1,SET2     IF FILE QUIET
          RECALL X2          WAIT FOR FILE QUIET; RETURNS (X2) = FET ADR
  
*         NEXT SEQUENCE SETS (X6)=FWA AND (X7)=LWA+1, GIVEN EITHER
*         (B2)=FWA AND (B3)=0,  OR,  (B2)=0 AND (B3)=LWA+1. 
  
 SET2     SA1    X2+I.CBSET 
          SX3    B2-B3
          AX3    59D
          AX1    18          (X1) = CIO BUFFER LENGTH 
          BX6    -X1*X3 
          NO
          BX7    -X3*X1 
          SX3    B2+B3       FWA OR LWA+1 
          IX6    X6+X3       (X6) = BUFFER FWA
          LX1    18 
          SB2    X6          (B2) = BUFFER FWA
          IX7    X7+X3       (X7) = BUFFER LWA+1
  
*         STORE VALUES IN FET.
  
          SA6    X2+I.OUT    OUT
          SB3    X7          (B3) = BUFFER LWA+1
          SA4    X2+I.LIMIT  FET+4
          MX3    42 
          BX4    X4*X3       SAVE PRU SIZE ETC. 
          BX7    X7+X4
          SA7    A4          LIMIT
          SA6    A6-B1       IN 
          BX7    X1+X6       24/0, 18/PASS 1 LEN, 18/PASS 1 FWA 
          SA1    A6-B1       FET+1
          BX1    X1*X3       SAVE FET LENGTH ETC. 
          BX6    X6+X1
          SA6    A1          FIRST
          SA7    A7+B1       CBSET
          JP     FA=SET      EXIT 
  
 #RM      ELSE
  
**        FA=SET - SET FILE BUFFER ADDRESSES (RECORD MANAGER I/O).
* 
*         INITIALIZES HOLDING BUFFER ADDRESSES IN FIT AND PSEUDO-FET. 
*         EITHER THE FWA OR LWA+1 OF THE BUFFER SPACE IS REQUIRED AS AN 
*         INPUT PARAMETER.  THE OTHER ADDRESS WILL BE COMPUTED.  BOTH 
*         ADDRESSES ARE IN REGISTERS ON EXIT.  BUFFER LENGTH IS 
*         OBTAINED FROM THE PSEUDO-FET (I.HBSET). 
* 
* 
*         ENTRY  (X2) = PSEUDO-FET WORD 1 
*                (A2) = PSEUDO-FET ADDRESS
*                (B1) = 1 
*                (B2) = BUFFER FWA OR 0 
*                (B3) = 0 OR BUFFER LWA+1 
* 
*         EXIT   (X2) = PSEUDO-FET WORD 1 
*                (A2) = PSEUDO-FET ADDRESS
*                (B1) = 1 
*                (B2) = BUFFER FWA
*                (B3) = BUFFER LWA+1
* 
*         USES   X - 1, 6, 7
*                A - 1, 6, 7
*                B - 2, 3, 4
* 
*         SAVES  (A5), (X5) 
* 
*         CALLS  SAR, STORE 
  
  
 FA=SET   JP     *+4S15      ** ENTRY/EXIT ** 
  
*         INITIALIZE -FILE SPILLED- FLAG TO -UNCONDITIONAL FLUSH- 
*         FLAG VALUE.  THIS ALLOWS SMALL FILES TO BE FLUSHED TO DISK, 
*         EVEN THOUGH THE RELATED HOLDING BUFFER MAY HAVE NEVER BEEN
*         COMPLETELY FILLED.
  
          MX1    1
          LX6    X2,B1
          LX1    -59D+58D 
          BX7    -X1*X2      CLEAR OLD SPILL FLAG 
          BX6    X1*X6       EXTRACT FLUSH FLAG 
          BX7    X6+X7
          SA7    A2          RESET SPILL FLAG = FLUSH FLAG
  
*         DETERMINE IF FWA-UP OR LWA-DOWN MODE. 
  
          SB4    B1          (B4) = +1 = MODE SWITCH TO FWA-UP
          NZ     B2,SET2     IF (B2) .NZ., MODE IS FWA-UP 
          SB4    -B1         (B4) = -1 = MODE SWITCH TO LWA-DOWN
  
 SET2     PL     X2,SET3     IF FILE HAS NO HOLDING BUFFER
          SA1    A2+I.HBSET  (X1) = HOLDING BUFFER RESET PARAMS 
          RJ     SAR
          BX7    X1+X6
          SA6    A2+B1       HOLD BUF FWA   TO (P-FET+I.FIRST)
          SA7    A1          ADD FWA TO RESET PARAM WORD
          SA6    A6+B1                      TO (P-FET+I.IN) 
          SX7    B3 
          SA6    A6+B1                      TO (P-FET+I.OUT)
          SA7    A6+B1       HOLD BUF LWA+1 TO (P-FET+I.LIMIT)
          STORE  X2,WSA=X6,X1 
          SX7    B3-B2       (X7) = HOLDING BUFFER LENGTH (WORDS) 
          IX6    X7+X7
          LX7    3
          IX6    X6+X7       (X6) = LENGTH (CHARACTERS) 
          STORE  X2,PTL=X6,X1 
          JP     FA=SET      EXIT 
  
 SET3     MX1    0           DUMMY LENGTH = 0 TO FORCE FWA = LWA+1
          RJ     SAR
          JP     FA=SET      EXIT 
 SAR      SPACE  4,8
**        SAR - SET ADDRESSES IN REGISTERS. 
* 
* 
*         ENTRY  (X1) = LEN * 1S18
*                (B2) = FWA OR 0
*                (B3) = 0 OR LWA+1
*                (B4) = +1 IF FWA-UP MODE AND (B2) = FWA
*                     = -1 IF LWA-DOWN MODE AND (B3) = LWA+1
* 
*         EXIT   (X1) = LEN * 1S18  (LOWER 18 BITS CLEAR) 
*                (X6) = FWA 
*                (B2) = FWA 
*                (B3) = LWA+1 
* 
*         USES   X - 1, 6 
*                A - NONE 
*                B - 2, 3 
* 
*         CALLS  NONE 
  
  
 SAR2     BX6    -X1         (X6) = - BUFFER LENGTH 
          LX1    18D
          SB2    X6+B3       (B2) = BUFFER FWA
          SX6    X6+B3
  
 SAR      JP     *+4S15      ** ENTRY/EXIT ** 
          AX1    18D
          MI     B4,SAR2     IF LWA-DOWN MODE 
          SB3    X1+B2       (B3) = BUFFER LWA+1
          LX1    18D
          SX6    B2 
          EQ     SAR         EXIT 
          SPACE  4
 #RM      ENDIF 
  
  
          IF     -DEF,QUAL$,2 
          QUAL   *
 FA=SET   EQU    /FA=SET/FA=SET 
          ENDX
