RPG モジュールでのプログラム・フロー: サイクル対リニア

RPG モジュールの論理の一部は、ILE RPG コンパイラーによって提供されます。 選択したモジュールのタイプに応じて、モジュールの制御フローの大部分または一部分が、この提供された論理によって制御されます。 RPG モジュールには、完全な RPG サイクルがデフォルトで含まれています。 このサイクルは、*INIT フェーズで始まり、*TERM フェーズで終わります。 その他 2 つのタイプの RPG モジュールには、完全な RPG サイクルは含まれません。RPG サイクルで唯一残されるものは、*INIT フェーズに類似しているモジュールの初期化です。 ILE RPG コンパイラーは、追加の暗黙論理 (例: サブプロシージャーでのローカル・ファイルの暗黙的なオープンとクローズ) を提供します。 これは、RPG サイクルとは区別されます。

すべての ILE RPG モジュールには、プロシージャーを 1 つ以上含めることができます。

3 つのタイプの RPG モジュールは、モジュール内のメイン・プロシージャーの性質によって区別されます。

プログラムまたはサービス・プログラムは、複数のモジュールで構成することができ、各モジュールに RPG メイン・プロシージャーを含めることができます。 RPG モジュールがプログラムのプログラム入り口モジュールとなるように選択されている場合は、プログラム呼び出しを使用してメイン・プロシージャーを呼び出します。 RPG モジュールがプログラムのプログラム入り口モジュールでない場合、またはそれがサービス・プログラムのモジュールである場合には、結合呼び出しを使用してメイン・プロシージャーを呼び出します。 結合呼び出しを使用したメイン・プロシージャーの呼び出しは、サイクル・メイン・プロシージャーに対してしか使用できません。 モジュールにリニア・メイン・プロシージャーが含まれており、そのモジュールがプログラム入り口モジュールになるよう選択されていない場合、そのプロシージャーを呼び出すことはできません。
サイクル・メイン・プロシージャーを含むモジュール
このモジュールには、サイクル・メイン・プロシージャーが 1 つと、サブプロシージャーが 1 つ以上 (ゼロの場合もあり) 含まれます。 サイクル・メイン・プロシージャーには、完全な RPG サイクルの論理が含まれています。 サイクル・メイン・プロシージャーは、結合呼び出しまたはプログラム呼び出しを通じて呼び出すことができます。 詳細については、サイクル・モジュールおよび プログラム・サイクルを参照 してください。
リニア・メイン・プロシージャーを含むモジュール
このモジュールには、リニア・メイン・プロシージャーが 1 つと、通常のサブプロシージャーが 1 つ以上 (ゼロの場合もあり) 含まれます。 リニア・メイン・プロシージャーは、制御仕様書では MAIN キーワードで識別されます。 メイン・プロシージャー自体は、サブプロシージャーとして (プロシージャー仕様書に従って) コーディングされます。 リニア・メイン・プロシージャーは、プログラム呼び出しを通じてのみ呼び出すことができます。 結合呼び出しで呼び出すことはできません。
注: 呼び出し方法を除いて、リニア・メイン・プロシージャーはサブプロシージャーとみなされます。
このモジュールには、RPG サイクルの論理は含まれていません。 詳しくは、リニア・メイン・モジュールを参照してください。
メイン・プロシージャーを含まないモジュール
制御仕様書の NOMAIN キーワードは、モジュールにメイン・プロシージャーがないことを示しています。 このモジュールに含まれているのは、サブプロシージャーのみです。 このモジュールには、RPG サイクルの論理は含まれていません。

このタイプのモジュールは、メイン・プロシージャーが含まれていないため、プログラムのプログラム入り口モジュールにすることはできません。

詳しくは、NOMAIN モジュールを参照してください。

表 1. RPG モジュール・タイプの要約
モジュール・タイプ キーワード 許可されるサイクル機能 メイン・プロシージャー 変更の始まり グローバル変数の初期化、 グローバル・ファイルのオープン、および UDS データ域のロック 変更の終わり グローバル・ファイルの暗黙的なクローズおよびデータ域のアンロック
サイクル・メイン   あり メイン・ソース・セクションで暗黙的に定義される
  • 活動化グループが作成された後に、モジュールの最初のプロシージャーが呼び出されたとき。
  • メイン・プロシージャーの呼び出し時に、メイン・プロシージャーが LR オンの状態で終了してしまっているとき、または異常終了してしまっているとき。
メイン・プロシージャーが LR オンの状態で終了したとき、または異常終了したとき。
リニア・メイン MAIN なし MAIN キーワードおよびプロシージャー仕様書で明示的に定義される 活動化グループが作成された後にメイン・プロシージャーが初めて呼び出されたとき、または何らかの形でサブプロシージャーが初めて呼び出されたとき。 なし
メインなし NOMAIN なし なし。NOMAIN キーワードの存在によって示される。 活動化グループが作成された後に、モジュールの最初のプロシージャーが呼び出されたとき なし