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

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2010-06-11 09:27:07

QDBRTVFD - Retrieve Database File Description
 
D wFDSize         ds
D  wFDSize1                      9b 0
D  wFDSize2                      9b 0

D Qdb_Qdbfh       ds
d  Qdbfyret                      9b 0
d  Qdbfyavl                      9b 0
d  Qdbfhflg                      2
d  Reserved_7                    4
d  Qdbflbnum                     4b 0
d  Qdbfknum                      4b 0
d  Qdbfkmxl                      4b 0
d  Qdbfkflg                      1
d  Qdbfkfdm                      1
d  Reserved_10                   8
d  Qdbfhaut                     10
d  Qdbfhupl                      1
d  Qdbfhmxm                      4b 0
d  Qdbfwtfi                      4b 0
d  Qdbfhfrt                      4b 0
d  Qdbfhmnum                     4b 0
d  Reserved_11                   9
d  Qdbfbrwt                      4b 0
d  Qaaf                          1
d  Qdbffmtnum                    4b 0
d  Qdbfhfl2                      2
d  Qdbfvrm                       4b 0
d  Qaaf2                         2
d  Qdbfhcrt                     13
d  Reserved_18                   2
d  qdbfhtxt                     50
d  Reserved_19                  13
d  Qdbfsrcf                     10
d  Qdbfsrcm                     10
d  Qdbfsrcl                     10
d  Qdbfkrcv                      1
d  Reserved_20                  23
d  Qdbftcid                      5u 0
d  Qdbfasp                       2
d  Reserved_21                   1
d  Qdbfmxfnum                    4b 0
d  Reserved_22                  76
d  Qdbfodic                      9b 0
d  Reserved_23                  14
d  Qdbffigl                      4b 0
d  Qdbfmxrl                      4b 0
d  Reserved_24                   8
d  Qdbfgkct                      4b 0
d  Qdbfos                        9b 0
d  Reserved_25                   8
d  Qdbfocs                       9b 0
d  Reserved_26                   4
d  Qdbfpact                      2
d  Qdbfhrls                      6
d  Reserved_27                  20
d  Qdbpfof                       9b 0
d  Qdblfof                       9b 0
d  Qdbfnlsb                      1
d  Qdbflang                      3
d  Qdbfcnty                      2
d  Qdbfjorn                      9b 0
d  Reserved_28                  18

D* Physical File Attributes
D pQdbpf          s               *
D Qdb_Qdbpf       ds                  based(pQdbpf)
D  qdbfpAlc                      2
D  qdbfcMPs                      1
d  Reserved_29                   8
D  qdbpRNum                      9b 0
D  qdbfpRI                       4b 0
D  qdbRINum                      4b 0
D  qdbfORID                      9b 0
D  qdbBits33                     1
D  qdbfOTrg                      9b 0             Offset to qdbftrg
D  qdbfTrgN                      4b 0             No of triggers
D  qdbfOFCS                      9b 0
D  qdbfCstN                      9b 0
D  qdbfODL                       9b 0
D  Reserved_32                   6

D pQdbftrg        s               *
D Qdb_Qdbftrg     ds                  based(pQdbftrg)
D  qdbfTrgT                      1
D  qdbfTrgE                      1
D  qdbfTPgm                     10
D  qdbfTPLb                     10
D  qdbfTUpd                      1
D  qdbBits69                     1
D  Reserved_201                 24

D pFD             s               *
D wFD             s           1000    dim(1000) based(pFD)
D wCurTrg         s              4b 0


** Open file description
p OpenFILD0100    b                   export
d                 pi
D xFile                         20    const
D xRcdFmt                       10    const

D wErr            s              8    inz(x'0000000000000000')
D wFDLen          s              9b 0
D wFile           s             20
D wFmt            s              8    inz('FILD0100')
D wFmtType        s             10    inz('*INT')
D wi              s              5  0
D wOvr            s              1    inz('0')
D wRcdFmt         s             10
D wSystem         s             10    inz('*LCL')

C                   eval      wFile = xFile
C                   eval      wRcdFmt = xRcdFmt
c* get size needed
C                   call      'QDBRTVFD'
C                   parm                    wFDSize
C                   parm      8             wFDLen
C                   parm                    wRtnFile
C                   parm                    wFmt
C                   parm                    wFile
C                   parm                    wRcdFmt
C                   parm                    wOvr
C                   parm                    wSystem
C                   parm                    wFmtType
C                   parm                    wErr

C                   eval      pFD = malloc(wFDSize2)

C                   call      'QDBRTVFD'
C                   parm                    wFD
C                   parm      wFDSize2      wFDLen
C                   parm                    wRtnFile
C                   parm                    wFmt
C                   parm                    wFile
C                   parm                    wRcdFmt
C                   parm                    wOvr
C                   parm                    wSystem
C                   parm                    wFmtType
C                   parm                    wErr
C                   movea     wFD           Qdb_Qdbfh
C                   return
p OpenFILD0100    e

** Close file description
p CloseFILD0100   b                   export

C                   dealloc                 pFD
C                   return
p CloseFILD0100   e

** Get Number of Triggers
p GetNbrTrg       b                   export
d                 pi                  like(qdbfTrgN)

C                   eval      pQdbpf = pFD + Qdbpfof
C                   return    qdbfTrgN
P GetNbrTrg       e

** Get First Trigger
p GetFirstTrg     b                   export
d                 pi             1

C                   eval      pQdbpf = pFD + Qdbpfof
C                   eval      wCurTrg = 1
C                   if        qdbfOTrg > 0
C                   eval      pQdbfTrg = pFD + qdbfOTrg
C                   return    '0'
C                   else
C                   return    '1'
C                   endif
p GetFirstTrg     e

** Get Next Trigger
p GetNextTrg      b                   export
d                 pi             1

C                   if        wCurTrg < qdbfTrgN
C                   eval      wCurTrg = wCurTrg + 1
C                   eval      pQdbfTrg = pQdbfTrg + %size(qdb_qdbfTrg)
C                   return    '0'
C                   else
C                   return    '1'
C                   endif
p GetNextTrg      e

** Get Trigger Time
p GetTrgTime      b                   export
d                 pi            10

C                   select
C                   when      qdbfTrgT = '1'
C                   return    'AFTER'
C                   when      qdbfTrgT = '2'
C                   return    'BEFORE'
C                   other
C                   return    qdbfTrgT
C                   endsl
p GetTrgTime      e

** Get Trigger Event
p GetTrgEvent     b                   export
d                 pi            10

C                   select
C                   when      qdbfTrgE = '1'
C                   return    'INSERT'
C                   when      qdbfTrgE = '2'
C                   return    'DELETE'
C                   when      qdbfTrgE = '3'
C                   return    'UPDATE'
C                   other
C                   return    qdbfTrgE
C                   endsl
p GetTrgEvent     e

** Get Trigger Program
p GetTrgPgm       b                   export
d                 pi                  like (qdbfTPgm)

C                   return    qdbfTPgm
p GetTrgPgm       e

** Get Trigger Program Library
p GetTrgPgmLib    b                   export
d                 pi                  like (qdbftplb)

C                   return    qdbfTPLb
p GetTrgPgmLib    e

** Get Trigger Update Condition
p GetTrgUpdCond   b                   export
d                 pi            10

C                   select
C                   when      qdbfTUpd = '1'
C                   return    'ALWAYS'
C                   when      qdbfTUpd = '2'
C                   return    'CHANGE'
C                   other
C                   return    qdbfTUpd
C                   endsl
p GetTrgUpdCond   e


(malloc is defined like this:)
** Allocate memory
p malloc          b                   export
d                 pi              *
d  xSize                         9b 0 const
d pPtr            s               *

C                   alloc     xSize         pPtr
C                   return    pPtr
p malloc          e

Example Usage (pseudo):

OpenFilD0100

eval *in99 = GetFirstTrg
dow *in99 = *off
  eval fld1 = GetTrgPgm
  ...
eval *in99 = GetNextTrg
enddo

CloseFilD0100
阅读(614) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~