Informix 4GL报告到屏幕 - 反向

问题描述:

我有一个Informix 4GL生成的报告打印到屏幕上。 我需要有一列以反向格式显示。 我试过以下内容:Informix 4GL报告到屏幕 - 反向

print line_image attribute(reverse) 

但这并不奏效。这可能吗?

添加到前面的回答,您可以尝试以下

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

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

如果你的意思是“有没有办法做到这一点”,答案是“是”。如果你的意思是“有一个很好的简单内置的方式来做到这一点”,答案是“不”。

什么你需要做的是:

  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[27msmso=\E[7mxterm-256color终端; \E为ASCII ESC或\033),并在brverv字符串中使用它们。请注意,rmso长度为5个字符。