2017-02-16 31 views

回答

1

添加到前面的回答,您可以嘗試以下

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

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

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[27msmso=\E[7mxterm-256color終端; \E爲ASCII ESC或\033),並在brverv字符串中使用它們。請注意,rmso長度爲5個字符。