第四十章 终端输入 输出 - 用于OPEN和USE的字母代码协议
用于OPEN和USE的字母代码协议
特殊情况或终端可能需要不同的协议。使用协议字母代码参数(或相应的关键字参数),可以更改 IRIS
与终端通信的规则。协议对正常读取和单字符读取的影响是一样的。
禁用所有特殊协议的正常模式足以满足大多数终端 I/O
的需要。在正常模式下,IRIS
会回显每个传入的 ASCII
字符,并将其发送回以显示在终端上。 Return
或有效的转义序列结束READ命令。
对终端发出OPEN
会关闭所有先前的协议,除非您使用 +
和 -
选项。
下表描述了有效的协议字符及其效果。
用于开放和使用的字母代码协议
协议字符 | 姓名 | 定义 |
---|---|---|
B | BREAK | 如果启用了中断 (+B),则Ctrl-C 将中断正在运行的例程并使用错误。如果禁用中断 (-B),则Ctrl-C 不会引起中断,并且不会显示“^C ”。该协议的使用取决于登录模式默认建立的BREAK命令,如下:如果以程序员模式登录,则始终启用中断 ( BREAK 1 )。 OPEN 或USE 命令中指定的 B (或 /BREAK )协议无效。如果以应用程序模式登录,则默认为 BREAK 0 ,并且可以通过OPEN 或USE 命令中指定的 B (或 /BREAK )协议来启用或禁用中断。 |
C | CRT terminal | C 模式接受所有八位字符作为数据,但以下六位字符除外:ASCII 3、8、10、13、21 和 127 。 ASCII 127 删除字符回显为破坏性退格,即退格并擦除前面的字符特点。 ASCII 21 ( Ctrl-U ) 回显足够的破坏性退格键,将光标移至READ 的开头。如果右边距的设置或终端的性质强制回显字符开始新行,则Ctrl-U 只能删除最后一个物理行上的字符。在任何情况下, Ctrl-U 都会取消自READ 开始以来的所有输入。 C 与 P 协议互斥。 |
F | Flush | 在每次READ 之前刷新(清空)输入缓冲区。可以刷新输入缓冲区以禁止用户在终端上的READ 操作之前键入,因为 IRIS 会丢弃READ 操作之间键入的任何内容。请注意,无论F 协议如何,命令WRITE *–1 都会随时刷新输入缓冲区。 |
I | Image mode | I 模式接受所有 256 个八位字符作为数据,不将任何字符视为 READ 终止符,除了在终止符参数中明确指定的终止符(如果有)之外。如果没有显式指定终止字符,则应仅使用单个字符和固定长度的READ 操作。如果没有定义终止字符,普通的READ 将导致 <TERMINATOR> 错误。图像模式( I )协议可以与其他协议字符组合。在图像模式下,IRIS 忽略协议字符 P 、C 和 B 。在图像模式下,协议字符 F、N、R、S 和 T 仍然有效。当不处于图像模式时,设备处于 N(正常)模式。 |
K\name\ | I/O Translation Mode | 当对设备使用 K 协议时,如果已在系统范围内启用转换,则该设备将发生 I/O 转换。您可以通过指定表的名称来标识转换所基于的先前定义的表。 (较旧的形式 Knum ,其中“num ”表示加载表的槽号,已被淘汰,但仍受支持。) |
N | Normal mode | N 模式接受所有八位字符作为数据,但以下六位字符除外:ASCII 3、8、10、13、21 和 127 。这些隐式终止符和命令行编辑控制字符将在本页后面介绍。如果启用 R(读行重调用)协议,则 N 禁用 R 协议。如果未指定协议值,则此模式为默认模式。 |
P | Print device 打印装置 | ASCII 删除字符回显为反斜杠 (\ ), Ctrl-U 回显为“^U ”,后跟回车符和换行符。当您对终端发出OPEN 命令时,IRIS 自动调用协议 C 或 P,具体取决于操作系统终端设置。这些协议将一直有效,直到您明确更改设备的协议为止。既不包含 C 也不包含 P 的协议字符串不会取消该协议。 |
R | 启用读取行调用模式 | R 协议启用该设备的读取行调用模式。要激活当前进程的读取行调用,请使用 LineRecall() 。 R 协议会覆盖指定设备的这些默认设置。要更改已打开设备的读取行调用,必须向该设备显式指定另一个OPEN 命令。通过指定 N 协议禁用读取行调用。 |
S | Secret input | READ 上没有任何回声。 READ 命令不会更改$X 和$Y 。读取行调用被禁用。 |
T | Terminator | T 模式不将任何控制字符视为数据。以下是控制字符:十进制值从 0 到 31 和 127 到 159 的 ASCII 字符。这些控制字符中的大多数被视为 READ 终止符。以下控制字符除外,它们执行其他控制操作:ASCII 3 ( Ctrl-C )、ASCII 8 (退格键)、ASCII 17 ( Ctrl-Q )、ASCII 19 ( Ctrl-S )、ASCII 21 ( Ctrl-U ) )、ASCII 24 ( Ctrl-X )、ASCII 27 (ESC) 和 ASCII 127 (DEL) 。当 T 模式与 I 模式(IT 协议)组合时,所有控制字符(ASCII 0 至 31 和 127 至 159 )均被视为 READ 终止符,但输出控制字符Ctrl-Q (XOFF) 和Ctrl- S (XON) ,以及输入控制字符Ctrl-H 和Ctrl-Y 。输出控制字符Ctrl-Q 和Ctrl-S 会被大多数终端拦截,即使在 IT 模式下也不会终止READ 。 |
U | Upcase mode | U 模式将所有输入字母转换为大写。 |
Y\name\ | $X/$Y Action Mode $X/$Y |
当对设备使用 Y 协议时,系统使用名为 $X/$Y 操作表。可以通过指定表名称来识别先前定义的用于转换的 $X/$Y 操作表。 $X/$Y 操作始终启用。如果未指定 Y 并且未定义系统默认值 $X/$Y ,则使用内置的 $X/$Y 操作表。 + 选项适用于打开 Y 协议,但 - 选项则无效。为了禁用 $X/$Y 关联,可以发出命令: USE 0:(:"Y0") (旧形式 Ynum ,其中`num``表示表加载到的槽号,正在分阶段进行已退出,但仍受支持。) |
协议字符串示例
以下一系列示例展示了协议字符串的功能。以下每个 USE
命令都建立在前面的USE
命令建立的协议之上:
USE 0:(80:"BP" )
字母代码 BP
打开 B
和 P
协议。此示例启用中断 (B
) 并告诉 InterSystems IRIS 将终端视为打印设备 (P
)。
USE 0:(80:"P")
当它跟在上例中的USE
命令之后时,该命令使 P
协议保持有效,但关闭 B
协议。
USE 0:(80:"+R" )
+R
打开读行调用,不影响其他协议设置。
USE 0:(80:"")
空字符串关闭所有协议。然而,P
或 C
协议仍然有效。
USE 0:(80)
省略协议参数会使协议和显式终止符保持不变。