Seq # *Modification Id* Act
----------------------------+
00001 M01S00001.sxstge +++|PROC ST$$DOC;
00002 M01S00002.sxstge +++|
00003 M01S00003.sxstge +++|# TITLE ST$$DOC - DOCUMENTATION FOR FILE STAGING. #
00004 M01S00004.sxstge +++|
00005 M01S00005.sxstge +++| BEGIN # ST$$DOC #
00006 M01S00006.sxstge +++|
00007 M01S00007.sxstge +++|#
00008 M01S00008.sxstge +++|*
00009 M01S00009.sxstge +++|*
00010 M01S00010.sxstge +++|* S T A G I N G O V E R V I E W
00011 M01S00011.sxstge +++|*
00012 M01S00012.sxstge +++|* A USER MAKES A PERMANENT FILE MANAGER (*PFM*) REQUEST TO *ATTACH*
00013 M01S00013.sxstge +++|* OR *GET* A PERMANENT FILE. *PFM* DETECTS THAT THE FILE DOES NOT
00014 M01S00014.sxstge +++|* EXIST ON DISK AND NEEDS TO BE STAGED TO DISK FROM THE M860.
00015 M01S00015.sxstge +++|* *PFM* BUILDS A STAGING (*TDAM*) REQUEST WHICH TOGETHER WITH THE
00016 M01S00016.sxstge +++|* M860 CATALOGS (*SFMCAT* FILES) PROVIDES ALL THE INFORMATION
00017 M01S00017.sxstge +++|* NEEDED BY THE *SSEXEC* TO LOCATE THE DATA FOR THE FILE ON THE
00018 M01S00018.sxstge +++|* M860 CARTRIDGE(S) AND STAGE THIS DATA BACK TO DISK.
00019 M01S00019.sxstge +++|*
00020 M01S00020.sxstge +++|* *PFM* MAKES A SYSTEM MONITOR REQUEST TO TRANSFER THIS *TDAM*
00021 M01S00021.sxstge +++|* ENTRY TO *SSEXEC* WHERE IT IS STORED AT LOCATION *RA$TDAM* IN THE
00022 M01S00022.sxstge +++|* FIELD LENGTH OF *SSEXEC*.
00023 M01S00023.sxstge +++|*
00024 M01S00024.sxstge +++|* ON A MASTER MAINFRAME, THE STAGING *TDAM* REQUEST IS MOVED FROM
00025 M01S00025.sxstge +++|* *RA$TDAM* TO A QUEUE CALLED THE REAL TIME REQUEST QUEUE (*RTRQ*).
00026 M01S00026.sxstge +++|* ITS STAYS IN THIS QUEUE UNTIL IT CAN BE SCHEDULED FOR STAGING AT
00027 M01S00027.sxstge +++|* WHICH TIME IT IS PLACED INTO AN *HLRQ* ENTRY. WHEN THE FILE IS
00028 M01S00028.sxstge +++|* STAGED, A SYSTEM EVENT IS POSTED WHICH WILL RESTART ANY JOB
00029 M01S00029.sxstge +++|* WAITING FOR THIS FILE SO THE ORIGINAL *ATTACH* OR *GET* REQUEST
00030 M01S00030.sxstge +++|* CAN BE SATISFIED.
00031 M01S00031.sxstge +++|*
00032 M01S00032.sxstge +++|* ON A SLAVE MAINFRAME, THE STAGING *TDAM* REQUEST IS WRITTEN TO A
00033 M01S00033.sxstge +++|* FILE (IN *ECS*) USED TO COMMUNICATE *TDAM* REQUESTS FROM THE
00034 M01S00034.sxstge +++|* SLAVE MAINFRAME TO THE MASTER MAINFRAME. *SSEXEC* ON THE MASTER
00035 M01S00035.sxstge +++|* MAINFRAME PERIODICALLY EXAMINES THIS COMMUNICATION FILE. WHEN IT
00036 M01S00036.sxstge +++|* SEES A NEW STAGING REQUEST, IT ADDS IT TO THE *RTRQ*. WHEN THE
00037 M01S00037.sxstge +++|* FILE HAS BEEN STAGED, A RESPONSE TO THE STAGE REQUEST IS WRITTEN
00038 M01S00038.sxstge +++|* ON A COMPANION COMMUNICATION FILE USED TO SEND INFORMATION FROM
00039 M01S00039.sxstge +++|* THE MASTER TO THE SLAVE MAINFRAME. UPON RECEIPT OF THE RESPONSE,
00040 M01S00040.sxstge +++|* THE SLAVE MAINFRAME ISSUES A SYSTEM EVENT TO RESTART ANY JOBS
00041 M01S00041.sxstge +++|* WAITING FOR THE FILE TO BE STAGED.
00042 M01S00042.sxstge +++|#
00043 M01S00043.sxstge +++|
00044 M01S00044.sxstge +++| CONTROL EJECT;
00045 M01S00045.sxstge +++|
00046 M01S00046.sxstge +++|#
00047 M01S00047.sxstge +++|* R O U T I N E S U S E D T O S T A G E F I L E S
00048 M01S00048.sxstge +++|*
00049 M01S00049.sxstge +++|* F O R M A S T E R M A I N F R A M E J O B S
00050 M01S00050.sxstge +++|*
00051 M01S00051.sxstge +++|* 1) MAINLOOP/NEWWORK WHEN *MAINLP* SENSES A *TDAM* REQUEST IN
00052 M01S00052.sxstge +++|* *RA$TDAM*, IT CALLS *TRYTDAM* TO PUT THE *TDAM* ENTRY INTO THE
00053 M01S00053.sxstge +++|* *RTRQ*. *MAINLP* ALSO SENSES *TDAM* ENTRIES IN THE *RTRQ* AND
00054 M01S00054.sxstge +++|* WHEN APPROPRIATE, CALLS *NEWWORK* TO CALL *TDAM$RP* TO PROCESS
00055 M01S00055.sxstge +++|* THESE *TDAM* REQUESTS. FOR STAGING *TDAM* REQUESTS, THIS
00056 M01S00056.sxstge +++|* CONSISTS OF BUILDING AN *HLRQ* ENTRY FOR THE FILE TO BE STAGED.
00057 M01S00057.sxstge +++|*
00058 M01S00058.sxstge +++|* 2) TRYTDAM CALLS *ENTDAM* TO ADD THE STAGING REQUEST TO THE
00059 M01S00059.sxstge +++|* *RTRQ*. IT SETS A BIT IN THE *TDAM* REQUEST TO INDICATE THAT THE
00060 M01S00060.sxstge +++|* REQUEST CAME FROM A JOB ON THE MASTER MAINFRAME. IT ALSO CLEARS
00061 M01S00061.sxstge +++|* *RA$TDAM* SO THE NEXT *TDAM* REQUEST CAN BE SUBMITTED.
00062 M01S00062.sxstge +++|*
00063 M01S00063.sxstge +++|* 3) ENTDAM SEARCHES THE *RTRQ* AND ACTIVE *HLRQ* CHAINS TO SEE
00064 M01S00064.sxstge +++|* IF A DUPLICATE OF THIS REQUEST ALREADY EXISTS. IF ITS NOT A
00065 M01S00065.sxstge +++|* DUPLICATE AND AN *RTRQ* ENTRY IS AVAILABLE, THE *TDAM* ENTRY IS
00066 M01S00066.sxstge +++|* ADDED TO THE *RTRQ*.
00067 M01S00067.sxstge +++|*
00068 M01S00068.sxstge +++|* 4) TDAM$RP IS CALLED BY *NEWWORK* TO SCHEDULE A FILE TO BE
00069 M01S00069.sxstge +++|* STAGED. *TDAM$RP* WILL NOT SCHEDULE A FILE TO BE STAGED WHEN ITS
00070 M01S00070.sxstge +++|* CARTRIDGE IS IN USE, OR IF THE STORAGE MODULE TO BE USED HAS NO
00071 M01S00071.sxstge +++|* AVAILABLE TRANSPORTS ON WHICH THE CARTRIDGE CAN BE MOUNTED. IF A
00072 M01S00072.sxstge +++|* FILE IS BEING DESTAGED TO THE SAME CARTRIDGE, THE *DOSTG* FLAG
00073 M01S00073.sxstge +++|* IS SET IN THE *HLRQ* ENTRY SO THE *HLRQ* CAN BE PREEMPTED FROM
00074 M01S00074.sxstge +++|* DESTAGING AND USED TO STAGE THIS FILE BEFORE THE CARTRIDGE IS
00075 M01S00075.sxstge +++|* UNLOADED. *TDAM$RP* ALSO BUILDS A MASK IN *STG$MSK* TO CONTROL
00076 M01S00076.sxstge +++|* THE NEXT TIME IT IS TO BE CALLED. SEE ADDITIONAL DOCUMENTATION
00077 M01S00077.sxstge +++|* FOR THIS IN *TDAM$RP* AND *COMXMSC*.
00078 M01S00078.sxstge +++|*
00079 M01S00079.sxstge +++|* 5) STAGER ACTUALLY CONTROLS THE STAGING OF THE FILE. IT USES
00080 M01S00080.sxstge +++|* THE *ASA* VALUE FROM THE FILE'S *TDAM* ENTRY TO LOCATE THE
00081 M01S00081.sxstge +++|* INITIAL PORTION OF THE FILE DATA (VOLUME) ON AN M860 CARTRIDGE.
00082 M01S00082.sxstge +++|* IT USES LINKAGE INFORMATION IN THE *SFMCAT* FILE TO IDENTIFY
00083 M01S00083.sxstge +++|* OTHER VOLUMES CONTAINING THE REMAINING PORTIONS OF THE FILE DATA.
00084 M01S00084.sxstge +++|* IT CALLS *HLLOAD* TO LOAD THE CARTRIDGE AND *HLCPYCD* TO COPY THE
00085 M01S00085.sxstge +++|* DATA FROM THE CARTRIDGE TO DISK. WHEN THE LAST VOLUME HAS BEEN
00086 M01S00086.sxstge +++|* COPIED, *STAGER* CALLS *PFM* TO UPDATE THE *PFC* ENTRY FOR THE
00087 M01S00087.sxstge +++|* FILE TO LINK TO THE DISK IMAGE. FINALLY, *STAGER* CALLS *PFM* TO
00088 M01S00088.sxstge +++|* POST A SYSTEM EVENT INDICATING THAT THE FILE HAS BEEN STAGED SO
00089 M01S00089.sxstge +++|* ANY JOBS WAITING FOR THIS FILE CAN BE RESTARTED. *STAGER* THEN
00090 M01S00090.sxstge +++|* CALLS *STNTDAM* TO GET A *TDAM* ENTRY FOR ANOTHER FILE WHICH CAN
00091 M01S00091.sxstge +++|* BE RETRIEVED FROM THE CURRENTLY AVAILABLE CARTRIDGE.
00092 M01S00092.sxstge +++|*
00093 M01S00093.sxstge +++|* 6) STNTDAM SCANS THE *RTRQ* TO LOCATE A FILE WHICH CAN BE
00094 M01S00094.sxstge +++|* STAGED FROM THE CURRENTLY LOADED CARTRDIGE. IF SEVERAL SUCH
00095 M01S00095.sxstge +++|* FILES ARE FOUND, IT WILL SELECT THE ONE CLOSEST TO THE BEGINNING
00096 M01S00096.sxstge +++|* OF THE CARTRIDGE. IF NONE IS FOUND, THE *HLRQ* ENTRY IS RELEASED
00097 M01S00097.sxstge +++|* AND THE NEXT FILE TO BE STAGED WILL BE SELECTED BY *TDAM$RP*.
00098 M01S00098.sxstge +++|#
00099 M01S00099.sxstge +++|
00100 M01S00100.sxstge +++| CONTROL EJECT;
00101 M01S00101.sxstge +++|
00102 M01S00102.sxstge +++|#
00103 M01S00103.sxstge +++|* M U L T I M A I N F R A M E R O U T I N E S
00104 M01S00104.sxstge +++|*
00105 M01S00105.sxstge +++|* 7) SLAVERP/SLVRBP *SLAVERP* IS PERIODICALLY CALLED BY BOTH THE
00106 M01S00106.sxstge +++|* MAINLOOP AND THE IDLE ROUTINE (*DOZER*) OF *SSEXEC* TO READ THE
00107 M01S00107.sxstge +++|* SLAVE TO MASTER COMMUNICATION FILE(S) AND RECOGNIZE ANY NEW
00108 M01S00108.sxstge +++|* STAGING *TDAM* REQUESTS. IF *SLAVERP* IS CALLED BY *DOZER* IT
00109 M01S00109.sxstge +++|* CLEARS A FLAG WHICH CAUSES CONTROL TO BE RETURNED TO THE
00110 M01S00110.sxstge +++|* MAINLOOP. IF CALLED BY THE MAINLOOP WHEN A NEW REQUEST IS FOUND,
00111 M01S00111.sxstge +++|* IT CALLS *SLVRBP* WHICH CALLS *SLVTDAM* WHICH CALLS *ENTDAM* TO
00112 M01S00112.sxstge +++|* ADD THE REQUEST TO THE *RTRQ*.
00113 M01S00113.sxstge +++|*
00114 M01S00114.sxstge +++|* 8) SLVTDAM CALLS *ENTDAM* TO ADD THE REQUEST TO THE *RTRQ*.
00115 M01S00115.sxstge +++|* IF THIS REQUEST CAN NOT BE ACCEPTED BECAUSE THE *RTRQ* IS FULL, A
00116 M01S00116.sxstge +++|* FLAG IS SET WHICH ENSURES THAT THIS REQUEST WILL BE THE FIRST
00117 M01S00117.sxstge +++|* ACCEPTED *TDAM* REQUEST FROM ANY OF THE SLAVE MAINFRAMES.
00118 M01S00118.sxstge +++|*
00119 M01S00119.sxstge +++|* 9) TELLSLV IS CALLED BY *STAGER* WHEN A FILE IS STAGED IF A
00120 M01S00120.sxstge +++|* SLAVE MAINFRAME ISSUED A *TDAM* REQUEST TO STAGE THE FILE. IT
00121 M01S00121.sxstge +++|* WRITES A RESPONSE TO THE COMMUNICATION FILE USED TO SEND REPLIES
00122 M01S00122.sxstge +++|* FROM THE MASTER TO THE SLAVE MAINFRAME.
00123 M01S00123.sxstge +++|#
00124 M01S00124.sxstge +++|
00125 M01S00125.sxstge +++| CONTROL EJECT;
00126 M01S00126.sxstge +++|
00127 M01S00127.sxstge +++|#
00128 M01S00128.sxstge +++|* S T A G I N G P R O C E S S I N G F L O W
00129 M01S00129.sxstge +++|*
00130 M01S00130.sxstge +++|* ( D E T A I L E D )
00131 M01S00131.sxstge +++|*
00132 M01S00132.sxstge +++|* THE PROCEDURE *STAGER* USES THE FOLLOWING STEPS AS IT STAGES A
00133 M01S00133.sxstge +++|* FILE FROM A CARTRIDGE TO DISK. THIS SEQUENCE OF STEPS WILL BE
00134 M01S00134.sxstge +++|* REFERENCED IN THE FOLLOWING DISCUSSION OF STAGING ERROR
00135 M01S00135.sxstge +++|* PROCESSING.
00136 M01S00136.sxstge +++|*
00137 M01S00137.sxstge +++|* 1) IT CALLS *PFM* WITH AN *ASIGNPF* REQUEST TO ENSURE THAT A
00138 M01S00138.sxstge +++|* DIRECT ACCESS FILE IS STAGED TO A DISK (RESPECTING THE SECONDARY
00139 M01S00139.sxstge +++|* DEVICE MASKS) WHICH HAS ENOUGH SPACE TO HOLD THE ENTIRE FILE.
00140 M01S00140.sxstge +++|*
00141 M01S00141.sxstge +++|* 2) IT CALLS *ACQ$FCT* TO READ THE *FCT* ENTRY FOR THE FIRST
00142 M01S00142.sxstge +++|* CARTRIDGE TO MEMORY AND THEN CALLS *HLLOAD* TO LOAD THE CARTRIDGE
00143 M01S00143.sxstge +++|* SO DATA CAN BE READ FROM IT.
00144 M01S00144.sxstge +++|*
00145 M01S00145.sxstge +++|* 3) IT THEN PREPARES TO COPY DATA FROM THE FIRST (NEXT) VOLUME TO
00146 M01S00146.sxstge +++|* DISK.
00147 M01S00147.sxstge +++|*
00148 M01S00148.sxstge +++|* 4) IT THEN CALLS *HLCPYCD* TO COPY DATA FROM THE FIRST (NEXT)
00149 M01S00149.sxstge +++|* VOLUME FROM THE CARTRIDGE TO DISK.
00150 M01S00150.sxstge +++|*
00151 M01S00151.sxstge +++|* 5) STEPS 2-4 ARE REPEATED AS NECESSARY UNTIL THE ENTIRE FILE IS
00152 M01S00152.sxstge +++|* COPIED TO DISK.
00153 M01S00153.sxstge +++|*
00154 M01S00154.sxstge +++|* 6) *PFM* IS THEN CALLED TO BIND THE DISK IMAGE TO THE FILE'S
00155 M01S00155.sxstge +++|* *PFC* ENTRY.
00156 M01S00156.sxstge +++|*
00157 M01S00157.sxstge +++|* 7) *PFM* IS CALLED TO CLEAR THE *ASA* VALUE IN THE FILE'S *PFC*
00158 M01S00158.sxstge +++|* ENTRY IF APPROPRIATE.
00159 M01S00159.sxstge +++|*
00160 M01S00160.sxstge +++|* 8) PROCEDURE *EESET* IS THEN CALLED IF A JOB ON THE MASTER
00161 M01S00161.sxstge +++|* MAINFRAME WANTED THIS FILE TO BE STAGED. PROCEDURE *TELLSLV* IS
00162 M01S00162.sxstge +++|* CALLED IF A JOB ON A SLAVE MAINFRAME WANTED THIS FILE TO BE
00163 M01S00163.sxstge +++|* STAGED.
00164 M01S00164.sxstge +++|#
00165 M01S00165.sxstge +++|
00166 M01S00166.sxstge +++| CONTROL EJECT;
00167 M01S00167.sxstge +++|
00168 M01S00168.sxstge +++|#
00169 M01S00169.sxstge +++|* S T A G I N G E R R O R P R O C E S S I N G
00170 M01S00170.sxstge +++|*
00171 M01S00171.sxstge +++|*
00172 M01S00172.sxstge +++|* TWO TYPES OF ERRORS CAN BE ENCOUNTERED WHILE TRYING TO STAGE A
00173 M01S00173.sxstge +++|* FILE TO DISK (RESOLVED AND UNRESOLVED). RESOLVED ERRORS ARE
00174 M01S00174.sxstge +++|* DEFINED TO BE THOSE WHICH PRESENT A DEFINITIVE STATUS BACK TO THE
00175 M01S00175.sxstge +++|* JOB ATTEMPTING TO ACCESS THE FILE WHICH WAS TO BE STAGED. AN
00176 M01S00176.sxstge +++|* EXAMPLE OF A RESOLVED ERROR IS AN UNRECOVERABLE READ ERROR WHICH
00177 M01S00177.sxstge +++|* IS REPORTED TO A JOB AS A PERMANENT ERROR. ANOTHER EXAMPLE
00178 M01S00178.sxstge +++|* WOULD BE WHEN THE USER PURGED THE FILE AS IT WAS BEING STAGED.
00179 M01S00179.sxstge +++|* *STAGER* WOULD NOT BE ABLE TO BIND THE DATA TO THE (NON-EXISTING)
00180 M01S00180.sxstge +++|* *PFC* ENTRY AND WOULD REPORT THIS AS AN ERROR. THE USER WOULD
00181 M01S00181.sxstge +++|* NOT BE IN DOUBT ABOUT THE STATUS OF THE STAGE SINCE THE FILE
00182 M01S00182.sxstge +++|* WOULD NO LONGER EXIST. AN EXAMPLE OF AN UNRESOLVED ERROR IS WHEN
00183 M01S00183.sxstge +++|* A CARTRIDGE IS LOST OR THE PATH TO THE HARDWARE IS DOWN SO THAT
00184 M01S00184.sxstge +++|* THE STAGE OF THE FILE CAN NOT BE ATTEMPTED. IN THESE EXAMPLES,
00185 M01S00185.sxstge +++|* THE STAGING SOFTWARE CAN NOT DECLARE A PERMANENT ERROR BECAUSE
00186 M01S00186.sxstge +++|* THE ERROR CONDITION MAY BE RESOLVED. HOWEVER, THE USER WILL BE
00187 M01S00187.sxstge +++|* WAITING FOR THE FILE TO BE STAGED WITHOUT RECEIVING A STATUS OF
00188 M01S00188.sxstge +++|* THE PROBLEM FROM THE SOFTWARE. ALSO, THE *SSEXEC* WILL
00189 M01S00189.sxstge +++|* CONTINUALLY BE REQUESTED TO STAGE THE FILE BECAUSE *PFM* REISSUES
00190 M01S00190.sxstge +++|* THE STAGING *TDAM* REQUEST EVERY FEW SECONDS. CONSEQUENTLY, FOR
00191 M01S00191.sxstge +++|* UNRESOLVED ERRORS, THE OPERATOR WILL BE REQUESTED TO INTERVENE
00192 M01S00192.sxstge +++|* AND PASS A STATUS BACK TO THE REQUESTING JOB TO RESOLVE THIS
00193 M01S00193.sxstge +++|* STALEMATE.
00194 M01S00194.sxstge +++|#
00195 M01S00195.sxstge +++|
00196 M01S00196.sxstge +++| CONTROL EJECT;
00197 M01S00197.sxstge +++|
00198 M01S00198.sxstge +++|#
00199 M01S00199.sxstge +++|* THE FOLLOWING ERRORS CAN OCCUR IN EACH OF THE STEPS USED TO STAGE
00200 M01S00200.sxstge +++|* A FILE. THE NUMBER OF EACH PARAGRAPH CORRESPONDS TO THE NUMBER OF
00201 M01S00201.sxstge +++|* THE PARAGRAPH IN THE PRECEEDING SECTION ON STAGING PROCESSING
00202 M01S00202.sxstge +++|* FLOW.
00203 M01S00203.sxstge +++|*
00204 M01S00204.sxstge +++|* 1) THE *ASIGNPF* REQUEST CAN REPORT THAT NO DISK HAS ENOUGH
00205 M01S00205.sxstge +++|* SPACE FOR THE SPECIFIED DIRECT ACCESS FILE. THIS IS AN
00206 M01S00206.sxstge +++|* UNRESOLVED ERROR. THE OPERATOR WILL BE EXPECTED TO TAKE SOME
00207 M01S00207.sxstge +++|* ACTION TO FREE DISK SPACE.
00208 M01S00208.sxstge +++|*
00209 M01S00209.sxstge +++|* 2) ACQ$*FCT* ERRORS: SEVERAL ERROR STATUS REPLIES ARE POSSIBLE
00210 M01S00210.sxstge +++|* WHEN CALLING *ACQ$FCT* TO READ THE *FCT* ENTRY TO MEMORY. IF THE
00211 M01S00211.sxstge +++|* SUBFAMILY CATALOG CANNOT BE FOUND, AN UNRESOLVABLE ERROR IS
00212 M01S00212.sxstge +++|* DECLARED. THIS COULD OCCUR IF A REMOVABLE FAMILY WAS MOUNTED
00213 M01S00213.sxstge +++|* AFTER THE *SSEXEC* WAS INITIALIZED. THE RESOLUTION IS FOR THE
00214 M01S00214.sxstge +++|* OPERATOR TO RESTART *SSEXEC*. IF THE STORAGE MODULE OR *FCT*
00215 M01S00215.sxstge +++|* ENTRY CANNOT BE LOCATED IN THE SUBFAMILY CATALOG, A PERMANENT
00216 M01S00216.sxstge +++|* ERROR IS DECLARED WITH THE APPROPRIATE ERROR BIT SET IN THE
00217 M01S00217.sxstge +++|* FILE'S *PFC* ENTRY. THIS COULD OCCUR IF THE FILE'S *PFC* ENTRY
00218 M01S00218.sxstge +++|* HAD BEEN RELOADED FROM AN OBSOLETE DUMP TAPE. OPERATOR ACTION IS
00219 M01S00219.sxstge +++|* ALSO REQUIRED TO RECOVER FROM AN READ/WRITE ERROR WHICH OCCURS
00220 M01S00220.sxstge +++|* WHEN ACCESSING A SUBFAMILY CATALOG.
00221 M01S00221.sxstge +++|*
00222 M01S00222.sxstge +++|* CARTRIDGE LOAD ERRORS: UNRESOLVED LOAD ERRORS INCLUDE HAVING
00223 M01S00223.sxstge +++|* THE HARDWARE DOWN SO THE STORAGE MODULE CAN NOT BE ACCESSED AND
00224 M01S00224.sxstge +++|* THE CARTRIDGE BEING LOST ( NOT LOCATED IN ITS ASSIGNED CUBICLE).
00225 M01S00225.sxstge +++|* IF A LABEL CHECK ERROR OCCURS WITH THE CARTRIDGE, A PERMANENT
00226 M01S00226.sxstge +++|* ERROR IS DECLARED FOR THE FILE WHICH WAS TO BE STAGED.
00227 M01S00227.sxstge +++|*
00228 M01S00228.sxstge +++|* 3) IF *STAGER* DETERMINES THAT THE ALLOCATION UNITS OF THE NEXT
00229 M01S00229.sxstge +++|* VOLUME TO BE STAGED ARE INVALID, IT DECLARES A PERMANENT ERROR.
00230 M01S00230.sxstge +++|* IF *STAGER* OR *SSVAL* HAVE DETECTED NON-FATAL ERRORS WITH THE AU
00231 M01S00231.sxstge +++|* OF THE VOLUME TO BE STAGED, AN INTERNAL FLAG IS SET WHICH WILL
00232 M01S00232.sxstge +++|* CAUSE THE *ASA* VALUE IN THE FILE'S *PFC* ENTRY TO BE CLEARED
00233 M01S00233.sxstge +++|* UPON SUCCESSFUL COMPLETION OF THE STAGE. THIS PREVENTS THE DISK
00234 M01S00234.sxstge +++|* SPACE FROM BEING RELEASED WITHOUT FIRST MAKING A CLEAN COPY OF
00235 M01S00235.sxstge +++|* THE FILE VIA ANOTHER DESTAGE.
00236 M01S00236.sxstge +++|#
00237 M01S00237.sxstge +++|
00238 M01S00238.sxstge +++| CONTROL EJECT;
00239 M01S00239.sxstge +++|
00240 M01S00240.sxstge +++|#
00241 M01S00241.sxstge +++|* 4) THE FOLLOWING UNRESOLVED ERRORS CAN OCCUR WHILE COPYING A
00242 M01S00242.sxstge +++|* VOLUME OF DATA TO DISK - DISK WRITE ERROR, DISK FULL, HARDWARE
00243 M01S00243.sxstge +++|* DOWN. IF AN UNRECOVERABLE READ ERROR IS DETECTED, THE STAGER
00244 M01S00244.sxstge +++|* WILL RESTAGE THE FILE, FIRST UNLOADING THE CARTRIDGE SO IT WILL
00245 M01S00245.sxstge +++|* HOPEFULLY BE RELOADED ON THE OTHER DATA RECORDING DEVICE. IF TWO
00246 M01S00246.sxstge +++|* UNRECOVERABLE READ ERRORS ARE DETECTED, A PERMANENT ERROR STATUS
00247 M01S00247.sxstge +++|* IS RECORDED IN THE FILE'S *PFC* ENTRY. ANOTHER TYPE OF PERMANENT
00248 M01S00248.sxstge +++|* ERROR WILL BE REPORTED IF THE SYSTEM LINKAGE INFORMATION RECORDED
00249 M01S00249.sxstge +++|* ON EACH VOLUME DOES NOT AGREE WITH WHAT IS EXPECTED. THIS
00250 M01S00250.sxstge +++|* INFORMATION CONSISTS OF THE FILE'S USER INDEX, THE CREATION DATE
00251 M01S00251.sxstge +++|* AND TIME, AND THE IDENTITY OF PREVIOUS VOLUME (CARTRIDGE, VOLUME
00252 M01S00252.sxstge +++|* AND VOLUME LENGTH).
00253 M01S00253.sxstge +++|*
00254 M01S00254.sxstge +++|* 5) SEE STEPS 2-4 FOR ANY ERROR CONDITIONS.
00255 M01S00255.sxstge +++|*
00256 M01S00256.sxstge +++|* 6) A REQUEST TO RESTORE THE FILE'S DISK IMAGE CAN FAIL, BUT
00257 M01S00257.sxstge +++|* THESE ERRORS ARE CONSIDERED TO BE RESOLVED SINCE THEY SHOULD ONLY
00258 M01S00258.sxstge +++|* OCCUR IF THE USER DID SOMETHING TO THE FILE (PURGE OR REPLACE THE
00259 M01S00259.sxstge +++|* DATA FOR AN INDIRECT ACCESS FILE).
00260 M01S00260.sxstge +++|*
00261 M01S00261.sxstge +++|* 7) AS IN STEP 6, A USER ACTION COULD CAUSE A RESOLVED ERROR TO
00262 M01S00262.sxstge +++|* OCCUR WHILE *STAGER* IS CALLING *PFM* TO CLEAR THE FILE'S *ASA*
00263 M01S00263.sxstge +++|* VALUE.
00264 M01S00264.sxstge +++|*
00265 M01S00265.sxstge +++|* 8) NO ERRORS CAN OCCUR IN THIS STEP.
00266 M01S00266.sxstge +++|#
00267 M01S00267.sxstge +++|
00268 M01S00268.sxstge +++| END # ST$$DOC #
00269 M01S00269.sxstge +++|
00270 M01S00270.sxstge +++| TERM
00271 M01S00271.sxstge +++|PROC STAGER((HLRQADR));
00272 M01S00272.sxstge +++|
00273 M01S00273.sxstge +++|# TITLE STAGER - STAGE A FILE FROM CARTRIDGE TO DISK. #
00274 M01S00274.sxstge +++|
00275 M01S00275.sxstge +++| BEGIN # STAGER #
00276 M01S00276.sxstge +++|
00277 M01S00277.sxstge +++|#
00278 M01S00278.sxstge +++|** STAGER - STAGE A FILE.
00279 M01S00279.sxstge +++|*
00280 M01S00280.sxstge +++|* *STAGER* COPIES A FILE FROM THE M860 TO DISK. UPON COMPLETION OF
00281 M01S00281.sxstge +++|* THE STAGE THE DISK ADDRESS OF THE LOCAL FILE IS ENTERED INTO
00282 M01S00282.sxstge +++|* THE *PFC* ENTRY TO BIND THE DISK IMAGE TO THE ENTRY.
00283 M01S00283.sxstge +++|* PERFORMANCE (TRACE) MESSAGES ARE WRITTEN TO THE ACCOUNT
00284 M01S00284.sxstge +++|* DAYFILE IF EXEC IS IN TRACE MODE.
00285 M01S00285.sxstge +++|*
00286 M01S00286.sxstge +++|* PROC STAGER((HLRQADR))
00287 M01S00287.sxstge +++|*
00288 M01S00288.sxstge +++|* ENTRY (HLRQADR) - ADDRESS OF THE *HLRQ* ENTRY CONTAINING THE
00289 M01S00289.sxstge +++|* STAGE REQUEST.
00290 M01S00290.sxstge +++|* THE PROCESS STATE FIELD IN THE *HLRQ* ENTRY IS SET TO
00291 M01S00291.sxstge +++|* INDICATE THE NEXT PROCESSING ACTION.
00292 M01S00292.sxstge +++|*
00293 M01S00293.sxstge +++|* EXIT THE PROCESS STATE FIELD IN THE *HLRQ* ENTRY HAS BEEN
00294 M01S00294.sxstge +++|* ADVANCED TO INDICATE WHERE PROCESSING OF THIS REQUEST
00295 M01S00295.sxstge +++|* LEFT OFF, AND THUS WHAT TO DO NEXT TO ADVANCE THE
00296 M01S00296.sxstge +++|* REQUEST. UPON COMPLETION (SUCCESSFUL OR
00297 M01S00297.sxstge +++|* OTHERWISE) OF A FILE STAGE, THE PROCEDURE
00298 M01S00298.sxstge +++|* *NEXTSTG* IS CALLED TO OBTAIN THE *TDAM*
00299 M01S00299.sxstge +++|* ENTRY FOR THE NEXT FILE TO BE STAGED.
00300 M01S00300.sxstge +++|* THE OBJECTIVE IS TO FIND ANOTHER FILE ON THE
00301 M01S00301.sxstge +++|* SAME CARTRIDGE TO REDUCE CARTRIDGE ACCESSES
00302 M01S00302.sxstge +++|* AND IMPROVE STAGING PERFORMANCE. WHEN NO MORE
00303 M01S00303.sxstge +++|* FILES REMAIN TO BE STAGED, *STAGER* IS CALLED
00304 M01S00304.sxstge +++|* ONE MORE TIME TO UNLOAD THE LAST USED CARTRIDGE.
00305 M01S00305.sxstge +++|* AT THAT TIME, THE PROCESS STATE IS SET TO COMPLETE.
00306 M01S00306.sxstge +++|*
00307 M01S00307.sxstge +++|* MESSAGES * EXEC ABNORMAL, STAGER.*
00308 M01S00308.sxstge +++|*
00309 M01S00309.sxstge +++|#
00310 M01S00310.sxstge +++|
00311 M01S00311.sxstge +++| ITEM HLRQADR U; # *HLRQ* ENTRY ADDRESS #
00312 M01S00312.sxstge +++|
00313 M01S00313.sxstge +++|#
00314 M01S00314.sxstge +++|**** PROC STAGER - XREF LIST BEGIN.
00315 M01S00315.sxstge +++|#
00316 M01S00316.sxstge +++|
00317 M01S00317.sxstge +++| XREF
00318 M01S00318.sxstge +++| BEGIN
00319 M01S00319.sxstge +++| PROC ABORT; # ABORT #
00320 M01S00320.sxstge +++| PROC ACQ$FCT; # ACQUIRE AN *FCT* ENTRY #
00321 M01S00321.sxstge +++| PROC ADD$LNK; # ADD ENTRY TO CHAIN #
00322 M01S00322.sxstge +++| PROC ASIGNPF; # ASSIGN PERMANENT FILE SPACE #
00323 M01S00323.sxstge +++| PROC CFLUSH; # FLUSH MSF CATALOG BUFFER #
00324 M01S00324.sxstge +++| PROC CKPFETC; # CHECK *PFM* FET COMPLETION #
00325 M01S00325.sxstge +++| PROC CRDAST; # READ MSF CATALOG *AST* #
00326 M01S00326.sxstge +++| PROC CWTAST; # WRITE MSF CATALOG *AST* #
00327 M01S00327.sxstge +++| PROC DELAY; # TIMED DELAY #
00328 M01S00328.sxstge +++| PROC EESET; # SET EVENT TABLE #
00329 M01S00329.sxstge +++| PROC HLCPYCD; # CHECK COPY RETURN CODES #
00330 M01S00330.sxstge +++| PROC HLLOAD; # CHECK LOAD RETURN CODES #
00331 M01S00331.sxstge +++| PROC HLLDSET; # MOVE *HLRQ* INTO *LLRQ* #
00332 M01S00332.sxstge +++| PROC UPUSAGE; # UPDATE CART. USAGE DATA #
00333 M01S00333.sxstge +++| PROC MESSAGE; # ISSUE MESSAGE #
00334 M01S00334.sxstge +++| PROC MSGAFDF; # ISSUE ACCOUNT-DAYFILE MESSAGE #
00335 M01S00335.sxstge +++| PROC RECALL; # RELEASE CPU FOR A MOMENT #
00336 M01S00336.sxstge +++| PROC REQWEST; # REQUEST EQUIPMENT ASSIGNMENT #
00337 M01S00337.sxstge +++| PROC RETERN; # RETURN A FILE #
00338 M01S00338.sxstge +++| PROC RLS$FCT; # RELEASE AN *FCT* ENTRY #
00339 M01S00339.sxstge +++| PROC SETAF; # SET ALTERNATE STORAGE FLAG #
00340 M01S00340.sxstge +++| PROC SETDA; # SET DISK ADDRESS #
00341 M01S00341.sxstge +++| PROC STERCAT; # STAGE ERROR PROCESSOR #
00342 M01S00342.sxstge +++| PROC STERPFM; # STAGE ERROR PROCESSOR #
00343 M01S00343.sxstge +++| PROC STNTDAM; # GET NEXT FILE TO STAGE #
00344 M01S00344.sxstge +++| PROC TELLSLV; # NOTIFY SLAVE #
00345 M01S00345.sxstge +++| PROC UREPLAC; # UTILITY REPLACE #
00346 M01S00346.sxstge +++| PROC ZSETFET; # INITIALIZE A FET #
00347 M01S00347.sxstge +++| END
00348 M01S00348.sxstge +++|
00349 M01S00349.sxstge +++|#
00350 M01S00350.sxstge +++|**** PROC STAGER - XREF LIST END.
00351 M01S00351.sxstge +++|#
00352 M01S00352.sxstge +++|
00353 M01S00353.sxstge +++| DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
00354 M01S00354.sxstge +++|*CALL,COMBFAS
00355 M01S00355.sxstge +++|*CALL,COMBCHN
00356 M01S00356.sxstge +++|*CALL,COMBCMD
00357 M01S00357.sxstge +++|*CALL,COMBCMS
00358 M01S00358.sxstge +++|*CALL,COMBCPR
00359 M01S00359.sxstge +++|*CALL COMBLRQ
00360 M01S00360.sxstge +++|*CALL,COMBKDD
00361 M01S00361.sxstge +++|*CALL,COMBFET
00362 M01S00362.sxstge +++|*CALL,COMBMCT
00363 M01S00363.sxstge +++|*CALL,COMBPFP
00364 M01S00364.sxstge +++|*CALL,COMBPFS
00365 M01S00365.sxstge +++|*CALL,COMBTDM
00366 M01S00366.sxstge +++|*CALL,COMXCTF
00367 M01S00367.sxstge +++|*CALL,COMXEMC
00368 M01S00368.sxstge +++|*CALL COMBUDT
00369 M01S00369.sxstge +++|*CALL,COMXFCQ
00370 M01S00370.sxstge +++|*CALL,COMXHLR
00371 M01S00371.sxstge +++|*CALL,COMXIPR
00372 M01S00372.sxstge +++|*CALL,COMXJCA
00373 M01S00001.sxstge3 +++|*CALL COMXMFD
00374 M01S00373.sxstge +++|*CALL,COMXMSC
00375 M01S00374.sxstge +++|*CALL,COMSPFM
00376 M01S00375.sxstge +++|
00377 M01S00001.sxstge2 +++| ITEM FCTQADDR U; # FCTQ ADDRESS #
00378 M01S00376.sxstge +++| ITEM FLAG B; # FLAG #
00379 M01S00377.sxstge +++| ITEM QADDR U; # *FCTQ* ENTRY ADDRESS #
00380 M01S00378.sxstge +++| ITEM ACCL I; # ACCESS LEVEL #
00381 M01S00379.sxstge +++| ITEM STAT I; # STATUS #
00382 M01S00380.sxstge +++| ITEM DRDCOUNT U; # DRD COUNT #
00383 M01S00002.sxstge3 +++| ITEM STDRDCT I; # DRD-S AVAILABLE FOR STAGING #
00384 M01S00381.sxstge +++| ITEM FULL B; # DRD RESERVATION TAKEN #
00385 M01S00382.sxstge +++| ITEM I I; # SM INDEX #
00386 M01S00003.sxstge3 +++| ITEM J I; # SUBFAMILY INDEX #
00387 M01S00383.sxstge +++| ITEM TFCT U; # ASAFCT #
00388 M01S00384.sxstge +++| ITEM CURFCT U; # *FCT* OF A PARALLEL *HLRQ* #
00389 M01S00385.sxstge +++| ITEM TTDAMSBF U; # SUBFAMILY NUMBER #
00390 M01S00386.sxstge +++| ITEM TEMP I; # TEMPORARY #
00391 M01S00001.msea026 +++| ITEM TFAM C(7); # TEMPORARY FAMILY #
00392 M01S00387.sxstge +++| ITEM TMSG I; # TRACE MODE INDICATOR #
Line S00388 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse0012 |
Seq # *Modification Id* Act
----------------------------+
00393 M02S00388.mse0012 ---|
00394 M01S00001.mse0012 +++| ITEM PASS B; # TEMPORARY PASS FLAG #
00395 M01S00389.sxstge +++| ITEM TEMP1 I; # TEMPORARY #
00396 M01S00390.sxstge +++|
00397 M01S00391.sxstge +++| ARRAY SCR$FET [0:0] P(SFETL); ; # SCRATCH FET #
00398 M01S00392.sxstge +++|
00399 M01S00393.sxstge +++| STATUS STLBL
00400 M01S00394.sxstge +++| ST1A, # RETRY *ASIGNPF* CALL #
00401 M01S00395.sxstge +++| ST2A, # RETRY *RLS$FCT* CALL #
00402 M01S00396.sxstge +++| ST2B, # RETRY *CFLUSH* CALL #
00403 M01S00397.sxstge +++| ST2C, # RE-ENTER AFTER "NORMAL" UNLOAD #
00404 M01S00398.sxstge +++| ST2D, # RE-ENTER AFTER "FORCED" LOAD #
00405 M01S00399.sxstge +++| ST2E, # RE-ENTER AFTER "FORCED" UNLOAD #
00406 M01S00400.sxstge +++| ST3A, # RE-ENTRY IF NO *DRD* #
00407 M01S00401.sxstge +++| ST3B, # RETRY *ACQ$FCT* CALL #
00408 M01S00402.sxstge +++| ST3C, # RE-ENTRY AFTER CARTRIDGE LOAD #
00409 M01S00403.sxstge +++| ST4A, # RE-ENTER AFTER *HLCPYCD* CALL #
00410 M01S00404.sxstge +++| ST6A, # RETRY *SETDA* OR *UREPLAC* CALL
00411 M01S00405.sxstge +++| #
00412 M01S00406.sxstge +++| ST6B, # *UREPLACE* COMPLETE #
00413 M01S00407.sxstge +++| ST7A, # WAIT FOR K-DISPLAY REPLY #
00414 M01S00408.sxstge +++| ST7B, # RETRY *SETAF* CALL #
00415 M01S00409.sxstge +++| STEND; # END OF LIST #
00416 M01S00410.sxstge +++|
00417 M01S00411.sxstge +++|
00418 M01S00412.sxstge +++| SWITCH STGENT:STLBL
00419 M01S00413.sxstge +++| ST1A:ST1A,
00420 M01S00414.sxstge +++| ST2A:ST2A,
00421 M01S00415.sxstge +++| ST2B:ST2B,
00422 M01S00416.sxstge +++| ST2C:ST2C,
00423 M01S00417.sxstge +++| ST2D:ST2D,
00424 M01S00418.sxstge +++| ST2E:ST2E,
00425 M01S00419.sxstge +++| ST3A:ST3A,
00426 M01S00420.sxstge +++| ST3B:ST3B,
00427 M01S00421.sxstge +++| ST3C:ST3C,
00428 M01S00422.sxstge +++| ST4A:ST4A,
00429 M01S00423.sxstge +++| ST6A:ST6A,
00430 M01S00424.sxstge +++| ST6B:ST6B,
00431 M01S00425.sxstge +++| ST7A:ST7A,
00432 M01S00426.sxstge +++| ST7B:ST7B;
00433 M01S00427.sxstge +++|
00434 M01S00428.sxstge +++|
00435 M01S00429.sxstge +++| BASED
00436 M01S00430.sxstge +++| ARRAY CLEAR [0:0] S(1);
00437 M01S00431.sxstge +++| BEGIN
00438 M01S00432.sxstge +++| ITEM CLN U(00,36,24); # CLEAR *DRD* ASSIGNMENTS #
00439 M01S00433.sxstge +++| ITEM DRDADR U(00,42,18);
00440 M01S00434.sxstge +++| END
00441 M01S00435.sxstge +++|
Line S00436 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00442 M02S00436.mse3 ---|
Line S00437 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00443 M02S00437.mse3 ---| ARRAY PFMRET [0:0] S(4); # PFM RETURN MESSAGE AREA #
Line S00438 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00444 M02S00438.mse3 ---| BEGIN
Line S00439 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00445 M02S00439.mse3 ---| ITEM PFMRETM C(00,00,40); # PFM RETURN MESSAGE #
Line S00440 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00446 M02S00440.mse3 ---| END
Line S00441 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00447 M02S00441.mse3 ---|
Line S00442 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse3 |
Seq # *Modification Id* Act
----------------------------+
00448 M02S00442.mse3 ---|
00449 M01S00443.sxstge +++| CONTROL EJECT;
00450 M01S00444.sxstge +++| P<HLRQ> = HLRQADR;
00451 M01S00445.sxstge +++| P<TDAM> = LOC(HLR$TDAM[0]);
00452 M01S00446.sxstge +++| P<FCT> = HLR$FCTQ[0] + FCTQHL;
00453 M01S00447.sxstge +++|
00454 M01S00448.sxstge +++| GOTO STGENT[HLR$HPS[0]];
00455 M01S00449.sxstge +++| CONTROL EJECT;
00456 M01S00450.sxstge +++|
00457 M01S00451.sxstge +++|#
00458 M01S00452.sxstge +++|* STEP 1 - SET UP TO STAGE THE NEXT FILE.
00459 M01S00453.sxstge +++|* - ASSIGN STAGING DISK TO A DIRECT ACCESS FILE.
00460 M01S00454.sxstge +++|* - INITIALIZE *HLRQ* FIELDS.
00461 M01S00455.sxstge +++|#
00462 M01S00456.sxstge +++|
00463 M01S00457.sxstge +++|ST1A: # TO RETRY *ASIGNPF* CALL #
00464 M01S00458.sxstge +++|RETRYFILE: # IF UNRECOVERABLE READ ERRORS #
00465 M01S00459.sxstge +++|
00466 M01S00460.sxstge +++| IF TDAMFC[0] NQ TDAMFCODE"NOREQ"
00467 M01S00461.sxstge +++| THEN # A FILE IS TO BE STAGED #
00468 M01S00462.sxstge +++| BEGIN # STEP 1 #
00469 M01S00463.sxstge +++| HLR$RESP[0] = ERRST"NOERR";
00470 M01S00464.sxstge +++| IF NOT TDAMIA[0]
00471 M01S00465.sxstge +++| THEN # DIRECT ACCESS #
00472 M01S00466.sxstge +++| BEGIN # ASSIGN STAGING DISK #
00473 M01S00467.sxstge +++| NAMEC[0] = HLR$FLNM[0];
00474 M01S00468.sxstge +++| NAMEC[1] = TDAMFAM[0];
00475 M01S00469.sxstge +++| ACCL = TDAMAL[0];
00476 M01S00470.sxstge +++| ASIGNPF(NAME[0],STAT,6,TDAMFLN[0], ##
00477 M01S00471.sxstge +++|
00478 M01S00472.sxstge +++| TDAMUI[0],NAME[1],ACCL,LOC(PFMRET));
00479 M01S00473.sxstge +++|
00480 M01S00474.sxstge +++| IF STAT EQ LNP
00481 M01S00475.sxstge +++| THEN # LEVEL INVALID ON DEVICE #
00482 M01S00476.sxstge +++| BEGIN
00483 M01S00477.sxstge +++| HLR$RESP[0] = ERRST"PERM";
00484 M01S00478.sxstge +++| HLR$PEF[0] = AFTMP;
00485 M01S00479.sxstge +++| HLR$ERRC[0] = STGERRC"NOLVL";
00486 M01S00480.sxstge +++| GOTO STGERR;
00487 M01S00481.sxstge +++| END
00488 M01S00482.sxstge +++|
00489 M01S00483.sxstge +++| IF STAT NQ OK
00490 M01S00484.sxstge +++| THEN
00491 M01S00485.sxstge +++| BEGIN
00492 M01S00486.sxstge +++| STERPFM(HLRQADR,STAT);
00493 M01S00487.sxstge +++| IF HLR$RESP[0] NQ ERRST"NOERR"
00494 M01S00488.sxstge +++| THEN
00495 M01S00489.sxstge +++| BEGIN
00496 M01S00490.sxstge +++| HLR$HPS[0] = STLBL"ST1A";
00497 M01S00491.sxstge +++| HLR$ERRC[0] = STGERRC"DSKFULL";
00498 M01S00492.sxstge +++| GOTO STGERR;
00499 M01S00493.sxstge +++| END
00500 M01S00494.sxstge +++|
00501 M01S00495.sxstge +++| END
00502 M01S00496.sxstge +++|
00503 M01S00497.sxstge +++| END # ASSIGN STAGING DISK #
00504 M01S00498.sxstge +++|
00505 M01S00499.sxstge +++|#
00506 M01S00500.sxstge +++|* INITIALIZE *HLRQ* FIELDS.
00507 M01S00501.sxstge +++|#
00508 M01S00502.sxstge +++|
00509 M01S00503.sxstge +++| P<ASA> = LOC(TDAMASA[0]);
00510 M01S00504.sxstge +++| HLR$VOLAU[0] = ASAAU[0];
00511 M01S00505.sxstge +++| HLR$FCTXN[0] = ASAFCT[0];
00512 M01S00506.sxstge +++| HLR$SM[0] = ASASM[0];
00513 M01S00507.sxstge +++|
00514 M01S00508.sxstge +++| HLR$PRU[0] = 0;
00515 M01S00509.sxstge +++| HLR$VOLAUP[0] = 0;
00516 M01S00510.sxstge +++| HLR$VOLLNP[0] = 0;
00517 M01S00511.sxstge +++| HLR$CSNDP[0] = "";
00518 M01S00512.sxstge +++| HLR$CCODP[0] = "";
00519 M01S00513.sxstge +++|
00520 M01S00514.sxstge +++| HLR$FFF[0] = TDAMFFF[0];
00521 M01S00515.sxstge +++| HLR$FVOL = TRUE;
00522 M01S00516.sxstge +++| HLR$EOI[0] = FALSE;
00523 M01S00517.sxstge +++| END # STEP 1 #
00524 M01S00518.sxstge +++|
00525 M01S00519.sxstge +++| CONTROL EJECT;
00526 M01S00520.sxstge +++|
00527 M01S00521.sxstge +++|#
00528 M01S00522.sxstge +++|* STEP 2 - UNLOAD CARTRIDGE.
00529 M01S00523.sxstge +++|* - USE *HLUNLD* TO DO THE UNLOAD.
00530 M01S00524.sxstge +++|* IT UPDATES USAGE DATA IN THE *FCT* ENTRY.
00531 M01S00525.sxstge +++|* - RELEASE THE *FCT* ENTRY.
00532 M01S00526.sxstge +++|* - EXIT FROM STAGER IF NO MORE FILES REMAIN.
00533 M01S00527.sxstge +++|#
00534 M01S00528.sxstge +++|
00535 M01S00529.sxstge +++|UNLOAD: # TO RETRY READ ON OTHER *DRD* OR
00536 M01S00530.sxstge +++| ADVANCE TO NEXT CARTRIDGE #
00537 M01S00531.sxstge +++|
00538 M01S00532.sxstge +++| IF HLR$UNLD[0] OR ##
00539 M01S00533.sxstge +++| (HLR$FCTX[0] NQ 0 AND ##
00540 M01S00534.sxstge +++| (HLR$FCTX[0] NQ HLR$FCTXN[0]))
00541 M01S00535.sxstge +++| THEN # UNLOAD A CARTRIDGE #
00542 M01S00536.sxstge +++| BEGIN # STEP 2 #
00543 M01S00537.sxstge +++| IF HLR$FCTQ[0] NQ 0
00544 M01S00538.sxstge +++| THEN
00545 M01S00539.sxstge +++| BEGIN
00546 M01S00540.sxstge +++| UPUSAGE(HLRQADR,HLR$FCTQ[0]);
00547 M01S00541.sxstge +++| END
00548 M01S00542.sxstge +++|
00549 M01S00543.sxstge +++|ST2A: # TO RETRY *RLS$FCT* CALL #
00550 M01S00544.sxstge +++| IF HLR$FCTQ[0] NQ 0
00551 M01S00545.sxstge +++| THEN
00552 M01S00546.sxstge +++| BEGIN
00553 M01S00547.sxstge +++| RLS$FCT(HLR$FCTQ[0],0,STAT);
00554 M01S00548.sxstge +++|
00555 M01S00549.sxstge +++| IF STAT NQ CMASTAT"NOERR"
00556 M01S00550.sxstge +++| THEN
00557 M01S00551.sxstge +++| BEGIN
00558 M01S00552.sxstge +++| HLR$HPS[0] = STLBL"ST2A";
00559 M01S00553.sxstge +++| STERCAT(HLRQADR,STAT);
00560 M01S00554.sxstge +++| GOTO STGERR;
00561 M01S00555.sxstge +++| END
00562 M01S00556.sxstge +++|
00563 M01S00557.sxstge +++|ST2B:
00564 M01S00558.sxstge +++| CFLUSH(TDAMFAM[0],TDAMSBF[0],HLRQADR,STAT);
00565 M01S00559.sxstge +++|
00566 M01S00560.sxstge +++| IF STAT NQ CMASTAT"NOERR"
00567 M01S00561.sxstge +++| THEN
00568 M01S00562.sxstge +++| BEGIN
00569 M01S00563.sxstge +++| HLR$HPS[0] = STLBL"ST2B";
00570 M01S00564.sxstge +++| STERCAT(HLRQADR,STAT);
00571 M01S00565.sxstge +++| GOTO STGERR;
00572 M01S00566.sxstge +++| END
00573 M01S00567.sxstge +++|
00574 M01S00568.sxstge +++| END
00575 M01S00569.sxstge +++|
00576 M01S00570.sxstge +++| HLR$FCTQ[0] = 0;
00577 M01S00571.sxstge +++| HLR$FCTX[0] = 0;
00578 M01S00572.sxstge +++|
00579 M01S00573.sxstge +++| IF HLR$HLRQW[0] NQ 0
00580 M01S00574.sxstge +++| THEN # SWITCH CONTROL OF *DRD* TO WAITTING *HLRQ* #
00581 M01S00575.sxstge +++| BEGIN
00582 M01S00576.sxstge +++| TEMP = HLR$DRDRA[0];
00583 M01S00577.sxstge +++| TEMP1 = HLR$LRQADR[0];
00584 M01S00578.sxstge +++| P<HLRQ> = HLR$HLRQW[0];
00585 M01S00579.sxstge +++| HLR$DRDRA[0] = TEMP;
00586 M01S00580.sxstge +++| HLR$LRQADR[0] = TEMP1;
00587 M01S00004.sxstge3 +++|
00588 M01S00005.sxstge3 +++| IF HLR$LRQADR[0] EQ 0
00589 M01S00006.sxstge3 +++| THEN
00590 M01S00007.sxstge3 +++| BEGIN # TELL NEXT HLRQ CARTRIDGE LOADED BAD #
00591 M01S00008.sxstge3 +++| HLR$RESP[0] = ERRST"TEMP";
00592 M01S00009.sxstge3 +++| END
00593 M01S00010.sxstge3 +++|
00594 M01S00581.sxstge +++| P<HLRQ> = HLRQADR;
00595 M01S00582.sxstge +++| ADD$LNK(HLR$HLRQW[0],LCHN"HL$READY",0);
00596 M01S00583.sxstge +++| P<LLRQ> = HLR$LRQADR[0];
00597 M01S00584.sxstge +++| LLR$UCPRA[0] = HLR$HLRQW[0]; #INSURE PPU POINTS TO NEW *HLRQ*#
00598 M01S00585.sxstge +++| P<CLEAR> = HLR$DRDRA[0] ;
00599 M01S00586.sxstge +++| DRDADR = HLR$HLRQW[0];
00600 M01S00587.sxstge +++| HLR$HLRQW[0] = 0;
00601 M01S00588.sxstge +++| HLR$DRDRA[0] = 0;
00602 M01S00589.sxstge +++| HLR$LRQADR[0] = 0;
00603 M01S00590.sxstge +++| END
00604 M01S00591.sxstge +++|
00605 M01S00592.sxstge +++| IF HLR$LRQADR[0] NQ 0
00606 M01S00593.sxstge +++| THEN
00607 M01S00594.sxstge +++| BEGIN # PHYSICAL UNLOAD #
00608 M01S00595.sxstge +++| P<LLRQ> = HLR$LRQADR[0];
00609 M01S00596.sxstge +++| MSGAFDF("I","UL",0,HLRQADR);
00610 M01S00597.sxstge +++| LLR$DR[0] = ERRST"NOERR";
00611 M01S00598.sxstge +++| LLR$PRCNME[0] = REQTYP4"UNLD$CART";
00612 M01S00599.sxstge +++| LLR$PRCST[0] = PROCST"INITIAL";
00613 M01S00600.sxstge +++| HLR$HPS[0] = STLBL"ST2C";
00614 M01S00601.sxstge +++| ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
00615 M01S00602.sxstge +++| RETURN;
00616 M01S00603.sxstge +++|
00617 M01S00604.sxstge +++|ST2C: # RETURN FROM UNLOAD OF CARTRIDGE #
00618 M01S00605.sxstge +++|
00619 M01S00606.sxstge +++| IF HLR$RESP[0] NQ RESPTYP4"OK4"
00620 M01S00607.sxstge +++| THEN
00621 M01S00608.sxstge +++| BEGIN
00622 M01S00609.sxstge +++|
00623 M01S00610.sxstge +++|#
00624 M01S00611.sxstge +++|* PROCESS UNLOAD CARTRIDGE ERROR AS FOLLOWS:
00625 M01S00612.sxstge +++|* -DRIVER PLACED ORIGINAL CARTRIDGE IN OUTPUT STATION.
00626 M01S00613.sxstge +++|* -ASSUME A SECOND CARTRIDGE WAS IN DESTINATION CELL.
00627 M01S00614.sxstge +++|* -ATTEMPT TO MOVE THIS 2ND CARTRIDGE TO THE OUTPUT
00628 M01S00615.sxstge +++|* STATION BY LOADING IT.
00629 M01S00616.sxstge +++|* -IF THE LOAD SUCCEEDS, DO A SECOND UNLOAD BACK TO
00630 M01S00617.sxstge +++|* THE ORIGINAL DESTINATION.
00631 M01S00618.sxstge +++|#
00632 M01S00619.sxstge +++|
00633 M01S00620.sxstge +++| HLLDSET((HLRQADR)); # SET UP SECOND LOAD #
00634 M01S00621.sxstge +++| P<HLRQ> = HLRQADR;
00635 M01S00622.sxstge +++| HLR$HPS[0] = STLBL"ST2D";
00636 M01S00623.sxstge +++| RETURN;
00637 M01S00624.sxstge +++|
00638 M01S00625.sxstge +++|ST2D: # RETURN FROM SECOND LOAD #
00639 M01S00626.sxstge +++|
00640 M01S00627.sxstge +++| IF HLR$RESP[0] EQ RESPTYP4"OK4"
00641 M01S00628.sxstge +++| THEN # UNLOAD 2ND CARTRIDGE #
00642 M01S00629.sxstge +++| BEGIN
00643 M01S00630.sxstge +++| LLR$PRCNME[0] = REQTYP4"UNLD$CART";
00644 M01S00631.sxstge +++| LLR$PRCST[0] = PROCST"INITIAL";
00645 M01S00632.sxstge +++| HLR$HPS[0] = STLBL"ST2E";
00646 M01S00633.sxstge +++| ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
00647 M01S00634.sxstge +++| RETURN;
00648 M01S00635.sxstge +++|
00649 M01S00636.sxstge +++|ST2E:
00650 M01S00637.sxstge +++| END # UNLOAD OF 2ND REQUEST #
00651 M01S00638.sxstge +++| END # LOAD OF 2ND REQUEST #
00652 M01S00639.sxstge +++|
00653 M01S00640.sxstge +++|
00654 M01S00641.sxstge +++| HLR$RESP[0] = ERRST"NOERR";
00655 M01S00642.sxstge +++| IF HLR$DRDRA[0] NQ 0
00656 M01S00643.sxstge +++| THEN # DROP *DRD* RESERVATION #
00657 M01S00644.sxstge +++| BEGIN
00658 M01S00645.sxstge +++| P<CLEAR> = HLR$DRDRA[0];
00659 M01S00646.sxstge +++| CLN = 0 ;
00660 M01S00647.sxstge +++| HLR$DRDRA[0] = 0;
00661 M01S00648.sxstge +++| END
00662 M01S00649.sxstge +++| END # PHYSICAL UNLOAD #
00663 M01S00650.sxstge +++|
00664 M01S00651.sxstge +++|
00665 M01S00652.sxstge +++| IF TDAMFC[0] EQ TDAMFCODE"NOREQ"
00666 M01S00653.sxstge +++| THEN # NO MORE FILES TO STAGE #
00667 M01S00654.sxstge +++| BEGIN
00668 M01S00655.sxstge +++|
00669 M01S00011.sxstge3 +++| IF DSC$WRESRS NQ 0
00670 M01S00012.sxstge3 +++| THEN # FORCE A DESTAGE RESTART #
00671 M01S00013.sxstge3 +++| BEGIN
00672 M01S00014.sxstge3 +++| DSC$WRESRS = 0;
00673 M01S00015.sxstge3 +++| DSC$INIT = 1;
00674 M01S00016.sxstge3 +++| END
00675 M01S00017.sxstge3 +++|
00676 M01S00656.sxstge +++| SLOWFOR I=1 STEP 1 UNTIL MAXSMUNIT
00677 M01S00657.sxstge +++| DO
00678 M01S00658.sxstge +++| BEGIN # FIND *SM* #
00679 M01S00659.sxstge +++| IF HLR$SM[0] EQ SM$ID[I]
00680 M01S00660.sxstge +++| THEN
00681 M01S00661.sxstge +++| BEGIN
Line S00662 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | sxstge3 |
Seq # *Modification Id* Act
----------------------------+
00682 M02S00662.sxstge3 ---| SM$DSRQF[I] = FALSE;
00683 M01S00018.sxstge3 +++| IF SM$DSRFW[I] NQ 0
00684 M01S00019.sxstge3 +++| THEN
00685 M01S00020.sxstge3 +++| BEGIN # DESTAGE WAITING *DRD* #
00686 M01S00021.sxstge3 +++|
00687 M01S00022.sxstge3 +++| SLOWFOR J = 0 STEP 1 UNTIL MAXSF
00688 M01S00023.sxstge3 +++| DO
00689 M01S00024.sxstge3 +++| BEGIN # CHECK FOR DESTAGE WAITING #
00690 M01S00025.sxstge3 +++|
00691 M01S00026.sxstge3 +++| IF B<J>SM$DSRFW0[I] NQ 0
00692 M01S00027.sxstge3 +++| THEN
00693 M01S00028.sxstge3 +++| BEGIN
00694 M01S00029.sxstge3 +++| B<J>SM$DSRFW0[I] = 0;
00695 M01S00030.sxstge3 +++| SCR$WTDRD[J] = FALSE;
00696 M01S00031.sxstge3 +++| DSC$INIT = 1;
00697 M01S00032.sxstge3 +++| GOTO FREE;
00698 M01S00033.sxstge3 +++| END
00699 M01S00034.sxstge3 +++| END # COMPLETED CHECK OF WAITING #
00700 M01S00035.sxstge3 +++| END
00701 M01S00663.sxstge +++| END
00702 M01S00664.sxstge +++| END
00703 M01S00665.sxstge +++|
00704 M01S00036.sxstge3 +++|FREE:
00705 M01S00666.sxstge +++|
00706 M01S00667.sxstge +++| IF HLR$DRDRA[0] NQ 0
00707 M01S00668.sxstge +++| THEN # DROP *DRD* RESERVATION #
00708 M01S00669.sxstge +++| BEGIN
00709 M01S00670.sxstge +++| P<CLEAR> = HLR$DRDRA[0];
00710 M01S00671.sxstge +++| CLN = 0;
00711 M01S00672.sxstge +++| END
00712 M01S00673.sxstge +++|
00713 M01S00674.sxstge +++| HLR$HPS[0] = PROCST"COMPLETE";
00714 M01S00675.sxstge +++| RETURN;
00715 M01S00676.sxstge +++| END
00716 M01S00677.sxstge +++|
00717 M01S00678.sxstge +++| IF HLR$PRU[0] NQ 0
00718 M01S00679.sxstge +++| THEN # CONTINED AU FROM AN OTHER CARTRIDGE #
00719 M01S00680.sxstge +++| BEGIN
00720 M01S00681.sxstge +++| HLR$CSNTPS[0] = HLR$CSNTCU[0];
00721 M01S00682.sxstge +++| END
00722 M01S00683.sxstge +++|
00723 M01S00684.sxstge +++| END # STEP 2 #
00724 M01S00685.sxstge +++|
00725 M01S00686.sxstge +++| CONTROL EJECT;
00726 M01S00687.sxstge +++|
00727 M01S00688.sxstge +++|#
00728 M01S00689.sxstge +++|* STEP 3 - LOAD NEXT CARTRIDGE, IF NEEDED.
00729 M01S00690.sxstge +++|* - ACQUIRE *FCT* ENTRY FOR NEW CARTRIDGE.
00730 M01S00691.sxstge +++|* - SET UP *HLRQ* FIELDS TO IDENTIFY CARTRIDGE.
00731 M01S00692.sxstge +++|* - USE *HLLOAD* TO DO THE PHYSICAL LOAD.
00732 M01S00693.sxstge +++|* - SET THE FREE FILE FLAG IN THE *HLRQ* IF ITS
00733 M01S00694.sxstge +++|* SET IN THE *FCT*.
00734 M01S00695.sxstge +++|#
00735 M01S00696.sxstge +++|
00736 M01S00697.sxstge +++|ST3A: # TO RETRY CALL TO *ACQ$FCT* #
00737 M01S00698.sxstge +++| SLOWFOR I=1 STEP 1 UNTIL MAXSMUNIT
00738 M01S00699.sxstge +++| DO
00739 M01S00700.sxstge +++| BEGIN # FIND *SM* #
00740 M01S00701.sxstge +++| IF HLR$SM[0] EQ SM$ID[I]
00741 M01S00702.sxstge +++| THEN
00742 M01S00703.sxstge +++| BEGIN
00743 M01S00704.sxstge +++| GOTO SMFOUND;
00744 M01S00705.sxstge +++| END
00745 M01S00706.sxstge +++| END
00746 M01S00707.sxstge +++|
00747 M01S00708.sxstge +++|SMFOUND:
00748 M01S00709.sxstge +++|
00749 M01S00710.sxstge +++| DRDCOUNT = 0;
00750 M01S00711.sxstge +++| FULL = FALSE;
00751 M01S00712.sxstge +++|
00752 M01S00713.sxstge +++| IF D0$ON[I]
00753 M01S00714.sxstge +++| THEN
00754 M01S00715.sxstge +++| BEGIN
00755 M01S00716.sxstge +++| DRDCOUNT = 1;
00756 M01S00717.sxstge +++| END
00757 M01S00718.sxstge +++|
00758 M01S00719.sxstge +++| IF D1$ON[I]
00759 M01S00720.sxstge +++| THEN
00760 M01S00721.sxstge +++| BEGIN
00761 M01S00722.sxstge +++| DRDCOUNT = DRDCOUNT + 1;
00762 M01S00723.sxstge +++| END
00763 M01S00724.sxstge +++|
00764 M01S00725.sxstge +++| IF SM$REQRES1[I] NQ 0
00765 M01S00726.sxstge +++| AND SM$REQRES2[I] NQ 0
00766 M01S00727.sxstge +++| THEN
00767 M01S00728.sxstge +++| BEGIN
00768 M01S00729.sxstge +++| FULL = TRUE;
00769 M01S00730.sxstge +++| END
00770 M01S00731.sxstge +++|
00771 M01S00732.sxstge +++| IF DRDCOUNT EQ 1
00772 M01S00733.sxstge +++| THEN
00773 M01S00734.sxstge +++| BEGIN
00774 M01S00735.sxstge +++| IF (SM$REQRES1[I] NQ 0)
00775 M01S00736.sxstge +++| OR (SM$REQRES2[I] NQ 0)
00776 M01S00737.sxstge +++| THEN
00777 M01S00738.sxstge +++| BEGIN
00778 M01S00739.sxstge +++| FULL = TRUE;
00779 M01S00740.sxstge +++| END
00780 M01S00741.sxstge +++| END
00781 M01S00742.sxstge +++|
00782 M01S00743.sxstge +++| HLR$HPS[0] = STLBL"ST3A";
00783 M01S00744.sxstge +++|
00784 M01S00745.sxstge +++| IF HLR$DRDRA EQ 0
00785 M01S00746.sxstge +++| THEN
00786 M01S00747.sxstge +++| BEGIN
00787 M01S00748.sxstge +++| TTDAMSBF = HLR$SBF[0];
00788 M01S00749.sxstge +++| TFCT = HLR$FCTXN[0];
00789 M01S00002.msea026 +++| TFAM = HLR$FAM[0];
00790 M01S00750.sxstge +++|
00791 M01S00751.sxstge +++| IF NOT SM$LLRQ1[I]
00792 M01S00752.sxstge +++| THEN
00793 M01S00753.sxstge +++| BEGIN
00794 M01S00754.sxstge +++|
00795 M01S00755.sxstge +++| IF SM$REQRES1[I] NQ 0
00796 M01S00756.sxstge +++| AND SM$REQRES1[I] NQ HLRQADR
00797 M01S00757.sxstge +++| THEN
00798 M01S00758.sxstge +++| BEGIN
00799 M01S00759.sxstge +++| P<HLRQ> = SM$REQRES1[I];
00800 M01S00760.sxstge +++|
00801 M01S00761.sxstge +++| IF HLR$FCTX[0] NQ 0
00802 M01S00762.sxstge +++| THEN
00803 M01S00763.sxstge +++| BEGIN
00804 M01S00764.sxstge +++| CURFCT = HLR$FCTX[0];
00805 M01S00765.sxstge +++| END
00806 M01S00766.sxstge +++| ELSE
00807 M01S00767.sxstge +++| BEGIN
00808 M01S00768.sxstge +++| CURFCT = HLR$ASAFCT[0];
00809 M01S00769.sxstge +++| END
00810 M01S00770.sxstge +++|
00811 M01S00771.sxstge +++|
Line S00772 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | msea026 |
Seq # *Modification Id* Act
----------------------------+
00812 M02S00772.msea026 ---| IF TFCT EQ CURFCT
Line S00773 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | msea026 |
Seq # *Modification Id* Act
----------------------------+
00813 M02S00773.msea026 ---| AND TTDAMSBF EQ HLR$SBF[0]
00814 M01S00003.msea026 +++| IF (TFCT EQ CURFCT)
00815 M01S00004.msea026 +++| AND (TTDAMSBF EQ HLR$SBF[0])
00816 M01S00005.msea026 +++| AND (TFAM EQ HLR$FAM[0])
00817 M01S00774.sxstge +++| THEN # REQUESTING CARTRIDGE MOUNTED #
00818 M01S00775.sxstge +++| BEGIN
00819 M01S00776.sxstge +++|NEXTHLRQ:
00820 M01S00777.sxstge +++| IF HLR$HLRQW[0] EQ 0
00821 M01S00778.sxstge +++| THEN
00822 M01S00779.sxstge +++| BEGIN # END OF *HLRQ* WRITING CARTRIDGE #
00823 M01S00780.sxstge +++| HLR$HLRQW[0] = HLRQADR;
00824 M01S00781.sxstge +++| P<HLRQ> = HLRQADR;
00825 M01S00782.sxstge +++| STG$MSK = 0;
00826 M01S00783.sxstge +++| RETURN;
00827 M01S00784.sxstge +++| END
00828 M01S00785.sxstge +++| ELSE
00829 M01S00786.sxstge +++| BEGIN # FIND END OF *HLRQ* WRITING #
00830 M01S00787.sxstge +++| P<HLRQ> = HLR$HLRQW[0];
00831 M01S00788.sxstge +++| GOTO NEXTHLRQ;
00832 M01S00789.sxstge +++| END
00833 M01S00790.sxstge +++| END
00834 M01S00791.sxstge +++| END
00835 M01S00792.sxstge +++| END # SM$LLRQ1 CHECK #
00836 M01S00793.sxstge +++|
00837 M01S00794.sxstge +++| IF NOT SM$LLRQ2[I]
00838 M01S00795.sxstge +++| THEN
00839 M01S00796.sxstge +++| BEGIN
00840 M01S00797.sxstge +++|
00841 M01S00798.sxstge +++| IF SM$REQRES2[I] NQ 0
00842 M01S00799.sxstge +++| AND SM$REQRES2[I] NQ HLRQADR
00843 M01S00800.sxstge +++| THEN
00844 M01S00801.sxstge +++| BEGIN
00845 M01S00802.sxstge +++| P<HLRQ> = SM$REQRES2[I];
00846 M01S00803.sxstge +++|
00847 M01S00804.sxstge +++| IF HLR$FCTX[0] NQ 0
00848 M01S00805.sxstge +++| THEN
00849 M01S00806.sxstge +++| BEGIN
00850 M01S00807.sxstge +++| CURFCT = HLR$FCTX[0];
00851 M01S00808.sxstge +++| END
00852 M01S00809.sxstge +++| ELSE
00853 M01S00810.sxstge +++| BEGIN
00854 M01S00811.sxstge +++| CURFCT = HLR$ASAFCT[0];
00855 M01S00812.sxstge +++| END
00856 M01S00813.sxstge +++|
00857 M01S00814.sxstge +++|
Line S00815 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | msea026 |
Seq # *Modification Id* Act
----------------------------+
00858 M02S00815.msea026 ---| IF TFCT EQ CURFCT
Line S00816 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | msea026 |
Seq # *Modification Id* Act
----------------------------+
00859 M02S00816.msea026 ---| AND TTDAMSBF EQ HLR$SBF[0]
00860 M01S00006.msea026 +++| IF (TFCT EQ CURFCT)
00861 M01S00007.msea026 +++| AND (TTDAMSBF EQ HLR$SBF[0])
00862 M01S00008.msea026 +++| AND (TFAM EQ HLR$FAM[0])
00863 M01S00817.sxstge +++| THEN # REQUESTING CARTRIDGE MOUNTED #
00864 M01S00818.sxstge +++| BEGIN
00865 M01S00819.sxstge +++|NEXTHLRQ1:
00866 M01S00820.sxstge +++| IF HLR$HLRQW[0] EQ 0
00867 M01S00821.sxstge +++| THEN
00868 M01S00822.sxstge +++| BEGIN # END OF *HLRQ* WRITING CARTRIDGE #
00869 M01S00823.sxstge +++| HLR$HLRQW[0] = HLRQADR;
00870 M01S00824.sxstge +++| P<HLRQ> = HLRQADR;
00871 M01S00825.sxstge +++| STG$MSK = 0;
00872 M01S00826.sxstge +++| RETURN;
00873 M01S00827.sxstge +++| END
00874 M01S00828.sxstge +++| ELSE
00875 M01S00829.sxstge +++| BEGIN # FIND END OF *HLRQ* WRITING #
00876 M01S00830.sxstge +++| P<HLRQ> = HLR$HLRQW[0];
00877 M01S00831.sxstge +++| GOTO NEXTHLRQ1;
00878 M01S00832.sxstge +++| END
00879 M01S00833.sxstge +++| END
00880 M01S00834.sxstge +++| END
00881 M01S00835.sxstge +++| END # SM$LLRQ2 CHECK #
00882 M01S00836.sxstge +++|
00883 M01S00837.sxstge +++| P<HLRQ> = HLRQADR;
00884 M01S00838.sxstge +++|
00885 M01S00002.sxstge2 +++| FCTQADDR = CHN$BOC[LCHN"FCT$FRSPC"];
00886 M01S00839.sxstge +++| IF FULL
00887 M01S00003.sxstge2 +++| OR (FCTQADDR EQ 0)
00888 M01S00840.sxstge +++| THEN
00889 M01S00841.sxstge +++| BEGIN
00890 M01S00842.sxstge +++| ADD$LNK(HLRQADR,LCHN"HL$DRDRESW",0);
00891 M01S00843.sxstge +++| RETURN;
00892 M01S00844.sxstge +++| END
00893 M01S00845.sxstge +++|
00894 M01S00846.sxstge +++| ELSE
00895 M01S00847.sxstge +++| BEGIN
00896 M01S00848.sxstge +++| IF SM$REQRES1[I] EQ 0
00897 M01S00849.sxstge +++| THEN
00898 M01S00850.sxstge +++| BEGIN
00899 M01S00851.sxstge +++| SM$REQRES1[I] = HLRQADR;
00900 M01S00852.sxstge +++| HLR$DRDRA[0] = LOC(SM$REQRES1[I]);
00901 M01S00853.sxstge +++| END
00902 M01S00854.sxstge +++|
00903 M01S00855.sxstge +++| ELSE
00904 M01S00856.sxstge +++| BEGIN
00905 M01S00857.sxstge +++| SM$REQRES2[I] = HLRQADR;
00906 M01S00858.sxstge +++| HLR$DRDRA[0] = LOC(SM$REQRES2[I]);
00907 M01S00859.sxstge +++| END
00908 M01S00860.sxstge +++| END # RESERVE OF *DRD* #
00909 M01S00861.sxstge +++| END # DRD RESERVE #
00910 M01S00862.sxstge +++|
00911 M01S00863.sxstge +++|ST3B: # TO RETRY CALL TO *ACQ$FCT* #
00912 M01S00864.sxstge +++| IF HLR$FCTQ[0] EQ 0
00913 M01S00865.sxstge +++| THEN
00914 M01S00866.sxstge +++| BEGIN # STEP 3 #
00915 M01S00867.sxstge +++| HLR$FCTX[0] = HLR$FCTXN[0];
00916 M01S00868.sxstge +++| ACQ$FCT(TDAMFAM[0],TDAMSBF[0],HLR$SM[0],HLR$FCTX[0], ##
00917 M01S00869.sxstge +++| QADDR,HLRQADR,STAT);
00918 M01S00870.sxstge +++|
00919 M01S00871.sxstge +++| IF STAT NQ CMASTAT"NOERR"
00920 M01S00872.sxstge +++| THEN
00921 M01S00873.sxstge +++| BEGIN
00922 M01S00874.sxstge +++| STERCAT(HLRQADR,STAT);
00923 M01S00875.sxstge +++| HLR$HPS[0] = STLBL"ST3B"; # IF WAIT FOR INTERLOCK #
Line S00876 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | msea027 |
Seq # *Modification Id* Act
----------------------------+
00924 M02S00876.msea027 ---| GOTO STGERR;
00925 M01S00001.msea027 +++| IF HLR$RESP[0] EQ ERRST"WAIT"
00926 M01S00002.msea027 +++| THEN
00927 M01S00003.msea027 +++| BEGIN
00928 M01S00004.msea027 +++| RETURN;
00929 M01S00005.msea027 +++| END
00930 M01S00006.msea027 +++| ELSE
00931 M01S00007.msea027 +++| BEGIN
00932 M01S00008.msea027 +++| GOTO STGERR;
00933 M01S00009.msea027 +++| END
00934 M01S00877.sxstge +++| END
00935 M01S00878.sxstge +++|
00936 M01S00879.sxstge +++|#
00937 M01S00880.sxstge +++| REM - CHANGE STERCAT TO REPLY "TEMPERR" NOT ABANDON.
00938 M01S00881.sxstge +++|#
00939 M01S00882.sxstge +++|
00940 M01S00883.sxstge +++|#
00941 M01S00884.sxstge +++|* UPDATE *HLRQ* TO REFLECT THIS CARTRIDGE.
00942 M01S00885.sxstge +++|#
00943 M01S00886.sxstge +++|
00944 M01S00887.sxstge +++| HLR$FCTQ[0] = QADDR;
00945 M01S00888.sxstge +++| P<FCT> = QADDR + FCTQHL;
00946 M01S00889.sxstge +++|
00947 M01S00890.sxstge +++|#
00948 M01S00891.sxstge +++|* CHECK FOR ZERO *FCT* ENTRY.
00949 M01S00892.sxstge +++|#
00950 M01S00893.sxstge +++|
00951 M01S00894.sxstge +++| IF FCT$CSND[0] EQ ""
00952 M01S00895.sxstge +++| OR FCT$1ST[0] EQ 0
00953 M01S00896.sxstge +++| THEN
00954 M01S00897.sxstge +++| BEGIN
00955 M01S00898.sxstge +++| STAT = CMASTAT"NOSUBCAT";
00956 M01S00899.sxstge +++| STERCAT(HLRQADR,STAT);
00957 M01S00900.sxstge +++| GOTO STGERR;
00958 M01S00901.sxstge +++| END
00959 M01S00902.sxstge +++|
00960 M01S00903.sxstge +++| HLR$Y[0] = FCT$Y[0];
00961 M01S00904.sxstge +++| HLR$Z[0] = FCT$Z[0];
00962 M01S00905.sxstge +++| HLR$CSND[0] = FCT$CSND[0];
00963 M01S00906.sxstge +++| HLR$CCOD[0] = FCT$CCOD[0];
00964 M01S00907.sxstge +++|
00965 M01S00908.sxstge +++|#
00966 M01S00909.sxstge +++|* LOAD CARTRIDGE USING *HLLOAD*.
00967 M01S00910.sxstge +++|#
00968 M01S00911.sxstge +++|
00969 M01S00912.sxstge +++| HLR$HPS[0] = STLBL"ST3C";
00970 M01S00913.sxstge +++|
00971 M01S00914.sxstge +++| IF HLR$LRQADR[0] EQ 0
00972 M01S00915.sxstge +++| THEN
00973 M01S00916.sxstge +++| BEGIN
00974 M01S00917.sxstge +++| HLLDSET((HLRQADR)); # MOVE *HLRQ* DATA TO *LLRQ* #
00975 M01S00918.sxstge +++| MSGAFDF("I","LD",0,HLRQADR);
00976 M01S00919.sxstge +++| RETURN; # WAIT LOAD OF CARTRIDGE #
00977 M01S00920.sxstge +++|
00978 M01S00921.sxstge +++|ST3C: # RETURN FROM DRIVER LOAD #
00979 M01S00922.sxstge +++|
00980 M01S00923.sxstge +++| HLLOAD((HLRQADR)); # CHECK RETURN CODES #
Line S00924 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | sxstge3 |
Seq # *Modification Id* Act
----------------------------+
00981 M02S00924.sxstge3 ---| END
00982 M01S00037.sxstge3 +++| P<HLRQ> = HLRQADR;
00983 M01S00038.sxstge3 +++| P<FCT> = HLR$FCTQ[0] + FCTQHL;
00984 M01S00039.sxstge3 +++| END
00985 M01S00925.sxstge +++|
00986 M01S00926.sxstge +++| IF HLR$RESP[0] NQ ERRST"NOERR"
00987 M01S00927.sxstge +++| THEN
00988 M01S00928.sxstge +++| BEGIN
00989 M01S00929.sxstge +++| HLR$FCTX[0] = 0;
00990 M01S00930.sxstge +++| IF HLR$RESP[0] EQ ERRST"RETRY"
00991 M01S00931.sxstge +++| THEN
00992 M01S00932.sxstge +++| BEGIN
Line S00933 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | sxstge3 |
Seq # *Modification Id* Act
----------------------------+
00993 M02S00933.sxstge3 ---| HLR$FCTQ[0] = 0;
00994 M01S00040.sxstge3 +++|
00995 M01S00041.sxstge3 +++| IF HLR$FCTQ[0] NQ 0
00996 M01S00042.sxstge3 +++| THEN
00997 M01S00043.sxstge3 +++| BEGIN # RELEASE *FCT* TABLE #
00998 M01S00044.sxstge3 +++| RLS$FCT(HLR$FCTQ[0],0,STAT);
00999 M01S00045.sxstge3 +++| HLR$FCTQ[0] = 0;
01000 M01S00046.sxstge3 +++| END
01001 M01S00047.sxstge3 +++|
01002 M01S00934.sxstge +++| GOTO RETRYFILE;
01003 M01S00935.sxstge +++| END
01004 M01S00936.sxstge +++|
01005 M01S00937.sxstge +++| ELSE
01006 M01S00938.sxstge +++| BEGIN
01007 M01S00939.sxstge +++| GOTO STGERR;
01008 M01S00940.sxstge +++| END
01009 M01S00941.sxstge +++|
01010 M01S00942.sxstge +++| END
01011 M01S00943.sxstge +++|
01012 M01S00944.sxstge +++| END # STEP 3 #
01013 M01S00945.sxstge +++|
01014 M01S00946.sxstge +++| CONTROL EJECT;
01015 M01S00947.sxstge +++|
01016 M01S00948.sxstge +++|#
01017 M01S00949.sxstge +++|* STEP 4 - COPY THE NEXT VOLUME OF DATA TO DISK.
01018 M01S00950.sxstge +++|* - ISSUE ACCOUNT-DAYFILE MESSAGE, IF FIRST VOLUME.
01019 M01S00951.sxstge +++|* - VERIFY CHAIN CONTROL VALUES ARE CONSISTENT WITH
01020 M01S00952.sxstge +++|* WITH FIRST VOLUME STATUS.
01021 M01S00953.sxstge +++|* - SET FREE FILE FLAG IF AU CONFLICT FLAG IS SET.
01022 M01S00954.sxstge +++|* - USE *HLCPYCD* TO DO THE I/O.
01023 M01S00955.sxstge +++|* - IF A READ ERROR OCCURS, TRY AGAIN ON OTHER *DRD*.
01024 M01S00956.sxstge +++|#
01025 M01S00957.sxstge +++|
01026 M01S00958.sxstge +++| HLR$FFF[0] = HLR$FFF[0] OR FCT$FCF[0];
01027 M01S00959.sxstge +++|
01028 M01S00960.sxstge +++| IF HLR$FVOL[0]
01029 M01S00961.sxstge +++| THEN
01030 M01S00962.sxstge +++| BEGIN
01031 M01S00963.sxstge +++| MSGAFDF("B","BS",0,HLRQADR); # INDICATE START OF STAGE #
01032 M01S00964.sxstge +++| END
01033 M01S00965.sxstge +++|
01034 M01S00966.sxstge +++|
01035 M01S00967.sxstge +++|NEXTVOL: # USED TO COPY NEXT VOLUME FROM
01036 M01S00968.sxstge +++| SAME CARTRIDGE #
01037 M01S00969.sxstge +++|
01038 M01S00970.sxstge +++|#
01039 M01S00971.sxstge +++|* VERIFY THE AU TO BE READ ARE VALID.
01040 M01S00972.sxstge +++|#
01041 M01S00973.sxstge +++|
01042 M01S00974.sxstge +++| TEMP = HLR$VOLAU[0];
01043 M01S00975.sxstge +++| SETFCTX(TEMP);
01044 M01S00976.sxstge +++| HLR$VOLLN[0] = FCT$LEN(FWD,FPS) + 1;
01045 M01S00977.sxstge +++| TEMP1 = FCT$FLGS1(FWD,FPS);
01046 M01S00978.sxstge +++|
01047 M01S00979.sxstge +++| IF (TEMP LS 1) ##
01048 M01S00980.sxstge +++| OR (TEMP1 EQ 0) # NOT ALLOCATED #
01049 M01S00981.sxstge +++| OR (TEMP+HLR$VOLLN[0]-1 GR FCT$AVOT[0])
01050 M01S00982.sxstge +++| THEN # AU ARE OUT OF RANGE #
01051 M01S00983.sxstge +++| BEGIN
01052 M01S00984.sxstge +++| HLR$RESP[0] = ERRST"PERM";
01053 M01S00985.sxstge +++| HLR$PEF[0] = AFPSE;
01054 M01S00986.sxstge +++| HLR$ERRC[0] = STGERRC"AURNG";
01055 M01S00987.sxstge +++| GOTO STGERR;
01056 M01S00988.sxstge +++| END
01057 M01S00989.sxstge +++|
01058 M01S00990.sxstge +++|
01059 M01S00991.sxstge +++| TEMP = FCT$CC(FWD,FPS);
01060 M01S00992.sxstge +++| FLAG = (TEMP EQ CHAINCON"FIRST") ##
01061 M01S00993.sxstge +++| OR (TEMP EQ CHAINCON"ONLY");
01062 M01S00994.sxstge +++|
01063 M01S00995.sxstge +++| IF ( (NOT FLAG) AND HLR$FVOL[0] ) ##
01064 M01S00996.sxstge +++| OR ( (NOT HLR$FVOL[0]) AND FLAG) ##
01065 M01S00997.sxstge +++| OR (FCT$CAUF(FWD,FPS) EQ 1)
01066 M01S00998.sxstge +++| THEN # THEY ARE NOT CONSISTENT #
01067 M01S00999.sxstge +++| BEGIN
01068 M01S01000.sxstge +++| FCT$AUCF(FWD,FPS) = 1;
01069 M01S01001.sxstge +++| END
01070 M01S01002.sxstge +++|
01071 M01S01003.sxstge +++|#
01072 M01S01004.sxstge +++|* SET FREE FILE FLAG IF AU CONFLICT OR FROZEN CHAIN FLAGS ARE SET.
01073 M01S01005.sxstge +++|#
01074 M01S01006.sxstge +++|
01075 M01S01007.sxstge +++| IF ( FCT$AUCF(FWD,FPS) + FCT$FRCF(FWD,FPS) ) NQ 0
01076 M01S01008.sxstge +++| THEN
01077 M01S01009.sxstge +++| BEGIN
01078 M01S01010.sxstge +++| HLR$FFF[0] = TRUE;
01079 M01S01011.sxstge +++| END
01080 M01S01012.sxstge +++|
01081 M01S01013.sxstge +++| HLR$HPS[0] = STLBL"ST4A";
01082 M01S01014.sxstge +++| P<LLRQ> = HLR$LRQADR[0];
01083 M01S01015.sxstge +++| LLR$PRCNME[0] = REQTYP4"CPY$AD";
01084 M01S01016.sxstge +++| LLR$PRCST[0] = PROCST"INITIAL";
01085 M01S01017.sxstge +++| LLR$DR[0] = 0;
01086 M01S01018.sxstge +++| ADD$LNK(HLR$LRQADR[0],LCHN"LL$READY",0);
01087 M01S01019.sxstge +++| RETURN; # START COPY #
01088 M01S01020.sxstge +++|
01089 M01S01021.sxstge +++|ST4A: # RE-ENTER AFTER COPY COMPLETE #
01090 M01S01022.sxstge +++|
01091 M01S01023.sxstge +++| HLCPYCD((HLRQADR)); # CHECK RETURN CODES #
01092 M01S01024.sxstge +++| P<HLRQ> = HLRQADR;
01093 M01S00048.sxstge3 +++| P<FCT> = HLR$FCTQ + FCTQHL;
01094 M01S01025.sxstge +++| IF HLR$RESP EQ ERRST"RETRY"
01095 M01S01026.sxstge +++| THEN
01096 M01S01027.sxstge +++| BEGIN
01097 M01S01028.sxstge +++| HLR$RESP[0] = ERRST"NOERR";
01098 M01S01029.sxstge +++| HLR$UNLD[0] = TRUE;
01099 M01S01030.sxstge +++| GOTO RETRYFILE;
01100 M01S01031.sxstge +++| END
01101 M01S01032.sxstge +++|
01102 M01S01033.sxstge +++| IF HLR$RESP[0] NQ ERRST"NOERR"
01103 M01S01034.sxstge +++| THEN
01104 M01S01035.sxstge +++| BEGIN
01105 M01S01036.sxstge +++| GOTO STGERR;
01106 M01S01037.sxstge +++| END
01107 M01S01038.sxstge +++|
01108 M01S01039.sxstge +++| HLR$FVOL[0] = FALSE;
01109 M01S01040.sxstge +++|
01110 M01S01041.sxstge +++|#
01111 M01S01042.sxstge +++|* STEP 4 - END.
01112 M01S01043.sxstge +++|#
01113 M01S01044.sxstge +++|
01114 M01S01045.sxstge +++| CONTROL EJECT;
01115 M01S01046.sxstge +++|
01116 M01S01047.sxstge +++|#
01117 M01S01048.sxstge +++|* STEP 5 - FINISH COPYING FILE TO DISK.
01118 M01S01049.sxstge +++|* - ALL DONE IF CHAIN CONTROL = ONLY OR LAST.
01119 M01S01050.sxstge +++|* - PREPARE TO DO NEXT VOLUME.
01120 M01S01051.sxstge +++|* - REPEAT STEP 4, COPY VOLUME, IF NO OVERFLOW.
01121 M01S01052.sxstge +++|* - REPEAT STEPS 2-4, IF OVERFLOW.
01122 M01S01053.sxstge +++|#
01123 M01S01054.sxstge +++|
01124 M01S01055.sxstge +++| IF HLR$RESP[0] EQ ERRST"NOERR" ##
01125 M01S01056.sxstge +++| AND NOT HLR$EOI[0]
01126 M01S01057.sxstge +++| THEN # COPY NEXT VOLUME #
01127 M01S01058.sxstge +++| BEGIN # STEP 5 #
01128 M01S01059.sxstge +++| SETFCTX(HLR$VOLAU[0]);
01129 M01S01060.sxstge +++|
01130 M01S01061.sxstge +++| HLR$VOLAUP[0] = HLR$VOLAU[0];
01131 M01S01062.sxstge +++| HLR$VOLLNP[0] = HLR$VOLLN[0];
01132 M01S01063.sxstge +++|
01133 M01S01064.sxstge +++| HLR$VOLAU[0] = FCT$LINK(FWD,FPS);
01134 M01S01065.sxstge +++| TEMP = FCT$CLKOCL(FWD,FPS);
01135 M01S01066.sxstge +++|
01136 M01S01067.sxstge +++| IF TEMP EQ 0
01137 M01S01068.sxstge +++| THEN # NO OVERFLOW #
01138 M01S01069.sxstge +++| BEGIN
01139 M01S01070.sxstge +++| GOTO NEXTVOL;
01140 M01S01071.sxstge +++| END
01141 M01S01072.sxstge +++|
01142 M01S01073.sxstge +++| TEMP = FCT$OCLNK(TEMP);
01143 M01S01074.sxstge +++| HLR$FCTXN[0] = (HLR$FCTX[0]/MAXGRT)*MAXGRT + TEMP;
01144 M01S01075.sxstge +++| GOTO UNLOAD;
01145 M01S01076.sxstge +++|
01146 M01S01077.sxstge +++| END # STEP 5 #
01147 M01S01078.sxstge +++|
01148 M01S01079.sxstge +++| CONTROL EJECT;
01149 M01S01080.sxstge +++|
01150 M01S01081.sxstge +++|#
01151 M01S01082.sxstge +++|* STEP 6 - RESTORE DISK IMAGE.
01152 M01S01083.sxstge +++|* - VERIFY FILE LENGTH IS OK.
01153 M01S01084.sxstge +++|* - IF NO ERRRORS, USE *SETDA* OR *UREPLAC* TO
01154 M01S01085.sxstge +++|* UPDATE THE *PFC* ENTRY FOR THIS FILE
01155 M01S01086.sxstge +++|* TO INDICATE THE STAGE WAS SUCCESSFUL.
01156 M01S01087.sxstge +++|* - IF THE FREE FILE FLAG IS SET, USE *SETAF* (*AFOBS* )
01157 M01S01088.sxstge +++|* TO CLEAR THE *ASA* VALUE FOR THE FILE.
01158 M01S01089.sxstge +++|#
01159 M01S01090.sxstge +++|
01160 M01S01091.sxstge +++| TEMP = TDAMFLN[0] - HLR$PRU[0];
01161 M01S01092.sxstge +++| IF NOT TDAMIA[0]
01162 M01S01093.sxstge +++| THEN
01163 M01S01094.sxstge +++| BEGIN
01164 M01S01095.sxstge +++| TEMP = TEMP - 1;
01165 M01S01096.sxstge +++| END
01166 M01S01097.sxstge +++|
01167 M01S01098.sxstge +++| IF TDAMFLN[0] EQ 1 ##
01168 M01S01099.sxstge +++| AND TDAMAFVER[0]
01169 M01S01100.sxstge +++| THEN
01170 M01S01101.sxstge +++| BEGIN # FILE RETURNED BY PFDUMP #
01171 M01S01102.sxstge +++| TEMP = 0;
01172 M01S01103.sxstge +++| END
01173 M01S01104.sxstge +++|
01174 M01S01105.sxstge +++| IF TEMP NQ 0
01175 M01S01106.sxstge +++| THEN # FILE LENGTH ERROR #
01176 M01S01107.sxstge +++| BEGIN
01177 M01S01108.sxstge +++| HLR$RESP[0] = ERRST"PERM";
01178 M01S01109.sxstge +++| HLR$PEF[0] = AFPSE;
01179 M01S01110.sxstge +++| HLR$ERRC[0] = STGERRC"LENERR";
01180 M01S01111.sxstge +++| END
01181 M01S01112.sxstge +++|
01182 M01S01113.sxstge +++|
01183 M01S01114.sxstge +++|ST6A: # TO RETRY CALL TO *SETDA* OR
01184 M01S01115.sxstge +++| *UREPLAC* #
01185 M01S01116.sxstge +++| IF HLR$RESP[0] EQ ERRST"NOERR"
01186 M01S01117.sxstge +++| THEN # FILE AT EOI #
01187 M01S01118.sxstge +++| BEGIN # STEP 6 #
01188 M01S01119.sxstge +++| NAMEC[0] = HLR$FLNM[0];
01189 M01S01120.sxstge +++| NAMEC[1] = TDAMFAM[0];
01190 M01S01121.sxstge +++| NAMEC[2] = TDAMPFN[0];
01191 M01S01122.sxstge +++|
01192 M01S01123.sxstge +++| IF NOT TDAMIA[0]
01193 M01S01124.sxstge +++| THEN # DIRECT ACCESS FILE #
01194 M01S01125.sxstge +++| BEGIN
01195 M01S01126.sxstge +++| SETDA(NAME[0],PFMSTAT,6,TDAMUI[0],NAME[1], ##
01196 M01S01127.sxstge +++| TDAMPFID[0],TDAMASI[0],TDAMCDT[0],LOC(PFMRET));
01197 M01S01128.sxstge +++| END
01198 M01S01129.sxstge +++|
01199 M01S01130.sxstge +++| ELSE # INDIRECT ACCESS FILE #
01200 M01S01131.sxstge +++| BEGIN
01201 M01S01132.sxstge +++| ZSETFET(LOC(SCR$FET[0]),NAMEC[0],0,0,SFETL);
01202 M01S01133.sxstge +++| FET$DT[0] = "MS";
01203 M01S01134.sxstge +++| FET$SP[0] = TRUE;
01204 M01S01135.sxstge +++| FET$AL[0] = TDAMAL[0];
01205 M01S01136.sxstge +++| FET$EP[0] = TRUE;
01206 M01S01137.sxstge +++| FET$UP[0] = TRUE;
01207 M01S01138.sxstge +++| FET$LFN[0] = NAMEC[0];
01208 M01S01139.sxstge +++| REQWEST(FETSET[0],TMSG); # REQUEST EQUIPMENT #
01209 M01S01140.sxstge +++| IF FET$AT[0] EQ LNV # LEVEL NOT VALID #
01210 M01S01141.sxstge +++| OR FET$AT[0] EQ WEQ # EQUIPMENT UNAVAILABLE #
01211 M01S01142.sxstge +++| THEN
01212 M01S01143.sxstge +++| BEGIN
01213 M01S01144.sxstge +++| HLR$RESP[0] = ERRST"PERM";
01214 M01S01145.sxstge +++| HLR$PEF[0] = AFTMP;
01215 M01S01146.sxstge +++| HLR$ERRC[0] = STGERRC"NOLVL";
01216 M01S01147.sxstge +++| GOTO STGERR;
01217 M01S01148.sxstge +++| END
01218 M01S01149.sxstge +++|
01219 M01S01150.sxstge +++| UREPLAC(NAME[0],PFMSTAT,6,NAME[2],TDAMUI[0], ##
01220 M01S01151.sxstge +++| NAME[1],TDAMPFID[0],TDAMASI[0],TDAMCDT[0],LOC(PFMRET));
01221 M01S01152.sxstge +++|
Line S01153 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | sxstge1 |
Seq # *Modification Id* Act
----------------------------+
01222 M02S01153.sxstge1 ---| PFSTAT = -1;
01223 M01S00001.sxstge1 +++| PFMSTAT = -1;
01224 M01S01154.sxstge +++| HLR$HPS[0] = STLBL"ST6B"; # RETURN *UREPLACE* COMPLETE #
01225 M01S01155.sxstge +++| GLPFMFL = TRUE;
01226 M01S01156.sxstge +++| ADD$LNK(HLRQADR,LCHN"HL$PFMWAIT",0);
01227 M01S01157.sxstge +++| RETURN;
01228 M01S01158.sxstge +++|
01229 M01S01159.sxstge +++|
01230 M01S01160.sxstge +++| END
01231 M01S01161.sxstge +++|
01232 M01S01162.sxstge +++|ST6B:
01233 M01S01163.sxstge +++| IF PFMSTAT NQ 0
01234 M01S01164.sxstge +++| THEN
01235 M01S01165.sxstge +++| BEGIN
01236 M01S01166.sxstge +++| HLR$HPS[0] = STLBL"ST6A"; # IF WAIT FOR INTERLOCK #
01237 M01S01167.sxstge +++| HLR$ERRC[0] = STGERRC"RESTORE";
01238 M01S01168.sxstge +++| STERPFM(HLRQADR,PFMSTAT);
01239 M01S01169.sxstge +++| END
01240 M01S01170.sxstge +++|
01241 M01S01171.sxstge +++| IF HLR$RESP[0] EQ ERRST"NOERR" ##
01242 M01S01172.sxstge +++| AND HLR$FFF[0]
01243 M01S01173.sxstge +++| THEN
01244 M01S01174.sxstge +++| BEGIN
01245 M01S01175.sxstge +++|
01246 M01S01176.sxstge +++|#
01247 M01S01177.sxstge +++|* USE THE PERMANENT ERROR STATUS TO CLEAR THE *ASA* FIELD
01248 M01S01178.sxstge +++|* BY "SETTING" THE *AFOBS* FLAG.
01249 M01S01179.sxstge +++|#
01250 M01S01180.sxstge +++|
01251 M01S01181.sxstge +++| HLR$RESP[0] = ERRST"PERM";
01252 M01S01182.sxstge +++| HLR$PEF[0] = AFOBS;
01253 M01S01183.sxstge +++| HLR$ERRC[0] = STGERRC"CLRASA";
01254 M01S00002.mse0012 +++| PASS = TRUE; # CLEAR LOCATION *HLR$ERRC* AFTER MESSAGE #
01255 M01S01184.sxstge +++| END
01256 M01S01185.sxstge +++|
01257 M01S01186.sxstge +++| END # STEP 6 #
01258 M01S01187.sxstge +++|
01259 M01S01188.sxstge +++| CONTROL EJECT;
01260 M01S01189.sxstge +++|
01261 M01S01190.sxstge +++|#
01262 M01S01191.sxstge +++|* STEP 7 - PROCESS ERRORS.
01263 M01S01192.sxstge +++|* - IF K-DISPLAY MESSAGE OUTSTANDING, WAIT FOR IT.
01264 M01S01193.sxstge +++|* - IF NEED TO WAIT FOR INTERLOCK, RETURN.
01265 M01S01194.sxstge +++|* - IF PERMANENT ERROR, DO XX.
01266 M01S01195.sxstge +++|#
01267 M01S01196.sxstge +++|
01268 M01S01197.sxstge +++|STGERR: # ENTRY VIA *GOTO STGERR*
01269 M01S01198.sxstge +++| STATEMENTS #
01270 M01S01199.sxstge +++|
01271 M01S01200.sxstge +++| IF HLR$RESP[0] EQ ERRST"WAIT"
01272 M01S01201.sxstge +++| THEN
01273 M01S01202.sxstge +++| BEGIN
01274 M01S01203.sxstge +++| HLR$RESP[0] = ERRST"NOERR";
01275 M01S01204.sxstge +++| DELAY(PFM$INTV,HLRQADR,HLRQIND);
01276 M01S01205.sxstge +++| RETURN;
01277 M01S01206.sxstge +++| END
01278 M01S01207.sxstge +++|
01279 M01S01208.sxstge +++| IF HLR$RESP[0] EQ ERRST"NOERR"
01280 M01S01209.sxstge +++| THEN
01281 M01S01210.sxstge +++| BEGIN
01282 M01S01211.sxstge +++| HLR$ERRC[0] = STGERRC"NOERR";
01283 M01S01212.sxstge +++| END
01284 M01S01213.sxstge +++|
01285 M01S01214.sxstge +++| STGCNT = STGCNT + 1;
01286 M01S01215.sxstge +++| MSGAFDF("E","ES",HLR$ERRC[0],HLRQADR);
01287 M01S00003.mse0012 +++|
01288 M01S00004.mse0012 +++| IF PASS
01289 M01S00005.mse0012 +++| THEN # FREE FLAG SET - CLEAR *HLR$ERRC*#
01290 M01S00006.mse0012 +++| BEGIN
01291 M01S00007.mse0012 +++| HLR$ERRC[0] = 0;
01292 M01S00008.mse0012 +++| END
01293 M01S01216.sxstge +++|
01294 M01S01217.sxstge +++|ST7A: # ENTRY IF WAITING FOR K-DISPLAY
01295 M01S01218.sxstge +++| TO BE COMPLETE #
01296 M01S01219.sxstge +++| IF HLR$RESP[0] NQ ERRST"NOERR"
01297 M01S01220.sxstge +++| THEN
01298 M01S01221.sxstge +++| BEGIN # STEP 7 #
01299 M01S01222.sxstge +++| P<KWORD> = LOC(HLR$KREQ[0]);
01300 M01S01223.sxstge +++| IF (KW$WORD[0] NQ 0) AND NOT KW$COMP[0]
01301 M01S01224.sxstge +++| THEN
01302 M01S01225.sxstge +++| BEGIN
01303 M01S01226.sxstge +++| DELAY(KDIS$INTV,HLRQADR,HLRQIND);
01304 M01S01227.sxstge +++| HLR$HPS[0] = STLBL"ST7A";
01305 M01S01228.sxstge +++| RETURN;
01306 M01S01229.sxstge +++| END
01307 M01S01230.sxstge +++|
01308 M01S01231.sxstge +++| IF HLR$RESP[0] EQ ERRST"PERM"
01309 M01S01232.sxstge +++| THEN # SET FLAG FROM *HLR$PEF* IN *PFC*
01310 M01S01233.sxstge +++| ENTRY #
01311 M01S01234.sxstge +++| BEGIN
01312 M01S01235.sxstge +++|ST7B: # TO RETRY *SETAF* CALL #
01313 M01S01236.sxstge +++| NAMEC[0] = HLR$FLNM[0];
01314 M01S01237.sxstge +++| NAMEC[1] = TDAMFAM[0];
01315 M01S01238.sxstge +++| SETAF(NAME[0],STAT,6,TDAMUI[0],NAME[1], ##
01316 M01S01239.sxstge +++| TDAMPFID[0],TDAMASI[0],TDAMCDT[0],HLR$PEF[0],LOC(PFMRET));
01317 M01S01240.sxstge +++|
01318 M01S01241.sxstge +++| IF STAT NQ 0
01319 M01S01242.sxstge +++| THEN
01320 M01S01243.sxstge +++| BEGIN
01321 M01S01244.sxstge +++| STERPFM(HLRQADR,STAT);
01322 M01S01245.sxstge +++| IF HLR$RESP[0] EQ ERRST"WAIT"
01323 M01S01246.sxstge +++| THEN
01324 M01S01247.sxstge +++| BEGIN
01325 M01S01248.sxstge +++| HLR$HPS[0] = STLBL"ST7B";
01326 M01S01249.sxstge +++| DELAY(PFM$INTV,HLRQADR,HLRQIND);
01327 M01S01250.sxstge +++| RETURN;
01328 M01S01251.sxstge +++| END
01329 M01S01252.sxstge +++|
01330 M01S01253.sxstge +++| ELSE
01331 M01S01254.sxstge +++| BEGIN
01332 M01S01255.sxstge +++| HLR$ERRC[0] = STGERRC"SETAF";
01333 M01S01256.sxstge +++| MSGAFDF("E","ES",HLR$ERRC[0],HLRQADR);
01334 M01S01257.sxstge +++| END
01335 M01S01258.sxstge +++|
01336 M01S01259.sxstge +++| END
01337 M01S01260.sxstge +++|
01338 M01S01261.sxstge +++| HLR$RESP[0] = ERRST"PERM";
01339 M01S01262.sxstge +++| END
01340 M01S01263.sxstge +++|
01341 M01S01264.sxstge +++| END # STEP 7 #
01342 M01S01265.sxstge +++|
01343 M01S01266.sxstge +++| CONTROL EJECT;
01344 M01S01267.sxstge +++|
01345 M01S01268.sxstge +++|#
01346 M01S01269.sxstge +++|* STEP 8 - COMPLETE STAGING PROCESS.
01347 M01S01270.sxstge +++|* - RETURN STAGING FILE.
01348 M01S01271.sxstge +++|* - NOTIFY REQUESTOR.
01349 M01S01272.sxstge +++|* - GET NEXT STAGING REQUEST, IF ANY, AND RETURN
01350 M01S01273.sxstge +++|* TO *HLRQMTR*.
01351 M01S01274.sxstge +++|#
01352 M01S01275.sxstge +++|
01353 M01S01276.sxstge +++| ZSETFET(LOC(SCR$FET[0]),HLR$FLNM[0],0,0,SFETL);
01354 M01S01277.sxstge +++| RETERN(SCR$FET[0],RCL);
01355 M01S01278.sxstge +++|
01356 M01S01279.sxstge +++| IF HLR$RESP[0] EQ ERRST"NOERR" ##
01357 M01S01280.sxstge +++| OR HLR$RESP[0] EQ ERRST"PERM"
01358 M01S01281.sxstge +++| THEN # *PFC* WAS UPDATED TO SHOW STATUS
01359 M01S01282.sxstge +++| #
01360 M01S01283.sxstge +++| BEGIN
01361 M01S01284.sxstge +++| TEMP = 0;
01362 M01S01285.sxstge +++| END
01363 M01S01286.sxstge +++|
01364 M01S01287.sxstge +++| ELSE # *PFC* NOT UPDATED, *PFM* WILL
01365 M01S01288.sxstge +++| KEEP ISSUING *TDAM*S #
01366 M01S01289.sxstge +++| BEGIN
01367 M01S01290.sxstge +++| TEMP = 1;
01368 M01S01291.sxstge +++| END
01369 M01S01292.sxstge +++|
01370 M01S01293.sxstge +++| IF TDAMOSLV[0]
01371 M01S01294.sxstge +++| THEN
01372 M01S01295.sxstge +++| BEGIN
01373 M01S01296.sxstge +++| TELLSLV(TDAMSSN[0],TEMP);
01374 M01S01297.sxstge +++| END
01375 M01S01298.sxstge +++|
01376 M01S01299.sxstge +++| IF TDAMOMAST[0] ##
01377 M01S01300.sxstge +++| AND TDAMEVENT[0] NQ 0 ##
01378 M01S01301.sxstge +++| AND TEMP EQ 0
01379 M01S01302.sxstge +++| THEN
01380 M01S01303.sxstge +++| BEGIN
01381 M01S01304.sxstge +++| EESET(TDAMEVENT[0]);
01382 M01S01305.sxstge +++| END
01383 M01S01306.sxstge +++|
01384 M01S01307.sxstge +++| STNTDAM(HLRQADR);
01385 M01S01308.sxstge +++| RETURN;
01386 M01S01309.sxstge +++|
01387 M01S01310.sxstge +++|#
01388 M01S01311.sxstge +++|* END OF STEP 8.
01389 M01S01312.sxstge +++|#
01390 M01S01313.sxstge +++|
01391 M01S01314.sxstge +++| END # STAGER #
01392 M01S01315.sxstge +++|
01393 M01S01316.sxstge +++| TERM
01394 M01S01317.sxstge +++|PROC STERCAT((HLRQADR),(ERRSTAT));
01395 M01S01318.sxstge +++|
01396 M01S01319.sxstge +++|# TITLE STERCAT - PROCESS STAGE CATALOG ACCESS ERRORS. #
01397 M01S01320.sxstge +++|
01398 M01S01321.sxstge +++| BEGIN # STERCAT #
01399 M01S01322.sxstge +++|
01400 M01S01323.sxstge +++|#
01401 M01S01324.sxstge +++|** STERCAT - PROCESS STAGE CATALOG ACCESS ERRORS.
01402 M01S01325.sxstge +++|*
01403 M01S01326.sxstge +++|* *STERCAT* PROCESSES ERROR RESPONSES RETURNED TO *STAGER* FROM A
01404 M01S01327.sxstge +++|* CATALOG ACCESS REQUEST AND RETURNS A STATUS IN THE *HLRQ*
01405 M01S01328.sxstge +++|* ENTRY OF THE STAGE REQUEST.
01406 M01S01329.sxstge +++|*
01407 M01S01330.sxstge +++|* PROC STERCAT((HLRQADR),(ERRSTAT))
01408 M01S01331.sxstge +++|*
01409 M01S01332.sxstge +++|* ENTRY (HLRQADR) - ADDRESS OF *HLRQ* FOR THE STAGE REQUEST.
01410 M01S01333.sxstge +++|* (ERRSTAT) - CATALOG ACCESS ERROR CODE.
01411 M01S01334.sxstge +++|*
01412 M01S01335.sxstge +++|* EXIT (HLR$RESP[0]) - ERROR STATE.
01413 M01S01336.sxstge +++|* (VALUES DEFINED IN *COMEMSC*).
01414 M01S01337.sxstge +++|* = ERRST"WAIT".
01415 M01S01338.sxstge +++|* = ERRST"ABANDON".
01416 M01S01339.sxstge +++|#
01417 M01S01340.sxstge +++|
01418 M01S01341.sxstge +++| ITEM HLRQADR U; # *HLRQ* ENTRY ADDRESS #
01419 M01S01342.sxstge +++| ITEM ERRSTAT I; # CATALOG ACCESS ERROR CODE #
01420 M01S01343.sxstge +++|
01421 M01S01344.sxstge +++|#
01422 M01S01345.sxstge +++|**** PROC STERCAT - XREF LIST BEGIN.
01423 M01S01346.sxstge +++|#
01424 M01S01347.sxstge +++|
01425 M01S01348.sxstge +++| XREF
01426 M01S01349.sxstge +++| BEGIN
01427 M01S01350.sxstge +++| PROC ABORT; # ABORT #
01428 M01S01351.sxstge +++| PROC MESSAGE; # ISSUE MESSAGE #
01429 M01S01352.sxstge +++| END
01430 M01S01353.sxstge +++|
01431 M01S01354.sxstge +++|#
01432 M01S01355.sxstge +++|**** PROC STERCAT - XREF LIST END.
01433 M01S01356.sxstge +++|#
01434 M01S01357.sxstge +++|
01435 M01S01358.sxstge +++| DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
01436 M01S01359.sxstge +++|*CALL,COMBFAS
01437 M01S01360.sxstge +++|*CALL,COMBCMS
01438 M01S01361.sxstge +++|*CALL COMSPFM
01439 M01S01362.sxstge +++|*CALL,COMXEMC
01440 M01S01363.sxstge +++|*CALL,COMXHLR
01441 M01S01364.sxstge +++|*CALL,COMXMSC
01442 M01S01365.sxstge +++|
01443 M01S01366.sxstge +++| CONTROL EJECT;
01444 M01S01367.sxstge +++|
01445 M01S01368.sxstge +++| P<HLRQ> = HLRQADR;
01446 M01S01369.sxstge +++|
01447 M01S01370.sxstge +++| IF ERRSTAT EQ CMASTAT"INTLK"
01448 M01S01371.sxstge +++| THEN # MSF CATALOG INTERLOCKED #
01449 M01S01372.sxstge +++| BEGIN
01450 M01S01373.sxstge +++| HLR$RESP[0] = ERRST"WAIT";
01451 M01S01374.sxstge +++| RETURN;
01452 M01S01375.sxstge +++| END
01453 M01S01376.sxstge +++|
01454 M01S01377.sxstge +++| IF ERRSTAT EQ CMASTAT"NOTOPEN" ##
01455 M01S01378.sxstge +++| THEN # MSF CATALOG NOT ONLINE #
01456 M01S01379.sxstge +++| BEGIN
01457 M01S01380.sxstge +++| HLR$RESP[0] = ERRST"ABANDON";
01458 M01S01381.sxstge +++| HLR$ERRC[0] = STGERRC"CATOFFLN";
01459 M01S01382.sxstge +++| RETURN;
01460 M01S01383.sxstge +++| END
01461 M01S01384.sxstge +++|
01462 M01S01385.sxstge +++| IF ERRSTAT EQ CMASTAT"CIOERR" ##
01463 M01S01386.sxstge +++| THEN # MSF CATALOG NOT ONLINE #
01464 M01S01387.sxstge +++| BEGIN
01465 M01S01388.sxstge +++| HLR$RESP[0] = ERRST"ABANDON";
01466 M01S01389.sxstge +++| HLR$ERRC[0] = STGERRC"CATIOER";
01467 M01S01390.sxstge +++| RETURN;
01468 M01S01391.sxstge +++| END
01469 M01S01392.sxstge +++|
01470 M01S01393.sxstge +++| IF ERRSTAT EQ CMASTAT"NOSUBCAT" ##
01471 M01S01394.sxstge +++| OR ERRSTAT EQ CMASTAT"ORDERR"
01472 M01S01395.sxstge +++| THEN # OBSOLETE MSF CATALOG ONLINE #
01473 M01S01396.sxstge +++| BEGIN
01474 M01S01397.sxstge +++| HLR$RESP[0] = ERRST"PERM";
01475 M01S01398.sxstge +++| HLR$ERRC[0] = STGERRC"PFCOBS";
01476 M01S01399.sxstge +++| HLR$PEF[0] = AFPSE;
01477 M01S01400.sxstge +++| RETURN;
01478 M01S01401.sxstge +++| END
01479 M01S01402.sxstge +++|
01480 M01S01403.sxstge +++| FE$RTN[0] = "STERCAT.";
01481 M01S01404.sxstge +++| MESSAGE(FEMSG,UDFL1);
01482 M01S01405.sxstge +++| ABORT;
01483 M01S01406.sxstge +++| END # STERCAT #
01484 M01S01407.sxstge +++|
01485 M01S01408.sxstge +++| TERM
01486 M01S01409.sxstge +++|PROC STERPFM((HLRQADR),(ERRSTAT));
01487 M01S01410.sxstge +++|
01488 M01S01411.sxstge +++|# TITLE STERPFM - PROCESS STAGE *PFM* ERRORS. #
01489 M01S01412.sxstge +++|
01490 M01S01413.sxstge +++| BEGIN # STERPFM #
01491 M01S01414.sxstge +++|
01492 M01S01415.sxstge +++|#
01493 M01S01416.sxstge +++|** STERPFM - PROCESS STAGE *PFM* ERRORS.
01494 M01S01417.sxstge +++|*
01495 M01S01418.sxstge +++|* *STERPFM* PROCESSES ERROR RESPONSES RETURNED TO CALLERS FROM A
01496 M01S01419.sxstge +++|* *PFM* REQUEST AND RETURNS A STATUS IN THE *HLRQ* ENTRY OF THE
01497 M01S01420.sxstge +++|* STAGE REQUEST.
01498 M01S01421.sxstge +++|*
01499 M01S01422.sxstge +++|* PROC STERPFM((HLRQADR),(ERRSTAT))
01500 M01S01423.sxstge +++|*
01501 M01S01424.sxstge +++|* ENTRY (HLRQADR) - ADDRESS OF *HLRQ* FOR THE STAGE REQUEST.
01502 M01S01425.sxstge +++|* (ERRSTAT) - *PFM* ERROR CODE.
01503 M01S01426.sxstge +++|*
01504 M01S01427.sxstge +++|* EXIT (HLR$RESP[0]) - ERROR STATE.
01505 M01S01428.sxstge +++|* (VALUES DEFINED IN *COMEMSC*).
01506 M01S01429.sxstge +++|* = ERRST"NOERR".
01507 M01S01430.sxstge +++|* = ERRST"WAIT".
01508 M01S01431.sxstge +++|* = ERRST"ABANDON".
01509 M01S01432.sxstge +++|* IF THE ERROR STATE INDICATES A DELAY CONDITION
01510 M01S01433.sxstge +++|* (*ERRST"WAIT"*) THEN THE STAGE REQUEST HAS BEEN ADDED
01511 M01S01434.sxstge +++|* TO THE *HLRQ* DELAY CHAIN AND WILL BE PUT BACK ON THE
01512 M01S01435.sxstge +++|* *HLRQ* READY CHAIN AFTER A DELAY TIME HAS EXPIRED.
01513 M01S01436.sxstge +++|* PROCESSING WILL CONTINUE IN THE ROUTINE INDICATED
01514 M01S01437.sxstge +++|* BY *HLR$PN[0]* AND AT THE PROCESS STATE *HLR$PS[0]*.
01515 M01S01438.sxstge +++|#
01516 M01S01439.sxstge +++|
01517 M01S01440.sxstge +++| ITEM HLRQADR U; # *HLRQ* ENTRY ADDRESS #
01518 M01S01441.sxstge +++| ITEM ERRSTAT I; # *PFM* ERROR CODE #
01519 M01S01442.sxstge +++|
01520 M01S01443.sxstge +++|#
01521 M01S01444.sxstge +++|**** PROC STERPFM - XREF LIST BEGIN.
01522 M01S01445.sxstge +++|#
01523 M01S01446.sxstge +++|
01524 M01S01447.sxstge +++| XREF
01525 M01S01448.sxstge +++| BEGIN
01526 M01S01449.sxstge +++| PROC ABORT; # ABORT #
01527 M01S01450.sxstge +++| PROC MESSAGE; # ISSUE MESSAGE #
01528 M01S01451.sxstge +++| PROC PFMEC; # CONVERT *PFM* ERROR RESPONSE #
01529 M01S01452.sxstge +++| END
01530 M01S01453.sxstge +++|
01531 M01S01454.sxstge +++|#
01532 M01S01455.sxstge +++|**** PROC STERPFM - XREF - XREF LIST END.
01533 M01S01456.sxstge +++|#
01534 M01S01457.sxstge +++|
01535 M01S01458.sxstge +++| DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
01536 M01S01459.sxstge +++|*CALL,COMBFAS
01537 M01S01460.sxstge +++|*CALL COMXEMC
01538 M01S01461.sxstge +++|*CALL,COMXHLR
01539 M01S01462.sxstge +++|*CALL,COMXIPR
01540 M01S01463.sxstge +++|*CALL,COMXMSC
01541 M01S01464.sxstge +++|*CALL,COMSPFM
01542 M01S01465.sxstge +++|
01543 M01S01466.sxstge +++| ITEM ACTION I; # ERROR PROCESSING ACTION #
01544 M01S01467.sxstge +++|
01545 M01S01468.sxstge +++| SWITCH SPFMER:ERRST # *PFM* ERROR STATES #
01546 M01S01469.sxstge +++| SPNOERR:NOERR, # NO ERROR #
01547 M01S01470.sxstge +++| SPDELAY:WAIT, # DELAY CONDITION #
01548 M01S01471.sxstge +++| SPFATAL:FATAL, # FATAL ERROR #
01549 M01S01472.sxstge +++| SPFATAL:RESTART, # RESPONSE INVALID FROM *PFMEC* #
01550 M01S01473.sxstge +++| SPFATAL:PERM, # RESPONSE INVALID FROM *PFMEC* #
01551 M01S01474.sxstge +++| SPABAN:ABANDON, # ABANDON CONDITION #
01552 M01S01475.sxstge +++| SPSPEC:SPECIAL; # SPECIAL CONDITION #
01553 M01S01476.sxstge +++| CONTROL EJECT;
01554 M01S01477.sxstge +++|
01555 M01S01478.sxstge +++| P<HLRQ> = HLRQADR;
01556 M01S01479.sxstge +++|
01557 M01S01480.sxstge +++| PFMEC(ERRSTAT,ACTION);
01558 M01S01481.sxstge +++| GOTO SPFMER[ACTION];
01559 M01S01482.sxstge +++|
01560 M01S01483.sxstge +++|SPNOERR: # NO ERROR #
01561 M01S01484.sxstge +++| HLR$RESP[0] = ACTION;
01562 M01S01485.sxstge +++| RETURN;
01563 M01S01486.sxstge +++|
01564 M01S01487.sxstge +++|SPABAN: # ABANDON STAGE REQUEST #
01565 M01S01488.sxstge +++| IF ERRSTAT EQ FBS OR ERRSTAT EQ FDA OR ERRSTAT EQ FIA
01566 M01S01489.sxstge +++| THEN # RESPONSES INVALID FOR STAGE #
01567 M01S01490.sxstge +++| BEGIN
01568 M01S01491.sxstge +++| GOTO SPFATAL;
01569 M01S01492.sxstge +++| END
01570 M01S01493.sxstge +++|
01571 M01S01494.sxstge +++| HLR$RESP[0] = ACTION;
01572 M01S01495.sxstge +++| RETURN;
01573 M01S01496.sxstge +++|
01574 M01S01497.sxstge +++|SPDELAY: # DELAY STAGE REQUEST #
01575 M01S01498.sxstge +++| HLR$RESP[0] = ACTION;
01576 M01S01499.sxstge +++| RETURN;
01577 M01S01500.sxstge +++|
01578 M01S01501.sxstge +++|SPSPEC: # SPECIAL PROCESSING #
01579 M01S01502.sxstge +++| HLR$RESP[0] = ERRST"ABANDON";
01580 M01S01503.sxstge +++| HLR$ERRC[0] = STGERRC"DSKFULL";
01581 M01S01504.sxstge +++| RETURN;
01582 M01S01505.sxstge +++|
01583 M01S01506.sxstge +++|SPFATAL: # FATAL STAGE ERROR #
01584 M01S01507.sxstge +++| FE$RTN[0] = "STERPFM.";
01585 M01S01508.sxstge +++| MESSAGE(FEMSG,UDFL1);
01586 M01S01509.sxstge +++| ABORT;
01587 M01S01510.sxstge +++|
01588 M01S01511.sxstge +++| END # STERPFM #
01589 M01S01512.sxstge +++|
01590 M01S01513.sxstge +++| TERM
01591 M01S01514.sxstge +++|PROC STNTDAM((HLRQADR));
01592 M01S01515.sxstge +++|
01593 M01S01516.sxstge +++|# TITLE STNTDAM - GET NEXT STAGING REQUEST #
01594 M01S01517.sxstge +++|
01595 M01S01518.sxstge +++| BEGIN # STNTDAM #
01596 M01S01519.sxstge +++|
01597 M01S01520.sxstge +++|#
01598 M01S01521.sxstge +++|** STNTDAM - GET NEXT STAGING REQUEST.
01599 M01S01522.sxstge +++|*
01600 M01S01523.sxstge +++|* THIS PROCEDURE SCANS THE *RTRQ* TO LOCATE A FILE STAGE
01601 M01S01524.sxstge +++|* REQUEST WHICH CAN BE INITIATED USING THE CARTRIDGE
01602 M01S01525.sxstge +++|* CURRENTLY MOUNTED FOR THE *HLRQ* ENTRY. IF SEVERAL
01603 M01S01526.sxstge +++|* SUCH FILES ARE FOUND, THE ONE SELECTED IS THE ONE
01604 M01S01527.sxstge +++|* WHICH BEGINS CLOSEST TO THE START OF THE CARTRIDGE.
01605 M01S01528.sxstge +++|*
01606 M01S01529.sxstge +++|* PROC STNTDAM((HLRQADR))
01607 M01S01530.sxstge +++|*
01608 M01S01531.sxstge +++|* ENTRY (HLRQADR) - ADDRESS OF THE *HLRQ* ENTRY.
01609 M01S01532.sxstge +++|*
01610 M01S01533.sxstge +++|* THE FOLLOWING FIELDS IN THE *HLRQ* ENTRY AND
01611 M01S01534.sxstge +++|* THE *TDAM* PORTION IDENTIFY THE CARTRIDGE
01612 M01S01535.sxstge +++|* CURRENTLY MOUNTED.
01613 M01S01536.sxstge +++|* - *TDAMFAM*, *TDAMSBF* = SUBFAMILY,
01614 M01S01537.sxstge +++|* *HLR$SM*, *HLR$FCTX* = CARTRIDGE IN SUBFAMILY.
01615 M01S01538.sxstge +++|*
01616 M01S01539.sxstge +++|* EXIT THE *TDAM* PORTION OF THE *HLRQ* ENTRY IS UPDATED
01617 M01S01540.sxstge +++|* TO IDENTIFY THE NEXT ACTION.
01618 M01S01541.sxstge +++|* IF *TDAMFC* = "NOREQ", NO FILE WAS FOUND.
01619 M01S01542.sxstge +++|* OTHERWISE, THE *TDAM* ENTRY FOR THE NEW FILE
01620 M01S01543.sxstge +++|* WAS MOVED TO THE *HLRQ*.
01621 M01S01544.sxstge +++|#
01622 M01S01545.sxstge +++|
01623 M01S01546.sxstge +++| ITEM HLRQADR U; # *HLRQ* ADDRESS #
01624 M01S01547.sxstge +++|
01625 M01S01548.sxstge +++|#
01626 M01S01549.sxstge +++|**** PROC STNTDAM - XREF LIST BEGIN.
01627 M01S01550.sxstge +++|#
01628 M01S01551.sxstge +++|
01629 M01S01552.sxstge +++| XREF
01630 M01S01553.sxstge +++| BEGIN
01631 M01S01554.sxstge +++| PROC ADD$LNK; # ADD ENTRY TO CHAIN #
01632 M01S01555.sxstge +++| PROC DEL$LNK; # DELETE ENTRY FROM CHAIN #
01633 M01S01556.sxstge +++| PROC ZFILL; # ZERO FILL ARRAY #
01634 M01S01557.sxstge +++| END
01635 M01S01558.sxstge +++|
01636 M01S01559.sxstge +++|#
01637 M01S01560.sxstge +++|**** PROC STNTDAM - XREF LIST END.
01638 M01S01561.sxstge +++|#
01639 M01S01562.sxstge +++|
01640 M01S01563.sxstge +++| DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
01641 M01S01564.sxstge +++|*CALL,COMBFAS
01642 M01S01565.sxstge +++|*CALL,COMBCHN
01643 M01S01566.sxstge +++|*CALL,COMBTDM
01644 M01S01567.sxstge +++|*CALL COMXCTF
01645 M01S01568.sxstge +++|*CALL COMBUDT
01646 M01S01569.sxstge +++|*CALL,COMXHLR
01647 M01S00049.sxstge3 +++|*CALL COMXMFD
01648 M01S01570.sxstge +++|*CALL,COMXMSC
01649 M01S01571.sxstge +++|
01650 M01S01572.sxstge +++| ITEM BESTAU U; # STARTING AU OF BEST FILE #
01651 M01S01573.sxstge +++| ITEM BESTQ U; # ADDRESS OF BEST ENTRY #
01652 M01S01574.sxstge +++| ITEM CANDIDATE U; # TEMPORARY #
01653 M01S01575.sxstge +++| ITEM FAM C(7); # FAMILY #
01654 M01S01576.sxstge +++| ITEM I I; # LOOP INDEX #
01655 M01S01577.sxstge +++| ITEM SF U; # SUBFAMILY INDEX #
01656 M01S01578.sxstge +++| ITEM QADDR U; # ADDRESS OF NEXT *RTRQ* ENTRY #
01657 M01S01579.sxstge +++| CONTROL EJECT;
01658 M01S01580.sxstge +++| P<HLRQ> = HLRQADR;
01659 M01S01581.sxstge +++| P<TDAM> = LOC(HLR$TDAM[0]);
01660 M01S01582.sxstge +++|
01661 M01S01583.sxstge +++| FAM = TDAMFAM[0];
01662 M01S01584.sxstge +++| SF = TDAMSBF[0];
01663 M01S01585.sxstge +++| BESTQ = 0;
01664 M01S01586.sxstge +++| BESTAU = 99999999;
01665 M01S01587.sxstge +++|
01666 M01S01588.sxstge +++| QADDR = CHN$BOC[LCHN"RTD$ACT"];
01667 M01S01589.sxstge +++|
01668 M01S01590.sxstge +++| FOR DUMMY = 0 WHILE QADDR NQ 0
01669 M01S01591.sxstge +++| DO
01670 M01S01592.sxstge +++| BEGIN # SEARCH LOOP #
01671 M01S01593.sxstge +++|
01672 M01S01594.sxstge +++| CANDIDATE = QADDR;
01673 M01S01595.sxstge +++| P<LINKWRD> = QADDR;
01674 M01S01596.sxstge +++| P<TDAM> = QADDR+1;
01675 M01S01597.sxstge +++|
01676 M01S01598.sxstge +++| QADDR = LINK$ADR[0]; # SET UP FOR NEXT LOOP #
01677 M01S01599.sxstge +++|
01678 M01S01600.sxstge +++|#
01679 M01S01601.sxstge +++|* EXAMINE THE CURRENT *RTRQ* ENTRY AND LOOP IF ITS NOT
01680 M01S01602.sxstge +++|* - FOR THE SAME SUBFAMILY,
01681 M01S01603.sxstge +++|* - FOR THE SAME CARTRIDGE,
01682 M01S01604.sxstge +++|* - THE FIRST ONE ON THE CARTRIDGE.
01683 M01S01605.sxstge +++|#
01684 M01S01606.sxstge +++|
01685 M01S01607.sxstge +++| IF TDAMFC[0] NQ TDAMFCODE"STAGE" ##
01686 M01S01608.sxstge +++| OR TDAMFAM[0] NQ FAM ##
01687 M01S01609.sxstge +++| OR TDAMSBF[0] NQ SF
01688 M01S01610.sxstge +++| THEN # NOT STAGE, OR IN THE SAME
01689 M01S01611.sxstge +++| SUBFAMILY #
01690 M01S01612.sxstge +++| BEGIN
01691 M01S01613.sxstge +++| TEST DUMMY;
01692 M01S01614.sxstge +++| END
01693 M01S01615.sxstge +++|
01694 M01S01616.sxstge +++| P<ASA> = LOC(TDAMASA[0]);
01695 M01S01617.sxstge +++|
01696 M01S01618.sxstge +++| IF ASASM[0] NQ HLR$SM[0] ##
01697 M01S01619.sxstge +++| OR ASAFCT[0] NQ HLR$FCTX[0]
01698 M01S01620.sxstge +++| THEN # NOT ON THE SAME CARTRIDGE #
01699 M01S01621.sxstge +++| BEGIN
01700 M01S01622.sxstge +++| TEST DUMMY;
01701 M01S01623.sxstge +++| END
01702 M01S01624.sxstge +++|
01703 M01S01625.sxstge +++| IF ASAAU[0] LS BESTAU
01704 M01S01626.sxstge +++| THEN # SELECT THIS ONE #
01705 M01S01627.sxstge +++| BEGIN
01706 M01S01628.sxstge +++| BESTQ = CANDIDATE;
01707 M01S01629.sxstge +++| BESTAU = ASAAU[0];
01708 M01S01630.sxstge +++| TEST DUMMY;
01709 M01S01631.sxstge +++| END
01710 M01S01632.sxstge +++|
01711 M01S01633.sxstge +++| END # SEARCH LOOP #
01712 M01S01634.sxstge +++|
01713 M01S01635.sxstge +++| IF (BESTQ EQ 0) ##
01714 M01S00050.sxstge3 +++| OR (HLR$ERRC[0] NQ 0) ##
01715 M01S01636.sxstge +++| OR (HLR$RESP[0] EQ ERRST"RSFULL")
01716 M01S01637.sxstge +++| THEN # NO MORE FILES TO STAGE FROM
01717 M01S01638.sxstge +++| CARTRIDGE #
01718 M01S01639.sxstge +++| BEGIN
01719 M01S01640.sxstge +++| P<TDAM> = LOC(HLR$TDAM[0]);
01720 M01S01641.sxstge +++| TDAMFC[0] = TDAMFCODE"NOREQ";
01721 M01S01642.sxstge +++| HLR$UNLD[0] = TRUE;
01722 M01S01643.sxstge +++|
Line S01644 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01723 M02S01644.mse2 ---| SLOWFOR I = 1 STEP 1 UNTIL MAXSMUNIT
Line S01645 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01724 M02S01645.mse2 ---| DO
Line S01646 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01725 M02S01646.mse2 ---| BEGIN # CLEAR DESTAGE HOLD FLAG #
Line S01647 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01726 M02S01647.mse2 ---| IF HLR$SM[0] EQ SM$ID[I]
Line S01648 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01727 M02S01648.mse2 ---| THEN
Line S01649 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01728 M02S01649.mse2 ---| BEGIN
Line S01650 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01729 M02S01650.mse2 ---| SM$DSRQF[I] = FALSE;
Line S01651 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01730 M02S01651.mse2 ---| GOTO SMFOUND;
Line S01652 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01731 M02S01652.mse2 ---| END
Line S01653 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01732 M02S01653.mse2 ---|
Line S01654 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01733 M02S01654.mse2 ---| END
Line S01655 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01734 M02S01655.mse2 ---|
Line S01656 Modification History |
M01 (Added by) | sxstge |
M02 (Updated by) | mse2 |
Seq # *Modification Id* Act
----------------------------+
01735 M02S01656.mse2 ---|SMFOUND:
01736 M01S01657.sxstge +++| END
01737 M01S01658.sxstge +++|
01738 M01S01659.sxstge +++| ELSE # MOVE NEW *TDAM* INTO *HLRQ* #
01739 M01S01660.sxstge +++| BEGIN
01740 M01S01661.sxstge +++| P<TDAM> = BESTQ + 1;
01741 M01S01662.sxstge +++| HLR$TDAM[0] = TDAMREQST[0];
01742 M01S01663.sxstge +++| RTRQ$CT = RTRQ$CT - 1;
01743 M01S01664.sxstge +++|
01744 M01S01665.sxstge +++| DEL$LNK(BESTQ,LCHN"RTD$ACT",0);
01745 M01S01666.sxstge +++| ZFILL(TDAM[0],TDAMLEN);
01746 M01S01667.sxstge +++| ADD$LNK(BESTQ,LCHN"RTD$FRSPC",0);
01747 M01S01668.sxstge +++| END
01748 M01S01669.sxstge +++|
01749 M01S01670.sxstge +++| ADD$LNK(HLRQADR,LCHN"HL$READY",0);
01750 M01S01671.sxstge +++| HLR$RETRY[0] = FALSE;
01751 M01S01672.sxstge +++| HLR$HPN[0] = HLRPN"STAGE";
01752 M01S01673.sxstge +++| HLR$HPS[0] = PROCST"INITIAL";
01753 M01S01674.sxstge +++|
01754 M01S01675.sxstge +++| RETURN;
01755 M01S01676.sxstge +++| END # STNTDAM #
01756 M01S01677.sxstge +++|
01757 M01S01678.sxstge +++| TERM
01758 M01S01679.sxstge +++|PROC TDAM$RP;
01759 M01S01680.sxstge +++|
01760 M01S01681.sxstge +++|# TITLE TDAM$RP - *TDAM* REQUEST PROCESSOR. #
01761 M01S01682.sxstge +++|
01762 M01S01683.sxstge +++| BEGIN # TDAM$RP #
01763 M01S01684.sxstge +++|
01764 M01S01685.sxstge +++|#
01765 M01S01686.sxstge +++|** TDAM$RP - *TDAM* REQUEST PROCESSOR.
01766 M01S01687.sxstge +++|*
01767 M01S01688.sxstge +++|* *TDAM$RP* DOES THE PROCESSING OF REQUESTS RESIDING IN THE *RTRQ*.
01768 M01S01689.sxstge +++|* IN THE *RTRQ*.
01769 M01S01690.sxstge +++|*
01770 M01S01691.sxstge +++|* PROC TDAM$RP.
01771 M01S01692.sxstge +++|*
01772 M01S01693.sxstge +++|* EXIT *HLR$DOSTG* IS SET TO INTERRUPT DESTAGING IF A
01773 M01S01694.sxstge +++|* STAGE REQUEST IS WAITING TO BE PROCESSED.
01774 M01S01695.sxstge +++|* THE MASK *STG$MSK* IS SET UP.
01775 M01S01696.sxstge +++|*
01776 M01S01697.sxstge +++|* MESSAGES * INVALID TDAM REQUEST.*.
01777 M01S01698.sxstge +++|*
01778 M01S01699.sxstge +++|* NOTES *TDAM$RP* PROCESSES *TDAM* REQUESTS AS FOLLOWS -
01779 M01S01700.sxstge +++|*
01780 M01S01701.sxstge +++|* STEP 1 - THE STATUS OF EACH *SM* IS DETERMINED.
01781 M01S01702.sxstge +++|* THE COUNT OF AVAILABLE *DRD-S* IS DECREMENTED IF
01782 M01S01703.sxstge +++|* THE *SM* OR ONE OF THE *DRD-S* IS NOT AVAILABLE.
01783 M01S01704.sxstge +++|*
01784 M01S01705.sxstge +++|* STEP 2 - IF EITHER *DRD* ON A *SM* IS DESTAGING
01785 M01S01706.sxstge +++|* THEN THE *ID* OF THAT CARTRIDGE IS SAVED. IF
01786 M01S01707.sxstge +++|* DESTAGING IS NOT OCCURRING ON EITHER *DRD* THEN
01787 M01S01708.sxstge +++|* THE *ID* OF A CARTRIDGE ON EITHER *DRD* IS SAVED.
01788 M01S01709.sxstge +++|*
01789 M01S01710.sxstge +++|* STEP 3 - THE *RTRQ* IS SEARCHED FOR *TDAM* STAGE
01790 M01S01711.sxstge +++|* REQUESTS. ANY VALID NON-STAGE REQUESTS ARE
01791 M01S01712.sxstge +++|* PROCESSED AS THEY COME IN.
01792 M01S01713.sxstge +++|* STAGE REQUESTS ARE PROCESSED UNLESS
01793 M01S01714.sxstge +++|* 1) NO *DRD-S* ARE FREE.
01794 M01S01715.sxstge +++|* 2) ONE *DRD* IS FREE AND THE CARTRIDGE NEEDED
01795 M01S01716.sxstge +++|* IS IN USE.
01796 M01S01717.sxstge +++|* IN EITHER OF THESE TWO CASES, IF THE *SM* IS
01797 M01S01718.sxstge +++|* DESTAGING THE *HLR$DOSTG* FLAG IS SET TO INTERRUPT
01798 M01S01719.sxstge +++|* THE DESTAGE.
01799 M01S01720.sxstge +++|*
01800 M01S01721.sxstge +++|* STEP 4 - THE MASK *STG$MSK* IS SET UP WITH ONE BIT
01801 M01S01722.sxstge +++|* PER *SM* SET IF A STAGE REQUEST FROM A *SM* CANNOT
01802 M01S01723.sxstge +++|* BE PROCESSED BECAUSE THE FOLLOWING CONDITIONS ARE
01803 M01S01724.sxstge +++|* PRESENT -
01804 M01S01725.sxstge +++|* 1) NO SPACE IS AVAILABLE FOR NEW *HLRQ* REQUESTS.
01805 M01S01726.sxstge +++|* 2) THERE ARE NO *DRD-S* AVAILABLE.
01806 M01S01727.sxstge +++|* 3) THE *SM* IS NOT DESTAGING AND THEREFORE CANNOT
01807 M01S01728.sxstge +++|* BE INTERRUPTED BY SETTING THE *HLR$DOSTG* FLAG.
01808 M01S01729.sxstge +++|#
01809 M01S01730.sxstge +++|
01810 M01S01731.sxstge +++|
01811 M01S01732.sxstge +++|#
01812 M01S01733.sxstge +++|**** PROC TDAM$RP - XREF LIST BEGIN.
01813 M01S01734.sxstge +++|#
01814 M01S01735.sxstge +++|
01815 M01S01736.sxstge +++| XREF
01816 M01S01737.sxstge +++| BEGIN
01817 M01S01738.sxstge +++| PROC ADD$LNK; # ADD ENTRY TO LINK #
01818 M01S01739.sxstge +++| PROC CRELSLK; # RELEASE CATALOG INTERLOCK #
01819 M01S01740.sxstge +++| PROC CRELSMM; # RELEASE CATALOG IN MODIFY MODE #
01820 M01S01741.sxstge +++| PROC DEL$LNK; # DELETE ENTRY FROM LINK #
01821 M01S01742.sxstge +++| PROC HLRQENQ; # *HLRQ* ENQUEUER #
01822 M01S01743.sxstge +++| PROC SSOVL; # LOAD *MSAS* OVERLAYS #
01823 M01S01744.sxstge +++| PROC MSG; # ISSUE MESSAGE #
01824 M01S01745.sxstge +++| PROC MSGAFDF; # MESSAGE HANDLER #
01825 M01S01746.sxstge +++| PROC ZFILL; # ZERO FILL BUFFER #
01826 M01S01747.sxstge +++| END
01827 M01S01748.sxstge +++|
01828 M01S01749.sxstge +++|#
01829 M01S01750.sxstge +++|**** PROC TDAM$RP - XREF LIST END.
01830 M01S01751.sxstge +++|#
01831 M01S01752.sxstge +++|
01832 M01S01753.sxstge +++| DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
01833 M01S01754.sxstge +++|*CALL,COMBFAS
01834 M01S01755.sxstge +++|*CALL,COMBCHN
01835 M01S01756.sxstge +++|*CALL,COMBOVL
01836 M01S01757.sxstge +++|*CALL,COMBTDM
01837 M01S01758.sxstge +++|*CALL,COMBUDT
01838 M01S01759.sxstge +++|*CALL,COMXCTF
01839 M01S01760.sxstge +++|*CALL COMXEMC
01840 M01S01761.sxstge +++|*CALL,COMXHLR
01841 M01S01762.sxstge +++|*CALL,COMXMFD
01842 M01S01763.sxstge +++|*CALL,COMXMSC
01843 M01S01764.sxstge +++|
01844 M01S01765.sxstge +++| ITEM DRDCOUNT I; # DRD COUNT #
01845 M01S01766.sxstge +++| ITEM FCT U; # CURRENT *FCT* ORDINAL #
01846 M01S01767.sxstge +++| ITEM FULL B; # *DRD* FULL #
01847 M01S01768.sxstge +++| ITEM HLRADR U; # *HLRQ* ENTRY ADDRESS #
01848 M01S01769.sxstge +++| ITEM HLRDEST U; # ADDRESS OF DESTAGE *HLRQ* ENTRY
01849 M01S01770.sxstge +++| #
01850 M01S01771.sxstge +++| ITEM I I; # LOOP INDEX #
01851 M01S01772.sxstge +++| ITEM LINK I; # ADDRESS OF NEW CHAIN ENTRY #
01852 M01S01773.sxstge +++| ITEM OFFSET I; # INCREMENT FROM LINK ADDRESS TO
01853 M01S01774.sxstge +++| GET *TDAM* ENTRY #
01854 M01S01775.sxstge +++| ITEM RTDADR U; # *RTRQ* ENTRY ADDRESS #
01855 M01S01776.sxstge +++| ITEM REMOVE B; # REMOVE ENTRY FROM *RTRQ* #
01856 M01S01777.sxstge +++| ITEM SM I; # SM-ID #
01857 M01S01778.sxstge +++| ITEM STAT I; # STATUS #
01858 M01S00051.sxstge3 +++| ITEM STDRDCT I; # STAGE DRD COUNT #
01859 M01S00052.sxstge3 +++| ITEM TYPE C(1); # MESSAGE TYPE S #
01860 M01S01779.sxstge +++|#
01861 M01S01780.sxstge +++|* STEP 1 - SEARCH THE *RTRQ* FOR *TDAM* STAGE REQUESTS
01862 M01S01781.sxstge +++|
01863 M01S01782.sxstge +++|* IF NON-STAGE REQUESTS ARE FOUND PROCESS THEM ACCORDINGLY.
01864 M01S01783.sxstge +++|#
01865 M01S01784.sxstge +++|
01866 M01S01785.sxstge +++| RTRQ$CT = 0; # CLEAR *RTRQ* COUNTER #
01867 M01S01786.sxstge +++| LINK = CHN$BOC[LCHN"RTD$ACT"];
01868 M01S01787.sxstge +++|
01869 M01S01788.sxstge +++| REPEAT WHILE LINK NQ 0
01870 M01S01789.sxstge +++| DO
01871 M01S01790.sxstge +++| BEGIN # SCAN *RTRQ* #
01872 M01S01791.sxstge +++|
01873 M01S01792.sxstge +++| RTDADR = LINK;
01874 M01S01793.sxstge +++| P<TDAM> = LINK + 1;
01875 M01S01794.sxstge +++| P<LINKWRD> = LINK;
01876 M01S01795.sxstge +++| LINK = LINK$ADR[0];
01877 M01S01796.sxstge +++| REMOVE = FALSE;
01878 M01S01797.sxstge +++|
01879 M01S01798.sxstge +++|#
01880 M01S01799.sxstge +++|* CHECK FOR INVALID *TDAM* REQUEST.
01881 M01S01800.sxstge +++|#
01882 M01S01801.sxstge +++|
01883 M01S01802.sxstge +++| IF TDAMFC[0] LQ TDAMFCODE"NOREQ" ##
01884 M01S01803.sxstge +++| OR TDAMFC[0] GQ TDAMFCODE"FCEND" ##
01885 M01S01804.sxstge +++| OR TDAMFC[0] EQ TDAMFCODE"DESTAGE" ##
01886 M01S01805.sxstge +++| OR TDAMFC[0] EQ TDAMFCODE"DESTRLS"
01887 M01S01806.sxstge +++| THEN
01888 M01S01807.sxstge +++| BEGIN
01889 M01S01808.sxstge +++| MSG(INVRQC,UDFL1); # INVALID *TDAM* REQUEST #
01890 M01S01809.sxstge +++| REMOVE = TRUE;
01891 M01S01810.sxstge +++| END
01892 M01S01811.sxstge +++|
01893 M01S01812.sxstge +++|#
01894 M01S01813.sxstge +++|* PROCESS *TDAM* REQUEST.
01895 M01S01814.sxstge +++|#
01896 M01S01815.sxstge +++|
01897 M01S01816.sxstge +++| IF TDAMFC[0] EQ TDAMFCODE"RCLMCINT" ##
01898 M01S01817.sxstge +++| OR TDAMFC[0] EQ TDAMFCODE"RCLMUMI"
01899 M01S01818.sxstge +++| THEN # RECLAIM INTERLOCKS #
01900 M01S01819.sxstge +++| BEGIN
01901 M01S01820.sxstge +++| RCLMCAT = TRUE;
01902 M01S01821.sxstge +++| SSOVL(LRCLMLK,0);
01903 M01S01822.sxstge +++| REMOVE = TRUE;
01904 M01S01823.sxstge +++| END
01905 M01S01824.sxstge +++|
01906 M01S01825.sxstge +++| IF TDAMFC[0] EQ TDAMFCODE"RLSCINT"
01907 M01S01826.sxstge +++| THEN # RELEASE CATALOG INTERLOCKS #
01908 M01S01827.sxstge +++| BEGIN
01909 M01S01828.sxstge +++| REMOVE = TRUE;
01910 M01S01829.sxstge +++| IF DSC$FAM NQ TDAMPFUFAM[0]
01911 M01S01830.sxstge +++| THEN # DESTAGE REQUESTS NOT ACTIVE ON
01912 M01S01831.sxstge +++| FAMILY #
01913 M01S01832.sxstge +++| BEGIN
01914 M01S01833.sxstge +++| CRELSLK(TDAMPFUFAM[0],TDAMMASK[0],0,STAT);
01915 M01S01834.sxstge +++| END
01916 M01S01835.sxstge +++|
01917 M01S01836.sxstge +++| ELSE # RELEASE INTERLOCKS LATER #
01918 M01S01837.sxstge +++| BEGIN
01919 M01S01838.sxstge +++| DSC$LKTYP = 0;
01920 M01S01839.sxstge +++| DSC$LKMSK = DSC$LKMSK LOR TDAMMASK[0];
01921 M01S01840.sxstge +++| END
01922 M01S01841.sxstge +++|
01923 M01S01842.sxstge +++| END
01924 M01S01843.sxstge +++|
01925 M01S01844.sxstge +++| IF TDAMFC[0] EQ TDAMFCODE"RLSUMI"
01926 M01S01845.sxstge +++| THEN # RELEASE UPDATE MODE INTERLOCK #
01927 M01S01846.sxstge +++| BEGIN
01928 M01S01847.sxstge +++| REMOVE = TRUE;
01929 M01S01848.sxstge +++| IF DSC$FAM NQ TDAMPFUFAM[0]
01930 M01S01849.sxstge +++| THEN # DESTAGE REQUESTS NOT ACTIVE ON
01931 M01S01850.sxstge +++| FAMILY #
01932 M01S01851.sxstge +++| BEGIN
01933 M01S01852.sxstge +++| CRELSMM(TDAMPFUFAM[0],TDAMMASK[0],0,STAT);
01934 M01S01853.sxstge +++| END
01935 M01S01854.sxstge +++|
01936 M01S01855.sxstge +++| ELSE # RELEASE INTERLOCK LATER #
01937 M01S01856.sxstge +++| BEGIN
01938 M01S01857.sxstge +++| DSC$LKTYP = 1;
01939 M01S01858.sxstge +++| DSC$LKMSK = DSC$LKMSK LOR TDAMMASK[0];
01940 M01S01859.sxstge +++| END
01941 M01S01860.sxstge +++|
01942 M01S01861.sxstge +++| END
01943 M01S01862.sxstge +++|
01944 M01S01863.sxstge +++|#
01945 M01S01864.sxstge +++|* PROCESS STAGE REQUEST.
01946 M01S01865.sxstge +++|#
01947 M01S01866.sxstge +++|
01948 M01S01867.sxstge +++| IF TDAMFC[0] EQ TDAMFCODE"STAGE"
01949 M01S01868.sxstge +++| THEN
01950 M01S01869.sxstge +++| BEGIN # PROCESS STAGE REQUEST #
01951 M01S01870.sxstge +++|
01952 M01S01871.sxstge +++|#
01953 M01S01872.sxstge +++|* SET *SM* INDEX.
01954 M01S01873.sxstge +++|#
01955 M01S01874.sxstge +++|
01956 M01S01875.sxstge +++| P<ASA> = LOC(TDAMASA[0]);
01957 M01S01876.sxstge +++| SM = ASASM[0];
01958 M01S01877.sxstge +++| RTRQ$CT = RTRQ$CT + 1;
01959 M01S01878.sxstge +++|
01960 M01S01879.sxstge +++|#
01961 M01S01880.sxstge +++|* IF NO *DRD-S* ARE FREE - DO NOT PROCESS THE REQUEST.
01962 M01S01881.sxstge +++|* IF DESTAGING IS BEING DONE, SET BIT IN *HLRQ* FOR
01963 M01S01882.sxstge +++|* DESTAGER TO PROCESS STAGE REQUESTS WHEN DONE DESTAGING.
01964 M01S01883.sxstge +++|*
01965 M01S01884.sxstge +++|* IF ONE *DRD* IS FREE - PROCESS THE REQUEST UNLESS THE
01966 M01S01885.sxstge +++|* CARTRIDGE IS IN USE.
01967 M01S01886.sxstge +++|* IF DESTAGER IS USING THIS CARTRIDGE, SET THE *DOSTG*
01968 M01S01887.sxstge +++|* FLAG IN THE *HLRQ*.
01969 M01S01888.sxstge +++|#
01970 M01S01889.sxstge +++|
01971 M01S01890.sxstge +++|
01972 M01S01891.sxstge +++| SLOWFOR I=1 STEP 1 UNTIL MAXSMUNIT
01973 M01S01892.sxstge +++| DO
01974 M01S01893.sxstge +++| BEGIN # UNTIL SM FOUND #
01975 M01S01894.sxstge +++| IF SM EQ SM$ID[I]
01976 M01S01895.sxstge +++| THEN
01977 M01S01896.sxstge +++| BEGIN # CHECK *FCT* IN USE #
01978 M01S01897.sxstge +++| DRDCOUNT = 0;
01979 M01S01898.sxstge +++| FULL = FALSE;
01980 M01S01899.sxstge +++|
01981 M01S01900.sxstge +++| IF D0$ON[I]
01982 M01S01901.sxstge +++| THEN
01983 M01S01902.sxstge +++| BEGIN
01984 M01S01903.sxstge +++| DRDCOUNT = 1;
01985 M01S01904.sxstge +++| END
01986 M01S01905.sxstge +++|
01987 M01S01906.sxstge +++| IF D1$ON[I]
01988 M01S01907.sxstge +++| THEN
01989 M01S01908.sxstge +++| BEGIN
01990 M01S01909.sxstge +++| DRDCOUNT = DRDCOUNT + 1;
01991 M01S01910.sxstge +++| END
01992 M01S01911.sxstge +++|
01993 M01S00053.sxstge3 +++| IF SM$STNUM[I] EQ 0
01994 M01S00054.sxstge3 +++| THEN
01995 M01S00055.sxstge3 +++| BEGIN
01996 M01S00056.sxstge3 +++| GOTO TDAM$CONT;
01997 M01S00057.sxstge3 +++| END
01998 M01S00058.sxstge3 +++|
01999 M01S00059.sxstge3 +++| STDRDCT = SM$STNUM[I];
02000 M01S00060.sxstge3 +++|
02001 M01S01912.sxstge +++| IF SM$REQRES1[I] NQ 0
02002 M01S01913.sxstge +++| AND SM$REQRES2[I] NQ 0
02003 M01S01914.sxstge +++| THEN
02004 M01S01915.sxstge +++| BEGIN
02005 M01S01916.sxstge +++| FULL = TRUE;
02006 M01S01917.sxstge +++| END
02007 M01S01918.sxstge +++|
02008 M01S01919.sxstge +++| IF DRDCOUNT EQ 1
02009 M01S01920.sxstge +++| THEN
02010 M01S01921.sxstge +++| BEGIN
02011 M01S01922.sxstge +++| IF (SM$REQRES1[I] NQ 0)
02012 M01S01923.sxstge +++| OR (SM$REQRES2[I] NQ 0)
02013 M01S01924.sxstge +++| THEN
02014 M01S01925.sxstge +++| BEGIN
02015 M01S01926.sxstge +++| FULL = TRUE;
02016 M01S01927.sxstge +++| END
02017 M01S01928.sxstge +++| END
02018 M01S01929.sxstge +++| IF SM$REQRES1[I] NQ 0
02019 M01S01930.sxstge +++| THEN
02020 M01S01931.sxstge +++| BEGIN # CHECK FIRST RESERVE AREA #
02021 M01S01932.sxstge +++| IF NOT SM$LLRQ1[I]
02022 M01S01933.sxstge +++| THEN
02023 M01S01934.sxstge +++| BEGIN # RESERVED BY *HLRQ* #
02024 M01S01935.sxstge +++| P<HLRQ> = SM$REQRES1[I];
02025 M01S00061.sxstge3 +++|
02026 M01S00062.sxstge3 +++| IF HLR$HPN[0] EQ HLRPN"STAGE"
02027 M01S00063.sxstge3 +++| THEN
02028 M01S00064.sxstge3 +++| BEGIN
02029 M01S00065.sxstge3 +++| STDRDCT = STDRDCT - 1;