1

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

print line_image attribute(reverse)

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

4

2 回答 2

1

如果您的意思是“有什么办法可以做到”,那么答案是“是的”。如果您的意思是“是否有一种简单的内置方法可以做到这一点”,那么答案是“否”。

你需要做的是:

  1. 确定切换到“反向”视频的字符序列——将字符存储在一个字符串变量中brv(开始反向视频;如果你不喜欢我的名字,请选择你自己的名字)。
  2. 确定切换到“正常”视频的字符序列——将字符存储在字符串变量中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 个字符。这些字符将按报告中的列计数代码进行计数。

不同的终端类型会有不同的顺序。这些天来,您可能不会处理 80 年代中期盛行的大量实际绿屏终端,因此您可以将您的发现硬连接到brverv字符串。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[27mandsmso=\E[7m用于xterm-256color终端;\E是 ASCII ESC 或\033)并在brvanderv字符串中使用它们。请注意,rmso长度为 5 个字符。

于 2017-02-17T04:24:33.910 回答
1

添加到上一个答案,您可以尝试以下

print "\033[7mHello \033[0mWorld"

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

于 2017-02-17T15:18:47.097 回答