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