ご存知の方も多いと思うが V5R1M0 からは ILE-RPG (RPG400) の内部記述は自由形式
(フリー・フォーマット)で記述が可能になっている。
自由形式の記述は
- /FREE から始まり、/END-FREE で終わる。(/FREE などの位置は固定)
- 演算仕様書を示す「C」は不要である。
- EVAL 命令を使う場合、「EVAL」は不要である。
- 演算行の最後には「;」(セミコロン) が必要である。
- 桁位置の指定がないので構造化した見やすいソースとなる。
特にサブ・プロシージャーの呼び出しが頻繁に発生する演算は自由形式で記述すると
見やすくなる。
米国雑誌の著者では「私は今では、すべて自由形式でしか記述しない」と述べている人も
いるくらいである。
【例】従来のILE-RPG の記述
CSR IF RT = *OFF CSR CALLP SAVE_STACK(%ADDR(STACK)) CSR CALLP WRITE_RECORD('DSPHEAD ') CSR CALLP HTMLOUT('DSPHEAD ':DSPHEAD_HTM) CSR ADD 1 LV CSR EVAL RT = *ON CSR RETURN CSR END CSR EVAL RT = *OFF CSR CALLP READ_RECORD('DSPHEAD ')
【例】自由形式での記述
/FREE IF RT = *OFF ; SAVE_STACK(%ADDR(STACK)); // スタックを保存 WRITE_RECORD('DSPHEAD '); //HTML へ書き込み HTMLOUT('DSPHEAD ':DSPHEAD_HTM);// HTML 出力 LV = LV + 1; RT = *ON; RETURN; ENDIF ; RT = *OFF; READ_RECORD('DSPHEAD '); //HTML の読み取り /END-FREE
【 解説 】
CALLP
がないので WRITE_RECORD
や HTMLOUT
など新しいRPGの命令で
あるかのようにも見える。
しかし従来のRPG にある命令と同じ名前の命令、例えば「EXFMT」のような
プロシージャーを作成するとコンパイラーが負荷エラーを起こしてしまうので注意。