续《写给刚接触RPG的朋友 --- 如何编写RPG程序(2)》

【上文摘要】

RPG一般用来做什么吧,举例说:

1. 整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数据区、DATAQ等非文件目标进行操作,这属于相对最简单的情况;

2. RPG程序对物理文件或者逻辑文件进行读、写、更新、删除操作;

3. RPG程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复杂的情况;

4. RPG程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通讯文件)进行操作,这种情况也比较复杂。

当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各种情况,此处不再深入探讨。

……

上文中讲到了第2点,现在讲解第3点。

【注】假设以下源码文件存放的路径是:库MYLIB、源物理文件MYSRCPF

==============================================================

3. (1)物理文件MYPF和逻辑文件MYLF使用2中建立的就可以了,假如文件物理文件里有以下记录:

=================

PFFLD1       PFFLD2

=================

RCD1               1

RCD2               2

RCD3               3

=================



(2)建立显示文件:

建立步骤和物理文件一样,不过值得注意的是,“Source type”必须为DSPF,表示该文件是显示文件,这里假设文件名为MYDSPF,代码如下:




.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions++++++++++++++++++

*************** Beginning of data *************************************

     A                                                                             DSPSIZ(24 80 *DS3)        

     A                                                                             CA12(12 'CANCEL')         

     A                     R RCDNM                                               

     A                        FLD1                         4     O   4  26DSPATR(UL)                

     A                                                                             DSPATR(HI)                

     A                                                                     4 12'PFFLD1:'                 

     A                                                                     5 12'PFFLD2:'                 

     A                        FLD2                         5S 0O   5 26                          

****************** End of data ****************************************



【注】

(a) 第一行指定显示大小,一般都是这个;

(b) 第二行中CAxx表示程序里要可用F12按键,'CANCEL'表示注释;

(c) 第三行R跟物理文件一样,表明后面Name对应的RCDNM是一个记录名,在显示文件里指一个显示画面;

(d) 第四行FLD1在Name处,这里指字段名,长度是4,O位于“TDpB”的B处,表示该字段只允许做输出用,接着的4位于Lin处,表示屏幕第4行,接下来的26位于Pos处,表示屏幕第26列。到此为止,表明在屏幕第4行第26列的位置输入字段FLD1。

后面的DSPATR是显示文件关键字,是用来指定字段显示属性的,后面的UL是单词UnderLine的缩写,表明该字段带下划线,HI是单词High intensity的缩写,表明该字段高亮显示;

(e) 第五行意思是在屏幕第4行第12列输出字符串“PFFLD1”;



保存文件,编译生成目标文件MYDSPF。





(3)建立对物理文件或者逻辑文件以及显示文件进行简单操作的RPG程序:




.....FFilenameIPEAF........L..I........Device+......KExit++Entry+A....U

*************** Beginning of data *************************************

     FMYLF      IF     E           K        DISK                           

     F                      FMYPF                              KRENAMEFMYLF      

     FMYDSPF  CF   E                     WORKSTN                        

     C*                                                               

.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComments++++

     C                       *IN12         DOWEQ'0'                                   

     C                                          EXFMTRCDNM                                 

     C      12                                LEAVE                                      

     C                       FLD1           IFEQ *BLANKS                               

     C                                          ITER                                       

     C                                          ENDIF                                      

     C                       FLD1           SETLLFMYLF                                 

     C                       FLD1           READEFMYLF                                  90           

     C                       *IN90         IFEQ '0'                                   

     C                                          Z-ADDPFFLD2     FLD2                        

     C                                          ENDIF                                      

     C                                         ENDDO                                      

     C                                         SETON                                            LR               

****************** End of data ****************************************



【注】

(a) 第一行声明逻辑文件MYLF为只读的;

(b) 第二行是第一行的延续,把逻辑文件的记录名FMYPF重命名为FMYLF;

(c) 第三行中的MYDSPF是我们上面建立的显示文件名,

  C位于I处,表明允许对该文件进行写入/读出操作,

  F位于P处,表明该文件是全过程文件,一般都这么写,

  E位于F处,表明该文件是外部文件,

  WORKSTN位于Device处,表明该文件是显示文件或报表文件,

这行和第一行声明很相似。

(d) 第四行中的*IN12表示指示器12,这里为什么只用这个指示器,而不用别的呢?看看上面的显示文件MYDSPF的第二行吧,还记得吗?我们通过语句“CA12(12 'CANCEL') ”声明了程序运行时要用到按键F12,这是提供给用户进行操作用的。该句的意思是当按键没被按下时,进入循环;

(e) 第五行中的EXFMT是用来显示一个画面,并且停留着等待用户做出操作,该句意思是显示画面RCDNM,并且程序停留在该处不继续执行;

(f) 第六行的LEAVE表示退出循环,12位于N01的01处就是按键F12的状态,当用户按下F12,那么指示器就变为‘1’,这时就执行该句,反之,不执行;

(g) 第七行判断画面中的字段FLD1是否为空;

(h) 第八行的ITER表示跳到循环的开始处;

(i) 第七、八、九行的意思是,如果FLD1为空的话,那么跳到循环开始处执行;

(j) 第十行是把指针设置到文件头;

(k) 第十一行是读逻辑文件中字段PFFLD1的值等于FLD1的记录;

(l) 第十二行表示读到记录;

(m) 第十三行表示把逻辑文件中读到的记录的PFFLD2字段值赋给显示画面中的字段FLD2;



============================================================



到此为止,你对显示文件应该有了一点点的了解!

由于显示文件操作起来相对复杂,接下来的功夫就靠各位刚入门的朋友多参考别人写的例子,运行运行,这样体会会更深,收获也会更大的!




轉自:新儒as/400家園

狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()