Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$X

カーソルの現在の水平位置を含みます。

Synopsis

$X

概要

$X は、カーソルの現在の水平位置を含みます。デバイスに文字が書き込まれると、Caché は $X を更新して、水平カーソル位置を反映します。

出力される各印刷可能文字は、$X を 1 つインクリメントします。キャリッジ・リターン (ASCII 13) または改ページ (ASCII 12) は、$X を 0 (ゼロ) にリセットします。

$X は、16 ビットの符号なし整数です。

  • Unicode 以外のシステムでは、$X の値が 65536 に達すると、0 に戻ります。つまり、$X が 65535 の場合、次の出力文字によって 0 にリセットされます。

  • Unicode システムでは、$X の値が 16384 に達すると、0 に戻ります (残りの 2 ビットは、日本語ピッチのエンコードに使用されます)。

SET コマンドを使用して、$X$Y に値を与えることができます。例えば、$X 値と $Y 値を更新せずに、物理的カーソル位置を変更する特殊なエスケープ・シーケンスを使用することができます。この場合、エスケープ・シーケンスを使用した後に、SET を使用して正しい値を $X$Y に割り当てます。

メモ

各国言語サポート文字のマップ

各国言語サポート (National Language Support) ユーティリティ $X/$Y タブは、現在のロケールに対する $X カーソルと $Y カーソルの移動文字を定義します。詳細は、"Caché 専用のシステム/ツールおよびユーティリティ" の “各国言語サポートのシステム・クラス” のセクションを参照してください。

ターミナル入出力での $X

以下の表は、$X での異なる文字の影響を示します。

エコーされる文字 ASCII コード $X での効果
<FORM FEED> 12 $X=0
<RETURN> 13 $X=0
<LINE FEED> 10 $X=$X
<BACKSPACE> 8 $X=$X-1
<TAB> 9 $X=$X+1
出力できる ASCII 文字 32-126 $X=$X+1
出力できない文字 (エスケープ・シーケンスなど) 127-255 詳細は、"Caché ObjectScript の使用法" を参照してください。

OPEN コマンドと USE コマンドの S(ecret) プロトコルは、エコーをオフにします。また、入力中に $X が変更されるのを防ぎ、正しいカーソル位置を示します。

WRITE $CHAR()$X を変更します。WRITE * は、$X を変更しません。例えば、WRITE $X,"/",$CHAR(8),$X は、バックスペースを実行 (/ 文字を削除) し、それに応じて $X をリセットして、01 を返します。一方、WRITE $X,"/",*8,$X は、バックスペースを実行 (/ 文字を削除) しますが、$X をリセットしないで 02 を返します (詳細は WRITE コマンドを参照)。

WRITE * を使用すると、ターミナルに制御シーケンスを送信しても、$X は真のカーソル位置を示します。制御シーケンスによってはカーソルを移動するものもあるので、SET コマンドを使用して直接 $X を設定することができます。例えば、以下のコマンドは Digital VT100 端末 (あるいは同等の端末) でコラム 20 と行 10 にカーソルを移動し、それにしたがって $X$Y を設定します。

   SET dy=10,dx=20
   WRITE *27,*91,dy+1,*59,dx+1,*72
   SET $Y=dy,$X=dx

デバイスは動作するのに出力しない ANSI 標準制御シーケンス (エスケープ・シーケンスなど) は、$X 値、$Y 値と正しいカーソル位置の間での矛盾を生じます。この問題を避けるために WRITE * (整数式) 構文を使用して、文字列で各文字の ASCII 値を指定します。例えば、以下の形式ではなく

   WRITE !,$CHAR(27)_"[1m"
   WRITE !,$X

同じ意味を持つ以下の形式を使用します。

   WRITE !,*27,*91,*49,*109
   WRITE !,$X

通常、明示的にカーソルを移動するエスケープ・シーケンスの後、$X$Y を更新して、実カーソル位置を反映します。

%SYSTEM.ProcessOpens in a new tab クラスの DX()Opens in a new tab メソッドを使用すると、$X による現在のプロセスのエスケープ・シーケンスの処理方法を設定できます。システム全体の既定の動作は、Config.MiscellaneousOpens in a new tab クラスの DXOpens in a new tab プロパティで設定できます。

TCP 通信とプロセス間通信での $X

WRITE コマンドを使用して、クライアントあるいはサーバの TCP デバイスにデータを送信するとき、Caché は最初にバッファにデータを保存します。また、$X を更新して、バッファの文字数を反映します。ASCII 文字はレコード部として考えられるため、この数に ASCII 文字 <RETURN> と <LINE FEED> を含みません。

WRITE ! コマンドを使用して $X バッファをフラッシュすると、$X が 0 にリセットされ、$Y 値が 1 つインクリメントされます。WRITE # コマンドを使用して $X および $Y バッファをフラッシュした場合は、ASCII 文字 <FORM FEED> が別個のレコードとして書き込まれ、$X$Y の両方が 0 にリセットされます。

関連項目

FeedbackOpens in a new tab