Another one, in your favourite language, originally written by Simon Brown of Willis sometime in 1992:

*process macro langlvl(os,sprog) test(all,sym);
*process rules(laxif);
-steps: proc(param) options(main) reorder;
-dcl param char(100) var;
-
-/**********************************************************************
-* STEPS - Entry's, builtins & files                                   *
-**********************************************************************/
-dcl (addr,
-     heximage,
-     index,
-     length,
-     plidump,
-     ptradd,
-     ptrvalue,
-     stg,
-     substr,
-     unspec,
-     verify) builtin;
-
-dcl sysprint file;
-
-dcl p1               ptr init (ptrvalue(16)) static;
-
-dcl 1 s1 based(p1),
-      2 p2           ptr;
-
-dcl 1 s2 based(p2),
-      2 p3           ptr;
-
-dcl 1 s3 based(p3),
-      2 *            ptr,
-      2 tcb_ptr      ptr;
-
-dcl 1 tcb based(tcb_ptr),
-      2 *(3)         ptr,
-      2 tiot_ptr     ptr,
-      2 *(41)        ptr,
-      2 jscb_ptr     ptr;
-
-dcl 1 tiot based(tiot_ptr),
-      2 jobname      char (8),
-      2 stepname     char (8);
-
-dcl 1 jscb based(jscb_ptr),
-      2 *(65)        ptr,
-      2 jscbjct      ptr,
-      2 *(13)        ptr,
-      2 jscbssib     ptr;
-
-dcl 1 jct based(jscbjct),
-      2 *(5)         ptr,
-      2 *            char,
-      2 jctjstat     bit  (8),
-      2 *            char (2),
-      2 jctjname     char (8),            /* job name                */
-      2 *(4)         ptr,
-      2 jctsdkad     char (3),            /* sva of first sct        */
-      2 *            char,
-      2 jctjctx      char (3),            /* sva of jctx             */
-      2 *            char,
-      2 jctactad     char (3),            /* sva of first act        */
-      2 *            char,
-      2 *(26)        ptr,
-      2 *            char,
-      2 jmrjmrjd     fixed dec(5,3),      /* job start date (julian) */
-      2 *(2)         ptr,
-      2 jctuser      char (7),            /* job user id             */
-      2 *            char,
-      2 jctacode     char (4);            /* job abend code          */
-
-dcl 1 ssib based(jscbssib),
-      2 *(3)         ptr,
-      2 ssibjbid     char (8);            /* subsystem job id        */
-
-dcl act_ptr ptr;
-dcl 1 act based(act_ptr),
-      2 *            char  (24),
-      2 actprgnm     char  (20),
-      2 *            char   (3),
-      2 actjnfld     char,
-      2 actaccnt     char (144);
-
-dcl sct_ptr ptr;
-dcl 1 sct based(sct_ptr),
-      2 *(6)         ptr,
-      2 sctsexec     fixed bin (15),
-      2 *(2)         char,
-      2 *(2)         ptr,
-      2 sctansct     char (3), /* sva of next sct                    */
-      2 *            char,
-      2 *(5)         ptr,
-      2 sctsclpc     char (8), /* name of step that called procedure */
-      2 sctsname     char (8), /* step name                          */
-      2 *(2)         ptr,
-      2 sctx_pch     char (3),
-      2 *            char,
-      2 *(9)         ptr,
-      2 sctpgmnm     char (8), /* program name                       */
-      2 *            char (2),
-      2 sctcdent(8)  char (6),
-      2 *            char (6),
-      2 sctstend     bit  (8);  /* bits and pieces                   */
-
-dcl sctx_ptr ptr;
-dcl 1 sctx based(sctx_ptr),
-      2 *(5)         ptr,
-      2 sctxparm     char     (100);
-
-dcl jctx_ptr         ptr;
-dcl sctxparm_v       char     (100) var;
-dcl have_had_current bit        (1) init ('0'b);
-dcl have_had_title   bit        (1) init ('0'b);
-dcl max_cc           fixed bin (15) init (0);
-dcl flag_after       bit        (1) init ('0'b);     /* A */
-dcl flag_before      bit        (1) init ('0'b);     /* B */
-dcl flag_current     bit        (1) init ('0'b);     /* C */
-dcl flag_desc        bit        (1) init ('0'b);     /* D */
-dcl flag_flush       bit        (1) init ('0'b);     /* F */
-dcl flag_nonzero     bit        (1) init ('0'b);     /* N */
-dcl flag_parm        bit        (1) init ('0'b);     /* P */
-dcl flag_zero        bit        (1) init ('0'b);     /* Z */
-
-dcl desc_max         fixed bin (31) static init (255);
-dcl desc_used        fixed bin (31) init (0);
-dcl 1 desc_array(desc_max) ctl,
-      2 stepname     char       (8),
-      2 text         char      (64) var;
-
-flag_after   = (index(param, 'A') ^= 0);
-flag_before  = (index(param, 'B') ^= 0);
-flag_current = (index(param, 'C') ^= 0);
-flag_desc    = (index(param, 'D') ^= 0);
-flag_flush   = (index(param, 'F') ^= 0);
-flag_nonzero = (index(param, 'N') ^= 0);
-flag_parm    = (index(param, 'P') ^= 0);
-flag_zero    = (index(param, 'Z') ^= 0);
-
-if ^flag_after  &
-   ^flag_before &
-   ^flag_current then
-  flag_before = '1'b;
-
-if flag_desc then
-  call load_desc_array();
-
-jctx_ptr = char3_to_ptr(jct.jctjctx);
-act_ptr  = char3_to_ptr(jct.jctactad);
-
-put skip edit(ssib.ssibjbid,
-              jct.jctjname, 'run on',
-              jct.jmrjmrjd, 'by',
-              jct.jctuser)
-             (a, x(1),
-              a, x(1), a, x(1),
-              p'99v.999', x(1), a, x(1),
-              a);
-
-call print_accounting();
-
-sct_ptr = char3_to_ptr(jct.jctsdkad);
-
-do while(sct_ptr ^= ptrvalue(0));
-  sctx_ptr = char3_to_ptr(sct.sctx_pch);
-  if unspec(substr(sctcdent(8), 1, 1)) & '04'bx then
-    do;
-      if ^have_had_title then
-        call print_title();
-
-      put skip edit(sctsclpc,
-                    sctsname,
-                    sctpgmnm)
-                   (a, x(1),
-                    a, x(1),
-                    a, x(1));
-      put edit('ABENDed')
-              (a, x(1));
-
-      if flag_desc then
-        call print_desc();
-
-      if flag_parm then
-        call print_parm();
-    end;
-  else
-    if sctstend & '80'bx then      /* started */
-      if sctstend & '40'bx then    /* ended   */
-        do;
-          if flag_before then
-            if (flag_zero    & sctsexec  = 0) |
-               (flag_nonzero & sctsexec ^= 0) then
-              do;
-                if ^have_had_title then
-                   call print_title();
-
-                put skip edit(sctsclpc, sctsname, sctpgmnm)
-                             (a, x(1), a, x(1), a, x(3));
-                put edit(sctsexec)
-                        (p'zzzz9');
-
-                if flag_desc then
-                   call print_desc();
-
-                if flag_parm then
-                   call print_parm();
-              end;
-
-          if sctsexec > max_cc then
-            max_cc = sctsexec;
-        end;
-      else
-        do;
-          if flag_current then
-            do;
-              if ^have_had_title then
-                call print_title();
-
-              put skip edit(sctsclpc, sctsname, sctpgmnm)
-                           (a, x(1), a, x(1), a, x(9));
-
-              if flag_desc then
-                call print_desc();
-
-              if flag_parm then
-                call print_parm();
-            end;
-
-          have_had_current = '1'b;
-        end;
-    else      /* not started */
-      if have_had_current then
-        if flag_after then
-          do;
-            if ^have_had_title then
-              call print_title();
-
-            put skip edit(sctsclpc, sctsname, sctpgmnm)
-                         (a, x(1), a, x(1), a, x(9));
-            if flag_desc then
-              call print_desc();
-
-            if flag_parm then
-              call print_parm();
-          end;
-        else
-          do;
-          end;
-      else
-        if flag_flush then
-          do;
-            if ^have_had_title then
-              call print_title();
-
-            put skip edit(sctsclpc, sctsname, sctpgmnm)
-                         (a, x(1), a, x(1), a, x(1));
-            put edit('Flushed') (a, x(1));
-
-            if flag_desc then
-              call print_desc();
-
-            if flag_parm then
-              call print_parm();
-          end;
-
-  sct_ptr = char3_to_ptr(sct.sctansct);
-end;
-
-if have_had_title then
-  put skip edit((69)'-')(a);
-
-put skip edit('Maximum completion code was', max_cc)
-             (a, x(2), p'zzzz9');
-
-if jctjstat & '08'bx then
-  do;
-    put skip edit('The job ABENDed', abend_code(jctacode))
-                 (a, x(1), a);
-  end;
-
-print_parm: proc;
-dcl ix fixed bin (31);
-
-ix = index(sctxparm, '00'x);
-if ix = 0 then
-  sctxparm_v = sctxparm;
-else
-  sctxparm_v = substr(sctxparm, 1, ix);
-
-put skip list('PARM=' || sctxparm_v);
-end print_parm;
-
-print_desc: proc;
-dcl ix fixed bin (31);
-
-do ix = 1 to desc_used while(sct.sctsname ^= desc_array(ix).stepname);
-end;
-
-if ix <= desc_used then
-  put edit(desc_array(ix).text) (x(1), a);
-end print_desc;
-
-char3_to_ptr: proc(ch3) returns(ptr);
-dcl ch3            char (3);
-
-dcl 1 * union,
-      2 wp  ptr,
-      2 *,
-        3 * char (1) init ('00'x),
-        3 * char (3) init (ch3);
-
-return(wp);
-end char3_to_ptr;
-
-load_desc_array: proc;
-dcl sysin file input record sequential;
-dcl (undf,eof) bit (1) init('0'b);
-
-on undefinedfile(sysin) undf = '1'b;
-on endfile(sysin)       eof  = '1'b;
-
-dcl sysin_rec char      (80);
-dcl ix        fixed bin (31);
-
-open file(sysin);
-
-if undf then
-  do;
-    put skip list('Unable to open SYSIN');
-    stop;
-  end;
-
-read file(sysin) into(sysin_rec);
-if eof then
-  do;
-    put skip list('No records in SYSIN');
-    stop;
-  end;
-
-alloc desc_array;
-
-do while(^eof);
-  ix = index(sysin_rec, ',');
-
-  if ix > 1 & ix <= 9 then
-    do;
-      desc_used                      = desc_used + 1;
-      desc_array(desc_used).stepname = substr(sysin_rec, 1, ix - 1);
-      desc_array(desc_used).text     = substr(sysin_rec, ix + 1, 64);
-    end;
-  else
-    do;
-      put skip list('Invalid record in SYSIN');
-      stop;
-    end;
-
-  read file(sysin) into(sysin_rec);
-end;
-
-close file(sysin);
-end load_desc_array;
-
-abend_code: proc(ch4) returns(char(5));
-dcl ch4 char       (4);
-dcl w4b fixed bin (31);
-dcl w4  char       (4) based(addr(w4b));
-dcl p4  pic     '9999';
-
-unspec(w4) = unspec(ch4) & '00fff000'bx;
-if unspec(w4) then
-  do;
-    return('S' || substr(hex(w4), 3, 3));
-  end;
-else
-  do;
-    unspec(w4) = unspec(ch4) & '00000fff'bx;
-    p4         = w4b;
-    return('U' || p4);
-  end;
-end abend_code;
-
-hex: proc(ch_string) returns(char(100) var);
-dcl ch_string  char       (*);
-dcl hex_string char     (100) var init ('');
-
-hex_string = heximage(addr(ch_string), stg(ch_string));
-return(hex_string);
-end hex;
-
-ch1_to_fb31: proc(ch1) returns(fixed bin(31));
-dcl ch1      char       (1);
-dcl 1 * union,
-      2 fb31 fixed bin (31),
-      2 *,
-        3 *  char       (3) init ('000000'x),
-        3 *  char       (1) init (ch1);
-
-return(fb31);
-end ch1_to_fb31;
-
-print_accounting: proc;
-dcl (nf, nc)  fixed bin (31);
-dcl p         ptr;
-dcl 1 actfield based(p),
-      2 len   char       (1),
-      2 rest  char     (144);
-dcl w_account char     (100) var init ('');
-dcl ix        fixed bin (31);
-
-nf = ch1_to_fb31(act.actjnfld);
-p  = addr(actaccnt);
-
-do ix = 1 to nf;
-  nc = ch1_to_fb31(actfield.len);
-  w_account = w_account || substr(actfield.rest, 1, nc);
-
-  if ix < nf then
-    w_account = w_account || ',';
-
-  p = ptradd(p, nc + 1);
-end;
-
-w_account = '(' || w_account || ')';
-
-put edit(w_account, '''' || actprgnm || '''')
-    (x(1), a, x(1), a);
-end print_accounting;
-
-print_title: proc;
-  put skip edit((69)'-')(a);
-  put skip edit('Step', 'Program', 'Code')
-               (x(9), a(8), x(1), a(8), x(4), a(4));
-  have_had_title = '1'b;
-end print_title;
-end steps;
-/* Old JCL skeleton **************************************************
-//.*******************************************************************
-//. Create .STEPS dataset containing summary of job steps
-//.*******************************************************************
-//#440   EXEC PGM=STEPS,COND=EVEN,
-//            PARM='/B D N'    Before Desc Nonzero
-//SYSPRINT DD DSN=&SYSUID..&MEM..STEPS,
-//            DISP=(,CATLG),
-//            UNIT=SYSDA
-//            SPACE=(TRK,(2,1),RLSE),
-//            DCB=(RECFM=VBA,LRECL=125,BLKSIZE=0)
-//SYSIN    DD *
-A&MEM7,Find PLI program (&MEM)
-B&MEM7,PLI Compiler (Macro/Include) (&MEM)
-V&MEM7,IDMS Special Versions (&MEM)
-C&MEM7,IDMS Preprocessor (&MEM)
-D&MEM7,DB2 Precompiler (&MEM)
-Z&MEM7,CICS Preprocessor (&MEM)
-E&MEM7,PLI Compiler (Compile) (&MEM)
-F&MEM7,InterTest Postprocess listing (&MEM)
-G&MEM7,Find LEL (&MEM)
-H&MEM7,Link Edit Load module (&MEM)
-K&MEM7,InterTest Postprocess linkedit (&MEM)
-**********************************************************************/

No clue if it can handle stuff that requires SWAREQ, looks like not.

Remove all the "-" asa characters, I added them to keep the formatting.

Robert

On 2018-11-26 23:57, Bernd Oppolzer wrote:
Sorry, this did not come to my mind, because the code appeared in a public forum ...

this is the link where I found it:

https://www.developpez.net/forums/d1477375/systemes/autres-systemes/z-os/jcl-sort/recuperation-code-retour-d-job-rexx/

If I find a snippet of code THAT OPEN on the internet,
I normally don't care much about copyright,
because IMO the original poster also didn't.
But maybe that's too simple minded.

Thanks for your advice

Kind regards

Bernd



Am 27.11.2018 um 00:46 schrieb Arthur:
On 26 Nov 2018 13:03:55 -0800, in bit.listserv.ibm-main (Message-ID:<fa6e347f-8acd-08fb-64dc-97ce563d6...@t-online.de>) bernd.oppol...@t-online.de (Bernd Oppolzer) wrote:

using this as keyword and a well known search engine,
I found a REXX (from a french site), which I will try tomorrow.

This could be of interest to others, so here is the REXX (unedited, no warranty),
including some original french comments:

A link, instead of copying the code, would have been better. If the code hasn't been marked as free to use and copy, this is a possible copyright violation. Just as bad, the person who wrote this code has gotten no recognition for it, which is a probable violation even if it was covered by a Creative Commons license. And, if the coder improves the program, people who take the code from IBM-Main will not have those improvements.

I like the idea of having code where it can be found. A few programs on the CBT tape are mine. But I *chose* to submit them, and they have my name on them. Just because it's on the Internet does not mean it's not copyright.

OTOH, I congratulate you on finding this code, and thank you for letting us all know it exists.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN


--
Robert AH Prins
robert.ah.prins(a)gmail.com

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to