/* REXX * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* SRCHLIST - Create Option 3.14 Search Results Member List */ /* */ /* Author - Jim Narramore */ /* jim.narramore@bankofamerica.com */ /* narramor@swbell.net */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ Arg parm sysicmd = sysvar('SYSICMD') x = outtrap('DUMMY',1) "ISPEXEC CONTROL ERRORS RETURN" "ISREDIT MACRO" If rc <> 0 Then Signal notmacro "ISPEXEC VGET SRCHPARM SHARED" "ISPEXEC VERASE SRCHPARM SHARED" If word(srchparm,1) = "INIT" Then Signal initprof If srchparm <> "" Then Signal showfound /* SRCHRPT * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* "Report-scrape" Search-For Report to obtain date and time */ /* search was run, statistics generated by search and members in */ /* which search string(s) were found. */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ srchrpt: "ISREDIT (LINE1) = LINE .ZF" If rc <> 0 Then Signal badparm Parse Var line1 . . . . . . . . . . rptdate rpttime . rpttime = translate(rpttime,':','.') If length(rptdate) <> 10 Then Signal badparm "ISREDIT SEEK 'SRCH DSN:' 45 FIRST" If rc <> 0 Then Exit "ISREDIT SEEK ' CONCAT#(' 9 FIRST" If rc = 0 Then Exit "ISREDIT (CURLINE) = LINE .ZCSR" libname = word(curline,6) "ISREDIT SEEK 'LINES-FOUND LINES-PROC' 2 FIRST" If rc <> 0 Then Exit "ISREDIT (HDGLINE) = LINE .ZCSR" hdgline = "Lines!found Lines!processed Members!with!lines", "Members!without!lines" "ISREDIT SEEK p'=' 1 NEXT" "ISREDIT (CNTLINE) = LINE .ZCSR" cntlm = "" Do w = 1 to 4 curhdg = left(word(hdgline,w)":",22) curcnt = right(word(cntline,w),8) cntlm = cntlm""left(curhdg curcnt,80) End If rc <> 0 Then Exit /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Build member selection list from member names found in report */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ "ISREDIT SEEK '- STRING(S) FOUND -' 39 FIRST" If rc <> 0 Then Exit "ISREDIT (CURLINE) = LINE .ZCSR" curmem = word(curline,1) "ISPEXEC LMINIT DATAID(LIBID) DATASET('"libname"')", "ENQ(SHRW) ORG(LIBORG)" "ISPEXEC LMOPEN DATAID("libid") OPTION(INPUT) LRECL(LIBRECL)", "RECFM(LIBRECFM) ORG(LIBORG)" If rc <> 0 Then Exit zlmpd = "_" "ISPEXEC VPUT ZLMPD PROFILE" "ISPEXEC CONTROL NONDISPL END" "ISPEXEC LMMDISP DATAID("libid") OPTION(DISPLAY) MEMBER("curmem")", "STATS(YES) COMMANDS(ANY) FIELD(1)" "ISREDIT SEEK '- STRING(S) FOUND -' 39 NEXT" Do While rc = 0 "ISREDIT (CURLINE) = LINE .ZCSR" curmem = word(curline,1) "ISPEXEC LMMDISP DATAID("libid") OPTION(ADD) MEMBER("curmem")" "ISREDIT SEEK '- STRING(S) FOUND -' 39 NEXT" End zerrlm = left(libname "Search Results",80), left('04'x ' as of' rptdate rpttime,80), translate(cntlm,' ','!') zerrsm = "" zerrhm = "*" zerralrm = "NO" "ISPEXEC SETMSG MSG(ISRZ002)" lastlcmd = "E" /* DISPLAY * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Display member selection list until 'END' or 'RETURN' requested */ /* Primary commands: */ /* '?' - View original Search-For report. */ /* Member line commands: */ /* 'S' - Edit, excluding all lines but those with found strings */ /* 'E' - Edit */ /* 'V' - View */ /* 'E' - Browse */ /* '=' - Execute last line command specified */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ display: "ISPEXEC LMMDISP DATAID("libid") OPTION(DISPLAY)" If rc > 0 Then Signal endit Do While rc = 0 zlmember = strip(zlmember) If zcmd = "?" Then Call showrpt zcmd = "" If pos(zllcmd,"SBEV=") = 0 Then Signal display "ISPEXEC VERASE SRCHPARM SHARED" edmacro = "" If zllcmd = "=" Then zllcmd = lastlcmd If zllcmd = "B" Then service = "BROWSE" If zllcmd = "E" Then service = "EDIT" If zllcmd = "V" Then service = "VIEW" If zllcmd = "S" Then Do service = "EDIT" edmacro = "MACRO("sysicmd")" srchparm = getlist(zlmember) fndcnt = words(lnumlist) zerrsm = fndcnt "Lines Found" zerrlm = fndcnt "lines were found in", libname"("zlmember") that meet the", "search criteria specified for the", "Search-For Utility on "rptdate" at "rpttime"." zerrhm = "*" zerralrm = "NO" "ISPEXEC SETMSG MSG(ISRZ002)" "ISPEXEC VPUT SRCHPARM SHARED" End lastlcmd = zllcmd "ISPEXEC LMINIT DATAID(EDITID) DATASET('"libname"')", "ENQ(SHRW) ORG(LIBORG)" "ISPEXEC "service" DATAID("editid") MEMBER("zlmember")" edmacro "ISPEXEC LMFREE DATAID("editid")" "ISPEXEC LMMDISP DATAID("libid") OPTION(GET)" End Signal display /* SHOWRPT * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Display original Search-For report under VIEW */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ showrpt: "ISREDIT (DATASET) = DATASET" "ISPEXEC LMINIT DATAID(RPTID) DATASET('"dataset"') ENQ(SHR)" "ISPEXEC VIEW DATAID("rptid") MACRO(RESET)" "ISPEXEC LMFREE DATAID("rptid")" Return /* GETLIST * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Return list of line numbers containing string(s) searched for */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ getlist: Arg curmem lnumlist = "" "ISREDIT SEEK ' "curmem" ' 2 FIRST" If rc <> 0 Then Return lnumlist Address isredit "SEEK P'=' 1 NEXT" "LABEL .ZCSR = .LISTF" "LABEL .ZL = .LISTL" "SEEK '- STRING(S) FOUND -' 39 NEXT" If rc = 0 Then Do "SEEK P'=' 1 PREV" "SEEK P'=' 1 PREV" "LABEL .ZCSR = .LISTL" End "SEEK p'# ' 8 FIRST .LISTF .LISTL" Do While rc = 0 "(CURLINE) = LINE .ZCSR" curlnum = word(curline,1) lnumlist = lnumlist curlnum "SEEK p'# ' 8 NEXT .LISTF .LISTL" End Address tso Return lnumlist /* SHOWFOUND * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Exclude from display all lines in Edit session except those */ /* line numbers returned by the GETLIST function */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ showfound: "ISREDIT RESET" "ISREDIT EXCLUDE ALL .ZF .ZL" Do f = 1 to words(srchparm) curnum = word(srchparm,f) If datatype(curnum) <> 'NUM' Then Signal badparm "ISREDIT RESET EXCLUDED" curnum curnum End "ISREDIT SEEK p'=' NX FIRST" "ISREDIT CURSOR = .ZCSR 0" Exit 1 /* NOTMACRO * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Allow user to turn SRCHLIST feature ON or OFF plus specify */ /* a target LLQ other than '@', if desired */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ notmacro: If parm = "" Then parm = "ON" If words(parm) > 2 Then Signal badparm llq = "@" switch = "ON" Do p = 1 to words(parm) curparm = word(parm,p) If length(curparm) > 8 Then Signal badparm If curparm = "ON" Then switch = "ON" Else If curparm = "OFF" Then switch = "OFF" Else llq = curparm End tmpdd = "@@@"time('S') syspref = sysvar("SYSPREF") If syspref = '' Then syspref = userid() tmpdsn = syspref"."tmpdd"."llq "DELETE '"tmpdsn"'" "ALLOC F("tmpdd") DA('"tmpdsn"') NEW DELETE REUSE", "SPACE(1) TRACKS RECFM(F B) LRECL(133) BLKSIZE(1330) DSORG(PS)" If rc <> 0 Then Signal badparm "ISPEXEC LMINIT DATAID(TEMPID) DDNAME("tmpdd") ENQ(SHRW)" srchparm = "INIT" switch "ISPEXEC VPUT SRCHPARM SHARED" "ISPEXEC EDIT DATAID("tempid") MACRO("sysicmd")" "ISPEXEC VERASE SRCHPARM SHARED" "ISPEXEC LMFREE DATAID("tempid")" "FREE F("tmpdd")" swdisp = "now" If switch = "OFF" Then swdisp = "no longer" zerrlm = "The Search-For Utility (ISPF 3.14) will "swdisp, "display a member selection list of search results whenever", "the Low Level Qualifier (LLQ) of the Listing Data Set", "name specified is '"llq"'" zerralrm = "YES" zerrhm = "*" zerrsm = "" "ISPEXEC SETMSG MSG(ISRZ002)" Exit /* INITPROF * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Force initial edit macro for target LLQ to 'SRCHLIST' if 'ON' */ /* is requested, otherwise set initial edit macro to 'NONE' */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ initprof: imacro = sysicmd If word(srchparm,2) = "OFF" Then imacro = "NONE" "ISREDIT PROFILE UNLOCK" "ISREDIT IMACRO = "imacro "ISREDIT PROFILE LOCK" "ISREDIT CANCEL" Exit /* BADPARM * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Format variables for ISRZ002 message and display to user */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ badparm: zerrlm = "'"parm"' is an invalid parm for "sysicmd, copies(' ',80), "Valid "sysicmd" parms are:", copies(' ',80), "ON or OFF - turn the facility ON or OFF", copies(' ',80), "llq - valid dataset name low level qualifier for", "Listing Data Set" zerralrm = "YES" zerrhm = "*" zerrsm = "" "ISPEXEC SETMSG MSG(ISRZ002)" Exit /* ENDIT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Terminate Search-For report data id and Cancel Edit session */ /* of Search-For report */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ endit: "ISPEXEC LMCLOSE DATAID("libid")" "ISPEXEC LMFREE DATAID("libid")" "ISREDIT CANCEL" Exit