エラー条件の戻し
%ERROR(エラー条件の戻し)
[一般形式]
%ERROR
%ERROR は、最後に実行された、拡張 'E' が指定された命令の結果がエラー条件で ある場合に '1' を戻します。 これは、命令に関してエラー標識が設定された場合 と同じになります。 拡張 'E' が指定された命令が開始される前に、%ERROR は '0' を 戻すように設定され、エラーが発生しない場合には、命令後に変更されないまま 残ります。 エラー標識を指定できるすべての命令は、%ERROR 組み込み関数も設定することができます。 CALLP 命令も %ERROR を設定することができます。
%STATUS(ファイルまたはプログラム状況の戻し)
[一般形式]
%STATUS (ファイル名)
%STATUS は、プログラムまたはファイル状況に関して設定された最新の値を戻します。%STATUS は、プログラム状況またはいずれかのファイルの状況が変更された 場合 (通常はエラーが発生した場合) に設定されます。
任意指定のファイル名パラメーターを指定しないで %STATUS を使用した場合、この 関数は、最後に変更されたプログラムまたはファイルの状況を戻します。 ファイルを 指定した場合、指定したファイルに関する INFDS *STATUS フィールド に入っている値が戻されます。 このファイルに関して INFDS を指定する 必要はありません。
%STATUS は戻り値 00000 で開始し、'E' 拡張の指定がある命令が開始される 前に 00000 にリセットされます。
%STATUS の検査に最適な時期は、'E' 拡張またはエラー標識が指定されている命令の 直後あるいは INFSR また は *PSSR サブルーチンの先頭です。
使用例
_*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....8.
CL0N01FACTOR1+++++++OPCODE&EXTEXTENDED-FACTOR2+++++++++++++++++++++++++++++
C EXFMT(E) INFILE
C IF %ERROR
C EXSR CHECK_ERROR
C ENDIF
C
C BEGSR CHECK_ERROR
C SELECT
C WHEN %STATUS < 01000
C* // No error occurred
C WHEN %STATUS < 01211
C* // Attempted to read a file that was not open
C EXSR INTERNALERROR
C WHEN %STATUS = 01331
C* // The wait time was exceeded for a READ operation
C EXSR TIMEOUT
C WHEN %STATUS = 01261
C* // Operation to unacquired device
C EXSR DEVICEERROR
C WHEN %STATUS = 01251
C* // Permanent I/O error
C EXSR PERMERROR
C OTHER
C* // Some other error occurred
C EXSR FILEERROR
C ENDSL
C ENDSR
状況コード一覧
通常のコード
| コード | 装置 | 条件 |
|---|---|---|
| 00000 | 例外/エラーなし | |
| 00002 | W | 機能キーを使用した表示の終了 |
| 00011 | W/D/SQ | 読み取り時のファイルの終わり |
| 00012 | W/D/SQ | CHAIN/SETLL/SETGT命令でのレコード不在条件 |
| 00013 | W | WRITE命令でサブファイルがオーバーフロー |
『装置』とは、 条件が適用される装置のことです。 次の略語が使用されます。
P = PRINTER; D = DISK; W = WORKSTN; SP = SPECIAL; SQ = 順次。
例外・エラーコード
| コード | 装置 | 条件 |
|---|---|---|
| 01011 | W/D/SQ | 定義されていないレコードタイプ |
| 01021 | W/D/SQ | 既に存在しているレコードを書き出そうとした |
| 01022 | D | ファイルメンバーで参照制約エラーが検出された |
| 01023 | D/SQ | ファイルが操作される前のトリガープログラムのエラー |
| 01024 | D/SQ | ファイルが操作された後のトリガープログラムのエラー |
| 01031 | W/D/SQ | 突き合わせフィールドの順序の誤り |
| 01041 | 配列/テーブルのロード順序エラー | |
| 01042 | 配列/テーブルのロード順序エラー・代替照合順序が使用されます | |
| 01051 | 配列/テーブル・ファイルの項目が多すぎる | |
| 01061 | ファイル・パラメーターに関連付けされている変数のエラー処理 | |
| 01071 | W/D/SQ | 数値順序エラー |
| 01121 | W | 印刷キーのDDSキーワードに標識が無い |
| 01122 | W | 前ページ・キーのDDSキーワードに標識が無い |
| 01123 | W | 後ページ・キーのDDSキーワードに標識が無い |
| 01124 | W | CLEARキーのDDSキーワードに標識が無い |
| 01125 | W | HELPキーのDDSキーワードに標識が無い |
| 01126 | W | HOMEキーのDDSキーワードに標識が無い |
| 01201 | W | 入力でレコードの不一致が検出された |
| 01211 | すべて | クローズされているファイルへの入出力操作 |
| 01215 | すべて | すでにオープン済みのファイルへの入出力操作 |
| 01216 | すべて | 暗黙のOPEN/CLOSE命令でのエラー |
| 01217 | すべて | 暗黙のOPEN/CLOSE命令でのエラー |
| 01218 | D/SQ | レコードが既にロックされている |
| 01221 | D/SQ | 前に読み取りを行わないで更新操作を行おうとした |
| 01222 | D/SQ | 参照制約エラーの為にレコードを割り振ることができない |
| 01231 | SP | SPECIALファイルでのエラー |
| 01235 | P | PRTCTLのスペース又はスキップ記入項目にエラー |
| 01241 | D/SQ | レコード番号が見つからない |
| 01251 | W | 永続的な入出力エラーが起こった |
| 01255 | W | セッション又は装置エラーが起こった・回復手順が使用できる |
| 01261 | W | 入手できる装置の最大数を超えようとした |
| 01271 | W | 使用できない装置を入手しようとした |
| 01281 | W | 入手されていない装置への操作 |
| 01282 | W | 制御付きオプションによるジョブの終了 |
| 01284 | W | 単一装置ファイルの2番目の装置を入手できない |
| 01285 | W | すでに入手済みの装置を入手しようとした |
| 01286 | W | 共有ファイルをSAVDSまたはINDオプションによりオープンしようとした |
| 01287 | W | 応答標識がIND標識と上書きをしている |
| 01299 | W/D/SQ | その他の入出力エラーが検出された |
| 01331 | W | ワークステーション・ファイルからのREADで待ち時間を超過した |
『装置』とは、 条件が適用される装置のことです。 次の略語が使用されます。
P = PRINTER; D = DISK; W = WORKSTN; SP = SPECIAL; SQ = 順次。
オープンまたはクローズ操作の時点で発生したエラーは、メジャー/マイナーの 戻りコード値に関係なく、1216 または 1217 の *STATUS 値になります。