第三十五章 终端输入 输出 - 特殊变量显示 I O 条件
第三十五章 终端输入 输出 - 特殊变量显示 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