Return to Mainframe Utilities Page
Module
/********************************************************************** /* EDIT MACRO : INFRONT * /* AUTHOR : DAVID LEIGH * /* FUNCTION : PLACE A STRING IN COLUMN 1 OF EVERY IDENTIFIED LINE * /* TO BE PROCESSED. DATA IS SHIFTED RIGHT (CREATING * /* TRUNCATION IF NECESSARY) BY THE NUMBER OF BYTES IN * /* THE INPUT STRING. * /********************************************************************** ISREDIT MACRO (STRING,VAR1,VAR2,VAR3,VAR4,VAR5,VAR6,VAR7,VAR8,VAR9) ISPEXEC CONTROL ERRORS RETURN ISPEXEC VGET (DBGSWTCH) PROFILE IF &DBGSWTCH = &STR(ON) THEN + CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ASIS ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS ISREDIT (SLN,SCL) = CURSOR IF &STR(&SYSNSUB(1,&STRING)) = HELP THEN GOTO HELPSEC DO &X = 1 TO 9 SET VARIABLES = &SYSCAPS(&STR(&VARIABLES &&VAR&X)) END IF &STR(&VARIABLES) = THEN + DO %YOUSURE COLUMN(10) ROW(5) ZWINTTL('PROCESS ALL LINES?!') IF &LASTCC > 0 THEN + DO SET ZEDLMSG = &STR(*** NO "INFRONT" PROCESSING + PERFORMED ***) ISPEXEC SETMSG MSG(UTLZ001) EXIT END END IF (&SUBSTR(1:1,&STR(&SYSNSUB(1,&STRING))) = &STR(') AND + &SUBSTR(&LENGTH(&STR(&SYSNSUB(1,&STRING))):+ &LENGTH(&STR(&SYSNSUB(1,&STRING))),+ &STR(&SYSNSUB(1,&STRING))) = &STR(')) OR + (&SUBSTR(1:1,&STR(&SYSNSUB(1,&STRING))) = &STR(") AND + &SUBSTR(&LENGTH(&STR(&SYSNSUB(1,&STRING))):+ &LENGTH(&STR(&SYSNSUB(1,&STRING))),+ &STR(&SYSNSUB(1,&STRING))) = &STR(")) THEN + SET STRING = + &SUBSTR(2:&EVAL(&LENGTH(&STR(&SYSNSUB(1,&STRING))) - 1),+ &STR(&SYSNSUB(1,&STRING))) IF &SYSINDEX(&STR('),&STR(&SYSNSUB(1,&STRING))) > 0 AND + &SYSINDEX(&STR("),&STR(&SYSNSUB(1,&STRING))) > 0 THEN + DO SET ZEDLMSG = &STR(*** "INFRONT" CANNOT PROCESS + STRINGS WITH BOTH SINGLE AND + DOUBLE QOUTES ***) ISPEXEC SETMSG MSG(UTLZ001) EXIT CODE(8) END SET ZEDLMSG = &STR(PLACING "&STRING" IN FRONT OF LINES W/CRITERIA + "&VARIABLES") ISPEXEC CONTROL DISPLAY LOCK ISPEXEC DISPLAY MSG(UTLZ000W) SET QT = &STR(') IF &SYSINDEX(&STR('),&STR(&SYSNSUB(1,&STRING))) > 0 THEN + SET QT = &STR(") SET SLEN = &LENGTH(&STR(&SYSNSUB(1,&STRING))) DO &I = 1 TO &SLEN SET EQUALS = &STR(&EQUALS=) END ISREDIT (SLN,SCL) = CURSOR ISREDIT FIND FIRST P'=' 1 &VARIABLES DO WHILE &LASTCC = 0 ISREDIT SHIFT ) .ZCSR &SLEN ISREDIT CHANGE FIRST P'&STR(&EQUALS)' + '&STR(&SYSNSUB(1,&STRING))' 1 .ZCSR .ZCSR SET GOOD = &GOOD + 1 ISREDIT FIND LAST P'=' .ZCSR .ZCSR ISREDIT FIND NEXT P'=' 1 &VARIABLES END SET ZEDLMSG = &STR(*** PROCESSED &GOOD LINES ***) ISPEXEC SETMSG MSG(UTLZ000) ISREDIT CURSOR = &SLN &SCL EXIT HELPSEC: + 02480000 ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL) 02490000 SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR INFRONT UTILITY + 02490000 *** NO PROCESSING PERFORMED ***) 02490000 ISPEXEC SETMSG MSG(UTLZ000) 02490000 EXIT
Documentation
INFRONT is an edit macro which places a string in column 1 of every selected line and shifts the data (allowing truncation on the right if necessary) to the right by the amount of the length of the specified string. Lines are selected for processing by specifying such things as "X" or "NX" to indicate an excluded status of lines and/or edit labels to indicate a range of lines. Specifying nothing will cause ALL lines in the file to be processed. If no parameter is specified, you will be prompted to make sure you really want to process all lines in the file. EXAMPLES: Place string "abc" in front of all excluded lines. "before" processing: x00017 11111111 000018 22222222 0x0019 33333333 000020 44444444 00x021 55555555 COMMAND ===> infront 'abc' x "after" processing: 000017 abc11111111 000018 22222222 000019 abc33333333 000020 44444444 000021 abc55555555 Place string "abc" in front of all excluded lines in label range .a .b "before" processing: x00017 11111111 .a0018 22222222 0x0019 33333333 .b0020 44444444 00x021 55555555 COMMAND ===> infront 'abc' x "after" processing: 000017 11111111 .A 22222222 000019 abc33333333 .B 44444444 000021 55555555