Yes ... inline REXX/Clist can be done. But you then need to invoke an
initial REXX/Clist to read the inline code, build a member in a
SYSEXEC/SYSPROC PDS from the inline REXX/Clist data and finally call
your newly built REXX/Clist from your initially invoked REXX/Clist.
Here is an example (Clist %BTCHEDIT and for an inline edit macro):
PROC 2 DDNAME DSNAME DEBUG
/*-------------------------------------------------------------------*/
/* BATCH CLIST */
/* ¯¯¯¯¯¯¯¯¯¯¯ */
/* CLIST TO ISSUE EDIT MACRO COMMANDS SUPPLIED VIA &DDNAME AGAINST */
/* A DATASET WHOSE NAME IS SUPPLIED VIA &DSNAME */
/* */
/* PARAMETERS:- */
/* ¯¯¯¯¯¯¯¯¯¯¯¯ */
/* - DDNAME : DDNAME OF DATASET CONTAINING INPUT EDIT MACRO COMMANDS */
/* FOR EDITING DATASET &DSNAME */
/* - DSNAME : THE DATASET TO BE EDITED */
/* */
/* FLOW LOGIC:- */
/* ¯¯¯¯¯¯¯¯¯¯¯¯ */
/* - THE CLIST READS, PROCESSES AND STORES ALL CARDS REFERENCED BY */
/* DDNAME=&DDNAME IN THE JCL. */
/* - BY DEFAULT, THE CLIST STORES THE CARDS IT HAS PROCESSED (AS AN */
/* INVOCABLE EDIT MACRO) IN DATASET '@@@@@@.ISPCLIB(BMACRO)'. */
/* - WHEN IT HAS PROCESSED AND STORED ALL ITS CARDS, IT INVOKES */
/* THE EDIT MACRO IT CREATED TO EDIT THE DATASET REFERENCED BY */
/* &DSNAME. */
/* */
/* PROCESS LOGIC:- */
/* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ */
/* - IF THERE ARE ANY CARDS TO BE PROCESSED, THE CLIST CREATES ITS */
/* OWN 'ISREDIT MACRO' CARD BEFORE PROCESSING EACH CARD IT READS. */
/* - THE CLIST THEN APPENDS THE 'ISREDIT' STATEMENT TO THE BEGINNING */
/* OF EACH CARD IT READS IN. */
/* - WHEN ALL CARDS HAVE BEEN READ AND PROCESSED, THE CLIST ADDS */
/* THE REQUIRED CLOSING CARDS TO COMPLETE THE EDIT MACRO. */
/* - THE CLIST THEN INVOKES THE EDIT MACRO WHICH IT HAS JUST CREATED */
/* TO EDIT THE DATASET PASSED VIA &DSNAME. */
/* */
/* */
/* 08/02/96 CMP */
/*-------------------------------------------------------------------*/
CONTROL: +
CONTROL MAIN END(ENDO)
IF &DEBUG = DEBUG | &DEBUG = D THEN +
CONTROL LIST SYMLIST CONLIST MSG
ELSE +
CONTROL NOLIST NOSYMLIST NOCONLIST NOMSG
INITS: +
SET DMACRO = '@@@@@@.ISPCLIB(BMACRO)' /* DEFAULT */
ALLOCS: +
ALLOC FILE(BMACRO) DSNAME(&DMACRO) SHR KEEP
IF &MAXCC > 0 THEN +
DO
WRITE ERROR ALLOCATING DATASET &DMACRO: RC = &MAXCC
GOTO EXIT
ENDO
OPENFILE BMACRO OUTPUT
IF &MAXCC > 0 THEN +
DO
WRITE ERROR OPENING DATASET &DMACRO FOR OUTPUT : RC = &MAXCC
FREE FI(BMACRO)
GOTO EXIT
ENDO
PROCESS: +
SET REC = &&&DDNAME
OPENFILE &DDNAME INPUT
GETFILE &DDNAME
SET RC = &LASTCC
IF &RC > 0 THEN +
DO
WRITE ERROR READING DDNAME = &DDNAME : RC = &RC
GOTO EXIT
ENDO
CONTINUE: +
SET BMACRO = &STR(ISREDIT MACRO)
PUTFILE BMACRO
SET BMACRO = &STR(CONTROL LIST SYMLIST CONLIST MSG)
PUTFILE BMACRO
SET BMACRO = &STR(SET SYSSCAN = 1)
PUTFILE BMACRO
ERROR RETURN
SET SYSSCAN = 3
DO WHILE &MAXCC = 0
SET BMACRO = &SUBSTR(1:80,ISREDIT &REC)
PUTFILE BMACRO
GETFILE &DDNAME
ENDO
IF &MAXCC = 400 THEN SET MAXCC = 0
CLOSFILE &DDNAME
SET BMACRO = &STR(ISREDIT END)
PUTFILE BMACRO
SET BMACRO = &STR(ISREDIT MEND)
PUTFILE BMACRO
SET SYSSCAN = 1
SET BMACRO = &STR(EXIT CODE(&&LASTCC))
PUTFILE BMACRO
CLOSFILE BMACRO
FREE FI(BMACRO)
EDIT_STAGE2: +
ISPEXEC EDIT DATASET('&DSNAME') MACRO(BMACRO)
EXIT: +
EXIT CODE (&MAXCC)
and here is example JCL to invoke something similar (actually for
another Clist, which interprets '.' in column 1 to mean the line should
be read/written asis instead of converted to an edit macro one. But
%BTCHEDIN calls another Clist (to extract the DSN associated with DDNAME
parm 'DSNAME'), which makes the complete 'bundle/package' too long to
publish. Let me know offline if you need the whole works):
//*********************************************************************
//* EXECUTE A CLIST IN BATCH *
//* *
//* 24/07/97 CHRIS PONCELET *
//*********************************************************************
//*
//BTCHEDIT EXEC PGM=IKJEFT01,
// REGION=2048K,
// DYNAMNBR=25
//*
//SYSTSIN DD *
ISPSTART CMD(%BTCHEDIN SETPREFX DSNAME D)
/*
//SYSPROC DD DISP=SHR,DSN=@@@@@@.ISPCLIB
//ISPLOG DD SYSOUT=*,DCB=(RECFM=VBA,LRECL=125,BLKSIZE=129)
//ISPMLIB DD DISP=SHR,DSN=SYS1.SISPMENU
//ISPPLIB DD DISP=SHR,DSN=SYS1.SISPPENU
//ISPPROF DD
SPACE=(TRK,(5,1,1),DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO)
//ISPSLIB DD DISP=SHR,DSN=SYS1.SISPSENU
//ISPTABL DD DUMMY
//ISPTLIB DD DISP=SHR,DSN=SYS1.SISPTENU
//SYSHELP DD DISP=SHR,DSN=SYS1.HELP
//SYSPRINT DD SYSOUT=*
//SYSTERM DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//DSNAME DD DISP=SHR,DSN=@@@@@@.PROCLIB
//SETPREFX DD *
(MLEVEL) = LEVEL
. WRITE LEVEL = &MLEVEL
. IF &MLEVEL > 1 THEN DO
CHANGE ALL <WHATEVER> <WHATEVER ELSE> WORD
END
. ENDO /* IF */
. ELSE DO
. ISPEXEC VGET DSNAME SHARED
. ALLOC FI(PDS) DA(&DSNAME)
. ALLOC FI(REPORT) RECFM(F,B) LRECL(8) BLKSIZE(800) SPACE(1,1) TRACKS +
. UNIT(SYSDA)
. CALL @@@@@@.ISPLLIB(PDSMEM) /* this thing just builds a list of all
members in a PDS */
. FREE FI(PDS)
. OPENFILE(REPORT) INPUT
. SET MAXCC = 0
. DO J = 1 TO 2 WHILE &MAXCC = 0
. GETFILE REPORT
. SET REPORT = &REPORT
. ISPEXEC EDIT DATASET(&DSNAME(&REPORT)) MACRO(BMACRO)
. ENDO
. CLOSFILE(REPORT)
. FREE FI(REPORT)
. ENDO /* ELSE */
/*
//*
%BTCHEDIT and %BTCHEDIN are general purpose Clists which build temporary
edit macros from instream data, then call them to edit the dataset whose
DSN (or DDNAME) is supplied via parm 'DSNAME'.
The same 'principle' applies with REXX.
Cheers,
Chris Poncelet
CA
Paul Gilmartin wrote:
On Mon, 4 Aug 2008 16:31:18 -0500, Mark Zelden wrote:
--- On Mon, 8/4/08, Howard Rifkind wrote:
//SYSIN DD SYSOUT=(,),OUTPUT=(*.OUT1,*.STD)
That's kinda scary. But I've occasionally allocated
a temp DS to SYSIN; EXECIO DISKW to it; then used as
input to the next command.
You can't execute an "inline" / instream CLIST / REXX exec from SYSPROC
or SYSEXEC. However, you can (and I do) execute it from a temp PDS by
adding a prior step that copies the source to the temp PDS. Two examples
on my website are RACFUDEL and LOGRREXX. URL below...
I have sometimes cut this down to a single step by starting the
SYSTSIN with a REPRO. Has anyone ever submitted a Requirement
for support of instream data in PROCs? Or for instream Rexx/
CLIST source?
Mark's MVS Utilities: http://home.flash.net/~mzelden/mvsutil.html
BTW, did I lately notice by accident that PEND is now optional
in library JCL PROCs (used to be forbidden)? This would be a
major courtesy to customers who want to alternate between INCLUDE
and EXEC of the same member. (Ah! I RTFM. Optional now. I
suppose someone will complain about the change.)
-- gil
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html