# マニュアルページ get_io_err_handler.3f

## 名前

         set_io_err_handler, get_io_err_handler - set/get I/O Error
         Handler

## 形式

         USE SUN_IO_HANDLERS
         SUBROUTINE SET_IO_ERR_HANDLER(IU, SUB_NAME, ISTAT)
             INTEGER(8) IU
             EXTERNAL SUB_NAME
             INTEGER(4) ISTAT

         SUBROUTINE GET_IO_ERR_HANDLER(IU, SUB_PTR, ISTAT)
             INTEGER(8) IU
             EXTERNAL SUB_NAME
             POINTER (SUB_PTR, SUB_NAME)
             INTEGER(4) ISTAT

## 機能説明

         SET_IO_ERR_HANDLER は、入出力エラーが発生した場合に、ユー
         ザーが供給したサブルーチン SUB_NAME を論理ユニット IU 用に入
         出力エラーハンドラとして設定します。 IU は書式化されたファイ
         ルに対して接続された Fortran 論理ユニットである必要がありま
         す。 ISTAT は、エラーがあった場合にはゼロ以外の値に、それ以
         外はゼロに設定されます。例えば、 SET_IO_ERR_HANDLER が、論理
         ユニット IU が開く前に呼び出された場合、 ISTAT は 1001 ("不
         正なユニット") に設定されます。 SUB_NAME が NULL の場合、
         ユーザーのエラー処理がオフに設定され、プログラムはデフォルト
         の Fortran エラー処理に戻ります。

         この論理ユニット用のエラーハンドラとして現在使用されている関
         数のアドレスを取得するために GET_IO_ERR_HANDLER を使用してく
         ださい。例えば、 GET_IO_ERR_HANDLER を呼び出して、別のハンド
         ラルーチンに切り替える前に現在の入出力を保存します。エラーハ
         ンドラは後に保存した値で復元できます。

         SET_IO_ERR_HANDLER および GET_IO_ERR_HANDLER はモジュールサ
         ブルーチンで、 USE SUN_IO_HANDLERS が呼び出しルーチンに出現
         した場合にのみアクセスできます。

         SUB_NAME は論理ユニット IU で入出力エラーを扱うユーザー供給
         ルーチンの名前です。実行時入出力ライブラリはすべての適切な情
         報を SUB_NAME に渡し、これによりこのルーチンが問題を診断し、
         処理を継続する前にエラーを修正できるようになります。

         入出力ハンドラへのインタフェースは次の通りです。

             SUBROUTINE SUB_NAME(UNIT, SRC_FILE, SRC_LINE,
         X       DATA_FILE, FILE_POS, CURR_BUFF,
         X       CURR_ITEM, CORRECT,CHAR, CORR_ACTION )

             INTENT (IN) UNIT, SRC_FILE, SRC_LINE, DATA_FILE
             INTENT (IN) FILE_POS, CURR_BUFF, CURR_ITEM
             INTENT (OUT) CORRECT_CHAR, CORR_ACTION

         INTEGER(8) UNIT     エラーが発生した入力ファイルの論理ユニッ
                             ト。

         CHARACTER*(*) SRC_FILE
                             入力操作が発生した Fortran ソースファイ
                             ルの名前。

         INTEGER(8) SRC_LINE 入力操作の SRC_FILE の行番号。

         CHARACTER*(*) DATA_FILE
                             読み込まれるデータファイルの名前。これ
                             は、ファイルが、開かれる外部ファイルであ
                             る場合のみ有効です。ファイル名が無効な場
                             合 (例: 論理ユニット 5) DATA_FILE は長さ
                             が 0 の文字データ項目に設定されます。

         INTEGER(8) FILEPOS  入力ファイルの現在の位置 (バイト単位)。
                             入力ファイル DATA_FILE の名前が既知の場
                             合のみ定義されます。

         CHARACTER*(*) CURR_BUFF
                             文字列の最初の文字として不正な入力文字の
                             ある入力レコード中の残りのデータを含む文
                             字列。

         INTEGER(8) CURR_ITEM
                             エラーが発生した場合に、読み込まれるレ
                             コード中の入力項目の数 (現在の分も含む
                             )。例:
                             READ(12,10)L,(ARR(I),I=1,L)
                             CURR_ITEM の値が 15 の場合、 L を最初の
                             項目として、 ARR(1) を 2 番目の項目とし
                             て指定して ARR の 14 番目の要素を読み込
                             む間にエラーが発生することを意味します。

         CHARACTER CORRECT_CHAR
                             ハンドラにより戻されるユーザーが供給した
                             修正済みの文字です。このパラメータは
                             CORR_ACTION パラメータがゼロ以外の値に設
                             定される場合のみ使用できます。

                             CORRECT_CHAR が無効な文字に設定された場
                             合、有効な値が戻されるまでハンドラルーチ
                             ンが再度呼び出されます。ハンドラにより有
                             効な文字が与えられない場合は、無限ループ
                             が発生する可能性があります。ユーザーはこ
                             の事態を検出し、防ぐ必要があります。

         INTEGER CORR_ACTION 入出力ライブラリが行う正しい動作を指定
                             し、以下の 2 つが選択可能です。
                             0   何もしません。デフォルトのエラー処理
                             を使用します。
                             1   ユーザーエラーハンドラルーチンにより
                             戻された CORRECT_CHAR の使用を継続しま
                             す。

## 制限事項

         入出力エラーは 1 文字を 1 文字でのみ置き換えられます。1 文字
         を 1 文字以上で置き換えることはできません。

         エラー回復アルゴリズムは現在読み込んでいる不正な文字のみを修
         正できます。別の文脈で有効な文字として解釈された文字は、不正
         なものでも修正できません。例えば、並びによる読み込みで、正し
         い入力が "1.2345 9.8765" である必要がある場合に入力が
         "1.234509.8765" であると、入出力ライブラリは、次回エラーとし
         て実行されます。これは、有効な数値ではないのですが、元に戻っ
         て '0' を <空白> に変更することができないためです。

         現在、このエラー処理機能は変数群による入力用に使用できませ
         ん。変数群による入力を行うと、エラー発生時に指定した入出力エ
         ラーハンドラは起動されません。

         入出力エラーハンドラは内部ファイルではなく、外部ファイルに対
         してのみ設定できます。内部ファイルに関連付けされる論理ユニッ
         トが存在しないからです。

         入出力エラーハンドラは構文エラーに対してのみ呼び出されます。
         システムエラーや意味上の誤り (オーバーフローした入力値など)
         に対しては呼び出されません。

         ユーザー供給入出力エラーハンドラが、不正な文字を入出力ライブ
         ラリに対して供給し続ける場合に、無限ループとなる可能がありま
         す。結果として、ユーザー供給入出力エラーハンドラが繰り返し何
         度も呼び出されます。エラーが同じファイル位置で発生し続ける場
         合、エラーハンドラは自身で終了する必要があります。この方法と
         して、CORR_ACTION を 0 に設定して、デフォルトのエラーパスを
         取得します。これにより、入出力ライブラリは通常のエラー処理を
         継続します。

## ファイル

         libfui.so
         sun_io_handlers.mod