//TSGMXZ1A JOB (AD00),'#04D42 ZELDEN', // NOTIFY=&SYSUID, // CLASS=M,MSGCLASS=H,MSGLEVEL=(1,1) //* //C EXEC PGM=ASMA90, // PARM=(NODECK,OBJECT) //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR // DD DSN=SYS1.MODGEN,DISP=SHR //SYSUT1 DD UNIT=SYSALLDA,SPACE=(1024,(120,120),,,ROUND) //SYSPUNCH DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSLIN DD DSN=&OBJ,SPACE=(3040,(40,40),,,ROUND),UNIT=SYSALLDA, // DISP=(MOD,PASS), // DCB=(BLKSIZE=3040,LRECL=80,RECFM=FBS,BUFNO=1) //SYSIN DD * TITLE 'JOBCHECK - CHECK IF JOB IS ACTIVE IN THE SYSTEM' PRINT NOGEN *********************************************************************** * THIS PROGRAM WILL CHECK IF A JOB (STC,TSU, OR JOB) * * IS ACTIVE IN THE SYSTEM. * * * * THE PROGRAM MUST BE PASSED A PARM OF THE JOB TO CHECK. * * * * IF THE JOB IS FOUND THE CONDITION CODE IS SET TO 0. * * IF THE JOB IS NOT FOUND THE CONDITION CODE IS SET TO 4. * * * * NORMAL COMPLETION MESSAGES: * * JOBCHECK - JOB XXXXXXXX WAS ACTIVE IN THE SYSTEM - CONDITION CODE * * SET TO 00 * * JOBCHECK - STC XXXXXXXX WAS ACTIVE IN THE SYSTEM - CONDITION CODE * * SET TO 00 * * JOBCHECK - XXXXXXXX WAS NOT ACTIVE IN THE SYSTEM - CONDITION CODE * * SET TO 04 * * * * ABEND MESSAGES: * * JOBCHECK - NO PARM VALUE ENTERED * * U0001 ABEND * * JOBCHECK - BAD PARM - MAXIMUM JOBNAME LENGTH IS 8 CHARACTERS * * U0002 ABEND * *********************************************************************** *** SAMPLE JCL: *** *** //JOBCHECK JOB (ACCT),'CHK FOR ACTIVE JOB',CLASS=M *** //STEP1 EXEC PGM=JOBCHECK,PARM=MYJOB *** // *********************************************************************** * UPDATES: * 04/04/2016 MSZ ADDED AMODE 31 / RMODE 24 ASSEMBLER DIRECTIVES TO * TO SUPPORT ASVT IN 31-BIT STORAGE IN Z/OS 2.1 * AND ABOVE VIA DIAGXX CBLOC *********************************************************************** *** * * REGISTER EQUATES AND USAGE * R01 EQU 1 INITIAL POINTER TO INPUT PARM R02 EQU 2 WORK REG R03 EQU 3 POINTS TO PARM / MAX # ASVT ENTRIES R04 EQU 4 WORK - POINTS TO CURRENT ADDR IN ASVT R05 EQU 5 WORK REG R10 EQU 10 BASE REG FOR ASCB R11 EQU 11 BASE REG FOR ASVT R12 EQU 12 BASE REGISTER R13 EQU 13 POINTER TO SAVE AREA R14 EQU 14 LINKAGE REGISTER (RETURN ADDRESS) R15 EQU 15 LINKAGE REGISTER (ENTRY POINT) * JOBCHECK CSECT JOBCHECK AMODE 31 ADDED FOR IHAASVT IN 31-BIT MODE JOBCHECK RMODE 24 ADDED FOR IHAASVT IN 31-BIT MODE B START-JOBCHECK(R15) DC AL1(START-*) DC C'JOBCHECK &SYSDATE &SYSTIME ' DC C'*** AUTHOR: MARK ZELDEN ***' START SAVE (14,12) SAVE REGISTERS LR R12,R15 SET UP ADDRESSABILITY USING JOBCHECK,R12 SET UP BASE REGISTER LR R02,R13 SAVE ADDR OF PREVIOUS SAVEAREA LA R13,SAVEAREA POINT TO CURRENT SAVEAREA ST R13,8(R02) SAVE THIS PROGRAM'S SAVEAREA ADDRESS ST R02,4(R13) SAVE CALLERS SAVEAREA ADDRESS * ==================================================================== L R03,0(R01) POINT TO PARM VALUE SR R02,R02 ZERO EX REG LH R02,0(R03) LOAD EX REG FROM PARM LENGTH CL R02,=F'8' PARM LENGTH GREATER THAN 8 ? BH BADPARM YES, BRANCH LTR R02,R02 PARM LENGTH = 0 ? BZ NOPARM YES, BRANCH BCTR R02,0 DECREMENT FOR EXECUTE MOVE EX R02,MVJOBNM MOVE JOBNAME ******************************************************************* * POINT TO ASVT ******************************************************************* L R11,CVTPTR POINT TO CVT - X'10' USING CVT,R11 MAP CVT L R11,CVTASVT POINT TO ASVT DROP R11 TELL ASMBLR TO STOP USING R11 FOR CVT USING ASVT,R11 MAP ASVT LA R04,ASVTENTY POINT TO FIRST ENTRY IN TABLE L R03,ASVTMAXU LOAD MAX NUMBER OF ENTRIES ******************************************************************* * THIS ROUTINE CHECKS EACH ASVT ENTRY. * IF THE HIGH ORDER BIT IS ON, THE ENTRY IS THE ADDRESS OF THE * NEXT AVAILABLE ASID (OR THE LAST ENTRY IF ZEROS). * IF THE HIGH ORDER BIT IS NOT ON, THE ENTRY IS THE ADDRESS * OF THE ASCB FOR THAT ENTRY. ******************************************************************* ASVTLOOP TM 0(R04),ASVTAVAL IS THIS AN ASCB ADDRESS ? BNO CHKASCB YES, BRANCH LA R04,4(,R04) NO, POINT TO NEXT ENTRY IN ASVT BCT R03,ASVTLOOP GO CHECK NEXT ASVT ENTRY B NOTFOUND NO MORE ENTRIES - BRANCH ******************************************************************* * WE HAVE A VALID ASCB ADDRESS - CHECK IT ******************************************************************* CHKASCB L R10,0(R04) POINT TO ASCB USING ASCB,R10 MAP IT L R05,ASCBJBNI POINT TO JOBNAME CL R05,=F'0' WAS THIS A START/MOUNT/LOGON ? BE NOTAJOB YES, BRANCH CLC JOBNAME,0(R05) IS IT THE ASCB OF JOB ON THE PARM? BE FOUND YES, BRANCH LA R04,4(,R04) NO, POINT TO NEXT ENTRY IN ASVT BCT R03,ASVTLOOP GO CHECK NEXT ASVT ENTRY NOTAJOB L R05,ASCBJBNS POINT TO START/MOUNT/LOGON NAME CLC JOBNAME,0(R05) IS IT THE ASCB OF JOB ON THE PARM? BE CHGWTO YES, BRANCH LA R04,4(,R04) NO, POINT TO NEXT ENTRY IN ASVT BCT R03,ASVTLOOP GO CHECK NEXT ASVT ENTRY CHGWTO MVC FNDWTO+19(3),=C'STC' PLUG WTO WITH "STC" B FOUND BRANCH ******************************************************************* * JOB NOT FOUND - WRITE MSG AND END RC=4 ******************************************************************* NOTFOUND MVC NFNDWTO+19(8),JOBNAME PLUG WTO WITH JOB NAME NFNDWTO WTO 'JOBCHECK - XXXXXXXX WAS NOT ACTIVE IN THE SYSTEM - CONDX ITION CODE SET TO 04',ROUTCDE=11 L R13,4(R13) RESTORE CALLERS SAVAREA ADDRESS RETURN (14,12),RC=4 RETURN CONTROL AND SET COND CODE TO 4 ******************************************************************* * JOB FOUND - WRITE MSG AND END RC=0 ******************************************************************* FOUND MVC FNDWTO+23(8),JOBNAME PLUG WTO WITH JOB NAME FNDWTO WTO 'JOBCHECK - JOB XXXXXXXX WAS ACTIVE IN THE SYSTEM - CONDX ITION CODE SET TO 00',ROUTCDE=11 B RETURN0 GET OUT - RETURN CODE 0 ******************************************************************* NOPARM WTO 'JOBCHECK - NO PARM VALUE ENTERED',ROUTCDE=11 ABEND 01,REASON=0 U0001 ABEND - NO DUMP B RETURN0 GET OUT - RETURN CODE 0 ******************************************************************* BADPARM WTO 'JOBCHECK - BAD PARM - MAXIMUM JOBNAME LENGTH IS 8 CHARAX CTERS',ROUTCDE=11 ABEND 02,REASON=8 U0002 ABEND - NO DUMP ******************************************************************* RETURN0 L R13,4(R13) RESTORE CALLERS SAVAREA ADDRESS RETURN (14,12),RC=0 RETURN CONTROL AND SET COND CODE TO 0 EJECT * ==================================================================== MVJOBNM MVC JOBNAME(0),2(3) EXECUTED MOVE INSTRUCTION JOBNAME DC CL8' ' JOB NAME TO CHECK SAVEAREA DS 18F SAVE AREA LTORG CVT DSECT=YES IHAASVT IHAASCB END /* //L EXEC PGM=IEWL,COND=(5,LT,C), // PARM='LIST,LET,XREF,MAP' //SYSLIN DD DSN=&OBJ, // DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSUT1 DD UNIT=SYSALLDA,SPACE=(1024,(120,120),,,ROUND) //SYSPRINT DD SYSOUT=* //************************************************************* //SYSLMOD DD DISP=SHR,DSN=????????.LOAD(JOBCHECK) //*************************************************************