如何不显示从键盘输入的字符

时间:2011-04-23 18:50:42

标签: keyboard ada

作为学期长课程项目的一部分,我们正在编写模型训练系统。其中一部分是用于查看当前状态的监视器界面,以及用于系统命令的键盘输入。获取键盘输入时,我们不应该显示它们。

有没有办法禁止在屏幕上显示输入,或者我如何从键盘流中获取这些输入?

目前使用Ada.Text_IO包并使用Get和Get_Immediate进行测试。

其他

我们不是在为Linux系统开发。我们正在为MaRTE_OS开发基本上可以称为独立终端的东西。这个系统连接到许多硬件板上,其中大部分都是我没见过的,甚至可以告诉你它们的用途。

对于显示器,屏幕将完全填充经常更新的输出(系统的一部分,我有它刷新信息约0.05秒)。没有空间尝试不显示信息,然后向上移动一行(也没有真正一次打印一行,显示类直接打印到col,屏幕上的行所需的内容)

输入不需要输入它的用户检查,因为系统只是想读取它并生成一个要处理的命令(它也有一个错误输入的ERROR命令,除了允许系统循环回等待状态。)

4 个答案:

答案 0 :(得分:3)

我不了解Ada,但您可以在unix系统上运行以下命令: stty -echostty -noecho。他们切换回声模式。我在许多不同的语言中使用它,它总是有效。

答案 1 :(得分:2)

首先,我要验证要求。我可以看到不重复命令,但取消回声似乎有点用户敌意。或者,如果您的控制台支持VT100 ANSI Escape Sequences,则可以使用其中一个clear line代码。

答案 2 :(得分:2)

以垃圾邮件建议为基础:

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;

答案 3 :(得分:1)

如果您需要访问权限,则可以设置键盘中断,然后您可以“在通行证时将其关闭。”

http://www.iuma.ulpgc.es/users/jmiranda/gnat-rts/node33.htm