ソース変換の例
次の例は、RPG IV に変換される RPG III ソース・メンバーの例を示しています。図 1 は、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
I* DATA STRUCTURE COMMENT
IDS1 DS
I 1 3 FIELD1
I* NAMED CONSTANT COMMENT
I 'XYZ' C CONST1 COMM3
I 4 6 ARR1
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
CVTRPGSRC FROMFILE(MYLIB/QRPGSRC) FROMMBR(TEST1)
TOFILE(MYLIB/QRPGLESRC) INSRTPL(*YES)
変換後のソース・メンバーを 図 2 に示します。
1 .....H*unctions+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Comments+++++++++
2 H DFTNAME(TSTPGM)
3 .....F*ilename++IPEASFRlen+LKlen+AIDevice+.Functions++++++++++++++++++++++++++++Comments+++++++++
4 FFILE1 IF E DISK COMM1
5 FQSYSPRT O F 132 PRINTER OFLIND(*INOF)
6 F FORMLEN(60)
7 F FORMOFL(56)
8 .....D*ame+++++++++++ETDsFrom+++To/L+++IDc.Functions++++++++++++++++++++++++++++Comments+++++++++
9 D ARR2 S 1 DIM(3) CTDATA PERRCD(3)
10 D* DATA STRUCTURE COMMENT
11 D DS1 DS
12 D FIELD1 1 3
13 D ARR1 4 6
14 D DIM(3) CTDATA PERRCD(3) COMM2
15 D* NAMED CONSTANT COMMENT
16 D CONST1 C CONST('XYZ') COMM3
17 .....I*ilename++SqNORiPos1+NCCPos2+NCCPos3+NCC..................................Comments+++++++++
18 .....I*.............Ext_field+Fmt+SPFrom+To+++DcField+++++++++L1M1FrP1MnZr......Comments+++++++++
19 IFORMAT1
20 I OLDNAME NAME
21 .....C*0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments+++++++++
22 C ARR1(3) DSPLY
23 C READ FORMAT1 01
24 C NAME DSPLY
25 C SETON LR
26 C EXCEPT OUTPUT
27 OQSYSPRT E OUTPUT 01
28 O ARR2(3) 10
29 **CTDATA ARR1
30 123
31 **CTDATA ARR2
32 456
- 新しい仕様書タイプは、H (制御)、F (ファイル)、D (定義)、I (入力)、C (演算)、
および O (出力) です。これらはこの順に入力しなければなりません。
CVTRPGSRC に INSRTPL(*YES) が指定されていたので、変換後のソースには新 しいタイプ用の仕様書テンプレートが入っています。
- 制御、ファイル、および定義仕様書は、キーワード指向です。行 2、4 ~ 7、および 9 ~ 16 を参照してください。
- ILE メンバーには新規の仕様書タイプである定義があります。 これはデータ構造の他に、
独立型フィールド、配列、および名前付きの固定情報も定義するために使用されます。
この例では、
- ARR2 は、独立型配列として定義されています (9 行目)。
- データ構造 DS1 は、2 つのサブフィールド FIELD1 および ARR1 をもつデ ータ構造として定義されています (11 ~ 14 行目)。
- 固定情報 CONST1 は、固定情報として定義されています (16 行目)。
入力 (I) 仕様書は、現在では、ファイルのレコードおよびフィールドを定義す るためにのみ、使用されています。 19 ~ 20 行目を参照してください。
- ファイル仕様書 (補足 E) は除外されています。 配列とテーブルは、定義仕様書を使用して定義されています。
- 補足仕様書のレコード・アドレス・ファイル (RAF) は、ファイル仕様書の キーワード RAFDATA で置き換えられています。
- ファイル仕様書 (補足 L) は除外されています。 この仕様書は、ファイル仕様書のキーワード FORMLEN および FORMOFL で 置き換えられています。6 および 7 行目を参照してください。
- フィールドおよびファイルの 10 桁の名前が使えるよう、すべての仕様書タイプが拡張されています。
- RPG IV では、データ構造 (定義仕様書を使って定義される) は入力仕様書より前になければなりません。
変換後のソースでは、データ構造 DS1 (11 行目) が、FORMAT1 情報 (19 行目) を含む仕様書より前に来るように移動されていることに、注意してください。
- RPG III では、名前付き固定情報をデータ構造の真ん中に置くことができます。
これは RPG IV では許されません。
変換後のソースでは、CONST1 (16 行目) は、データ構造 DS1 (11 行目) の後に来るように移動されています。
- 仕様書が移動される場合には、その前にあるコメントも一緒に移動されます。
変換後のソースでは、CONST1 および DS1 の上にあったコメントは、それに続く仕様書と一緒に移動されました。
- RPG III では、配列をデータ構造サブフィールドとして定義するためには、
配列とデータ構造サブフィールドの両方を同じ名前で定義します。
この二重定義は RPG IV では許されません。代わりに、新しいキーワード構文を使用してサブフィールドを定義する時に、配列属性を指定します。
この例では、ARR1 は OPM バージョンで 2 度定義されていますが、 変換後のソースでは単一の定義にマージされています。13 ~ 14 行目を参照してください。
RPG III 配列仕様書の組み合わせの結果として、配列定義の順序が変更されることがあります。 順序が変更された配列がコンパイル時配列の場合には、配列データのロードは影響を受けることがあります。 この問題を解決するため RPG IV では、** レコードにはキーワード形式を提供します。** の後には、キーワード FTRANS、ALTSEQ、 または CTDATA の 1 つを入力します。 キーワードが CTDATA の場合には、10 ~ 19 桁目に配列またはテーブル名を入力します。
この例では、ARR2 の 2 つの RPG III 仕様書の組み合わせのために、配列 ARR2 は、 配列 ARR1 より先行しています。 変換援助プログラムは、変換後の ** レコードにキーワードおよび配列名を挿入し、 これによりコンパイル時データの正しいロードは保証されます。29 と 31 行目を参照してください。
- 配列構文が変更されたことに注意してください。RPG III での表記 ARR1,3 は RPG IV では ARR1(3) となります。28 行目を参照してください。