User Tools

Site Tools


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

Deck SXSTGE

8 Modifications

Listing Sections

Source

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;
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/sxstge.txt · Last modified: by 127.0.0.1