エラーの処理プログラム

GT.Mは、M標準で解説されているエラー処理機能を提供します。さらに、GT.Mはエラー処理用の拡張機能が多数用意されています。両方は、次の各項で説明します。次の表は、さまざまな技術や事例の文章の中で詳しく説明されているツールのいくつかをまとめたものです。

GT.Mエラー処理機能の概要

拡張機能

説明

OPEN/USE/CLOSE EXCEPTION

XECUTE文字列、または、GT.Mがデバイス関連の例外条件の発生を呼び出す入口参照(entryref)、を指定するデバイスパラメータを提供します。

MUMPS -list ZLINK :"-list"

コンパイラによって検出されたすべてのエラーの一覧ファイルを作成し、シンタックス・エラーを検出します。エラーを修正するため、再編集プログラムのプロセスで有用です。

ZGoto

Mの呼び出しスタックからの複数のレベルを切り離すために用意されています。

ZMESSAGE

任意のエラーを作成またはエミュレートします。

$STACK

Mの実行スタックの深さの現在のレベルが含まれています。

$STACK()

実行環境の様相を記述する値を返します。

$ECODE

"アクティブ" なエラーのためのエラーコードのリストが含まれ、これらは発生したエラーですが、まだクリアされていません。

$ESTACK

最後に$ESTACKがNEWされてから、アクティブになり削除されなかったM仮想マシンのスタックレベルの整数カウントが入っています。

$ETRAP

エラーがルーチン実行中に発生した時に、GT.Mが呼び出す文字列の値が含まれています。

$QUIT

コードの現ブロックが外部関数またはサブルーチンとして呼び出されたかどうかを示します。

$ZCSTATUS

ZCOMPILEコマンドによって実行された最後のコンパイルのためのステータスコードの値を保持します。

$ZEDIT

ZEDITコマンドによって起動された最後の編集セッションのステータスコードの値を保持します。

$ZEOF

もし現デバイス上の最後のREADがファイルの終わりに達した場合、値 '1' (TRUE)保持し、そうでなければ0(FALSE)を保持します。

$ZERROR

通常1つが$ZYERRORで指定されたコードによって生成される、アプリケーションが提供する文字列が含まれています。

$ZLEVEL

現在のDO/EXECUTEのネスティングのレベルが含まれます ($STACK+1)。

$ZMESSAGE()

テキスト形式へUNIX/GT.M 状態のコードを変換します。

$ZSTATUS

ルーチンの実行中に発生した、最後の例外状態のエラー状態のコードと位置が含みます。

$ZTRAP

XECUTE文字列、または、GT.Mが例外条件の発生を呼び出す入口参照(entryref)、が入ります。

$ZYERROR

エラーが発生したときに起動する入り口参照(entryref)が含まれます。 通常$ZERRORをメンテナンスするために使用されます。

$ECODE

$ECODEの値は、複数のエラー条件を反映する文字列です。 エラーが発生していない限り、$ECODEの値は空の文字列と等しいです。

$ECODEは、 まだ解決されていないエラー条件である "アクティブ" なエラーのエラーコードのリストが含まれます。もしアクティブなエラーがない場合、$ECODEは空の文字列を含みます。 $ECODEの値はSETできます。

$ECODEの最も最近のエラーは、一番古いものの最後の最初に表示されます。 もしエラーがM標準規格によって定義されている場合、コードは "M" で始まり、OSサービスによって提供されるそれらも含めてGT.Mのエラーコードは "Z" で始まり、アプリケーション定義のコードは "U" で始まる必要があります。 すべてのコードは、コンマ(,)で区切って、リストの初めと末尾にコンマが常にあります。GT.Mが提供するコードは、$ZSTATUSで報告され、$ZMESSAGE()で解釈され、ZMESSAGEコマンドへの引数として認識されるものです。GT.Mは$ECODEで標準エラーコードを提供する時、対応する 'Z' コードも提供します。

[注意] 注意

$ECODEの詳細は “$ECode” を参照してください。

例 ( $ECODE をSET ):

SET $ECODE="" ;sets $ECODE to the empty string
SET $ECODE=",M20," ;an ANSI M standardized error code
SET $ECODE=",U14," ;user defined error code
SET $PIECE($ECODE,",",2)="Z3," ;insert a non-ANSI error code
SET $PIECE($ECODE,",",$LENGTH($ECODE,",")+1)="An..," ;append        

標準のエラー処理は、次のような方法で制御の流れに影響を与えます。 エラーの検出では、GOTOが暗黙サブルーチンを引き起こします。 $ECODE="" の時、暗黙サブルーチンは$ETRAPで、そして、QUIT:$QUIT "" の時は、 QUIT します。 そうでない場合、暗黙サブルーチンは、TROLLBACK:$TLEVEL に続く$ETRAPで、その後 、QUIT:$QUIT "" の時は、QUITします。

$ECODEの値が空でない間、QUITコマンドは、特殊な方法で動作します。 もしQUITコマンドが、エラーが発生したものよりネストレベルが小さいへ制御を返す実行があった場合、および、$ECODEの値がまだ空でない場合、QUITコマンドに関連する最初のすべての通常のアクティビティが発生し(特にNEWされた変数のアンスタック)、そして、$ETRAPの現在の値が実行されます。 もし$ETRAPが、現在または介在しているレベルでNEWされていた場合、$ETRAPの非スタック値が実行されることに注意してください。

無効な値を$ECODEにSETするとエラーになります。有効なエラーを$ECODEにSETすると、エラーの検出と同様な動作をします。$ECODE="" をSETすると、流れの変化は発生しませんが、しかし、$STACK() は効果 的であり、後続は$QUITし、エラーとなります。

[注意] 注意

エラートラップの実行を強制したり、ユーザ定義のエラー( "U" エラー)フラグを設定するために、$ECODEの値は空でないこと:

SET $ECODE=",U13-User defined error trap,"

[注意] 注意

$ECODEの値は、空の文字列にリセットされた最後の時間以降に発生したエラーに関する情報を提供します。 この変数の情報に加え、より詳細な情報は、固有の関数$STACK()から得られます。詳細については、 “$STack()” のセクションを参照してください。

$ZSTATUS の内容

$ ZSTATUSは、エラー状態コードとルーチンの実行中に発生した最後の例外条件の場所とを指定する文字列値が含まれています。

[注意] 注意

詳細は、" $ZStatus " を参照してください。

$ZERROR と $ZYERROR

エラーが発生した後に、もし$ZYERRORが現在の環境に存在する有効な入り口参照(entryref)に設定されている場合、GT.Mは、$ZTRAPまたはデバイスのEXCEPTIONで指定されたMコードに制御を返す前に、暗黙的なDOでその入り口参照(entryref)の時点でルーチンを呼び出します。$ZYERRORによって起動されたコードが、それが$ZERRORをSETする値を選択または構築する$ZSTATUSの値を使用することを意図しています。

もし$ZYERRORが空の場合、$ZYERROR="unprocessed $ZERROR, see $ZSTATUS"、 "未処理の$ZERROR$、$ZSTATUSを見てください" となります。

もし$ZYERRORのコンテンツを持つ問題がある場合、または、もしそのコードの実行が呼び出す場合は、GT.Mはセカンダリエラーのために$ZERROR=$ZSTATUSをセットし、$ZYERRORを使用する試みを終了します。$ZYERRORで誘発されているコードの中では、$ZERRORの値は空の文字列です。

$ETRAP の挙動

もし、いかなるエラーが発生した時点で、$ETRAPの値が空でない場合、実行される次の命令が "次の行" で最初のものであるかのようにGT.Mが進行し、そして、その次の行のコードは、$ETRAPの値のテキストと同じになります。さらに、GT.Mは、"次の行" に続く行があたかも見えるかのように動作します:

QUIT:$QUIT "" QUIT

SETが $ETRAPに値を代入すると、新しい値が以前の値に置き換えられ、$ZTRAPが空でない(制御中)場合、$ZTRAPの値はスタックされずに空の文字列と等しくなります。

$ETRAPのネストと $ESTACKの使用

サブルーチンの1つのレベルが1つのエラートラップの設定を使用し、別のより多くのネストされたサブルーチンが別のものを使用している場所に層別化スキームを設定する必要がある時、より多くのネストされたサブルーチンは$ETRAPをNEW する必要があります。$ETRAP が NEWになると、その古い値が保存され、現在の値にコピーされます。後続する SET $ETRAP=<new-value>は、次に、現在の実行レベルをエラートラップするコードを確立します。

呼び出しルーチンに逆戻りする QUITコマンドは、$ETRAPを含んでいるスタックを解除するためにNEWされる値を引き起こします。

現在の実行レベル(または最初の基本スタック・フレームから遠い実行レベル)で実行中にエラーが発生した場合、GT.Mは現在の$ETRAPのコードを実行します。$ETRAPまたはそれが呼び出すコード内のGOTOまたはZGOTOが実行フローをリダイレクトしない限り、$ETRAPコードの実行が完了すると、制御は暗黙のQUITコマンドに戻り、エラーを検出したコードを呼び出すルーチンに戻ります 。この時点で、QUITは$ETRAPの以前の値を元に戻します。

よりネストされた実行レベルでは、エラーが発生すると、GT.Mは現在の$ETRAPのコードを実行します。QUITを少し入れ子にしたレベルにすると、GT.Mは現在の$ETRAPからコードを呼び出します。現在の$ETRAPは、アンスタッキングに起因するエラーの時に、$ETRAPと異なる場合があります。以下の可能性があるいずれかの状況が発生するまで、この動作が続きます:

  • $ECODEが空である。$ECODEの値が空の文字列に等しい場合、エラー処理は、すでにアクティブではなく、通常の処理が再開されます。

  • QUITは、$ETRAPの値が空である実行レベルに達します($ZTRAPは、そのレベルでは空ではありません)。$ZTRAPと$ETRAPの両方の値が空の文字列と等しい場合、エラートラッピングはアクティブではなく、QUITは$ ETRAPまたは$ ZTRAPをアンスタックするまで繰り返されます。

  • スタックが空の状態に減らされます。以前のレベルにQUITが残らない時、GT.Mはオペレーティングシステムレベルのシェルに戻ります。ダイレクトモードになっているフレームは、ダイレクトモードのシェルにユーザを戻して置くことによってプロセスを停止します。

階層ごとにエラートラップを扱う場合、2つの追加される固有変数を認識することが重要です:$STACKと$ESTACKこれらの変数の両方の値が、現在の実行レベルを示します。 ゼロ(0)の$ESTACKの各時点で再起動する$ESTACKの値がNEWされているのに対し、$STACKの値はGT.Mプロセスの開始からカウントする "絶対値" です。

多くの場合、同じ時間で$ETRAPと$ESTACKの両方をNEWするために有益です。

$ZTRAP の挙動

エラーが発生したときに、$ZTRAPの値が空でない場合、GT.Mは$ZTRAPの内容を使用して次のアクションの実行を指示します。 第8章: “固有の特殊変数の$ZTRAPのセクションを参照してください。

デフォルトでは、あたかも "次の行" の最初の一つであった次の命令が実行されるように、実行が進行し、そして、その次の行のコードは、$ZTRAPの値のテキストと同じになります。 $ZTRAPまたはそれが呼び出すコードがGOTOまたはZGOTOを発行しない限り、GT.Mが$ ZTRAP内のコードを実行した後で、GT.Mはエラーが発生した行を再度実行しようとします。値が$ZTRAPに割り当てられている時、新しい値が以前の値を置き換えます。もし$ZTRAPの値が空でない場合、$ETRAPは暗黙的にNEWされ、$ETRAPの値は空の文字列と等しくなります; これは、$ETRAPと$ZTRAPのうち最大で1つが空の文字列ではないことを保証します。環境変数 gtm_ztrap_new がブール代数のTRUEと評価された場合(大文字小文字を区別しない文字列 "TRUE"、または、大文字と小文字を区別しない文字列 "YES"、または、ゼロ以外の数値)、$ZTRAPは$ZTRAPがSETされている時にNEWされ; それ以外の場合、$ZTRAPは、SETされた時にはスタックされません。

デフォルト動作以外の$ZTRAP設定は、次の表に示すように 環境変数 gtm_ztrap_form によって制御されます。

gtm_ztrap_form

$ZTRAP と EXCEPTION の動作

code

内容はエラー後に実行されるコードです; GOTO、ZGOTO、またはQUITがない場合、エラーを含む行の先頭で実行が再開されます - デフォルトの動作では、不定ループが発生する傾向があります。

entryref

コンテンツは、暗黙のGOTOで制御を転送するため entryref (入り口参照)です。

adaptive

もしコンテンツが有効な場合、コードは "コード(code)" で記述されたようにそれを扱い、そうでなければ、entryref(入り口参照)として扱うことを試みます。

popentryref

コンテンツはentryref(入り口参照) で - $ZTRAPがSETされたレベルまで、Mの仮想スタックレベルを削除し、その後 entryref(入り口参照) へGOTOし、スタック操作は、EXCEPTIONではなく、$ZTRAPのためにのみ発生します。

popadaptive

もしコンテンツが有効な場合、コードは code で記述されたようにそれを扱い、そうでなければ、popentryref (POPの入り口参照) として記述されるように使用される entryrefとして扱うことを試みます。

"adaptive" と "popadaptive" の動作は、$ZTRAPの現在の値に基づいて2つの動作の混合を許可しますが、$ZTRAPの動作の種類は、gtm_ztrap_formからのプロセス起動時に選択され、プロセスの寿命中に変更することはできません。

[注意]

$ZTRAPの値と同様に、デバイスのEXCEPTION値の呼び出しは、現在のgtm_ztrap_form設定で指定されたパターンに従います。

$ETRAPと$ZTRAPの違い

$ETRAPと$ZTRAPのアクティベーションが同じで、しかし、それらのその後の動作の違いがいくつかあります。

$ETRAPで動作が$ECODEの状態によって制御されている間、後続のエラーのためにその後現在の$ZTRAPは呼び出されます。 $ZTRAPを使用している時に、$ZTRAP自体またはそれを呼び出すコード内のエラーによって引き起こされる再帰から保護するために、アクションの開始時に、おそらく空の文字列に、$ZTRAPを変更することが重要であることを意味します。

もしアクションに明示的または暗黙的なGOTOまたはZGOTOがない場合、いったん$ZTRAPのアクションが完了すると、エラーが発生した行の先頭で実行を再開しますが、$ETRAPのアクションがいったん完了するまでの間、暗黙のQUITがあります。 失敗したコードの再試行の成功を可能にするためには意図されていない$ZTRAPのアクションは、GOTO、または、より典型的にZGOTOを含める必要があることをこれは意味しています。対照的に、再試行させることを意図しているその$ETRAPのアクションは、エラーが発生したコードを明示的に起動し直す必要があります。

エラーが発生するレベルからQUITするため、$ZTRAPは、$ETRAPの動作が$ECODEの状態によって制御される効果はまったくありません。これは、$ECODEが空の文字列にSETされていない限り、$ETRAPが暗黙的にそのような呼び出しをする間に、$ZTRAPのアクションは明示的なZMESSAGEコマンドを使用する必要があり、より低いレベルでネストされたエラーハンドラを起動することを意味します。

$ETRAPで$ZTRAPの 相互作用

意図しない相互作用を避けるために適切であるトラップメカニズムのうちどれを認識することと、そして、他にエラー処理のいずれかのモードからスイッチオーバーを引き起こす可能性がある条件のうちどれかを認識することは重要です。

SETコマンドが $ZTRAPまたは$ETRAPのいずれかに値を割り当てると、GT.Mは他のエラー処理変数の値を調べます。他の値が空でない場合、GT.Mは、その変数の現在の値を保存し、暗黙のNEWコマンドを実行した後、空の文字列変数は、その後、要求された割り当てを有効にすることを割り当てます。

例えば、$ETRAPの再設定は内部的には、以下のように処理されます:

NEW:$LENGTH($ZTRAP) $ZTRAP $ETRAP SET $ETRAP=code        

これに対し、SET $ZTRAP=value は、内部的に処理されます:

NEW:$LENGTH($ETRAP) $ETRAP SET:$LENGTH($ETRAP)="" SET $ZTRAP=value

以前の値を保存した後、GT.Mは置き換えられた$ETRAPまたは$ZTRAPが暗黙的に空の文字列の値を取得することを保証します。その結果、2つのエラー処理メカニズムのうち、多くとも1つが特定の時点で有効になります。

もし、エラー処理プロシージャが$ETRAPメソッドを介して呼び出され、エラー発生のレベルからQUITしている時に$ECODEの値が空でない場合、動作は、新たに非スタックレベルで関連付けられているエラーハンドラに制御を移すことです。しかし、もしエラーレベルの最後にQUITコマンドは$ZTRAPに保存された値をアンスタックのために起こる場合(したがって、$ETRAPの値が空になる原因)、エラー処理メカニズムは$ETRAPベースから$ZTRAPベースへ切り替わります。

[注意] 注意

$ZTRAPによって呼び出されたエラー処理の手順の最後に、$ECODEの値が検査されていないため、この値は(もしあれば)別のエラー処理プロシージャへの移行が発生することはありません。 しかし、もしクリアされない場合は、QUITによってアンスタックされる$ETRAPを、後で引き起こすことがあります。

$ETRAPまたは$ZTRAPの選択

エラー処理の2つのメカニズムのどちらかの選択肢を作ることは、ほとんど互換性の問題です。もし既存のGT.Mコードとの互換性は重要であり、そのコードが$ZTRAPを使用して生じる場合、$ZTRAPはベストエフォートの選択です。 もし他のベンダーからMUMPSの方言で書かれたコードとの互換性が重要な場合は、$ETRAPまたは$ZTRAPの非デフォルト形式は、おそらくより良い選択です。

既存コードで1つのメカニズムを好むことが無い時、それ自体メカニズムの特徴を調べる必要があります。

1つのメカニズムを使用して達成することができるもとんどの効果は、他を使って達成することができます。 しかし、効果の一部は1つのメソッドを使用して達成するには簡単で、いくつかは容易に他で使用しています。

もしメカニズムが混在し、または、$ZTRAPを使用する環境で$ECODEを参照するための要望がある場合、$ECODEは正常に処理されたエラーで散逸されることはないので、いくつかの適切な時点で SET $ECODE="" を$ZTRAPエラーコードに持つことを推奨しています。

[注意] 注意

デバイスEXCEPTIONは、他の致命的でないエラーの後で、致命的でないデバイスエラーと$ ETRAP / $ ZTRAPが制御を取得した後に制御を取得します。

例1:特定の実行レベルへ制御を戻す

次の例では、実行レベルである"レベル" へ制御を移し、その後エラー処理ルーチン "proc^prog" へ制御を返します。

$ZTRAPで: Set $ZTRAP="ZGOTO "_level_":proc^prog"

$ETRAPで: Set $ETRAP="Quit:$STACK>"_level_" Do proc^prog"

ZGOTOが、$ZTRAPで$ETRAPと$STACKを使用できることに注意してください。 代わりに、$ESTACKがLEVELでNEWされるならば:

Set $ETRAP="Quit:$ESTACK>0 Do proc^prog"

例2:エラーを無視する

$ZTRAPで: Set $ZTRAP="Quit"

$ETRAPで: Set $ETRAP="Set $ECODE="""" Quit"

$ZTRAPを使用している時に、SET $ECODE="" を設定する必要がない間、2つのメカニズムの混合を可能にするために、それを行うことが賢明であることに注意してください。

例3:ネストされたエラー処理

$ZTRAPで: New $ZTRAP Set $ZTRAP=...

$ETRAPで: New $ETRAP Set $ETRAP=...

[注意] 注意

どちらの場合も、低いレベルにQUITすると、他のメカニズムが効果的にアクティブになる場合があります。

例4:"エラーの原因"へアクセス

$ZTRAPで: If $ZSTATUS[...

$ETRAPで: If $ECODE[...

[注意] 注意

その値が明示的に空に設定されてから、$ECODEの値がすべてのエラーの累積リストの時に、$ZSTATUSの値は、唯一最も最近のエラーを反映しています。両方の値が常にメンテナンスされ、どちらかのメカニズムを使用することができます。

エラー処理の注意点

$ETRAPと$ZTRAPは、エラーをキャッチし、認識し、エラーから回復するために多くの特徴を提供しています。エラー処理サブルーチン内のコードは、独自のエラーが発生する可能性がありますし、これらは無限ループを発生させることなく処理される必要があります(エラーがキャッチされている場所、処理されている間に別のエラーが引き起こり、キャッチされるなど)。

デバッグ段階で、そのようなループは通常コードの入力エラーの結果です。一旦これらの誤植が修正されると、リスクは、エラートラップのサブルーチンが期待される状態で対処するために特別に設計されている状態のままです; ネットワーク接続のロスなど。これは、その後、次のような独自の予期しないエラーを発生します。

  • ネットワーク接続の損失が予想よりも早く発生したため、まだ開いていなかったデバイス

  • 同じプログラムの初期のインスタンスが同じ理由でそのタスクを完了していないという事実に起因する予期しないデータの設定

[注意] 注意

エラートラップの手順内で発生する可能性のある問題と、問題のコードが呼び出される原因となる条件も、常に認識することが重要です。

もしGOTOまたはZGOTOを呼び出し、エラー状態がコードパスで持続し、コードが$ECODE="" をSETする場合、$ETRAPは再帰的に呼び出されます。 エラー状態がコードパスで持続する場合は、$ZTRAPは再帰的に呼び出されます。

入出力 エラー

GT.Mは I/Oデバイスの動作でエラーを検出すると、GT.Mは、OPEN/USE/CLOSEコマンドのEXCEPTION デバイスパラメータを実行します。 EXCEPTION デバイスパラメータは、エラーがI/Oデバイスの動作で発生した時に取るアクションを指定します。EXCEPTIONアクションでけっして暗黙的にPOPしないことを除いて、EXCEPTIONアクションの形式は、$ZTRAPで記述された gtm_ztrap_form の設定の条件となります。もしデバイスが現在のEXCEPTIONを持たない場合、GT.Mは、そのデバイスからのエラーを処理するために、$ETRAPまたは$ZTRAPを使用します。

GT.M が提供するオプションは:

  • デバイスエラーに基づく例外を、トラップまたは処理します。

  • ターミナルインプットに基づく例外を、トラップまたは処理します。

デバイスのエラーに基づいてEXCEPTIONは、そのデバイスだけに適用され、特定のI/Oデバイス用の特定のエラーハンドラを提供します。

USE用のCTRAPデバイスパラメータは、ターミナル入力のためのトラップ文字のセットを確立します。 もしデバイスが現在のEXCEPTIONをまたく持たない場合に、GT.Mがそのセット内の入力文字を検出する時には、GT.Mは、EXCEPTIONデバイスパラメータ、または、$ETRAPまたは$ZTRAPを実行します。

例:

GTM>ZPRINT ^EP12
EP12    WRITE !,"THIS IS ",$TEXT(+0)
        SET $ECODE="";this only affects $ETRAP
        SET $ETRAP="GOTO ET"
        ;N $ZT S $ZT="W !,"CAN'T TAKE RECIPROCAL OF 0"",*7"
        USE $P:(EXCEPTION="D BYE":CTRAP=$C(3))
        WRITE !,"TYPE <CTRL-C> TO STOP"
LOOP    FOR DO
        . READ !,"TYPE A NUMBER: ",X
        . WRITE ?20,"HAS RECIPROCAL OF: ",1/X
        . QUIT
ET      . WRITE !,"CAN'T TAKE RECIRPOCAL OF 0",*7
        . SET $ECODE=""
        QUIT
BYE     WRITE !,"YOU TYPED <CTRL-C> YOU MUST BE DONE!"
        USE $P:(EXCEPTION="":CTRAP="")
        WRITE !,"$ZSTATUS=",$ZSTATUS
        ZGOTO 1
GTM>DO ^EP12
THIS IS EP12
TYPE <CTRL-C> TO STOP
TYPE A NUMBER: 1 HAS RECIPROCAL OF: 1
TYPE A NUMBER: 2 HAS RECIRPOCAL OF: .5
TYPE A NUMBER: 3 HAS RECIPROCAL OF: .33333333333333
TYPE A NUMBER: 4 HAS RECIPROCAL OF: .25
TYPE A NUMBER: HAS RECIPROCAL OF:
CAN'T TAKE RECIPROCAL OF 0
TYPE A NUMBER:
YOU TYPED <CTRL-C> YOU MUST BE DONE!
$ZSTATUS=150372498,LOOP+1^EP12,%GTM-E-CTRAP,Character trap $C(3) encountered
GTM>

このルーチンは、ターミナルで数字を入力するようにユーザに求めます。 もしユーザがゼロを入力した場合は、GT.Mはエラーを発生し、$ETRAP(または$ZTRAP)を実行します。 指定されたアクションは、エラーを報告し、ユーザに数値を入力するためにプロンプトに戻ります。 $ ZTRAPを使うことで、非常に簡単です。 $ETRAPで、いくつかの注意は、適切な場所で再開するためのコードを取得する必要があります。 CTRAP デバイスパラメータは、トラップの文字として<CTRL-C>を確立します。 GT.Mが<CTRL-C>を検出すると、GT.MはラベルBYEに制御を移行するEXCEPTION文字列を実行しますラベルBYEで、ルーチンはエラーメッセージを表示し実行を終了します。 CTRAPでEXCEPTION デバイスパラメータを使用すると、通常は、$ETRAPまたは$ZTRAPの処理が簡略化されます。

$ZSTATUSは、GT.Mが検出するトラップ文字を見つけ出すルーチンを可能にします。ルーチンがトラップにセットするいくつかの文字を持っている時、$ZSTATUSは、トラップをトリガした文字の識別のために有用な情報を提供し、それによって、特定の入力に対してカスタム応答することができます。

inserted by FC2 system