ご存知の方も多いと思うが 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」のような
プロシージャーを作成するとコンパイラーが負荷エラーを起こしてしまうので注意。
