Analyzing Skeleton Imbeds
The information in this chapter was assembled by analyzing skeleton libraries using the ISPF Search-For Utility (=3.14).
You can analyze skeleton imbeds yourself by searching skeleton libraries for ’)IM ’
, the operator in the ISPF skeleton imbed statement in column 1:
ISRSFSPR Search-For Utility
Command ===>
Search String . . ’)IM ’
ISPF Library:
Project . . .
Group . . . . . . . . . . . . .
Type . . . .
Member . . . (Blank or pattern for member selection list,
"*" for all members)
Other Partitioned, Sequential or VSAM Data Set:
Data Set Name . . . CMNTP.CMN820.SKELS(*)
Volume Serial . . . (If not cataloged)
Listing Data Set . . . USER015.SRCHFOR.LIST
Data Set Password . . (If Search-For data set password protected)
Enter "/" to select option Execution Mode Output Mode
_ Specify additional search strings 1 1. Foreground 1 1. View
_ Mixed Mode 2. Batch 2. Browse
_ Bypass selection list
...
The following panel shows a snippet of the results of a search:
1 ISRSUPC - MVS/PDF FILE/LINE/WORD/BYTE/SFOR COMPARE UTILITY- ISPF FOR z/OS
LINE-# SOURCE SECTION SRCH DSN: USER015.CMN820.SKELS
CMN$$ACB --------- STRING(S) FOUND ----------------
1 //*)IM CMN$$ACB
30 //*)IM CMN$$ACB END
CMN$$ARE --------- STRING(S) FOUND ----------------
1 //*)IM CMN$$ARE
245 )IM CMN$$XVP
247 //*)IM CMN$$ARE END
CMN$$ASM --------- STRING(S) FOUND ----------------
1 //*)IM CMN$$ASM
26 )IM CMN$$SYC
63 )IM CMN$$OPT
64 //*)IM CMN$$ASM END
CMN$$ASN --------- STRING(S) FOUND ----------------
1 //*)IM CMN$$ASN
13 )IM CMN$$SPR
36 )IM CMN$$XVP
...
CMN$$AUD --------- STRING(S) FOUND ----------------
1 //*)IM CMN$$AUD
20 )IM CMN$$SPR
120 )IM CMN$$SPR
156 )IM CMN$$SEX
176 //*)IM CMN$$SPR
203 )IM CMN$$XVP
...
Notice that many ChangeMan ZMF skeletons begin with a JCL comment containing the skeleton name (unless they require a jobcard, when that has to come first):
//*)IM CMN$$ASM
Alternatively they may have a skeleton comment to the same effect, i.e.
)CM IM CMNJLCIC
or
)CM )IM CMNJLDB2
You will need to read the comments in the skeleton, as there may be relevant instructions; i.e.,
)CM APPLY THE FOLLOWING IMBED TO APPLY PACKAGE SCRATCH/RENAMES
)CM TO THE TARGET PROMOTION LIBRARIES
)CM
)CM )IM CMN$$PSR
The only effective includes are the ones that start in column 1; e.g., lines 245, 26, 63, 13, 36, 20, 120, 156 and 203 above.
By searching backward through JCL generated by file tailoring from ChangeMan ZMF skeletons, you can get information about the hierarchy of imbeds that was used by ISPF file tailoring to build the JCL. However, there is no way to tell from the JCL comments if a skeleton was imbedded in a previously listed skeleton or if both were imbedded in another skeleton and processed serially.
This JCL fragment from a stage job shows that skeletons CMN$$DSN, CMN$$JBL, CMNCOB2, CMN$$VAR, CMN$PARM, and CMN$$WRT were processed by ISPF file tailoring to build the JCL. In fact, skeletons CMN$$VAR and CMN$$XSC are imbedded in procedure skeleton CMNCOB2, and skeleton CMN$PARM is imbedded in CMN$$VAR.
000010 //*
000011 //*)IM CMN$$DSN
000012 //*)IM CMN$$JBL
000013 //JOBLIB DD DISP=SHR,DSN=CMNTP.CMN812.C6.LOAD
000014 // DD DISP=SHR,DSN=CMNTP.SER812.C6.LOAD
000015 // DD DISP=SHR,DSN=CMNTP.CMN812.LOAD
000016 // DD DISP=SHR,DSN=CMNTP.SER812.LOAD
000017 //*)IM CMNCOB2
000018 //*)IM CMN$$VAR
000019 //* USROP01 = Y
000020 //*)IM CMN$PARM
000021 //* SEL = AND OBJLIB = Y
000022 //*)IM CMN$$XSC
000023 //SERCOPY EXEC PGM=SERCOPY, *** COPY ACPSRCEE FROM STAGING
000024 // REGION=3M,
000025 // PARM=('INDSN(CMNTP.S6.ACTP.STG6.#000032.SRC)',
000026 // 'MEMBER=ACPSRCEE')
000027 //SYSPRINT DD DISP=(,PASS),DSN=&&LIST00,
000028 // UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE),
000029 // DCB=(RECFM=FBM,LRECL=121,BLKSIZE=0)
000030 //ABNLIGNR DD DUMMY
000031 //SYSUT2 DD DISP=(,PASS),DSN=&&SOURCE(ACPSRCEE),
000032 // UNIT=SYSDA,SPACE=(CYL,(1,2,1),RLSE),
000033 // DCB=(DSORG=PO,RECFM=FB,LRECL=80,BLKSIZE=0)
000034 //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
000035 //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
000036 //*)IM CMN$$WRT
000037 //WRITE EXEC PGM=CMNWRITE, *** PARSE/EXPAND COMPONENT ACPSRCEE
000038 // COND=(4,LT),
000039 // PARM=('SUBSYS=6,USER=USER015',
000040 // '')
000041 //*)IM CMN$$SPR
000042 //SER#PARM DD DISP=SHR,DSN=CMNTP.SER812.C6.TCPIPORT
000043 //SYSPRINT DD DISP=(,PASS),DSN=&&LIST10W1,
000044 // UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
000045 //*)IM CMN$$SYC
000046 //SYSLIB DD DISP=SHR,DSN=CMNTP.S6.ACTP.STG6.#000032.CPY
000047 // DD DISP=SHR,DSN=CMNTP.S6.V812.BASE.ACTP.CPY
...
Note also that there is often logic to determine if a skeleton is used, and that a given skeleton may appear several times in the calling skeleton, for example CMN$$CBL which includes CMN$$SPR, which for the first include of CMN$$SPR is subject to 5 separate )SEL statements:
000005 )SEL &STORMNS EQ P OR &SKLBLVL EQ 0 AND &STORMNS NE L
000006 )SEL &STORMNS EQ P OR &SKLBLVL EQ 0 AND &STORMNS NE A
000007 )SEL &STORMNS EQ P OR &SKLBLVL EQ 0 AND &STORMNS NE V
000008 )SEL &STORMNS NE H
- - - - - - - - - - - - - - - - - - - 82 Line(s) not Displayed
000091 )SEL &LIBORG EQ LIB
- - - - - - - - - - - - - - - - - - - 9 Line(s) not Displayed
000101 )IM CMN$$SPR
- - - - - - - - - - - - - - - - - - - 40 Line(s) not Displayed
000142 )ENDSEL &LIBORG EQ LIB
000143 )ENDSEL &STORMNS NE H
000144 )ENDSEL &STORMNS EQ P OR &SKLBLVL EQ 0 AND &STORMNS NE V
000145 )ENDSEL &STORMNS EQ P OR &SKLBLVL EQ 0 AND &STORMNS NE A
000146 )ENDSEL &STORMNS EQ P OR &SKLBLVL EQ 0 AND &STORMNS NE L
Another point to be aware of is the use of JCL IF-THEN-ELSE constructs, which will also affect execution at run time of the JCL. See near the end of CMN$$ILD:
)CM DELETE CMNBAT90 OUTPUT IF WE GET ILOD CONFLICT - CLEAR IT OUT
)CM FOR CMN99 STEP
)CM
//CHKVILOD IF (VFYILOD&L#N..RUN = TRUE) THEN
//DLTILOD&L#N EXEC PGM=IEFBR14,
// COND=(8,GT,VFYILOD&L#N)
//BAT90CTL DD DISP=(MOD,DELETE,DELETE),
// UNIT=SYSDA,SPACE=(CYL,0),
// DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=0),
// DSN=&&&&BAT90CTL
//CHKVILOD ENDIF
...