/* REXX Name : RXINSTRX Desc : Allow a REXX program to be supplied instream, or in the parametrer field, instead of having to be a pds member. Parms : REXXDD(ddname) Specify alternate DDname. REXXDD=ddname Specify alternate DDname. REXXCMD command In-parm command. 'REXXCMD' must be first verb in parm. REXXDD parametsrs are ignored. rest Send to the program as parameter Sample JCL Reading from DD //A EXEC PGM=IKJEFT1B,PARM='%RXINSTRX' //SYSEXEC DD UNIT=VIO,SPACE=(TRK,(4,4,1)),DCB=(your.exec.lib) // DD DISP=SHR,DSN=your.exec.lib // DD DISP=SHR,DSN=system.exec.lib <- RXINSTRX here //SYSTSPRT DD SYSOUT=* //SYSTSIN DD DUMMY //REXX DD * say 'Hello world' Reading from parm //B EXEC PGM=IKJEFT1B, // PARM='%RXINSTRX rexxcmd say ''Hello world''' //SYSEXEC DD DISP=SHR,DSN=your.exec.lib // DD DISP=SHR,DSN=system.exec.lib <- RXINSTRX here //SYSTSPRT DD SYSOUT=* //SYSTSIN DD DUMMY History 2023-07-26 Add REXXCMD feature, add syntax and error intercepts. Author Willy Jensen mail: willy@harders-jensen.com web : http://harders-jensen.com */ Address TSO parse value 'REXX' with rxdd p1 p2 parse arg prm signal on syntax name err1 signal on error name err2 /*-------------------------------------------------------------------- Pull REXX parameter, these could be fixed in a procedure --------------------------------------------------------------------*/ if translate(left(prm,7))='REXXDD(' then, parse var prm . '(' rxdd . ')' prm if translate(left(prm,7))='REXXDD=' then, parse var prm . '=' rxdd prm /*-------------------------------------------------------------------- Execute command in parameter --------------------------------------------------------------------*/ if translate(word(prm,1))='REXXCMD' then do Interpret subword(prm,2) call close end /*------------------------------------------------------------------- Write inline REXX to temp pds and run --------------------------------------------------------------------*/ trace off cc=BpxWdyn('info dd(sysexec) inrtdsn(execdsn)') if cc<>0 then call close 8,'SYSEXEC info failed' cc cc=Bpxwdyn('alloc da('execdsn'(zzinstrm)) shr rtddn(rxmbrdd)') if cc<>0 then call close 8,'Alloc outmbr failed' cc "Execio * diskr" rxdd "(stem data. finis)" if rc<>0 then call close 8,'Read DD' rxdd 'failed' rc "execio" data.0 "diskw" rxmbrdd "(stem data. finis)" /* save */ if rc<>0 then call close 8,'Write temp failed' rc "%zzinstrm" prm cc=rc zz=BpxWdyn("free dd("rxinddn")") call close cc /*------------------------------------------------------------------- Terminate --------------------------------------------------------------------*/ Err1: Call Close 901,'**Syntax raised' Err2: Call Close 902,'**Error raised' /*------------------------------------------------------------------- Terminate --------------------------------------------------------------------*/ Close: trace off parse arg _rc,_msg if datatype(_rc)<>'NUM' then _rc=0 if _msg<>'' then say _msg _rc=word(_rc 0,1) Exit _rc