$KEY (ObjectScript)
構文
$KEY
$K
概要
$KEY は、現在のデバイスで最後の READ コマンドを終了した文字、あるいは文字シーケンスを含みます。$KEY と $ZB は、機能的に非常に類似しています。これらを比較した詳細は、以下を参照してください。
-
ターミネータ文字 ([Enter] キーなど) で最後の READ が終了した場合、$KEY にはそのターミネータ文字が含まれます。
-
タイムアウトや固定長読み込みの長さ制限で最後の READ が終了した場合、$KEY には NULL 文字列が含まれます。ターミネータ文字に出会うことはありません。
-
最後の READ が単一文字 (READ *a) の読み込みで、文字が入力された場合、$KEY には実際の入力文字が含まれます。
$KEY と $ZB は同一ではありませんが、非常に類似しています。以下の比較をご覧ください。
SET コマンドを使用して、$KEY の値を指定することができます。ZZDUMP コマンドを使用して、$KEY の値を表示することができます。
ターミナル・セッション中は、すべてのコマンド行の最後はキャリッジ・リターン (16 進数で 0D) として $KEY で記録されます。また、$KEY 特殊変数は、ターミナル・セッションを初期化するプロセスによって、キャリッジ・リターンに初期化されます。したがって、ターミナル・セッション中に READ コマンド、または SET コマンドによって設定された $KEY の値を表示するには、$KEY 値を同じコード行のローカル変数にコピーしなければなりません。
例
以下の例では、可変長 READ コマンドはターミナルからデータを受け取るか、10 秒後にタイムアウトになります。ユーザがタイムアウト前にデータを入力した場合、$KEY には、データ入力を終了したユーザ入力のキャリッジ・リターン (16 進数の 0D) が含まれます。しかし READ がタイムアウトになった場合、$KEY にはターミネータ文字が受け取られなかったことを示す NULL 文字列が含まれます。
READ "Ready or Not: ",x:10
ZZDUMP $KEY
以下の例では、固定長 READ コマンドはターミナルからデータを受け取るか、10 秒後にタイムアウトになります。ユーザが指定の文字数 (この場合は 1 文字) を入力した場合、READ 処理を終了するためにユーザは [Enter] キーを押す必要はありません。指定の文字数を入力する代わりに [Enter] キーを押すことで、READ プロンプトに応答できます。
読み込み処理がタイムアウトになった場合、$KEY と $ZB には、どちらも NULL 文字列が含まれます。固定長の READ 処理はターミネータ文字なしで終了されるため、ユーザが 1 文字の中間文字を入力した場合、$KEY には NULL 文字列が含まれます。しかし、ユーザが中間文字を入力せずに [Enter] キーを押した場合、$KEY にはユーザ入力のキャリッジ・リターンが含まれます。
READ "Middle initial: ",z#1:10
IF $ASCII($ZB)=-1 {
WRITE !,"The read timed out" }
ELSEIF $ASCII($KEY)=-1 {
WRITE !,"A character was entered" }
ELSEIF $ASCII($KEY)=13 {
WRITE !,"A line return was entered" }
ELSE {
WRITE !,"Unexpected result" }
$KEY と $ZB の比較
$KEY と $ZB には、どちらも READ 処理を終了する文字が含まれます。これらの 2 つの特殊変数は同一ではありませんが、非常に類似しています。以下は主な相違点です。
-
$KEY は SET コマンドを使用して設定することができますが、$ZB は、SET にすることはできません。
-
固定長 READ が正常に終了すると、$ZB には最後の文字入力が含まれます (例えば、固定長 READ として 5 桁の郵便番号 "02138" が入力された場合、$ZB には "8" が含まれます)。固定長 READ が正常に終了すると、$KEY には NULL 文字列 ("") が含まれます。
-
$KEY は、ブロック型の読み込み処理や書き込み処理をサポートしません。
コマンド行の $KEY
ターミナル・コマンド行から対話的にコマンドを実行する場合、[Enter] キーを押して各コマンド行を実行します。$KEY と $ZB 特殊変数は、このコマンド行ターミネータ文字を記録します。したがって、$KEY や $ZB を使用して読み込み処理の最終状況を返すには、同じコマンド行の一部として変数を設定しなければなりません。
例えば、コマンド
>READ x:10
をコマンド行から実行する場合、$KEY をチェックします。これには、読み込み処理の結果が含まれません。コマンド行を実行した <RETURN> 文字が含まれます。読み込み処理の結果を返すには、以下のように同じコマンド行の $KEY でローカル変数を設定します。
>READ x:10 SET rkey=$KEY
これにより、読み込み処理で設定された $KEY の値が保持されます。この読み込み処理値を表示するには、以下のコマンド行文のいずれかを実行します。
>WRITE $ASCII(rkey)
; 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