TITLE ' JOBEXAMP' 00001000 PUNCH ' PHASE JOBEXAMP,*' 00002000 SPACE 00003000 ******************************************************************* 00004000 *** *** 00005000 *** J O B E X A M P *** 00006000 *** *** 00007000 *** VSE/POWER JOB EXIT: EXAMPLE PROGRAM *** 00008000 *** *** 00009000 ******************************************************************* 00010000 SPACE 2 00011000 * THIS PROGRAM - NAMED JOBEXAMP - ACTS AS AN EXAMPLE FOR A 00012000 * USER WRITTEN JOB EXIT ROUTINE. 00013000 SPACE 2 00014000 * THIS EXAMPLE GIVES A SKELETON WHICH SHOWS HOW TO CHECK 00015000 * THE CONTENTS OF JCL AND JECL STATEMENTS. DEPENDING ON THE 00016000 * NEEDS OF THE CUSTOMERS AN ACTION TYPE MAY BE PROVIDED 00017000 * BY THE JOB EXIT TO POSITION 80 OF THE STATEMENT. 00018000 * THIS ACTION TYPE WILL BE INTERPRETED LATER ON AND THE 00019000 * APPROPRIATE RETURN CODE WILL BE 00020000 * SET IN REGISTER 15 TO BE PASSED TO VSE/POWER. 00021000 SPACE 2 00022000 * CONTROL IS GIVEN TO THIS JOB EXIT VIA REGISTER 15 00023000 * BY THE LOGICAL READER (IPW$$LR). 00024000 SPACE 2 00025000 * THIS JOB EXIT IS ASSUMED TO BE LOADED WITH A WORK AREA 00026000 * OF 50 BYTES. 00027000 SPACE 2 00028000 * THE FOLLOWING ADDRESSABILITY IS ASSUMED AT ENTRY TO 00029000 * THE JOB EXIT: 00030000 SPACE 00031000 * R0 - ADDRESS OF STATEMENT PASSED BY VSE/POWER 00032000 * R1 - LENGTH OF STATEMENT PASSED BY VSE/POWER 00033000 * R3 - ADDRESS OF THE WORKAREA PASSED BY VSE/POWER 00034000 * RA - ADDRESS OF VSE/POWER COMMON ADDRESS TABLE (CAT) 00035000 * RB - ADDRESS OF TASK CONTROL BLOCK (TCB) 00036000 * RE - RETURN ADDRESS TO VSE/POWER 00037000 * RF - BASE REGISTER OF THIS ROUTINE 00038000 SPACE 2 00039000 * THIS JOB EXIT PHASE IS LOCATED WITHIN THE 00040000 * - PAGEABLE AREA OF THE VSE/POWER PARTITION WHEN LOADED 00041000 * AT VSE/POWER INITIALIZATION TIME, OR IN THE 00042000 * - GETVIS AREA OF THE VSE/POWER PARTITION WHEN LOADED 00043000 * AFTER INITIALIZATION BY THE 'PLOAD' COMMAND. 00044000 * FOR DEBUGGING LOCATE THE JOB EXIT IN STORAGE 00045000 * BY ITS STORAGE DESCRIPTOR 'JOB-EXIT' AND BY THE POINTER 00046000 * 'CARE' OF THE COMMON ADDRESS TABLE OF 00047000 * VSE/POWER. 00048000 SPACE 2 00049000 * THE FOLLOWING PIECE OF CODE IS ONLY AN EXAMPLE. 00050000 * IT IS THE USER'S RESPONSIBILITY TO DEVELOP 00051000 * HIS OWN ROUTINE CONCERNING HIS PROBLEM DEFINITION. 00052000 EJECT 00053000 * REGISTER USAGE: 00054000 * R0 - ADDRESS OF STATEMENT IN CASE OF INSERT 00055000 * R1 - LENGTH OF STATEMENT IN CASE OF INSERT 00056000 * R2 - ADDRESS OF STATEMENT IN JOB EXIT 00057000 * R3 - ADDRESS OF WORK AREA PASSED BY VSE/POWER 00058000 * R4 - R7 - WORK REGISTER 00059000 * R8 - RETURN CODE SET BY JOB EXIT 00060000 * R9 - WORK REGISTER 00061000 * RA - RC USED BY VSE/POWER 00062000 * RE - RETURN ADDRESS TO VSE/POWER 00063000 * RF - EXIT BASE REGISTER AND RETURN CODE TO VSE/POWER 00064000 SPACE 2 00065000 JOBEXAMP CSECT 0 ESTABLISH MAIN CONTROL SECTION 00066000 USING *,RF BASE REG ESTABLISHED BY VSE/POWER 00067000 USING PADS,RA ADDRESSABILITY OF VSE/POWER CAT 00068000 USING TCDS,RB ADDRESSABILITY OF TCB 00069000 USING CDSECT,R2 ADDRESSABILITY OF STATEMENT 00070000 USING WDSECT,R3 ADDRESSABILITY FOR WORK AREA 00071000 B JEX000 SKIP STORAGE DESCRIPTOR 00072000 SPACE 00073000 DC CL12'JOB-EXIT' DEFINE STORAGE DESCRIPTOR 00074000 SPACE 00075000 ******************************************************************* 00076000 * * 00077000 * THE FOLLOWING PIECE OF CODE IS USED TO CHECK THE * 00078000 * STATEMENT. FOR A * $$ JOB STATEMENT THE ACTION TYPE * 00079000 * WILL BE DETERMINED. * 00080000 * FOR ALL OTHER STATEMENTS CONTROL IS PASSED TO VSE/POWER * 00081000 * WITH NORMAL PROCESSING INDICATED IN REGISTER 15. * 00082000 * * 00083000 * FOR A JOB STATEMENT ACCEPTED BY THE JOB EXIT * 00084000 * A NEW STATEMENT WILL BE INSERTED AND THE JOB COUNTER * 00085000 * IN THE WORK AREA WILL BE INCREMENTED. * 00086000 * INSERTION OF THE STATEMENT IS INDICATED IN THE WORK * 00087000 * AREA TO AVOID LOOPING SINCE THE CURRENT * $$ JOB * 00088000 * STATEMENT IS PASSED AGAIN TO THIS JOB EXIT. * 00089000 * * 00090000 * FIRST THE EXAMPLE CHECKS,WHETHER THE REQUIRED WORKAREA * 00091000 * SIZE OF 50 BYTES HAS BEEN SPECIFIED FOR THIS EXIT. * 00092000 * IF NOT, WE DO NOT DARE TO USE THE PASSED WORKAREA, * 00093000 * INSTEAD THE CENTRAL OPERATOR WILL BE INFORMED BY A * 00094000 * WARNING MESSAGE. * 00095000 * * 00096000 ******************************************************************* 00097000 SPACE 00098000 JEX000 DS 0H 00099000 SPACE 2 00100190 * WHENEVER A WORK AREA IS USED, THE LENGTH OF THIS AREA MUST BE 00100380 * VERIFIED EACH TIME THE EXIT GAINS CONTROL, BECAUSE 00100570 * - THE EXIT MIGHT HAVE BEEN LOADED BY OPERATOR WITH A WRONG 00100760 * LENGTH OF ITS WORK AREA 00100950 * - A NEW VERSION OF THE EXIT MIGHT HAVE BEEN LOADED AND THE 00101140 * PREVIOUSLY DEFINED WORK AREA IS STILL USED UNTIL THE TASK 00101330 * ENDS. 00101520 SPACE 2 00101710 * SINCE A WORK AREA IS REQUIRED BY THIS ROUTINE, VERIFY IF ONE 00101900 * IS SPECIFIED. IF NOT, THE VSE/POWER JOB IS FLUSHED. 00102090 SPACE 1 00102280 LTR R3,R3 WORK AREA SPECIFIED ? 00102470 BZ JEX003 ..NO, WARN OPER. AND FLUSH JOB 00102660 SPACE 2 00102850 * THE WORK AREA EXISTS AND CAN NOW BE ADDRESSED. TEST IF 00103040 * THE WORK AREA IS LARGE ENOUGH. 00103230 SPACE 1 00103420 L R4,WDLENGTH GET SPECIFIED WORK AREA SIZE 00103610 LA R5,WDLEN GET REQU. SIZE OF WORK AREA 00103800 CR R4,R5 WORK AREA TOO SHORT ? 00103990 BNL JEX005 ..NO, CONTINUE EXIT 00104180 SPACE 1 00104370 JEX003 DS 0H 00104560 SPACE 1 00106000 * RESPECT THAT MACRO IPW$WTO DESTROYS REGISTER R0-R3 00107000 SPACE 1 00108000 LA R7,JEXMSG1 GET ADDRESS OF JEXMSG1 00109000 BAL R6,SUBWTO ISSUE TEXMSG1 00110000 SPACE 1 00111000 LA R7,JEXMSG2 GET ADDRESS OF JEXMSG2 00112000 BAL R6,SUBWTO ISSUE TEXMSG2 00113000 SPACE 1 00114000 LA R7,JEXMSG3 GET ADDRESS OF JEXMSG3 00115190 BAL R6,SUBWTO ISSUE TEXMSG3 00115380 SPACE 1 00115570 LA RF,X'10' PROVIDE RETURN CODE TO FLUSH JOB 00115760 BR RE AND RETURN TO VSE/POWER 00116000 SPACE 2 00117000 JEX005 DS 0H 00118000 LR R2,R0 SET UP ADDRESS OF STATEMENT 00119000 CLC COMPARE,CUSTNEED * $$ JOB STATEMENT PASSED ? 00120000 BE JEX010 .. YES, CONTINUE 00121000 B JEX050 .. NO, CONTINUE 00122000 SPACE 00123000 JEX010 DS 0H 00124000 TM WDFLAG,WDFLINS INSERT OF STATEMENT DONE ? 00125000 BZ JEX020 ..NO, CONTINUE 00126000 L R4,WDCOUNT GET CURRENT JOB COUNTER 00127000 LA R4,1(R4) INCREMENT JOB COUNTER 00128000 ST R4,WDCOUNT SAVE NEW VALUE 00129000 NI WDFLAG,X'FF'-WDFLINS RESET INSERT DONE 00130000 B JEX060 CONTINUE 00131000 SPACE 00132000 JEX020 DS 0H 00133000 SPACE 00134000 ******************************************************************* 00135000 * * 00136000 * INSERT CODE HERE WHICH DETERMINES THE ACTION FOR * 00137000 * THIS JECL STATEMENT AND WHICH SAVES THIS ACTION * 00138000 * IN THE ACTION BYTE OF THE WORK AREA. * 00139000 * * 00140000 ******************************************************************* 00141000 SPACE 4 00142000 ******************************************************************* 00143000 * * 00144000 * THE FOLLOWING PIECE OF CODE IS USED TO REACT UPON THE * 00145000 * ACTION AND TO GET THE RELATED RETURN CODE FOR * 00146000 * VSE/POWER. * 00147000 * FOR AN ACTION 'FLUSH VSE/POWER JOB' THE APPROPRIATE * 00148000 * BIT IS SET IN THE FLAG BYTE OF THE WORK AREA. * 00149000 * THIS ACTION IS ONLY ACCEPTED BY VSE/POWER AFTER * 00150000 * PROCESSING OF THE * $$ JOB STATEMENT BY VSE/POWER. * 00151000 * SINCE THE JOB EXIT IS CURRENTLY PROCESSING THE * $$ JOB * 00152000 * STATEMENT FLUSH IS INDICATED WITH THE NEXT * 00153000 * STATEMENT. * 00154000 * * 00155000 ******************************************************************* 00156000 SPACE 00157000 JEX030 DS 0H 00158000 LA R8,4 ASSUME DELETE 00159000 TM WDACTION,WDACDEL DO WE WANT TO DELETE THIS 00160000 * STATEMENT ? 00161000 BO JEXDONE IF YES, RETURN TO VSE/POWER 00162000 SPACE 00163000 TM WDACTION,WDACINS DO WE WANT TO INSERT ? 00164000 BZ JEX040 ... BRANCH IF NOT 00165000 LA R8,8 GET PROPER RETURN CODE 00166000 LA R0,INSERT POINT TO CORRECT STATEMENT 00167000 LA R1,L'INSERT GET PROPER LENGTH 00168000 OI WDFLAG,WDFLINS INDICATE INSERT DONE 00169000 B JEXDONE RETURN TO VSE/POWER 00170000 SPACE 00171000 JEX040 DS 0H 00172000 OI WDFLAG,WDFLPOW ASSUME FLUSH OF VSE/POWER JOB 00173000 TM WDACTION,WDACFLH DO WE WANT TO FLUSH VSE/POWER JOB ? 00174000 BO JEX060 ..YES, CONTINUE 00175000 SPACE 00176000 NI WDFLAG,X'FF'-WDFLPOW RESET FLUSH INDICATION 00177000 SPACE 00178000 TM WDACTION,WDACCHG DO WE WANT TO CHANGE THIS 00179000 * STATEMENT ? 00180000 BZ JEX060 ..NO, CONTINUE 00181000 * MVC FIELD,NOTCHA MOVE IN CHANGE INFO 00182000 B JEX060 CONTINUE 00183000 SPACE 00184000 JEX050 DS 0H 00185000 TM WDFLAG,WDFLPOW FLUSH VSE/POWER JOB TO DO ? 00186000 BZ JEX060 ..NO, CONTINUE 00187000 LA R8,16 INDICATE FLUSH VSE/POWER JOB 00188000 NI WDFLAG,X'FF'-WDFLPOW RESET FLUSH VSE/POWER JOB 00189000 B JEXDONE 00190000 SPACE 00191000 JEX060 DS 0H 00192000 SR R8,R8 GET NORMAL RETURN CODE 00193000 SPACE 1 00194000 * 00195000 * R E T U R N T O V S E / P O W E R 00196000 * 00197000 SPACE 00198000 JEXDONE DS 0H 00199000 MVI WDACTION,X'00' CLEAR ACTION BYTE 00200000 LR RF,R8 GET RETURN CODE 00201000 BR RE AND RETURN TO VSE/POWER LOG.RDR 00202000 EJECT 00203000 *********************************************************************** 00204000 * SUBROUTINE TO ISSUE MESSAGE ON OPERATOR CONSOLE * 00205000 * * 00206000 * USAGE OF VSE/POWER MACRO IPW$WTO: * 00207000 * THIS MACRO, TOGETHER WITH SOME INDICATIONS SET IN THE TCB, * 00208000 * CAN BE USED TO DISPLAY A MESSAGE ON THE CENTRAL OPERATOR * 00209000 * CONSOLE. * 00210000 * THE USAGE OF THIS MACRO DESTROYS THE REGISTER R0 - R3. * 00211000 * THE MESSAGE TO BE DISPLAYED SHOULD CONTAIN ALPHAMERIC * 00212000 * CHARACTERS ONLY. * 00213000 * * 00214000 *********************************************************************** 00215000 SPACE 2 00216000 SUBWTO DS 0H 00217000 STCM R7,7,TCMW+1 PASS MESSAGE ADDRESS 00218000 MVI TCMW,X'00' CLEAR OPTION BYTE 00219000 OI TCMW,TCPCOP FORCE MESSAGE TO CONSOLE 00220000 OI TCMW,TCDNMM SUPPRESS MESSAGE MODIFICATION 00221000 SPACE 00222000 IPW$WTO TCMW ISSUE MESSAGE 00223000 SPACE 00224000 MVI TCMW,X'00' CLEAR OPTION BYTE 00225000 BR R6 RETURN TO CALLER 00226000 SPACE 5 00227000 DROP R2,R3 RELEASE ADDRESSABILITY 00228000 DROP RA,RB RELEASE ADDRESSABILITY 00229000 EJECT 00230000 SPACE 00231000 ******************************************************************* 00232000 * D E F I N I T I O N S * 00233000 ******************************************************************* 00234000 SPACE 00235000 CUSTNEED DC CL9'* $$ JOB ' ACTION FOR JOB STATEMENT REQUIRED 00236000 INSERT DC CL80'* THIS RECORD IS INSERTED BY JOB EXIT' 00237000 NOTCHA DC C'CHANGED' CHANGE INFO 00238000 SPACE 2 00239000 JEXMSG1 DC AL1(JEXMSG1L-JEXMSG1-1) LENGTH OF MESSAGE 00240000 DC C'INCORRECT SIZE OF WORKAREA GIVEN, 50 BYTES NEEDED' 00241000 JEXMSG1L EQU * 00242000 SPACE 1 00243000 JEXMSG2 DC AL1(JEXMSG2L-JEXMSG2-1) LENGTH OF MESSAGE 00244000 DC C'DISABLE JOBEXIT USING PVARY' 00245490 JEXMSG2L EQU * 00246000 SPACE 1 00246200 JEXMSG3 DC AL1(JEXMSG3L-JEXMSG3-1) LENGTH OF MESSAGE 00246400 DC C'STOP AND RESTART READER TASK. RELOAD JOBEXIT' 00246600 JEXMSG3L EQU * 00246800 SPACE 2 00247000 CDSECT DSECT DSECT FOR JECL SATEMENT 00248000 COMPARE DS CL9 PREFIX OF JECL STATEMENT 00249000 DS CL71 FILLER 00250000 SPACE 00251000 WDSECT DSECT , DSECT FOR WORK AREA 00252000 WDLENGTH DS F LENGTH OF WORK AREA 00253000 WDCOUNT DS F COUNTER TO MAINTAIN NUMBER OF 00254000 * JOBS PROCESSED 00255000 WDACTION DS X'00' ACTION BYTE 00256000 WDACINS EQU X'80' .. INSERT STATEMENT 00257000 WDACDEL EQU X'40' .. DELETE STATEMENT 00258000 WDACFLH EQU X'20' .. FLUSH VSE/POWER JOB 00259000 WDACCHG EQU X'10' .. CHANGE STATEMENT 00260000 WDFLAG DS X'00' FLAG BYTE 00261000 WDFLINS EQU X'80' .. INSERT DONE 00262000 WDFLPOW EQU X'40' .. FLUSH VSE/POWER JOB TO DO 00263000 WDAREA DS CL40' ' WORK AREA 00264000 WDLEN EQU *-WDSECT LENGTH OF WORK AREA 00264500 SPACE 2 00265000 IPW$EQU , DEFINE REGISTER EQUATES AS 00266000 * USED IN VSE/POWER CODING 00267000 SPACE 2 00268000 IPW$DPA , LAYOUT OF COMMON ADDRESS TABLE 00269000 * (CAT) ALSO CALLED PERMANENT AREA 00270000 * OF VSE/POWER. 00271000 SPACE 2 00272000 IPW$DQC , LAYOUT OF DISK MANAGEMENT BLOCK 00273000 SPACE 2 00274000 IPW$DQR , LAYOUT OF INTERNAL QUEUE RECORD 00274300 SPACE 2 ADDRESSED BY TCQV OF TCB 00274600 IPW$DTC , LAYOUT OF TASK CONTROL BLOCK 00275000 SPACE 2 00276000 * END NOT REQUIRED FOR '.A' COPY BOOK 00277000