Chinaunix

标题: 写了个删除旧spool file 的东西,看可以用不? [打印本页]

作者: Eagle_wolf    时间: 2005-06-08 11:37
标题: 写了个删除旧spool file 的东西,看可以用不?
  1.   H*  Programe No. :
  2.      H*          Text :
  3.      H*      Function : delete old splf
  4.      H*
  5.      H*     Programer :
  6.      H*
  7.      H*  Date Created :
  8.      H*
  9.      H**********************************************************************
  10.      HDATFMT(*ISO)   
  11.      HDATEDIT(*YMD)
  12.      H**********************************************************************
  13.      D*Input parm
  14.      DParm1            S              3P 0
  15.      D*                  Err_Code
  16.      DRtnErrorDs       Ds
  17.      D  ErrBytes               1      4B 0
  18.      D  ErrBytesAva            5      8B 0
  19.      D  Exception              9     15
  20.      D  Reserved              16     16
  21.      D  Data                  17    271
  22.      D*
  23.      D*     Qusrobjd  parm
  24.      D RecvValue       S             16
  25.      D RecvSize        S              9B 0
  26.      D ObjFmt          S              8
  27.      D ObjType         S             10
  28.      D*
  29.      D*     quscrtus  parm
  30.      D SpaceName       S             20      Inz('DLTOLDSPLFQTEMP     ')
  31.      D SpaceAtr        S             10
  32.      D SpaceSize       S              9  0   Inz(1)
  33.      D SpaceVal        S              1      Inz(X'00')
  34.      D SpaceAut        S             10
  35.      D SpaceRpl        S             10
  36.      D SpaceText       S             50    Inz('Creat for test')
  37.      D*     qusptrus  parm
  38.      D SpacePtr        S               *
  39.      D*
  40.      D*     User space Ds
  41.      DSpaceDs          Ds                  Based(SpacePtr)
  42.      D SpcInfStats           104    104A
  43.      D SpcOffsetHd           117    120B 0
  44.      D SpcHeadSize           121    124B 0
  45.      D SpcOffsetDa           125    128B 0
  46.      D SpcNumList            133    136B 0
  47.      D SpcEnySize            137    140B 0
  48.      D*
  49.      D
  50.      D*
  51.      D* qusplsp parm
  52.      DFmtName          S              8
  53.      DUsrName          S             10
  54.      DOutq             S             20
  55.      DFormType         S             10
  56.      DUsrData          S             10
  57.      D*
  58.      D* qusrtvus  parm
  59.      DSpoolDs          Ds
  60.      D SplUser                 1     10
  61.      D SplOutq                11     20
  62.      D SplOutqLib             21     30
  63.      D SplType                31     40
  64.      D SplJobId               51     66
  65.      D SplIntId               67     82
  66.      D*
  67.      D* qusrspla parm
  68.      DSplAtrDs         Ds
  69.      D Spltmp                  1     40
  70.      D DelJobName             41     50
  71.      D DelUser                51     60
  72.      D DelJobNum              61     66
  73.      D DelSplName             67     76
  74.      D DelSplNum              77     80B 0
  75.      D SplAtrtmp              81    202
  76.      D SplDate               203    209
  77.      D SplTime               210    215
  78.      D SplAtrFmt       S              8
  79.      D Job             S             26
  80.      D*JobId           S             16
  81.      D*SplId           S             16
  82.      D SplName         S             10
  83.      D SplNum          S              9B 0
  84.      D Recv_Len        S              9B 0
  85.      D*
  86.      D*  Qmhsndpm parm
  87.      D  MsgFile        S             20    Inz('QCPFMSG   QSYS      ')
  88.      D  MsgData        S            256
  89.      D  MsgDataLen     S             10I 0
  90.      D  MsgType        S             10
  91.      D  MsgStackEnt    S             10
  92.      D  MsgStackCnt    S             10I 0
  93.      D  MsgKey         S              4
  94.      D*
  95.      D* other var
  96.      DDelNum           S             15P 0
  97.      DConstV           C                   'Num of spool file has been deleted:'
  98.      DCount            S             15P 0   Inz(1)
  99.      DToDay            S               D
  100.      DDate             S               D
  101.      DSplCreDate       S              8A
  102.      DSplCreDat        S              8P 0
  103.      DDays             S              8P 0
  104.      DPgmDs           SDS
  105.      D PgmMsg                 40     46
  106.      D PgmDate              276   281 0
  107.      D*--------------------------------------------------------------
  108.      C* input parm
  109.      C     *Entry        Plist
  110.      C                   Parm                    Parm1
  111.      C
  112.      C* initial value
  113.      C                   Exsr      @ForeProcess
  114.      C*main process
  115.      C
  116.      C                   Exsr      @MainProcess
  117.      C*
  118.      C                   Exsr      @BackProcess
  119.      C*
  120.      C                   Exsr      @Exit
  121.      C*---------------------------------------------------------------------
  122.      C* initial value
  123.      C*---------------------------------------------------------------------
  124.      C     @ForeProcess  Begsr
  125.      C                   Move      PgmDate       Today
  126.      C                   Endsr
  127.      C*---------------------------------------------------------------------
  128.      C* main process
  129.      C*---------------------------------------------------------------------
  130.      C     @MainProcess  Begsr
  131.      C
  132.      C*check user space
  133.      C                   Call      'QUSROBJD'
  134.      C                   Parm                    RecvValue
  135.      C                   Parm      8             RecvSize
  136.      C                   Parm      'OBJD0100'    ObjFmt
  137.      C                   Parm                    SpaceName
  138.      C                   Parm      '*USRSPC'     ObjType
  139.      C                   Parm                    RtnErrorDs
  140.      C
  141.      C                   If        ErrBytesAva >; 0
  142.      C                   If        Exception = 'CPF9801'
  143.      C                   Call      'QUSCRTUS'
  144.      C                   Parm                    SpaceName
  145.      C                   Parm      'QSPLSPL'     SpaceAtr
  146.      C                   Parm      1024          SpaceSize
  147.      C                   Parm      ' '           SpaceVal
  148.      C                   Parm      '*ALL'        SpaceAut
  149.      C                   Parm                    SpaceText
  150.      C                   Parm      '*YES'        SpaceRpl
  151.      C                   Parm                    RtnErrorDs
  152.      C
  153.      C                   If        ErrBytesAva >; 0
  154.      C                   Exsr      @SubSndMsg
  155.      C                   Exsr      @Exit
  156.      C                   EndIf
  157.      C
  158.      C                   Else
  159.      C
  160.      C                   Exsr      @SubSndMsg
  161.      C                   Exsr      @Exit
  162.      C                   EndIf
  163.      C                   EndIf
  164.      C
  165.      C*list the spoolfile
  166.      C                   Call      'QUSLSPL'
  167.      C                   Parm                    SpaceName
  168.      C                   Parm      'SPLF0100'    FmtName
  169.      C                   Parm      '*CURRENT'    UsrName
  170.      C                   Parm      '*ALL'        OutQ
  171.      C                   Parm      '*ALL'        FormType
  172.      C                   Parm      '*ALL'        UsrData
  173.      C                   Parm                    RtnErrorDs
  174.      C
  175.      C                   If        ErrBytesAva >; 0
  176.      C                   Exsr      @SubSndMsg
  177.      C                   Exsr      @Exit
  178.      C                   EndIf
  179.      C
  180.      C*Retrive the space's  pointer
  181.      C                   Call      'QUSPTRUS'
  182.      C                   Parm                    SpaceName
  183.      C                   Parm                    SpacePtr
  184.      C                   Parm                    RtnErrorDs
  185.      C
  186.      C                   If        ErrBytesAva >; 0
  187.      C                   Exsr      @SubSndMsg
  188.      C                   Exsr      @Exit
  189.      C                   EndIf
  190.      C
  191.      C     1             Add       SpcOffsetHd   SpcOffsetHd
  192.      C     1             Add       SpcOffsetDa   SpcOffsetDa
  193.      C
  194.      C                   Dou       Count >; SpcNumList
  195.      C                   Add       1             Count
  196.      C                   Call      'QUSRTVUS'
  197.      C                   Parm                    SpaceName
  198.      C                   Parm                    SpcOffsetDa
  199.      C                   Parm                    SpcEnySize
  200.      C                   Parm                    SpoolDs
  201.      C                   Parm                    RtnErrorDs
  202.      C
  203.      C                   If        ErrBytesAva >; 0
  204.      C                   Exsr      @SubSndMsg
  205.      C                   Exsr      @Exit
  206.      C                   EndIf
  207.      C
  208.      C*可以判断user and  outq
  209.      C
  210.      C                   Call      'QUSRSPLA'
  211.      C                   Parm                    SplAtrDs
  212.      C                   Parm      215           Recv_len
  213.      C                   Parm      'SPLA0100'    SplAtrFmt
  214.      C                   Parm      '*INT'        Job
  215.      C                   Parm                    SplJobId
  216.      C                   Parm                    SplIntId
  217.      C                   Parm      '*INT'        SplName
  218.      C                   Parm      -1            SplNum
  219.      C                   Parm                    RtnErrorDs
  220.      C
  221.      C                   If        ErrBytesAva >; 0
  222.      C                   Exsr      @SubSndMsg
  223.      C                   Exsr      @Exit
  224.      C                   EndIf
  225.      C
  226.      C                   If        %subst(SplDate:1:1) = '1'
  227.      C                   Eval      SplCreDate = '20' + %Subst(SplDate:2:6)
  228.      C                   Else
  229.      C                   Eval      SplCreDate = '19' + %Subst(SplDate:2:6)
  230.      C                   EndIf
  231.      C                   Move      SplCreDate    SplCreDat
  232.      C     *YMD          Move      SplCreDat     Date
  233.      C     ToDay         SubDur    Date          Days:*D
  234.      C                   If        Days >; Parm1
  235.      C                   Exsr      @DltSplf
  236.      C                   EndIf
  237.      C                   Eval      SpcOffsetDa = SpcOffsetDa + SpcEnySize
  238.      C                   EndDo
  239.      C                   Endsr
  240.      C*--------------------------------------------------------------------
  241.      C*
  242.      C*--------------------------------------------------------------------
  243.      C     @BackProcess  Begsr
  244.      C                   Call      'QUSDLTUS'
  245.      C                   Parm                    SpaceName
  246.      C                   Parm                    RtnErrorDs
  247.      C
  248.      C                   If        ErrBytesAva >; 0
  249.      C                   Exsr      @SubSndMsg
  250.      C                   Exsr      @Exit
  251.      C                   EndIf
  252.      C                   Endsr
  253.      C*---------------------------------------------------------------------
  254.      C*
  255.      C*---------------------------------------------------------------------
  256.      C     @SubSndMsg    Begsr
  257.      C*
  258.      C                   Call      'QMHSNDPM'
  259.      C                   Parm                    Exception
  260.      C                   Parm                    MsgFile
  261.      C                   Parm      *Blanks       MsgData
  262.      C                   Parm      0             MsgDataLen
  263.      C                   Parm      '*INFO'       MsgType
  264.      C                   Parm      '*'           MsgStackEnt
  265.      C                   Parm      2             MsgStackCnt
  266.      C                   Parm      *Blanks       MsgKey
  267.      C                   Parm                    RtnErrorDs
  268.      C                   Exsr      @Exit
  269.      C                   Endsr
  270.      C*---------------------------------------------------------------------
  271.      C*
  272.      C*--------------------------------------------------------------------
  273.      C     @DltSplf      Begsr
  274.      C                   Move      DelSplNum     del               4 0
  275.      C                   Call      'MYDLTSP'
  276.      C                   Parm                    DelSplName
  277.      C                   Parm                    DelJobName
  278.      C                   Parm                    DelUser
  279.      C                   Parm                    DelJobNum
  280.      C                   Parm                    Del
  281.      C                   Add       1             DelNum
  282.      C                   Endsr
  283.      C*---------------------------------------------------------------------
  284.      C*
  285.      C*---------------------------------------------------------------------
  286.      C     *PSSR         Begsr
  287.      C                   If        PgmMsg <>; *Blanks
  288.      C     'Exception:'  Dsply                   PgmMsg
  289.      C                   Eval      *INLR = *ON
  290.      C                   Return
  291.      C                   EndIf
  292.      C                   Endsr
  293.      C*--------------------------------------------------------------------
  294.      C*
  295.      C*--------------------------------------------------------------------
  296.      C     @Exit         Begsr
  297.      C     Constv        Dsply                   Delnum
  298.      C                   Seton                                          LR
  299.      C                   Return
  300.      C                   Endsr
  301. ------------------------------------------------------------------------------
  302. mydltsp
  303. -----------------------------------------------------------------------------=
  304.              Pgm        Parm(&SplName &JobName &User &JobNum +
  305.                              &SplNum)
  306.              DCl        Var(&SplName)  Type(*Char) Len(10)
  307.              Dcl        Var(&JobName)  Type(*Char) Len(10)
  308.              Dcl        Var(&User)     Type(*Char) Len(10)
  309.              Dcl        Var(&JobNum)   Type(*Char) Len(6)
  310.              DCL        VAR(&SPLNUM) TYPE(*DEC) LEN(4)

  311.              DLTSPLF    FILE(&SPLNAME) JOB(&JOBNUM/&USER/&JOBNAME) +
  312.                           SPLNBR(&SPLNUM)

  313.              EndPgm
  314. ==============================================
  315. cmd
  316. ==============================================
  317.             CMD PROMPT('DELETE OLD SPPLF')
  318.              PARM       KWD(DAYS) TYPE(*DEC) LEN(3) DFT(15) +
  319.                           PROMPT('间隔天数')
复制代码
[/code]
作者: USING_AS400    时间: 2005-06-08 11:39
标题: 写了个删除旧spool file 的东西,看可以用不?
虽然还没试过,不过相信会是好东西!支持!!!
作者: Eagle_wolf    时间: 2005-06-08 15:09
标题: 写了个删除旧spool file 的东西,看可以用不?
其实还可以加几个选择参数,入user outq 等等
作者: xuguopeng    时间: 2005-06-08 15:12
标题: 写了个删除旧spool file 的东西,看可以用不?
程序好长 没怎么仔细看 对API的了解不是很多

希望楼主能给解说一下各个API的作用以及程序的思路
作者: USING_AS400    时间: 2005-06-08 15:15
标题: 写了个删除旧spool file 的东西,看可以用不?
我也对API感兴趣,可惜平时知道的很少,一般都是看到别人用才知道怎么用!
所以,期待楼主给我们讲解一下!谢谢!
作者: Eagle_wolf    时间: 2005-06-08 16:57
标题: 写了个删除旧spool file 的东西,看可以用不?
其实思路很简单,如果不用API 用wrksplf产生个spoolfile 然后分析这个spoolfile也能达到同样的效果.使用API只是想练习写个程序而已

主要就是利用quslspl列出需要的spoolfile,然后用qusrspla分析每个splf的属性,满足的就删除
作者: Eagle_wolf    时间: 2005-06-08 17:34
标题: 写了个删除旧spool file 的东西,看可以用不?
其中用到了qusrobjd  QUSCRTUS QUSLSPL  QUSPTRUS QUSRTVUS
QUSRSPLA QUSDLTUS  QMHSNDPM 这几个API
qusrobjd   是用来检查usrspace是否存在,如果不存在建立
QUSCRTUS  建立usrspace
QUSLSPL   列出splf
QUSPTRUS  获得space指针
QUSRTVUS 获得space的数据信息
QUSRSPLA  获得splf的属性
QUSDLTUS   删除usrspace
QMHSNDPM  等于sndpgmmsg

我也是刚刚学API的应用,希望大家多多指教
作者: wildfish    时间: 2005-06-08 19:33
标题: 写了个删除旧spool file 的东西,看可以用不?
我对api一窍不通,所以看的云里雾里,我们一般是自己做一个spool file文件管理,然后删除~
作者: pl421    时间: 2005-06-09 09:55
标题: 写了个删除旧spool file 的东西,看可以用不?
楼主H表是干嘛用的呀.麻烦解释解释.
作者: Eagle_wolf    时间: 2005-06-09 10:35
标题: 写了个删除旧spool file 的东西,看可以用不?
h 表是程序编译和运行提供一些信息的 如版本 时间格式 等等
这里一个是日期格式 一个是日期编辑时的格式
其实不指定缺省也是可以的 只是写习惯了
作者: Eagle_wolf    时间: 2005-06-09 18:02
标题: 写了个删除旧spool file 的东西,看可以用不?
发现一个问题,*date 是文件建立job的日期 不一定等于当前日期,
move   *date   today
这里需要用system value QDATE 代替,有空我在改

有点搞不懂 *date 到底是什么?

改完了
作者: teresa99    时间: 2005-06-10 20:13
标题: 写了个删除旧spool file 的东西,看可以用不?
*DATE是JOB的日期,可以通过CHGJOB DATE()修改
作者: Eagle_wolf    时间: 2005-06-15 14:27
标题: 写了个删除旧spool file 的东西,看可以用不?
我的用户jobd里面的 job date 指定的是 *sysval啊 难道这个job date 在 登陆的时候就定了 
即 6月5号登陆后 一直不signoff  *date 就一直等于
6月5号????
作者: wangshy    时间: 2005-06-16 18:10
标题: 写了个删除旧spool file 的东西,看可以用不?
QSYCUSRS怎么样使用,在命令行上CALL时,需要哪些参数,请给个例子.先谢谢了.
作者: Eagle_wolf    时间: 2005-06-20 13:05
标题: 写了个删除旧spool file 的东西,看可以用不?
http://www.dbg400.net/download/QMNSRBND.txt
这里有个程序 看看能不能帮你
作者: wangshy    时间: 2005-06-20 20:09
标题: 写了个删除旧spool file 的东西,看可以用不?
高手,非常感谢楼主。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2