サイクル・モジュールには、RPG プログラム・サイクルを使用するサイクル・メイン・プロシージャーが 1 つ含まれています。 このプロシージャーは、メイン・ソース・セクションで暗黙的に指定されます。 (プログラム・サイクルを参照してください。) メイン・プロシージャーを定義するには特別なコーディングは何も必要ありません。 メイン・プロシージャーは、最初のプロシージャー仕様書より前にあるすべてによって成り立っています。 サイクル・メイン・プロシージャー用のパラメーターは、 グローバル定義仕様書のプロシージャー・インターフェースとオプションのプロトタイプを使用するか、 またはサイクル・メイン・プロシージャーの演算で *ENTRY PLIST を使用することで、コーディングすることができます。
サイクル・メイン・プロシージャーの名前は、作成するモジュールの名前と一致させる必要があります。 プロトタイプおよびプロシージャー・インターフェースにこの名前を使用するか、プロトタイプの EXTPROC キーワード、 あるいはプロトタイプが指定されない場合にはプロシージャー・インターフェースの EXTPROC キーワードにこの名前を指定することができます。
グローバル定義で見つかったプロシージャー・インターフェースはすべて、サイクル・メイン・プロシージャー用のプロシージャー・インターフェースであるとみなされます。 プロトタイプが指定される場合、サイクル・メイン・プロシージャー用のプロシージャー・インターフェースには、名前が必要になります。 その名前と一致する名前を持つプロトタイプを、ソース内のプロシージャー・インターフェースよりも前に置く必要があります。
この例では、プロシージャーが別のモジュールから呼び出されるため、 /COPY ファイルにプロトタイプが指定されていなければなりません。
D CheckFile PR
D file 10a const
D library 10a const
D found 1N
/COPY CHECKFILEC
D CheckFile PI
D file 10a const
D library 10a const
D found 1N
C ... code using parameters file, library and found
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 ファイルにプロトタイプが指定されていなければなりません。
D CheckFile PR extpgm('CHECKFILE')
D file 10a const
D library 10a const
D found 1N
モジュール・ソースの中で、プロシージャー・インターフェースを同じように定義しておきます。
次の例では、プログラムが別の RPG プログラムによって呼び出されないため、 プロトタイプは不要です。 この場合、EXTPGM キーワードがプロシージャー・インターフェースに指定されます。 プロトタイプは指定されないため、プロシージャー・インターフェースの名前は不要です。
F ... file specifications
D PI extpgm('CUSTREPORT')
D custfile 10a const
D custlib 10a const
... code using the custfile and custlib parameters