エラー処理命令
例外処理命令コードには次のものがあります。
これらの命令コードは、従来型の構文と自由形式構文の両方で使用可能です。
MONITOR、ON-ERROR および ENDMON は、監視グループをコーディングするために使用されます。 監視グループは、監視ブロックに 1 つまたは複数の ON-ERROR ブロックが続き、さらに ENDMON が続いて構成されています。
監視ブロックには、エラーを発生させる可能性があると思われるコーディングを入れます。 ON-ERROR ブロックには、監視ブロック内で発生するエラーを処理するコーディングを入れます。
監視ブロックは、MONITOR 命令と、それに続く監視の対象となる命令で構成されます。ON-ERROR ブロックは、状況コードのリストと、それに続けて、リストされている状況コードが監視ブロックの中でのエラーによって生成された場合に実行されるべき命令で構成されます。
監視ブロック内でエラーが発生し、命令に (E) 拡張またはエラー標識がある場合、エラーはその (E) 拡張またはエラー標識によって処理されます。 エラーを処理できる標識または拡張がない場合、制御は、そのエラーに対応する状況コードを含んでいる ON-ERROR ブロックに渡されます。 ON-ERROR ブロックが終了すると、制御は ENDMON に渡されます。 エラーを処理する ON-ERROR ブロックがない場合は、制御は例外処理の次のレベル (*PSSR または INFSR サブルーチン、またはデフォルトのエラー処理プログラム) に渡されます。
図 1. MONITOR ブロックおよび ON-ERROR ブロックの例
/free
MONITOR; _
OPEN FILE; |
DOW getNextRecord (); |
X = X + 1; +-- これが監視ブロックです
nameList(X) = name; |
ENDDO; |
CLOSE FILE; _|
ON-ERROR 1216; _
DSPMSG |
('Error opening file FILE' |
: %status); +-- 第 1 の ON-ERROR ブロック
RETURN; _|
ON-ERROR 121; _
DSPMSG |
('Array NAME is too small' +-- 第 2 の ON-ERROR ブロック
: %status); |
RETURN; _|
ON-ERROR *ALL; _
DSPMSG |
('Unexpected error' +-- 最終の、あらゆる場合を処理する
: %status); |
RETURN; _|
ENDMON; --- MONITOR グループの終わり
/end-free