Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1298564
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2010-06-05 09:06:03

List Job

     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

Thanks to Scott Klement
阅读(1240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~