RPG

77. V5R1M0 からの RPG自由形式の記述

ご存知の方も多いと思うが 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_RECORDHTMLOUT など新しいRPGの命令で
あるかのようにも見える。

しかし従来のRPG にある命令と同じ名前の命令、例えば「EXFMT」のような

プロシージャーを作成するとコンパイラーが負荷エラーを起こしてしまうので注意。