Mainframe Utility: COMPONEN

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".
            


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.