サイクル・モジュール

サイクル・モジュールには、RPG プログラム・サイクルを使用するサイクル・メイン・プロシージャーが 1 つ含まれています。 このプロシージャーは、メイン・ソース・セクションで暗黙的に指定されます。 (プログラム・サイクルを参照してください。) メイン・プロシージャーを定義するには特別なコーディングは何も必要ありません。 メイン・プロシージャーは、最初のプロシージャー仕様書より前にあるすべてによって成り立っています。 サイクル・メイン・プロシージャー用のパラメーターは、 グローバル定義仕様書のプロシージャー・インターフェースとオプションのプロトタイプを使用するか、 またはサイクル・メイン・プロシージャーの演算で *ENTRY PLIST を使用することで、コーディングすることができます。

サイクル・メイン・プロシージャーの名前は、作成するモジュールの名前と一致させる必要があります。 プロトタイプおよびプロシージャー・インターフェースにこの名前を使用するか、プロトタイプの EXTPROC キーワード、 あるいはプロトタイプが指定されない場合にはプロシージャー・インターフェースの EXTPROC キーワードにこの名前を指定することができます。

グローバル定義で見つかったプロシージャー・インターフェースはすべて、サイクル・メイン・プロシージャー用のプロシージャー・インターフェースであるとみなされます。 プロトタイプが指定される場合、サイクル・メイン・プロシージャー用のプロシージャー・インターフェースには、名前が必要になります。 その名前と一致する名前を持つプロトタイプを、ソース内のプロシージャー・インターフェースよりも前に置く必要があります。

以下の例では、モジュール CheckFile が作成されます。このサイクル・メイン・プロシージャーには、次の 3 つのパラメーターがあります。
  1. ファイル名 (入力)
  2. ライブラリー名 (入力)
  3. ファイルが見付かったかどうかを示す標識 (出力)

この例では、プロシージャーが別のモジュールから呼び出されるため、 /COPY ファイルにプロトタイプが指定されていなければなりません。

/COPY ファイルの CHECKFILEC (サイクル・メイン・プロシージャー用のプロトタイプ付き):
D CheckFile       PR
D   file                        10a   const
D   library                     10a   const
D   found                        1N
モジュール CheckFile:
 /COPY CHECKFILEC
D CheckFile       PI
D   file                        10a   const
D   library                     10a   const
D   found                        1N
C   ... code using parameters file, library and found
*ENTRY PLIST を使用してこのようにパラメーターを定義します
D file            S             10a   const
D library         S             10a   const
D found           S              1N
C     *ENTRY        PLIST
C                   PARM                    file
C                   PARM                    library
C                   PARM                    found
C   ... code using parameters file, library and found

プロトタイプとプロシージャー・インターフェースを使って、サイクル・メイン・プロシージャーをプログラムとして定義することもできます。 この場合、プロトタイプに対して EXTPGM キーワードを指定します。 この例では、プログラムが別の RPG プログラムによって呼び出されるため、 /COPY ファイルにプロトタイプが指定されていなければなりません。

/COPY ファイルの CHECKFILEC (プログラム用のプロトタイプ付き):
 D CheckFile       PR                  extpgm('CHECKFILE')
 D   file                        10a   const
 D   library                     10a   const
 D   found                        1N

モジュール・ソースの中で、プロシージャー・インターフェースを同じように定義しておきます。

次の例では、プログラムが別の RPG プログラムによって呼び出されないため、 プロトタイプは不要です。 この場合、EXTPGM キーワードがプロシージャー・インターフェースに指定されます。 プロトタイプは指定されないため、プロシージャー・インターフェースの名前は不要です。

EXTPGM キーワードを指定したプロシージャー・インターフェース:
 F ... file specifications
 D                 PI                  extpgm('CUSTREPORT')
 D   custfile                    10a   const
 D   custlib                     10a   const
  ... code using the custfile and custlib parameters