2011-04-23 7 views
1

学期の長いクラスプロジェクトの一環として、モデル列車システムをプログラミングしています。これの一部は、現在のステータスを表示するためのモニタインターフェイスと、システムコマンドのキーボード入力です。キーボード入力を取得するときには、キーボード入力を表示しないようにします。キーボードから文字を表示しない方法

画面への入力の表示を無効にする方法はありますか、キーボードのストリームからそれらの入力を取得する方法はありますか?

現在、Ada.Text_IOパッケージを使用し、GetとGet_Immediateの両方でテスト済みです。

追加

私たちはLinuxシステム用に開発していません。基本的にスタンドアローン端末と呼ぶことができるものについて、MaRTE_OS用に開発しています。このシステムは数多くのハードウェアボードに接続されていますが、そのほとんどは私が見たことがないか、それが何であるかを教えてくれます。

モニターに関しては、頻繁に出力が更新された画面が完全に表示されます(システムの一部には、約0.05秒の情報が表示されます)。情報を表示しないようにしようとする余地はありません。また、行を上に戻すこともできます(実際には一度に1行しか表示されず、画面上の列、行にまっすぐに表示されます) 。

システムがそれを読み込み、処理するコマンドを生成すると入力したユーザーは、入力を確認する必要はありません(また、入力に誤りがあり、何もしない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

3

私はエイダを知りませんが、UNIXシステムで次のコマンドを実行することができます。 stty -echostty -noechoを。エコーモードを切り替える。私はこれをさまざまな言語で使用しています。

関連する問題