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

Reply via email to