In the November 1991 Interact I published a command file, JOBSRCH, that allows
a
job to search itself. This is especially useful with PowerHouse, which often
reports
errors but sets no JCWs for anything short of a total blow up. For situations
where
you can't depend on a JCW, variable, or file attribute JOBSRCH works great.
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
I originally put in logic to update a file in PUB.SYS with job information.
This was used with a separate command file, JOBCHECK, which allowed jobs to
check the
completion status of other jobs. Over the years, though, much better tools
have been developed for checking job statuses. JOBSRCH is still great for
checking
within a job and allowing for conditional step execution.
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 blow up the job
The code:
PARM STRING1, AUTOABORT='NOABORT',EOF="NEW",RESET="RESET", &
SEARCHPARMS="", ENTRY_POINT = "MAIN"
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
|