文章
· 十一月 28 阅读大约需 2 分钟

第三十五章 终端输入 输出 - 特殊变量显示 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值上的回显效果。三个因素控制着这种影响:

  • 操作系统,设置默认行为。
  • 是否在OPENUSE命令中指定了 /NOXY(禁用$X$Y处理)。
  • 可以使用%SYSTEM.Process类的 DX() 方法来设置$X如何处理当前进程的转义序列。可以通过类中设置 Config.MiscellaneousDX 属性来建立系统范围的默认行为。

转义序列影响 WindowsUNIX® 系统上的 $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
讨论 (0)1
登录或注册以继续