*DECK CLSVDSQ 
          IDENT     CLSV$SQ 
          TITLE     CLSV$SQ - HANDLE (UN-)SOLICITED CLOSE VOLUME
          COMMENT   CLOSE VOLUME
          SST 
          B1=1
*#
*1DC  CLSV$SQ 
*0D   PURPOSE 
*0        HANDLE VOLUME CLOSING AND ASSOCIATED LABEL PROCESSING.
*0D   CALL - USER-SOLICITIED
*0        SB6    RETURN-ADDRESS 
*         EQ     CLSV$RM (WHICH GOES TO CLSV$SQ)
*0D   CALL - UNSOLICITED
*0        SB6    0 (GET) OR -1 (PUT)
*         SB3    RETURN-ADDRESS 
*         EQ     CLSV$SQ (AFTER LOADING CAPSULE)
*#
 CLOSVOL  MACRO 
          LOCAL     CALL
          F.RM      VF,1
          SX2       X1-#U#
          SB4       370B
          ZR        X1,CALL        FORCE DEFAULT VF TO U                0007  15
          ZR        X2,CALL        GO CLOSE REEL AND UNLOAD 
          SB4       350B
 CALL     BSS       0 
          SYSY      B4,R           CLOSE THE REEL 
          SA1       A0
          SX7       34000B         ERROR MASK 
          BX7       X7*X1 
          SX6       721B+1S17 
          NZ        X7,=YERR$RM    FATAL HARDWARE ERROR 
          ENDM
 CLSV$SQ  CAP.RM    INTERMEDIATE
          LE        B6,B1,UNSOL    IF CALLED FROM GET OR PUT
 SOLICIT  SPACE     2,8 
          SAVE
          F.RM      PD,B2,-#OUTPUT# 
          ZR        B2,OUT
          SB2       B2+#OUTPUT#-#IO#
          NZ        B2,INP
          EQ.RM     LCR,#ELCR#,INP,B2        LET LCR DECIDE IF PD=IO
  
 OUT      BSS 
          SB6       CSV.RET1       RETURN ADDRESS 
          SET.RM    LVL,0          LEVEL 0
          SET.RM    WEOX,0         WCW FLAG 
          F.RM      RT,X1,-#ST# 
          NZ        X1,=YFLSH$SQ   NOT -S-
          SB5       =YFLSH$S
          PL        B5,=YFLSH$S    -S-
 CSV.RET1 BSS       0 
          SET.RM    LOP,#PU#
          RJ        OUTSTUFF
  
 CSV.XITS BSS       0 
          RJ        UNLABL         UNLOAD LABEL BUFFER
          SET.RM    LOP,#CM#
* CALL /RSPTDSQ/
* CALL /RSPTDSQ/
*CALL /RSPTDSQ/ 
          SET.RM    BN,0,7,1
          JP        B6
  
 INP      RJ        INPA
          SB6       CSV.XITS
          EQ        INPB
 UNSOL    SPACE     4,8 
 UNSOL    SB2       B6             PUT/GET FLAG 
          SB6       B3
          SAVE                     ADDR IN PUT OR GET 
          ZR        B2,UGET 
*         UNSOLICITED CLOSE VOLUME FROM PUT 
          RJ        OUTSTUFF
  
 CSV.XITU BSS       0 
          RJ        UNLABL         UNLOAD LABEL BUFFER
          JP        B6
  
*         UNSOLICITED CLOSE VOLUME FROM GET 
 UGET     RJ        INPA
  
          F.RM      LT,B2,-#S#
          SB6       UG1 
          ZR        B2,CHKLABS
 UG1      SB6       CSV.XITU
  
 INPB     BSS 
          SET.RM    FP,#BOV#,7,1
          SYSY      340B,R         OPEN THE NEXT REEL 
          CLCD.SQ 
          SET.RM    OC,#OPE#
          EQ        CHKLABS        RETURNS TO XITU OR XITS
*         SECOND LOOP OF CLOSEM (VOLUME), OPEN NEXT REEL, REWIND
*         REEL, AND WRITE HEADER LABELS 
 OUTSTUFF SPACE     4,8 
 CSV.NSO  SYSY      340B,R         OPEN NEXT VOLUME 
          RJ        GETLBUF 
          SB6       CSV.XITS       CLOSEM (VOLUME) EXIT 
          EQ        CHKLABS        WRITE HEADER LABELS IF LX SET
  
 OUTSTUFF 
          RJ        GETLBUF 
          SET.RM    FP,#EOV#,7,1
          SB6       CSV.RET3       RETURN ADDRESS 
          EQ        CHKLABS        CHECK IF WE SHOULD TAKE LX 
*         FIRST LOOP OF CLOSEM (VOLUME), CLOSE CURRENT VOLUME 
 CSV.RET3 BSS       0 
          CLOSVOL                  CLOSE THIS REEL
          SET.RM    FP,#BOV#,7,1
          F.RM      LT,X2,-#NS# 
          ZR        X2,CSV.NSO     JUMP IF NON-STANDARD LABELS
          SB6       CSV.RET4       RETURN ADDRESS 
          EQ        CHKLABS        CHECK IF WE SHOULD TAKE LX 
 CSV.RET4 SYSY      340B,R         OPEN NEXT REEL 
          SB6       OUTSTUFF
          EQ        CHKLABS 
 INPA     SPACE     4,8 
 INPA 
          RJ        GETLBUF 
          SET.RM    FP,#EOV#,7,1
          CLOSVOL                  CLOSE THIS REEL
          SET.RM    OC,#CLO#
          EQ        INPA
 CHKLABS  SPACE     4,8 
 CHKLABS  BSS       0 
          F.RM      LT,X2,-#UL#    NO LABEL EXIT IF LT=UL OR ANY
          ZR        X2,LAB.RET
          SX1       X2+#UL#-#ANY# 
          ZR        X1,LAB.RET
          F.RM      ULP,X3,-#NO#   NO LABEL EXIT IF ULP=NO
          ZR        X3,LAB.ULP0 
          SET.RM    JNK,0 
          F.RM      LX,B2 
          EQ        B2,B0,LAB.RET  NO LABEL EXIT ADDRESS
          SET.RM    ULR,1          NAKE CLOSEL RETURN THROUGH B6
          SET.RM    ULX,B6
          JP        B2             TAKE LABEL EXIT
 LAB.ULP0 BSS       0 
          NE        B2,B0,LAB.RET 
          SET.RM    LAL,0 
 LAB.RET  BSS       0 
          JP        B6
          SPACE     4 
 GETLBUF  DATA      0 
          NE.RM     LT,#S#,GETLBUF
          EQ.RM     ULP,#NO#,GETLBUF
          SB5       =XLBUF$RM 
          PL        B5,GETLB.1     BUFFER ALREADY LOADED
          LOAD.BAM  LBUF
          SA6       =XRM$TMP
 GETLB.1  BSS       0 
          SA1       =XRM$TMP
          BX7       0 
          LX6       X1
          SA7       A1
          SA6       TMP.LBUF
          SX4       9D*#LBLIM#     8-WD LABEL + CONTROL WORD
          SX6       B5
          LX4       18
          BX6       X6+X4 
          SET.RM    LAL,X6
          EQ        GETLBUF 
          SPACE     2 
 UNLABL   DATA      0              UNLOAD LABEL BUFFER
          SET.RM    LAL,0          CLEAR LABEL BUFFER POINTER 
          RJ        =XRM$UTC
          SA1       TMP.LBUF
          BX7       0 
          LX6       X1
          SA7       A1
          SA6       =XRM$TMP
          RJ        =XRM$UTC
          SA1       CAPSTAT        ALLOW UNLOAD OF CLSV$SQ
          BX6       X1
          SA6       =XRM$TMP
          RESTORE                  RESET B6 FOR CALLERS 
          EQ        UNLABL
          SPACE     2 
 LBUF     FAKEPL    =XLBUF$RM 
 TMP.LBUF CON       0 
          END 
