組み合わせ問題
RPG III 言語と RPG IV 言語との相違点のために、変換援助プログラムは、特 定のソースの順序を変えなければなりません。この順序変えの例は、RPG III ソース・メンバー TEST1 の場合の ソース変換の例に示されています。データ構造 DS1 の配置を 図 1 と 図 2 で比較した場合に、データ構造 DS1 が レコード様式 FORMAT1 の前にくるように移動されたことが 分ります。
今、RPG III メンバー TEST1 が 2 つのメンバー TEST2 および COPYDS1 に分割 されているものとします。ここで、データ構造 DS1 と名前付き固定情報 CONST1 は、 コピー・メンバー COPYDS1 に入っています。 このコピー・メンバーはソース TEST2 に含まれます。 図 1 と 図 2 は、 それぞれ TEST2 と COPYDS1 のソースを示します。
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
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 の上に移動できなかった ことに、注意してください。
- CVTRPGSRC コマンドの EXPCPY(*YES) オプションを使用して、変換後の
RPG IV ソース・メンバーにすべての /COPY メンバーを組み込む。
この方法は簡単であり、時間を最も有効に利用できます。ただし、各ソース・メンバーに /COPY メンバーを 含むことにより、アプリケーション・プログラムの保守容易性は減少します。
- ILE RPG コンパイラー・リストや「IBM® Rational® Development Studio for i: ILE RPG 解説書」の情報を使用して、変換後にコードを手動で修正する。
- ファイル仕様書 (補足 L) およびレコード・アドレス・ファイル
RPG III の場合、ファイル仕様書 (補足 L) およびファイル仕様書 (補足 E) のレコード・アドレス・ファイルは、ファイル記述仕様書のキーワード (RAFDATA、FORMLEN、および FORMOFL) に変更されます。 /COPY メンバーの内容に、ファイル仕様書 (補足 L) またはファイル仕様書 (補足 E) の レコード・アドレス・ファイル、あるいはその両方が含まれているが、 対応するファイル記述仕様書が含まれていない場合には、 変換援助プログラムはキーワードの挿入位置が分りません。
- ファイル仕様書 (補足 E) の配列およびデータ構造サブフィールド
ソース変換の例で述べたように、RPG IV では、独立型配列とデータ 構造サブフィールドを同じ名前で定義することはできません。したがって、例 TEST1 (図 2) で示したように、変換 援助プログラムはこの 2 つの定義を組み合わせなければなりません。しかし、配列およびデータ構造サブフィールドが同じソース・メンバーにない (すなわち、一方または両方が /COPY メンバーにある) 場合には、 この組み合わせを実行することはできず、結果としてコンパイル時エラーと なります。
- 組み合わされたコンパイル時配列およびコンパイル時データ (**) レコード
例 TEST1 (図 2) で示したように、コンパイル時配列がデー タ構造サブフィールド定義と組み合わされた場合には、配列データのロードが 影響を受けることがあります。 この問題を解決するために、少なくとも 1 つのコンパイル時配列が組み合わ された場合には、コンパイル時配列データが新しい **CTDATA 形式に変更され ます。 しかし、配列およびデータが同じソース・メンバーにない (すなわち、一方 または両方が COPY メンバーにある) 場合には、**CTDATA 形式を使用するコンパイル時 データ・レコードの命名は適切に進めることはできません。