MONITOR グループは、状況コードに基づいて、条件付きエラー処理を実行します。エラーが発生すると、MONITOR グループの中の適切な ON-ERROR グループに制御を渡します。
MONITOR ブロックのすべてのステートメントがエラーなしに処理された場合は、 ENDMON ステートメントの次のステートメントへ制御が渡されます。
MONITOR グループは演算の中の任意の場所に指定することができます。IF、DO、SELECT、または他の MONITOR グループの中でネストすることもできます。IF、DO、および SELECT グループは、MONITOR グループの中でネストすることができます。
MONITOR が別の MONITOR グループの中でネストされている場合、エラーが起こると、最も内部のグループが最初に考慮されます。その MONITOR グループがそのエラー条件を処理しない場合は、次のグループが考慮されます。
MONITOR 命令ではレベル標識が使用され、MONITOR グループが合計演算の一部であることを示します。文書化を目的としてレベル標識を ON-ERROR または ENDMON 命令に指定することもできますが、このレベル標識は無視されることになります。
MONITOR ステートメントでは、条件付け標識を使用することができます。条件付け標識が満たされない場合には、MONITOR グループの ENDMON 命令の後のステートメントに即時に制御が渡されます。ON-ERROR 命令に単独で条件付け標識を使用することはできません。
MONITOR ブロックがサブプロシージャーの呼び出しを含んでおり、かつそのサブプロシージャーにエラーがある場合は、そのサブプロシージャーのエラー処理が優先順位を有します。 例えば、サブプロシージャーに *PSSR サブルーチンがあれば呼び出されます。呼び出しを含む MONITOR グループは、サブプロシージャーがエラー処理に失敗し、00202 の「呼び出し中のエラー」 状況で呼び出しが失敗した場合にのみ、考慮されることになります。
MONITOR グループはサブルーチンで発生したエラーを処理します。サブルーチンが自分自身の MONITOR グループを持っている場合は、それらが最初の考慮されます。
MONITOR ブロックの中での分岐命令は許されませんが、ON-ERROR ブロックの中であれば許されます。
MONITOR ブロックの中での LEAVE 命令または ITER 命令は、その MONITOR ブロックを含んでいるすべての活動状態の DO グループに対して適用されます。MONITOR ブロックの中での LEAVESR 命令または RETURN 命令は、その MONITOR ブロックを含んでいるすべてのサブルーチン、サブプロシージャー、またはプロシージャーに対して適用されます。
各 ON-ERROR ステートメントでは、その ON-ERROR グループがどのエラー条件を処理するかを指定します。次のいずれの組み合わせでも、コロンで区切って指定することができます。
00100 〜 09999 の範囲外の状況コード (例えば 0 〜 99 のコード) は、モニターの対象にはなりません。これらの値を ON-ERROR グループに対して指定することはできません。 また、使用されているコンパイラーの特定バージョンに対して無効ないかなる状況コードも、指定することはできません。
複数の ON-ERROR グループが同一の状況コードをカバーしている場合は、最初の 1 つだけが使用されます。この理由により、特定の状況コードの後に *ALL などの特殊値を指定する必要があります。
ON-ERROR グループの中で発生するいかなるエラーも、MONITOR グループによって処理されることはありません。エラーを処理するには、ON-ERROR グループの中で MONITOR グループを指定することができます。
* MONITOR ブロックは、READ ステートメントと IF グループで * 構成されています。 * - 最初の ON-ERROR ブロックは、ファイルがオープンされていない * 場合に READ 命令に対して出される状況 1211 を処理します。 * - 2 番目の ON-ERROR ブロックは、その他のすべてのファイル・エラーを処理します。 * - 3 番目の ON-ERROR ブロックは、ストリング命令状況コード 00100 * および配列指標状況コード 00121 を処理します。 * - 4 番目の ON-ERROR ブロック (演算項目 2 が *ALL) は、 * 指定された ON-ERROR 命令では処理されないエラーを * 処理します。 * * MONITOR ブロックでエラーが発生しない場合は、制御は * ENDIF から ENDMON に渡されます。 C MONITOR C READ FILE1 C IF NOT %EOF C EVAL Line = %SUBST(Line(i) : C %SCAN('***': Line(i)) + 1) C ENDIF C ON-ERROR 1211 C ... ファイルがオープンしないの処理 C ON-ERROR *FILE C ... その他のファイル・エラーの処理 C ON-ERROR 00100 : 00121 C ... ストリング・エラーおよび配列指標エラーの処理 C ON-ERROR C ... その他のすべてのエラーの処理 C ENDMON
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.