プロシージャーおよびサブプロシージャー

プロシージャーとは、バインドされた呼び出しを使用して呼び出されるルーチンのことです。RPG では、メイン・プロシージャーとサブプロシージャーの 2 種類のプロシージャーを作成することができます。

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

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

メイン・プロシージャーの名前は、作成しようとしているモジュールの名前と同じでなければなりません。 この名前は、プロトタイプおよびプロシージャー・インターフェースの名前として使うこともできますし、プロトタイプの EXTPROC キーワードにこの名前を指定することもできます。以下の例では、モジュール CheckFile が作成されます。このメイン・プロシージャーには、次の 3 つのパラメーターがあります。

  1. ファイル名 (入力)
  2. ライブラリー名 (入力)
  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 サイクルは使用されない (使用できない) という点です。

また、メイン・ソース・セクションの定義仕様書の中に、 すべてのサブプロシージャーの対応プロトタイプを作成することが必要です。 このプロトタイプは、プログラムまたはプロシージャーを正しく呼び出し、呼び出 し元が確実に正しいパラメーターを渡せるように、コンパイラーによって使用さ れます。

この章では、サブプロシージャーの以下の側面について説明します。