Return to Mainframe Utilities Page
Module
PROC 0 HELP DSN() EDIT
CONTROL NOMSG NOLIST NOFLUSH NOPROMPT /* STANDARD INITIAL */
ERROR DO /* PROCESSING : */
SET MODE = CLIST /* 1. INVOCATION */
RETURN /* MODE ? */
END /* */
ISREDIT MACRO (HELP) /* */
ERROR OFF /* */
ISPEXEC CONTROL ERRORS RETURN /* LOGGING */
ISPEXEC VGET (DBGSWTCH) PROFILE /* 3. DEBUG MESSAGES*/
IF &DBGSWTCH = &STR(ON) THEN /* BASED ON */ +
CONTROL MSG LIST CONLIST SYMLIST NOFLUSH /* "DBGSWTCH" */
ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT /* VARIABLE. */
IF &HELP = HELP THEN GOTO HELPSEC /* 4. DISPLAY HELP */
/**********************************************************************/
/* UTILITY NAME : COMPONEN */
/* AUTHOR : DAVE LEIGH */
/* DESCRIPTION : EXTRACT WHAT COMPONENTS ARE A PART OF A GIVEN CLIST */
/* AND PLACE THE RESULTS IN A FILE. */
/**********************************************************************/
/**********************************************************************
/* IF CALLED AS A CLIST, THEN START THE EDITING PROCESS. *
/**********************************************************************
IF &MODE = CLIST THEN +
IF &STR(&DSN) = THEN +
DO
SET ZEDLMSG = &STR(NO CLIST DATASET NAME SPECIFIED. +
NO PROCESSING PERFORMED)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT
END
ELSE +
DO
SET CMPLVL = 0
IF &EDIT = EDIT THEN SET CMPEDIT = YES
ISPEXEC VPUT (CMPLVL CMPEDIT) SHARED
ISPEXEC EDIT DATASET('&DSN') MACRO(COMPONEN)
EXIT
END
ELSE +
DO
IF &HELP = EDIT THEN +
SET CMPEDIT = YES
ELSE SET CMPEDIT = NO
ISPEXEC VGET CMPTYPE SHARED
IF &CMPTYPE = THEN +
SET CMPTYPE = CLIST
ISPEXEC VPUT (CMPEDIT CMPTYPE) SHARED
ISREDIT (MBR) = MEMBER
ISREDIT (DSN) = DATASET
IF &MBR > THEN SET DSN = &STR(&DSN(&MBR))
SET ZEDLMSG = &STR(GATHERING COMPONENTS IN "&DSN")
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000)
END
/**********************************************************************
/* IF THE NESTING LEVEL IS 0 THEN DO SOME INITIALIZATION *
/**********************************************************************
ISPEXEC VGET (CMPEDIT CMPLVL CMPDSN CMPTYPE) SHARED
IF &STR(&CMPLVL) < 1 THEN SET &CMPLVL = 0
IF &STR(&CMPLVL) = 0 THEN +
DO
SET CMPTYPE = CLIST
IF &STR(&MBR) > THEN +
SET CMPDSN = &STR(&SYSPREF..TEMP.COMPONEN.&MBR)
ELSE +
DO &I = &LENGTH(&STR(&DSN)) TO 1 BY -1
IF &SUBSTR(&I:&I,&STR(&DSN)) = &STR(.) THEN +
DO
SET I = &I + 1
SET CMPDSN = &STR(&SYSPREF..TEMP.+
COMPONEN.+
&SUBSTR(&I,&LENGTH(&STR(&DSN)),+
&STR(&DSN))
SET I = 0
END
END
DO &I = &LENGTH(&STR(&CMPDSN)) TO 1 BY -1
IF &SUBSTR(&I:&I,&STR(&CMPDSN)) = &STR(.) THEN +
DO
SET I = &I + 1
SET CMPMBR = &SUBSTR(&I:&LENGTH(&STR(&CMPDSN)),+
&STR(&CMPDSN))
SET I = 0
END
END
SET ISPPLIB =
SET ISPMLIB =
SET ISPTLIB =
SET ISPSLIB =
SET ISPLLIB =
SET ISPCLIB =
ISPEXEC VPUT (CMPLVL ISPPLIB ISPMLIB ISPTLIB ISPSLIB +
ISPLLIB ISPCLIB CMPDSN TYPE CMPMBR) SHARED
DELETE '&CMPDSN'
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') +
NEW CATALOG +
UNIT(SYSDA) VOLUME(WRK$$$) +
SPACE(5,5) TRACKS RELEASE +
RECFM(F B) LRECL(80) BLKSIZE(23440) DSORG(PS)
OPENFILE CMPDD OUTPUT
SET CMPDD = &STR(<&SUBSTR(1:8,&STR(&CMPMBR ))> +
ISPCLIB: &CMPMBR)
PUTFILE CMPDD
CLOSFILE CMPDD
END
/**********************************************************************
/* VGET SOME VARIABLE AND SET SOME VARIABLES. *
/**********************************************************************
SET VARVALUE = &STR(***VARIABLE***)
ISPEXEC VGET (CMPLVL ISPPLIB ISPMLIB ISPTLIB ISPSLIB +
ISPLLIB ISPCLIB CMPDSN TYPE CMPMBR) SHARED
DO &I = 1 TO &CMPLVL BY 1
SET PFX = &STR(&PFX )
END
SET PFX = &STR(<&SUBSTR(1:8,&STR(&CMPMBR ))> &PFX)
SET CMPLVL = &CMPLVL + 1
ISPEXEC VPUT CMPLVL SHARED
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
SET LP = &STR((
SET RP = &STR())
/**********************************************************************
/* PROCESS DIFFERENTLY IF A CLIST, PANEL, OR SKELETON *
/**********************************************************************
SELECT (&CMPTYPE)
WHEN (CLIST) GOTO CLIST_SECTION
WHEN (PANEL) GOTO PANEL_SECTION
WHEN (SKELETON) GOTO SKELETON_SECTION
OTHERWISE EXIT CODE(20)
END
/**********************************************************************
/* ACTUALLY PARSE THE CLIST NOW AND PUT THE INFO TO THE OUTPUT DATASET*
/**********************************************************************
CLIST_SECTION: +
ISREDIT (LRECL) = LRECL
ISREDIT BOUNDS = 1 &LRECL
ISREDIT EXCLUDE ALL
ISREDIT FIND ALL 'EXEC '
ISREDIT FIND ALL '%'
ISREDIT FIND ALL ' MACRO('
ISREDIT EXCLUDE ALL "/" 1
ISREDIT EXCLUDE ALL 'REXX EXEC'
ISREDIT EXCLUDE ALL 'EXEC PGM='
ISREDIT EXCLUDE ALL 'ISPEXEC CONTROL '
ISREDIT EXCLUDE ALL 'ISPEXEC LIBDEF '
ISREDIT EXCLUDE ALL 'ISPEXEC BROWSE '
ISREDIT EXCLUDE ALL 'ISPEXEC LM'
ISREDIT EXCLUDE ALL 'ISPEXEC VPUT '
ISREDIT EXCLUDE ALL 'ISPEXEC VGET '
ISREDIT EXCLUDE ALL 'WRITE ' 1
ISREDIT EXCLUDE ALL '(%)'
ISREDIT FIND FIRST P'=' 1 NX
DO WHILE &LASTCC = 0
SET PANELTOO = NO
ISREDIT FIND FIRST 'ISPEXEC ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT FIND NEXT ' SELECT ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT '(' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (TYPE) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (TYPE)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT (TYPE) = LINE .ZCSR
ISREDIT DELETE .ZCSR
SET TYPE = &TYPE
SELECT (&TYPE)
WHEN (PANEL) DO
PANEL_TOO: SET COL1 = &COL2 + 2
ISREDIT FIND FIRST P'=' &COL1 .CURR .CURR
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (XPANEL) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XPANEL)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XPANEL = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XPANEL) = LINE .ZCSR
SET XPANEL = &XPANEL
IF &LENGTH(&STR(&XPANEL)) = 0 THEN +
SET XPANEL = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPPLIB SHARED
IF &SYSINDEX(&STR( &XPANEL ),+
&STR(&ISPPLIB)) = 0 AND +
&STR(&XPANEL) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPPLIB = &STR(&ISPPLIB &XPANEL )
SET CMPDD = &STR(&PFX.ISPPLIB: &XPANEL)
PUTFILE CMPDD
ISPEXEC VPUT ISPPLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &XPANEL ISPPLIB BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
SET CMPTYPE = PANEL
ISPEXEC VPUT CMPTYPE SHARED
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
SET CMPTYPE = CLIST
ISPEXEC VPUT CMPTYPE SHARED
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
IF &PANELTOO = YES THEN GOTO PANEL_TOO_GOBACK
END
WHEN (PGM) DO
SET COL1 = &COL2 + 2
ISREDIT FIND FIRST P'=' &COL1 .CURR .CURR
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (XPGM) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XPGM)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XPGM = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XPGM) = LINE .ZCSR
SET XPGM = &XPGM
IF &LENGTH(&STR(&XPGM)) = 0 THEN +
SET XPGM = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPLLIB SHARED
IF &SYSINDEX(&STR( &XPGM ),+
&STR(&ISPLLIB)) = 0 AND +
&STR(&XPGM) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPLLIB = &STR(&ISPLLIB &XPGM )
SET CMPDD = &STR(&PFX.ISPLLIB: &XPGM)
PUTFILE CMPDD
ISPEXEC VPUT ISPLLIB SHARED
END
END
WHEN (CMD) DO
SET COL1 = &COL2 + 2
ISREDIT FIND FIRST P'=' &COL1 .CURR .CURR
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
ISREDIT FIND FIRST P'=' &COL1 .CURR .CURR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT (NULL,COL2X) = CURSOR
IF &COL2X < &COL2 THEN SET COL2 = &COL2X
SET COL2 = &COL2 - 1
ISREDIT (XCMD) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XCMD)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XCMD = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XCMD) = LINE .ZCSR
SET XCMD = &XCMD
IF &LENGTH(&STR(&XCMD)) = 0 THEN +
SET XCMD = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
IF &SUBSTR(1:1,&STR(&XCMD)) = &STR(%) THEN +
SET XCMD = &SUBSTR(2:&LENGTH(&STR(&XCMD)),+
&STR(&XCMD))
ISPEXEC VGET ISPCLIB SHARED
IF &SYSINDEX(&STR( &XCMD ),+
&STR(&ISPCLIB)) = 0 AND +
&STR(&XCMD) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPCLIB = &STR(&ISPCLIB &XCMD )
SET CMPDD = &STR(&PFX.ISPCLIB: &XCMD)
PUTFILE CMPDD
ISPEXEC VPUT ISPCLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &XCMD SYSPROC BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
END
OTHERWISE
END
END
ELSE DO
ISREDIT FIND NEXT ' DISPLAY ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT '(' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (TYPE) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (TYPE)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT (TYPE) = LINE .ZCSR
ISREDIT DELETE .ZCSR
SET TYPE = &TYPE
SELECT (&TYPE)
WHEN (PANEL) DO
SET COL1 = &COL2 + 2
ISREDIT FIND FIRST P'=' &COL1 .CURR .CURR
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (XPANEL) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XPANEL)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XPANEL = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XPANEL) = LINE .ZCSR
SET XPANEL = &XPANEL
IF &LENGTH(&STR(&XPANEL)) = 0 THEN +
SET XPANEL = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPPLIB SHARED
IF &SYSINDEX(&STR( &XPANEL ),+
&STR(&ISPPLIB)) = 0 AND +
&STR(&XPANEL) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPPLIB = &STR(&ISPPLIB &XPANEL )
SET CMPDD = &STR(&PFX.ISPPLIB: &XPANEL)
PUTFILE CMPDD
ISPEXEC VPUT ISPPLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &XPANEL ISPPLIB BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
SET CMPTYPE = PANEL
ISPEXEC VPUT CMPTYPE SHARED
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
SET CMPTYPE = CLIST
ISPEXEC VPUT CMPTYPE SHARED
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') +
MOD
OPENFILE CMPDD OUTPUT
END
END
END
WHEN (MSG) DO
SET COL1 = &COL2 + 2
ISREDIT FIND FIRST P'=' &COL1 .CURR .CURR
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (XMSG) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XMSG)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XMSG = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XMSG) = LINE .ZCSR
SET XMSG = &XMSG
IF &LENGTH(&STR(&XMSG)) = 0 THEN +
SET XMSG = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPMLIB SHARED
IF &SYSINDEX(&STR( &XMSG ),+
&STR(&ISPMLIB)) = 0 AND +
&STR(&XMSG) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPMLIB = &STR(&ISPMLIB &XMSG )
SET CMPDD = &STR(&PFX.ISPMLIB: &XMSG)
PUTFILE CMPDD
ISPEXEC VPUT ISPMLIB SHARED
END
END
OTHERWISE
END
END
ELSE DO
ISREDIT FIND NEXT ' SETMSG ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT '(' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
SET COL1 = &COL1 + 1
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (XMSG) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XMSG)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XMSG = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XMSG) = LINE .ZCSR
SET XMSG = &XMSG
IF &LENGTH(&STR(&XMSG)) = 0 THEN +
SET XMSG = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPMLIB SHARED
IF &SYSINDEX(&STR( &XMSG ),+
&STR(&ISPMLIB)) = 0 AND +
&STR(&XMSG) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPMLIB = &STR(&ISPMLIB &XMSG )
SET CMPDD = &STR(&PFX.ISPMLIB: &XMSG)
PUTFILE CMPDD
ISPEXEC VPUT ISPMLIB SHARED
END
END
ELSE DO
ISREDIT FIND NEXT ' MACRO(' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT '(' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
SET COL1 = &COL1 + 1
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (XCMD) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XCMD)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XCMD = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XCMD) = LINE .ZCSR
SET XCMD = &XCMD
IF &LENGTH(&STR(&XCMD)) = 0 THEN +
SET XCMD = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPCLIB SHARED
IF &SYSINDEX(&STR( &XCMD ),+
&STR(&ISPCLIB)) = 0 AND +
&STR(&XCMD) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPCLIB = &STR(&ISPCLIB &XCMD )
SET CMPDD = &STR(&PFX.ISPCLIB: &XCMD)
PUTFILE CMPDD
ISPEXEC VPUT ISPCLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &XCMD SYSPROC BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
END
ELSE DO
ISREDIT FIND NEXT ' FTINCL ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (SKELETON) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (SKELETON)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET SKELETON = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (SKELETON) = LINE .ZCSR
SET SKELETON = &SKELETON
IF &LENGTH(&STR(&SKELETON)) = 0 THEN +
SET SKELETON = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPSLIB SHARED
IF &SYSINDEX(&STR( &SKELETON ),+
&STR(&ISPSLIB)) = 0 AND +
&STR(&SKELETON) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPSLIB = &STR(&ISPSLIB &SKELETON )
SET CMPDD = &STR(&PFX.ISPSLIB: &SKELETON)
PUTFILE CMPDD
ISPEXEC VPUT ISPSLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &SKELETON ISPSLIB BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
SET CMPTYPE = SKELETON
ISPEXEC VPUT CMPTYPE SHARED
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
SET CMPTYPE = CLIST
ISPEXEC VPUT CMPTYPE SHARED
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
END
ELSE DO
ISREDIT FIND NEXT ' TB' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT FIND ' PANEL(' .ZCSR .ZCSR
IF &LASTCC = 0 THEN SET PANELTOO = YES
ELSE SET PANELTOO = NO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND PREV P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
ISREDIT (XTABLE) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (XTABLE)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET XTABLE = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (XTABLE) = LINE .ZCSR
SET XTABLE = &XTABLE
IF &LENGTH(&STR(&XTABLE)) = 0 THEN +
SET XTABLE = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPTLIB SHARED
IF &SYSINDEX(&STR( &XTABLE ),+
&STR(&ISPTLIB)) = 0 AND +
&STR(&XTABLE) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPTLIB = &STR(&ISPTLIB &XTABLE )
SET CMPDD = &STR(&PFX.ISPTLIB: &XTABLE)
PUTFILE CMPDD
ISPEXEC VPUT ISPTLIB SHARED
END
IF &PANELTOO = YES THEN +
DO
ISREDIT FIND FIRST ' PANEL(' .CURR .CURR
ISREDIT FIND NEXT '(' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
GOTO PANEL_TOO
PANEL_TOO_GOBACK: SET PANELTOO = NO
END
END
END
END
END
END
END
END
ELSE DO
ISREDIT FIND FIRST 'EXEC ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT FIND FIRST "'" &COL1 &COL1 .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
DO
SET EVALUATE = NO
SET COL1 = &COL1 + 1
SET COL2 = &COL2 - 1
END
ELSE SET EVALUATE = YES
ISREDIT (CMD) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (CMD)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET CMD = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (CMD) = LINE .ZCSR
SET CMD = &CMD
IF &LENGTH(&STR(&CMD)) = 0 THEN +
SET CMD = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
IF &LENGTH(&STR(&CMD)) = 0 THEN +
SET CMD = &STR(&VARVALUE)
IF &EVALUATE = YES AND &STR(&CMD) ¬= &STR(&VARVALUE) THEN +
DO
SET A = &SYSINDEX(&STR(&LP),&STR(&CMD))
SET B = &SYSINDEX(&STR(CLIST),&STR(&CMD))
IF &B = 0 THEN +
IF &A > 0 THEN +
SET CMD = &STR(&SYSPREF..)+
&SUBSTR(1:&A-1,&STR(&CMD))+
&STR(.CLIST)+
&SUBSTR(&A:&LENGTH(&STR(&CMD))+
&STR(&CMD))
ELSE +
SET CMD = &STR(&SYSPREF..&CMD..CLIST)
ELSE SET CMD = &STR(&SYSPREF..&CMD)
END
ISPEXEC VGET ISPCLIB SHARED
IF &SYSINDEX(&STR( &CMD ),+
&STR(&ISPCLIB)) = 0 AND +
&STR(&CMD) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPCLIB = &STR(&ISPCLIB &CMD )
SET CMPDD = &STR(&PFX.ISPCLIB: &CMD)
PUTFILE CMPDD
ISPEXEC VPUT ISPCLIB SHARED
CLOSFILE CMPDD
ISPEXEC EDIT DATASET('&CMD') +
MACRO(COMPONEN)
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
ELSE DO
ISREDIT FIND FIRST 'EX ' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT FIND FIRST "'" &COL1 &COL1 .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
DO
SET EVALUATE = NO
SET COL1 = &COL1 + 1
SET COL2 = &COL2 - 1
END
ELSE SET EVALUATE = YES
ISREDIT (CMD) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (CMD)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET CMD = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (CMD) = LINE .ZCSR
SET CMD = &CMD
IF &LENGTH(&STR(&CMD)) = 0 THEN +
SET CMD = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
IF &LENGTH(&STR(&CMD)) = 0 THEN +
SET CMD = &STR(&VARVALUE)
IF &EVALUATE = YES AND &STR(&CMD) ¬= &STR(&VARVALUE) THEN +
DO
SET A = &SYSINDEX(&STR(&LP),&STR(&CMD))
SET B = &SYSINDEX(&STR(CLIST),&STR(&CMD))
IF &B = 0 THEN +
IF &A > 0 THEN +
SET CMD = &STR(&SYSPREF..)+
&SUBSTR(1:&A-1,&STR(&CMD))+
&STR(.CLIST)+
&SUBSTR(&A:&LENGTH(&STR(&CMD))+
&STR(&CMD))
ELSE +
SET CMD = &STR(&SYSPREF..&CMD..CLIST)
ELSE SET CMD = &STR(&SYSPREF..&CMD)
END
ISPEXEC VGET ISPCLIB SHARED
IF &SYSINDEX(&STR( &CMD ),+
&STR(&ISPCLIB)) = 0 AND +
&STR(&CMD) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPCLIB = &STR(&ISPCLIB &CMD )
SET CMPDD = &STR(&PFX.ISPCLIB: &CMD)
PUTFILE CMPDD
ISPEXEC VPUT ISPCLIB SHARED
CLOSFILE CMPDD
ISPEXEC EDIT DATASET('&CMD') +
MACRO(COMPONEN)
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
ELSE DO
ISREDIT FIND FIRST '%' .ZCSR .ZCSR
IF &LASTCC = 0 THEN DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (CMD) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (CMD)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET CMD = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (CMD) = LINE .ZCSR
SET CMD = &CMD
IF &LENGTH(&STR(&CMD)) = 0 THEN +
SET CMD = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPCLIB SHARED
IF &SYSINDEX(&STR( &CMD ),+
&STR(&ISPCLIB)) = 0 AND +
&STR(&CMD) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPCLIB = &STR(&ISPCLIB &CMD )
SET CMPDD = &STR(&PFX.ISPCLIB: &CMD)
PUTFILE CMPDD
ISPEXEC VPUT ISPCLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &CMD SYSPROC BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
END
END
END
END
ISREDIT FIND NEXT P'=' 1 NX
END
GOTO FINISH
/**********************************************************************
/* PARSE A PANEL FOR MESSAGES *
/**********************************************************************
PANEL_SECTION: +
ISREDIT (LRECL) = LRECL
ISREDIT BOUNDS = 1 &LRECL
ISREDIT EXCLUDE ALL
ISREDIT FIND ALL ' MSG='
ISREDIT FIND ALL ',MSG='
ISREDIT EXCLUDE ALL '/' 1
ISREDIT EXCLUDE ALL ')' 1
ISREDIT FIND FIRST P'=' 1 NX
DO WHILE &LASTCC = 0
ISREDIT FIND FIRST 'MSG=' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
DO
ISREDIT LABEL .ZCSR = .CURR
ISREDIT FIND NEXT '=' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ')' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (MSG) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (MSG)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET MSG = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (MSG) = LINE .ZCSR
SET MSG = &MSG
IF &LENGTH(&STR(&MSG)) = 0 THEN +
SET MSG = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPMLIB SHARED
IF &SYSINDEX(&STR(&MSG ),+
&STR(&ISPMLIB)) = 0 AND +
&STR(&MSG) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPMLIB = &STR(&ISPMLIB &MSG )
SET CMPDD = &STR(&PFX.ISPMLIB: &MSG)
PUTFILE CMPDD
ISPEXEC VPUT ISPMLIB SHARED
END
IF &STR(&MSG) = &STR(&VARVALUE) THEN +
DO
SET ISPMLIB = &STR(&ISPMLIB &MSG )
SET CMPDD = &STR(&PFX.ISPMLIB: &MSG)
PUTFILE CMPDD
END
END
ISREDIT FIND LAST P'=' .ZCSR .ZCSR
ISREDIT FIND NEXT P'=' 1 NX
END
GOTO FINISH
/**********************************************************************
/* PARSE A SKELETON FOR IMBEDDED MEMBERS *
/**********************************************************************
SKELETON_SECTION: +
ISREDIT (LRECL) = LRECL
ISREDIT BOUNDS = 1 &LRECL
ISREDIT EXCLUDE ALL
ISREDIT FIND ALL ')IM ' 1
ISREDIT FIND FIRST P'=' 1 NX
DO WHILE &LASTCC = 0
ISREDIT FIND FIRST P'¬' 5 &LRECL .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
DO
ISREDIT (NULL,COL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT (NULL,COL2) = CURSOR
SET COL2 = &COL2 - 1
ISREDIT (SKELETON) = LINE .ZCSR
ISREDIT LINE_BEFORE .ZCSR = (SKELETON)
ISREDIT FIND FIRST P'=' 1 .ZCSR .ZCSR
ISREDIT FIND PREV P'=' 1
ISREDIT CHANGE P'=' ' ' 1 &EVAL(&COL1-1) +
ALL .ZCSR .ZCSR
ISREDIT CHANGE P'=' ' ' &EVAL(&COL2+1) &LRECL +
ALL .ZCSR .ZCSR
ISREDIT FIND FIRST '&&' .ZCSR .ZCSR
IF &LASTCC = 0 THEN +
SET SKELETON = &STR(&VARVALUE)
ELSE +
DO
ISREDIT (SKELETON) = LINE .ZCSR
SET SKELETON = &SKELETON
IF &STR(&SKELETON) = THEN +
SET SKELETON = &STR(&VARVALUE)
END
ISREDIT DELETE .ZCSR
ISPEXEC VGET ISPSLIB SHARED
IF &SYSINDEX(&STR( &SKELETON ),+
&STR(&ISPMLIB)) = 0 AND +
&STR(&SKELETON) ¬= &STR(&VARVALUE) THEN +
DO
SET ISPMLIB = &STR(&ISPSLIB &SKELETON )
SET CMPDD = &STR(&PFX.ISPSLIB: &SKELETON)
PUTFILE CMPDD
ISPEXEC VPUT ISPSLIB SHARED
ISPEXEC SELECT +
CMD(%FINDMOD &SKELETON ISPSLIB BATCH)
IF &LASTCC = 0 THEN +
DO
ISPEXEC VGET DSN SHARED
CLOSFILE CMPDD
ISPEXEC EDIT DATASET('&DSN') +
MACRO(COMPONEN)
FREE DD(CMPDD)
ALLOC DD(CMPDD) DSN('&CMPDSN') MOD
OPENFILE CMPDD OUTPUT
END
END
IF &STR(&SKELETON) = &STR(&VARVALUE) THEN +
DO
SET ISPMLIB = &STR(&ISPSLIB &SKELETON )
SET CMPDD = &STR(&PFX.ISPSLIB: &SKELETON)
PUTFILE CMPDD
END
END
ISREDIT FIND LAST P'=' .ZCSR .ZCSR
ISREDIT FIND NEXT P'=' 1 NX
END
GOTO FINISH
/**********************************************************************
/* RETURN TO THE PREVIOUS LEVEL OR GET OUT ALL TOGETHER. *
/**********************************************************************
FINISH: +
IF &CMPLVL < 2 THEN +
DO
CLOSFILE CMPDD
FREE DD(CMPDD)
IF &CMPEDIT = YES THEN +
ISPEXEC EDIT DATASET('&CMPDSN')
SET CMPLVL =
SET CMPDSN =
SET CMPTYPE =
SET DSN =
ISPEXEC VPUT (CMPTYPE CMPLVL CMPDSN DSN) SHARED
END
SET CMPLVL = &CMPLVL - 1
ISPEXEC VPUT CMPLVL SHARED
ISREDIT CANCEL
EXIT
HELPSEC: + 02480000
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL) 02490000
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR XXXXXXXX UTILITY + 02490000
*** NO PROCESSING PERFORMED ***) 02490000
ISPEXEC SETMSG MSG(UTLZ000) 02490000
EXIT
Documentation
The COMPONEN edit macro is a utility which parses a CLIST to determine all of
it's "called" components (e.g. PANELS, MESSAGES, TABLES, PROGRAMS, CLISTS,
SKELETONS, etc.). The results are then placed in a file and you are taken into
an edit on that file.
Simply type COMPONEN on the command line of a CLIST you are editing and press
ENTER and "off you go".

0 Comments