初期化サブルーチン
RPG IV 初期化サブルーチンの詳細については、図 1 を 参照してください。
初期化サブルーチンによって、1P 出力の前に演算仕様書を処理することができます。 プログラムの初期化時に実行される特定のサブルーチンは、そのサブルーチン の BEGSR 命令の演算項目 1 に *INZSR を指定することによって定義することがで きます。 初期化サブルーチンとして定義できるのは、1 つのサブルーチンだけ です。 それが呼び出されるのは、プログラム・サイクルのプログラム初期化ステップの終了時になります (すなわち、データ構造およびサブフィールドの初期化、外部標識およびユーザー・データ・フィールドの検索、グローバル・ファイルのオープン、データ域のデータ構造、配列、およびテーブルのロード、*ENTRY PLIST の演算項目 1 への PARM の結果フィールドの転送が、すべて実行された後)。 *INZSR をファイル/プログラム・エラー/例外サブルーチンとして指定すること はできません。
プログラムが LR をオフにして終了した場合には、サブルーチンはプログラムの 初期化ステップの一部なので、初期化サブルーチンはそのプログラムの次の 呼び出し時には自動的に実行されません。 しかし、LR をオフにしたプログラムから出口が 作成される前に初期化サブルー チンが完了していない場合には、そのプログラムの次の呼び出し時に初期化サブ ルーチンが再実行されます。
初期化サブルーチンは、プログラムの初期化時に呼び出される点を除き、プ ログラム内の他のサブルーチンと類似のものです。 これは、EXSR または CASxx 命令によって呼び出したり、このサブルーチンから他のサブルーチンまたは他の プログラムを呼び出すことができます。 サブルーチン内で有効な命令は、RESET 命令を 除いて、初期化サブルーチン内 でもすべて有効です。 RESET 命令が例外であるのは、変数のリセットに使用され る値が、初期化サブルーチンが実行された後でなければ定義されないためです。
初期化サブルーチンの実行中に変数を変更すると、後続の RESET 命令でその変 数が設定される値に影響します。 レコード様式内のフィールドのデフォルトの値 については、たとえば、それを初期化サブルーチンに設定しておき、そのデフォルトの 値を使用するたびにレコード様式に対して RESET を使用することによって、定義 することができます。 初期化サブルーチンでは、また、1P 出力の現在の時刻な どの情報を検索することができます。
サブプロシージャーと関連した *INZSR はありません。 サブプロシージャーがモジュール 内で最初に呼び出されるプロシージャーであっ た場合には、他のグローバル・データの初期化は実行されても、メインプロシージ ャーの *INZSR は実行されません。 メイン・プロシージャーの *INZSR は、そのメイン・プロシージャーが呼び出され た時に実行されます。
