Как не показывать символы, вводимые с клавиатуры - PullRequest
1 голос
/ 23 апреля 2011

В рамках семестрового проекта мы программируем систему модельных поездов.Частью этого является интерфейс монитора для просмотра текущего состояния и клавиатурные входы для системных команд.При получении клавиатурных входов мы не должны их отображать.

Есть ли способ отключить отображение входов на экране или как я могу получить их из потока клавиатуры?

В настоящее время используетсяAda.Text_IO и протестированы с Get и Get_Immediate.

Дополнительно

Мы не разрабатываем для системы Linux.Мы разрабатываем для MaRTE_OS то, что в принципе можно назвать автономным терминалом.Эта система подключена к десяткам аппаратных плат, большинство из которых я не видел или даже мог бы рассказать вам, для чего они предназначены.

Что касается монитора, экран будет полностью заполнен выходными данными, часто обновляемыми (часть системы у меня есть обновляющая информация около 0,05 сек).Нет места, чтобы попытаться не отображать информацию, а затем сдвинуть назад строку вверх (также на самом деле ничего не выводится за раз, строка класса выводит то, что нужно, прямо в столбец, строку на экране).

Входные данные не должны проверяться пользователем, вводящим его, поскольку система просто должна их прочитать и сгенерировать команду для обработки (также она имеет команду ERROR, которая предназначена для неверных входов иничего не делает, только позволяет системе вернуться в состояние ожидания).

Ответы [ 4 ]

3 голосов
/ 24 апреля 2011

Я не знаю Ada, но вы можете запускать следующие команды в системах Unix: stty -echo и stty -noecho. Они переключают режим эха. Я использую это на разных языках, и это всегда работает.

2 голосов
/ 24 апреля 2011

Опираясь на предложение мусорных богов:

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;
2 голосов
/ 23 апреля 2011

Сначала я бы проверил требование.Я вижу, что не повторяю команду, но отмена эха кажется немного враждебной для пользователя.Кроме того, если ваша консоль поддерживает VT100 ANSI Escape-последовательности , вы можете использовать один из кодов clear line.

1 голос
/ 11 мая 2011

Если у вас есть требуемый доступ, вы можете настроить прерывание клавиатуры, тогда вы можете «отключить их на проходе».

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

...