Informix 4GL 报告到屏幕 - 反向

Informix 4GL report to screen - Reverse

我在 Informix 4GL 中生成了一个打印到屏幕上的报告。 我需要以反向格式显示一列。 我尝试了以下方法:

print line_image attribute(reverse)

但这不起作用。这可能吗?

如果您的意思是 "is there any way at all to do it",答案是 "yes"。如果你的意思是 "is there a nice easy built-in way to do it",答案是 "no"。

您需要做的是:

  1. 确定切换到'reverse'视频的字符序列-将字符存储在字符串变量brv中(开始反向视频;如果您不喜欢我的名字,请选择您自己的名字)。
  2. 确定切换到'normal'视频的字符序列——将字符存储在一个字符串变量中erv(结束反转视频)。
  3. 安排您的打印使用:

    PRINT COLUMN  1, first_lot_of_data,
          COLUMN 37, brv, reverse_data,
          COLUMN 52, erv,
          COLUMN 56, next_lot_of_data
    

可能需要切换 3 或 4 个字符。这些字符将由报告中的 column-counting 代码计算。

不同的终端类型会有不同的顺序。如今,您很可能没有处理 80 年代中期流行的各种各样的实际 green-screen 终端,因此您可以硬连线您对 brv 和 [=14] 的发现=] 字符串。 OTOH,您可能需要做一些花哨的步法才能在 运行 时间为不同的终端找到正确的序列。如果您需要这方面的更多信息,请大声说出来。

一种可以让您发现相关序列的简单方法是 运行 一个程序,例如(这还不是 I4GL 编译器附近的任何地方——其中可能存在语法错误):

MAIN
    DISPLAY "HI" AT 1,1
    DISPLAY "REVERSE" AT 1,4 ATTRIBUTE(REVERSE)
    DISPLAY "LO" AT 1, 12
    SLEEP 2
END MAIN

将其编译成 terminfo.4ge 和 运行:

./terminfo.4ge             # So you know what the screen looks like
./terminfo.4ge > out.file

有可能不会使用显示属性。你会看到,如果你 运行 cat out.file 而没有看到反向闪光,那么我们必须更加努力。

您还可以查看 termcap 文件或 terminfo 条目中的终端条目。使用 infocmp $TERM(在环境变量中设置正确的终端类型)并查找 smso(进入突出模式)和 rmso(退出突出模式)功能。解密那些(我有 rmso=\E[27msmso=\E[7m 用于 xterm-256color 终端;\E 是 ASCII ESC 或 3)并在 brverv 字符串。请注意,rmso 的长度为 5 个字符。

在上一个答案的基础上,您可以尝试以下方法

print "3[7mHello 3[0mWorld"

\033[7m表示反向打印。并且,\033[0m 表示回到标准。