/COPY コンパイラー指示ステートメントの使用

場合によっては、変換後の RPG IV ソースを実際にコンパイルするまでエラーが 見付からないことがあります。 このタイプの変換エラーは通常、/COPY コンパイラー指示ステートメントの使 用に関連しています。 これらのエラーは 2 つのカテゴリー、すなわち 組み合わせ問題および文脈依存問題に分類されます。 これらの問題が起こる理由およびその分析解決方法の説明は次のとおりです。

組み合わせ問題

RPG III 言語と RPG IV 言語との相違点のために、変換援助プログラムは、特 定のソースの順序を変えなければなりません。この順序変えの例は、RPG III ソース・メンバー TEST1 の場合の ソース変換の例に示されています。データ構造 DS1 の配置を 図 215図 216 で比較した場合に、データ構造 DS1 が レコード様式 FORMAT1 の前にくるように移動されたことが 分ります。

今、RPG III メンバー TEST1 が 2 つのメンバー TEST2 および COPYDS1 に分割 されているものとします。ここで、データ構造 DS1 と名前付き固定情報 CONST1 は、 コピー・メンバー COPYDS1 に入っています。 このコピー・メンバーはソース TEST2 に含まれます。 図 222図 223 は、 それぞれ TEST2 と COPYDS1 のソースを示します。

図 222. TEST2 の RPG III ソース
     H                                                                    TSTPGM
     FFILE1   IF  E                    DISK                               COMM1
     FQSYSPRT O   F     132     OF    LPRINTER
     LQSYSPRT  60FL 56OL
     E                    ARR1    3   3  1               COMM2
     E                    ARR2    3   3  1
     IFORMAT1
     I              OLDNAME                         NAME
      /COPY COPYDS1
     C           ARR1,3    DSPLY
     C                     READ FORMAT1                  01
     C           NAME      DSPLY
     C                     SETON                     LR
     C                     EXCPTOUTPUT
     OQSYSPRT E   01           OUTPUT
     O                         ARR2,3    10
**
123
**
456
図 223. COPYDS1 の RPG III ソース
     I* DATA STRUCTURE COMMENT
     IDS1         DS
     I                                        1   3 FIELD1
     I* NAMED CONSTANT COMMENT
     I              'XYZ'                 C         CONST1                COMM3
     I                                        4   6 ARR1

この場合には、変換援助プログラムはメンバー TEST2 およびコピー・メンバー COPYDS1 の両方を正しく変換します。 ただし、コピー・メンバーは、コンパイル時に 組み込まれる時に、/COPY コンパイラー指示ステートメントが置かれている FORMAT1 の下に 挿入されます。 結果として、コピー・メンバー COPYDS1 のすべてのソース行が "ソース・レコードの順序が 違っている" というエラーを受け取ります。 RPG IV では、定義仕様書は入力仕様書より前になければなりません。

/COPY メンバーの内容が不明なので、変換援助 プログラムは /COPY 指示ステートメントを FORMAT1 の上に移動できなかった ことに、注意してください。

この種の問題の訂正方法には次の 2 つがあります。

  1. CVTRPGSRC コマンドの EXPCPY(*YES) オプションを使用して、変換後の RPG IV ソース・メンバーにすべての /COPY メンバーを組み込む。

    この方法は簡単であり、時間を最も有効に利用できます。ただし、各ソース・メンバーに /COPY メンバーを 含むことにより、アプリケーション・プログラムの保守容易性は減少します。

  2. 変換後に ILE RPG のコンパイラー・リストおよび「WebSphere Development Studio: ILE RPG 言語解説書」に ある情報を使って、手操作でコーディングを訂正する。

この種の問題の例としては、ほかに次のものがあります。

文脈に依存した問題

RPG III では、基本ソース・メンバーの前後の仕様書の文脈がない /COPY メンバーで は仕様書のタイプを判別できないことがあります。 この問題には次の 2 つの場合があります。

上の 2 つの例では、データ構造が仮定され、定義仕様書が作成されます。 入力仕様書コードを含むコメントのブロックも作成されます。 例えば、変換援助プログラムは図 224 のソースを図 226 に示されているコードに変換します。 入力仕様書コードが必要な場合には、定義仕様書を削除し、 対応する入力仕様書からアスタリスクを消去してください。

図 226. 入力フィールドのみのソースを 変換した後の RPG IV ソース
     D* RPG III ソース・メンバーが、以下のフィールド FIELD1 および
     D* FIELD2 を記述するソース・ステートメントしか含んでいない場合、
     D* 変換援助プログラムは変換の方法を判別できません。
     D* これらのステートメントは、(定義仕様書に変換される)
     D* データ構造フィールドである場合も、(入力仕様書に変換される)
     D* プログラム記述ファイル・フィールドである場合もあります。
     D FIELD1                  1      3
     D FIELD2                  4      6
     I*                                 1    3  FIELD1
     I*                                 4    6  FIELD2

この種の問題を訂正するためには 2 つの方法があることを覚えておいてください。CVTRPGSRC コマンドの EXPCPY(*YES) オプションを使用するか、あるいは変換 後にコードを手操作で訂正してください。