CBL_ERROR_PROC

ランタイム システム エラーの発生時に自動的に呼び出されるエラー プロシージャを登録または解除します。

構文:

call "CBL_ERROR_PROC" using     install-flag
                                install-addrs
                      returning status-code

パラメーター:

install-flag
呼び出しプロトタイプ (「説明の読み方」を参照):cblt-x1-compx
PIC:pic x comp-x
install-addrs
呼び出しプロトタイプ (「説明の読み方」を参照):cblt-ppointer
PIC:USAGE PROCEDURE-POINTER
status-code
説明の読み方」を参照してください。

入力パラメーター:

install-flag
実行する処理
0:エラー プロシージャを登録する
1:エラー プロシージャを登録解除する
install-addrs
登録または登録解除するエラー プロシージャのアドレス

出力パラメーター:

なし

説明:

.NET 環境では、エラー プロシージャはアプリケーションで処理されなかった RTS 例外に対してのみ実行されます。

このルーチンを繰り返し呼び出すことで、1 つのアプリケーションに複数のエラー プロシージャを登録できます。

登録済みのエラー プロシージャは、再登録を試みても無視されます。同じエラー プロシージャを再登録するには、その前に登録を解除する必要があります。エラー プロシージャの登録はエラー処理中などに暗黙的に解除されるほか、install-flag を「1」に設定した CBL_ERROR_PROC を呼び出して明示的に解除することも可能です。

エラー プロシージャは任意の言語で記述できます。COBOL の場合は、install-addrs にエントリ ポイントのアドレスを指定する必要があります。エントリ ポイントのアドレスは、次の文で取得できます。

  set install-addrs to entry entry-name

COBOL のエラー プロシージャには、CALL 文を含む有効な COBOL コードを必要に応じて使用できます。

エラーが発生すると、登録した各プロシージャが順次実行されます。実行順序は登録順序とは逆で、後から登録したプロシージャが先に実行されます。すべてのプロシージャの実行が完了すると、続いて RTS のエラー処理プロシージャが開始されます。

最後に登録したプロシージャのみを実行し、その他の登録済みプロシージャやランタイム システムのエラー処理を回避するには、RETURN-CODE をゼロに設定します。

エラー プロシージャを含むプログラムをキャンセルすると、そのエラー プロシージャの登録は解除されます。

プログラムに登録しているエラー プロシージャは、他のプログラムによって解除できます。

エラー プロシージャから他のエラー プロシージャを登録することも可能です。

エラー処理中に登録されたエラー プロシージャは、それを登録したエラー プロシージャに続いて実行されます。処理中のエラー プロシージャによって登録された場合には、現在のエラー プロシージャの完了後に実行されます。ただし、エラー プロシージャの戻りコードがゼロの場合は、その時点でエラー処理が終了します。

エラー プロシージャ内で RTS エラーが発生すると、そのプロシージャはただちに終了します。次に実行すべきエラー プロシージャが存在する場合には、発生した RTS エラーの処理がそのプロシージャによって開始されます。

プロシージャを登録する場合には、必ず有効な手続きポインターを使用してください。

エラー プロシージャは登録元の実行単位に属します。そのため、エラー プロシージャを実行できるのは、それを登録した実行単位のみです。

キーボード割り込みでエラー プロシージャが呼び出されることはありません。

エラー プロシージャをプログラム内のエントリ ポイントの 1 つとして定義し、そのプログラムで発生する可能性があるエラーに備える場合には、局所記憶節を確保してください。局所記憶節を持つプログラムは再入可能であるため、エラー プロシージャが呼び出されてもランタイム システム エラー 166 は生成されません (エラー 166 は再帰的な COBOL 呼び出しが無効であることを示します)。

エラー プロシージャに渡されるパラメーター

登録したエラー プロシージャの呼び出しでは、その原因になった RTS エラーのメッセージ文字列がパラメーターとして渡されます。

このパラメーターは、メッセージ全体を保持できるだけの大きさにして連絡節で定義し、USING 指定でエラー プロシージャの呼び出しに含めます。一部の可変幅エンコーディング (日本語 UTF-8 など) では、最大の長さのエラー メッセージに対応するために PIC x(1285) の大きさの項目が必要です。ただし、英語で表示されるメッセージには PIC x(325) で十分です。

RTS エラーのメッセージ文字列の例を次に示します。
Load Error : file 'prog-name'\n
error code: 173, pc=0, call=-1, seg=0\n
173  Called program file not found in drive/directory\n\0
\n は改行、\0 は文字列終端の NULL (x"00") です。この形式の解説については、『エラー メッセージ』を参照してください。
エラー プロシージャを登録するコード例を次に示します。この例には、エラーの発生時に呼び出されるエラー プロシージャのひな型も含まれています。
 working-storage section.
 01 install-flag     pic x comp-x value 0.
 01 install-address  usage procedure-pointer.
 01 status-code      pic 9(4) comp value zeros.

 local-storage section.

 linkage section.
 01 err-msg  pic x(325).

 procedure division.
     set install-address to entry "err-proc".
     call "CBL_ERROR_PROC" using  install-flag
                                  install-address
                                  returning status-code.

 ...
 ...

* Error procedure:
 entry "err-proc" using err-msg.

* Process err-msg to find out the error number.
* Act accordingly.
 ...

* Terminate, but allow other error procedures to be executed.
     move 1 to return-code
     exit program
     stop run.