Return to Mainframe Utilities Page
Module
ISREDIT MACRO (STRING1,BOOLEAN,STRING2,OPTION)
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
/******************************************************************/
/* 'MARK' EDIT MACRO. MARK A LINE WHICH MEETS THE INPUT CRITERIA. */
/* AUTHOR : DAVID LEIGH DATE : 1-10-89 */
/******************************************************************/
SET MARK = &STR($MARK$)
IF &LENGTH(&STR(&BOOLEAN)) = 0 THEN +
IF &STR(&STRING1) = &STR(HELP) THEN GOTO HELPSEC
ELSE +
DO
SET ZEDSMSG = &STR(BOOLEAN MISSING)
SET ZEDLMSG = &STR(SPECIFY 1 OR 2 STRINGS WITH A BOOLEAN) +
&STR(OPERATOR - INVOKE W/'HELP' FOR HELP)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT CODE(4)
END
ELSE +
IF &STR(&BOOLEAN) ¬= &STR(AND) AND +
&STR(&BOOLEAN) ¬= &STR(OR) AND +
&STR(&BOOLEAN) ¬= &STR(NOR) AND +
&STR(&BOOLEAN) ¬= &STR(NOT) THEN +
DO
SET ZEDSMSG = &STR(BOOLEAN INVALID)
SET ZEDLMSG = &STR(VALID BOOLEANS ARE : 'AND' 'OR' 'NOR') +
&STR('NOT' - INVOKE WITH 'HELP' FOR MORE HELP)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT CODE(4)
END
SET SLEN1 = &LENGTH(&STR(&STRING1))
SET SLEN2 = &LENGTH(&STR(&STRING2))
IF &SUBSTR(1:1,&STR(&STRING1)) = &STR(') AND +
&SUBSTR(&SLEN1:&SLEN1,&STR(&STRING1)) = &STR(') THEN +
DO
SET SLEN1 = &SLEN1 - 1
IF &SLEN1 > 1 THEN SET STRING1 = &SUBSTR(2:&SLEN1,&STR(&STRING1)
END
IF &SUBSTR(1:1,&STR(&STRING2)) = &STR(') AND +
&SUBSTR(&SLEN2:&SLEN2,&STR(&STRING2)) = &STR(') THEN +
DO
SET SLEN2 = &SLEN2 - 1
IF &SLEN2 > 1 THEN SET STRING2 = &SUBSTR(2:&SLEN2,&STR(&STRING2)
END
ISREDIT (SLINE,SCOL) = CURSOR
SET COUNT = 0
ISREDIT CURSOR = 1 0
ISREDIT (TLINE) = LINE .ZCSR
SET MAXCC = 0
IF &OPTION = &STR(END) THEN +
DO
ISREDIT (RECLEN) = LRECL
SET MRKPOS = &RECLEN - 5
SET LINLEN = &MRKPOS - 1
END
DO WHILE &MAXCC = 0
IF &BOOLEAN = &STR(AND) THEN +
DO
IF &SYSINDEX(&STR(&STRING1),&NRSTR(&TLINE)) > 0 AND +
&SYSINDEX(&STR(&STRING2),&NRSTR(&TLINE)) > 0 THEN +
DO
IF &OPTION = &STR(OVERLAY) THEN +
DO
SET A = &LENGTH(&STR(&MARK))
SET B = &A + 1
SET C = &LENGTH(&NRSTR(&TLINE))
SET TLINE = &STR(&MARK)+
&SUBSTR(&B:&C,&NRSTR(&TLINE))
END
ELSE +
IF &OPTION = &STR(END) THEN SET TLINE = +
&SUBSTR(1:&LINLEN,&NRSTR(&TLINE))&STR(&MARK)
ELSE +
SET TLINE = &NRSTR(&MARK&TLINE)
ISREDIT LINE .ZCSR = '&TLINE'
SET COUNT = &COUNT + 1
END
END
IF &BOOLEAN = &STR(OR) THEN +
DO
IF &SYSINDEX(&STR(&STRING1),&NRSTR(&TLINE)) > 0 OR +
&SYSINDEX(&STR(&STRING2),&NRSTR(&TLINE)) > 0 THEN +
DO
IF &OPTION = &STR(OVERLAY) THEN +
DO
SET A = &LENGTH(&STR(&MARK))
SET B = &A + 1
SET C = &LENGTH(&NRSTR(&TLINE))
SET TLINE = &STR(&MARK)+
&SUBSTR(&B:&C,&NRSTR(&TLINE))
END
ELSE +
IF &OPTION = &STR(END) THEN SET TLINE = +
&SUBSTR(1:&LINLEN,&NRSTR(&TLINE))&STR(&MARK)
ELSE +
SET TLINE = &NRSTR(&MARK&TLINE)
ISREDIT LINE .ZCSR = '&TLINE'
SET COUNT = &COUNT + 1
END
END
IF &BOOLEAN = &STR(NOR) THEN +
DO
IF &SYSINDEX(&STR(&STRING1),&NRSTR(&TLINE)) = 0 AND +
&SYSINDEX(&STR(&STRING2),&NRSTR(&TLINE)) = 0 THEN +
DO
IF &OPTION = &STR(OVERLAY) THEN +
DO
SET A = &LENGTH(&STR(&MARK))
SET B = &A + 1
SET C = &LENGTH(&NRSTR(&TLINE))
SET TLINE = &STR(&MARK)+
&SUBSTR(&B:&C,&NRSTR(&TLINE))
END
ELSE +
IF &OPTION = &STR(END) THEN SET TLINE = +
&SUBSTR(1:&LINLEN,&NRSTR(&TLINE))&STR(&MARK)
ELSE +
SET TLINE = &NRSTR(&MARK&TLINE)
ISREDIT LINE .ZCSR = '&TLINE'
SET COUNT = &COUNT + 1
END
END
IF &BOOLEAN = &STR(NOT) THEN +
DO
IF &SYSINDEX(&STR(&STRING1),&NRSTR(&TLINE)) > 0 AND +
&SYSINDEX(&STR(&STRING2),&NRSTR(&TLINE)) = 0 THEN +
DO
IF &OPTION = &STR(OVERLAY) THEN +
DO
SET A = &LENGTH(&STR(&MARK))
SET B = &A + 1
SET C = &LENGTH(&NRSTR(&TLINE))
SET TLINE = &STR(&MARK)+
&SUBSTR(&B:&C,&NRSTR(&TLINE))
END
ELSE +
IF &OPTION = &STR(END) THEN SET TLINE = +
&SUBSTR(1:&LINLEN,&NRSTR(&TLINE))&STR(&MARK)
ELSE +
SET TLINE = &NRSTR(&MARK&TLINE)
ISREDIT LINE .ZCSR = '&TLINE'
SET COUNT = &COUNT + 1
END
END
ISREDIT (LN,CL) = CURSOR
SET LN = &LN + 1
SET MAXCC = 0
ISREDIT CURSOR = &LN 0
ISREDIT (TLINE) = LINE .ZCSR
END
ISREDIT CURSOR = &SLINE &SCOL
SET ZEDSMSG = &STR(&COUNT LINES MARKED)
IF &OPTION = &STR(END) THEN +
SET ZEDLMSG = &STR(THE MARKED LINES ARE SUFFIXED WITH '&MARK')
ELSE +
SET ZEDLMSG = &STR(THE MARKED LINES ARE PREFIXED WITH '&MARK')
ISPEXEC SETMSG MSG(UTLZ000)
EXIT
HELPSEC: +
CLEAR
WRITE *** HELP FOR EDIT MACRO 'MARK' ***
WRITE
WRITE THE 'MARK' EDIT MACRO PREFIXES DATALINES IN A FILE WITH THE
WRITE STRING '&MARK' IF THE DATALINE MEETS THE CRITERIA PASSED BY THE
WRITE USER. THE CRITERIA CONSISTS OF TWO STRINGS AND A BOOLEAN OPERATOR
WRITE TO TELL THE MACRO WHAT TYPE OF STRING SEARCHES TO MAKE.
WRITE
WRITE BASIC SYNTAX :
WRITE
WRITE COMMAND ===> MARK STRING1 ___ STRING2
WRITE
WRITE WHERE '___' IS ONE OF THE FOLLOWING BOOLEAN SUBSET :
WRITE
WRITE 'AND' 'OR' 'NOR' 'NOT'
WRITE
WRITE 'AND' SAYS 'MARK THE LINES WHERE BOTH STRING1 AND STRING2 EXIST'.
WRITE
WRITE 'OR' SAYS 'MARK THE LINES WHERE EITHER STRING1 OR STRING2 EXIST'.
WRITE
WRITE 'NOR' SAYS 'MARK THE LINES WHERE NEITHER STRING1 NOR STRING2 EXIST'.
WRITE
WRITE 'NOT' SAYS 'MARK THE LINES WHERE STRING1 EXISTS AND STRING2 DOES NOT'.
WRITE
WRITE
WRITE SPECIAL NOTES : 'MARK' DOES NOT TAKE INTO ACCOUNT THE 'EXCLUDED'
WRITE STATUS OF A GIVEN LINE, AND DOES NOT AFFECT THE
WRITE EXCLUDED STATUS OF A GIVEN LINE.
WRITE
WRITE IF 'END' IS SPECIFIED AS A 4TH PARAMETER, THEN
WRITE THE MARK STRING (&MARK) WILL OVERLAY THE RIGHT
WRITE MOST CHARACTERS OF THE LINE. (LINE IS "SUFFIXED")
WRITE
WRITE IF 'OVERLAY' IS SPECIFIED AS A 4TH PARAMETER, THEN
WRITE THE MARK STRING (&MARK) WILL OVERLAY THE LEFT MOST
WRITE CHARACTERS OF THE LINE. IF IT IS NOT SPECIFIED
WRITE THEN THE TEXT WILL BE RIGHT SHIFTED BY THE NUMBER
WRITE OF CHARACTERS IN THE MARK STRING. THIS MEANS THAT
WRITE THE RIGHT MOST CHARACTERS ON THE LINE WILL BE LOST
WRITE IN THE SHIFT.
WRITE
WRITE SYNTAX WOULD BE :
WRITE
WRITE COMMAND ===> MARK STRING1 ___ STRING2 OVERLAY
WRITE
WRITE *** END OF HELP *** NO PROCESSING PERFORMED ***
EXIT
Documentation
This utility will mark lines in a file with the string "$MARK$" in columns 1-6
if the lines contain any of the following :
string1 AND string2
string1 OR string2
neither string1 NOR string2
string1 and NOT string2
The default is for the line to be right shifted 6 positions (truncating any
data in the right 6 columns, but you can specify OVERLAY when invoking and then
the data in columns 1-6 will be overlayed with "$MARK$". Syntax is as follows:
Command ===> mark abcdef xxx ghijk {overlay}
where 'xxx' is AND, OR, NOR or NOT

0 Comments