Caché 变量大全 $Y 变量
包含光标的当前垂直位置。
大纲
代码语言:javascript复制$Y
描述
$Y
包含光标的当前垂直位置。当字符写入设备时,Caché会更新$Y
以反映垂直光标位置。
输出的每个换行符(换行符)(ASCII 10
)将$Y
递增1。换页符(ASCII 12
)将$Y
重置为0。
$Y
是16位无符号整数。当其值达到65536时,$Y
换行为0。换句话说,如果$Y
为65535,则下一个输出字符将其重置为0。
可以使用set
命令为$X
和$Y
赋值。例如,可以使用特殊的转义序列来改变物理游标位置,而不更新$X
和$Y
的值。在这种情况下,在使用转义序列之后,使用set
将正确的值分配给$X
和$Y
。
注意
NLS字符映射
国家语言支持(NLS)实用程序$X/$Y
选项卡定义当前区域设置的$X
和$Y
光标移动字符。
带终端I/O的$Y
下表显示了不同字符对$Y
的影响。
Echoed Character | ASCII Code | Effect on $X |
---|---|---|
<FORM FEED> | 12 | $Y=0 |
<RETURN> | 13 | $Y=$Y |
<LINE FEED> | 10 | $Y=$Y 1 |
<BACKSPACE> | 8 | $Y=$Y |
<TAB> | 9 | $Y=$Y |
任何可打印的ASCII字符 | 32-126 | $Y=$Y |
OPEN
和USE
命令的S(ECRET)协议关闭回显。它还可以防止$Y
在输入过程中被更改,因此它指示真实的光标位置。
更改垂直位置的WRITE $CHAR()
也会更改$Y
。更改垂直位置的WRITE*
不会更改$Y
。例如,WRITE$Y,$CHAR(10),$Y
执行换行并递增$Y
。相比之下,WRITE$Y,*10,$Y
执行换行符,但不会递增$Y
。
因为WRITE*
不会改变$Y
,所以可以向终端发送一个控制序列,而$Y
仍将反映真实的光标位置。由于某些控制序列确实会移动光标,因此可以使用SET
命令直接设置$Y
。例如,以下命令将光标移动到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"
使用此等效表:
代码语言:javascript复制WRITE *27,*91,*49,*109
通常,在显式移动光标的任何转义序列之后,应更新$X
和$Y
以反映实际光标位置。