ソース変換の例

次の例は、RPG IV に変換される RPG III ソース・メンバーの例を示しています。図 1 は、RPG III バージョンのソースを示しています。

図 1. TEST1 の 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 に示します。

図 2. TEST1 の変換後の (RPG IV) ソース
 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 行目を参照してください。