PARM STRING1, AUTOABORT='NOABORT',EOF="NEW",RESET="RESET", & SEARCHPARMS="", ENTRY_POINT = "MAIN" # JOBSRCH - allows a job to search itself. # James Wilkinson - from the November 1991 "Interact" Magazine # NOTE: Requires MPEX! # # A brief summary of sytax: # # JOBSRCH "search string",[ABORT],[SAME|ALL],[NORESET],[searchparms] # # search string - any string you specify. Use the syntax of the SEARCH # option of the MPEX PRINT command. i.e. "*W*", '"*E*" and "Data access"' # # Use ~filename instead of the search string to search for all the strings # in the referenced file. # # ABORT - specify this to automatically abort the job if the string is found # # SAME,ALL - by default JOBSRCH searches from the beginning of the $STDLIST # or from the last JOBSRCH statement. Use SAME to search the same lines as # the previous JOBSRCH statement. Use ALL to force a search from the # beginning. # # NORESET - JOBSRCH sets the variable FOUND to the number of occurrences of # the string. Use NORESET to make FOUND cumulative instead of resetting it. # There is also the variable FOUNDALL which is automatically cumulative. # # searchparms - specify any options of the ;SEARCH paramater # of the MPEX PRINT command. # # Use JOBSRCH ~ABORT to kill the job # In a job it essentially works like this: # # !(program runs) # !JOBSRCH "ERROR STRING" # !IF FOUND > 0 # ! TELLOP Job is aborting due to error! # ! JOBSRCH ~ABORT (or !EOF) # !ENDIF IF "!ENTRY_POINT" = "MAIN" IF BOUND(STARTSPOOLREC) = FALSE SETVAR STARTSPOOLREC 1 SETVAR FOUNDALL 0 ENDIF IF LFT('!STRING1',1) <> '"' AND ![POS('(','!STRING1')] = 0 SETVAR STRING2 '"!STRING1"' ELSE SETVAR STRING2 '!STRING1' ENDIF SETJCW CIERROR 0 MPEX.PUB.VESOFT;PARM=1; INFO= & "JOBSRCH ' ',!AUTOABORT,!EOF,!RESET,!SEARCHPARMS,'NOT MAIN'" IF CIERROR <> 0 ECHO JOBSRCH Error: Command failed; FOUND automatically set at 0 SETVAR FOUND 0 ENDIF IF ups('!STRING2') = '"~ABORT"' ECHO ECHO ********************************************************** ECHO **** JOBSRCH - Job string search utility **** ECHO ********************************************************** ECHO **** JOB ABORTED ON REQUEST **** ECHO ********************************************************** ECHO IF !HPUSERCMDEPTH = 1 ESCAPE ELSE RUN CI.PUB.SYS;INFO="SETJCW JCW FATAL" >$NULL ENDIF IF "!ERRFILE" = "$NULL" ECHO JOBSRCH Error: file not found. ENDIF ENDIF ELSE SETVAR PRELIM_FOUND 0 IF ups('!STRING2') <> '"~ABORT"' SETVAR DFID VEJOBINFO("#J!HPJOBNUM").OUTSPOOLFILENUM SETVAR SPOOLEOF VEFINFO("O!DFID.OUT.HPSPOOL").EOF IF LFT('!STRING2',2) = '"~' IF FEXISTS("![STR(!STRING2,2,26)]") SETVAR ERRFILE STR(!STRING2,2,26) + ",OLD" ELSE SETVAR ERRFILE "$NULL" ENDIF ELSE ECHO !STRING2 >TEMPERR SETVAR ERRFILE "TEMPERR,OLDTEMP" ENDIF IF ups("!EOF") = "NEW" SETVAR START_REC STARTSPOOLREC SETVAR LAST_START STARTSPOOLREC ELSEIF ups("!EOF") = "ALL" SETVAR START_REC 1 ELSEIF ups("!EOF") = "SAME" SETVAR START_REC LAST_START ENDIF NOMSG :PURGE TEMPFILE,TEMP SETJCW CIERROR 0 PRINT O!DFID.OUT.HPSPOOL; START=!START_REC; & SEARCH=NOT cl "JOBSRCH ";OUT=(TEMPFILE,NEW;TEMP;DISC=10000) REPEAT SETVAR STRING2 STRRTRIM('!CURRENTREC'[0:72]) CONTINUE PRINT TEMPFILE;SEARCH=!SEARCHPARMS !STRING2;OUT=$NULL IF CIERROR <> 0 SETJCW CIERROR 0 PRINT TEMPFILE;SEARCH=!STRING2;OUT=$NULL ENDIF SETVAR FOUNDALL FOUNDALL + MPEXPRINTLINESFOUND SETVAR PRELIM_FOUND PRELIM_FOUND + MPEXPRINTLINESFOUND FORRECS CURRENTREC=!ERRFILE SETVAR STARTSPOOLREC SPOOLEOF + 1 ENDIF IF PRELIM_FOUND > 0 AND "!AUTOABORT" = "ABORT" SETVAR STRING2 '"~ABORT"' ELSE IF ups("!RESET") = "RESET" SETVAR FOUND PRELIM_FOUND ELSE SETVAR FOUND FOUND + PRELIM_FOUND ENDIF ENDIF ENDIF