缩进的字符。如果不想缩进应指定INDENT(*NONE),这是默认值。如果想要缩进的话,那么最多指定两个字符来标记缩进。
例如,要指定让结构化操作缩进,并以显示(|)和空格标记,应指定INDENT(‘|’)。 如果要求缩进,那么正常情况下出现在源程序清单中的一些信息要被删除,这样才能可以缩进。以下的内容不会出现在清单中:
DO编号 最后一次更新 页/行
如果在指定缩进的同时指定了清单调试视图,那么在调试视图中不会出现缩进。 图19显示了缩进产生的源程序清单。缩进标记为‘| ’。
Line <---------------------- Source Specifications
----------------------------------------------><---- Comments ----> Src Seq Number ....1....+....2....+<-------- 26 - 35
--------->....4....+....5....+....6....+....7....+....8....+....9....+...10 Id Number 33 000000 002000
34 C* MAINLINE * 000000 002100 35 000000 002200 002300 002400 002500
000000 002600 002700
----20 002800
C********************************************************************
C********************************************************************
36 C WRITE FOOT1
37 C WRITE HEAD
38 C EXFMT PROMPT
39 C*
40 C DOW NOT *IN03
41 C CSTKEY | SETLL CMLREC2
42 C | IF *IN02
002900 003000 003100 003200 003300 003400 003500 003600 003700 003800 003900 004000 004100 004200 004300
000000 004400
LR---- 004500
图19 有缩进的清单的样本源程序
43 C | | MOVE '1' *IN61
44 C | ELSE
45 C | | EXSR SFLPRC
46 C | END
47 C | IF NOT *IN03
48 C | | IF *IN04
49 C | | | IF *IN61
50 C | | | | WRITE FOOT1
51 C | | | | WRITE HEAD
52 C | | | ENDIF
53 C | | | EXFMT PROMPT
54 C | | ENDIF
55 C | ENDIF
56 C ENDDO
57 C*
58 C SETON
2.2.2.2 改正编译错误
对改正编译错误有用的编译清单主要部分有:
源语句部分 附加信息部分 /COPY表部分 各类总计部分
出现在源语句部分的联机诊断信息,在源语句段上找到的错误,编译程序立即标识,其它错误是在编译期间接到附加信息后标识出的。提示这些错误的信息是在源语句部分和附加信息部分中标识的。
为了帮助改正编译错误,也许需要在清单中包括第二信息文本—特别对于RPG初学者。要想这样做的话,需在建立命令中指定OPTION(*SECLVL)参数。这样就会把第二级信息加到信息总计中的信息清单中。
最后,要记住编译清单是程序的一个记录。因此,如果有错误的话,可以使用清单来检查源程序。除了源语句外,要检查的编译清单部分还包括:
匹配字段表
如果你使用有匹配字段的PRG程序周期,那么可以用这个表来确定编译程序是否象预期的那样识别他们。
以偏移量定义的输出字段与文本或字段名一起列出起始和结束位置,以此确定编译程是否象预想的那样识别输入。 编译时数据。
列出ALTSEQ和FIRANS记录和表,NLSS信息和表也列出来。表和数组都被明确的标识出来。用这些来确定编译程序是否象预想地那样识别它们。
2.2.2.2.1 使用联机诊断信息
有两种联机诊断信息:定位类和非定位类。
定位类信息确切地指出了错误发生的位置,图20显示了定位类联机诊断信息的例子。
Line <---------------------- Source Specifications
----------------------------><---- Comments ----> Do Page Change Src Seq
Number ....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+...10 Num Line Date Id Number
63 C SETOFF _12___ 003100
======> aabb
======> cccc
*RNF5051 30 a Resulting-Indicator entry is not valid; defaults to blanks. *RNF5051 30 b Resulting-Indicator entry is not valid; defaults to blanks. *RNF5053 30 c Resulting-Indicators entry is blank for specified operation. 图20 定位类联机诊断信息样本
在这个例子中,没有在71-72或73-74列而是错误地在72-73列设置了一个指示器,三个定位符号‘aa’,‘bb’,和‘cc’指出了发生错误的地方。正确的列位置和解释的变量为高亮度显示.在这里,信息RNF5051指出被‘aa’和‘bb’标记的字段没有有效的指示器。因为没有有效的指示器,所以编译程序假定字段为空,但。SETOFF操作要求有指示器。因此产生了另一个错误,就是信息RNF5053中字段‘CCCC’所指出的。
错误是按它出现的顺序来排列的。一般的,要先改正先出现的错误,然后再改后面的。 非定位类联机诊断信息也指示错误。由于错误的性质,它们不能指出在源语句中的确定位置。而只能指出问题。图21显示了非定位类联机诊断信息的例子。
Line <---------------------- Source Specifications
----------------------------><---- Comments ----> Do Page Change Src Seq
Number ....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+...10 Num Line Date Id Number
12345 000600 000700 000800 000900
12345 100792 001000
6 FINTERN IS F 72 DISK
7 FQSYSPRT O F 256 DISK
8 FF7145A CT F 28 DISK
9 FF7145B CT F 28 DISK
10 F*
*RNF2025 30 6 INTERN defaults to primary file.
11 DARRA S 28 FROMFILE(F7145A) TOFILE(F7145A) 001100
图21 非定位类联机诊断信息样本
此例子中有几个文件规范表,其中一个定义做次文件,但是没有定义主文件。因为主文件是必需的,所以产生了错误信息(RNF2025)。编译程序不能指出应定义哪一行的文件做主文件。当下一种规范表开始时,它就会认为不存在这样的行。
2.2.2.2.2 使用附加诊断信息
附加诊断信息部分指出了当一行或多行编码整体看起来时会出现的错误,这些信息一般不放在出现问题的编码行,编译程序在写有问题的程序源码时,还不知道错误是否存在。但是,当能够发现错误时,信息行就会包括与此相关的源语句行号。
2.2.2.2.3 使用SEU显示编译清单
SEU的分屏/显示功能(F15)允许显示输出队列中的编译清单,可以在修改源码的同时,查看上一次的编译结果。
在显示时可以查找错误,并改正那些有错误的源语句。要查找错误,在显示屏幕的SEU命令行上键入F *ERR。有第一(或下一个)错误的行就会高亮度显示,并且这个错误的第一级信息文本在屏幕底部出现。可以把光标放在底部的信息上,然后按F1(帮助)键,来显示第二级信息文本。
只要有可能,编辑清单中的错误信息会指出有错误行的SEU顺序号。行号出现在信息文本之前。
关于显示编译清单的完整信息,参考 ADTS/400:源语句录入实用程序。
2.2.2.3 改正运行时错误
清单的源语句部分,对于改正运行时错误也是有用的。许多运行时错误都指出了错误的语句号。清单左边的行号与运行时错误信息的语句号相对应。源语句ID号和编译清单右
边的SEU顺序号指出了源成员和记录。
这样就可使用两者来确定哪一行需要检查。
2.2.2.3.1
改正运行时错误经常用到程序调试。考虑以下问题可能在调试程序时有帮助:
如果使用源语句调试那么可选择以下调试显示:*STMT,*SOURCE,*LIST, *COPY,*ALL。
如果要在调试时用编译清单作为辅助工具可以指定OUTPUT(*PRINT)从而得到一
选择有Debug窗口选项的编译清单可选项
个清单。如果使用源语句显示进行调试的话,那么编译清单是很重要的。因为设置断
如果考虑做调试,那么可能需要用参数
DBGVIEW(*ALL),OUTPUT(*PRINT)和OPTION(*SHOWCPY)来编译源程序,这样允许使如果指定了DBGVIEW(*LIST),那么调试时有效的信息取决于OPTION参数,只有指
点的行号就是那些在清单中指出的行号。
用源语句显示或清单显示,并包括/COPY成员。
2.2.2.4 使用编译清单做维护
没有错误的程序的编译清单可用来作为文档,当:
文档用于向新的程序员教授程序。 日后更新程序。
定了OPTION(*SHOWCPY *EXPDDS),才能包括/COPY成员和外部描述文件。
在这种情况下,应当有完整的清单,它是由规定参数OUTPUT(*PRINT)和OPTION(*XREF *SHOWCPY *PDDS *EXT)产生的。注意对于建立命令以上参数的值都是默认值。 对程序维护有用的是在清单的序言部分,它告诉你:
谁编译了模块/程序
用哪个源码来产生的模块/程序 当编译模块/程序时使用了哪些选项
在以后要改动程序时,可能需要知道命令选项(例如,选择的调试显示或使用的连接目录)。