RPG

55.SEU で ENDxx を見つけるには?

RPGソースの中で CASxxDOxxIFxxSELECT を階層的に多用している場合、
どれが対応する ENDxx であるかを調べるのは手間がかかる。
コンパイル・リストを追っていくのも大変である。
このようなときに SEU で階層構造を調べる方法をご紹介しよう。
SEU で RPGソースをオープンして次のようなソースであったとする。

0203.00 C     A001          IFGT      B001
0204.00 C     A002          IFGT      B001
0205.00 C                   Z-ADD     A001          BB
0206.00 C                   Z-ADD     A002          BB
0207.00 C                   Z-ADD     A003          BB
0208.00 C                   END                       
0209.00 C                   Z-ADD     A004          BB
0210.00 C                   END

最下位の 204.00 から 208.00 の行番号の位置に文字'XX' を打鍵して実行キーを押すと

0203.00 C     A001          IFGT      B001
- - - - ------------- 5  除外データ・レコード  -------------------
0209.00 C                   Z-ADD     A004          BB            
0210.00 C                   END

のような表示となる。
XX - XX はプロック単位の除外(非表示)を行うコマンドである。
SEU上で見えなくなったからといって削除された訳ではなく、単に非表示となっているだけである。

上記の例では -- 5 除外データ・レコード -- となっているので、5行のレコードが
除外されていることがわかる。
このように XX - XX を繰り返していくと対応する ENDxx を見つけることができる。

なお、除外を元に戻すには -- 5 除外データ・レコード -- の行に SF5 というように
元に戻す行数とともに指定する必要がある。

構造化プログラムと称してあまりIF-END などの構造を深くしてしまうと後々でのソースの解析が大変となる。
この方法は他人が作成したソースなどの解析にも役立つはずである。