Mainframe Utility: JCLCLIST

Return to Mainframe Utilities Page

Module


ISREDIT MACRO (HELP)
ISPEXEC CONTROL ERRORS RETURN
/**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/
ISPEXEC VGET (DBGSWTCH) PROFILE
IF &DBGSWTCH = &STR(ON) THEN CONTROL MSG LIST CONLIST SYMLIST NOFLUSH
ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT
/******************************************************************/
/* 'JCLCLIST' EDIT MACRO. TAKE A JCL JOB STEP AND CONVERT TO CLIST*/
/* FORMAT.                                                        */
/* AUTHOR : DAVID LEIGH    DATE : 5-25-89                         */
/******************************************************************/

SET PLUS = &STR(+)
IF &STR(&HELP) = &STR(HELP) THEN GOTO HELPSEC

ISREDIT (CURRDSN) = DATASET
LISTDSI '&CURRDSN'
DELETE '&CURRDSN($&SYSUID)'
FREE DDNAME(TEMPFREE)
ALLOC DDNAME(TEMPFREE) +
      DSN('&CURRDSN($&SYSUID)') +
      SHR KEEP
OPENFILE TEMPFREE OUTPUT

ISREDIT (SLINE,SCOL) = CURSOR
SET PSWITCH = OFF
ISREDIT CURSOR = 1 1
SET SAVECC = 0
ISREDIT FIND FIRST P'=' 1 X
SET SAVECC = &LASTCC

IF &SAVECC = 0 THEN +
    DO
        ISREDIT (LN,CL) = CURSOR
        SET LN = &LN - 1
        IF &LN = 0 THEN +
            DO
                ISREDIT LINE_BEFORE .ZCSR = ' '
                SET LN = 1
            END
        ISREDIT CURSOR = &LN &CL
        ISREDIT LABEL .ZCSR = .LABELA
        SET LN = &LN + 1
        ISREDIT CURSOR = &LN &CL
        ISREDIT LABEL .ZCSR = .LABELB
        ISREDIT (DATA) = LINE .ZCSR
        IF &SYSINDEX(&STR( EXEC ),&STR(&DATA)) = 0 OR +
           &SYSINDEX(&STR(PGM=),&STR(&DATA)) = 0 THEN +
            DO
                SET ZEDLMSG = &STR(FIRST EXCLUDED LINE MUST BE AN )+
                              &STR("EXEC PGM=" JCL LINE)
                ISPEXEC SETMSG MSG(UTLZ001)
                CLOSFILE TEMPFREE
                FREE DDNAME(TEMPFREE)
                EXIT
            END
        ELSE +
            DO
                SET A = &SYSINDEX(&STR(PGM=),&STR(&DATA))
                SET A = &A + 4
                SET B = &LENGTH(&STR(&DATA))
                SET DATA = &SUBSTR(&A:&B,&STR(&DATA))
                SET A = &SYSINDEX(&STR(,),&STR(&DATA))
                IF &A > 1 THEN +
                    DO
                        SET A = &A - 1
                        SET PSWITCH = ON
                    END
                ELSE +
                    SET A = &SYSINDEX(&STR( ),&STR(&DATA))
                SET PGMNAME = &SUBSTR(1:&A,&STR(&DATA))
                DO WHILE &PSWITCH = ON
                    ISREDIT FIND NEXT P'¬' 3 80 X
                    SET SAVECC = &LASTCC
                    IF &SAVECC = 0 THEN +
                        DO
                            ISREDIT (LN,CL) = CURSOR
                            ISREDIT (DATA) = LINE .ZCSR
                            SET B = &LENGTH(&STR(&DATA))
                            SET X = &SUBSTR(&CL:&B,&STR(&DATA))
                            SET A = &SYSINDEX(&STR(,),&STR(&X))
                            IF &A > 1 THEN SET PSWITCH = ON
                            ELSE +
                                DO
                                    SET A = &SYSINDEX(&STR( ),+
                                            &STR(&X))
                                    SET A = &A - 1

                                    SET PSWITCH = OFF
                                END
                            SET X = &SUBSTR(1:&A,&STR(&X))
                            SET PARM = &STR(&PARM.&X)
                        END
                    ELSE SET PSWITCH = OFF
                END

            END
    END
ELSE +
    DO
        SET ZEDLMSG = &STR(SELECTED LINES TO CONVERT MUST BE EXCLUDED)
        ISPEXEC SETMSG MSG(UTLZ001)
        CLOSFILE TEMPFREE
        FREE DDNAME(TEMPFREE)
        EXIT
    END

ISREDIT FIND NEXT P'=' 1 X

IF &LASTCC > 0 THEN +
    DO
        SET ZEDLMSG = &STR(NO EXCLUDED LINES PAST THE "EXEC" STATEMENT)
        ISPEXEC SETMSG MSG(UTLZ001)
        CLOSFILE TEMPFREE
        FREE DDNAME(TEMPFREE)
        EXIT
    END

ISREDIT (LN,CL) = CURSOR
ISREDIT SEEK LAST P'=' 1 X
ISREDIT LINE_AFTER .ZCSR = ' '
ISREDIT CURSOR = &LN &CL
SET LPAREN = &STR((
SET RPAREN = &STR())
SET DDBEGIN = OFF
SET DDEND = ON
SET NUMDD = 0
SET NUMDCB = 0

LOOP: +
ISREDIT CHANGE '&&' '¦' .ZCSR .ZCSR ALL
ISREDIT (LN,CL) = CURSOR
SET LN = &LN + 1
ISREDIT CURSOR = &LN 1
IF &LASTCC = 0 THEN +
    ISREDIT FIND P'¬' PREV
ELSE +
    DO
        SET LN = &LN - 1
        SET CL = &SYSLRECL
        ISREDIT CURSOR = &LN &CL
        ISREDIT FIND P'¬' PREV
    END
ISREDIT (LN,CL) = CURSOR
ISREDIT (DATA) = LINE .ZCSR
SET CL = &CL + 2
IF &CL > &SYSLRECL THEN SET CL = &SYSLRECL
SET DATA = &SUBSTR(1:&CL,&STR(&DATA))
IF &SUBSTR(1:2,&STR(&DATA)) ¬= &STR(//) OR +
   &SYSINDEX(&STR(/)&STR(/)&STR(*),&STR(&DATA)) = 1 THEN +
    IF &SWITCHSYS = ON THEN +
        DO
            IF &SYSINDEX(&STR(&DLM ),&STR(&DATA)) = 1 THEN +
                DO
                    SET DDBEGIN = OFF
                    SET DDEND = ON
                END
            ELSE +
                DO
                    SET NUMLINE = &NUMLINE + 1
                    SET LINE&NUMLINE = &NRSTR(&DATA)
                END
        END
    ELSE GOTO CONTINUE

IF &SYSINDEX(&STR(DCB=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(DCB=),&STR(&DATA))
        SET A = &A + 4
        SET B = &LENGTH(&STR(&DATA))
        SET Q = &SUBSTR(&A:&B,&STR(&DATA))
        IF &SYSINDEX(&STR(&LPAREN),&STR(&Q)) ¬= 1 THEN +
            IF &SYSINDEX(&STR(SYS3.DSCB),&STR(&Q)) ¬= 1 THEN +
                DO
                    SET DDBEGIN = OFF
                    SET DDEND = ON
                END
            ELSE
        ELSE
    END

IF &DDBEGIN = OFF AND +
   &SYSINDEX(&STR( DD ),&STR(&DATA)) > 0 AND +
   &SYSINDEX(&STR( ),&STR(&DATA)) > 3 THEN +
    DO
        SET DDBEGIN = ON
        SET DDEND = OFF
        SET NUMDD = &NUMDD + 1
        SET NUMDSN = 0
        SET A = &SYSINDEX(&STR( ),&STR(&DATA))
        SET DDNAME = &SUBSTR(3:&A,&STR(&DATA))
        IF &DDNAME = STEPLIB THEN +
            DO
                SET TLIB = YES
                SET DDNAME = TASKLIB
            END
    END

IF &DDBEGIN = ON AND +
   &SYSINDEX(&STR( DD ),&STR(&DATA)) > 0 AND +
   &SYSINDEX(&STR( DSN=),&STR(&DATA)) = 0 AND +
   (&SYSINDEX(&STR( * ),&STR(&DATA)) > 0 OR +
   &SYSINDEX(&STR( DATA),&STR(&DATA)) > 0) THEN +
    DO
        SET NUMLINE = 0
        SET SWITCHSYS = ON
        SET A = &SYSINDEX(&STR(,DLM=),&STR(&DATA))
        IF A > 0 THEN +
            DO
                SET A = &A + 5
                SET B = &LENGTH(&STR(&DATA))
                SET DLM = &SUBSTR(&A:&B,&STR(&DATA))
                SET A = &SYSINDEX(&STR(, ),&STR(&DLM))
                IF &A = 0 THEN SET A = &SYSINDEX(&STR( ),&STR(&DLM))
                SET A = &A - 1
                SET DLM = &SUBSTR(1:&A,&STR(&DLM))
            END
        ELSE SET DLM = &STR(/*)
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(DSN=),&STR(&DATA)) > 0 THEN +
    DO
        SET NUMDSN = &NUMDSN + 1
        SET A = &SYSINDEX(&STR(DSN=),&STR(&DATA))
        SET A = &A + 4
        SET B = &LENGTH(&STR(&DATA))
        SET DSN&NUMDSN = &SUBSTR(&A:&B,&STR(&DATA))
        SET X = &&DSN&NUMDSN
        SET A = &SYSINDEX(&STR(,),&STR(&X))
        IF &A = 0 THEN +
            DO
                SET A = &SYSINDEX(&STR( ),&STR(&X))
                ISREDIT (LX CX) = CURSOR
                ISREDIT SEEK P'=' NEXT 1 X
                ISREDIT (XDATA) = LINE .ZCSR
                IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                   &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                    ISREDIT CURSOR = &LX &CX
                ELSE +
                    DO
                        ISREDIT CURSOR = &LX &CX
                        SET DDBEGIN = OFF
                        SET DDEND = ON
                    END
            END
        SET A = &A - 1
        SET DSN&NUMDSN = &SUBSTR(1:&A,&STR(&X))
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(DISP=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(DISP=),&STR(&DATA))
        SET A = &A + 5
        SET B = &LENGTH(&STR(&DATA))
        SET DISP = &SUBSTR(&A:&B,&STR(&DATA))
        IF &SYSINDEX(&STR(&LPAREN),&STR(&DISP)) ¬= 1 THEN +
            DO
                SET A = &SYSINDEX(&STR(,),&STR(&DISP))
                IF &A = 0 THEN +
                    DO
                        SET A = &SYSINDEX(&STR( ),+
                                &STR(&DISP))
                        ISREDIT (LX CX) = CURSOR
                        ISREDIT SEEK P'=' NEXT 1 X
                        ISREDIT (XDATA) = LINE .ZCSR
                        IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                           &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                            ISREDIT CURSOR = &LX &CX
                        ELSE +
                            DO
                                ISREDIT CURSOR = &LX &CX
                                SET DDBEGIN = OFF
                                SET DDEND = ON
                            END
                    END
                SET A = &A - 1
                SET DISP = &SUBSTR(1:&A,&STR(&DISP))
            END
        ELSE +
            DO
                SET A = &SYSINDEX(&STR(&RPAREN),&STR(&DISP))
                SET Q = &A + 1
                IF &SYSINDEX(&STR( ),&STR(&DISP)) = &Q THEN +
                    DO
                        ISREDIT (LX CX) = CURSOR
                        ISREDIT SEEK P'=' NEXT 1 X
                        ISREDIT (XDATA) = LINE .ZCSR
                        IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                           &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                            ISREDIT CURSOR = &LX &CX
                        ELSE +
                            DO
                                ISREDIT CURSOR = &LX &CX
                                SET DDBEGIN = OFF
                                SET DDEND = ON
                            END
                    END
                SET A = &A - 1
                SET DISP = &SUBSTR(2:&A,&STR(&DISP))
                SET A = &SYSINDEX(&STR(,),&STR(&DISP))
                IF &A = 0 THEN +
                    DO
                        SET A = &SYSINDEX(&STR(&LPAREN),+
                                &STR(&DISP))
                        ISREDIT (LX CX) = CURSOR
                        ISREDIT SEEK P'=' NEXT 1 X
                        ISREDIT (XDATA) = LINE .ZCSR
                        IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                           &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                            ISREDIT CURSOR = &LX &CX
                        ELSE +
                            DO
                                ISREDIT CURSOR = &LX &CX
                                SET DDBEGIN = OFF
                                SET DDEND = ON
                            END
                    END
                SET C = &A + 1
                SET A = &A - 1
                SET B = &LENGTH(&STR(&DISP))
                SET X = &SUBSTR(1:&A,&STR(&DISP))
                SET Y = &SUBSTR(&C:&B,&STR(&DISP))
                SET A = &SYSINDEX(&STR(,),&STR(&Y))
                SET A = &A - 1
                IF &A > 0 THEN +
                    DO
                        SET Y = &SUBSTR(1:&A,&STR(&Y))
                        SET DISP = &STR(&X &Y)
                    END
                ELSE +
                    SET DISP = &STR(&X)
            END
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(UNIT=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(UNIT=),&STR(&DATA))
        SET A = &A + 5
        SET B = &LENGTH(&STR(&DATA))
        SET UNIT = &SUBSTR(&A:&B,&STR(&DATA))
        SET A = &SYSINDEX(&STR(,),&STR(&UNIT))
        IF &A = 0 THEN +
            DO
                SET A = &SYSINDEX(&STR( ),&STR(&UNIT))
                ISREDIT (LX CX) = CURSOR
                ISREDIT SEEK P'=' NEXT 1 X
                ISREDIT (XDATA) = LINE .ZCSR
                IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                   &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                    ISREDIT CURSOR = &LX &CX
                ELSE +
                    DO
                        ISREDIT CURSOR = &LX &CX
                        SET DDBEGIN = OFF
                        SET DDEND = ON
                    END
            END
        SET A = &A - 1
        SET UNIT = &SUBSTR(1:&A,&STR(&UNIT))
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(SPACE=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(SPACE=),&STR(&DATA))
        SET A = &A + 7
        SET B = &LENGTH(&STR(&DATA))
        SET SPACE = &SUBSTR(&A:&B,&STR(&DATA))
        SET C = &SYSINDEX(&STR(&LPAREN),&STR(&SPACE))
        SET C = &C - 2
        SET Q = &SYSINDEX(&STR(&RPAREN ),&STR(&SPACE))
        IF &Q > 0 THEN +
            DO
                ISREDIT (LX CX) = CURSOR
                ISREDIT SEEK P'=' NEXT 1 X
                ISREDIT (XDATA) = LINE .ZCSR
                IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                   &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                    ISREDIT CURSOR = &LX &CX
                ELSE +
                    DO
                        ISREDIT CURSOR = &LX &CX
                        SET DDBEGIN = OFF
                        SET DDEND = ON
                    END
            END
        SET X = &SUBSTR(1:&C,&STR(&SPACE))
        IF &X = CYL THEN SET &X = CYLINDERS
        IF &X = TRK THEN SET &X = TRACKS
        IF &X = BLK THEN SET &X = BLOCKS
        SET C = &SYSINDEX(&STR(&LPAREN),&STR(&SPACE))
        SET C = &C + 1
        SET B = &SYSINDEX(&STR(&RPAREN),&STR(&SPACE))
        SET B = &B - 1
        SET Y = &SUBSTR(&C:&B,&STR(&SPACE))
        IF &SYSINDEX(&STR(,RLSE),&STR(&SPACE)) > 1 THEN +
            SET Z = RELEASE
        ELSE SET Z =
        SET SPACE = &STR(SPACE(&Y) &X &Z)
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(RECFM=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(RECFM=),&STR(&DATA))
        SET A = &A + 5
        SET B = &LENGTH(&STR(&DATA))
        SET RECFM = &SUBSTR(&A:&B,&STR(&DATA))
        SET A = &SYSINDEX(&STR(,),&STR(&RECFM))
        IF &A = 0 THEN +
            DO
                SET A = &SYSINDEX(&STR(&RPAREN),&STR(&RECFM))
                SET Q = &A + 1
                IF &SYSINDEX(&STR( ),&STR(&RECFM)) = &Q THEN +
                    DO
                        ISREDIT (LX CX) = CURSOR
                        ISREDIT SEEK P'=' NEXT 1 X
                        ISREDIT (XDATA) = LINE .ZCSR
                        IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                           &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                            ISREDIT CURSOR = &LX &CX
                        ELSE +
                            DO
                                ISREDIT CURSOR = &LX &CX
                                SET DDBEGIN = OFF
                                SET DDEND = ON
                            END
                    END
            END
        SET A = &A - 1
        SET RECFM = &SUBSTR(1:&A,&STR(&RECFM))
        SET F =
        SET B =
        SET V =
        SET M =
        SET A =
        IF &SYSINDEX(&STR(F),&STR(&RECFM)) > 0 THEN +
            SET F = &STR(F )
        IF &SYSINDEX(&STR(B),&STR(&RECFM)) > 0 THEN +
            SET B = &STR(B )
        IF &SYSINDEX(&STR(V),&STR(&RECFM)) > 0 THEN +
            SET V = &STR(V )
        IF &SYSINDEX(&STR(M),&STR(&RECFM)) > 0 THEN +
            SET M = &STR(M )
        IF &SYSINDEX(&STR(A),&STR(&RECFM)) > 0 THEN +
            SET A = &STR(A )
        SET RECFM = &STR(&F&V&B&M&A)
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(LRECL=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(LRECL=),&STR(&DATA))
        SET A = &A + 6
        SET B = &LENGTH(&STR(&DATA))
        SET LRECL = &SUBSTR(&A:&B,&STR(&DATA))
        SET A = &SYSINDEX(&STR(,),&STR(&LRECL))
        IF &A = 0 THEN +
            DO
                SET A = &SYSINDEX(&STR(&RPAREN),&STR(&LRECL))
                SET Q = &A + 1
                IF &SYSINDEX(&STR( ),&STR(&LRECL)) = &Q THEN +
                    DO
                        ISREDIT (LX CX) = CURSOR
                        ISREDIT SEEK P'=' NEXT 1 X
                        ISREDIT (XDATA) = LINE .ZCSR
                        IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                           &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                            ISREDIT CURSOR = &LX &CX
                        ELSE +
                            DO
                                ISREDIT CURSOR = &LX &CX
                                SET DDBEGIN = OFF
                                SET DDEND = ON
                            END
                    END
            END
        SET A = &A - 1
        SET LRECL = &SUBSTR(1:&A,&STR(&LRECL))
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(BLKSIZE=),&STR(&DATA)) > 0 THEN +
    DO
        SET A = &SYSINDEX(&STR(BLKSIZE=),&STR(&DATA))
        SET A = &A + 8
        SET B = &LENGTH(&STR(&DATA))
        SET BLKSIZE = &SUBSTR(&A:&B,&STR(&DATA))
        SET A = &SYSINDEX(&STR(,),&STR(&BLKSIZE))
        IF &A = 0 THEN +
            DO
                SET A = &SYSINDEX(&STR(&RPAREN),&STR(&BLKSIZE))
                SET Q = &A + 1
                IF &SYSINDEX(&STR( ),&STR(&BLKSIZE)) = &Q THEN +
                    DO
                        ISREDIT (LX CX) = CURSOR
                        ISREDIT SEEK P'=' NEXT 1 X
                        ISREDIT (XDATA) = LINE .ZCSR
                        IF &SUBSTR(1:3,&STR(&XDATA)) = &STR(// ) AND +
                           &SYSINDEX(&STR( DD ),&STR(&XDATA)) > 1 THEN +
                            ISREDIT CURSOR = &LX &CX
                        ELSE +
                            DO
                                ISREDIT CURSOR = &LX &CX
                                SET DDBEGIN = OFF
                                SET DDEND = ON
                            END
                    END
            END
        SET A = &A - 1
        SET BLKSIZE = &SUBSTR(1:&A,&STR(&BLKSIZE))
    END

IF &DDBEGIN = ON AND &SYSINDEX(&STR(SYSOUT=),&STR(&DATA)) > 0 THEN +
    DO
        SET DISP = &STR(DUMMY)
        SET DDBEGIN = OFF
        SET DDEND = ON
    END

IF &DDEND = ON THEN +
    DO
        IF &LENGTH(&STR(&PARM)) > 0 THEN +
            IF &TLIB = YES THEN +
                SET CALL = &STR(TSOPTSKL &PGMNAME &PARM)
            ELSE +
                SET CALL = &STR(CALL 'SYS2A.LINKLIB(&PGMNAME)' '&PARM')
        ELSE +
            IF &TLIB = YES THEN +
                SET CALL = &STR(TSOPTSKL &PGMNAME)
            ELSE +
                SET CALL = &STR(CALL 'SYS2A.LINKLIB(&PGMNAME)')
        SET PLS = &STR(+)
        IF &SWITCHSYS = ON THEN +
            DO
                SET SWITCHSYS = OFF
                SET STRING = &STR( )
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(FREE ATTRLIST(ATTRIB&NUMDD))
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET TEMPFREE = &STR(&STRING)
                PUTFILE TEMPFREE
                SET STRING = &STR(ATTRIB ATTRIB&NUMDD OUTPUT +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(       RECFM(F B) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET RECFM =
                SET STRING = &STR(       LRECL(80) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET LRECL =
                SET STRING = &STR(       BLKSIZE(23440))
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET BLKSIZE =
                SET STRING = &STR( )
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(FREE DDNAME(&DDNAME))
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET TEMPFREE = &STR(&STRING)
                PUTFILE TEMPFREE
                SET STRING = &STR(DELETE &DDNAME)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(ALLOC DD(&DDNAME) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      DSN(&DDNAME) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      NEW CATALOG +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      UNIT(SYSDA) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      SPACE(50,1) TRACKS RELEASE +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      USING(ATTRIB&NUMDD))
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR( )
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(OPENFILE &DDNAME OUTPUT)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET X = 1
                DO WHILE &X <= &NUMLINE
                    SET Y = &&LINE&X
                    SET STRING = &STR(SET &DDNAME = )+
                                 &STR(¦STR(&Y))
                    IF &LENGTH(&STR(&STRING)) > 70 THEN +
                        DO
                            SET A = &LENGTH(&STR(&STRING))
                            SET STG1 = &SUBSTR(1:70,&STR(&STRING))
                            SET STG2 = &SUBSTR(71:&A,&STR(&STRING))
                            SET STG1 = &STR(&STG1+)
                            SET STG2 = &STR(    &STG2)
                            IF &SYSINDEX(&STR('),&STR(&STG1)) > 0 THEN +
                                ISREDIT LINE_BEFORE .LABELB = "&STG1"
                            ELSE +
                                ISREDIT LINE_BEFORE .LABELB = '&STG1'
                            IF &SYSINDEX(&STR('),&STR(&STG2)) > 0 THEN +
                                ISREDIT LINE_BEFORE .LABELB = "&STG2"
                            ELSE +
                                ISREDIT LINE_BEFORE .LABELB = '&STG2'
                        END
                    ELSE +
                        IF &SYSINDEX(&STR('),&STR(&STRING)) > 0 THEN +
                            ISREDIT LINE_BEFORE .LABELB = "&STRING"
                        ELSE +
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET STRING = &STR(PUTFILE &DDNAME)
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET X = &X + 1
                END
                SET STRING = &STR(CLOSFILE &DDNAME)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR( )
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(FREE DDNAME(&DDNAME))
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET TEMPFREE = &STR(&STRING)
                PUTFILE TEMPFREE
                SET STRING = &STR(ALLOC DD(&DDNAME) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      DSN(&DDNAME) +)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
                SET STRING = &STR(      SHR KEEP)
                ISREDIT LINE_BEFORE .LABELB = '&STRING'
            END
        ELSE +
            IF &SYSINDEX(&STR(NEW),&STR(&DISP)) > 0 THEN +
                DO
                    SET STRING = &STR( )
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET STRING = &STR(FREE ATTRLIST(ATTRIB&NUMDD))
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET TEMPFREE = &STR(&STRING)
                    PUTFILE TEMPFREE
                    SET STRING = &STR(ATTRIB ATTRIB&NUMDD OUTPUT +)
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET STRING = &STR(       RECFM(&RECFM) +)
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET RECFM =
                    SET STRING = &STR(       LRECL(&LRECL) +)
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET LRECL =
                    SET STRING = &STR(       BLKSIZE(&BLKSIZE))
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET BLKSIZE =
                    SET STRING = &STR( )
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET STRING = &STR(FREE DDNAME(&DDNAME))
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET TEMPFREE = &STR(&STRING)
                    PUTFILE TEMPFREE
                    SET STRING = &STR(ALLOC DD(&DDNAME) +)
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET DDNAME =
                    SET X = 1
                    SET Y = &&DSN&X
                    IF &NUMDSN > 1 THEN +
                        DO
                            SET STRING = &STR(      DSN('&Y' +)
                            ISREDIT LINE_BEFORE .LABELB = "&STRING"
                            SET DSN&X =
                        END
                    ELSE +
                        DO
                            SET STRING = &STR(      DSN('&Y') +)
                            ISREDIT LINE_BEFORE .LABELB = "&STRING"
                            SET DSN&X =
                        END
                    SET X = &X + 1
                    DO WHILE &X < &NUMDSN
                        SET Y = &&DSN&X
                        SET STRING = &STR(         &STR('&Y') +)
                        ISREDIT LINE_BEFORE .LABELB = "&STRING"
                        SET DSN&X =
                        SET X = &X + 1
                    END
                    IF &X = &NUMDSN THEN +
                        DO
                            SET Y = &&DSN&X
                            SET STRING = &STR(          &STR('&Y')) +)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET DSN&X =
                        END
                    IF &DISP >     THEN +
                        DO
                            IF &UNIT =     AND +
                               &SPACE =    AND +
                               &NUMDSN = 0 THEN +
                                SET PLS =
                            SET STRING = &STR(      &DISP &PLS)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET DISP =
                        END
                    IF &UNIT >     THEN +
                        DO
                            IF &SPACE =    AND +
                               &NUMDSN = 0 THEN +
                                SET PLS =
                            SET STRING = &STR(      UNIT(&UNIT) &PLS)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET UNIT =
                        END
                    IF &SPACE >     THEN +
                        DO
                            IF &NUMDSN = 0 THEN +
                                SET PLS =
                            SET STRING = &STR(      &SPACE &PLS)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET SPACE =
                        END
                    IF &NUMDSN > 0  THEN +
                        DO
                            SET STRING = &STR(      USING(ATTRIB&NUMDD))
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                        END
                END
            ELSE +
                DO
                    SET STRING = &STR( )
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET STRING = &STR(FREE DDNAME(&DDNAME))
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET TEMPFREE = &STR(&STRING)
                    PUTFILE TEMPFREE
                    SET STRING = &STR(ALLOC DD(&DDNAME) +)
                    ISREDIT LINE_BEFORE .LABELB = '&STRING'
                    SET DDNAME =
                    SET X = 1
                    SET Y = &&DSN&X
                    IF &STR(&Y) >    THEN +
                        DO
                            IF &NUMDSN > 1 THEN +
                                DO
               SET STRING = &STR(      DSN&STR(&LPAREN)'&Y' &STR(&PLUS))
                                    ISREDIT LINE_BEFORE .LABELB = +
                                        "&STRING"
                                    SET DSN&X =
                                END
                            ELSE +
                                DO
                              SET STRING = &STR(      DSN('&Y') +)
                                    ISREDIT LINE_BEFORE .LABELB = +
                                        "&STRING"
                                    SET DSN&X =
                                END
                            SET X = &X + 1
                            DO WHILE &X < &NUMDSN
                                SET Y = &&DSN&X
                    SET STRING = &STR(          &STR('&Y') &STR(&PLUS))
                                ISREDIT LINE_BEFORE .LABELB = "&STRING"
                                SET DSN&X =
                                SET X = &X + 1
                            END
                            IF &X = &NUMDSN THEN +
                                DO
                                    SET Y = &&DSN&X
                        SET STRING = &STR(          &STR('&Y')&RPAREN +)
                                    ISREDIT LINE_BEFORE .LABELB = +
                                        "&STRING"
                                    SET DSN&X =
                                END
                        END
                    IF &DISP >     THEN +
                        DO
                            IF &UNIT =     AND +
                               &SPACE =    THEN +
                                SET PLS =
                            SET STRING = &STR(      &DISP &PLS)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET DISP =
                        END
                    IF &UNIT >     THEN +
                        DO
                            IF &SPACE =    THEN +
                                SET PLS =
                            SET STRING = &STR(      UNIT(&UNIT) &PLS)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET UNIT =
                        END
                    IF &SPACE >     THEN +
                        DO
                            SET STRING = &STR(      &SPACE)
                            ISREDIT LINE_BEFORE .LABELB = '&STRING'
                            SET SPACE =
                        END
                END
    END

CONTINUE: +
ISREDIT FIND P'=' NEXT 1 X

IF &LASTCC = 0 THEN GOTO LOOP

SET STRING = &STR( )
ISREDIT LINE_BEFORE .LABELB = '&STRING'

SET STRING = &STR(&CALL)
ISREDIT LINE_BEFORE .LABELB = "&STRING"

SET STRING = &STR( )
ISREDIT LINE_BEFORE .LABELB = "&STRING"

CLOSFILE TEMPFREE
FREE DDNAME(TEMPFREE)

ISREDIT COPY $&SYSUID BEFORE .LABELB

ISREDIT LABEL .ZCSR = .LABELC

ISREDIT CHANGE ' CATLG ' ' CATALOG ' .LABELA .LABELB ALL

ISREDIT CHANGE '¦' '&&' .LABELA .LABELB ALL

ISREDIT CHANGE ' )' ')' .LABELA .LABELB ALL

ISREDIT DELETE .LABELB .LABELC

ISREDIT RESET

EXIT

HELPSEC: +
CLEAR
WRITE *** HELP FOR EDIT MACRO 'JCLSPLIT' ***
WRITE
WRITE THE JCLCLIST EDIT MACRO WILL TAKE A JOB STEP OF JCL STATEMENTS AND
WRITE CONVERT IT TO CLIST STATEMENTS (I.E. 'ATTRIB', 'ALLOC', 'CALL',
WRITE ETC.).
WRITE
WRITE BASIC SYNTAX :
WRITE
WRITE COMMAND ===> JCLCLIST
WRITE
WRITE THE JOB STEP TO BE CONVERTED MUST BE 'EXCLUDED' (SEE EDIT LINE
WRITE COMMAND HELP FOR HOW TO 'EXCLUDE' A LINE IN AN ISPF EDIT SESSION).
WRITE
WRITE THE FIRST LINE EXCLUDED MUST CONTAIN THE 'EXEC' JCL STATEMENT WITH
WRITE THE 'PGM=' PARAMETER (A JOB STEP WHICH EXECUTES A PROC CANNOT BE
WRITE CONVERTED).
WRITE
WRITE THE CONVERTED CLIST STATEMENTS DO NOT CONSTITUTE A COMPLETE CLIST.
WRITE RATHER, THEY ARE THE 'ROUGH' EQUIVELENT STATEMENTS TO THE JCL IN
WRITE THE CONVERTED JOB STEP.
WRITE
WRITE THE CONVERTED JCL STATEMENTS ARE DELETED FROM THE DATASET BEING
WRITE EDITED.
WRITE
WRITE THE FOLLOWING IS AN EXAMPLE OF THE OUTPUT RECEIVED FROM CONVERTING
WRITE A SIMPLE JOB.
WRITE
WRITE ORIGINAL FILE :
WRITE COMMAND ===>
WRITE 000001 //TFDTDALW JOB (FCEC33,L20A),
WRITE 000002 //             'DAVID LEIGH',
WRITE 000003 //             CLASS=S,
WRITE 000004 //             MSGCLASS=Y,
WRITE 000005 //             NOTIFY=TFDTDAL
WRITE 000006 //JS010   EXEC PGM=WAAPDSUT,
WRITE 000007 //             PARM=ABEND
WRITE 000008 //SYSUT1    DD DSN=PCWCA.PWBUF.RB08.HIERARCH(0),
WRITE 000009 //             DISP=(SHR,KEEP,KEEP)
WRITE 000010 //SYSUT2    DD DSN=TCWCA.TWBUF.RB08.HIERARCH,
WRITE 000011 //             DISP=(NEW,CATLG,DELETE),
WRITE 000012 //             UNIT=PERMDA,
WRITE 000013 //             SPACE=(TRK,(1,1),RLSE),
WRITE 000014 //             DCB=(RECFM=FB,LRECL=2376,BLKSIZE=21384)
WRITE 000015 //SYSPRINT  DD SYSOUT=*
WRITE 000016 //SYSUDUMP  DD SYSOUT=*
WRITE
WRITE RESULTING FILE :
WRITE
WRITE 000001 //TFDTDALW JOB (FCEC33,L20A),
WRITE 000002 //             'DAVID LEIGH',
WRITE 000003 //             CLASS=S,
WRITE 000004 //             MSGCLASS=Y,

WRITE 000005 //             NOTIFY=TFDTDAL
WRITE 000006
WRITE 000007 FREE DDNAME(SYSUT1)
WRITE 000008 ALLOC DD(SYSUT1) &STR(&PLUS)
WRITE 000009       DSN(PCWCA.PWBUF.RB08.HIERARCH(0)) &STR(&PLUS)
WRITE 000010       SHR KEEP
WRITE 000011
WRITE 000012 FREE ATTRLIST(ATTRIB2)
WRITE 000013 ATTRIB ATTRIB2 OUTPUT &STR(&PLUS)
WRITE 000014        RECFM(F B) &STR(&PLUS)
WRITE 000015        LRECL(2376) &STR(&PLUS)
WRITE 000016        BLKSIZE(21384)
WRITE 000017
WRITE 000018 FREE DDNAME(SYSUT2)
WRITE 000019 ALLOC DD(SYSUT2) &STR(&PLUS)
WRITE 000020       DSN(TCWCA.TWBUF.RB08.HIERARCH) &STR(&PLUS)
WRITE 000021       NEW CATLG &STR(&PLUS)
WRITE 000022       UNIT(PERMDA) &STR(&PLUS)
WRITE 000023       SPACE(1,1) TRACKS RELEASE &STR(&PLUS)
WRITE 000024       USING(ATTRIB2)
WRITE 000025
WRITE 000026 FREE DDNAME(SYSPRINT)
WRITE 000027 ALLOC DD(SYSPRINT) &STR(&PLUS)
WRITE 000028       DUMMY
WRITE 000029
WRITE 000030 FREE DDNAME(SYSUDUMP)
WRITE 000031 ALLOC DD(SYSUDUMP) &STR(&PLUS)
WRITE 000032       DUMMY
WRITE 000033
WRITE 000034 CALL 'SYS2A.LINKLIB(WAAPDSUT)' 'PARM=ABEND'
WRITE
WRITE AS YOU MAY KNOW, CLISTS CANNOT HANDLE RELATIVE GENERATION NUMBERS
WRITE LIKE THE ONE IN SYSUT1.  THEREFORE, THAT WOULD BE ONE THING TO
WRITE CHANGE PRIOR TO RUNNING THIS AS A CLIST.
WRITE
WRITE THE JOB CARD INFORMATION AND OTHER REMAINING JCL STATEMENTS WOULD
WRITE HAVE TO BE REMOVED.
WRITE
WRITE 'JCLCLIST' WILL ALSO CHANGE DD'S WITH "SYSOUT=" TO "DUMMY".  THESE
WRITE MAY NEED TO BE DEALT WITH ON AN INDIVIDUAL BASIS.
WRITE
WRITE THE PROGRAM BEING EXECUTED WILL BE ASSUMED TO BE FROM THE SYSTEM
WRITE LIBRARY 'SYS2A.LINKLIB'.  INDIVIDUALLY WRITTEN PROGRAMS, AND THOSE
WRITE FROM VENDOR SOFTWARE PRODUCTS MAY NOT RESIDE IN THIS LIBRARY.
WRITE THEREFORE, THE 'CALL' STATEMENT MAY NEED TO BE CHANGED.  IF THE
WRITE CALLED PROGRAM CONTAINS PARAMETERS WITH SINGLE QUOTES ("'"), MORE
WRITE QUOTES MAY NEED TO BE ADDED DUE TO WAY CLISTS HANDLE SINGLE
WRITE QUOTES.
WRITE
WRITE AS YOU CAN SEE, THIS IS JUST A TOOL TO AID IN CONVERSION FROM JCL
WRITE STATEMENTS TO CLIST STATEMENTS.  (IT CAN BE USED EFFECTIVELY TO
WRITE CONVERT A BACKROUND UTILITY TO A FOREGROUND ONE IN A SHORTER
WRITE AMOUNT OF TIME).  IT IS NOT, HOWEVER, A COMPLETE CLIST COMMAND
WRITE LANGUAGE GENERATOR.  IT NEEDS MANUAL REVIEW AND ADJUSTMENT OF THE
WRITE OUTPUT.
WRITE
WRITE *** END OF HELP *** NO PROCESSING PERFORMED ***
EXIT
            


Documentation


 This edit macro converts JCL code into equivilent (or close) TSO CLIST code.
 To execute it, you edit the JCL to be converted; "exclude" the lines which
 comprise 1 job step (the first excluded line MUST be the EXEC card); type
 JCLCLIST on the command line and press ENTER.  The JCL statements will then be
 REPLACED by the CLIST statements (i.e. don't do this to JCL you want to save...
 make a copy 1st !.)  If a dataset name has a relative GDG number, it will not
 be converted, but must be dealt with prior to running the CLIST as relative GDG
 #'s don't work in CLIST's yet.  Steps with STEPLIB will convert to the TSO
 TASKLIB facility.  Steps without a STEPLIB will convert to the TSO CALL command
 and assume the module is in SYS2A.LINKLIB.
            


Leave a Reply

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