マニュアルページ set_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