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.