Как не показывать символы, вводимые с клавиатуры

#keyboard #ada

#клавиатура #ada

Вопрос:

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

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

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

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

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

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

Пользователю, вводящему ввод, не нужно проверять входные данные, поскольку система должна просто прочитать их и сгенерировать команду для обработки (также у нее есть команда ОШИБКИ, которая предназначена для неверных входных данных и просто ничего не делает, но позволяет системе вернуться в состояние ожидания).

Ответ №1:

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

Ответ №2:

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

Ответ №3:

Основываясь на предложении 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 amp; "[8m"); -- invisible text mode
   while Achar /= 'q' loop -- q=quit
      Ada.Text_Io.Get (Achar);
      Ada.Text_Io.Put (Escape amp; "[1A"); -- move cursor back up a line
   end loop;
   Ada.Text_Io.Put (Escape amp; "[m"); -- restore back to normal text mode
end Bsmain;
  

Ответ №4:

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

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