Last active
April 28, 2016 13:06
-
-
Save JohnArchieMckown/b27747d0c4750a258997 to your computer and use it in GitHub Desktop.
z/OS REXX program which uses the SDSF / REXX interface to copy all held sysout from the JES SPOOL to individual disk data sets or z/OS UNIX files. The logic does not copy output which is already on disk, as determined by the DSN of file already existing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* REXX */ | |
| PARSE ARG JOBNAME HLQ . | |
| NUMERIC DIGITS 12 | |
| IF JOBNAME='' THEN JOBNAME='*' | |
| HLQ=STRIP(HLQ,'B',"'") | |
| IF HLQ='' THEN HLQ='SYSJO' | |
| IF '/' = LEFT(HLQ,1) THEN DO | |
| if syscalls('ON')>3 then | |
| do | |
| say 'Unable to establish the SYSCALL environment' | |
| return | |
| end | |
| end | |
| XX=ISFCALLS('ON') | |
| IF XX <> 0 THEN DO | |
| SAY 'ISFCALLS RC='XX | |
| RETURN XX | |
| END | |
| ISFSORT='JOBID' | |
| ISFPREFIX=JOBNAME | |
| ISFOWNER='*' | |
| ISFFILTER='' | |
| ADDRESS SDSF 'ISFEXEC ST (DELAYED)' | |
| IF RC <> 0 THEN DO | |
| SAY 'ISFEXEC RC='RC | |
| RETURN RC | |
| END | |
| DO IX=1 TO JNAME.0 | |
| /* "LISTALC SYSNAMES STATUS" */ | |
| SAY 'JBN='JNAME.IX' JOBNUMBER='JOBID.IX' QUEUE='QUEUE.IX | |
| IF QUEUE.IX <> 'PRINT' & , | |
| QUEUE.IX <> 'OUTPUT' , | |
| THEN ITERATE | |
| IF '/' = LEFT(HLQ,1) THEN DO | |
| DATEE=DATEE.IX | |
| TIMEE=TIMEE.IX | |
| IF DATEE="N/A" | TIMEE="N/A" THEN DO | |
| DATEE=DATE("S") /* YYYYMMDD */ | |
| TIMEE=TIME("N") /* HH:MM:SS */ | |
| END | |
| ELSE DO | |
| PARSE VAR DATEE YY '.' DDD | |
| YY=RIGHT(YY,4,'0') | |
| IF 0=DATATYPE(YY,"W")* , | |
| DATATYPE(DDD,"W") | |
| THEN DO | |
| TIMEE=TIMER.IX | |
| DATEE=DATER.IX | |
| PARSE VAR DATEE YY '.' DDD | |
| YY=RIGHT(YY,4,'0') | |
| END | |
| TIMEE=LEFT(TIMEE,8) /* HH:MM:SS */ | |
| DATEE=DDD+DATE("B",YY"0101","S")-1 | |
| DATEE=DATE('S',DATEE,'B') | |
| END | |
| /* calculate POSIX epoch time | |
| number of seconds since midnight on Jan 1, 1970 | |
| */ | |
| PARSE VAR DATEE 1 YYYY 5 MM 7 DD | |
| mtime=DATE('B',DATEE,'S')-DATE('B',"19700101",'S') | |
| DATEE=YYYY"-"MM"-"DD | |
| PARSE VAR TIMEE HH ":" M2 ":" SS | |
| mtime= SS+60*(M2+60*(HH+24*mtime)) | |
| /* mtime is used in utime for setting the modified time */ | |
| RFC3339=DATEE"T"TIMEE | |
| /* RFC3339 is the Job Start time in RFC3339 format */ | |
| /* Except that it is LOCAL time instead of UTC */ | |
| PATH=HLQ"/"JNAME.IX"."JOBID.IX"."RFC3339".txt" | |
| SAY , | |
| "ALLOC DD(SYSJO) FILEDATA(TEXT) ", | |
| "PATH('"PATH"') " , | |
| " RECFM(V B A) LRECL(255) BLKSIZE(27998) ", | |
| " REUSE ", | |
| " FILEDATA(TEXT) ", | |
| " PATHMODE(SIRWXU) PATHOPTS(OEXCL,OCREAT,OWRONLY)" | |
| "ALLOC DD(SYSJO) FILEDATA(TEXT) ", | |
| "PATH('"PATH"') " , | |
| " RECFM(V B A) LRECL(255) BLKSIZE(27998) ", | |
| " REUSE ", | |
| " FILEDATA(TEXT) ", | |
| " PATHMODE(SIRWXU) PATHOPTS(OEXCL,OCREAT,OWRONLY)" | |
| CC=RC | |
| END | |
| ELSE DO | |
| PATH='' | |
| SAY , | |
| "ALLOC DDN(SYSJO) DSN('"HLQ"."JNAME.IX"."JOBID.IX"')", | |
| " RECFM(V B A) LRECL(255) BLKSIZE(27998) ", | |
| " NEW CATALOG SPACE(10,50) CYLINDERS RELEASE" | |
| "ALLOC DDN(SYSJO) DSN('"HLQ"."JNAME.IX"."JOBID.IX"')", | |
| " RECFM(V B A) LRECL(255) BLKSIZE(27998) ", | |
| " NEW CATALOG SPACE(10,50) CYLINDERS RELEASE" | |
| CC=RC | |
| END | |
| IF CC <> 0 THEN DO | |
| SAY "FAILED TO ALLOCATE "JNAME.IX"."JOBID.IX" RC="CC | |
| ITERATE | |
| END | |
| ADDRESS SDSF "ISFACT ST TOKEN('"TOKEN.IX"') PARM(NP SA)" | |
| DO JX=1 TO ISFDDNAME.0 | |
| DO FOREVER | |
| "EXECIO 10000 DISKR "ISFDDNAME.JX"(STEM LINE. " | |
| LINES = LINE.0 | |
| IF RC=2 THEN RC=0 | |
| IF RC <> 0 THEN DO | |
| SAY "LINES READ="LINES" RC="RC | |
| EXIT 12; | |
| END | |
| "EXECIO * DISKW SYSJO (STEM LINE." | |
| DROP LINE. | |
| IF LINES<10000 THEN LEAVE | |
| END | |
| "EXECIO 0 DISKR "ISFDDNAME.JX"(FINIS" | |
| END | |
| DROP ISFDDNAME. | |
| "EXECIO 0 DISKW SYSJO (FINIS" | |
| "FREE DDN(SYSJO)" | |
| IF PATH<>'' THEN DO | |
| address syscall "chmod (PATH) 444" | |
| SAY PATH MTIME | |
| address syscall "utime (PATH) " mtime mtime | |
| END | |
| END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment