詳細な RPG IV オブジェクト・プログラム・サイクル
図 1 は、RPG IV プログラム・サイクルの詳細
なフローの特定のステップを示しています。 以下の説明の項目番号は、図の中の
番号を示しています。図 2 および 図 1 に
は、ルーチンがフローチャートで示されています。
- 1
- RT 標識がオフに設定されます。 *ENTRY PLIST の指定がある場合には、パラメーターが 分析解決されます。
- 2
- RPG IV はプログラムの最初の呼び出しであるかどうかを検査します。 これが 最初の呼び出しであれば、プログラムの初期化が続行されます。 そうでない場合 には、結果のフィールドを *ENTRY PLIST の PARM ステートメントの演算項目 1 に転送し、ステップ 5 に分岐します。
- 3
- プログラムがサイクルの *INIT で初期化されます。 ここで行われる処理は、以下のとおりです: データ構造およびサブフィールドの初期化の実行、ユーザー日付フィールドの設定、グローバル・ファイルのオープン、データ域のすべてのデータ構造、配列、およびテーブルのロード、*ENTRY PLIST の PARM ステートメントの演算項目 1 への結果フィールドの転送、初期化サブルーチン *INZSR の実行、RESET 命令のための構造および変数の保管。 グローバル・ファイルは、ファイル仕様書での指定とは逆の順序でオープンされます。
- 4
- 見出しおよび明細行 (出力仕様の 17 桁目の H または D によって識別され る) を、最初のレコードが読み取られる前に書き出します。 見出し行と 明細行は常に同時に処理されます。 条件付け標識の指定がある場合には、適切な標識設定値が満たされて いなければなりません。 フェッチ・オーバーフロー・ルーチン論理が指定され、 オーバーフロー標識が オンの場合には、該当するオーバーフロー行が書き出されます。 ファイル変換の指定がある場合には、見出し行、明細行、およびオーバーフロー 出力について変換が実行されます。 ENDSR 命令の演算項目 2 に値 *DETL が入って いる場合には、このステップがプログラム内の戻り点になります。
- 5
- 停止標識 (H1 から H9) がテストされます。 すべての停止標識がオフであれば、
プログラムはステップ 8 に分岐します。停止標識は、プログラムのどの時点でも
オンに設定することができます。
ENDSR 命令の演算項目 2 に値 *GETIN が入っている場合には、このステップがプ
ログラム内の戻り点になります。
- a.
- 停止標識が 1 つでもオンであれば、メッセージがユーザーに出されます。
- b.
- 続行するという応答の場合には、停止標識はオフに設定され、プログラムは ステップ 5 に戻ります。 応答が取り消しの場合には、プログラムはステップ 6 に進みます。
- 6
- ダンプをとって取り消すという応答の場合には、プログラムはステップ 7 に 進みます。そうでない場合には、プログラムはステップ 36 に分岐します。
- 7
- プログラムがダンプを出し、ステップ 36 (異常終了) に分岐します。
- 8
- レコード識別、1P (1 ページ目)、および制御レベル (L1 から L9) 標識が、す べてオフに設定されます。 オーバーフロー標識 (OA から OG、OV) は、前の明細演算または 明細出力でオンに設定されたのでなければ、すべてオフに設定されます。その他 のオンの標識はオンのまま残ります。
- 9
- LR (最終レコード) 標識がオンの場合には、プログラムはステップ 10 から 続行されます。 オンでなければ、プログラムはステップ 11 に分岐します。
- 10
- 該当する制御レベル (L1 から L9) 標識がオンに設定され、プログラムはステ ップ 29 に分岐します。
- 11
- RT 標識がオンの場合には、プログラムはステップ 12 から続行され、そうで ない場合には、プログラムはステップ 14 に分岐します。
- 12
- *ENTRY PLIST のパラメーターの演算項目 2 が結果のフィールドへ 転送されます。
- 13
- RT 標識がオンである (戻りコードが 0 に設定されている) 場合には、プログラムは 呼び出し元に戻ります。
- 14
- プログラムに 1 次ファイルが存在する場合には、プログラムはス テップ 15 から続行され、そうでない場合には、プログラムは ステップ 29 に分岐します。
- 15
- 最初のプログラム・サイクルでは、プログラム中の 1 次ファイル および各 2 次ファイルから最初のレコードが読み取られます。 入力レコードの ファイル変換が実行されます。 その他のプログラム・サイクルでは、最後に処理された ファイルからレコードが 読み取られます。 このファイルがレコード・アドレス・ファイルによって処理さ れる場合には、レコード・アドレス・ファイル中のデータによって検索するレコ ードが定義されます。 最後に処理されたレコードに先読みフィールドが 指定されていた場合には、レコードはすでに記憶域の中にある可能性があるため、この時 点では読み取りは行われません。
- 16
- 読み取ったばかりのファイルでファイルの終わりが起こった場合には、プログ ラムはステップ 20 に分岐します。 そうでなければ、プログラムはステップ 17 から続行されます。
- 17
- ファイルからレコードが読み取られた場合に、レコード・タイプおよびレコ ード順序 (入力仕様の 17 から 20 桁目) が判別されます。
- 18
- レコード・タイプがプログラム内で定義されているかどうか、およびレコー ド順序は正しいかどうかが判別されます。 レコード・タイプが未定義であるか、 あるいはレコード順序が正しくない場合には、プログラムはステップ 19 から続 行され、そうでない場合には、プログラムはステップ 20 に分岐します。
- 19
- RPG IV の例外/エラー処理ルーチンが制御を受け取ります。
- 20
- 前のサイクルで FORCE 命令が処理されているかどうかが判別されます。 FORCE 命令が処理されていた場合には、プログラムによってそのファイルが処理 のために選択され (ステップ 21)、突き合わせフィールドの処理の近辺 (ステップ 22 および 23) に分岐します。 FORCE 命令によって処理されるすべてのレコード は、突き合わせレコード (MR) 標識をオフにして処理されるので、 この分岐が処理されます。
- 21
- 前のサイクルで FORCE が出されていた場合には、プログラムは読み取ったば かりのファイルからすべての突き合わせフィールドを保管した後に、処理用の強制フ ァイルを選択します。 強制ファイルがファイルの終わりになっている場には、通 常の 1 次/2 次の複数ファイルの論理によって次のレコードが 処理のために選択され、プログラムはステップ 24 に分岐します。
- 22
- 突き合わせフィールドが指定された場合には、プログラムはステップ 23 から続 行され、そうでない場合には、プログラムはステップ 24 に分岐します。
- 23
- 突き合わせフィールド・ルーチンが制御を受け取ります。 (突き合わせフィールド・ ルーチンの詳細については、突き合わせフィールド・ルーチンを参照してください。)
- 24
- ファイル仕様書の 19 桁目に E の指定があるファイルからのすべてのレ コードが処理され、すべての突き合わせ 2 次レコードが処理された時に、 LR (最終レコード) 標識がオンに設定されます。 LR 標識がオンに設定されて いない場合には、処理はステップ 26 から続行されます。
- 25
- LR (最終レコード) 標識およびすべての制御レベル (L1 から L9) 標識がオンに設定され、処理はステップ 29 から続行されます。
- 26
- 処理のために選択されたレコードのレコード識別標識がオンに設定されま す。
- 27
- 処理のために選択されたレコードで制御の切れ目が起こったかどうかが判別 されます。 処理中のレコードの制御フィールドの値が最後に処理されたレコード の制御フィールドの値と異なる場合に、制御の切れ目が起こります。制御の切れ目が 起こっていなければ、プログラムはステップ 29 に分岐します。
- 28
- 制御の切れ目が起こった場合には、該当する制御レベル標識 (L1 から L9) がオ ンに設定されます。 これより低いレベルの制御標識もすべてオンに設定されます。 プログラムは、次の比較のために制御フィールドの内容を保管します。
- 29
- 合計時演算および合計時出力を実行する必要があるかどうかが 判別されます。 LR 標識がオンである場合には、合計が常に処理されます。入力仕様に 制御レベルが指定されていない場合には、合計は最初のサイクルで は回避され、最初のサイクルの後は、すべてのサイクルで合計が処理されます。 入力仕様 に制御レベルが指定されている場合には、制御フィールドが含まれる 最初のレコードが処理されるまで、合計は回避されます。
- 30
- 制御レベル項目 (演算仕様書の 7 から 8 桁目) によって条件付けられた すべての合計演算が 処理されます。 ENDSR 命令の演算項目 2 に値 *TOTC が入っている場合には、 このステップがプログラム内の戻り点になります。
- 31
- すべての合計出力が処理されます。 フェッチ・オーバーフロー論理が指定され、 ファイルと関連したオーバーフロー標識 (OA から OG、OV) がオンの場合には、 オーバーフロー行が書き出されます。 ファイル変換の指定がある場合には、 すべての合計出力およびオーバーフロー行について変換が実行されます。 ENDSR 命令の演算項目 2 に値 *TOTL が入っている場合には、 このステップがプログラム内の戻り点になります。
- 32
- LR がオンの場合には、プログラムはステップ 33 から続行され、そうでない 場合には、プログラムはステップ 41 に分岐します。
- 33
- 停止標識 (H1 から H9) がテストされます。 停止標識が 1 つでもオンであれば、プログラム はステップ 36 (異常終了) に分岐 します。 停止標識がオフの場合には、プログラムはステップ 34 から続行されま す。 RETURN 命令コードを演算で使用した場合には、プログラムはその命令を実行 した後でステップ 33 に分岐します。
- 34
- LR がオンの場合にはプログラムはステップ 35 から続行されます。 オンで なければ、プログラムはステップ 38 に分岐します。
- 35
- RPG IV プログラムは、定義指定において TOFILE キーワードが指定 されているすべての配列またはテーブルを書き出し、すべてのロックされたデータ域データ構造を書き出 します。 出力配列およびテーブルは必要に応じて変換されます。
- 36
- オープンされているグローバル・ファイルが、すべてクローズされます。 RPG IV プログラムは、また、プログラムでロックされたが、アンロックされな かったすべてのデータ域をアンロックします。 ENDSR 命令の演算項目 2 に値 *CANCL が入っている場合には、このステップが戻り 点になります。
- 37
- 停止標識 (H1 から H9) がテストされます。 停止標識が 1 つでもオンであれば、プログラム はステップ 39 (異常終了) に分岐 します。 停止標識がオフの場合には、プログラムはステップ 38 から続行されます。
- 38
- 演算項目 2 フィールドは *ENTRY PLIST の PARM の結果のフィールドに転送 されます。
- 39
- 戻りコードが設定されます。 1 = LR オン、2 = エラー、3 = 停止。
- 40
- 呼び出し元へ制御が戻されます。
注: ステップ 32 から 40 によって通常の終了ルーチンが構成されます。
異常終了の場合には、ステップ 34 から 35 は回避されます。
- 41
- オーバーフロー標識 (OA から OG、OV) でオンのものがあるかどうかが判別され ます。 オーバーフロー標識がオンの場合には、プログラムはステップ 42 から続 行され、そうでない場合には、プログラムはステップ 43 に分岐します。
- 42
- オーバーフロー・ルーチンが制御を受け取ります。 (オーバーフロー・ルー チンの詳細については、オーバーフロー・ルーチンを参照してください。) ENDSR 命令の 演算項目 2 に値 *OFL が入っている場合には、このステップがプロ グラム内の戻り点になります。
- 43
- MR 標識がオンに設定され、これが複数ファイル・プログラムの場合、およ び処理するレコードが突き合わせレコードの場合には、突き合わせレコードを処理するサ イクルが完了するまでオンになったままです。 そうでない場合には、MR 標識はオ フに設定されます。
- 44
- 読み取った最後のレコードのデータを処理に使用できるようになります。 フィールド 標識の指定があれば、オンに設定されます。
- 45
- 先読みフィールドが指定された場合には、プログラムはステップ 46 から続 行され、そうでない場合には、プログラムはステップ 47 に分岐します。
- 46
- 先読みルーチンが制御を受け取ります。 (先読みルーチンの詳細については、 先読みルーチンを参照してください。)
- 47
- 明細演算が処理されます。 ENDSR 命令の演算項目 2 に値 *DETC が入っている 場合には、このステップがプログラム内の戻り点になります。 プログラムはステップ 4 へ分岐します。