免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jlwrp
打印 上一主题 下一主题

ILE RPG4 C表常用操作码学习笔记(按字母顺序发) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-06-09 14:50 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

CALLB(调用一个连接过程)

                操作码                因子1                因子2                结果字段                   指示器
                CALLB                                        过程名或                PLIST名                -  ER   LR
                (D)                                        过程指针               

    CALLB操作可以用来调用任何ILE语言编写的连接过程。
    因子1必须是空格,扩展操作D可以用来包括操作描述符。
    注:操作描述符提供给程序员运行时传过来的字符或图形串的确切属性(即串的长度及类型)。详细内容请查阅程序员指南。
    因子2是必须的,是一个包含被调用过程名的文字或常量,也可是一个包含被调用过程地址的过程指针。提供的过程名区分大小写且可多于10个字符,但不能超过255个。如果超过要被截断,结果字段为可选项,也可是一个PLIST名。
    当调用因错误而结束时,73-74列上说明的指示器置为ON。
    当调用以LR为ON结束时,75-76列上说明的指示器置为ON。
    注:当CALLB规定为文字或命名常量以“CEE”或“-”开始时,编译程序就把它当作可连接API。有关API的详细信息见SPI参考手册。为了避免与系统提供的APIs混淆,自已的过程不要以“CEE”开头来命名。
    在因子2中有过程指针的CALLB,PSDS中的*ROUTINE可以包括文字“*N”。在因子2中有文字或命名常量的CALLB,PSDS中的*ROUTINE包含过程名的前8个字符。


      DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
      D* Define a procedure pointer
      D
      D ProcPtr         S               *   PROCPTR INZ(%PADDR('Create_Space'))
      D Extern          S             10
      D
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C* 下面的调用是静态调用.
      C                   CALLB     'BOUNDPGM'
      C* 下面的调用是动态调用.
      C                   CALL      Extern
      C* 下面的调用是静态调用, 使用一个过程指针.
      C                   CALLB     ProcPtr

论坛徽章:
0
12 [报告]
发表于 2005-06-09 15:43 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

收益不小哦!
                樓主辛苦了!
                感謝!

论坛徽章:
0
13 [报告]
发表于 2005-06-09 16:28 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

的确不错!!!!!

论坛徽章:
0
14 [报告]
发表于 2005-06-10 12:46 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

這麼好的帖,強烈的     頂   !

论坛徽章:
0
15 [报告]
发表于 2005-06-10 13:53 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

一定要感謝樓住!

论坛徽章:
0
16 [报告]
发表于 2005-06-10 16:35 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

CHAIN(从文件中随机检索)

                操作码                因子1                        因子2                结果字段                指示器
                CHAIN                检索自变量                文件名或                数据                NR  ER  -
                (N)                                                格式名                结构
    CHAIN操作是从一个全过程文件(文件描述规范表18列上是F)取一个记录。置一个记录标识指示器为ON(如果在输入规范表上说明),并将该记录的数据放入输入字段中。
    因子1是检索自变量,必须含有键字或相对记录号用来取记录。如果通过键字访问,因子1可是一个字段名,一个命名常量,一个象征常数或是一个文字。另外,对外部描述文件在因子1上可以用KLIST来说明。如果用相对记录号访问,因子1必须是一个整型文字或一个带零位小数点的数字型字段。
    因子2,规定要读的文件或记录格式名。使用外部描述文件时才用记录格式名。如果因子2是一个文件名并用键字访问,CHAIN操作取出与检索自变量匹配的第一个记录。
    如果因子2是一个记录格式名并用键字访问,CHAIN操作取出与检索自变量匹配的所有记录中第一条记录。如果没有找到,则出现记录没找到的情况。
    仅当因子2上的文件名是一个程序描述文件(在文件描述规范表的22列用F标识)时,在结果字段中可以规定一个数据结构名。这时,CHAIN操作取出和因子1上的检索自变量匹配的所有记录标识中第一个记录,并把它放在数据结构中。关于在文件和数据结构之间传送数据内容,见4.3.11“文件操作”中的说明。
    对WORKSTN(工作站)文件,CHAIN操作读出一个子文件记录。
    对多设备文件,必须在因子2上指定一个记录格式,数据是从程序设备上读出,该设备在设备的文件说明中用“DEVID(文件名)”键字中的字段名来标识。如果没有说明此键字,数据是从最后成功地对文件执行输入的设备中读出的。
    如果文件是一个输入的磁盘文件,能读出所有记录且不用规定其他的操作。如果是更新文件,如果没有规定N扩展操作,那么锁住所有的记录。
    如果要从一个更新磁盘文件上做读操作,可以规定一个扩展N操作,指出在读记录时不加锁(即CHAIN(N))。详细资料见ILE RPG/400程序员指南。
    71和72列必须有一个指示器,当文件中没有和检索自变量匹配的记录时置为ON,73和74列的指示器,当CHAIN操作没成功时置为ON,75和76列必须空格。
    当CHAIN操作成功后,要定位因子2说明的文件。这样,随后的读操作将向前或向后检索一个符合条件的记录。当CHAIN操作没有完全成功时(例如出现错误或没找到记录),因子2说明的文件必须在随后的对此文件读操作之前返回原位。(例如,用一个CHAIN或SETLL操作)。
    在CHAIN操作对文件成功地执行之后,如果立即对因子2上说明的文件进行更新操作(在计算或输出规范表上),那么更新的是接收到的最后一条记录。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  CHAIN操作从文件FILEX中读取第一条记录,它与检索自变量KEY(因子1)
      C*  有同值键字。
      C*
      C     KEY           CHAIN     FILEX                              60
      C*
      C*
      C*  如果没找到与检索自变量相等键字值的记录,指示器60为ON,并执行
      C*  由指示器60为条件的EXSR操作。如果这样的记录找到了,程序继续执
      C*  行EXSR之后的计算。
      C*
      C   60              EXSR      Not_Found
  


图117  因子2有文件名的CHAIN操作。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  CHAIN操作使用检索自变量KEY中的值来从外部描述文件的记录REC1中检
      C*  索记录。如果没找到记录,指示器72为ON。用组合键字KLIST从有复合
      C*  键字的文件中检索记录。如果找到规定的记录,指示器72为OFF,并执行
      C*  UPDATE操作。
      C*
      C     KEY           CHAIN     REC1                               72
      C     KEY           KLIST
      C                   KFLD                    Field1
      C                   KFLD                    Field2
      C                   IF        NOT *IN72
      C*
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  UPDATE操作修改记录RECI中的所有字段。
      C*
      C                   UPDATE    REC1
      C                   ENDIF
      C*
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  下面例子给出无锁的CHAIN操作。
      C*
      C                   MOVE 3                  Rec_No
      C     Rec_No        CHAIN (N) INPUT                              99

论坛徽章:
0
17 [报告]
发表于 2005-06-10 16:36 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

谢谢大家对我的支持,一起努力吧,周六、日休息就多帖二个吧!!!!

论坛徽章:
0
18 [报告]
发表于 2005-06-10 16:37 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

CLEAR(清除)

                操作码                因子1                因子2                结果字段                指示器
                CLEAR                *NOKEY                *ALL                结构或变量
    CLEAR操作是将结构中的元素(记录格式、数据结构、数组或表)或变量(字段、子字段、数组元素或指示器)设置成它们的缺省值。这些缺省值是根据字段的类型来确定的。(数字型、字符型、图形、指示器、指针或日期/时间/时间标记)。该操作允许在运行期间一个元素一个元素地将结构置成它的缺省值。
    因子1必须是空格,除非结果字段为磁盘文件中的一个记录格式名。这时,因子1中可以是*NOKEY,它指出键字字段不能清除。
    结果字段为清除的结构或变量,它可以是:一个记录格式名、数据结构名、数组名、表名、字段名、子字段、数组元素或指示器名。如果说明的是一个记录格式名或数据结构,则所有定义在该结构内的字段都要按顺序清除。数据结构中的字段将按照它们的数据类型进行清除。如果在不同的定义中字段之间有部分覆盖,则在非字符字段当中可能有无效数据。在多次出现的数据结构中,只有当前出现的那些字段被清除。如果规定一个表名,则清除当前表元素;如果是一个数组名,则清除整个数组。如果在结果字段中用数组下标规定数组的元素(包括指示器),则只清除说明的那个元素。
    因子2必须是空格或是*ALL。如果是*ALL,且结果字段为一个多次出现的数据结构或表名,则所有的出现或表元素都将被清除,且出现的级别将置为1。
    当CLEAR操作用在一个记录格式,且因子2为*ALL,因子1是空格时,则记录格式中所有的字段都被清除。如果因子1为*NOKEY,则清除除了键字字段外的所有其它字段。
    当CLEAR操作用在记录格式,而因子2是空格,仅记录格式中的输出字段受影响。对于WORKSTN文件的记录格式,只影响用于输出或者用于既输入又输出的字段。所有字段的条件指示器都要受到该操作的影响。DISK、SEQ或PRINTER文件的记录格式在程序中为输出时,记录格式中的字段才受影响。仅输入字段不受该操作影响。通过定义,它们在下一次输入操作中获取新值。
    有关缺省值,请看第7章“数据类型与数据格式”。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
      D*
      D
      D DS1             DS
      D  Num                      2    5  0
      D  Char                    20   30A
      D
      D MODS            DS                  OCCURS(2)
      D  Fld1                     1    5
      D  Fld2                     6   10  0
      D
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  在下例中,CLEAR把数据结构DS1中的所有子字段设为它们的缺省值,
      C*  CHAR为空格,NUM为零。
      C
      C                   CLEAR                   DS1
      C
      C*
      C*  在下例中,CLEAR把多次发生的数据结构MODS的当前出现设为它们
      C*  的缺省值。FLD1为空格,FLD2为零。
      C*
      C
      C                   CLEAR     *ALL          MODS
      C
  

图125  CLEAR操作

    图126  给出了用CLEAR记录格式做字段初始化的例子。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      A* FIELD2和FIELD3定义为输出字段,也能由CLEAR影响。由于字段指示
      A* 器全部看作为输出字段,指示器10也能由CLEAR修改。
      A* (虽然它只限定仅输入字段)。
      A* 这是因为在CLEAR操作中规定了*ALL。
      A*
      AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions++++++++++++++++++++*
      A          R FMT01
      A  10        Field1        10A  I  2 30
      A            Field2        10A  O  3 30
      A            Field3        10A  B  4 30
      A*
      A*  End of DDS source
      A*


      FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords++++++++++++++++++++++++++++
      F
      FWORKSTN   CF   E             WORKSTN INCLUDE(FMT01)
      F
      DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
      D
      D IN              C                   'INPUT DATA'
      D
      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C
      C                   CLEAR                   FMT01
      C                   WRITE     FMT01
      C
      C*
      C* 按PF03键时,程序结束循环。
      C*
      C     *IN03         DOWEQ     '0'
      C                   READ      FMT01                                LR
      C*
      C* PF04把输入字段传给输出字段。
      C
      C     *IN04         IFEQ      '1'
      C                   MOVEL     Field3        Field2
      C                   MOVEL     Field1        Field3
      C                   CLEAR                   *IN04
      C                   ENDIF
      C                   MOVEL     IN            Field1
      C
      C*
      C* 当按PF11时,在记录格式中定义为输出或输入/输出的所有字段都恢复
      C* 成初始化步骤之后的值。
      C*
      C     *IN11         IFEQ      '1'
      C                   RESET     FMT01
      C                   CLEAR                   *IN11
      C                   ENDIF
      C* 当按PF12时,在记录格式中定义为输出或输入/输出的所有字段都清空。
      C*
      C
      C     *IN12         IFEQ      '1'
      C                   CLEAR                   FMT01
      C                   CLEAR                   *IN12
      C                   ENDIF
      C  N03              WRITE     FMT01
      C                   ENDDO
      C                   SETON                                        LR
      C

论坛徽章:
0
19 [报告]
发表于 2005-06-10 16:38 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

CLOSE(关闭文件)

                操作码                因子1                因子2                结果字段                  指示器
                CLOSE                                        文件名                                        -  ER  -
    明确的CLOSE操作关闭一个或多个文件或设备,并使它们与程序分开。如果不用一个明确的OPEN操作,在程序中不能再使用这个文件。对一个已经关闭的文件做CLOSE操作,要出现错误。
    因子2为将要关闭的文件,可以在因子2上给出键字*ALL表示一次关闭所有的文件。在因子2中,不能规定数组或表文件(在文件描述规范表的18列用T标识)。
    在73和74列上可以说明一个结果指示器,当CLOSE操作没有成功时置为ON。71,72,75和76列必须是空格。
    如果要将一个数组或表写到一个输出文件(用TOFILE键字说明)上,而在LR时,文件是关闭的(通过一个CLOSE操作),则该数组或表不发生输出。如果文件被关闭,要能得到输出必须重新打开它。


      *...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
      CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
      C*
      C*  The explicit CLOSE operation closes FILEB.
      C
      C                   CLOSE     FILEB
      C
      C*
      C*  CLOSE *ALL操作关闭程序中的所有文件。如果再使用它们,要用明确的
      C*  OPEN操作,如果CLOSE操作没有成功,指示器17为ON。
      C*
      C
      C                   CLOSE     *ALL                                 17
      C
  

图127  CLOSE操作

论坛徽章:
0
20 [报告]
发表于 2005-06-10 17:23 |只看该作者

ILE RPG4 C表常用操作码学习笔记(按字母顺序发)

强烈支持!
楼主要翻译这么多也的确不容易啊!辛苦了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP