Joined: 01 Sep 2006 Posts: 2547 Location: Silicon Valley
In:
Code:
"ALLOC F(TEMP2) DA('TEST.MASRS.REXX.TEMP1') "
SAY 'RC' RC
"EXECIO * DISKR TEMP1 (STEM JOBDET. FINIS"
SAY 'RC' RC
You are allocating TEMP2 but trying to read TEMP1. I think you should use the same file name in both cases. What are the return codes?
But if I understand what you are doing, I do not think you need to write to TEMP1 at all. It looks like you are combining a bunch of lines into one big stem variable by writing to the file then reading them back in. I think you can just gather them into a stem
Code:
drop jobdet.
jobdet.0 = 0 /* set to zero early in the program*/
Code:
DO J= 1 TO OUT.0
STR = SUBSTR(OUT.J,171,2)
IF STR = "CC" THEN
DO
jobdet.0 = jobdet.0 +1
line_count = jobdet.0
jobdet.line_count = OUT.J
END
END
Here is final working code to extract cputime and elapsed time from spool with a small screen.
Code:
/* REXX */
ADDRESS TSO
/***************************************************/
/* TO SHOW THE PANEL */
/***************************************************/
"ISPEXEC ADDPOP"
"ISPEXEC LIBDEF ISPPLIB DATASET ID('TEST.XYZ.REXX.PANEL')"
"ISPEXEC DISPLAY PANEL (SCPUTIME)"
"ISPEXEC REMPOP"
/***************************************************/
/* TO ALLOCATE INPUT AND OUTPUT FILES */
/***************************************************/
/*"ALLOC F(INPUTF) DA('TEST.XYZ.REXX.JOBNAME') SHR"*/
Y=OUTTRAP('ON')
"DELETE '"||OUTDSN||"' PURGE"
Y=OUTTRAP('OFF')
IF RC >= 0 THEN
DO
"ALLOC F(OUTPUTF) DA ('"OUTDSN"') NEW " ,
"TRACKS SPACE(100,100) LRECL(80) RECFM(F,B) DSORG(PS)"
IF RC > 0 THEN
DO
SAY "ERROR!!! ALLOCATING THE OUTPUT DATASET."
EXIT
END
END
/***************************************************/
/* INITIALIZE VARIABLES */
/***************************************************/
WSUB = 0
DROP JOBDET
JOBDET.0 = 0
DROP JOBNAME
JOBNAME.0 = 0
/* IF THE SCREEN DOES NOT WORK TO USE BATCH INPUT FILE */
/*"EXECIO * DISKR INPUTF (STEM JOBNAME. FINIS" /*READ INPUT FILE*/*/
/***************************************************/
/* TO GET VALUES FROM THE PANEL */
/***************************************************/
IF JOBN1 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.JOBC = JOBN1
END
IF JOBN2 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.2 = JOBN2
END
IF JOBN3 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.3 = JOBN3
END
IF JOBN4 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.4 = JOBN4
END
IF JOBN5 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.5 = JOBN5
END
IF JOBN6 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.6 = JOBN6
END
IF JOBN7 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.7 = JOBN7
END
IF JOBN8 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.8 = JOBN8
END
IF JOBN9 /= '' THEN
DO
JOBNAME.0 = JOBNAME.0 + 1
JOBC = JOBNAME.0
JOBNAME.9 = JOBN9
END
/***************************************************/
/* TO PRINT HEADER IN THE REPORT */
/***************************************************/
PUSH 'JOBNAME , JOBID , OWNER , MAX CC , CPU TIME' ,
' , ELAPSED'
"EXECIO 1 DISKW OUTPUTF "
SAY 'PROCESSING REQUEST, PLEASE WAIT...'
DO I = 1 TO JOBNAME.0 /* LOOPING UNTIL END OF FILE */
"ALLOC F(ISFIN) TRACKS SPACE(1) REU" /* USED BY SDSF */
"ALLOC F(ISFOUT) NEW DELETE REU " /* USED BY SDSF */
/***************************************************/
/* TO GET SPOOL DETAILS */
/***************************************************/
X=OUTTRAP("OUT.")
"EXECIO * DISKR ISFOUT (STEM OUT. FINIS"
X=OUTTRAP("OFF")
DO J= 1 TO OUT.0
CSTR = SUBSTR(OUT.J,171,2) /*GET MAXCC */
IF CSTR = "CC" THEN /*FOR SUCCESSFUL JOBS ONLY */
DO
JOBDET.0 = JOBDET.0 +1
WSUB = JOBDET.0
JOBDET.WSUB = OUT.J
END
END
"FREE DD(ISFIN,ISFOUT)"
END
/***************************************************/
/* FOR GETTING THE CPU AND ELAPSED TIME */
/***************************************************/
DO J = 1 TO WSUB
P_JOBN = SUBSTR(JOBDET.J,8,8) /*GET JOBNAME */
P_JOBI = SUBSTR(JOBDET.J,17,8) /*GET JOBID */
P_OWN = SUBSTR(JOBDET.J,26,8) /*GET OWNER */
P_CC = SUBSTR(JOBDET.J,171,8) /*GET MAXCC */
IF P_CC = 'CC 0000' THEN /*FOR SUCCESSFUL JOBS ONLY*/
DO
/***************************************************/
/* FOR GETTING THE CPU TIME */
/***************************************************/
"ALLOC F(ISFIN) TRACKS SPACE(1) REU" /* USED BY SDSF */
"ALLOC F(ISFOUT) NEW DELETE REU " /* USED BY SDSF */
"ALLOC F(TEMPPR1) DA('TEST.XYZ.REXX.TEMP1') NEW" /*TEMP FILE*/
/***************************************************/
/* TO GET ELAPSED TIME */
/***************************************************/
"ALLOC F(ISFIN) TRACKS SPACE(1) REU" /* USED BY SDSF */
"ALLOC F(ISFOUT) NEW DELETE REU " /* USED BY SDSF */
"ALLOC F(TEMPPR2) DA('TEST.XYZ.REXX.TEMP2') NEW" /*TEMP FILE*/