第三十五章 终端输入 输出 - 特殊变量显示 I O 条件
WRITE * and $X and $Y
WRITE *
不会更改$X
和$Y
。因此,可以将控制序列发送到终端, $X
和$Y
仍将反映真实的光标位置。某些控制序列确实会移动光标,因此可以在需要时直接设置$X
或$Y
。
$X
和 $Y
示例
在以下示例中,控制序列将 VT100
终端中的光标移动到第 10
行、第 20
列,并相应地设置$X
和$Y
。
; set DY and DX to desired
; values for $Y and $X
SET DY=10
SET DX=20
; ...
; escape sequence moves
; cursor to desired position
WRITE *27, *91, DY+1, *59, DX+1, *72
; ...
; updates $X and $Y
SET $Y=DY
SET $X=DX
转义序列对 $X
和 $Y
的影响各不相同
转义序列可以改变$X
和$Y
值上的回显效果。三个因素控制着这种影响:
- 操作系统,设置默认行为。
- 是否在
OPEN
或USE
命令中指定了/NOXY
(禁用$X
和$Y
处理)。 - 可以使用
%SYSTEM.Process
类的DX()
方法来设置$X
如何处理当前进程的转义序列。可以通过类中设置Config.Miscellaneous
的DX
属性来建立系统范围的默认行为。
转义序列影响 Windows
和 UNIX®
系统上的 $X
和 $Y
默认情况下,在 UNIX®
和 Windows
上,当写入或回显任何包含 ASCII
转义字符(十进制值 27
)的字符串时, IRIS
会更新$X
和$Y
,就像更新任何其他字符序列一样。因此,终端执行但不显示的 ANSI
标准控制序列可能会打乱$X和$Y与光标位置的关系。
避免此问题的最简单方法是使用DX()
方法来更改行为(请参阅下一节)。或者,可以在WRITE *
语句中使用字符串中每个字符的 ASCII
值。
控制序列示例
而不是使用代码:
%SYS>WRITE $CHAR(27)_"[lm"
可以使用以下不更新$X
和$Y
的等效语句:
%SYS>WRITE *27,*91,*49,*109