HPlogo Communicator 3000 MPE/iX Express 1 Based on Release 6.0: HP 3000 MPE/iX Computer Systems > Chapter 3 Technical Articles

CI Enhancements

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

by Jeff Vance, Commercial Systems Division

Enhancements Summary

MPE/iX Release 6.0 Express 1 contains the following CI enhancements:

  • There are three new CI evaluator functions - JINFO, JOBCNT and WORDCNT.

  • There are five new CI variables - HPDATETIME, HPDOY, HPHHMMSSMMM, HPLEAPYEAR, HPYYYYMMDD.

  • The PAUSE command allows you to select just jobs or just sessions that match "[jobname,]user.account".

  • The QUOTE function, introduced late in release 5.5, has been officially removed. It was un-documented in the 6.0 base release and the function has been deleted in 6.0 Express 1. QUOTE was removed because it did not provide useful functionality, and is easy to duplicate using the existing REPL function.

  • The DELIMPOS function returns the position (index) of one or more specified delimiters. A defect in DELIMPOS was corrected which could impact some existing CI scripts. Prior to 6.0 express 1, DELIMPOS treated each space in the string as a separate delimiter -- in other words, there was no 'folding' of spaces. In 6.0 express 1, DELIMPOS treats multiple spaces as a single delimiter, just as the WORD function does. In fact, DELIMPOS is consistent with WORD's "endvar" parameter for all cases, except when the string has no matching delimiter. In this situation DELIMPOS returns 0, meaning there was no match; whereas, WORD returns string length plus one.

JINFO

Syntax: JINFO ( jobID, item [,status] )

jobID

Required. String identifying the target job or session that information is being requested for. Format is "[#]J|Snnn", or "0", indicating the current job or session.

item

Required. String label specifying the information requested for the target job or session. Only one item can be requested per call to JINFO, although some of the items below return multiple pieces of information.

status

Optional. An unquoted CI variable name to hold the integer status value for JINFO. If passed, the variable named by this argument contains the status of the call to jinfo: zero indicates success, non-zero indicates a failure. When 'status' is passed and an error occurs, the CI ignores the error. Specifically, no message is written to $STDLIST or to $STDERR, and the CIERROR variable is not set. The JINFO function return is always -1 when 'status' is specified and a JINFO error occurs. If this argument is omitted and an error in JINFO occurs, a CI error message is written to $STDLIST (within the definition of the HPMSGFENCE variable).

status values: 
     0 - success 
  3042 - no job or session matches the jobID 
  4000 - invalid syntax for the jobID, expect [#]J|Snnn 
  9942 - unknown JINFO item 
  9945 - information for the requested item is unavailable for the          target jobID. 
  9946 - item security violation, the user needs greater          privileges to retrieve the item
Example:      :calc JINFO('S64','IPaddr') 
Result:       15.192.90.81 
Example:      :calc JINFO('J144','FmtPriority',status) 
Result:       DQ 
Example:      setvar _state JINFO(hplastjob,'jobstate',status) 
              while status = 0 and _state = 'WAIT' do 
                 pause 20 
                 ... 
                 setvar _state JINFO(hplastjob,'jobstate',status) 
              endwhile 
Example:      if jobcnt('@J:@r.sys',jlist) > 0 then 
                 setvar i 0 
                 setvar total_cpu 0 
                 while setvar(_job, word(jlist,,setvar(i,i+1))) <> '' do 
                    if JINFO(_job,'exists') then 
                       setvar total_cpu total_cpu + JINFO(_job,'CPUsec') 
                    endif 
                 endwhile 
              endif

Restrictions

Not all items listed below are available to jobs that are waiting or scheduled. For example, JINFO is unable to return the CI PIN ('CIpin') if the job is waiting; however, some items, like the job state and job queue, are returned, regardless of the state of the target job. When a JINFO item cannot be obtained CIERR 9945 is reported. If the 'status' argument is passed, it is set to 9945 and no CI error is displayed.

No special capabilities are required to get any info about your own job/session. Users with OP or SM capability can get all items for any job/session, and may also retrieve the global items available via JINFO.

For users lacking OP or SM capability:

  • To access restricted data for a job logged on in the same "user.acct", AM capability is required, unless JOBSECURITY is set to LOW. If JOBSECURITY is LOW, JINFO considers the job as if it is "you".

  • To access restricted data for a job logged on in your account but as a different user, AM capability is required, independent of the JOBSECURITY setting.

Some items have additional restrictions:

  • 'command', any token in the command image that could be considered a lockword is deleted.

JINFO Item Values and Descriptions

Label                  Type    Description 
--------------------   ------  -----------------------------------------------Account                string  account name. 
CIpin                  int     * PIN number for the job's usermain process,                                  typically the CI. 
Command                string  * command most recently executed (lockwords are                                  removed).
ConnectMin             int     number of minutes connected. 
ConnectSec             int     number of seconds connected. 
Copies                 int     number of copies for $STDLIST output. 
CPULimit               int     CPU limit in seconds, -1 is unlimited. 
CPUMillisec            int     number of milliseconds of CPU. 
CPUSec                 int     number of seconds of CPU. 
Deferred               bool    True if job's inpri is <= the jobfence. 
DegradeMode            bool    ** True if system is running in degraded mode,                                   meaning no new jobs are allowed to log on                                   until disk space is recovered. 
Exist                  bool    True if the target job exists in any state. 
Exists                 bool    See 'Exist'. 
FmtIntroDate           string  formatted date job was introduced, eg. 
                               "WED, JUL 14, 1999". 
FmtIntroTime           string  formatted time job was introduced, eg. "6:21 PM". FmtPriority            string  current scheduling queue for the usermain (CI)                                process, e.g. 'BS', 'CS', 'DS', 'ES'. FmtStreamedByDate      string  formatted date when job/session was submitted. FmtStreamedByTime      string  formatted time when job/session was submitted. 
Group                  string  logon group name. 
HomeGroup              string  * home group name. 
Inpri                  int     input priority. 
IntIntroDate           int     date job was introduced as a YYYYMMDD integer. IntIntroTime           int     time job was introduced as a HHMMSS integer. 
IntroDate              int     See "IntIntroDate".
IntroTime              int     See "IntIntroTime".
IntStreamedByDate      int     date job/session was submitted as a YYYMMDD                                integer. 
IntStreamedByTime      int     time job/session was submitted as a HHMMSS                                integer. 
IPAddr                 string  * IP address in dotted format (xx.xx.xx.xx), 
                                 "" for jobs and local sessions. 
Job User Account       string  "[jname,]user.acct" names concatenated. 
Job User Account Group string  "[jname,]user.acct,group" names concatenated. 
JobName                string   jobname if supplied, else "". 
JobNum                 string   unique job identifier, "#J|Snnn". 
JobQ                   string   job queue name, "" for sessions 
JobSecurity            bool     ** 'LOW' or 'HIGH' depending on the JOBSECURITY                                    setting. 
JobState               string   "INTRO", "SCHED", "WAIT", "EXEC*", "EXEC", "SUSP". JobType                string   "J" for jobs and "S" for sessions. 
JobUserAccount         string   see "Job User Account".. 
JobUserAccountGroup    string   see "Job User Account Group" 
JSMAINPin              int      * PIN number for the job's JSMAIN process. 
LdevIn                 int      Input LDEV number for $STDIN. 
LdevOut                int      Output LDEV number for $STDLIST, 0 for spooled 
                                  jobs. 
LocAttr                int      * user local attributes. 
Numbered               bool     True is job file is numbered. 
Outclass               string   Outclass name for a job's STDLIST, e.g. "LP".                                 Empty ("") for sessions. 
Outpri                 int      output priority. 
PassExempt             string   ** The system's password exemption policy for                                    jobs: "NONE", "USER", "XACCESS", "MAX". 
Priority               int      current priority for the usermain (CI) process,                                  e.g., 150, 200, etc. 
Private                bool     * True if the job's stdlist is marked private. 
Quiet                  bool     True if :set msg=off is in effect. 
RawIntroDate           int      date job was introduced in CALENDAR format. RawIntroTime           int      time job was introduced in CLOCK format. RawStreamedByDate      int      date job/session was submitted in CALENDAR format. RawStreamedByTime      int      time job/session was submitted in CLOCK format. Restart                bool     True if ";RESTART" specified in job "card". 
State                  string   see "JobState". 
StdinSPID              string   "Innn" identifier for the stdin spoolfile for                                  jobs. 
StdinSPstate           string   STDIN spoolfile state: "OPEN", "ACTIVE", "READY".                                  "" for sessions. 
StdlistDelete          bool     True if SET STDLIST=delete in effect. 
StdlistSPID            string   "Onnn" identifier for the stdlist spoolfile for                                 jobs. "" for sessions. 
StdlistSPstate         string   STDLIST spoolfile state: "CREATE", "DEFER",                                 "READY","XFER", "PRINT", "PROBLM", "DELPND",                                 "SPSAVE". 
                                Note: some of these states apply to jobs that have                                 terminated. No JINFO information is available on                                 jobs that have terminated. 
StreamedBy             string   * full identifier of the job/session that streamed                                   or initiated the target job. For example:                                   "jobname,user.account (#J123)". This is the same                                   value as seen in the HPSTREAMEDBY CI variable. StreamedByDate         int      see "IntStreamedByDate". 
StreamedByLdev         int      * Ldev of job/session that submitted the target                                   job. 
StreamedByTime         int      see "IntStreamedByTime". 
User                   string   user name. 
User Account           string   "user.account" names concatenated. 
User Account Group     string   "user.account,group" names concatenated. 
UserAccount            string   See "User Account". 
UserAccountGroup       string   See "User Account Group".*  indicates you must have SM or OP capabilities, or the job must be your own job,    or you must have AM capability and be logged on into the same account as the    target job, or you must be logged on as the same user.account as the target job    and JOBSECURITY is LOW.** indicates you must have SM or OP capabilities.

JOBCNT

Syntax: JOBCNT ( job_match [,joblist_var] )

Defn:

A CI evaluator function that returns the number of jobs and/or sessions that match 'job_match'. Optionally, these matching job/session numbers are returned in the CI variable named by the 'joblist_var' parameter. All jobs/sessions matching "job_match" are counted, including: executing, waiting, suspended and scheduled jobs.

Type:

Integer

Parms Job_match:

Required. String identifying the target jobs and/or sessions. Supported formats:

    "@"           - all jobs and sessions 
    "@J"          - all jobs 
    "@S"          - all sessions 
    "user.acct"   - all job/sessions matching "user.acct" 
    "jobname,user.acct" - all job/sessions matching                     "jobname,user.acct" 
    "@J:[jobname,]user.acct" - all jobs-only matching                     "[jobname,]user.acct" 
    "@S:[jobname,]user.acct" - all sessions -only matching                     "[jobname,]user.acct"
NOTE: "jobname", "user" and "acct" may be wildcarded.

",user.acct" (empty 'jobname') can be passed to specify that only jobs or sessions without job names are desired. If 'jobname' is specified then only job/sessions with job names are considered.

Joblist_var:

Optional. An unquoted name of a CI variable that holds the job/session numbers that match the 'job_match' argument. Each job/session number is separated by a single space. For example:

"J2 S34 S36 J12 J31 S44"
NOTE: It is possible that more jobs match than will fit in the CI variable. In this event, the variable is filled to capacity without reporting an error. The caller can detect this condition by comparing the number of jobs matching against the number of tokens in the 'joblist_var' variable.
Example:      :calc JOBCNT("@S")           # find all sessions
Result:       12
Example:      :calc JOBCNT("@J:@.sys")     # find all jobs in SYS account
Result:       4
Example:      setvar x JOBCNT('@', jlist)  # find all jobs/sessions
              if x <> wordcnt(jlist) then
                # not all matching job/sessions fit into var
                ...
Example:      :calc JOBCNT("@!hpjobtype:!hpjobname,!hpuser.!hpaccount")
Result        1                            # find all jobs or sessions logged
                                           # on exactly as "you"

WORDCNT

Syntax: WORDCNT ( string[,delims][,start] )

Defn:

A CI evaluator function that returns the number or words (tokens) defined by "delims" in "string", starting at "start". The default delimiters are the same as for the WORD and DELIMPOS functions: a space, a comma, a semicolon, an equals sign, left and right parentheses, left and right brackets, single quote, double quote, and tab. The default start is 1.

Type:

Integer

Example:     :calc WORDCNT('file a=bb,old;rec=40,,f,ascii') 
Result:      9

New CI Variables

HPDATETIME

A CI variable containing the current date and time in a string formatted as "YearMonthDateHourMinuteSecondMillisecond". For consistency, if HPDATETIME is referenced more than once for a "logical" (or atomic) operation, such as extracting the date and the time, it is very important to store HPDATETIME into a user-defined variable and extract from that variable. For example, to accurately separate the date and time from HPDATETIME the code below should NOT be used:

  setvar mydate lft(hpdatetime,8) /* Don't do this! */ 
  setvar mytime rht(hpdatetime,9) /* Don't do this! */

The problem above is that "MYDATE" could be set a millisecond before midnight, and "MYTIME" could be set a millisecond past midnight, with the result being:

  MYDATE = 19990314       /* Mar 14 just before midnight */ 
  MYTIME = 000000100      /* Mar 15 just past midnight */

Instead, create a variable that contains HPDATETIME and extract from that variable. For example:

  setvar date_time HPDATETIME      /* This is correct! */  
  setvar mydate lft(date_time,8) 
  setvar mytime rht(date_time,9)
NOTE: Current time resolution is only tenths-of-a-second so the last two string characters will both be "0".
Type:    String, read-only. 
Example: if the current date and time is Feb 21, 1999 at          14:08:15:2, HPDATETIME equals "19990221140815200"
HPDOY

A CI variable containing the day number in the current year, with Jan 1 being day 1.

Type: Integer, read-only. 
Example: On Feb, 7, 1999 HPDOY equals: 38
HPHHMMSSMMM

A CI variable containing the current time in a string formatted as "HourMinuteSecondMillisecond".

NOTE: Current resolution is only tenths-of-a-second so the last 2 string characters will both be "0".

Type: String, read-only. 
Example: if the current time is 14:08:15:2, HPHHMMSSMMM equals          "140815200"

HPLEAPYEAR

A CI variable that indicates if the current year is a leap year.

Type: Boolean, read-only. 
Example: On Feb. 7, 1999 HPLEAPYEAR equals: FALSE 
         On Jan. 1, 2000 HPLEAPYEAR equals: TRUE
HPYYYYMMDD

A CI variable containing the current date in a string formatted as "CenturyYear-of-centuryMonthDate".

Type: String, read-only. 
Example: if the current date is Feb 21, 1999, HPYYYYMMDD equals          "19990221"

Pause Enhancement

PAUSE

The JOB= parameter of the PAUSE command now allows users to select jobs-only or sessions-only in the target user.account(s). A new " @J:" or "@S:" prefix to the existing "[jobname,]user.account" form supports this new functionality. The complete syntax for JOB= is:

     [#]J|Snnnn, where nnn is a number, or 
     @S|@J|@                            or 
     [@J|@S:][jobname,]user.acct

The 'jobname' value can be passed as an null value (",") to indicate that only jobs or sessions without jobnames are considered. A non-null value in 'jobname' means that only jobs or session with job names are candidates for selection. If 'jobname' is not relevant to the selection then it should be omitted, and only the 'user.acct' should be specified.

To pause until all job/sessions logged on exactly as "you" (but excluding "you") terminate, enter:

   :pause job="@!hpjobtype:!hpjobname,!hpuser.!hpaccount
Feedback to webmaster