【问题标题】:Strange column number " :0 " in VT100 terminal protocolVT100终端协议中奇怪的列号“:0”
【发布时间】:2015-10-21 03:55:29
【问题描述】:

我正在解释来自串行端口的一些输出。输出在VT100 protocol。 VT100 终端协议使用一些控制字符序列来设置光标在屏幕上的位置。控制序列如下所示:

ESC[行;列H

例如,

ESC[01;01H 表示将光标设置到第 1 行第 1 列。

但是当列号超过 2 位数字时,我会看到以下序列。

ESC[10;:0H

注意分号后的额外“:”。此控制序列出现在ESC[10;99H 之后,即第 10 行第 99 列。

我的理解是:0 = 100。但是如果列号是200呢?

【问题讨论】:

    标签: terminal console serial-port vt100


    【解决方案1】:

    我不认为这实际上是有效的,或者,如果是的话,这完全是偶然的。传递给CUP(光标位置)命令(以及许多其他涉及屏幕坐标)的参数仅限于一位或两位数字。

    在 ASCII 表中,数字 9 后跟 :,因此,99 代表 9 * 10 + 9:0 可能代表 10 * 10 + 0100

    假设该错误适用于更高的数字(我对此没有信心),您正在寻找 200,这将是 20 * 10 + 0 或可能是 D0D 是高十个字符比 ASCII 表中的:)。

    【讨论】:

    • 非常感谢!这是非常有用的。我同意你的归纳。顺便说一句,我把CUP 当作CUrsor Position
    • 我在玩 EDKII 时遇到了这种现象。我认为这可能是其实现 VT100 以支持 3 位数终端大小的错误/解决方法。
    • @smwikipedia,是的,CUP 确实是光标位置的缩写代码,更新了答案以明确。
    【解决方案2】:

    不,相关标准没有规定位数限制为两位,例如因为 VT100 可以寻址 24 行 x 132 列。

    忽略参数中的前导零。很可能,OP 正在报告仅使用两位数的问题(来自一些未提及的程序)。这与终端本身无关(可能在针对终端模拟器开发人员的错误报告的上下文中除外)。

    resize 程序假设一个终端不大于 999 x 999 以将光标定位到“过去”屏幕的右下角。对于那些不依赖多个像素来识别字符的人来说,xterm 确实使用了一种名为“不可读”的字体,这可能会导致屏幕更大。

    顺便说一句,问题中给出的来源不是很好,虽然不是最差的——参考vt100.netECMA-48

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      相关资源
      最近更新 更多