HP3000-L Archives

April 1997, Week 4

HP3000-L@RAVEN.UTC.EDU

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
James Wilkinson <[log in to unmask]>
Reply To:
James Wilkinson <[log in to unmask]>
Date:
Thu, 24 Apr 1997 23:17:41 -0400
Content-Type:
text/plain
Parts/Attachments:
text/plain (160 lines)
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

ATOM RSS1 RSS2