× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Scott -->

Thanks -- it worked perfectly for what I wanted to do.

Mike

----- Original Message -----
From: "Scott Klement" <klemscot@xxxxxxxxxxxx>
To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx>
Sent: Tuesday, April 08, 2003 1:08 PM
Subject: Re: Determining jobs running in a subsystem...


>
> >
> > I need a quick, down & dirty way to determine the number of jobs running
in
> > a specific subsystem, then displaying the information on the screen.  I
was
> > looking at calling a command from the RPG program, sending the output to
a
> > spooled file & processing it, but I did not want to have to process a
> > spooled file in that way.  Anyone else have any ideas and/or examples?
> >
>
> That's a good choice!  Processing a spooled file is a bad idea, because
> IBM can change the format of a spooled file at any time, breaking your
> program.  Using an API protects you from that.
>
> Here's a sample that uses the QUSLJOB API.   The QGYOLJOB API might
> also work, but I don't have a sample of that that I can send you.
>
>      H DFTACTGRP(*NO)
>
>       *
>       * List jobs API
>       *
>      D QUSLJOB         PR                  ExtPgm('QUSLJOB')
>      D   UsrSpc                      20A   const
>      D   Format                       8A   const
>      D   QualJob                     26A   const
>      D   Status                      10A   const
>      D   ErrorCode                32767A   options(*varsize)
>      D   JobType                      1A   const options(*nopass)
>      D   NumFldsToRtn                10I 0 const options(*nopass)
>      D   FldsToRtn                   10I 0 const options(*nopass)
>
>       *
>       * Create User Space API
>       *
>      D QUSCRTUS        PR                  ExtPgm('QUSCRTUS')
>      D   UserSpc                     20A   const
>      D   ExtAttr                     10A   const
>      D   InitSize                    10I 0 const
>      D   InitVal                      1A   const
>      D   PublicAuth                  10A   const
>      D   Text                        50A   const
>      D   Replace                     10A   const
>      D   ErrorCode                32766A   options(*varsize)
>
>       *
>       * retrieve pointer to user space API
>       *
>      D QUSPTRUS        PR                  ExtPgm('QUSPTRUS')
>      D   UserSpc                     20A   CONST
>      D   Pointer                       *
>
>       *
>       * API error code structure
>       * (we inz to 0 to cause the APIs to return errors using normal
>       *  OS/400 error handling)
>       *
>      D dsEC            DS
>      D  dsECBytesP                   10I 0 INZ(0)
>      D  dsECBytesA                   10I 0 INZ(0)
>
>      D*****************************************************
>      D* List API header data structure
>      D*****************************************************
>      D p_UsrSpc        S               *
>      D dsLH            DS                   BASED(p_UsrSpc)
>      D*                                     Filler
>      D   dsLHFill1                  103A
>      D*                                     Status
(I=Incomplete,C=Complete
>      D*                                             F=Partially Complete)
>      D   dsLHStatus                   1A
>      D*                                     Filler
>      D   dsLHFill2                   12A
>      D*                                     Header Offset
>      D   dsLHHdrOff                  10I 0
>      D*                                     Header Size
>      D   dsLHHdrSiz                  10I 0
>      D*                                     List Offset
>      D   dsLHLstOff                  10I 0
>      D*                                     List Size
>      D   dsLHLstSiz                  10I 0
>      D*                                     Count of Entries in List
>      D   dsLHEntCnt                  10I 0
>      D*                                     Size of a single entry
>      D   dsLHEntSiz                  10I 0
>
>      D p_Job           S               *
>      D dsJob           DS                  based(p_Job)
>      D   dsJobName                   10A
>      D   dsJobUser                   10A
>      D   dsJobNbr                     6A
>      D   dsJobIntID                  16A
>      D   dsJobSts                    10A
>      D   dsJobType                    1A
>      D   dsJobSubType                 1A
>      D   dsJobReserv                  2A
>      D   dsJobInfSts                  1A
>      D   dsJobReserv2                 3A
>      D   dsJobNbrFlds                10I 0
>      D   dsJobKeyAry                  1A
>
>      D p_KeyAry        S               *
>      D dsKeyAry        DS                  based(p_KeyAry)
>      D   dsKA_Len                    10I 0
>      D   dsKA_Field                  10I 0
>      D   dsKA_Type                    1A
>      D   dsKA_Reserv                  3A
>      D   dsKA_DtaLen                 10I 0
>      D   dsKA_Data                   20A
>
>      D JOBLIST         C                   'JOBLIST   QTEMP'
>      D SBSDNAME        C                   1906
>
>      D peSbsName       S             10A
>      D msg             s             50A
>      D Ent             s             10I 0
>
>
>       *
>       *  Check parms
>       *
>      C     *entry        plist
>      c                   parm                    peSbsName
>
>      c                   if        %parms < 1
>      c                   eval      msg = 'You need to pass a subsystem
name'
>      c                   dsply                   msg
>      c                   eval      *inlr = *on
>      c                   return
>      c                   endif
>
>
>       *
>       *  Create a user space
>       *
>      c                   callp     QUSCRTUS(JOBLIST: 'USRSPC':
>      c                                %size(dsJob) * 1000: *Blank:
>      c                                '*ALL': 'List of jobs on system':
>      c                                '*YES': dsEC)
>
>
>       *
>       *  List jobs to the user space
>       *
>      c                   callp     QUSLJOB(JOBLIST: 'JOBL0200':
>      c                               '*ALL      *ALL      *ALL':
'*ACTIVE':
>      c                               dsEC: '*': 1:  SBSDNAME)
>
>
>       *
>       *  Read entries in user space
>       *
>      c                   callp     QUSPTRUS(JOBLIST: p_UsrSpc)
>
>      c                   for       Ent = 0 to (dsLHEntCnt - 1)
>
>      c                   eval      p_Job = p_UsrSpc + dsLHLstOff +
>      c                                (dsLhEntSiz * Ent)
>      c                   eval      p_KeyAry = %addr(dsJobKeyAry)
>
>      c                   if        dsKA_Field <> SBSDNAME
>      c                              or dsKA_Type <> 'C'
>      c                              or dsKA_DtaLen <> 20
>      c                   eval      msg = 'Unknown key in key array'
>      c                   dsply                   msg
>      c                   leave
>      c                   endif
>
>       ** only print jobs in requested subsystem.
>       ** and ignore subsystem monitor jobs.
>      c                   if        %subst(dsKA_Data: 1: 10) = peSbsName
>      c                               and dsJobType <> 'M'
>      c                   eval      msg = %trim(dsJobNbr) + '/' +
>      c                                   %trim(dsJobUser) + '/' +
>      c                                   %trim(dsJobName)
>      c     msg           dsply
>      c                   endif
>
>      c                   endfor
>
>      c                   eval      msg = 'Hit ENTER when done'
>      c                   dsply                   msg
>      c                   eval      *inlr = *on
> _______________________________________________
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
>



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.