プロシージャーとは、バインドされた呼び出しを使用して呼び出されるルーチンのことです。RPG では、メイン・プロシージャーとサブプロシージャーの 2 種類のプロシージャーを作成することができます。
メイン・プロシージャーは RPG サイクルを使用します。 メイン・プロシージャーはメイン・ソース・セクションで指定されます。メイン・プロシージャーを定義するには特別なコーディングは何も必要ありません。 メイン・プロシージャーは、最初のプロシージャー仕様書より前にあるすべてによって成り立っています。 メイン・プロシージャー用のパラメーターは、グローバル定義仕様書の中のプロトタイプとプロシージャー・インターフェースを使用するか、またはメイン・プロシージャーの演算の中で *ENTRY PLIST を使用して、コーディングすることができます。
グローバル定義で見付かったプロシージャー・インターフェースはすべて、メイン・プロシージャー用のプロシージャー・インターフェースであると想定されます。 メイン・プロシージャー用のプロシージャー・インターフェースには名前が必要です。その名前と一致する名前を持つプロトタイプを、ソースの中でプロシージャー・インターフェースよりも前に置く必要があります。
メイン・プロシージャーの名前は、作成しようとしているモジュールの名前と同じでなければなりません。 この名前は、プロトタイプおよびプロシージャー・インターフェースの名前として使うこともできますし、プロトタイプの EXTPROC キーワードにこの名前を指定することもできます。以下の例では、モジュール CheckFile が作成されます。このメイン・プロシージャーには、次の 3 つのパラメーターがあります。
/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 ... パラメーター file、library、および 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 ... パラメーター file、library、および found を使用してコーディングします
プロトタイプとプロシージャー・インターフェースを使って、メイン・プロシージャーをプログラムとして定義することもできます。 この場合、プロトタイプに対して EXTPGM キーワードを指定します。
/COPY ファイルの CHECKFILEC (プログラム用のプロトタイプ付き):
D CheckFile PR extpgm('CHECKFILE') D file 10a const D library 10a const D found 1N
モジュール・ソースの中で、プロシージャー・インターフェースを同じように定義しておきます。
サブプロシージャーは、メイン・ソース・セクションの後に指定されるプロシ ージャーです。 これは、結合呼び出しを使用してのみ呼び出すことができます。 サブプロシージャーは、いくつかの点でメイン・プロシージャーと異なっています。大 きな相違点は、サブプロシージャーでは実行中に RPG サイクルは使用されない (使用できない) という点です。
また、メイン・ソース・セクションの定義仕様書の中に、 すべてのサブプロシージャーの対応プロトタイプを作成することが必要です。 このプロトタイプは、プログラムまたはプロシージャーを正しく呼び出し、呼び出 し元が確実に正しいパラメーターを渡せるように、コンパイラーによって使用さ れます。
この章では、サブプロシージャーの以下の側面について説明します。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.