Go to LeighWeb Home Page            

Back To LeighWeb Mainframe Utilities Page

View the documentation associated with this module

/* REXX ***************************************************************/
/* UTILITY: RELABEL                                                   */
/* AUTHOR: DAVID LEIGH                                                */
/* FUNCTION: THIS EDIT MACRO IS DESIGNED TO RE-ORDER THE LABEL NUMBERS*/
/*           IN JCL FOR MULTIPLE DATASETS STACKED ON A SINGLE TAPE. IT*/
/*           IS FOR TIMES WHEN A JOB ABENDS AND YOU NEED TO START     */
/*           STACKING DATASETS AT A NEW JOB STEP BEYOND THE ONE THAT  */
/*           ORIGINALLY HAD THE LABEL OF "1".                         */
/*                                                                    */
/*           TO EXECUTE THIS, YOU PASS THE NUMBER OF THE LABEL WHICH  */
/*           SHOULD NOW BECOME ONE.  RELABEL FINDS THAT LABEL AND     */
/*           RENUMBERS ALL SUBSEQUENT LABELS SO THAT THEY ARE         */
/*           INCREMENTED PROPERLY.  IT ALSO WORKS WITH MULTIPLE OUT-  */
/*           PUT DD'S IN A SINGLE STEP WHICH ALL NEED TO HAVE THE     */
/*           SAME LABEL NUMBER.  MULTIPLE OUTPUT DD'S IN THE SAME     */
/*           STEP WITH DIFFERENT LABEL NUMBERS WOULD NOT WORK WELL.   */
/*                                                                    */
/*           SYNTAX EXAMPLE:                                          */
/*                                                                    */
/*           COMMAND ===> RELABEL 5                                   */
/*                                                                    */
/*           IN THIS EXAMPLE, RELABEL WOULD FIND EACH "LABEL=(" AND   */
/*           FIND THE FIRST ONE WHERE THE LABEL IS 5 (OR 05 OR 005).  */
/*           IT WOULD CHANGE THE 5 TO A 1 AND LABEL 6 TO A 2 AND      */
/*           LABEL 7 TO A 3 AND SO ON.                                */
/*                                                                    */
/* MODIFICATION: RELABEL NOW LOOKS FOR THE VOL= PARAMETER AND         */
/*               REMOVES ANY REFERBACKS FOR THE LABEL=1 DD.           */
/**********************************************************************/
ADDRESS ISPEXEC
'CONTROL ERRORS RETURN'

ADDRESS ISREDIT
'MACRO (OPT)'

NEXTLAB = 1
LINELAB = OFF

/**********************************************************************/
/* LOOP THROUGH THE JOB LOOKING FOR LABELS TO CHANGE                  */
/**********************************************************************/
"FIND FIRST 'LABEL=(' NX"
DO WHILE RC = 0
    "(LINE) = LINE .ZCSR"
    PARSE VAR LINE PREFIX 'LABEL=(' LABEL ',' SUFFIX
/***/
/*** BUMP UP THE LABEL FOR THE NEXT HIGHER NUMBER ***/
/***/
    DO WHILE LABEL > OPT
        OPT = OPT + 1
        NEXTLAB = NEXTLAB + 1
    END
/***/
/*** IF THEY'RE EVEN NOW, CHANGE THEM TO THE NEW VALUE ***/
/***/
    IF LABEL = OPT THEN
        DO
            IF LINELAB = OFF THEN
                DO
                    "LABEL .ZCSR = .FIRST"
                    LINELAB = ON
                END
            LINE = PREFIX ¦¦ 'LABEL=(' ¦¦ NEXTLAB ¦¦ ',' ¦¦ SUFFIX
            "LINE .ZCSR = (LINE)"
            "FIND LAST P'¬' .ZCSR .ZCSR"
        END
/***/
/*** FIND THE NEXT ONE TO CHANGE ***/
/***/
    "FIND NEXT 'LABEL=(' NX"
END

/**********************************************************************/
/* GO BACK AND GET RID OF FIRST REFERBACK                             */
/**********************************************************************/
"FIND FIRST 'LABEL=(1,'"
DO WHILE RC = 0
    "FIND PREV ' DD '"
    "LABEL .ZCSR = .A"
    "FIND NEXT ' DD '"
    IF RC = 0 THEN
      DO
        B = '.B'
        "LABEL .ZCSR = .B"
      END
    ELSE B = '.ZLAST'
    "FIND FIRST ',REF=' .A" B
    IF RC = 0 THEN
      DO
        "(LINE) = LINE .ZCSR"
        PARSE UPPER VAR LINE PART1 ',REF=' PART2 ')' PART3
        "LINE .ZCSR = '"PART1 ¦¦ ')' ¦¦ PART3 "'"
      END
    "FIND LAST P'='" B B
    "FIND NEXT 'LABEL=(1,'"
END

/**********************************************************************/
/* TAKE THE USER BACK TO THE FIRST CHANGED LINE                       */
/**********************************************************************/
"LOCATE .FIRST"
"FIND FIRST P'=' .FIRST .FIRST"