*COMDECK /WEOXDSQ/
*#
*1CD  WEOX$SQ 
*0D   PURPOSE 
*0        FLUSH THE BUFFER AND WRITE END-OF-SECTION OR
*         END-OF-PARTITION. 
*0D   CALL
*0                  SB6       <RETN>
*                   EQ        =XWEOX$SQ   (FOR END-OF-SECTION)
*         <RETN>    BSS       0 
*0D   PARAMETERS
*0        A0        FIT ADDRESS 
*         B6        RETURN ADDRESS
*0D   ACTIONS 
*0        IF WEOP, CALLS WAR$SQ IF LAST OPERATION WAS 
*         GET OR SKIP.
*         THEN THE BUFFER IS FLUSHED FOR BOTH CALLS.
*         IF WEOP AND RT"W, A CIO 34B IS ISSUED.
*         ELSE, IF FLUSH DID NOT DO A WRITER, A CIO 24B 
*         IS ISSUED.
*0D   CONDITIONS AT EXIT
*0        LOP = #EN# (#WE#) IF WEOP (WEOS)
*         FP = #EOP# (#EOS#) IF WEOP (WEOS) 
*         PAE = 1 
*         IN = OUT = FIRST
*         PIN = FIRST       (C OR I BLOCK)
*             = FIRST + SOL (E OR K BLOCK, OR S-RECORD) 
*         BL = 0
*0D   OTHER CODE
*0        MACROS-  SYSY, SAVE, RESTORE
*         CALLS- WAR$SQ, ERR$RM, FLSH$SQ, FLSH$S
*#
 WEOX$SQ  CAP.RM    INTERMEDIATE
          SAVE
          ON.RM     WSI,RSTBUF
*    CHECK FOR EOP AFTER READ/SKIP
          EQ.RM     RT,#ST#,FLSHS,B2
          F.RM      LOP,B2
          NONEOF    B2,(#GE#,#SF#,#SB#),EWAR
          SB6       EWAR
          LGO.RM    PLWAR 
  
 PLWAR    FAKEPL    =XWAR$SQ
  
 EWAR     BSS       0 
          F.RM      WEOX,1,X1,-1
          ZR        X1,NOLOP
          EQ.RM     RT,#WT#,SETPU 
          F.RM      LOP,X1,-#EN#   IF LOP=ENDFILE OR WEOR 
          ZR        X1,FLSHR       BUFFER HAS ALREADY BEEN FLUSHED
          SX1       X1+#EN#-#WE#
          ZR        X1,FLSHR
 SETPU    BSS       0 
          SET.RM    LOP,#PU#       PREVENT WAR DURING FLUSH 
NOLOP     BSS       0 
          SB6       FLSHR 
          EQ.RM     RT,#WT#,FLSHW 
          EQ        =YFLSH$SQ      FLUSH BUFFER 
  
FLSHW     F.RM      MRL 
          SX6       10
          IX7       X1-X6 
          PL        X7,=YFLSH$SQ
          BX7       X1
          SA7       TMRL
          SET.RM    MRL,10
          SB6       FLSHRW
          EQ        =YFLSH$SQ 
  
FLSHRW    SA2       TMRL
          SET.RM    MRL,X2
          MX6       0 
          SA6       TMRL
          EQ        FLSHR 
TMRL      DATA      0              KEEP MRL DURINF FLUSH ON RT=W IF MRL<10
  
RSTBUF    SX6       A0+#FTL#
          SET.RM    FIRST,X6
          SET.RM    IN,X6 
          SET.RM    OUT,X6
          SX6       X6+2
          SET.RM    LIMIT,X6
          EQ        FLSHR 
          SPACE     2 
 FLSHS    BSS       0              FLUSH S RECORDS
          NE.RM     FP,0,FLSHS2    DONT HAVE TO TERMINATE PREVIOUS
*         PUTP      A0,,0,,,,TERM    (SIMULATED BELOW)
          SET.RM    TRM,1 
          SET.RM    PPT,1 
          SET.RM    PTL,0 
          SET.RM    RPTL,0
          SB6       FLSHS1
          F.RM      FOJP,B4,+=YRM$P1
          JP        B4             PUT.S
 FLSHS1   BSS       0 
          SB6       FLSHS1A 
          EQ        =YFLSH$S       MAKE SURE BUFFER IS EMPTY
 FLSHS1A  BSS       0 
          SB2       B1
          EQ        FLSHR 
  
 FLSHS2   BSS       0 
          NE.RM     LOP,#PU#,FLSHR,B2 
          SB6       FLSHS2A 
          EQ        =YFLSH$S       FLUSH AFTER PUT$S
 FLSHS2A  BSS       0 
          SB2       0 
          SPACE     2 
 FLSHR    BSS       0 
          F.RM      WEOX,1,X1,-1
          ZR        X1,WEOX$S      BR ON EOS
          SET.RM    LOP,#EN#
          SET.RM    FP,#EOP#
          BX3       0              LVL IF WRITER FOR RT=W 
          EQ.RM     RT,#WT#,W$EOS 
*    WRITE END-OF-PARTITION 
          SYSY      34B,R 
          EQ        WEOX$X
 WEOX$S   BSS       0 
          SET.RM    LOP,#WE#
          SET.RM    FP,#EOS#
          F.RM      LVL,3 
 W$EOS    BSS       0 
          SET.RM    LVL,0          WEOR SHOULD CLEAR LVL AFTER USE
          EQ        B2,B1,WEOX$X   BR IF FLUSH DID WRITER 
          ON.RM     SOL,WEOX$X     BR IF S OR L TAPE
          SYSY      24B,R,,3       WEITER 
*    RESET POINTERS 
 WEOX$X   BSS       0 
* CALL /RSPTDSQ/
*CALL /RSPTDSQ/ 
          SET.RM    PAE,1 
          SET.RM    WEOX,0
          SA1       CAPSTAT 
          BX7       X1
          SA7       =XRM$TMP
          RESTORE 
          JP        B6
* END /WEOXDSQ/ 
