ご存知の方も多いと思うが V5R1M0 からは ILE-RPG (RPG400) の内部記述は自由形式
(フリー・フォーマット)で記述が可能になっている。
自由形式の記述は
特にサブ・プロシージャーの呼び出しが頻繁に発生する演算は自由形式で記述すると
見やすくなる。
米国雑誌の著者では「私は今では、すべて自由形式でしか記述しない」と述べている人も
いるくらいである。
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」のような
プロシージャーを作成するとコンパイラーが負荷エラーを起こしてしまうので注意。