         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
<<   write ring is O.K. for such requests if write reqstd.  >> <<09475>>00215000
<< In DEALLOCATE, add NO'ATTACHIO bit to FLAGS parm word to >> <<09475>>00215001
<<   let caller (read "FOPEN") return device resources dur- >> <<09475>>00215002
<<   ing error backout.  DEALLOCATEs FCLOSE and FREEDEVICEs >> <<09475>>00215003
<<   Device Close cause some drivers  to  kill  the  system >> <<09475>>00215004
<<   (SF923) because no ATTACHIO FOPEN was sent first.      >> <<09475>>00215005
<< Make sure ASKOP is called for tapes or SDISC even if de- >> <<09431>>00215010
<<   vice is owned by a user or by DEVREC/PVPROC. Some tape >> <<09431>>00215020
<<   drives and cartridge tapes take a long time AVRing and >> <<09431>>00215030
<<   this fix prevents ALLOCATE from returning  DEVICE  UN- >> <<09431>>00215040
<<   AVAILABLE during AVR.                                  >> <<09431>>00215050
<<   Extend the concepts in A8986 to assume  a  write  ring >> <<09475>>00215060
<< for  labeled serial disc write requests.  Prevents SDISC >> <<09475>>00215070
<< from bothering the operator.                             >> <<09475>>00215080
<<   Add initialization of  OBTAIN/RELEASE  data  structure >> <<09564>>00215090
<< for serial disc Gap Table extra data segment.            >> <<09564>>00215100
            IF ACCESS <> 0 THEN   << 2 -- retn is Y/N ==> Y >> <<09475>>17090000
               IOUTBUF := TRUE;   <<      iff write request >> <<09475>>17091000
            IF LABELED = 1 AND SYSTAPEAVR = 1 THEN             <<09475>>17915000
               BEGIN   << If lbld SDISC wrt, wrt ring O.K.  >> <<09475>>17916000
               IF PTYPE = 2 AND ACCESS <> 0 THEN               <<09475>>17917000
                  IOUTBUF := TRUE;                             <<09475>>17917100
               GO TO LABOK;                                    <<09475>>17918000
               END;                                            <<09475>>17919000
   LOGICAL                                                     <<09564>>18720000
          SORFDISC := FALSE,   << Alloc. serial/foreign dsc >> <<09564>>18721000
          WRITE'RING;          << For S/FDISC, set by ASKOP >> <<09564>>18722000
   EQUATE INITARRAYSIZE = 9;                                   <<09564>>18725000
$EDIT VOID=18770000                                            <<09564>>18750000
      WRITE'RING) THEN                                         <<09564>>19830000
         IF NOT WRITE'RING AND                                 <<09564>>19855000
      ELSE   << ASKOP for tape, SDISC even if owned/DEVREC. >> <<09431>>20305000
         IF LDT'DEVICE'TYPE = LDT'MAG'TAPE OR                  <<09431>>20310000
            LDT'DEVICE'TYPE = LDT'SERIAL'DISC THEN             <<09431>>20315000
$EDIT VOID=23900000                                            <<09564>>23885000
            MOVE TEMPDESC := (-1,      << JUSTALLOCATED     >> <<09564>>23886000
                               0,      << For WRITE'RING    >> <<09564>>23887000
                               0,      << FATALERROR        >> <<09564>>23888000
                               0,      << VOLUME'FATAL      >> <<09564>>23889000
                              MEMSIZE, << Size of GPT XDS   >> <<09564>>23890000
                              4(0));   << OBTN/RLS struct.  >> <<09564>>23891000
            TEMPDESC(1) := WRITE'RING;  << There we are.    >> <<09564>>23892000
                                                               <<09389>>26310250
<<   The NO'ATTACHIO bit should be set whenever we want  to >> <<09389>>26310500
<< give back resources acquired by ALLOCATE but do not want >> <<09389>>26310750
<< to perform the various I/O calls associated with  normal >> <<09389>>26311000
<< device deallocation.  FOPEN will usually be the only one >> <<09389>>26311250
<< to use this feature, when it  has  called  ALLOCATE  but >> <<09389>>26311500
<< then finds itself unable to complete the FOPEN.          >> <<09389>>26311750
                     NO'ATTACHIO =     DEVPARM0.(1:1) #,       <<09389>>26392500
$PAGE "   ***   DEALLOCATE - subroutines ATACHIO, FIND'ENTRY"  <<09389>>26545000
DOUBLE SUBROUTINE ATACHIO (LDEV, QMISC, DSTX, OFFSET,          <<09389>>26545250
                           FUNCTION, COUNT, P1, P2, FLAGS);    <<09389>>26545500
   VALUE   LDEV, QMISC, DSTX, OFFSET, FUNCTION, COUNT, P1, P2, <<09389>>26545750
           FLAGS;                                              <<09389>>26546000
   INTEGER LDEV, QMISC, DSTX, OFFSET, FUNCTION, COUNT, P1, P2, <<09389>>26546250
           FLAGS;                                              <<09389>>26546500
                                                               <<09389>>26546750
BEGIN COMMENT --                                               <<09389>>26547000
  A shell for the real ATTACHIO calls in DEALLOCATE, this sub- <<09389>>26547250
routine allows us to filter out the NO'ATTACHIO calls here in- <<09389>>26547500
stead of throughout the procedure.  If ATTACHIO is called, the <<09389>>26547750
subroutine returns that procedure's status.  If  the  call  is <<09389>>26548000
skipped, a normal completion (1, 0) is returned.               <<09389>>26548250
;                                                              <<09389>>26548500
ATACHIO := [16/1, 16/0]D;   << Normal (no error) return.    >> <<09389>>26548750
IF NOT NO'ATTACHIO THEN                                        <<09389>>26549000
   ATACHIO := ATTACHIO (LDEV, QMISC, DSTX, OFFSET, FUNCTION,   <<09389>>26549250
                        COUNT, P1, P2, FLAGS);                 <<09389>>26549500
END;   << of ATACHIO.                                       >> <<09389>>26549750
            OR NOT ALLOCED AND XDDS'SPOOL'STATE = XDDS'READY   <<09389>>26670000
$PAGE "   *** DEALLOCATE - procedure body   ***"               <<09389>>26745000
             ATACHIO (LDEV, 0, 0, 0, 3, 0, 0, 0, 7);           <<09389>>26945000
              RELSIR (LDT'SIR, SAVE'LDT'SIR);                  <<09389>>26975000
              ATACHIO (LDEV, 0, 0, 0, 3, 0, 1, 0, 1);          <<09389>>26980000
              SAVE'LDT'SIR := GETSIR (LDT'SIR);                <<09389>>26985000
                ATACHIO (LDEV, 0, 0, 0, 3, 0, 0, 0, %17);      <<09389>>27015000
                     ATACHIO (LDEV,0,0,0,186,0,0,0,1);         <<09389>>27295000
                     ATACHIO (LDEV,0,0,0,145,0,0,0,1);         <<09389>>27320000
                     ATACHIO (LDEV,0,0,0,  3,0,0,0,1);         <<09389>>27325000
                        LABELLED LOR NO'ATTACHIO);             <<09389>>27425000
