$ZB
Synopsis
$ZB
概要
$ZB は、READ 処理後の現在の入出力デバイス特有の状況情報を含みます。
-
ターミナル、シーケンシャル・ファイル、または文字ベースの入出力デバイスからの読み込み時、$ZB は読み込み処理の最終文字を含みます。これはターミネータ文字 ([Enter] など) や、読み込み処理がターミネータ文字を必要としない場合は入力の最終文字、ターミネータ文字は必要とされるが受け取られない場合 (例えば読み込み処理のタイムアウト) は、NULL 文字列となります。
-
磁気テープなどのブロック型の入出力デバイスからの読み込み時、$ZB は入出力バッファに残るバイト数を含みます。$ZB は、磁気テープへの書き込み時の入出力バッファのバイト数も含みます。
この特殊変数は、SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
$ZB と $KEY の両方とも、文字ベースのデバイスやファイルからの読み込み時に、READ 終端文字を返すために使用されます。文字ベースの読み込みでは、これらの 2 つの特殊変数は類似していますが、まったく別のものです。(磁気テープなどの) ブロック型の読み込みと書き込みでは、$ZB を使用します。$KEY はブロック型の読み込み処理と書き込み処理へのサポートを提供していないからです。詳細は、"$KEY" を参照してください。
EOF の動作
既定では、Caché はシーケンシャル・ファイルの最後に到達すると、<ENDOFFILE> エラーを発行します。$ZB は設定されません。ファイルの最後に到達したときの EOF 動作は、MSM と互換性のある方法で構成できます。この場合、ファイルの最後に到達したときに、Caché はエラーを発行しませんが、$ZB を "" (NULL 文字列) に、$ZEOF を -1 に設定します。
EOF 処理を設定するには、管理ポータルで システム, 構成, 互換性設定 を選択します。SetZEOF の現在の設定を表示して編集します。“true” に設定すると、Caché は、$ZB を "" (NULL 文字列) に、$ZEOF を -1 に設定します。既定値は “false” です。
%SYSTEM.ProcessOpens in a new tab クラスの SetZEOF()Opens in a new tab メソッドを使用して、現在のプロセスでファイルの最後に到達したときの動作を制御できます。システム全体の既定の動作は、Config.MiscellaneousOpens in a new tab クラスの SetZEOFOpens in a new tab プロパティで設定できます。
ターミナル、またはファイルからの読み込み
$ZB は、ターミナル、シーケンシャル・ファイル、または他の文字ベースの入出力デバイスに関連する読み込み処理からの終端文字 (または文字シーケンス) を含みます。$ZB には、以下のいずれかが含まれます。
-
キャリッジ・リターンなどの終端文字
-
エスケープ・シーケンス (16 文字まで)
-
固定長 READx#n 内の n 番目の文字 (この場合、$KEY 特殊変数は NULL 文字列を返します)
-
READ *x の 1 文字
-
READ がタイムアウトになった後の NULL 文字列 ("")
例えば、5 秒のタイムアウトを持つ以下の可変長読み込みを考慮してみましょう。
Zbread
READ !,"Enter number:",num:5
WRITE !, num
WRITE !, $ASCII($ZB)
QUIT
READ プロンプトでユーザが 123 と入力し、<RETURN> ([Enter] キー) を押した場合、num 変数に 123 が保存され、$ZB に <RETURN> (ASCII 10 進コード 13、16 進コード 0D) が保存されます。READ がタイムアウトになった場合、$ZB は NULL 文字列を含み、$ASCII("") は値 -1 を返します。
コマンド行の $ZB
ターミナル・コマンド行から対話的にコマンドを実行するとき、各コマンド行を実行するために <RETURN> ([Enter]) を押します。$ZB と $KEY 特殊変数は、このコマンド行ターミネータ文字を記録します。したがって、$ZB や $KEY を使用して読み込み処理の最終状況を返すには、同じコマンド行の一部として変数を設定しなければなりません。
例えば、コマンド
>READ x:10
をコマンド行から実行する場合、$ZB をチェックします。これには、読み込み処理の結果が含まれません。コマンド行を実行した <RETURN> 文字が含まれます。読み込み処理の結果を返すには、以下のように同じコマンド行で $ZB でローカル変数を設定します。
>READ x:10 SET rzb=$ZB
これにより、読み込み処理で設定された $ZB の値が保持されます。この読み込み処理値を表示するには、以下のコマンド行文のいずれかを実行します。
>WRITE $ASCII(rzb)
; returns -1 for null string (time out),
; returns ASCII decimal value for terminator character
>ZZDUMP rkey
; returns blank line for null string (time out)
; returns hexadecimal value for terminator character
磁気テープ入出力での $ZB
$ZB には、ドライバ・バッファに関する状況情報が含まれます。特に、磁気テープ・ドライブの内部バッファに残るバイト数です。
ブロックを読み込んだすぐ後に、Caché は $ZB にそのブロック・サイズを設定します。(READ コマンドを使用して) 論理レコードをバッファから変数に転送するとき、Caché は $ZB の値を 0 までデクリメントして、次のブロックの読み込みが行われます。
テープに書き込みをするとき、$ZB はドライバの内部バッファに残っている利用できる空スペースを (バイト数で) 表示します。ブロックを書き込んだ後、Caché は OPEN コマンドで指定したバッファ・サイズに $ZB を設定します。(WRITE コマンドを使用して) 論理レコードを Caché 変数からバッファに転送するとき、Caché は $ZB 数を 0 まで デクリメントして、ブロックの書き込みを行います。
通常ではない形式と、可変長のブロックを処理するとき以外、大半の磁気テープのプログラムは $ZB とは関係ありません。
磁気テープ・オペレーションを監視するために、プログラムは読み込みと書き込みのたびに $ZA の適切なビットをテストします。
以下のコードは、各磁気テープの読み込みの後に、$ZA と $ZB をチェックして、これらの変数のうちどちらかがエラーになったときに MTERR を設定します。また、磁気テープ・エラーの発生時に $ZTRAP を設定します。
; $$MTIN(mtdev) = the next logical record from magtape
; device mtdev.
; Also returns za=$ZA and zb=$ZB
; On a magtape error, mterr=1 and $$MTIN(mtdev)=""
; Expects the caller to have set $ZT to trap other
; errors.
MTIN(io)
NEW rec,curdev
SET mterr=0,curdev=$IO,$ZT="MTIERR"
USE io
READ rec
MTIEXIT
SET za=$ZA,zb=$ZB
USE curdev
QUIT rec
MTIERR
IF $ZERROR["MAGTAPE" {
USE curdev
ZQUIT 1
GOTO @$ZTRAP }
; Use caller's error trap.
ELSE {
SET $ZTRAP="",mterr=1,rec=""
GOTO MTIEXIT }
ターミネータが READ を終了すると、Caché モードは $ZB で文字列としてターミネータを返します。
エスケープ・シーケンスで READ を終了すると、Caché モードは $ZB で文字列として ASCII エスケープ・シーケンスを返します。
関連項目
-
READ コマンド
-
WRITE コマンド
-
$KEY 特殊変数
-
$ZA 特殊変数
-
$ZEOF 特殊変数
-
"Caché 入出力デバイス・ガイド" の "入出力デバイスとコマンド"
-
"Caché 入出力デバイス・ガイド" の "ターミナル入出力"
-
"Caché 入出力デバイス・ガイド" の "磁気テープの入出力"
-
"Caché 入出力デバイス・ガイド" の "シーケンシャル・ファイル入出力"
-
"Caché 入出力デバイス・ガイド" の "スプール・デバイス"