Hi Phil,
Maybe the "***NOTE***" was written before the advent of the EXPORT Statement. Had the //SMPCNTL been written with "&" instead of "!...", the substitutions could be done via EXPORT, SET and SYMBOLS=JCLONLY.
Here is a possible solution:

// EXPORT SYMLIST=*
// SET HLQ=SYSX
// SET VOLSER=ABC123
// EXEC SMPE
//SYSIN    DD *,SYNBOLS=JCLONLY
  DEFINE CLUSTER(                            +
           NAME(&HLQ..GLOBAL.CSI)            +
           VOLUMES(&VOLSER)                  +
           CYLINDERS(20 10)                  +
           FREESPACE(2 2)                    +
           KEYS(24 0)                        +
           RECORDSIZE(24 143)                +
           SHAREOPTIONS(2 3)                 +
           )                                 +
      DATA (                                 +
           NAME(&HLQ..GLOBAL.CSI.DATA)       +
           CONTROLINTERVALSIZE(8192)         +


Regards,
David

On 2023-08-24 18:45, Phil Smith III wrote:
Gil wrote:
I'm ignorant, or at best outdated.  I haven't known of use of symbols by SMP/E.
But are there instances where the same &symbol would need to appear in
one instream data set where it should be evaluated and in another where it
must not, regardless of  //name DD DATA,SYMBOLS=...?  Cite detailed
example, please.
I mean things like the RFPREFIX value on a RECEIVE command, which apparently cannot 
be &whatever but must specify the data set prefix of the RELFILEs. Same for the 
value for a PATH on a DDDEF.

There are ways. however cumbersome, to escape symbol evaluation in
instream data sets.
Well, maybe; I didn't write this stuff but the guy who did was pretty sharp, 
and couldn't figure out ways around the above. He also noted this:
//*    ***NOTE*** Some references to variable values are in records
//*               provided as part of SYSIN DD *, and thus cannot be
//*               filled in using JCL variables (&HLQ et al.). Thus
//*               in this job, you must replace all references to
//*               !hlq!, !unit!, and !volser!, not just the single
//*               SET statement for each.

Maybe there's a clever way around that? It's referring to things like:
//SYSIN    DD *
   DEFINE CLUSTER(                            +
            NAME(!hlq!.GLOBAL.CSI)            +
            VOLUMES(!volser!)                 +
            CYLINDERS(20 10)                  +
            FREESPACE(2 2)                    +
            KEYS(24 0)                        +
            RECORDSIZE(24 143)                +
            SHAREOPTIONS(2 3)                 +
            )                                 +
       DATA (                                 +
            NAME(!hlq!.GLOBAL.CSI.DATA)       +
            CONTROLINTERVALSIZE(8192)         +


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to