2011-04-23 104 views
1

作爲學期長課程項目的一部分,我們正在編程模型列車系統。其中一部分是用於查看當前狀態的監視器界面,以及用於系統命令的鍵盤輸入。當獲得鍵盤輸入時,我們不應該顯示它們。如何不顯示從鍵盤輸入的字符

有沒有辦法禁用顯示輸入到屏幕或我將如何從鍵盤流中獲得這些?

當前使用Ada.Text_IO軟件包,並使用Get和Get_Immediate進行了測試。

附加

我們不是爲Linux系統開發的。我們正在爲MaRTE_OS開發基本上稱爲獨立終端的產品。這個系統連接到幾十個硬件板,其中大部分我還沒有看到,甚至可以告訴你他們在那裏。

至於顯示器,屏幕將完全充滿輸出更新頻繁(系統的一部分,我刷新信息約0.05秒)。沒有空間去嘗試不顯示信息,然後再移動一行(也沒有真正的一行一行打印,顯示類打印它需要的東西直接排到屏幕上的一行) 。

輸入不需要由用戶輸入進行審查,因爲系統只是應該讀取它並生成一個要處理的命令(它也有一個ERROR命令用於錯誤的輸入,並且什麼也不做但允許系統回到等待狀態)。

回答

2

首先,我會驗證要求。我看不到重複命令,但取消回聲似乎有點用戶敵對。或者,如果您的控制檯支持VT100 ANSI Escape Sequences,則可以使用clear line代碼之一。

2

大廈trashgods建議:

with Ada.Text_Io; 
with Ada.Characters.Latin_1; 

procedure Bsmain is 
    Achar : Character := ' '; 
    Escape: Character renames Ada.Characters.Latin_1.ESC; 
begin 
    Ada.Text_Io.Put (Escape & "[8m"); -- invisible text mode 
    while Achar /= 'q' loop -- q=quit 
     Ada.Text_Io.Get (Achar); 
     Ada.Text_Io.Put (Escape & "[1A"); -- move cursor back up a line 
    end loop; 
    Ada.Text_Io.Put (Escape & "[m"); -- restore back to normal text mode 
end Bsmain; 
+0

+1好例子 – trashgod 2011-04-25 00:16:17

3

我不知道艾達,但你可以在UNIX系統上運行以下命令: stty -echostty -noecho。他們切換回聲模式。我在很多不同的語言中使用它,並且它始終有效。