User Tools

Site Tools


cdc:nos2.source:opl.opl871:deck:sxdest

Deck SXDEST

9 Modifications

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M01S00001.sxdest  +++|PROC DS$$DOC;
00002  M01S00002.sxdest  +++|
00003  M01S00003.sxdest  +++|# TITLE DS$$DOC - DESIGN DOCUMENTATION FOR THE DESTAGE PROCESS.       #
00004  M01S00004.sxdest  +++|
00005  M01S00005.sxdest  +++|      BEGIN  # DS$$DOC #
00006  M01S00006.sxdest  +++|
00007  M01S00007.sxdest  +++|#
00008  M01S00008.sxdest  +++|*                   D E S T A G I N G    O V E R V I E W
00009  M01S00009.sxdest  +++|*
00010  M01S00010.sxdest  +++|*     *SSMOVE* CREATES A FILE CALLED *MVOCOM* (UI = 377760B) WHICH HAS
00011  M01S00011.sxdest  +++|*     AN ENTRY FOR EACH FILE TO BE DESTAGED OR DESTAGED AND RELEASED.
00012  M01S00012.sxdest  +++|*     *SSMOVE* ISSUES A *UCP* CALL TO *SSEXEC* TO INDICATE THAT
00013  M01S00013.sxdest  +++|*     DESTAGING IS TO BE DONE.  THE *UCP* REQUEST PROCESSOR *TYP2RP*
00014  M01S00014.sxdest  +++|*     CALLS *DSSETUP* TO PREPARE FOR FILE DESTAGING.
00015  M01S00015.sxdest  +++|*
00016  M01S00016.sxdest  +++|*     *DSSETUP* COPIES THE DESTAGING ENTRIES (*TDAM* ENTRIES) FROM THE
00017  M01S00017.sxdest  +++|*     FILE PREPARED BY *SSMOVE* TO EIGHT SCRATCH FILES, ONE PER
00018  M01S00018.sxdest  +++|*     SUBFAMILY.  WHILE DOING THIS COPY, IT CALCULATES THE NUMBER OF AU
00019  M01S00019.sxdest  +++|*     REQUIRED TO HOLD THE FILES TO BE DESTAGED.  THESE REQUIREMENTS
00020  M01S00020.sxdest  +++|*     ARE USED BY THE ALLOCATOR (*DSALLO*) TO SELECT THE BEST STORAGE
00021  M01S00021.sxdest  +++|*     MODULE AND CARTRIDGE FOR THE SET OF FILES IN ATTEMPTING TO
00022  M01S00022.sxdest  +++|*     SATISFY THE DUAL OBJECTIVES OF AVOIDING CARTRIDGE OVERFLOW AND
00023  M01S00023.sxdest  +++|*     REDUCING CARTRIDGE ACCESS TIME BY PLACING MANY FILES ON THE SAME
00024  M01S00024.sxdest  +++|*     CARTRIDGE.
00025  M01S00025.sxdest  +++|*
00026  M01S00026.sxdest  +++|*     WHEN THE EIGHT SCRATCH FILES ARE PREPARED, THE FILE FROM *SSMOVE*
00027  M01S00027.sxdest  +++|*     IS REWOUND AND IS READY TO BE USED TO REPORT BACK TO *SSMOVE* THE
00028  M01S00028.sxdest  +++|*     IDENTITY OF ALL FILES WHICH COULD NOT BE DESTAGED.  THE REASON
00029  M01S00029.sxdest  +++|*     FOR EACH SUCH FAILURE IS ALSO SUPPLIED.  THE VARIABLE *DSC$INIT*
00030  M01S00030.sxdest  +++|*     IS SET NON-ZERO TO SIGNAL THE MAIN LOOP THAT DESTAGING IS TO BE
00031  M01S00031.sxdest  +++|*     INITIATED.  *MAINLP* CALLS *NEWWORK* WHICH GETS AN *HLRQ* ENTRY
00032  M01S00032.sxdest  +++|*     AND THEN CALLS *DSNTDAM* TO SELECT A SUBFAMILY AND FILE TO START
00033  M01S00033.sxdest  +++|*     DESTAGING.
00034  M01S00034.sxdest  +++|*
00035  M01S00035.sxdest  +++|*     IT SHOULD BE NOTED THAT THE STAGING PROCESS CAN PRE-EMPT THE
00036  M01S00036.sxdest  +++|*     CARTRIDGE OR *HLRQ* ENTRY USED FOR DESTAGING BY SETTING THE
00037  M01S00037.sxdest  +++|*     *DOSTG* FLAG IN THE *HLRQ* ENTRY.  WHEN DESTAGER IS DONE WITH THE
00038  M01S00038.sxdest  +++|*     CURRENT CARTRIDGE (EXCEPT IN A CARTRIDGE OVERFLOW CONDITION), IT
00039  M01S00039.sxdest  +++|*     WILL CALL *STNTDAM* TO SELECT A FILE TO BE STAGED FROM THE
00040  M01S00040.sxdest  +++|*     CURRENT CARTRIDGE USING THE CURRENT *HLRQ* ENTRY.  WHEN THIS
00041  M01S00041.sxdest  +++|*     OCCURS, THE *DSC$INIT* FLAG IS AGAIN SET NON-ZERO TO CAUSE THE
00042  M01S00042.sxdest  +++|*     DESTAGING PROCESS TO BE RE-INITIATED.
00043  M01S00043.sxdest  +++|#
00044  M01S00044.sxdest  +++|
00045  M01S00045.sxdest  +++|                                               CONTROL EJECT;
00046  M01S00046.sxdest  +++|
00047  M01S00047.sxdest  +++|#
00048  M01S00048.sxdest  +++|*           M A J O R   R O U T I N E S   I N   D E S T A G I N G
00049  M01S00049.sxdest  +++|*
00050  M01S00050.sxdest  +++|*     1)   DSSETUP   IS CALLED BY *TYP2RP* WHEN *SSMOVE* MAKES A *UCP*
00051  M01S00051.sxdest  +++|*     REQUEST TO *SSEXEC*.  IT COPIES THE *TDAM* ENTRIES FOR FILES TO
00052  M01S00052.sxdest  +++|*     BE DESTAGED FROM THE *MVOCOM* FILE TO EIGHT SCRATCH FILES, ONE
00053  M01S00053.sxdest  +++|*     PER SUBFAMILY.
00054  M01S00054.sxdest  +++|*
00055  M01S00055.sxdest  +++|*     2)  DESTAGR   IS CALLED BY THE *HLRQ* MONITOR TO DESTAGE A FILE.
00056  M01S00056.sxdest  +++|*     IT CALLS PROCEDURES 3 AND 5-8 BELOW TO ASSIST IT IN THIS PROCESS.
00057  M01S00057.sxdest  +++|*     WHEN A FILE HAS BEEN DESTAGED, IT CALLS *DSNTDAM* TO UPDATE THE
00058  M01S00058.sxdest  +++|*     *HLRQ* ENTRY TO REFLECT THE NEXT FILE TO BE DESTAGED.
00059  M01S00059.sxdest  +++|*
00060  M01S00060.sxdest  +++|*     3)  DSALLO    IS CALLED BY *DESTAGR* TO SELECT A STORAGE MODULE
00061  M01S00061.sxdest  +++|*     AND CARTRIDGE FOR A FILE AND ALSO ASSIGN SOME UNUSED SPACE TO THE
00062  M01S00062.sxdest  +++|*     FILE BEING DESTAGED.
00063  M01S00063.sxdest  +++|*
00064  M01S00064.sxdest  +++|*     4)  ANLZAST   IS A HELPER ROUTINE TO *DSALLO* TO IDENTIFY THE
00065  M01S00065.sxdest  +++|*     BEST CARTRIDGE FOR A SHORT FILE AND THE BEST CARTRIDGE OR
00066  M01S00066.sxdest  +++|*     CARTRIDGE GROUP FOR A LONG FILE.
00067  M01S00067.sxdest  +++|*
00068  M01S00068.sxdest  +++|*     5)  HLLOAD    IS CALLED BY *DESTAGR* TO INTERFACE WITH THE DRIVER
00069  M01S00069.sxdest  +++|*     TO CAUSE A CARTRIDGE TO BE MADE AVAILABLE FOR I/O.
00070  M01S00070.sxdest  +++|*
00071  M01S00071.sxdest  +++|*     6)  HLCPYDC   IS CALLED BY *DESTAGR* TO COPY SOME FILE DATA FROM
00072  M01S00072.sxdest  +++|*     DISK TO THE CURRENTLY ASSIGNED M860 VOLUME.
00073  M01S00073.sxdest  +++|*
00074  M01S00074.sxdest  +++|*     7)  HLUNLD    IS CALLED BY *DESTAGR* TO INTERFACE WITH THE DRIVER
00075  M01S00075.sxdest  +++|*     TO UNLOAD A CARTRIDGE WHICH IS NO LONGER NEEDED.
00076  M01S00076.sxdest  +++|*
00077  M01S00077.sxdest  +++|*     8)  RLSVOL    IS CALLED BY *DESTAGR* AND *HLCPYDC* (AND OTHER
00078  M01S00078.sxdest  +++|*     PROCEDURES) TO RELEASE ANY UNUSED AU BY RETURNING THEM TO THE
00079  M01S00079.sxdest  +++|*     CHAIN OF AVAILABLE AU ON THE CURRENT CARTRIDGE.
00080  M01S00080.sxdest  +++|*
00081  M01S00081.sxdest  +++|*     9)  DSNTDAM   IS CALLED BY *DESTAGR* AND *NEWWORK* WHEN AN *HLRQ*
00082  M01S00082.sxdest  +++|*     ENTRY IS AVAILABLE FOR USE IN DESTAGING A FILE.  *DSNTDAM* ISSUES
00083  M01S00083.sxdest  +++|*     ANY APPROPRIATE MESSAGES ABOUT THE STATUS OF THE FILE JUST
00084  M01S00084.sxdest  +++|*     DESTAGED AND SELECTS THE NEXT FILE TO BE DESTAGED, TRYING TO PICK
00085  M01S00085.sxdest  +++|*     ONE WHICH WILL FIT ON THE CURRENTLY LOADED CARTRIDGE.
00086  M01S00086.sxdest  +++|*
00087  M01S00087.sxdest  +++|*     10) LLRQXXX   REPRESENT SEVERAL LOW LEVEL REQUEST MODULES WHICH
00088  M01S00088.sxdest  +++|*     ARE CALLED BY THE *HLXXXXX* ROUTINES AS NEEDED TO PERFORM
00089  M01S00089.sxdest  +++|*     CARTRIDGE LOADS, UNLOADS, AND COPIES FROM DISK TO CARTRIDGE.
00090  M01S00090.sxdest  +++|#
00091  M01S00091.sxdest  +++|
00092  M01S00092.sxdest  +++|                                               CONTROL EJECT;
00093  M01S00093.sxdest  +++|
00094  M01S00094.sxdest  +++|#
00095  M01S00095.sxdest  +++|*     D E S T A G E   O V E R V I E W  ( D E T A I L E D )
00096  M01S00096.sxdest  +++|*
00097  M01S00097.sxdest  +++|*     INPUT TO THE TOTAL DESTAGE PROCESS IS PREPARED BY THE *SSMOVE*
00098  M01S00098.sxdest  +++|*     UTILITY AND CONSISTS OF ONE FILE WHICH CONTAINS AN ENTRY FOR EACH
00099  M01S00099.sxdest  +++|*     FILE WHICH IS TO BE DESTAGED.  THESE ENTRIES HAVE BEEN ORDERED BY
00100  M01S00100.sxdest  +++|*     *SSMOVE* TO ASSIST IN REDUCING THE NUMBER OF CARTRIDGE ACCESSES
00101  M01S00101.sxdest  +++|*     NEEDED TO DESTAGE ALL THE FILES.  THE FIRST SET OF ENTRIES IS FOR
00102  M01S00102.sxdest  +++|*     SUBFAMILY 0, SUBFAMILY 1, ... THROUGH SUBFAMILY 7.  WITHIN EACH
00103  M01S00103.sxdest  +++|*     SUBFAMILY, ENTRIES ARE ORDERED SUCH THAT ALL SHORT FILES OCCUR
00104  M01S00104.sxdest  +++|*     FIRST AND ALL LONG FILES OCCUR AFTERWARDS.  WITHIN THE LIST OF
00105  M01S00105.sxdest  +++|*     SHORT FILES AND LONG FILES, INDIVIDUAL FILES ARE ORDERED BY
00106  M01S00106.sxdest  +++|*     DECREASING FILE LENGTH.  THE *SSMOVE* UTILITY DECLARES A FILE TO
00107  M01S00107.sxdest  +++|*     BE SHORT IF ITS LENGTH IS LESS THAN A SITE SPECIFIED VALUE.
00108  M01S00108.sxdest  +++|*
00109  M01S00109.sxdest  +++|*     BY DEFINITION, SHORT FILES ONLY RESIDE ON ONE CARTRIDGE.  IF A
00110  M01S00110.sxdest  +++|*     SHORT FILE IS ENCOUNTERED WHICH DOES NOT FIT ON ONE CARTRIDGE,
00111  M01S00111.sxdest  +++|*     THE ATTEMPT TO DESTAGE IT IS ABANDONED DUE TO LACK OF SPACE AND
00112  M01S00112.sxdest  +++|*     DESTAGING CONTINUES WITH THE NEXT FILE.  TO REDUCE STAGING DELAYS
00113  M01S00113.sxdest  +++|*     DUE TO CARTRIDGE POSITIONING TIME, SHORT FILES ARE STORED AT THE
00114  M01S00114.sxdest  +++|*     FRONT OF A CARTRIDGE.  A CARTRIDGE DIVISION POINT PARAMETER TO
00115  M01S00115.sxdest  +++|*     *SSLABEL* DETERMINES THE END OF THE SHORT FILE AREA.
00116  M01S00116.sxdest  +++|*
00117  M01S00117.sxdest  +++|*     LONG FILES ARE ALLOWED TO OVERFLOW FROM ONE CARTRIDGE TO ANOTHER
00118  M01S00118.sxdest  +++|*     WITHIN A GROUP OF UP TO 16 CARTRIDGES, ALTHOUGH THE DESTAGER
00119  M01S00119.sxdest  +++|*     ATTEMPTS TO AVOID OR REDUCE CARTRIDGE OVERFLOW AS MUCH AS
00120  M01S00120.sxdest  +++|*     POSSIBLE.  IF A LONG FILE DOES NOT FIT ON ANY GROUP OF
00121  M01S00121.sxdest  +++|*     CARTRIDGES, THE ATTEMPT TO DESTAGE IT IS ABANDONED DUE TO LACK OF
00122  M01S00122.sxdest  +++|*     AVAILABLE SPACE.
00123  M01S00123.sxdest  +++|*
00124  M01S00124.sxdest  +++|*     IF THE FIRST FILE OF THE SEQUENCE OF FILES FOR A SUBFAMILY IS A
00125  M01S00125.sxdest  +++|*     SHORT FILE, THE ALLOCATOR SELECTS A CARTRIDGE WHICH WILL
00126  M01S00126.sxdest  +++|*     DEFINITELY HOLD THE FIRST SHORT FILE AND HOPEFULLY WILL HOLD ALL
00127  M01S00127.sxdest  +++|*     THE SHORT FILES.  IF THIS IS POSSIBLE, THE ALLOCATOR WILL FURTHER
00128  M01S00128.sxdest  +++|*     PICK THE CARTRIDGE WHICH IS ABLE TO HOLD THE MOST LONG FILES.
00129  M01S00129.sxdest  +++|*     AFTER A CARTRIDGE HAS BEEN SELECTED AND THE FIRST SHORT FILE HAS
00130  M01S00130.sxdest  +++|*     BEEN DESTAGED, AS MANY OTHER SHORT FILES AS WILL FIT ON THAT
00131  M01S00131.sxdest  +++|*     CARTRIDGE ARE DESTAGED, AND THEN AS MANY LONG FILES AS WILL FIT
00132  M01S00132.sxdest  +++|*     ON THAT CARTRIDGE ARE ALSO DESTAGED.  ALL FILES WHICH DO NOT FIT
00133  M01S00133.sxdest  +++|*     ON THE CURRENT CARTRIDGE ARE DEFERRED FOR SUBSEQUENT DESTAGING TO
00134  M01S00134.sxdest  +++|*     A DIFFERENT CARTRIDGE.  THIS IS DONE BY WRITING THE FILES'S
00135  M01S00135.sxdest  +++|*     *TDAM* ENTRY TO A SCRATCH FILE.  WHEN DESTAGING TO THIS FIRST
00136  M01S00136.sxdest  +++|*     CARTRIDGE HAS BEEN COMPLETED, THE ABOVE PROCESS IS REPEATED USING
00137  M01S00137.sxdest  +++|*     THE LIST OF DEFERRED FILES AS INPUT INSTEAD OF THE ORIGINAL LIST
00138  M01S00138.sxdest  +++|*     OF FILES FROM *SSMOVE*.  THIS PROCESS CONTINUES ONE CARTRIDGE AT
00139  M01S00139.sxdest  +++|*     A TIME UNTIL ALL THE SHORT FILES AND AS MANY LONG FILES AS
00140  M01S00140.sxdest  +++|*     POSSIBLE HAVE BEEN DESTAGED.
00141  M01S00141.sxdest  +++|*
00142  M01S00142.sxdest  +++|*     WHEN ONLY LONG FILES REMAIN TO BE DESTAGED, THE PROCESS CONTINUES
00143  M01S00143.sxdest  +++|*     AS DESCRIBED ABOVE.  HOWEVER, IF AT ANY TIME, THE FIRST FILE ON
00144  M01S00144.sxdest  +++|*     THE SEQUENCE OF REMAINING FILES WILL NOT FIT ON ONE CARTRIDGE,
00145  M01S00145.sxdest  +++|*     THEN A GROUP OF CARTRIDGES IS SELECTED AND CARTRIDGES WITHIN THIS
00146  M01S00146.sxdest  +++|*     GROUP ARE SELECTED ONE AT A TIME UNTIL THE FIRST FILE HAS BEEN
00147  M01S00147.sxdest  +++|*     COMPLETELY DESTAGED.  THE DESTAGE PROCESS THEN CONTINUES BY
00148  M01S00148.sxdest  +++|*     DESTAGING AS MANY OF THE REMAINING LONG FILES AS POSSIBLE TO THE
00149  M01S00149.sxdest  +++|*     FINAL CONTINUATION CARTRIDGE AS LONG AS NO FILE HAS TO OVERFLOW
00150  M01S00150.sxdest  +++|*     TO ANOTHER CARTRIDGE.  AGAIN, ANY FILES WHICH DO NOT FIT IN THEIR
00151  M01S00151.sxdest  +++|*     ENTIRETY ARE DEFERRED FOR DESTAGING TO A SUBSEQUENT CARTRIDGE OR
00152  M01S00152.sxdest  +++|*     CARTRIDGES BY WRITING THE DESTAGE *TDAM* ENTRY TO A SCRATCH FILE.
00153  M01S00153.sxdest  +++|#
00154  M01S00154.sxdest  +++|
00155  M01S00155.sxdest  +++|                                               CONTROL EJECT;
00156  M01S00156.sxdest  +++|
00157  M01S00157.sxdest  +++|#
00158  M01S00158.sxdest  +++|*                 D E S T A G E   D E T A I L E D   F L O W
00159  M01S00159.sxdest  +++|*
00160  M01S00160.sxdest  +++|*                         ( N O R M A L   C A S E )
00161  M01S00161.sxdest  +++|*
00162  M01S00162.sxdest  +++|*     THE FOLLOWING SEQUENCE OCCURS WHEN A FILE IS DESTAGED.
00163  M01S00163.sxdest  +++|*
00164  M01S00164.sxdest  +++|*     CASE A) NO CARTRIDGE OVERFLOW.
00165  M01S00165.sxdest  +++|*
00166  M01S00166.sxdest  +++|*     PROCEDURE *DSNTDAM* SELECTS THE SUBFAMILY FOR WHICH FILE
00167  M01S00167.sxdest  +++|*     DESTAGING IS TO OCCUR.  IT THEN SELECTS THE FIRST FILE ON THE
00168  M01S00168.sxdest  +++|*     LIST OF FILES SUBMITTED BY *SSMOVE*.  IF SHORT FILES ARE TO BE
00169  M01S00169.sxdest  +++|*     DESTAGED, THIS FIRST FILE IS THE LONGEST OF THE SHORT FILES.  IF
00170  M01S00170.sxdest  +++|*     ONLY LONG FILES ARE TO BE DESTAGED, THIS FILE IS THE LONGEST OF
00171  M01S00171.sxdest  +++|*     THE LONG FILES.
00172  M01S00172.sxdest  +++|*
00173  M01S00173.sxdest  +++|*     PROCEDURE *DSALLO* IS CALLED BY *DESTAGR* TO ALLOCATE SOME
00174  M01S00174.sxdest  +++|*     CARTRIDGE SPACE FOR THE FILE DATA.  SINCE THIS IS THE INITIAL
00175  M01S00175.sxdest  +++|*     ALLOCATION CALL, IT FIRST SELECTS A STORAGE MODULE THAT CAN BE
00176  M01S00176.sxdest  +++|*     USED, READS IN THE *AST* FOR THIS STORAGE MODULE, PICKS A
00177  M01S00177.sxdest  +++|*     CARTRIDGE (OR, IF OVERFLOW IS ANTICIPATED, A GROUP OF CARTRIDGES
00178  M01S00178.sxdest  +++|*     AND THE INITIAL CARTRIDGE TO BE USED WITHIN THIS GROUP), READS IN
00179  M01S00179.sxdest  +++|*     THE *FCT* ENTRY FOR THIS CARTRIDGE AND FINALLY ALLOCATES A
00180  M01S00180.sxdest  +++|*     SEQUENCE OF ALLOCATION UNITS TO BE USED FOR THE FILE DATA.  THIS
00181  M01S00181.sxdest  +++|*     SEQUENCE IS CALLED A VOLUME.
00182  M01S00182.sxdest  +++|*
00183  M01S00183.sxdest  +++|*     THE DESTAGER THEN CALLS *HLLOAD* TO LOAD THE CARTRIDGE SO IT CAN
00184  M01S00184.sxdest  +++|*     BE ACCESSED AND MAKES A CALL TO *PFM* TO OBTAIN ACCESS TO THE
00185  M01S00185.sxdest  +++|*     FILE DATA.  IT THEN CALLS *HLCPYDC* TO COPY SOME FILE DATA FROM
00186  M01S00186.sxdest  +++|*     DISK TO THE CARTRIDGE.  IF THE ENTIRE FILE IS NOT YET COPIED TO
00187  M01S00187.sxdest  +++|*     THE CARTRIDGE, CALLS TO ALLOCATE MORE SPACE AND COPY MORE DATA
00188  M01S00188.sxdest  +++|*     ARE MADE UNTIL THE FILE IS COPIED TO THE CARTRIDGE.  AS EACH
00189  M01S00189.sxdest  +++|*     VOLUME IS COPIED TO THE CARTRIDGE, THE *FCT* ENTRY IS UPDATED IN
00190  M01S00190.sxdest  +++|*     MEMORY TO REFLECT THE SEQUENCE OF ALLOCATION UNITS THAT ARE USED
00191  M01S00191.sxdest  +++|*     TO STORE THE FILE DATA.  UPON COMPLETION OF THIS ALLOCATE/COPY
00192  M01S00192.sxdest  +++|*     SEQUENCE, *PFM* IS AGAIN CALLED TO UPDATE THE FILE'S *PFC* ENTRY
00193  M01S00193.sxdest  +++|*     TO REFLECT THE LOCATION OF THE FILE DATA ON THE ALLOCATED
00194  M01S00194.sxdest  +++|*     CARTRIDGE.  IF DISK SPACE IS TO BE RELEASED, ANOTHER CALL TO
00195  M01S00195.sxdest  +++|*     *PFM* IS MADE TO ACHIEVE THIS.
00196  M01S00196.sxdest  +++|*
00197  M01S00197.sxdest  +++|*     CASE B)  ADDITIONAL FILES ON THE SAME CARTRIDGE.
00198  M01S00198.sxdest  +++|*
00199  M01S00199.sxdest  +++|*     UPON COMPLETION OF THE DESTAGE PROCESS FOR THE FIRST FILE,
00200  M01S00200.sxdest  +++|*     PROCEDURE *DSNTDAM* IS AGAIN CALLED TO SELECT THE NEXT FILE TO BE
00201  M01S00201.sxdest  +++|*     DESTAGED.  IT SELECTS ONE WHICH WILL FIT ON THE CURRENT
00202  M01S00202.sxdest  +++|*     CARTRIDGE.  IF LONGER FILES EXIST, THEIR DESTAGE ENTRIES ARE
00203  M01S00203.sxdest  +++|*     STORED ON A SCRATCH FILE TO BE PROCESSED LATER WHEN IT BECOMES
00204  M01S00204.sxdest  +++|*     NECESSARY TO SWITCH TO A DIFFERENT CARTRIDGE.  THE DESTAGER
00205  M01S00205.sxdest  +++|*     ALLOCATES SPACE VIA *DSALLO*, OBTAINS ACCESS TO THE FILE DATA VIA
00206  M01S00206.sxdest  +++|*     *PFM* AND COPIES THE FILE TO THE CARTRIDGE USING THE
00207  M01S00207.sxdest  +++|*     ALLOCATE/COPY SEQUENCE DESCRIBED ABOVE.  THE FILE'S *PFC* ENTRY
00208  M01S00208.sxdest  +++|*     IS UPDATED AND THE DISK SPACE RELEASED AS DESCRIBED ABOVE.
00209  M01S00209.sxdest  +++|*
00210  M01S00210.sxdest  +++|*     CASE C)  CARTRIDGE OVERFLOW.
00211  M01S00211.sxdest  +++|*
00212  M01S00212.sxdest  +++|*     THIS DESTAGE PROCESS IS SIMILAR TO CASE A), EXCEPT THAT WHEN THE
00213  M01S00213.sxdest  +++|*     FIRST CARTRIDGE NO LONGER HAS AVAILABLE SPACE, THE ALLOCATOR
00214  M01S00214.sxdest  +++|*     SELECTS A CONTINUATION CARTRIDGE.  THIS SECOND CARTRIDGE MUST BE
00215  M01S00215.sxdest  +++|*     IN THE SAME GROUP AS THE FIRST.  THE LINKAGE INFORMATION FOR THE
00216  M01S00216.sxdest  +++|*     FIRST CARTRIDGE IS UPDATED TO POINT TO ANOTHER CARTRIDGE WITHOUT
00217  M01S00217.sxdest  +++|*     IDENTIFYING A SPECIFIC CARTRIDGE OR INITIAL ALLOCATION UNIT.  THE
00218  M01S00218.sxdest  +++|*     *FCT* ENTRY FOR THE FIRST CARTRIDGE IS THEN WRITTEN TO DISK, AND
00219  M01S00219.sxdest  +++|*     THE *FCT* ENTRY FOR THE SECOND CARTRIDGE IS THEN READ TO MEMORY.
00220  M01S00220.sxdest  +++|*     AFTER THE FIRST VOLUME ON THE SECOND CARTRIDGE HAS BEEN WRITTEN,
00221  M01S00221.sxdest  +++|*     THE *FCT* ENTRY FOR THE SECOND CARTRIDGE IS UPDATED TO REFLECT
00222  M01S00222.sxdest  +++|*     THE NEW VOLUME AND WRITTEN TO DISK.  THE *FCT* ENTRY FOR THE
00223  M01S00223.sxdest  +++|*     FIRST CARTRIDGE IS READ INTO MEMORY, UPDATED TO LINK TO THE
00224  M01S00224.sxdest  +++|*     INITIAL ALLOCATION UNIT OF THE FIRST VOLUME ON THE SECOND
00225  M01S00225.sxdest  +++|*     CARTRIDGE AND THEN WRITTEN BACK TO DISK.  THE *FCT* ENTRY FOR THE
00226  M01S00226.sxdest  +++|*     SECOND CARTRIDGE IS THEN READ BACK TO MEMORY.  UPON COMPLETION OF
00227  M01S00227.sxdest  +++|*     THE ALLOCATE/COPY SEQUENCE, THE FILE'S *PFC* ENTRY IS UPDATED AS
00228  M01S00228.sxdest  +++|*     BEFORE, AND THE DISK SPACE RELEASED IF APPROPRIATE.
00229  M01S00229.sxdest  +++|#
00230  M01S00230.sxdest  +++|
00231  M01S00231.sxdest  +++|                                               CONTROL EJECT;
00232  M01S00232.sxdest  +++|
00233  M01S00233.sxdest  +++|#
00234  M01S00234.sxdest  +++|*                               D E S T A G E
00235  M01S00235.sxdest  +++|*
00236  M01S00236.sxdest  +++|*       E R R O R   C O N D I T I O N S   A N D   P R O C E S S I N G
00237  M01S00237.sxdest  +++|*
00238  M01S00238.sxdest  +++|*     THE RESULT OF ANY ERROR ENCOUNTERED IN DESTAGING A FILE IS THAT
00239  M01S00239.sxdest  +++|*     THE ERROR CAN BE OVERCOME (SUCH AS A DELAY CONDITION), OR THE
00240  M01S00240.sxdest  +++|*     ERROR WILL CAUSE THE DESTAGE TO BE RETRIED, OR THE ERROR WILL
00241  M01S00241.sxdest  +++|*     CAUSE THE DESTAGE TO BE ABANDONED.  FILE DESTAGES WHICH ARE
00242  M01S00242.sxdest  +++|*     ABANDONED RESULT IN A DAYFILE AND ACCOUNT FILE MESSAGE WITH AN
00243  M01S00243.sxdest  +++|*     ERROR CODE.  IN ADDITION, *SSMOVE* WILL PRODUCE A NON-CODED
00244  M01S00244.sxdest  +++|*     DESCRIPTION OF THE REASON FOR THE DESTAGE FAILING IF THE *NW*
00245  M01S00245.sxdest  +++|*     PARAMETER WAS NOT SELECTED. IF A DESTAGE IS TO BE RETRIED, THE
00246  M01S00246.sxdest  +++|*     DESTAGE REQUEST IS WRITTEN (BY *DSNTDAM*) TO A SCRATCH FILE.
00247  M01S00247.sxdest  +++|*     AFTER THE CARTRIDGE CURRENTLY IN USE IS SCHEDULED TO BE UNLOADED,
00248  M01S00248.sxdest  +++|*     THE ENTRIES ON THE SCRATCH FILE ARE RESCHEDULED FOR ANOTHER
00249  M01S00249.sxdest  +++|*     DESTAGE ATTEMPT.
00250  M01S00250.sxdest  +++|*
00251  M01S00251.sxdest  +++|*     CASE A) NO CARTRIDGE OVERFLOW.
00252  M01S00252.sxdest  +++|*
00253  M01S00253.sxdest  +++|*     1)  *DSALLO* MAKES AN INITIAL ACCESS TO THE SUBFAMILY CATALOG TO
00254  M01S00254.sxdest  +++|*     DETERMINE WHICH STORAGE MODULE TO USE.  IF THE SUBFAMILY CATALOG
00255  M01S00255.sxdest  +++|*     IS TEMPORARILY NOT AVAILABLE (BECAUSE *PFDUMP* IS DOING A CATALOG
00256  M01S00256.sxdest  +++|*     BACKUP DUMP) THE DESTAGE ATTEMPT IS DELAYED BY PLACING THE *HLRQ*
00257  M01S00257.sxdest  +++|*     ENTRY ON THE DELAY CHAIN FOR A FEW SECONDS.  THE CATALOG ACCESS
00258  M01S00258.sxdest  +++|*     REQUEST IS THEN REPEATED UNTIL THE CATALOG CAN BE ACCESSED.  THIS
00259  M01S00259.sxdest  +++|*     TYPE OF CATALOG ACCESS DELAY SHOULD NEVER OCCUR WITH ANY OTHER
00260  M01S00260.sxdest  +++|*     CATALOG ACCESS REQUEST ISSUED BY THE REST OF THE DESTAGE PROCESS.
00261  M01S00261.sxdest  +++|*     IF IT DOES, A FATAL ERROR WILL OCCUR.
00262  M01S00262.sxdest  +++|*
00263  M01S00263.sxdest  +++|*     2)  *DSALLO* LOOKS AT THE SUBFAMILY CATALOG PREAMBLE AND THE UNIT
00264  M01S00264.sxdest  +++|*     DEVICE TABLE (*UDT*) TO IDENTIFY A STORAGE MODULE WHICH IS USABLE
00265  M01S00265.sxdest  +++|*     AND WHICH ALSO HAS ENOUGH SPACE FOR THE FILE TO BE DESTAGED.  IF
00266  M01S00266.sxdest  +++|*     NO SUCH STORAGE MODULE CAN BE FOUND, THE DESTAGE REQUEST IS
00267  M01S00267.sxdest  +++|*     ABANDONED.
00268  M01S00268.sxdest  +++|*
00269  M01S00269.sxdest  +++|*     3)  *DSALLO* THEN READS THE *AST* FOR THE SELECTED STORAGE MODULE
00270  M01S00270.sxdest  +++|*     SO THE BEST CARTRIDGE OR CARTRIDGE GROUP CAN BE IDENTIFIED.  IF A
00271  M01S00271.sxdest  +++|*     READ ERROR OCCURS WHEN READING THE SUBFAMILY CATALOG, THE DESTAGE
00272  M01S00272.sxdest  +++|*     IS ABANDONED.  ANY OTHER CATALOG ACCESS ERROR CONDITION IS FATAL.
00273  M01S00273.sxdest  +++|*
00274  M01S00274.sxdest  +++|*     4)  *DSALLO* THEN EXAMINES THE *AST*.  IF THE FILE IS TOO LONG TO
00275  M01S00275.sxdest  +++|*     FIT ON ANY CARTRIDGE OR GROUP OF CARTRIDGES, THE DESTAGE IS
00276  M01S00276.sxdest  +++|*     ABANDONED.
00277  M01S00277.sxdest  +++|*
00278  M01S00278.sxdest  +++|*     5)  *DSALLO* THEN READS IN THE *FCT* ENTRY FOR THE SELECTED
00279  M01S00279.sxdest  +++|*     CARTRIDGE.  A CATALOG ACCESS ERROR RESULTS IN THE DESTAGE BEING
00280  M01S00280.sxdest  +++|*     ABANDONED.  ALSO, IF THE *FCT* ENTRY SAYS THAT THE CARTRIDGE IS
00281  M01S00281.sxdest  +++|*     NOT TO BE USED FOR ANY MORE FILES, THE *AST* AND PREAMBLE ARE
00282  M01S00282.sxdest  +++|*     UPDATED, AND A NEW CARTRIDGE IS SELECTED.
00283  M01S00283.sxdest  +++|*
00284  M01S00284.sxdest  +++|*     6)  *DSALLO* THEN ALLOCATES A VOLUME CONSISTING OF A SEQUENCE OF
00285  M01S00285.sxdest  +++|*     AVAILABLE ALLOCATION UNITS.  IF NONE EXIST AND THE CARTRIDGE OR
00286  M01S00286.sxdest  +++|*     GROUP OF CARTRIDGES WAS CHOSEN FOR THIS FILE, THE DESTAGE IS
00287  M01S00287.sxdest  +++|*     ABANDONED.  IF THIS FILE IS BEING DESTAGED BECAUSE IT SHOULD HAVE
00288  M01S00288.sxdest  +++|*     BEEN ABLE TO FIT ON A PREVIOUSLY SELECTED CARTRIDGE, THE DESTAGE
00289  M01S00289.sxdest  +++|*     IS RETRIED.  THIS ERROR TYPICALLY OCCURS IF A GREATER THAN
00290  M01S00290.sxdest  +++|*     EXPECTED NUMBER OF STRIPES ARE DEMARKED WHILE PREVIOUS VOLUMES OF
00291  M01S00291.sxdest  +++|*     THE FILE WERE BEING WRITTEN.
00292  M01S00292.sxdest  +++|*
00293  M01S00293.sxdest  +++|*     7)  *DSTAGR* CALLS *HLLOAD* TO LOAD THE CARTRIDGE SO DATA CAN BE
00294  M01S00294.sxdest  +++|*     WRITTEN TO IT.  IF ANY PROBLEMS OCCUR, THE DESTAGE ATTEMPT IS
00295  M01S00295.sxdest  +++|*     RETRIED.  ALSO, IF THE CARTRIDGE IS LOST OR IS UNUSABLE DUE TO A
00296  M01S00296.sxdest  +++|*     LABEL PROBLEM, THE APPROPRIATE FLAGS ARE SET IN THE *FCT* AND
00297  M01S00297.sxdest  +++|*     EVENTUALLY IN THE *AST* AND PREAMBLE FOR THE SUBFAMILY CATALOG.
00298  M01S00298.sxdest  +++|*
00299  M01S00299.sxdest  +++|*     8)  *DSTAGR* THEN CALLS *PFM* TO ACQUIRE ACCESS TO THE FILE DATA.
00300  M01S00300.sxdest  +++|*     IF THE REQUEST CAN NOT BE PROCESSED IMMEDIATELY BECAUSE THE
00301  M01S00301.sxdest  +++|*     CATALOG TRACK IS INTERLOCKED, *DESTAGR* PLACES THE *HLRQ* ENTRY
00302  M01S00302.sxdest  +++|*     ON A DELAY CHAIN FOR A FEW SECONDS AND RETRIES THE CALL UNTIL IT
00303  M01S00303.sxdest  +++|*     CAN BE PROCESSED.  IF A USER OR SYSTEM ACTION SUCH AS A FILE
00304  M01S00304.sxdest  +++|*     PURGE OR UPDATE HAS OCCURED SUCH THAT THE REASON FOR SELECTING
00305  M01S00305.sxdest  +++|*     THE FILE TO BE DESTAGED HAS BEEN INVALIDATED, THE DESTAGE REQUEST
00306  M01S00306.sxdest  +++|*     IS ABANDONED.
00307  M01S00307.sxdest  +++|*
00308  M01S00308.sxdest  +++|*     9)  *DESTAGR* CALLS *HLCPYDC* TO COPY FILE DATA FROM DISK TO THE
00309  M01S00309.sxdest  +++|*     CARTRIDGE.  A DISK READ ERROR RESULTS IN THE DESTAGE BEING
00310  M01S00310.sxdest  +++|*     ABANDONED.  ANY OTHER ERROR CAUSES THE DESTAGE TO BE RETRIED.  IF
00311  M01S00311.sxdest  +++|*     THE ERROR WAS DUE TO AN UNRECOVERABLE WRITE ERROR (STRIPE DEMARK
00312  M01S00312.sxdest  +++|*     FAILURE) OR DUE TO EXCESSIVE RECOVERED WRITE ERROS (SUCCESSFUL
00313  M01S00313.sxdest  +++|*     STRIPE DEMARKS) THE AFFECTED AU(S) ARE MARKED AS FLAWED IN THE
00314  M01S00314.sxdest  +++|*     *FCT* ENTRY AND WILL NO LONGER BE AVAILABLE FOR ALLOCATION.  IF A
00315  M01S00315.sxdest  +++|*     GENERAL HARDWARE PROBLEM OCCURED, THE CARTRIDGE IS ALSO FORCED TO
00316  M01S00316.sxdest  +++|*     BE UNLOADED SO ANY FURTHER DESTAGES WILL BEGIN WITH THE SELECTION
00317  M01S00317.sxdest  +++|*     OF A STORAGE MODULE AND THEN A CARTRIDGE.
00318  M01S00318.sxdest  +++|*
00319  M01S00319.sxdest  +++|*     10) UPON COMPLETION OF THE COPY SEQUENCE, *DESTAGR* MAKES A
00320  M01S00320.sxdest  +++|*     CATALOG ACCESS REQUEST TO WRITE THE *FCT* ENTRY TO DISK TO
00321  M01S00321.sxdest  +++|*     PRESERVE THE STATUS OF THE CARTRIDGE SPACE ALLOCATED TO THE FILE.
00322  M01S00322.sxdest  +++|*     IT THEN CALLS *PFM* TO UPDATE THE FILE'S *PFC* ENTRY TO REFLECT
00323  M01S00323.sxdest  +++|*     THE LOCATION OF THE DATA ON THE CARTRIDGE AND MAY CALL *PFM* TO
00324  M01S00324.sxdest  +++|*     RELEASE THE FILE'S DISK SPACE.  A CATALOG ACCESS ERROR RESULTS IN
00325  M01S00325.sxdest  +++|*     THE DESTAGE BEING ABANDONED.  A *PFM* ERROR RESPONSE CAN RESULT
00326  M01S00326.sxdest  +++|*     IN A DELAY OR MAY RESULT IN THE DESTAGE BEING ABANDONED OR THE
00327  M01S00327.sxdest  +++|*     DISK SPACE RELEASE NOT BEING DONE.
00328  M01S00328.sxdest  +++|*
00329  M01S00329.sxdest  +++|*
00330  M01S00330.sxdest  +++|*             C A R T R I D G E   O V E R F L O W   E R R O R S
00331  M01S00331.sxdest  +++|*
00332  M01S00332.sxdest  +++|*     11) *DSALLO* CAN ENCOUNTER A CASE WHERE MORE SPACE IS NEEDED, BUT
00333  M01S00333.sxdest  +++|*     NONE IS AVAILABLE ON THE CARTRIDGE IN USE.  THE DESTAGE IS
00334  M01S00334.sxdest  +++|*     ABANDONED IF THIS CARTRIDGE DOES NOT HAVE AN OFF CARTRIDGE LINK
00335  M01S00335.sxdest  +++|*     AVAILABLE OR IF NO OTHER CARTRIDGE IN THE GROUP HAS ANY AVAILABLE
00336  M01S00336.sxdest  +++|*     SPACE.
00337  M01S00337.sxdest  +++|*
00338  M01S00338.sxdest  +++|*                      A D D I T I O N A L   N O T E S
00339  M01S00339.sxdest  +++|*
00340  M01S00340.sxdest  +++|*     1)  THE ABILITY OF THE M860 CONTROLLER TO DO WRITE ERROR RECOVERY
00341  M01S00341.sxdest  +++|*     BY DEMARKING A STRIPE MEANS THAT LESS DATA CAN BE STORED ON AN AU
00342  M01S00342.sxdest  +++|*     THAN EXPECTED.  THEREFORE, A FILE MAY REQUIRE ONE OR POSSIBLY
00343  M01S00343.sxdest  +++|*     MORE AU THAN ANTICIPATED.  BECAUSE OF THIS, *DSALLO* CALCULATES
00344  M01S00344.sxdest  +++|*     AN AMOUNT OF CONTINGENCY SPACE WHICH IT TRIES TO ALLOCATE IN
00345  M01S00345.sxdest  +++|*     ADDITION TO THE SPACE NEEDED FOR FILE DATA IF NO STRIPES ARE
00346  M01S00346.sxdest  +++|*     DEMARKED.
00347  M01S00347.sxdest  +++|*
00348  M01S00348.sxdest  +++|*     2)  IF A FILE DESTAGE IS ABANDONED OR RETRIED, THE DESTAGE
00349  M01S00349.sxdest  +++|*     PROCESS WILL ATTEMPT TO RELEASE ANY AU ALLOCATED TO THE FILE.  IF
00350  M01S00350.sxdest  +++|*     CARTRIDGE OVERFLOW HAS OCCURED, THIS IS NOT DONE.
00351  M01S00351.sxdest  +++|*
00352  M01S00352.sxdest  +++|*     3)  ANY ERRORS ENCOUNTERED BY THE DRIVER AS IT ATTEMPTS TO UNLOAD
00353  M01S00353.sxdest  +++|*     A CARTRIDGE ARE IGNORED BY THE DESTAGE PROCESS.
00354  M01S00354.sxdest  +++|*
00355  M01S00355.sxdest  +++|#
00356  M01S00356.sxdest  +++|
00357  M01S00357.sxdest  +++|      END  # DS$$DOC #
00358  M01S00358.sxdest  +++|
00359  M01S00359.sxdest  +++|    TERM
00360  M01S00360.sxdest  +++|PROC DESTAGR((HLRQADR));
00361  M01S00361.sxdest  +++|
00362  M01S00362.sxdest  +++|# TITLE DESTAGR - DESTAGE FILE FROM DISK TO M860 CARTRIDGE.           #
00363  M01S00363.sxdest  +++|
00364  M01S00364.sxdest  +++|      BEGIN  # DESTAGR #
00365  M01S00365.sxdest  +++|
00366  M01S00366.sxdest  +++|#
00367  M01S00367.sxdest  +++|*     DESTAGR - DESTAGE FILE FROM DISK TO M860 CARTRIDGE.
00368  M01S00368.sxdest  +++|*
00369  M01S00369.sxdest  +++|*     *DESTAGR* COPIES A PERMANENT FILE FROM DISK TO AN M860
00370  M01S00370.sxdest  +++|*     CARTRIDGE.  IT SELECTS THE BEST CARTRIDGE(S) FOR THE FILE,
00371  M01S00371.sxdest  +++|*     ALLOCATES AVAILABLE AU AS NEEDED TO HOLD THE FILE DATA,
00372  M01S00372.sxdest  +++|*     ORGANIZES CONSECUTIVE AU INTO VOLUMES AND LINKS THESE
00373  M01S00373.sxdest  +++|*     VOLUMES INTO A CHAIN THAT DEFINES THE LOCATION OF THE FILE
00374  M01S00374.sxdest  +++|*     DATA ON THE CARTRIDGE.  UPON COMPLETION OF THE COPY, THE
00375  M01S00375.sxdest  +++|*     *FCT* ON DISK IS UPDATED TO REFLECT THE CHAIN OF AU/VOLUMES AND
00376  M01S00376.sxdest  +++|*     THE *PFC* ENTRY FOR THE FILE IS UPDATED TO REFLECT THE
00377  M01S00377.sxdest  +++|*     NEW *ASA* VALUE FOR THE M860 COPY OF THE FILE.  DEPENDING UPON
00378  M01S00378.sxdest  +++|*     AN INPUT PARAMETER FROM *SSMOVE*, THE DISK SPACE FOR THE FILE
00379  M01S00379.sxdest  +++|*     IS RELEASED UPON SUCCESSFUL COMPLETION OF THE DESTAGE.
00380  M01S00380.sxdest  +++|*     PERFORMANCE MESSAGES ARE WRITTEN TO THE ACCOUNT FILE IF
00381  M01S00381.sxdest  +++|*     EXEC WAS CALLED WITH THE TRACE MODE (*TM*) RUN-TIME PARAMETER.
00382  M01S00382.sxdest  +++|*
00383  M01S00383.sxdest  +++|*     PROC DESTAGR((HLRQADR))
00384  M01S00384.sxdest  +++|*
00385  M01S00385.sxdest  +++|*     ENTRY      (HLRQADR) - ADDRESS OF THE *HLRQ* ENTRY CONTAINING
00386  M01S00386.sxdest  +++|*                            THE DESTAGE REQUEST.
00387  M01S00387.sxdest  +++|*                THE PROCESS STATE FIELD (HLR$HPS) INDICATES THE TYPE
00388  M01S00388.sxdest  +++|*                OF PROCESSING TO BE DONE ON THIS CALL TO *DESTAGR*.
00389  M01S00389.sxdest  +++|*                POSSIBLE ACTIONS ARE AS FOLLOWS..
00390  M01S00390.sxdest  +++|*                 - INITIATE THE DESTAGE PROCESS.
00391  M01S00391.sxdest  +++|*                 - RESUME PROCESSING AFTER INTERFACING WITH THE DRIVER,
00392  M01S00392.sxdest  +++|*                   (TO DO A CARTRIDGE LOAD OR UNLOAD, OR A COPY FROM
00393  M01S00393.sxdest  +++|*                    DISK TO CARTRIDGE.)
00394  M01S00394.sxdest  +++|*                 - RETRY A FUNCTION WHICH COULD NOT BE DONE PREVIOUSLY
00395  M01S00395.sxdest  +++|*                   BECAUSE OF AN INTERLOCK CONDITION.
00396  M01S00396.sxdest  +++|*                    - ACCESS A SUBFAMILY CATALOG
00397  M01S00397.sxdest  +++|*                    - INTERFACE TO *PFM* (ACQUIRE THE FILE TO BE
00398  M01S00398.sxdest  +++|*                      DESTAGED, ENTER A NEW *ASA* VALUE IN THE *PFC*,
00399  M01S00399.sxdest  +++|*                      SET AN ERROR FLAG IN THE *PFC*, OR DROP THE
00400  M01S00400.sxdest  +++|*                      FILES DISK SPACE).
00401  M01S00401.sxdest  +++|*     EXIT       THE PROCESS NAME AND STATE FIELDS ARE SET UP TO
00402  M01S00402.sxdest  +++|*                IDENTIFY THE NEXT PROCESSING ACTION - WHETHER
00403  M01S00403.sxdest  +++|*                BY *DESTAGR* OR BY ONE OF ITS HELPER
00404  M01S00404.sxdest  +++|*                ROUTINES (*HLXXXX*).
00405  M01S00405.sxdest  +++|*
00406  M01S00406.sxdest  +++|*                PROCESSING LOGIC FOR *DESTAGR* HAS BEEN
00407  M01S00407.sxdest  +++|*                ORGANIZED INTO THE FOLLOWING STEPS.
00408  M01S00408.sxdest  +++|*
00409  M01S00409.sxdest  +++|*                  1. INITIALIZATION.
00410  M01S00410.sxdest  +++|*
00411  M01S00411.sxdest  +++|*                  2. ALLOCATE NEXT VOLUME.
00412  M01S00412.sxdest  +++|*
00413  M01S00413.sxdest  +++|*                  3. UNLOAD CARTRIDGE (IF CARTRIDGE OVERFLOW).
00414  M01S00414.sxdest  +++|*
00415  M01S00415.sxdest  +++|*                  4. LOAD CARTRIDGE (IF NECESSARY).
00416  M01S00416.sxdest  +++|*
00417  M01S00417.sxdest  +++|*                  5. ACQUIRE ACCESS TO THE PERMANENT FILE (VIA *PFM*).
00418  M01S00418.sxdest  +++|*
00419  M01S00419.sxdest  +++|*                  6. COPY DATA TO THE ALLOCATED VOLUME.
00420  M01S00420.sxdest  +++|*
00421  M01S00421.sxdest  +++|*                  7. UPDATE THE *FCT* TO REFLECT A SUCCESSFUL COPY.
00422  M01S00422.sxdest  +++|*
00423  M01S00423.sxdest  +++|*                  8. COMPLETE DESTAGING AND UPDATE THE *FCT* ON
00424  M01S00424.sxdest  +++|*                     DISK, AND THE *PFC* ENTRY FOR THE FILE.
00425  M01S00425.sxdest  +++|*
00426  M01S00426.sxdest  +++|*                  9. RELEASE DISK SPACE (IF REQUESTED).
00427  M01S00427.sxdest  +++|*
00428  M01S00428.sxdest  +++|*                 10. ERROR PROCESSING.
00429  M01S00429.sxdest  +++|*
00430  M01S00430.sxdest  +++|*                 11. PREPARE TO DESTAGE NEXT FILE, OR TERMINATE.
00431  M01S00431.sxdest  +++|#
00432  M01S00432.sxdest  +++|
00433  M01S00433.sxdest  +++|      ITEM HLRQADR    U;             # *HLRQ* ENTRY ADDRESS #
00434  M01S00434.sxdest  +++|
00435  M01S00435.sxdest  +++|#
00436  M01S00436.sxdest  +++|****  PROC DESTAGR - XREF LIST BEGIN.
00437  M01S00437.sxdest  +++|#
00438  M01S00438.sxdest  +++|
00439  M01S00439.sxdest  +++|      XREF
00440  M01S00440.sxdest  +++|        BEGIN
00441  M01S00441.sxdest  +++|        PROC ADD$LNK;                # ADD ENTRY TO CHAIN #
00442  M01S00442.sxdest  +++|        PROC ACQ$FCT;                # ACQUIRE *FCT* ENTRY #
00443  M01S00443.sxdest  +++|        PROC CKPFETC;                # CHECK *UGET* STATUS #
00444  M01S00444.sxdest  +++|        PROC CFLUSH;                 # FLUSH SM CATALOG BUFFER #
00445  M01S00445.sxdest  +++|        PROC CPUTFCT;                # UPDATE *FCT* ENTRY #
00446  M01S00446.sxdest  +++|        PROC CRELSLK;                # RELEASE CATALOG INTERLOCKS #
00447  M01S00001.sxdest1 +++|        PROC DELAY;                  # TIMED DELAY #
00448  M01S00447.sxdest  +++|        PROC DROPDS;                 # DROP DIRECT FILE DISK SPACE #
00449  M01S00448.sxdest  +++|        PROC DROPIDS;                # DROP INDIRECT FILE DISK SPACE #
00450  M01S00449.sxdest  +++|        PROC DSALLO;                 # ALLOCATE SPACE ON SM #
00451  M01S00450.sxdest  +++|        PROC DSERCAT;                # DESTAGE ERROR PROCESSOR #
00452  M01S00451.sxdest  +++|        PROC DSERPFM;                # DESTAGE ERROR PROCESSOR #
00453  M01S00452.sxdest  +++|        PROC DSNTDAM;                # GET NEXT DESTAGE REQUEST #
00454  M01S00453.sxdest  +++|        PROC HLCPYDC;                # CHECK COPY RETURN CODES #
00455  M01S00454.sxdest  +++|        PROC HLLOAD;                 # CHECK LOAD RETURN CODES #
00456  M01S00455.sxdest  +++|        PROC HLLDSET;                # SET *HLRQ* INTO *LLRQ* #
00457  M01S00001.mse0009 +++|        PROC MSG;                    # ISSUE DAYFILE MESSAGE #
00458  M01S00456.sxdest  +++|        PROC MSGAFDF;                # ISSUE ACCOUNT-DAYFILE MESSAGE #
00459  M01S00457.sxdest  +++|        PROC RECALL;                 # GIVE UP CPU FOR A MOMENT #
00460  M01S00458.sxdest  +++|        PROC RETERN;                 # RETURN FILE #
00461  M01S00459.sxdest  +++|        PROC RLSVOL;                 # RELEASE UNUSED VOLUME #
00462  M01S00460.sxdest  +++|        PROC RLS$FCT;                # RELEASE *FCT* ENTRY #
00463  M01S00461.sxdest  +++|        PROC SETASA;                 # SET ALTERNATE STORAGE ADDRESS #
00464  M01S00462.sxdest  +++|        PROC UASTPRM;                # UPDATE *AST* AND PREAMBLE #
00465  M01S00463.sxdest  +++|        PROC UATTACH;                # UTILITY ATTACH OF FILE #
00466  M01S00464.sxdest  +++|        PROC UGET;                   # UTILITY GET OF FILE #
00467  M01S00465.sxdest  +++|        PROC UPUSAGE;                # UPDATE USAGE INFO #
00468  M01S00466.sxdest  +++|        PROC ZFILL;                  # ZERO FILL BUFFER #
00469  M01S00467.sxdest  +++|        PROC ZSETFET;                # INITIALIZE A FET #
00470  M01S00468.sxdest  +++|        END
00471  M01S00469.sxdest  +++|
00472  M01S00470.sxdest  +++|#
00473  M01S00471.sxdest  +++|****  PROC DESTAGR - XREF LIST END.
00474  M01S00472.sxdest  +++|#
00475  M01S00473.sxdest  +++|
00476  M01S00474.sxdest  +++|      DEF LISTCON #0#;               # DO NOT LIST COMMON DECKS #
00477  M01S00475.sxdest  +++|*CALL,COMBFAS
00478  M01S00476.sxdest  +++|*CALL,COMBCHN
00479  M01S00477.sxdest  +++|*CALL,COMBCMD
00480  M01S00478.sxdest  +++|*CALL,COMBCMS
00481  M01S00479.sxdest  +++|*CALL COMBCPR
00482  M01S00480.sxdest  +++|*CALL COMBLRQ
00483  M01S00481.sxdest  +++|*CALL,COMBMCT
00484  M01S00482.sxdest  +++|*CALL,COMBTDM
00485  M01S00483.sxdest  +++|*CALL COMBUDT
00486  M01S00484.sxdest  +++|*CALL,COMXCTF
00487  M01S00485.sxdest  +++|*CALL,COMXEMC
00488  M01S00486.sxdest  +++|*CALL,COMXFCQ
00489  M01S00487.sxdest  +++|*CALL,COMXHLR
00490  M01S00002.sxdest1 +++|*CALL COMXIPR
00491  M01S00488.sxdest  +++|*CALL,COMXMSC
00492  M01S00489.sxdest  +++|*CALL,COMSPFM
00493  M01S00490.sxdest  +++|
00494  M01S00491.sxdest  +++|      ITEM ATEOI      B;             # END OF INFORMATION #
00495  M01S00492.sxdest  +++|      ITEM CC         U;             # CHAIN CONTROL VALUE #
00496  M01S00493.sxdest  +++|        ITEM CURFCT          U;      # *FCT* OF A PARALLEL *HLRQ* #
00497  M01S00494.sxdest  +++|      ITEM DRDCOUNT   I;             # NUMBER OF DRD-S AVAILABLE #
00498  M01S00001.sxdest2 +++|      ITEM DSTGCOUNT  I;             # DRD AVAILABLE TO DESTAGER #
00499  M01S00495.sxdest  +++|      ITEM FLAG       B;             # BOOLEAN STATUS #
00500  M01S00496.sxdest  +++|      ITEM I          I;             # LOOP COUNTER #
00501  M01S00497.sxdest  +++|      ITEM QADDR      U;             # *FCT* ENTRY ADDRESS #
00502  M01S00498.sxdest  +++|      ITEM START      I;             # STARTING AU #
00503  M01S00499.sxdest  +++|      ITEM STAT       I;             # STATUS #
00504  M01S00500.sxdest  +++|      ITEM TEMP       U;             # TEMPORARY #
00505  M01S00501.sxdest  +++|      ITEM TEMP1      U;             # TEMPORARY #
Line S00502 Modification History
M01 (Added by) sxdest
M02 (Updated by) msea026
Seq #  *Modification Id* Act 
----------------------------+
00506  M02S00502.msea026 ---|        ITEM TFCT            U;        # ASAFCT #
Line S00503 Modification History
M01 (Added by) sxdest
M02 (Updated by) msea026
Seq #  *Modification Id* Act 
----------------------------+
00507  M02S00503.msea026 ---|        ITEM TTDAMSBF        U;      # SUBFAMILY NUMBER #
00508  M01S00001.msea026 +++|      ITEM TFAM       C(7);        # TERMPORARY FAMILY #
00509  M01S00002.msea026 +++|      ITEM TFCT       U;           # ASAFCT #
00510  M01S00003.msea026 +++|      ITEM TTDAMSBF   U;           # SUBFAMILY NUMBER #
00511  M01S00504.sxdest  +++|      ITEM T1         I;             # TEMPORARY #
00512  M01S00505.sxdest  +++|      ITEM T2         I;             # TEMPORARY #
00513  M01S00506.sxdest  +++|      ITEM USED       I;             # AU USED #
00514  M01S00507.sxdest  +++|
00515  M01S00508.sxdest  +++|      ARRAY SCR$FET [0:0] P(SFETL); ;  # SCRATCH FET #
00516  M01S00509.sxdest  +++|
00517  M01S00510.sxdest  +++|      STATUS DSLABEL
00518  M01S00511.sxdest  +++|        DS1A,                        # INITIALIZATION #
00519  M01S00512.sxdest  +++|        DS2A,                        # RETRY *DSALLO* CALL #
00520  M01S00513.sxdest  +++|        DS3A,                        # RE-ENTER AFTER "NORMAL" UNLOAD #
00521  M01S00514.sxdest  +++|        DS3B,                        # RE-ENTER AFTER "FORCED" LOAD #
00522  M01S00515.sxdest  +++|        DS3C,                        # RE-ENTER AFTER "UNLOAD"  #
00523  M01S00516.sxdest  +++|        DS4A,                        # RE-ENTER AFTER *HLLOAD* #
00524  M01S00517.sxdest  +++|        DS5A,                        # RETRY *UATTACH*/*UGET* CALL #
00525  M01S00518.sxdest  +++|        DS5B,                        # WAIT *UGET* COMPLETE #
00526  M01S00519.sxdest  +++|        DS6A,                        # RE-ENTER AFTER *HLCPYDC* #
00527  M01S00520.sxdest  +++|        DS8A,                        # RETRY *SETASA* CALL #
00528  M01S00521.sxdest  +++|        DS9A,                        # RETRY *DROP(I)DS* CALL #
00529  M01S00522.sxdest  +++|        DS11A,                       # RE-ENTER AFTER "NORMAL" UNLOAD #
00530  M01S00523.sxdest  +++|        DS11B,                       # RE-ENTER AFTER "FORCED" LOAD #
00531  M01S00524.sxdest  +++|        DS11C,                       # RE-ENTER AFTER "UNLOAD"  #
00532  M01S00525.sxdest  +++|        DSEND;                       # END OF LIST #
00533  M01S00526.sxdest  +++|
00534  M01S00527.sxdest  +++|
00535  M01S00528.sxdest  +++|      SWITCH DSENTR:DSLABEL
00536  M01S00529.sxdest  +++|               DS1A:DS1A,
00537  M01S00530.sxdest  +++|               DS2A:DS2A,
00538  M01S00531.sxdest  +++|               DS3A:DS3A,
00539  M01S00532.sxdest  +++|               DS3B:DS3B,
00540  M01S00533.sxdest  +++|               DS3C:DS3C,
00541  M01S00534.sxdest  +++|               DS4A:DS4A,
00542  M01S00535.sxdest  +++|               DS5A:DS5A,
00543  M01S00536.sxdest  +++|               DS5B:DS5B,
00544  M01S00537.sxdest  +++|               DS6A:DS6A,
00545  M01S00538.sxdest  +++|               DS8A:DS8A,
00546  M01S00539.sxdest  +++|               DS9A:DS9A,
00547  M01S00540.sxdest  +++|              DS11A:DS11A,
00548  M01S00541.sxdest  +++|              DS11B:DS11B,
00549  M01S00542.sxdest  +++|              DS11C:DS11C;
00550  M01S00543.sxdest  +++|
Line S00544 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse3
Seq #  *Modification Id* Act 
----------------------------+
00551  M02S00544.mse3    ---|      ARRAY PFMRET    [0:0]  S(4);     # PFM RETURN MESSAGE #
Line S00545 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse3
Seq #  *Modification Id* Act 
----------------------------+
00552  M02S00545.mse3    ---|        BEGIN
Line S00546 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse3
Seq #  *Modification Id* Act 
----------------------------+
00553  M02S00546.mse3    ---|        ITEM PFMRETM    C(00,00,40);   # PFM RETURN MESSAGE #
Line S00547 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse3
Seq #  *Modification Id* Act 
----------------------------+
00554  M02S00547.mse3    ---|        END
00555  M01S00548.sxdest  +++|
00556  M01S00002.mse0009 +++|      ARRAY MSGMB    [0:0]  S(5);
00557  M01S00003.mse0009 +++|        BEGIN     # MESSAGE BUFFER #
00558  M01S00004.mse0009 +++|        ITEM MSG$LINE  C(00,00,28) = [" CATALOG *FCT* PROBLEM.     "];
00559  M01S00005.mse0009 +++|        ITEM MSG$ZERO  U(03,48,12) = [0];   # ZERO-BYTE TERMINATOR #
00560  M01S00006.mse0009 +++|        END
00561  M01S00007.mse0009 +++|
00562  M01S00008.mse0009 +++|
00563  M01S00549.sxdest  +++|      BASED
00564  M01S00550.sxdest  +++|      ARRAY   CLEAR   [0:0]  S(1);
00565  M01S00551.sxdest  +++|        BEGIN
00566  M01S00552.sxdest  +++|        ITEM CLN      U(00,36,24);      # CLEAR *DRD* ASSIGNMENT #
00567  M01S00553.sxdest  +++|        ITEM RESETDRD U(00,36,24);      # NEW *HLRQ* ADDRESS #
00568  M01S00554.sxdest  +++|        END
00569  M01S00555.sxdest  +++|                                               CONTROL EJECT;
00570  M01S00556.sxdest  +++|
00571  M01S00557.sxdest  +++|#
00572  M01S00558.sxdest  +++|*     STEP 1 - INITIALIZE.
00573  M01S00559.sxdest  +++|#
00574  M01S00560.sxdest  +++|
00575  M01S00561.sxdest  +++|      P<HLRQ> = HLRQADR;
00576  M01S00562.sxdest  +++|      P<TDAM> = LOC(HLR$TDAM[0]);
00577  M01S00563.sxdest  +++|
00578  M01S00564.sxdest  +++|      GOTO DSENTR[HLR$HPS[0]];
00579  M01S00565.sxdest  +++|
00580  M01S00566.sxdest  +++|DS1A:                                # BEGIN DESTAGE #
00581  M01S00567.sxdest  +++|
00582  M01S00568.sxdest  +++|#
00583  M01S00569.sxdest  +++|*     INITIALIZE *HLRQ* FIELDS.  NOTE THAT *HLR$VOLAUP* IS
00584  M01S00570.sxdest  +++|*     INITIALIZED IN STEP 5 SINCE IT HAS INPUT TO *DSALLO*.
00585  M01S00571.sxdest  +++|#
00586  M01S00572.sxdest  +++|
00587  M01S00573.sxdest  +++|      HLR$RESP[0] = ERRST"NOERR";
00588  M01S00574.sxdest  +++|      HLR$PRU[0] = 0;
00589  M01S00575.sxdest  +++|      HLR$1STVOL[0] = 0;
00590  M01S00009.mse0009 +++|      HLR$NEWASA[0] = 0;
00591  M01S00002.sxdest2 +++|
00592  M01S00003.sxdest2 +++|      IF TDAMFC[0] EQ TDAMFCODE"STAGE"
00593  M01S00004.sxdest2 +++|      THEN
00594  M01S00005.sxdest2 +++|        BEGIN   # NO RESOURCES - END #
00595  M01S00006.sxdest2 +++|        GOTO ENDALL;
00596  M01S00007.sxdest2 +++|        END
00597  M01S00008.sxdest2 +++|
00598  M01S00576.sxdest  +++|
00599  M01S00577.sxdest  +++|#
00600  M01S00578.sxdest  +++|*     STEP 1 - END.
00601  M01S00579.sxdest  +++|#
00602  M01S00580.sxdest  +++|
00603  M01S00581.sxdest  +++|                                               CONTROL EJECT;
00604  M01S00582.sxdest  +++|
00605  M01S00583.sxdest  +++|#
00606  M01S00584.sxdest  +++|*     STEP 2 - ALLOCATE CARTRIDGE SPACE.
00607  M01S00585.sxdest  +++|*            - THE ALLOCATED AU ARE USED IN STEP 6 TO STORE
00608  M01S00586.sxdest  +++|*              FILE DATA.  ANY UNUSED AU ARE MADE AVAILABLE
00609  M01S00587.sxdest  +++|*              FOR RE-USE IN STEP 7 IF NO ERRORS OCCUR.
00610  M01S00588.sxdest  +++|*              IF ERRORS OCCUR IN STEP 6, THE PROCEDURE
00611  M01S00589.sxdest  +++|*              *HLCPYDC* WILL MAKE ANY UNFLAWED AU AVAILABLE
00612  M01S00590.sxdest  +++|*              FOR RE-USE.  IF ERRORS OCCUR ELSEWHERE,
00613  M01S00591.sxdest  +++|*              STEP 10 WILL MAKE THESE AU AVAILABLE.
00614  M01S00592.sxdest  +++|#
00615  M01S00593.sxdest  +++|
00616  M01S00594.sxdest  +++|NEXTVOL:                             # CHOOSE CARTRIDGE AND AUS #
00617  M01S00595.sxdest  +++|DS2A:                                # RETRY *DSALLO* CALL #
00618  M01S00596.sxdest  +++|      HLR$HPS[0] = DSLABEL"DS2A";        # IF WAIT FOR INITERLOCK #
00619  M01S00597.sxdest  +++|
00620  M01S00598.sxdest  +++|
00621  M01S00599.sxdest  +++|      DSALLO(HLRQADR);
00622  M01S00600.sxdest  +++|
00623  M01S00601.sxdest  +++|          HLR$AUUD [0] = HLR$VOLAU [0] ;    # IN CASE OF ERROR #
00624  M01S00003.sxdest1 +++|      IF HLR$RESP[0] EQ ERRST"WAIT"
00625  M01S00004.sxdest1 +++|      THEN     # *HLRQ* IS ON CATALOG WAIT #
00626  M01S00005.sxdest1 +++|        BEGIN
00627  M01S00006.sxdest1 +++|        HLR$RESP[0] = 0;
00628  M01S00007.sxdest1 +++|        RETURN;
00629  M01S00008.sxdest1 +++|        END
00630  M01S00009.sxdest1 +++|
00631  M01S00602.sxdest  +++|      IF HLR$RESP[0] EQ ERRST"SPECIAL"
00632  M01S00603.sxdest  +++|      THEN
00633  M01S00604.sxdest  +++|        BEGIN
00634  M01S00605.sxdest  +++|        ADD$LNK(HLRQADR,LCHN"HL$DRDRESW",0);
00635  M01S00606.sxdest  +++|        HLR$RESP[0] = ERRST"NOERR";
00636  M01S00607.sxdest  +++|        RETURN;
00637  M01S00608.sxdest  +++|        END
00638  M01S00609.sxdest  +++|
00639  M01S00610.sxdest  +++|      IF (HLR$RESP[0] EQ ERRST"NOERR" )  ##
00640  M01S00611.sxdest  +++|        AND (HLR$VOLLN[0] EQ 0)
00641  M01S00612.sxdest  +++|      THEN                           # NO SPACE #
00642  M01S00613.sxdest  +++|        BEGIN
00643  M01S00614.sxdest  +++|        IF HLR$FFILE[0]
00644  M01S00615.sxdest  +++|        THEN                         # ABANDON FIRST FILE #
00645  M01S00616.sxdest  +++|          BEGIN
00646  M01S00617.sxdest  +++|          HLR$RESP[0] = ERRST"ABANDON";
00647  M01S00618.sxdest  +++|          HLR$ERRC[0] = ABANDON"NOSPACE";
00648  M01S00619.sxdest  +++|          END
00649  M01S00620.sxdest  +++|
00650  M01S00621.sxdest  +++|        ELSE                         # RETRY OTHER FILES #
00651  M01S00622.sxdest  +++|          BEGIN
00652  M01S00623.sxdest  +++|          HLR$RESP[0] = ERRST"RETRY";
00653  M01S00624.sxdest  +++|          END
00654  M01S00625.sxdest  +++|
00655  M01S00626.sxdest  +++|        END
00656  M01S00627.sxdest  +++|
00657  M01S00628.sxdest  +++|      IF HLR$RESP[0] NQ ERRST"NOERR"
00658  M01S00629.sxdest  +++|      THEN
00659  M01S00630.sxdest  +++|        BEGIN
00660  M01S00631.sxdest  +++|        HLR$HPS[0] = DSLABEL"DS2A";  # IF WAIT FOR INTERLOCK #
00661  M01S00632.sxdest  +++|        GOTO DSERR;
00662  M01S00633.sxdest  +++|        END
00663  M01S00634.sxdest  +++|
00664  M01S00635.sxdest  +++|#
00665  M01S00636.sxdest  +++|*     STEP 2 - END.
00666  M01S00637.sxdest  +++|#
00667  M01S00638.sxdest  +++|
00668  M01S00639.sxdest  +++|                                               CONTROL EJECT;
00669  M01S00640.sxdest  +++|
00670  M01S00641.sxdest  +++|#
00671  M01S00642.sxdest  +++|*     STEP 3 - UNLOAD PREVIOUS CARTRIDGE, IF APPROPRIATE.
00672  M01S00643.sxdest  +++|*              - CALL *HLUNLD* TO DO THE UNLOAD. THE CARTRIDGE
00673  M01S00644.sxdest  +++|*                USAGE STATISTICS ARE RETURNED IN THE *HLRQ*
00674  M01S00645.sxdest  +++|*                ENTRY AND USED TO UPDATE THE *FCT* IN STEP 7.
00675  M01S00646.sxdest  +++|*              - ALL ERROR CONDITIONS ENCOUNTERED IN UNLOADING
00676  M01S00647.sxdest  +++|*                A CARTRIDGE ARE HANDLED BY *HLUNLD*.
00677  M01S00648.sxdest  +++|*                SINCE *DESTAGR* DOES NOT NEED THIS CARTRIDGE
00678  M01S00649.sxdest  +++|*                TO COMPLETE DESTAGING IT DOES NOT CONCERN
00679  M01S00650.sxdest  +++|*                ITSELF WITH WHETHER OR NOT UNLOAD ERRORS OCCURRED.
00680  M01S00651.sxdest  +++|#
00681  M01S00652.sxdest  +++|
00682  M01S00653.sxdest  +++|      IF HLR$UNLD[0]
00683  M01S00654.sxdest  +++|      THEN
00684  M01S00655.sxdest  +++|        BEGIN  # UNLOAD OLD CARTRIDGE #
00685  M01S00656.sxdest  +++|        HLR$UNLD[0] = FALSE;
00686  M01S00657.sxdest  +++|        IF HLR$HLRQW[0] NQ 0
00687  M01S00658.sxdest  +++|        THEN
00688  M01S00659.sxdest  +++|          BEGIN      # SWITCH CONTROL OF *DRD* TO WAITTING *HLRQ* #
00689  M01S00660.sxdest  +++|          TEMP = HLR$DRDRA[0];
00690  M01S00661.sxdest  +++|          TEMP1 = HLR$LRQADR[0];
00691  M01S00662.sxdest  +++|          P<HLRQ> = HLR$HLRQW[0];
00692  M01S00663.sxdest  +++|          HLR$DRDRA[0] = TEMP;
00693  M01S00664.sxdest  +++|          HLR$LRQADR[0] = TEMP1;
00694  M01S00665.sxdest  +++|          P<HLRQ> = HLRQADR;
00695  M01S00666.sxdest  +++|          ADD$LNK(HLR$HLRQW[0],LCHN"HL$READY",0);
00696  M01S00667.sxdest  +++|          P<LLRQ> = HLR$LRQADR[0];
00697  M01S00668.sxdest  +++|          LLR$UCPRA[0] = HLR$HLRQW[0];  # INSURE PPU POINTS TO
00698  M01S00669.sxdest  +++|                                           NEW *HLRQ* #
00699  M01S00670.sxdest  +++|          P<CLEAR> = HLR$DRDRA[0];
00700  M01S00671.sxdest  +++|          RESETDRD = HLR$HLRQW[0];
00701  M01S00672.sxdest  +++|          HLR$HLRQW[0] = 0;
00702  M01S00673.sxdest  +++|          HLR$DRDRA[0] = 0;
00703  M01S00674.sxdest  +++|          HLR$LRQADR[0] = 0;
00704  M01S00675.sxdest  +++|          END
00705  M01S00676.sxdest  +++|
00706  M01S00677.sxdest  +++|        ELSE
00707  M01S00678.sxdest  +++|          BEGIN       # DO UNLOAD OF CARTRIDGE #
00708  M01S00679.sxdest  +++|          P<LLRQ> = HLR$LRQADR[0];
00709  M01S00680.sxdest  +++|          MSGAFDF("I","UL",0,HLRQADR);
00710  M01S00681.sxdest  +++|          LLR$DR[0] = ERRST"NOERR";
00711  M01S00682.sxdest  +++|          LLR$PRCNME[0] = REQTYP4"UNLD$CART";
00712  M01S00683.sxdest  +++|          LLR$PRCST[0] = PROCST"INITIAL";
00713  M01S00684.sxdest  +++|          HLR$HPS[0] = DSLABEL"DS3A";
00714  M01S00685.sxdest  +++|          ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
00715  M01S00686.sxdest  +++|          RETURN;
00716  M01S00687.sxdest  +++|
00717  M01S00688.sxdest  +++|DS3A:     # RETURN FROM UNLOAD OF CARTRIDGE #
00718  M01S00689.sxdest  +++|
00719  M01S00690.sxdest  +++|          IF HLR$RESP[0] NQ RESPTYP4"OK4"
00720  M01S00691.sxdest  +++|          THEN
00721  M01S00692.sxdest  +++|            BEGIN
00722  M01S00693.sxdest  +++|
00723  M01S00694.sxdest  +++|#
00724  M01S00695.sxdest  +++|*     PROCESS UNLOAD CARTRIDGE ERROR AS FOLLOWS:
00725  M01S00696.sxdest  +++|*       -DRIVER PLACED ORIGINAL CARTRIDGE IN OUTPUT STATION.
00726  M01S00697.sxdest  +++|*       -ASSUME A SECOND CARTRIDGE WAS IN DESTINATION CELL.
00727  M01S00698.sxdest  +++|*       -ATTEMPT TO MOVE THIS 2ND CARTRIDGE TO THE OUTPUT
00728  M01S00699.sxdest  +++|*         STATION BY LOADING IT.
00729  M01S00700.sxdest  +++|*       -IF THE LOAD SUCCEEDS, DO A SECOND UNLOAD BACK TO
00730  M01S00701.sxdest  +++|*          THE ORIGINAL DESTINATION.
00731  M01S00702.sxdest  +++|#
00732  M01S00703.sxdest  +++|
00733  M01S00704.sxdest  +++|            HLLDSET((HLRQADR));      # SET UP SECOND LOAD #
00734  M01S00705.sxdest  +++|            HLR$HPS[0] = DSLABEL"DS3B";
00735  M01S00706.sxdest  +++|            RETURN;
00736  M01S00707.sxdest  +++|
00737  M01S00708.sxdest  +++|DS3B:                                # RETURN FROM SECOND LOAD #
00738  M01S00709.sxdest  +++|
00739  M01S00710.sxdest  +++|              IF HLR$RESP[0] EQ RESPTYP4"OK4"
00740  M01S00711.sxdest  +++|              THEN     # UNLOAD 2ND CARTRIDGE #
00741  M01S00712.sxdest  +++|                BEGIN
00742  M01S00713.sxdest  +++|                LLR$PRCNME[0] = REQTYP4"UNLD$CART";
00743  M01S00714.sxdest  +++|                LLR$PRCST[0] = PROCST"INITIAL";
00744  M01S00715.sxdest  +++|                HLR$HPS[0] = DSLABEL"DS3C";
00745  M01S00716.sxdest  +++|                ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
00746  M01S00717.sxdest  +++|                RETURN;
00747  M01S00718.sxdest  +++|
00748  M01S00719.sxdest  +++|DS3C:
00749  M01S00720.sxdest  +++|                END      # UNLOAD OF 2ND REQUEST #
00750  M01S00721.sxdest  +++|              END        # LOAD OF 2ND REQUEST #
00751  M01S00722.sxdest  +++|            P<CLEAR> = HLR$DRDRA[0];
00752  M01S00723.sxdest  +++|            CLN = 0;
00753  M01S00724.sxdest  +++|            HLR$DRDRA[0] = 0;
00754  M01S00725.sxdest  +++|
00755  M01S00726.sxdest  +++|            END          # PHYSICAL CARTRIDGE UNLOAD #
00756  M01S00727.sxdest  +++|            END          # ORIGINAL UNLOAD REQUEST #
00757  M01S00728.sxdest  +++|
00758  M01S00729.sxdest  +++|#
00759  M01S00730.sxdest  +++|*     STEP 3 END.
00760  M01S00731.sxdest  +++|#
00761  M01S00732.sxdest  +++|
00762  M01S00733.sxdest  +++|                                               CONTROL EJECT;
00763  M01S00734.sxdest  +++|
00764  M01S00735.sxdest  +++|#
00765  M01S00736.sxdest  +++|*     STEP 4 - LOAD CARTRIDGE, IF APPROPRIATE.
00766  M01S00737.sxdest  +++|*              - CALL *HLLOAD* TO DO THE LOAD AND OBTAIN
00767  M01S00738.sxdest  +++|*                THE LARGE BUFFER.  *HLLOAD* WILL UPDATE
00768  M01S00739.sxdest  +++|*                THE *FCT* IF THE CARTRIDGE IS LOST OR HAS
00769  M01S00740.sxdest  +++|*                AN IMPROPER LABEL.
00770  M01S00741.sxdest  +++|*              - IF ERRORS OCCUR, STEP 11 WILL EVENTUALLY CAUSE
00771  M01S00742.sxdest  +++|*                THE CARTRIDGE TO BE UNLOADED AND THE
00772  M01S00743.sxdest  +++|*                ASSOCIATED LARGE BUFFER TO BE RELEASED.
00773  M01S00744.sxdest  +++|#
00774  M01S00745.sxdest  +++|
00775  M01S00746.sxdest  +++|      IF HLR$LOAD[0]
00776  M01S00747.sxdest  +++|      THEN
00777  M01S00748.sxdest  +++|        BEGIN  # STEP 4 #
00778  M01S00749.sxdest  +++|        SLOWFOR I=1 STEP 1 UNTIL MAXSMUNIT
00779  M01S00750.sxdest  +++|        DO
00780  M01S00751.sxdest  +++|          BEGIN     # FIND *SM* #
00781  M01S00752.sxdest  +++|          IF HLR$SM[0] EQ SM$ID[I]
00782  M01S00753.sxdest  +++|          THEN
00783  M01S00754.sxdest  +++|            BEGIN
00784  M01S00755.sxdest  +++|            GOTO SMFOUND;
00785  M01S00756.sxdest  +++|            END       # *SM* FOUND #
00786  M01S00757.sxdest  +++|          END       # *SM* SEARCH COMPLETE #
00787  M01S00758.sxdest  +++|
00788  M01S00759.sxdest  +++|SMFOUND:
00789  M01S00760.sxdest  +++|        DRDCOUNT = 0;
00790  M01S00761.sxdest  +++|        IF D0$ON[I]
00791  M01S00762.sxdest  +++|        THEN
00792  M01S00763.sxdest  +++|          BEGIN
00793  M01S00764.sxdest  +++|          DRDCOUNT = 1;
00794  M01S00765.sxdest  +++|          END
00795  M01S00766.sxdest  +++|
00796  M01S00767.sxdest  +++|        IF D1$ON[I]
00797  M01S00768.sxdest  +++|        THEN
00798  M01S00769.sxdest  +++|          BEGIN
00799  M01S00770.sxdest  +++|          DRDCOUNT = DRDCOUNT + 1;
00800  M01S00771.sxdest  +++|          END
00801  M01S00772.sxdest  +++|
00802  M01S00009.sxdest2 +++|        IF SM$DSNUM[I] EQ 0
00803  M01S00010.sxdest2 +++|        THEN     # DESTAGE DISABLED ON THIS SM #
00804  M01S00011.sxdest2 +++|          BEGIN
00805  M01S00012.sxdest2 +++|          HLR$RESP[0] = ERRST"SMDSTAGEOFF";
00806  M01S00013.sxdest2 +++|          GOTO DSINERR;
00807  M01S00014.sxdest2 +++|          END
00808  M01S00015.sxdest2 +++|
00809  M01S00016.sxdest2 +++|        DSTGCOUNT = SM$DSNUM[I];
00810  M01S00017.sxdest2 +++|
00811  M01S00773.sxdest  +++|        TTDAMSBF = HLR$SBF[0];
Line S00774 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse2
Seq #  *Modification Id* Act 
----------------------------+
00812  M02S00774.mse2    ---|        TFCT = HLR$FCTXN[0];
00813  M01S00001.mse2    +++|        TFCT = HLR$FCTX[0];
00814  M01S00004.msea026 +++|        TFAM = HLR$FAM[0];
00815  M01S00775.sxdest  +++|
00816  M01S00776.sxdest  +++|        IF NOT SM$LLRQ1[I]
00817  M01S00777.sxdest  +++|        THEN
00818  M01S00778.sxdest  +++|          BEGIN
00819  M01S00779.sxdest  +++|
00820  M01S00780.sxdest  +++|          IF SM$REQRES1[I] NQ 0
00821  M01S00781.sxdest  +++|            AND SM$REQRES1[I] NQ HLRQADR
00822  M01S00782.sxdest  +++|          THEN
00823  M01S00783.sxdest  +++|            BEGIN
00824  M01S00784.sxdest  +++|            P<HLRQ> = SM$REQRES1[I];
00825  M01S00018.sxdest2 +++|            IF HLR$HPN[0] EQ HLRPN"DESTAGE"
00826  M01S00019.sxdest2 +++|            THEN
00827  M01S00020.sxdest2 +++|              BEGIN
00828  M01S00021.sxdest2 +++|              DSTGCOUNT = DSTGCOUNT - 1;
00829  M01S00022.sxdest2 +++|
00830  M01S00023.sxdest2 +++|              IF DSTGCOUNT EQ 0
00831  M01S00024.sxdest2 +++|              THEN    # DO NOT LET A NEW DESTAGE START #
00832  M01S00025.sxdest2 +++|                BEGIN
00833  M01S00026.sxdest2 +++|                P<HLRQ> = HLRQADR;     # SET ERROR TO ORGINIAL HLRQ #
00834  M01S00027.sxdest2 +++|                HLR$RESP[0] = ERRST"RSFULL";
00835  M01S00028.sxdest2 +++|                GOTO DSINERR;
00836  M01S00029.sxdest2 +++|                END
00837  M01S00030.sxdest2 +++|              END
00838  M01S00031.sxdest2 +++|
00839  M01S00785.sxdest  +++|
00840  M01S00786.sxdest  +++|            IF HLR$FCTX[0] NQ 0
00841  M01S00787.sxdest  +++|            THEN
00842  M01S00788.sxdest  +++|              BEGIN
00843  M01S00789.sxdest  +++|              CURFCT = HLR$FCTX[0];
00844  M01S00790.sxdest  +++|              END
00845  M01S00791.sxdest  +++|
00846  M01S00792.sxdest  +++|            ELSE
00847  M01S00793.sxdest  +++|              BEGIN
00848  M01S00794.sxdest  +++|              CURFCT = HLR$ASAFCT[0];
00849  M01S00795.sxdest  +++|              END
00850  M01S00796.sxdest  +++|
Line S00797 Modification History
M01 (Added by) sxdest
M02 (Updated by) msea026
Seq #  *Modification Id* Act 
----------------------------+
00851  M02S00797.msea026 ---|            IF TFCT EQ CURFCT
Line S00798 Modification History
M01 (Added by) sxdest
M02 (Updated by) msea026
Seq #  *Modification Id* Act 
----------------------------+
00852  M02S00798.msea026 ---|              AND TTDAMSBF EQ HLR$SBF[0]
00853  M01S00005.msea026 +++|             IF (TFCT EQ CURFCT)
00854  M01S00006.msea026 +++|               AND (TTDAMSBF EQ HLR$SBF[0])
00855  M01S00007.msea026 +++|               AND (TFAM EQ HLR$FAM[0])
00856  M01S00799.sxdest  +++|            THEN      # REQUESTING CARTRIDGE MOUNTED #
00857  M01S00800.sxdest  +++|              BEGIN
00858  M01S00801.sxdest  +++|NEXTHLRQ:
00859  M01S00802.sxdest  +++|              IF HLR$HLRQW[0] EQ 0
00860  M01S00803.sxdest  +++|                THEN
00861  M01S00804.sxdest  +++|                  BEGIN    # END OF *HLRQ* WRITING CARTRIDGE #
00862  M01S00805.sxdest  +++|                  HLR$HLRQW[0] = HLRQADR;
00863  M01S00806.sxdest  +++|                  P<HLRQ> = HLRQADR;
00864  M01S00807.sxdest  +++|                  STG$MSK = 0;
00865  M01S00010.sxdest1 +++|                  HLR$HPS[0] = DSLABEL"DS5A";
00866  M01S00011.sxdest1 +++|                  HLR$LOAD[0] = FALSE;
00867  M01S00808.sxdest  +++|                  RETURN;
00868  M01S00809.sxdest  +++|                  END
00869  M01S00810.sxdest  +++|                ELSE
00870  M01S00811.sxdest  +++|                  BEGIN    # FIND END OF *HLRQ* WRITING #
00871  M01S00812.sxdest  +++|                  P<HLRQ> = HLR$HLRQW[0];
00872  M01S00813.sxdest  +++|                  GOTO NEXTHLRQ;
00873  M01S00814.sxdest  +++|                  END
00874  M01S00815.sxdest  +++|              END
00875  M01S00816.sxdest  +++|            END
00876  M01S00817.sxdest  +++|          END         # SM$LLRQ1 CHECK #
00877  M01S00818.sxdest  +++|
00878  M01S00819.sxdest  +++|        IF NOT SM$LLRQ2[I]
00879  M01S00820.sxdest  +++|        THEN
00880  M01S00821.sxdest  +++|          BEGIN
00881  M01S00822.sxdest  +++|
00882  M01S00823.sxdest  +++|          IF SM$REQRES2[I] NQ 0
00883  M01S00824.sxdest  +++|            AND SM$REQRES2[I] NQ HLRQADR
00884  M01S00825.sxdest  +++|          THEN
00885  M01S00826.sxdest  +++|            BEGIN
00886  M01S00827.sxdest  +++|            P<HLRQ> = SM$REQRES2[I];
00887  M01S00032.sxdest2 +++|            IF HLR$HPN[0] EQ HLRPN"DESTAGE"
00888  M01S00033.sxdest2 +++|            THEN
00889  M01S00034.sxdest2 +++|              BEGIN
00890  M01S00035.sxdest2 +++|              DSTGCOUNT = DSTGCOUNT - 1;
00891  M01S00036.sxdest2 +++|
00892  M01S00037.sxdest2 +++|              IF DSTGCOUNT EQ 0
00893  M01S00038.sxdest2 +++|              THEN    # DO NOT LET A NEW DESTAGE START #
00894  M01S00039.sxdest2 +++|                BEGIN
00895  M01S00040.sxdest2 +++|                P<HLRQ> = HLRQADR;   # SET ERROR TO ORGINIAL HLRQ #
00896  M01S00041.sxdest2 +++|                HLR$RESP[0] = ERRST"RSFULL";
00897  M01S00042.sxdest2 +++|                GOTO DSINERR;
00898  M01S00043.sxdest2 +++|                END
00899  M01S00044.sxdest2 +++|              END
00900  M01S00045.sxdest2 +++|
00901  M01S00828.sxdest  +++|
00902  M01S00829.sxdest  +++|            IF HLR$FCTX[0] NQ 0
00903  M01S00830.sxdest  +++|            THEN
00904  M01S00831.sxdest  +++|              BEGIN
00905  M01S00832.sxdest  +++|              CURFCT = HLR$FCTX[0];
00906  M01S00833.sxdest  +++|              END
00907  M01S00834.sxdest  +++|
00908  M01S00835.sxdest  +++|            ELSE
00909  M01S00836.sxdest  +++|              BEGIN
00910  M01S00837.sxdest  +++|              CURFCT = HLR$ASAFCT[0];
00911  M01S00838.sxdest  +++|              END
00912  M01S00839.sxdest  +++|
00913  M01S00840.sxdest  +++|
Line S00841 Modification History
M01 (Added by) sxdest
M02 (Updated by) msea026
Seq #  *Modification Id* Act 
----------------------------+
00914  M02S00841.msea026 ---|            IF TFCT EQ CURFCT
Line S00842 Modification History
M01 (Added by) sxdest
M02 (Updated by) msea026
Seq #  *Modification Id* Act 
----------------------------+
00915  M02S00842.msea026 ---|              AND TTDAMSBF EQ HLR$SBF[0]
00916  M01S00008.msea026 +++|             IF (TFCT EQ CURFCT)
00917  M01S00009.msea026 +++|               AND (TTDAMSBF EQ HLR$SBF[0])
00918  M01S00010.msea026 +++|               AND (TFAM EQ HLR$FAM[0])
00919  M01S00843.sxdest  +++|            THEN      # REQUESTING CARTRIDGE MOUNTED #
00920  M01S00844.sxdest  +++|              BEGIN
00921  M01S00845.sxdest  +++|NEXTHLRQ1:
00922  M01S00846.sxdest  +++|              IF HLR$HLRQW[0] EQ 0
00923  M01S00847.sxdest  +++|                THEN
00924  M01S00848.sxdest  +++|                  BEGIN    # END OF *HLRQ* WRITING CARTRIDGE #
00925  M01S00849.sxdest  +++|                  HLR$HLRQW[0] = HLRQADR;
00926  M01S00850.sxdest  +++|                  P<HLRQ> = HLRQADR;
00927  M01S00851.sxdest  +++|                  STG$MSK = 0;
00928  M01S00012.sxdest1 +++|                  HLR$HPS[0] = DSLABEL"DS5A";
00929  M01S00013.sxdest1 +++|                  HLR$LOAD[0] = FALSE;
00930  M01S00852.sxdest  +++|                  RETURN;
00931  M01S00853.sxdest  +++|                  END
00932  M01S00854.sxdest  +++|                ELSE
00933  M01S00855.sxdest  +++|                  BEGIN    # FIND END OF *HLRQ* WRITING #
00934  M01S00856.sxdest  +++|                  P<HLRQ> = HLR$HLRQW[0];
00935  M01S00857.sxdest  +++|                  GOTO NEXTHLRQ1;
00936  M01S00858.sxdest  +++|                  END
00937  M01S00859.sxdest  +++|              END
00938  M01S00860.sxdest  +++|            END
00939  M01S00861.sxdest  +++|          END         # SM$LLRQ2 CHECK #
00940  M01S00862.sxdest  +++|
00941  M01S00863.sxdest  +++|      P<HLRQ> = HLRQADR;
00942  M01S00864.sxdest  +++|        IF (SM$REQRES1[I] NQ 0)         ##
00943  M01S00865.sxdest  +++|          AND (SM$REQRES2[I] NQ 0)
00944  M01S00866.sxdest  +++|        THEN
00945  M01S00867.sxdest  +++|          BEGIN
00946  M01S00868.sxdest  +++|          HLR$RESP[0] = ERRST"RSFULL";
00947  M01S00869.sxdest  +++|          GOTO DSINERR;
00948  M01S00870.sxdest  +++|          END
00949  M01S00871.sxdest  +++|
00950  M01S00872.sxdest  +++|          IF DRDCOUNT EQ 1
00951  M01S00873.sxdest  +++|          THEN
00952  M01S00874.sxdest  +++|            BEGIN
00953  M01S00875.sxdest  +++|            IF(SM$REQRES1[I] NQ 0)         ##
00954  M01S00876.sxdest  +++|              OR (SM$REQRES2[I] NQ 0)
00955  M01S00877.sxdest  +++|            THEN
00956  M01S00878.sxdest  +++|              BEGIN
00957  M01S00879.sxdest  +++|              HLR$RESP[0] = ERRST"RSFULL";
00958  M01S00880.sxdest  +++|              GOTO DSINERR;
00959  M01S00881.sxdest  +++|              END
00960  M01S00882.sxdest  +++|            END       # END OF ONE *DRD* #
00961  M01S00883.sxdest  +++|
00962  M01S00884.sxdest  +++|        IF SM$REQRES1[I] EQ 0
00963  M01S00885.sxdest  +++|        THEN       # RESERVE *DRD* #
00964  M01S00886.sxdest  +++|          BEGIN
00965  M01S00887.sxdest  +++|          SM$REQRES1[I] = HLRQADR;
00966  M01S00888.sxdest  +++|          SM$DSFLAG1[I] = TRUE;
00967  M01S00889.sxdest  +++|          HLR$DRDRA[0] = LOC(SM$REQRES1[I]);
00968  M01S00890.sxdest  +++|          END
00969  M01S00891.sxdest  +++|
00970  M01S00892.sxdest  +++|        ELSE
00971  M01S00893.sxdest  +++|          BEGIN
00972  M01S00894.sxdest  +++|          SM$REQRES2[I] = HLRQADR;
00973  M01S00895.sxdest  +++|          SM$DSFLAG2[I] = TRUE;
00974  M01S00896.sxdest  +++|          HLR$DRDRA[0] = LOC(SM$REQRES2[I]);
00975  M01S00897.sxdest  +++|          END
00976  M01S00898.sxdest  +++|
00977  M01S00899.sxdest  +++|        HLR$HPS[0] = DSLABEL"DS4A";
00978  M01S00900.sxdest  +++|        HLLDSET((HLRQADR));     # MOVE *HLRQ* DATA TO *LLRQ* #
00979  M01S00901.sxdest  +++|        MSGAFDF("I","LD",0,HLRQADR);
00980  M01S00902.sxdest  +++|        RETURN;         # WAIT LOAD OF CARTRIDGE #
00981  M01S00903.sxdest  +++|
00982  M01S00904.sxdest  +++|DS4A:
00983  M01S00905.sxdest  +++|        HLLOAD((HLRQADR));     # CHECK RETURN CODES #
00984  M01S00906.sxdest  +++|DSINERR:                             # IF *DRD* NOT ASSIGNED #
00985  M01S00011.msea026 +++|      P<HLRQ> = HLRQADR;
00986  M01S00907.sxdest  +++|        HLR$LOAD[0] = FALSE;
00987  M01S00908.sxdest  +++|        IF HLR$RESP[0] NQ ERRST"NOERR"
00988  M01S00909.sxdest  +++|        THEN
00989  M01S00910.sxdest  +++|          BEGIN
00990  M01S00911.sxdest  +++|          HLR$ERRC[0] = ERRST"SPECIAL";
00991  M01S00912.sxdest  +++|          GOTO DSERR;
00992  M01S00913.sxdest  +++|          END
00993  M01S00914.sxdest  +++|
00994  M01S00915.sxdest  +++|        END  # STEP 4 #
00995  M01S00916.sxdest  +++|
00996  M01S00917.sxdest  +++|                                               CONTROL EJECT;
00997  M01S00918.sxdest  +++|
00998  M01S00919.sxdest  +++|#
00999  M01S00920.sxdest  +++|*     STEP 5 - ACQUIRE FILE FROM *PFM*, IF APPROPRIATE.
01000  M01S00921.sxdest  +++|*              - ISSUE A *UATTACH* IF DIRECT ACCESS, OTHERWISE,
01001  M01S00922.sxdest  +++|*                ISSUE A *UGET*.
01002  M01S00923.sxdest  +++|*              - CAUSE THE *PFC* ENTRY TO BE STORED AT *HLR$PFC*.
01003  M01S00924.sxdest  +++|*              - RELOOP IF THE *UATTACH* OR *UGET* REQUEST
01004  M01S00925.sxdest  +++|*                CAN NOT BE PROCESSED DUE TO SOME DELAY CONDITION.
01005  M01S00926.sxdest  +++|*              - ABANDON DESTAGE IF THE FILE HAS BEEN DESTAGED.
01006  M01S00927.sxdest  +++|*              - CLEAR THE *HLR$VOLAUP* FIELD.
01007  M01S00928.sxdest  +++|#
01008  M01S00929.sxdest  +++|
01009  M01S00930.sxdest  +++|DS5A:                                # RETRY *UATTACH*/*UGET* CALL #
01010  M01S00931.sxdest  +++|      IF HLR$FVOL[0]
01011  M01S00932.sxdest  +++|      THEN
01012  M01S00933.sxdest  +++|        BEGIN  # STEP 5 #
01013  M01S00934.sxdest  +++|        NAMEC[0] = HLR$FLNM[0];
01014  M01S00935.sxdest  +++|        NAMEC[2] = TDAMPFN[0];
01015  M01S00936.sxdest  +++|        NAMEC[1] = TDAMFAM[0];
01016  M01S00937.sxdest  +++|
01017  M01S00938.sxdest  +++|        P<PFC> = LOC(HLR$PFC[0]);
01018  M01S00939.sxdest  +++|
01019  M01S00940.sxdest  +++|        IF NOT TDAMIA[0]
01020  M01S00941.sxdest  +++|        THEN
01021  M01S00942.sxdest  +++|          BEGIN  # DIRECT ACCESS FILE #
01022  M01S00943.sxdest  +++|          UATTACH(NAME[0],PFMSTAT,6,NAME[2],PTRD,TDAMUI[0],NAME[1],  ##
01023  M01S00944.sxdest  +++|            TDAMPFID[0],PFC[0],TDAMCDT[0],LOC(PFMRET));
01024  M01S00945.sxdest  +++|          HLR$PRU[0] = 0;            # START WITH SYSTEM SECTOR #
01025  M01S00946.sxdest  +++|          END  # DIRECT ACCESS FILE #
01026  M01S00947.sxdest  +++|
01027  M01S00948.sxdest  +++|        ELSE
01028  M01S00949.sxdest  +++|          BEGIN  # INDIRECT ACCESS FILE #
01029  M01S00950.sxdest  +++|          UGET(NAME[0],PFMSTAT,6,NAME[2],TDAMUI[0],NAME[1],    ##
01030  M01S00951.sxdest  +++|            TDAMPFID[0],PFC[0],TDAMCDT[0],LOC(PFMRET));
01031  M01S00952.sxdest  +++|
01032  M01S00953.sxdest  +++|          HLR$PRU[0] = 1;            # START WITH 1ST DATA SECTOR #
01033  M01S00954.sxdest  +++|          PFMSTAT = -1;
01034  M01S00955.sxdest  +++|          HLR$HPS[0] = DSLABEL"DS5B";
01035  M01S00956.sxdest  +++|          GLPFMFL = TRUE;
01036  M01S00957.sxdest  +++|          ADD$LNK(HLRQADR,LCHN"HL$PFMWAIT",0);
01037  M01S00958.sxdest  +++|          RETURN;
01038  M01S00959.sxdest  +++|
01039  M01S00960.sxdest  +++|          END  # INDIRECT ACCESS FILE #
01040  M01S00961.sxdest  +++|DS5B:
01041  M01S00962.sxdest  +++|          P<PFC> = LOC(HLR$PFC[0]);
01042  M01S00963.sxdest  +++|
01043  M01S00964.sxdest  +++|#
01044  M01S00965.sxdest  +++|*     CHECK FOR ERROR ON UGET OR UATTACH.
01045  M01S00966.sxdest  +++|#
01046  M01S00967.sxdest  +++|
01047  M01S00968.sxdest  +++|        IF PFMSTAT NQ 0
01048  M01S00969.sxdest  +++|        THEN
01049  M01S00970.sxdest  +++|          BEGIN
01050  M01S00971.sxdest  +++|          DSERPFM(HLRQADR,PFMSTAT);
01051  M01S00972.sxdest  +++|          IF HLR$RESP[0] NQ ERRST"NOERR"
01052  M01S00973.sxdest  +++|          THEN
01053  M01S00974.sxdest  +++|            BEGIN
01054  M01S00975.sxdest  +++|            HLR$HPS[0] = DSLABEL"DS5A";
01055  M01S00976.sxdest  +++|            GOTO DSERR;
01056  M01S00977.sxdest  +++|            END
01057  M01S00978.sxdest  +++|
01058  M01S00979.sxdest  +++|          END
01059  M01S00980.sxdest  +++|
01060  M01S00981.sxdest  +++|        IF TDAMASA[0] NQ PFC$AA[0]
01061  M01S00982.sxdest  +++|        THEN                         # IF FILE ALREADY DESTAGED #
01062  M01S00983.sxdest  +++|          BEGIN
01063  M01S00984.sxdest  +++|          HLR$RESP[0] = ERRST"ABANDON";
01064  M01S00985.sxdest  +++|          HLR$ERRC[0] = ABANDON"NEWASA";;
01065  M01S00986.sxdest  +++|          GOTO DSERR;
01066  M01S00987.sxdest  +++|          END
01067  M01S00988.sxdest  +++|
01068  M01S00989.sxdest  +++|        HLR$VOLAUP[0] = 0;
01069  M01S00990.sxdest  +++|        HLR$CSNDP[0] = "";
01070  M01S00991.sxdest  +++|        HLR$CCODP[0] = "";
01071  M01S00992.sxdest  +++|        HLR$VOLLNP[0] = 0;
01072  M01S00993.sxdest  +++|
01073  M01S00994.sxdest  +++|        MSGAFDF("B", "BD",0,HLRQADR);
01074  M01S00995.sxdest  +++|
01075  M01S00996.sxdest  +++|        END  # STEP 5 #
01076  M01S00997.sxdest  +++|
01077  M01S00998.sxdest  +++|                                               CONTROL EJECT;
01078  M01S00999.sxdest  +++|
01079  M01S01000.sxdest  +++|#
01080  M01S01001.sxdest  +++|*     STEP 6 - COPY DATA TO THE NEXT VOLUME.
01081  M01S01002.sxdest  +++|*              - CALL *HLCPYDC* TO EFFECT THE COPY.
01082  M01S01003.sxdest  +++|*              - IF NO ERROR, *HLR$AUUD* IDENTIFIES THE
01083  M01S01004.sxdest  +++|*                LAST AU WRITTEN.  *HLR$EOI* IS SET IF
01084  M01S01005.sxdest  +++|*                THE DESTAGE IS COMPLETE.
01085  M01S01006.sxdest  +++|#
01086  M01S01007.sxdest  +++|
01087  M01S01008.sxdest  +++|      P<LLRQ> = HLR$LRQADR[0];
01088  M01S01009.sxdest  +++|      HLR$HPS[0] = DSLABEL"DS6A";
01089  M01S01010.sxdest  +++|      LLR$PRCNME[0] = REQTYP4"CPY$DA";
01090  M01S01011.sxdest  +++|      LLR$PRCST[0] = PROCST"INITIAL";
01091  M01S01012.sxdest  +++|      LLR$DR[0] = 0;
01092  M01S01013.sxdest  +++|      ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
01093  M01S01014.sxdest  +++|      RETURN;        # START COPY #
01094  M01S01015.sxdest  +++|
01095  M01S01016.sxdest  +++|DS6A:                   # RE-ENTER AFTER COPY COMPLETE #
01096  M01S01017.sxdest  +++|
01097  M01S01018.sxdest  +++|      HLCPYDC((HLRQADR));      # CHECK RETURN CODES #
01098  M01S01019.sxdest  +++|      IF HLR$RESP[0] NQ ERRST"NOERR"
01099  M01S01020.sxdest  +++|      THEN
01100  M01S01021.sxdest  +++|        BEGIN
01101  M01S01022.sxdest  +++|        GOTO DSERR;
01102  M01S01023.sxdest  +++|        END
01103  M01S01024.sxdest  +++|
01104  M01S01025.sxdest  +++|#
01105  M01S01026.sxdest  +++|*     STEP 6 - END.
01106  M01S01027.sxdest  +++|#
01107  M01S01028.sxdest  +++|
01108  M01S01029.sxdest  +++|                                               CONTROL EJECT;
01109  M01S01030.sxdest  +++|
01110  M01S01031.sxdest  +++|#
01111  M01S01032.sxdest  +++|*     STEP 7 - UPDATE *FCT* ENTRY TO REFLECT NEW VOLUME.
01112  M01S01033.sxdest  +++|#
01113  M01S01034.sxdest  +++|
01114  M01S01035.sxdest  +++|#
01115  M01S01036.sxdest  +++|*     STEP 7.1 - RELEASE UNUSED AU.
01116  M01S01037.sxdest  +++|#
01117  M01S01038.sxdest  +++|
01118  M01S01039.sxdest  +++|      USED = HLR$AUUD[0]+1-HLR$VOLAU[0];
01119  M01S01040.sxdest  +++|      RLSVOL(HLRQADR,HLR$FCTQ[0],HLR$AUUD[0]+1,HLR$VOLLN[0]-USED);
01120  M01S01041.sxdest  +++|
01121  M01S01042.sxdest  +++|
01122  M01S01043.sxdest  +++|      P<PFC> = LOC(HLR$PFC[0]);
01123  M01S01044.sxdest  +++|
01124  M01S01045.sxdest  +++|      IF TDAMIA[0]
01125  M01S01046.sxdest  +++|      THEN
01126  M01S01047.sxdest  +++|        BEGIN
01127  M01S01048.sxdest  +++|        ATEOI = (HLR$PRU[0] - 1) GQ HLR$PFC$LN[0];
01128  M01S01049.sxdest  +++|        END
01129  M01S01050.sxdest  +++|
01130  M01S01051.sxdest  +++|      ELSE
01131  M01S01052.sxdest  +++|        BEGIN             # DIRECT FILE #
01132  M01S01053.sxdest  +++|        ATEOI = HLR$PRU[0] GQ HLR$PFC$LN[0];
01133  M01S01054.sxdest  +++|        END
01134  M01S01055.sxdest  +++|
01135  M01S01056.sxdest  +++|
01136  M01S01057.sxdest  +++|#
01137  M01S01058.sxdest  +++|*     STEP 7.2 - ORGANIZED USED AU INTO ONE VOLUME.
01138  M01S01059.sxdest  +++|*                (CC=LAST, LINK=0, LENGTH=WHATEVER).
01139  M01S01060.sxdest  +++|*              - THE LINK FIELD IS SET TO ZERO TO FACILITATE
01140  M01S01061.sxdest  +++|*                ERROR CORRECTION WHEN A PARTIAL CHAIN EXISTS.
01141  M01S01062.sxdest  +++|*                *SSVAL* WILL TREAT A CHAIN WHICH HAS NO *PFC*
01142  M01S01063.sxdest  +++|*                ENTRY AND HAS CC=FIRST OR MIDDLE AND A
01143  M01S01064.sxdest  +++|*                LINK=0 AS IF IT WERE A NORMAL ORPHAN.  THIS
01144  M01S01065.sxdest  +++|*                PERMITS THE NORMAL M860 SPACE MANAGEMENT
01145  M01S01066.sxdest  +++|*                PROCESS TO MAKE THIS SPACE AVAILABLE WITHOUT
01146  M01S01067.sxdest  +++|*                HUMAN INTERVENTION.
01147  M01S01068.sxdest  +++|#
01148  M01S01069.sxdest  +++|
01149  M01S01070.sxdest  +++|      P<FCT> = HLR$FCTQ[0] + FCTQHL;
01150  M01S01071.sxdest  +++|      T1 = 0;
01151  M01S01072.sxdest  +++|      T2 = 0;
01152  M01S01073.sxdest  +++|      START = HLR$VOLAU[0];
01153  M01S01074.sxdest  +++|
01154  M01S01075.sxdest  +++|      FOR I = 0 STEP 1 UNTIL USED-1
01155  M01S01076.sxdest  +++|      DO
01156  M01S01077.sxdest  +++|        BEGIN
01157  M01S01078.sxdest  +++|        SETFCTX(START+I);            # SET *FWD* AND *FPS* VALUES #
01158  M01S01079.sxdest  +++|
01159  M01S01080.sxdest  +++|        FCT$CLFG(FWD,FPS) = 0;
01160  M01S01081.sxdest  +++|        FCT$FBF(FWD,FPS) = 1;
01161  M01S01082.sxdest  +++|        FCT$CAUF(FWD,FPS) = T1;
01162  M01S01083.sxdest  +++|        FCT$CC(FWD,FPS) = CHAINCON"LAST";
01163  M01S01084.sxdest  +++|        FCT$LEN(FWD,FPS) = USED - 1 - I;
01164  M01S01085.sxdest  +++|        FCT$LINK(FWD,FPS) = T2;
01165  M01S01086.sxdest  +++|
01166  M01S01087.sxdest  +++|        T1 = 1;                      # ALL BUT THE FIRST AU ARE
01167  M01S01088.sxdest  +++|                                       CONTINUATION AU #
01168  M01S01089.sxdest  +++|        T2 = START;
01169  M01S01090.sxdest  +++|
01170  M01S01091.sxdest  +++|        END
01171  M01S01092.sxdest  +++|
01172  M01S01093.sxdest  +++|#
01173  M01S01094.sxdest  +++|*     SAVE THE ID OF THE FIRST ALLOCATED VOLUME ON THE
01174  M01S01095.sxdest  +++|*     CARTRIDGE IN CASE THE DESTAGE IS ABANDONED.  THEN THE
01175  M01S01096.sxdest  +++|*     ALLOCATED SPACE CAN BE RELEASED AND REUSED.
01176  M01S01097.sxdest  +++|#
01177  M01S01098.sxdest  +++|
01178  M01S01099.sxdest  +++|      IF HLR$1STVOL[0] EQ 0
01179  M01S01100.sxdest  +++|      THEN
01180  M01S01101.sxdest  +++|        BEGIN
01181  M01S01102.sxdest  +++|        HLR$1STVOL[0] = START;
01182  M01S01103.sxdest  +++|        END
01183  M01S01104.sxdest  +++|
01184  M01S01105.sxdest  +++|      HLR$VOLLN[0] = 0;              # PREVENT RE-RELEASING IF FUTURE
01185  M01S01106.sxdest  +++|                                       ERROR RECOVERY #
01186  M01S01107.sxdest  +++|                                               CONTROL EJECT;
01187  M01S01108.sxdest  +++|
01188  M01S01109.sxdest  +++|#
01189  M01S01110.sxdest  +++|*     STEP 7.3 - SAVE NEW *FCT* ENTRY, AND GET OLD *FCT* ENTRY.
01190  M01S01111.sxdest  +++|#
01191  M01S01112.sxdest  +++|
01192  M01S01113.sxdest  +++|      IF HLR$JOF[0]
01193  M01S01114.sxdest  +++|      THEN
01194  M01S01115.sxdest  +++|        BEGIN  # GET *FCT* ENTRY FOR PREVIOUS CARTRIDGE #
01195  M01S01116.sxdest  +++|        RLS$FCT(HLR$FCTQ[0],0,STAT);
01196  M01S01117.sxdest  +++|        HLR$FCTQ[0] = 0;             # PREVENT A 2ND RELEASE #
01197  M01S01118.sxdest  +++|        IF STAT EQ CMASTAT"NOERR"
01198  M01S01119.sxdest  +++|        THEN
01199  M01S01120.sxdest  +++|          BEGIN
01200  M01S01121.sxdest  +++|          ACQ$FCT(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],  ##
01201  M01S01122.sxdest  +++|            HLR$FCTXP[0],QADDR,0,STAT);
01202  M01S01123.sxdest  +++|          END
01203  M01S01124.sxdest  +++|
01204  M01S01125.sxdest  +++|        IF STAT NQ CMASTAT"NOERR"
01205  M01S01126.sxdest  +++|        THEN
01206  M01S01127.sxdest  +++|          BEGIN
01207  M01S01128.sxdest  +++|          DSERCAT(HLRQADR,STAT);
01208  M01S01129.sxdest  +++|          GOTO DSERR;
01209  M01S01130.sxdest  +++|          END
01210  M01S01131.sxdest  +++|
01211  M01S01132.sxdest  +++|        P<FCT> = QADDR + FCTQHL;
01212  M01S01133.sxdest  +++|
01213  M01S01134.sxdest  +++|#
01214  M01S01135.sxdest  +++|*     UPDATE CARTRIDGE USAGE STATISTICS.
01215  M01S01136.sxdest  +++|*     UPDATE *AST* AND THE PREAMBLE TO REFLECT THE SPACE NOW AVAILABLE.
01216  M01S01137.sxdest  +++|#
01217  M01S01138.sxdest  +++|
01218  M01S01139.sxdest  +++|        UPUSAGE(HLRQADR,QADDR);
01219  M01S01140.sxdest  +++|
01220  M01S01141.sxdest  +++|        UASTPRM(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],QADDR,STAT);
01221  M01S01142.sxdest  +++|
01222  M01S01143.sxdest  +++|        IF STAT NQ CMASTAT"NOERR"
01223  M01S01144.sxdest  +++|        THEN
01224  M01S01145.sxdest  +++|          BEGIN
01225  M01S01146.sxdest  +++|          DSERCAT(HLRQADR,STAT);
01226  M01S01147.sxdest  +++|          RLS$FCT(QADDR,0,STAT);
01227  M01S01148.sxdest  +++|          GOTO DSERR;
01228  M01S01149.sxdest  +++|          END
01229  M01S01150.sxdest  +++|
01230  M01S01151.sxdest  +++|        END  # GET *FCT* ENTRY FOR PREVIOUS CARTRIDGE #
01231  M01S01152.sxdest  +++|
01232  M01S01153.sxdest  +++|                                               CONTROL EJECT;
01233  M01S01154.sxdest  +++|
01234  M01S01155.sxdest  +++|#
01235  M01S01156.sxdest  +++|*     STEP 7.4 - UPDATE LINK TO THIS VOLUME.
01236  M01S01157.sxdest  +++|#
01237  M01S01158.sxdest  +++|
01238  M01S01159.sxdest  +++|      IF HLR$FVOL[0]
01239  M01S01160.sxdest  +++|      THEN                           # SET LINKAGE IN *HLRQ* #
01240  M01S01161.sxdest  +++|        BEGIN
01241  M01S01162.sxdest  +++|        P<ASA> = LOC(HLR$NEWASA[0]);
01242  M01S01163.sxdest  +++|        ASASM[0] = HLR$SM[0];
01243  M01S01164.sxdest  +++|        ASAFCT[0] = HLR$FCTX[0];
01244  M01S01165.sxdest  +++|        ASAAU[0] = HLR$VOLAU[0];
01245  M01S01166.sxdest  +++|
01246  M01S01167.sxdest  +++|        END
01247  M01S01168.sxdest  +++|
01248  M01S01169.sxdest  +++|      ELSE                           # SET LINKAGE IN PREVIOUS VOLUME #
01249  M01S01170.sxdest  +++|        BEGIN
01250  M01S01171.sxdest  +++|        SETFCTX(HLR$VOLAUP[0]);      # SET *FWD* AND *FPS* VALUES #
01251  M01S01172.sxdest  +++|
01252  M01S01173.sxdest  +++|        FCT$LINK(FWD,FPS) = HLR$VOLAU[0];
01253  M01S01174.sxdest  +++|
01254  M01S01175.sxdest  +++|        IF HLR$JOF[0]
01255  M01S01176.sxdest  +++|        THEN
01256  M01S01177.sxdest  +++|          BEGIN
01257  M01S01178.sxdest  +++|          T1 = FCT$CLKOCL(FWD,FPS);
01258  M01S01179.sxdest  +++|          FCT$OCLNK(T1) = HLR$FCTX[0];
01259  M01S01180.sxdest  +++|          END
01260  M01S01181.sxdest  +++|
01261  M01S01182.sxdest  +++|        END
01262  M01S01183.sxdest  +++|
01263  M01S01184.sxdest  +++|                                               CONTROL EJECT;
01264  M01S01185.sxdest  +++|
01265  M01S01186.sxdest  +++|#
01266  M01S01187.sxdest  +++|*     STEP 7.5 - UPDATE BACKLINK INFORMATION.
01267  M01S01188.sxdest  +++|#
01268  M01S01189.sxdest  +++|
01269  M01S01190.sxdest  +++|      HLR$VOLAUP[0] = HLR$VOLAU[0];
01270  M01S01191.sxdest  +++|      HLR$VOLLNP[0] = USED;
01271  M01S01192.sxdest  +++|
01272  M01S01193.sxdest  +++|#
01273  M01S01194.sxdest  +++|*     STEP 7.6 - RESTORE NEW *FCT* ENTRY, IF APPROPRIATE.
01274  M01S01195.sxdest  +++|#
01275  M01S01196.sxdest  +++|
01276  M01S01197.sxdest  +++|      IF HLR$JOF[0]
01277  M01S01198.sxdest  +++|      THEN
01278  M01S01199.sxdest  +++|        BEGIN
01279  M01S01200.sxdest  +++|        RLS$FCT(QADDR,0,STAT);
01280  M01S01201.sxdest  +++|        IF STAT EQ CMASTAT"NOERR"
01281  M01S01202.sxdest  +++|        THEN
01282  M01S01203.sxdest  +++|          BEGIN
01283  M01S01204.sxdest  +++|          ACQ$FCT(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],  ##
01284  M01S01205.sxdest  +++|            HLR$FCTX[0],QADDR,0,STAT);
01285  M01S01206.sxdest  +++|          END
01286  M01S01207.sxdest  +++|
01287  M01S01208.sxdest  +++|        IF STAT NQ CMASTAT"NOERR"
01288  M01S01209.sxdest  +++|        THEN
01289  M01S01210.sxdest  +++|          BEGIN
01290  M01S01211.sxdest  +++|          DSERCAT(HLRQADR,STAT);
01291  M01S01212.sxdest  +++|          GOTO DSERR;
01292  M01S01213.sxdest  +++|          END
01293  M01S01214.sxdest  +++|
01294  M01S01215.sxdest  +++|        P<FCT> = QADDR + FCTQHL;
01295  M01S01216.sxdest  +++|        HLR$FCTQ[0] = QADDR;
01296  M01S01217.sxdest  +++|        END
01297  M01S01218.sxdest  +++|
01298  M01S01219.sxdest  +++|                                               CONTROL EJECT;
01299  M01S01220.sxdest  +++|
01300  M01S01221.sxdest  +++|#
01301  M01S01222.sxdest  +++|*     STEP 7.7 - SET CORRECT VALUE IN *CC* FIELD.
01302  M01S01223.sxdest  +++|#
01303  M01S01224.sxdest  +++|
01304  M01S01225.sxdest  +++|      IF HLR$FVOL[0]
01305  M01S01226.sxdest  +++|      THEN
01306  M01S01227.sxdest  +++|        BEGIN  # FIRST OR ONLY VOLUME #
01307  M01S01228.sxdest  +++|        IF ATEOI
01308  M01S01229.sxdest  +++|        THEN
01309  M01S01230.sxdest  +++|          BEGIN
01310  M01S01231.sxdest  +++|          CC = CHAINCON"ONLY";
01311  M01S01232.sxdest  +++|          END
01312  M01S01233.sxdest  +++|
01313  M01S01234.sxdest  +++|        ELSE
01314  M01S01235.sxdest  +++|          BEGIN
01315  M01S01236.sxdest  +++|          CC = CHAINCON"FIRST";
01316  M01S01237.sxdest  +++|          END
01317  M01S01238.sxdest  +++|
01318  M01S01239.sxdest  +++|        END  # FIRST OR ONLY VOLUME #
01319  M01S01240.sxdest  +++|
01320  M01S01241.sxdest  +++|      ELSE
01321  M01S01242.sxdest  +++|        BEGIN  # MIDDLE OR LAST #
01322  M01S01243.sxdest  +++|        IF ATEOI
01323  M01S01244.sxdest  +++|        THEN
01324  M01S01245.sxdest  +++|          BEGIN
01325  M01S01246.sxdest  +++|          CC = CHAINCON"LAST";
01326  M01S01247.sxdest  +++|          END
01327  M01S01248.sxdest  +++|
01328  M01S01249.sxdest  +++|        ELSE
01329  M01S01250.sxdest  +++|          BEGIN
01330  M01S01251.sxdest  +++|          CC = CHAINCON"MIDDLE";
01331  M01S01252.sxdest  +++|          END
01332  M01S01253.sxdest  +++|
01333  M01S01254.sxdest  +++|        END  # MIDDLE OR LAST #
01334  M01S01255.sxdest  +++|
01335  M01S01256.sxdest  +++|      SETFCTX(HLR$VOLAU[0]);         # SET *FWD* AND *FPS* VALUES #
01336  M01S01257.sxdest  +++|
01337  M01S01258.sxdest  +++|      FCT$CC(FWD,FPS) = CC;
01338  M01S01259.sxdest  +++|
01339  M01S01260.sxdest  +++|#
01340  M01S01261.sxdest  +++|*     STEP 7 - END.
01341  M01S01262.sxdest  +++|#
01342  M01S01263.sxdest  +++|
01343  M01S01264.sxdest  +++|                                               CONTROL EJECT;
01344  M01S01265.sxdest  +++|
01345  M01S01266.sxdest  +++|#
01346  M01S01267.sxdest  +++|*     STEP 8 - COMPLETE DESTAGING OF THIS FILE.
01347  M01S01268.sxdest  +++|#
01348  M01S01269.sxdest  +++|
01349  M01S01270.sxdest  +++|      HLR$FVOL[0] = FALSE;
01350  M01S01271.sxdest  +++|
01351  M01S01272.sxdest  +++|      IF NOT ATEOI
01352  M01S01273.sxdest  +++|      THEN
01353  M01S01274.sxdest  +++|        BEGIN
01354  M01S01275.sxdest  +++|        GOTO NEXTVOL;
01355  M01S01276.sxdest  +++|        END
01356  M01S01277.sxdest  +++|
01357  M01S01278.sxdest  +++|#
01358  M01S01279.sxdest  +++|*     STEP 8.2 - WRITE *FCT* ENTRY TO DISK.
01359  M01S01280.sxdest  +++|#
01360  M01S01281.sxdest  +++|
01361  M01S01282.sxdest  +++|      CPUTFCT(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],  ##
01362  M01S01283.sxdest  +++|        HLR$FCTX[0],P<FCT>,HLRQADR,STAT);
01363  M01S01284.sxdest  +++|
01364  M01S01285.sxdest  +++|      IF STAT EQ 0
01365  M01S01286.sxdest  +++|      THEN
01366  M01S01287.sxdest  +++|        BEGIN
01367  M01S01288.sxdest  +++|        CFLUSH(TDAMFAM[0],TDAMSBF[0],HLRQADR,STAT);
01368  M01S01289.sxdest  +++|        END
01369  M01S01290.sxdest  +++|
01370  M01S01291.sxdest  +++|      IF STAT NQ 0
01371  M01S01292.sxdest  +++|      THEN
01372  M01S01293.sxdest  +++|        BEGIN
01373  M01S01294.sxdest  +++|        DSERCAT(HLRQADR,STAT);
01374  M01S01295.sxdest  +++|        GOTO DSERR;
01375  M01S01296.sxdest  +++|        END
01376  M01S01297.sxdest  +++|
01377  M01S01298.sxdest  +++|#
01378  M01S01299.sxdest  +++|*     STEP 8.4 - ISSUE *SETASA* TO COMPLETE DESTAGE.
01379  M01S01300.sxdest  +++|#
01380  M01S01301.sxdest  +++|
01381  M01S01302.sxdest  +++|DS8A:                                # RETRY *SETASA* CALL #
01382  M01S01303.sxdest  +++|
01383  M01S01304.sxdest  +++|      HLR$HPS[0] = DSLABEL"DS8A";    # IF WAIT CONDITION #
01384  M01S01305.sxdest  +++|      NAMEC[0] = HLR$FLNM[0];
01385  M01S01306.sxdest  +++|      NAMEC[1] = TDAMFAM[0];
01386  M01S01307.sxdest  +++|
01387  M01S01308.sxdest  +++|
01388  M01S01309.sxdest  +++|      TDAMASA[0] = HLR$NEWASA[0];
01389  M01S01310.sxdest  +++|      TDAMAT[0] = ATAS;
01390  M01S01311.sxdest  +++|
01391  M01S01312.sxdest  +++|      SETASA(NAME[0],STAT,6,TDAMUI[0],NAME[1],TDAMPFID[0],  ##
01392  M01S01313.sxdest  +++|        TDAMASI[0],TDAMCDT[0],LOC(PFMRET));
01393  M01S01314.sxdest  +++|
01394  M01S01315.sxdest  +++|      IF STAT NQ 0
01395  M01S01316.sxdest  +++|      THEN
01396  M01S01317.sxdest  +++|        BEGIN
01397  M01S01318.sxdest  +++|        DSERPFM(HLRQADR,STAT);
01398  M01S01319.sxdest  +++|        IF HLR$RESP[0] NQ ERRST"NOERR"
01399  M01S01320.sxdest  +++|        THEN
01400  M01S01321.sxdest  +++|          BEGIN
01401  M01S01322.sxdest  +++|          GOTO DSERR;
01402  M01S01323.sxdest  +++|          END
01403  M01S01324.sxdest  +++|
01404  M01S00010.mse0009 +++|        HLR$NEWASA[0] = 0;   # CLEAR FOR NO FURTHER *FCT* RELEASE #
01405  M01S01325.sxdest  +++|        END
01406  M01S01326.sxdest  +++|
01407  M01S01327.sxdest  +++|#
01408  M01S01328.sxdest  +++|*     STEP 8 - END.
01409  M01S01329.sxdest  +++|#
01410  M01S01330.sxdest  +++|
01411  M01S01331.sxdest  +++|                                               CONTROL EJECT;
01412  M01S01332.sxdest  +++|
01413  M01S01333.sxdest  +++|#
01414  M01S01334.sxdest  +++|*     STEP 9 - RELEASE DISK SPACE, IF REQUESTED.
01415  M01S01335.sxdest  +++|#
01416  M01S01336.sxdest  +++|
01417  M01S01337.sxdest  +++|      IF TDAMFC[0] EQ TDAMFCODE"DESTRLS"
01418  M01S01338.sxdest  +++|      THEN
01419  M01S01339.sxdest  +++|        BEGIN  # DO RELEASE PROCESSING #
01420  M01S01340.sxdest  +++|DS9A:                                # RETRY *DROP(I)DS* CALL #
01421  M01S01341.sxdest  +++|        HLR$HPS[0] = DSLABEL"DS9A";  # IF NEED TO RETRY *PFM* CALL #
01422  M01S01342.sxdest  +++|        NAMEC[0] = HLR$FLNM[0];
01423  M01S01343.sxdest  +++|        NAMEC[1] = TDAMFAM[0];
01424  M01S01344.sxdest  +++|        IF TDAMIA[0]
01425  M01S01345.sxdest  +++|        THEN                         # INDIRECT ACCESS FILE #
01426  M01S01346.sxdest  +++|          BEGIN
01427  M01S01347.sxdest  +++|          DROPIDS(NAME[0],STAT,6,TDAMUI[0],NAME[1],  ##
01428  M01S01348.sxdest  +++|            TDAMPFID[0],TDAMASI[0],TDAMCDT[0],LOC(PFMRET));
01429  M01S01349.sxdest  +++|          END
01430  M01S01350.sxdest  +++|
01431  M01S01351.sxdest  +++|        ELSE                         # DIRECT ACCESS FILE #
01432  M01S01352.sxdest  +++|          BEGIN
01433  M01S01353.sxdest  +++|          DROPDS(NAME[0],STAT,6,TDAMUI[0],NAME[1],  ##
01434  M01S01354.sxdest  +++|            TDAMPFID[0],TDAMASI[0],TDAMCDT[0],LOC(PFMRET));
01435  M01S01355.sxdest  +++|          END
01436  M01S01356.sxdest  +++|
01437  M01S01357.sxdest  +++|        IF STAT NQ 0
01438  M01S01358.sxdest  +++|        THEN
01439  M01S01359.sxdest  +++|          BEGIN
01440  M01S01360.sxdest  +++|          DSERPFM(HLRQADR,STAT);
01441  M01S01361.sxdest  +++|          IF HLR$RESP[0] NQ ERRST"NOERR"
01442  M01S01362.sxdest  +++|          THEN
01443  M01S01363.sxdest  +++|            BEGIN
Line S01364 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01444  M02S01364.mse0009 ---|            GOTO DSERR;
01445  M01S00011.mse0009 +++|#
01446  M01S00012.mse0009 +++|       THE *ASA* IS SET, THE *FCT* SPACE MUST NOT BE RELEASED.
01447  M01S00013.mse0009 +++|#
01448  M01S00014.mse0009 +++|
01449  M01S00015.mse0009 +++|
01450  M01S00016.mse0009 +++|           IF HLR$RESP[0] EQ ERRST"WAIT"
01451  M01S00017.mse0009 +++|           THEN
01452  M01S00018.mse0009 +++|             BEGIN
01453  M01S00019.mse0009 +++|             HLR$RESP[0] = ERRST"NOERR";
01454  M01S00020.mse0009 +++|             DELAY(PFM$INTV,HLRQADR,HLRQIND);
01455  M01S00021.mse0009 +++|             RETURN;
01456  M01S00022.mse0009 +++|             END
01457  M01S00023.mse0009 +++|
01458  M01S00024.mse0009 +++|           ELSE      # REPORT ERROR, BUT DON-T RELEASE *FCT* SPACE. #
01459  M01S00025.mse0009 +++|             BEGIN
01460  M01S00026.mse0009 +++|#
01461  M01S00027.mse0009 +++|
01462  M01S00028.mse0009 +++|       SET *ASA* WORKED - LEAVE *FCT* IN TACK.
01463  M01S00029.mse0009 +++|#
01464  M01S00030.mse0009 +++|             HLR$RESP[0] = ERRST"ABANDON";
01465  M01S00031.mse0009 +++|             GOTO STARTSTEP11;
01466  M01S00032.mse0009 +++|             END
01467  M01S00033.mse0009 +++|
01468  M01S01365.sxdest  +++|            END
01469  M01S01366.sxdest  +++|
01470  M01S01367.sxdest  +++|          END
01471  M01S01368.sxdest  +++|
01472  M01S01369.sxdest  +++|        END  # DO RELEASE PROCESSING #
01473  M01S01370.sxdest  +++|
01474  M01S01371.sxdest  +++|       HLR$TDAMFL[0] = HLR$PFC$LN[0];        # SET DAYFILE MESSAGE #
01475  M01S01372.sxdest  +++|#
01476  M01S01373.sxdest  +++|*     STEP 9 - END.
01477  M01S01374.sxdest  +++|#
01478  M01S01375.sxdest  +++|
01479  M01S01376.sxdest  +++|                                               CONTROL EJECT;
01480  M01S01377.sxdest  +++|
01481  M01S01378.sxdest  +++|#
01482  M01S01379.sxdest  +++|*     STEP 10 - HANDLE ERRORS SPECIFIC TO THIS FILE.
01483  M01S01380.sxdest  +++|#
01484  M01S01381.sxdest  +++|
01485  M01S01382.sxdest  +++|DSERR:                               # ERROR CLEANUP #
01486  M01S01383.sxdest  +++|
01487  M01S01384.sxdest  +++|      STAT = HLR$RESP[0];
01488  M01S01385.sxdest  +++|      IF STAT NQ ERRST"NOERR"
01489  M01S01386.sxdest  +++|      THEN
01490  M01S01387.sxdest  +++|        BEGIN  # STEP 10 #
01491  M01S01388.sxdest  +++|        IF STAT EQ ERRST"WAIT"
01492  M01S01389.sxdest  +++|        THEN
01493  M01S01390.sxdest  +++|          BEGIN
01494  M01S01391.sxdest  +++|          HLR$RESP[0] = ERRST"NOERR";
01495  M01S00014.sxdest1 +++|          DELAY(PFM$INTV,HLRQADR,HLRQIND);
01496  M01S01392.sxdest  +++|          RETURN;
01497  M01S01393.sxdest  +++|          END
01498  M01S01394.sxdest  +++|
01499  M01S01395.sxdest  +++|        IF HLR$FCTQ[0] NQ 0
01500  M01S01396.sxdest  +++|        THEN                         # RELEASE ALLOCATED AU, IF ANY #
01501  M01S01397.sxdest  +++|          BEGIN
01502  M01S01398.sxdest  +++|
01503  M01S01399.sxdest  +++|          P<FCT> = HLR$FCTQ[0] + FCTQHL;
Line S01400 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01504  M02S01400.mse0009 ---|          IF HLR$CSNDP[0] EQ ""
Line S01401 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01505  M02S01401.mse0009 ---|          THEN
Line S01402 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01506  M02S01402.mse0009 ---|            BEGIN
01507  M01S00034.mse0009 +++|
01508  M01S00035.mse0009 +++|#
01509  M01S00036.mse0009 +++|        RELEASE SPACE ON CURRENT CARTRIDGE.
01510  M01S00037.mse0009 +++|#
01511  M01S00038.mse0009 +++|
01512  M01S00039.mse0009 +++|
01513  M01S01403.sxdest  +++|            START = HLR$1STVOL[0];
01514  M01S01404.sxdest  +++|            REPEAT WHILE START NQ 0
01515  M01S01405.sxdest  +++|            DO
01516  M01S01406.sxdest  +++|              BEGIN
01517  M01S01407.sxdest  +++|              SETFCTX(START);
01518  M01S01408.sxdest  +++|              T1 = FCT$LINK(FWD,FPS);
01519  M01S01409.sxdest  +++|              T2 = FCT$LEN(FWD,FPS) + 1;
01520  M01S01410.sxdest  +++|
01521  M01S01411.sxdest  +++|              RLSVOL(HLRQADR,HLR$FCTQ,START,T2);
01522  M01S01412.sxdest  +++|              P<FCT> = HLR$FCTQ[0] + FCTQHL;
01523  M01S01413.sxdest  +++|              START = T1;
01524  M01S01414.sxdest  +++|              END
Line S01415 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01525  M02S01415.mse0009 ---|
Line S01416 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01526  M02S01416.mse0009 ---|            END
01527  M01S01417.sxdest  +++|
01528  M01S01418.sxdest  +++|          P<FCT> = HLR$FCTQ[0] + FCTQHL;
01529  M01S01419.sxdest  +++|          RLSVOL(HLRQADR,HLR$FCTQ[0],HLR$VOLAU[0],HLR$VOLLN[0]);
01530  M01S01420.sxdest  +++|
Line S01421 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01531  M02S01421.mse0009 ---|          IF HLR$ERRC[0] EQ ERRST"SPECIAL"
Line S01422 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01532  M02S01422.mse0009 ---|          THEN
Line S01423 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01533  M02S01423.mse0009 ---|            BEGIN     # NO CARTRIDGE LOADED #
Line S01424 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01534  M02S01424.mse0009 ---|            HLR$AUSF[0] = 0;
Line S01425 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01535  M02S01425.mse0009 ---|            HLR$AULF[0] = 0;
Line S01426 Modification History
M01 (Added by) sxdest
M02 (Updated by) mse0009
Seq #  *Modification Id* Act 
----------------------------+
01536  M02S01426.mse0009 ---|            END    # CARTRIGE NO LOAD #
01537  M01S01427.sxdest  +++|          END
01538  M01S01428.sxdest  +++|
01539  M01S00040.mse0009 +++|
01540  M01S00041.mse0009 +++|#
01541  M01S00042.mse0009 +++|        RELEASE PREVIOUS CARTRIDGE SPACE ON CURRENT FILE.
01542  M01S00043.mse0009 +++|#
01543  M01S00044.mse0009 +++|
01544  M01S00045.mse0009 +++|          P<ASA> = LOC(HLR$NEWASA[0]);
01545  M01S00046.mse0009 +++|
01546  M01S00047.mse0009 +++|#
01547  M01S00048.mse0009 +++|          RECOVER FROM *ASA* IN *HLRQ*.
01548  M01S00049.mse0009 +++|#
01549  M01S00050.mse0009 +++|
01550  M01S00051.mse0009 +++|          I = 0;       # CLEAR FOR ERROR CHECK #
01551  M01S00052.mse0009 +++|          IF ASAFCT[0] NQ HLR$FCTX[0]      ##
01552  M01S00053.mse0009 +++|            AND ASAFCT[0] NQ 0
01553  M01S00054.mse0009 +++|          THEN
01554  M01S00055.mse0009 +++|            BEGIN      # RELEASE THE FIRST SET OF CARTRIDGE SPACE #
01555  M01S00056.mse0009 +++|            RLS$FCT(HLR$FCTQ[0],0,STAT);
01556  M01S00057.mse0009 +++|            TEMP = ASAFCT[0];
01557  M01S00058.mse0009 +++|            START = ASAAU[0];
01558  M01S00059.mse0009 +++|            USED = ASAGP[0];
01559  M01S00060.mse0009 +++|
01560  M01S00061.mse0009 +++|            IF STAT NQ CMASTAT"NOERR"
01561  M01S00062.mse0009 +++|            THEN
01562  M01S00063.mse0009 +++|              BEGIN
01563  M01S00064.mse0009 +++|              DSERCAT(HLRQADR,STAT);
01564  M01S00065.mse0009 +++|              GOTO DSERREND;
01565  M01S00066.mse0009 +++|              END
01566  M01S00067.mse0009 +++|
01567  M01S00068.mse0009 +++|            HLR$FCTQ[0] = 0;
01568  M01S00069.mse0009 +++|
01569  M01S00070.mse0009 +++|RLSTART:
01570  M01S00071.mse0009 +++|
01571  M01S00072.mse0009 +++|            IF TEMP NQ HLR$FCTX[0]       ##
01572  M01S00073.mse0009 +++|              AND TEMP NQ 0
01573  M01S00074.mse0009 +++|            THEN
01574  M01S00075.mse0009 +++|              BEGIN    # START NEW FCT LOCATION #
01575  M01S00076.mse0009 +++|              ACQ$FCT(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],TEMP,     ##
01576  M01S00077.mse0009 +++|                QADDR,0,STAT);
01577  M01S00078.mse0009 +++|
01578  M01S00079.mse0009 +++|              IF STAT NQ CMASTAT"NOERR"
01579  M01S00080.mse0009 +++|              THEN
01580  M01S00081.mse0009 +++|                BEGIN
01581  M01S00082.mse0009 +++|                DSERCAT(HLRQADR,STAT);
01582  M01S00083.mse0009 +++|                I = 1;
01583  M01S00084.mse0009 +++|                GOTO DSERREND;
01584  M01S00085.mse0009 +++|                END
01585  M01S00086.mse0009 +++|
01586  M01S00087.mse0009 +++|            P<FCT> = QADDR + FCTQHL;
01587  M01S00088.mse0009 +++|            UASTPRM(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],QADDR,STAT);
01588  M01S00089.mse0009 +++|
01589  M01S00090.mse0009 +++|            REPEAT WHILE START NQ 0
01590  M01S00091.mse0009 +++|            DO
01591  M01S00092.mse0009 +++|              BEGIN
01592  M01S00093.mse0009 +++|              TEMP1 = 0;
01593  M01S00094.mse0009 +++|              SETFCTX(START);
01594  M01S00095.mse0009 +++|              T1 = FCT$LINK(FWD,FPS);
01595  M01S00096.mse0009 +++|              T2 = FCT$LEN(FWD,FPS) + 1;
01596  M01S00097.mse0009 +++|
01597  M01S00098.mse0009 +++|#
01598  M01S00099.mse0009 +++|        CHECK FOR OFF-CARTRIDGE LINK
01599  M01S00100.mse0009 +++|#
01600  M01S00101.mse0009 +++|
01601  M01S00102.mse0009 +++|              IF FCT$CLKOCL(FWD,FPS) NQ 0
01602  M01S00103.mse0009 +++|              THEN
01603  M01S00104.mse0009 +++|                BEGIN  # OFF-CARTRIDGE LINK #
01604  M01S00105.mse0009 +++|                IF FCT$CLKOCL(FWD,FPS) EQ 1
01605  M01S00106.mse0009 +++|                THEN
01606  M01S00107.mse0009 +++|                  BEGIN
01607  M01S00108.mse0009 +++|                  B<0,1>FCT$OCLF[0] = 0;
01608  M01S00109.mse0009 +++|                  TEMP1 = USED * 16 + FCT$OCL[0];
01609  M01S00110.mse0009 +++|                  END
01610  M01S00111.mse0009 +++|
01611  M01S00112.mse0009 +++|                ELSE
01612  M01S00113.mse0009 +++|                  BEGIN
01613  M01S00114.mse0009 +++|                  IF FCT$CLKOCL(FWD,FPS) EQ 2
01614  M01S00115.mse0009 +++|                  THEN
01615  M01S00116.mse0009 +++|                    BEGIN
01616  M01S00117.mse0009 +++|                    B<1,1>FCT$OCLF[0] = 0;
01617  M01S00118.mse0009 +++|                    TEMP1 = USED * 16 + FCT$OCL1[0];
01618  M01S00119.mse0009 +++|                    END
01619  M01S00120.mse0009 +++|
01620  M01S00121.mse0009 +++|                  ELSE
01621  M01S00122.mse0009 +++|                    BEGIN
01622  M01S00123.mse0009 +++|                    B<2,1>FCT$OCLF[0] = 0;
01623  M01S00124.mse0009 +++|                    TEMP1 = USED * 16 + FCT$OCL2[0];
01624  M01S00125.mse0009 +++|                    END
01625  M01S00126.mse0009 +++|                  END
01626  M01S00127.mse0009 +++|
01627  M01S00128.mse0009 +++|                  IF TEMP1 GR (PRM$ENTRC[HLR$SM[0]] + 15)   ##
01628  M01S00129.mse0009 +++|                    OR TEMP1 LS 16
01629  M01S00130.mse0009 +++|                  THEN
01630  M01S00131.mse0009 +++|                    BEGIN
01631  M01S00132.mse0009 +++|                    I = 1;
01632  M01S00133.mse0009 +++|                    GOTO DSERREND;
01633  M01S00134.mse0009 +++|                    END
01634  M01S00135.mse0009 +++|
01635  M01S00136.mse0009 +++|                END
01636  M01S00137.mse0009 +++|
01637  M01S00138.mse0009 +++|                RLSVOL(HLRQADR,QADDR,START,T2);
01638  M01S00139.mse0009 +++|                P<FCT> = QADDR + FCTQHL;
01639  M01S00140.mse0009 +++|                START = T1;
01640  M01S00141.mse0009 +++|
01641  M01S00142.mse0009 +++|                IF TEMP1 NQ 0
01642  M01S00143.mse0009 +++|                THEN
01643  M01S00144.mse0009 +++|                  BEGIN
01644  M01S00145.mse0009 +++|                  TEMP = TEMP1;
01645  M01S00146.mse0009 +++|                  P<FCT> = QADDR + FCTQHL;
01646  M01S00147.mse0009 +++|                  UASTPRM(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],QADDR,STAT);
01647  M01S00148.mse0009 +++|                  RLS$FCT(QADDR,0,STAT);
01648  M01S00149.mse0009 +++|                    IF STAT NQ CMASTAT"NOERR"
01649  M01S00150.mse0009 +++|                    THEN
01650  M01S00151.mse0009 +++|                      BEGIN
01651  M01S00152.mse0009 +++|                      DSERCAT(HLRQADR,STAT);
01652  M01S00153.mse0009 +++|                      I = 1;
01653  M01S00154.mse0009 +++|                      GOTO DSERREND;
01654  M01S00155.mse0009 +++|                      END
01655  M01S00156.mse0009 +++|                  GOTO RLSTART;
01656  M01S00157.mse0009 +++|                  END
01657  M01S00158.mse0009 +++|
01658  M01S00159.mse0009 +++|                END   # END OF DO LOOP #
01659  M01S00160.mse0009 +++|
01660  M01S00161.mse0009 +++|                P<FCT> = QADDR + FCTQHL;
01661  M01S00162.mse0009 +++|                UASTPRM(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],QADDR,STAT);
01662  M01S00163.mse0009 +++|                RLS$FCT(QADDR,0,STAT);
01663  M01S00164.mse0009 +++|                  IF STAT NQ CMASTAT"NOERR"
01664  M01S00165.mse0009 +++|                  THEN
01665  M01S00166.mse0009 +++|                    BEGIN
01666  M01S00167.mse0009 +++|                    DSERCAT(HLRQADR,STAT);
01667  M01S00168.mse0009 +++|                    I = 1;
01668  M01S00169.mse0009 +++|                    GOTO DSERREND;
01669  M01S00170.mse0009 +++|                    END
01670  M01S00171.mse0009 +++|               END     # END OF NEW *FCT* LOACTION FIND #
01671  M01S00172.mse0009 +++|
01672  M01S00173.mse0009 +++|#
01673  M01S00174.mse0009 +++|        RESET THE ORGINAL CURRENT CARTRIDGE FCT.
01674  M01S00175.mse0009 +++|#
01675  M01S00176.mse0009 +++|
01676  M01S00177.mse0009 +++|
01677  M01S00178.mse0009 +++|DSERREND:
01678  M01S00179.mse0009 +++|
01679  M01S00180.mse0009 +++|                IF I NQ 0    # CHECK FOR AN ERROR IN ERROR CLEAN UP #
01680  M01S00181.mse0009 +++|                THEN
01681  M01S00182.mse0009 +++|                  BEGIN
01682  M01S00183.mse0009 +++|                  MSG(MSGMB,UDFL1);
01683  M01S00184.mse0009 +++|                  IF HLR$FCTQ[0] EQ 0   # IF NO CARTRIDGE #
01684  M01S00185.mse0009 +++|                  THEN
01685  M01S00186.mse0009 +++|                    BEGIN
01686  M01S00187.mse0009 +++|                    GOTO CKSPECIAL;
01687  M01S00188.mse0009 +++|                    END
01688  M01S00189.mse0009 +++|                  END
01689  M01S00190.mse0009 +++|
01690  M01S00191.mse0009 +++|                HLR$NEWASA[0] = 0;      # CLEAR FOR FURTHER RECOVERY #
01691  M01S00192.mse0009 +++|
01692  M01S00193.mse0009 +++|                IF HLR$FCTX[0] EQ 0
01693  M01S00194.mse0009 +++|                THEN
01694  M01S00195.mse0009 +++|                  BEGIN
01695  M01S00196.mse0009 +++|                  GOTO CKSPECIAL;
01696  M01S00197.mse0009 +++|                  END
01697  M01S00198.mse0009 +++|
01698  M01S00199.mse0009 +++|                ACQ$FCT(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],HLR$FCTX[0], ##
01699  M01S00200.mse0009 +++|                    QADDR,0,STAT);
01700  M01S00201.mse0009 +++|
01701  M01S00202.mse0009 +++|                IF STAT NQ CMASTAT"NOERR"
01702  M01S00203.mse0009 +++|                THEN
01703  M01S00204.mse0009 +++|                  BEGIN
01704  M01S00205.mse0009 +++|                  DSERCAT(HLRQADR,STAT);
01705  M01S00206.mse0009 +++|                  HLR$AUSF[0] = 0;
01706  M01S00207.mse0009 +++|                  HLR$AULF[0] = 0;
01707  M01S00208.mse0009 +++|                  GOTO STARTSTEP11;
01708  M01S00209.mse0009 +++|                  END
01709  M01S00210.mse0009 +++|
01710  M01S00211.mse0009 +++|                P<FCT> = QADDR + FCTQHL;
01711  M01S00212.mse0009 +++|                UASTPRM(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],QADDR,STAT);
01712  M01S00213.mse0009 +++|                HLR$FCTQ[0] = QADDR;
01713  M01S00214.mse0009 +++|           END
01714  M01S00215.mse0009 +++|
01715  M01S00216.mse0009 +++|
01716  M01S00217.mse0009 +++|CKSPECIAL:
01717  M01S00218.mse0009 +++|           IF HLR$ERRC[0] EQ ERRST"SPECIAL"
01718  M01S00219.mse0009 +++|           THEN
01719  M01S00220.mse0009 +++|             BEGIN      # NO CARTRIDGE LOADED #
01720  M01S00221.mse0009 +++|             HLR$AUSF[0] = 0;
01721  M01S00222.mse0009 +++|             HLR$AULF[0] = 0;
01722  M01S00223.mse0009 +++|             END        # CARTRIDGE NO LOAD #
01723  M01S00224.mse0009 +++|
01724  M01S01429.sxdest  +++|        END  # STEP 10 #
01725  M01S01430.sxdest  +++|
01726  M01S01431.sxdest  +++|                                               CONTROL EJECT;
01727  M01S01432.sxdest  +++|
01728  M01S01433.sxdest  +++|#
01729  M01S01434.sxdest  +++|*     STEP 11 - COMPLETE THIS FILE AND PROCEED WITH NEXT ONE.
01730  M01S01435.sxdest  +++|*               - RETURN FILE USED FOR DESTAGING.
01731  M01S01436.sxdest  +++|*               - CALL *DSNTDAM* TO OBTAIN NEXT FILE TO DESTAGE.
01732  M01S01437.sxdest  +++|*               - UPDATE *AST* TO REFLECT AVAILABLE AU, IF APPROPRIATE.
01733  M01S01438.sxdest  +++|*               - SWITCH TO STAGING, IF APPROPRIATE.
01734  M01S01439.sxdest  +++|*               - UNLOAD CARTRIDGE, IF NO MORE FILES FOR IT.
01735  M01S01440.sxdest  +++|*               - UPDATE *FCT* TO REFLECT USAGE COUNTS.
01736  M01S01441.sxdest  +++|*               - RELEASE INTERLOCKS ON SUBFAMILY CATALOGS.
01737  M01S01442.sxdest  +++|#
01738  M01S01443.sxdest  +++|
01739  M01S00225.mse0009 +++|STARTSTEP11:
01740  M01S01444.sxdest  +++|      ZSETFET(LOC(SCR$FET[0]),HLR$FLNM[0],0,0,SFETL);  # RETURN FILE #
01741  M01S01445.sxdest  +++|      RETERN(SCR$FET[0],RCL);
01742  M01S01446.sxdest  +++|
01743  M01S01447.sxdest  +++|      HLR$FFILE[0] = FALSE;
01744  M01S01448.sxdest  +++|
01745  M01S01449.sxdest  +++|      DSNTDAM(HLRQADR);
01746  M01S01450.sxdest  +++|
01747  M01S01451.sxdest  +++|#
01748  M01S01452.sxdest  +++|*     UPDATE THE *AST* IF DONE DESTAGING TO THIS CARTRIDGE.
01749  M01S01453.sxdest  +++|#
01750  M01S01454.sxdest  +++|
Line S01455 Modification History
M01 (Added by) sxdest
M02 (Updated by) sxdest2
Seq #  *Modification Id* Act 
----------------------------+
01751  M02S01455.sxdest2 ---|      FLAG = (HLR$UNLD[0]) OR (TDAMFC[0] EQ TDAMFCODE"NOREQ");
01752  M01S00046.sxdest2 +++|      FLAG = (HLR$UNLD[0])
01753  M01S00047.sxdest2 +++|        OR (TDAMFC[0] EQ TDAMFCODE"NOREQ")
01754  M01S00048.sxdest2 +++|        OR (TDAMFC[0] EQ TDAMFCODE"STAGE");
01755  M01S01456.sxdest  +++|
01756  M01S01457.sxdest  +++|      IF (HLR$FCTQ[0] NQ 0) AND      ##
01757  M01S01458.sxdest  +++|        (FLAG OR (HLR$HPN[0] EQ HLRPN"STAGE" ) )
01758  M01S01459.sxdest  +++|      THEN                           # UPDATE THE *AST* #
01759  M01S01460.sxdest  +++|        BEGIN
01760  M01S01461.sxdest  +++|        P<FCTQ> = HLR$FCTQ[0];
01761  M01S01462.sxdest  +++|        UASTPRM(FCTQFAMILY[0],FCTQSUBF[0],HLR$SM[0],  ##
01762  M01S01463.sxdest  +++|          HLR$FCTQ[0],STAT);
01763  M01S01464.sxdest  +++|
01764  M01S01465.sxdest  +++|        IF STAT NQ CMASTAT"NOERR"
01765  M01S01466.sxdest  +++|        THEN
01766  M01S01467.sxdest  +++|          BEGIN
01767  M01S01468.sxdest  +++|          DSERCAT(HLRQADR,STAT);
01768  M01S01469.sxdest  +++|          END
01769  M01S01470.sxdest  +++|
01770  M01S01471.sxdest  +++|        END
01771  M01S01472.sxdest  +++|
01772  M01S01473.sxdest  +++|#
01773  M01S01474.sxdest  +++|*     IF THIS *HLRQ* IS TO BE USED TO DO STAGING FROM THIS CARTRIDGE,
01774  M01S01475.sxdest  +++|*     TRANSFER CONTROL TO *STAGER*.
01775  M01S01476.sxdest  +++|#
01776  M01S01477.sxdest  +++|
01777  M01S01478.sxdest  +++|      IF HLR$HPN[0] EQ HLRPN"STAGE"
01778  M01S01479.sxdest  +++|      THEN
01779  M01S01480.sxdest  +++|        BEGIN
01780  M01S01481.sxdest  +++|        IF DSC$LKMSK NQ 0
01781  M01S01482.sxdest  +++|        THEN
01782  M01S01483.sxdest  +++|          BEGIN
01783  M01S01484.sxdest  +++|          CRELSLK(DSC$FAM,DSC$LKMSK,0,STAT);
01784  M01S01485.sxdest  +++|          DSC$LKMSK = 0;
01785  M01S01486.sxdest  +++|          END
01786  M01S01487.sxdest  +++|
01787  M01S01488.sxdest  +++|        RETURN;
01788  M01S01489.sxdest  +++|        END
01789  M01S01490.sxdest  +++|
01790  M01S01491.sxdest  +++|#
01791  M01S01492.sxdest  +++|*     EXIT IF NEXT FILE IS TO GO TO THIS CARTRIDGE.
01792  M01S01493.sxdest  +++|#
01793  M01S01494.sxdest  +++|
01794  M01S01495.sxdest  +++|      IF NOT FLAG
01795  M01S01496.sxdest  +++|      THEN                           # DESTAGE NEXT FILE TO SAME
01796  M01S01497.sxdest  +++|                                       CARTRIDGE #
01797  M01S01498.sxdest  +++|        BEGIN
01798  M01S01499.sxdest  +++|        ADD$LNK(HLRQADR,LCHN"HL$READY",0);
01799  M01S01500.sxdest  +++|        RETURN;
01800  M01S01501.sxdest  +++|        END
01801  M01S01502.sxdest  +++|      IF HLR$FCTQ[0] NQ 0
01802  M01S01503.sxdest  +++|      THEN                           # RELEASE *FCT* ENTRY #
01803  M01S01504.sxdest  +++|        BEGIN
01804  M01S01505.sxdest  +++|        P<FCTQ> = HLR$FCTQ[0];
01805  M01S01506.sxdest  +++|
01806  M01S01507.sxdest  +++|        UPUSAGE(HLRQADR,HLR$FCTQ[0]);
01807  M01S01508.sxdest  +++|
01808  M01S01509.sxdest  +++|
01809  M01S01510.sxdest  +++|        RLS$FCT(HLR$FCTQ[0],0,STAT);
01810  M01S01511.sxdest  +++|        IF STAT NQ CMASTAT"NOERR"
01811  M01S01512.sxdest  +++|        THEN
01812  M01S01513.sxdest  +++|          BEGIN
01813  M01S01514.sxdest  +++|          DSERCAT(HLRQADR,STAT);
01814  M01S01515.sxdest  +++|          END
01815  M01S01516.sxdest  +++|
01816  M01S01517.sxdest  +++|        HLR$FCTQ[0] = 0;
01817  M01S00002.mse2    +++|        HLR$FCTX[0] = 0;
01818  M01S01518.sxdest  +++|
01819  M01S01519.sxdest  +++|        END
01820  M01S01520.sxdest  +++|
01821  M01S01521.sxdest  +++|
01822  M01S01522.sxdest  +++|#
01823  M01S01523.sxdest  +++|*     UNLOAD CARTRIDGE IF ONE WAS SUCCESSFULLY LOADED.
01824  M01S01524.sxdest  +++|#
01825  M01S01525.sxdest  +++|
01826  M01S01526.sxdest  +++|
Line S01527 Modification History
M01 (Added by) sxdest
M02 (Updated by) sxdest2
Seq #  *Modification Id* Act 
----------------------------+
01827  M02S01527.sxdest2 ---|      IF HLR$LRQADR[0] NQ 0
Line S01528 Modification History
M01 (Added by) sxdest
M02 (Updated by) sxdest2
Seq #  *Modification Id* Act 
----------------------------+
01828  M02S01528.sxdest2 ---|      THEN
Line S01529 Modification History
M01 (Added by) sxdest
M02 (Updated by) sxdest2
Seq #  *Modification Id* Act 
----------------------------+
01829  M02S01529.sxdest2 ---|        BEGIN     # UNLOAD OLD CARTRIDGE #
01830  M01S01530.sxdest  +++|        IF HLR$HLRQW[0] NQ 0
01831  M01S01531.sxdest  +++|        THEN
01832  M01S01532.sxdest  +++|          BEGIN      # SWITCH CONTROL OF *DRD* TO WAITTING *HLRQ* #
01833  M01S01533.sxdest  +++|          TEMP = HLR$DRDRA[0];
01834  M01S01534.sxdest  +++|          TEMP1 = HLR$LRQADR[0];
01835  M01S01535.sxdest  +++|          P<HLRQ> = HLR$HLRQW[0];
01836  M01S01536.sxdest  +++|          HLR$DRDRA[0] = TEMP;
01837  M01S01537.sxdest  +++|          HLR$LRQADR[0] = TEMP1;
01838  M01S00049.sxdest2 +++|
01839  M01S00050.sxdest2 +++|          IF HLR$LRQADR[0] EQ 0
01840  M01S00051.sxdest2 +++|          THEN
01841  M01S00052.sxdest2 +++|            BEGIN            # TELL NEXT HLRQ CARTRIDGE LOADED BAD #
01842  M01S00053.sxdest2 +++|            HLR$RESP[0] = ERRST"TEMP";
01843  M01S00054.sxdest2 +++|            END
01844  M01S00055.sxdest2 +++|
01845  M01S01538.sxdest  +++|          P<HLRQ> = HLRQADR;
01846  M01S01539.sxdest  +++|          ADD$LNK(HLR$HLRQW[0],LCHN"HL$READY",0);
01847  M01S01540.sxdest  +++|          P<LLRQ> = HLR$LRQADR[0];
01848  M01S01541.sxdest  +++|          LLR$UCPRA[0] = HLR$HLRQW[0];  # INSURE PPU POINTS TO
01849  M01S01542.sxdest  +++|                                           NEW *HLRQ* #
01850  M01S01543.sxdest  +++|          P<CLEAR> = HLR$DRDRA[0];
01851  M01S01544.sxdest  +++|          RESETDRD = HLR$HLRQW[0];
01852  M01S01545.sxdest  +++|          HLR$HLRQW[0] = 0;
01853  M01S01546.sxdest  +++|          HLR$DRDRA[0] = 0;
01854  M01S01547.sxdest  +++|          HLR$LRQADR[0] = 0;
01855  M01S01548.sxdest  +++|          END
01856  M01S01549.sxdest  +++|
Line S01550 Modification History
M01 (Added by) sxdest
M02 (Updated by) sxdest2
Seq #  *Modification Id* Act 
----------------------------+
01857  M02S01550.sxdest2 ---|        ELSE
01858  M01S00056.sxdest2 +++|        IF HLR$LRQADR[0] NQ 0
01859  M01S00057.sxdest2 +++|        THEN
01860  M01S01551.sxdest  +++|          BEGIN       # DO UNLOAD OF CARTRIDGE #
01861  M01S01552.sxdest  +++|          P<LLRQ> = HLR$LRQADR[0];
01862  M01S01553.sxdest  +++|          MSGAFDF("I","UL",0,HLRQADR);
01863  M01S01554.sxdest  +++|          LLR$DR[0] = ERRST"NOERR";
01864  M01S01555.sxdest  +++|          LLR$PRCNME[0] = REQTYP4"UNLD$CART";
01865  M01S01556.sxdest  +++|          LLR$PRCST[0] = PROCST"INITIAL";
01866  M01S01557.sxdest  +++|          HLR$HPS[0] = DSLABEL"DS11A";
01867  M01S01558.sxdest  +++|          ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
01868  M01S01559.sxdest  +++|          RETURN;
01869  M01S01560.sxdest  +++|
01870  M01S01561.sxdest  +++|DS11A:     # RETURN FROM UNLOAD OF CARTRIDGE #
01871  M01S01562.sxdest  +++|
01872  M01S01563.sxdest  +++|          IF HLR$RESP[0] NQ RESPTYP4"OK4"
01873  M01S01564.sxdest  +++|          THEN
01874  M01S01565.sxdest  +++|            BEGIN
01875  M01S01566.sxdest  +++|
01876  M01S01567.sxdest  +++|#
01877  M01S01568.sxdest  +++|*     PROCESS UNLOAD CARTRIDGE ERROR AS FOLLOWS:
01878  M01S01569.sxdest  +++|*       -DRIVER PLACED ORIGINAL CARTRIDGE IN OUTPUT STATION.
01879  M01S01570.sxdest  +++|*       -ASSUME A SECOND CARTRIDGE WAS IN DESTINATION CELL.
01880  M01S01571.sxdest  +++|*       -ATTEMPT TO MOVE THIS 2ND CARTRIDGE TO THE OUTPUT
01881  M01S01572.sxdest  +++|*         STATION BY LOADING IT.
01882  M01S01573.sxdest  +++|*       -IF THE LOAD SUCCEEDS, DO A SECOND UNLOAD BACK TO
01883  M01S01574.sxdest  +++|*          THE ORIGINAL DESTINATION.
01884  M01S01575.sxdest  +++|#
01885  M01S01576.sxdest  +++|
01886  M01S01577.sxdest  +++|            HLLDSET((HLRQADR));      # SET UP SECOND LOAD #
01887  M01S01578.sxdest  +++|            HLR$HPS[0] = DSLABEL"DS11B";
01888  M01S01579.sxdest  +++|            RETURN;
01889  M01S01580.sxdest  +++|
01890  M01S01581.sxdest  +++|DS11B:                                # RETURN FROM SECOND LOAD #
01891  M01S01582.sxdest  +++|
01892  M01S01583.sxdest  +++|              IF HLR$RESP[0] EQ RESPTYP4"OK4"
01893  M01S01584.sxdest  +++|              THEN     # UNLOAD 2ND CARTRIDGE #
01894  M01S01585.sxdest  +++|                BEGIN
01895  M01S01586.sxdest  +++|                LLR$PRCNME[0] = REQTYP4"UNLD$CART";
01896  M01S01587.sxdest  +++|                LLR$PRCST[0] = PROCST"INITIAL";
01897  M01S01588.sxdest  +++|                HLR$HPS[0] = DSLABEL"DS11C";
01898  M01S01589.sxdest  +++|                ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
01899  M01S01590.sxdest  +++|                RETURN;
01900  M01S01591.sxdest  +++|
01901  M01S01592.sxdest  +++|DS11C:
01902  M01S01593.sxdest  +++|                END      # UNLOAD OF 2ND REQUEST #
01903  M01S01594.sxdest  +++|              END        # LOAD OF 2ND REQUEST #
01904  M01S01595.sxdest  +++|            P<CLEAR> = HLR$DRDRA[0];
01905  M01S01596.sxdest  +++|            CLN = 0;
01906  M01S01597.sxdest  +++|            HLR$DRDRA[0] = 0;
01907  M01S01598.sxdest  +++|
01908  M01S01599.sxdest  +++|            END          # PHYSICAL CARTRIDGE UNLOAD #
Line S01600 Modification History
M01 (Added by) sxdest
M02 (Updated by) sxdest2
Seq #  *Modification Id* Act 
----------------------------+
01909  M02S01600.sxdest2 ---|            END          # ORIGINAL UNLOAD REQUEST #
01910  M01S01601.sxdest  +++|
01911  M01S01602.sxdest  +++|      HLR$UNLD[0] = FALSE;
01912  M01S01603.sxdest  +++|      IF DSC$LKMSK NQ 0
01913  M01S01604.sxdest  +++|      THEN                           # TIME TO RELEASE INTERLOCKS #
01914  M01S01605.sxdest  +++|        BEGIN
01915  M01S01606.sxdest  +++|        CRELSLK(DSC$FAM,DSC$LKMSK,0,STAT);
01916  M01S01607.sxdest  +++|        DSC$LKMSK = 0;
01917  M01S01608.sxdest  +++|        END
01918  M01S01609.sxdest  +++|
01919  M01S00058.sxdest2 +++|ENDALL:
01920  M01S00059.sxdest2 +++|
01921  M01S00060.sxdest2 +++|      IF TDAMFC[0] EQ TDAMFCODE"STAGE"
01922  M01S00061.sxdest2 +++|      THEN
01923  M01S00062.sxdest2 +++|        BEGIN    # *DSNTDAM* PROC FOUND NO ROOM - DO NOT
01924  M01S00063.sxdest2 +++|                   RECALL DESTAGE ROUTINE #
01925  M01S00064.sxdest2 +++|        DSC$INIT = 0;
01926  M01S00001.msea024 +++|        DSC$WRESRS = 1;
01927  M01S00065.sxdest2 +++|        HLR$HPS[0] = PROCST"COMPLETE";
01928  M01S00066.sxdest2 +++|        RETURN;
01929  M01S00067.sxdest2 +++|        END
01930  M01S00068.sxdest2 +++|
01931  M01S01610.sxdest  +++|      IF TDAMFC[0] NQ TDAMFCODE"NOREQ"
01932  M01S01611.sxdest  +++|      THEN
01933  M01S01612.sxdest  +++|        BEGIN
01934  M01S01613.sxdest  +++|        HLR$HPS[0] = PROCST"INITIAL";
01935  M01S01614.sxdest  +++|        ADD$LNK(HLRQADR,LCHN"HL$READY",0);
01936  M01S01615.sxdest  +++|        END
01937  M01S01616.sxdest  +++|
01938  M01S01617.sxdest  +++|      ELSE
01939  M01S01618.sxdest  +++|        BEGIN
01940  M01S01619.sxdest  +++|        HLR$HPS[0] = PROCST"COMPLETE";
01941  M01S01620.sxdest  +++|        DSC$INIT = 1;
01942  M01S01621.sxdest  +++|        END
01943  M01S01622.sxdest  +++|
01944  M01S01623.sxdest  +++|#
01945  M01S01624.sxdest  +++|*     END STEP 11.
01946  M01S01625.sxdest  +++|#
01947  M01S01626.sxdest  +++|
01948  M01S01627.sxdest  +++|      RETURN;
01949  M01S01628.sxdest  +++|      END  # DESTAGR #
01950  M01S01629.sxdest  +++|
01951  M01S01630.sxdest  +++|    TERM
01952  M01S01631.sxdest  +++|PROC DSALLO((HLRQADR));
01953  M01S01632.sxdest  +++|
01954  M01S01633.sxdest  +++|# TITLE DSALLO - ALLOCATE A VOLUME ON A M860 CARTRIDGE.               #
01955  M01S01634.sxdest  +++|
01956  M01S01635.sxdest  +++|      BEGIN  # DSALLO #
01957  M01S01636.sxdest  +++|
01958  M01S01637.sxdest  +++|#
01959  M01S01638.sxdest  +++|**    DSALLO - ALLOCATE A VOLUME ON A M860 CARTRIDGE.
01960  M01S01639.sxdest  +++|*
01961  M01S01640.sxdest  +++|*     AN INITIAL CALL TO *DSALLO* SELECTS THE STORAGE MODULE
01962  M01S01641.sxdest  +++|*     (*SM*), CARTRIDGE GROUP, SPECIFIC CARTRIDGE, AND FIRST
01963  M01S01642.sxdest  +++|*     VOLUME TO USE ON THAT CARTRIDGE.
01964  M01S01643.sxdest  +++|*     ON SUBSEQUENT CALLS, *DSALLO* WILL ASSIGN ADDITIONAL
01965  M01S01644.sxdest  +++|*     VOLUMES ON THE SAME CARTRIDGE.  IN A CARTRIDGE OVERFLOW
01966  M01S01645.sxdest  +++|*     SITUATION, NEW CARTRIDGES IN THE SAME GROUP AS THE FIRST
01967  M01S01646.sxdest  +++|*     CARTRIDGE WILL BE ASSIGNED IN ORDER TO ACQUIRE THE M860
01968  M01S01647.sxdest  +++|*     SPACE NECESSARY TO DESTAGE A LONG FILE.
01969  M01S01648.sxdest  +++|*
01970  M01S01649.sxdest  +++|*     PROC DSALLO((HLRQADR))
01971  M01S01650.sxdest  +++|*
01972  M01S01651.sxdest  +++|*     ENTRY      (HLRQADR)   - ADDRESS OF THE *HLRQ* ENTRY FOR A
01973  M01S01652.sxdest  +++|*                              DESTAGE REQUEST.
01974  M01S01653.sxdest  +++|*                (HLR$FFILE) - IF FIRST FILE OF A SEQUENCE OF FILES.
01975  M01S01654.sxdest  +++|*                (HLR$FVOL)  - IF FIRST VOLUME OF A FILE.
01976  M01S01655.sxdest  +++|*                (HLR$PRU)   - NUMBER OF PRU DESTAGED SO FAR.
01977  M01S01656.sxdest  +++|*                (HLR$SH)    - TRUE IF SHORT FILE.
01978  M01S01657.sxdest  +++|*                (HLR$TDAM)  - HAS FAMILY, SUBFAMILY, FILE LENGTH.
01979  M01S01658.sxdest  +++|*                (HLR$XXX)   - WHERE XXX REFERS TO THE FIELDS SET BY
01980  M01S01659.sxdest  +++|*                              THE INITIAL CALL TO *DSALLO* WHICH
01981  M01S01660.sxdest  +++|*                              SELECTED A CARTRIDGE.
01982  M01S01661.sxdest  +++|*               (HLR$VOLAUP) - ID OF PREVIOUS VOLUME IF *FVOL* IS FALSE.
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/sxdest.txt ยท Last modified: by 127.0.0.1