//MARKA JOB (0),'ASSEMBLE GETMAXCC',CLASS=A,MSGCLASS=T //ASMLKD EXEC ASMFCL,MAC='SYS1.AMODGEN',MAC1='MVSSRC.SYM101.F01', // PARM.ASM='OBJECT,NODECK,TERM,XREF(SHORT)', // PARM.LKED='LIST,MAP,NCAL,AC=0' //ASM.SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB STANDARD MACRO LIBRARY // DD DISP=SHR,DSN=SYS1.AMODGEN MOST OF THE OS DSECTS // DD DISP=SHR,DSN=SYS2.MACLIB YREGS //ASM.SYSIN DD * *********************************************************************** * * * GETMAXCC: SCAN ALL PRIOR STEPS IN THE JOB TO OBTAIN THE MAXCC OF * * OF THE PRIOR STEPS IN THE CURRENTLY RUNNING JOB. * * -- SAMPLE (WORKING) CODE -- * * THIS WOULD NORMALLY BE EMBDEDDED INSIDE A LARGER PROGRAM * * THAT NEEDS THE INFORMATION FOR DECISION MAKING. * * THIS IS JUST A CUT-DOWN HOW TO GET THE INFORMATION EXAMPLE* * * * REQUIRES - THIS IS FOR MVS3.8J (TESTED ON TURNKEY3) * * * * --NOTES-- * * TO TEST THIS CODE SNIPPET LEAVE DEBUG SET ON SO THE * * RESULTS ARE WTO'ED; OTHERWISE AS THIS WOULD NORMALLY * * BE IN ONE OF MY PROGRAMS THAT USES IT THERE WOULD BE NO * * OUTPUT TO LOOK AT. * * * * EXAMPLE JOBLOG WITH DEBUGGING ON AND DELIBERATELY SETTING NON-ZERO * * RETURN CODES. THE DEBUGGING WTO'S FROM GETMAXCC ARE PREFIXED + * * $HASP373 MARKA STARTED - INIT 1 - CLASS A - SYS MID1 * * IEFACTRT - Stepname Procstep Program Retcode * * MARKA ASMLKD ASM IFOX00 RC= 0000 * * MARKA ASMLKD LKED IEWL RC= 0000 * * MARKA SET08 SETRC RC= 0008 * * MARKA SET04 SETRC RC= 0004 * * +ASM IFOX00 00000000 * * +LKED IEWL 00000000 * * +SET08 SETRC 00000008 * * +SET04 SETRC 00000004 * * +JOB:MARKA MAXCC=00000008 * * MARKA TESTIT2 GETMAXCC RC= 0000 * * $HASP395 MARKA ENDED * * * *********************************************************************** LCLB &DEBUGON &DEBUGON SETB 1 1=>ON, 0=>OFF PRINT NOGEN *********************************************************************** * DSECTS REQUIRED * *********************************************************************** YREGS DSECT IEFAJCTB DSECT IEZJSCB IKJTCB DSECT=YES IHAPSA PREFIX SAVE AREA SCT DSECT IEFASCTB , SCT (STEP CONTROL TABLE) * THESE FIELDS ARE COMMENTED IN IEFASCTB IN 3.8J AND MUST * BE MANUALLY ADDRESSED. AND BIT PATTERN TESTS MISSING IN * ASM SECTION OF MACRO SO MAPPED BASED ON PL1 FIELDS SCTSTEND EQU SCTCATCT+6 1 BYTE FIELD USR MUST ADDRESS SCTSTSRT EQU B'10000000' STEP STARTED SCTSTPND EQU B'01000000' STEP ENDED LTORG EJECT PRINT GEN *********************************************************************** * GETMAXCC: CODE SECTION * *********************************************************************** GETMAXCC CSECT STM R14,R12,12(13) BALR R12,R0 USING *,R12 LA R15,SAVEAREA ST R15,8(R13) ST R13,4(R15) LR R13,R15 SPACE 3 L R2,PSATOLD-PSA R2 = A(CURRENT TCB). L R2,TCBJSCB-TCB(,R2) R2 = A(JSCB). L R2,JSCBACT-IEZJSCB(,R2) R2 = A(ACTIVE JSCB). L R2,JSCBJCT-IEZJSCB(,R2) R2 = A(OS JCT). USING INJMJCT-16,R2 ADDRESS JCT MVC JOBNAME(L'JOBNAME),JCTJNAME STORE JOB NAME TM JCTJSTAT,JCTABEND IF JOB DIDN'T ABEND, BZ DOMAXCC GET CONDITION CODE. * ELSE MVC JOBMAXCC,JCTACODE SAVE ABEND CODE. MVI ABENDFLG,C'Y' RECORD JOB ABENDED * DEBUG - log that a step in the job abended AIF (&DEBUGON EQ 0).DSKIP3 MVC DBG3+12(8),JOBNAME JOBNAME TO MSG DBG3 WTO 'JOB:xxxxxxxx A STEP ABENDED' .DSKIP3 ANOP SPACE 2 B EXIT DOMAXCC DS 0H L R2,JCTSDKAD R2 = A(SCT). USING INSMSCT-16,R2 SLR R3,R3 SCTLOOP DS 0H SRL R2,8 MAKE R2 A NORMAL ADDRESS LTR R2,R2 IF END OF SCT'S, BZ GOTCODE EXIT. SPACE 2 TM SCTSTEND,SCTSTSRT+SCTSTPND IF STEP DIDN'T RUN, BNO NEXTSCT GET NEXT. * DEBUG - make sure we are checking all the job steps AIF (&DEBUGON EQ 0).DSKIP1 MVC DBG2+8(8),SCTSNAME MVC DBG2+17(8),SCTPGMNM LH R4,SCTSEXEC current step cc ST R4,HEXBIN BAL R7,BIN2HEX MVC DBG2+26(8),HEXDIS DBG2 WTO 'xxxxxxxx xxxxxxxx xxxxxxxx ' .DSKIP1 ANOP SPACE 2 CH R3,SCTSEXEC CHECK FOR NEW MAXIMUM CC. BNL NEXTSCT LH R3,SCTSEXEC SAVE NEW MAXIMUM CC. NEXTSCT DS 0H L R2,SCTANSCT R2 = A(NEXT SCT). B SCTLOOP LOOP. GOTCODE DS 0H ST R3,JOBMAXCC SAVE MAXIMUM CC. DROP R2 SPACE 2 * DEBUG - Log the MAXCC so we can check it AIF (&DEBUGON EQ 0).DSKIP2 MVC DBG1+12(8),JOBNAME JOBNAME TO MSG L R3,JOBMAXCC ST R3,HEXBIN BAL R7,BIN2HEX MVC DBG1+27(8),HEXDIS DBG1 WTO 'JOB:xxxxxxxx MAXCC=xxxxxxxx ' .DSKIP2 ANOP SPACE 2 EXIT L R13,SAVEAREA+4 RESTORE POINTER TO CALLER'S SAVE AREA LM R14,R12,12(R13) RESTORE REGISTERS SLR R15,R15 EXIT CODE 0 BR R14 RETURN TO SYSTEM AIF (&DEBUGON EQ 0).DSKIP4 EJECT *********************************************************************** * BIN2HEX: DEBUGGING AID * *CONVERTS THE REGISTER SAVED IN HEXBIN TO A DISPLAYABLE VALUE IN HEXDIS *********************************************************************** BIN2HEX UNPK HEXDIS(L'HEXDIS+1),HEXBIN(L'HEXBIN+1) TR HEXDIS,HEXTRT HEXDIS is displayable value BR R7 RETURN CNOP 0,4 Fullword alignment. HEXTRT EQU *-X'F0' 16 Byte Translate Table. SPACE , * 0 1 2 3 4 5 6 7 8 9 A B C D E F SPACE , DC XL16'F0F1F2F3F4F5F6F7F8F9C1C2C3C4C5C6' F0 - FF HEXBIN DS XL4 4 Byte Binary Field. DS X 1 Byte Pad for UNPK. HEXDIS DS CL8 8 Byte Displayable Hex Field. DS C 1 Byte Pad for UNPK. .DSKIP4 ANOP LTORG EJECT SAVEAREA DS 18F JOBNAME DS CL8 DOUBLE DC D'0' DS 0F WORD ALIGN, REG CC STORED IN HERE JOBMAXCC DS CL4 CL4=LEN OF JCTACODE ABENDFLG DC C'N' DEFAULT IS JOB HAS NOT ABENDED END //ASM.SYSTERM DD SYSOUT=* //LKED.SYSLMOD DD DSN=MARK.LIB.LOAD(GETMAXCC),DISP=SHR //