Системное программирование в UNIX средствами Free Pascal


         

Если установлен флаг ISIG, то


var

  tdes:termios;

.

.

.

tcgetattr(0, tdes);

tdes.c_lflag := tdes.c_lflag and (not ICANON);

tcsetattr(0, TCSAFLUSH, tdes);

Если установлен флаг ISIG, то разрешается обработка клавиш прерывания (intr) и аварийного завершения (quit).

Обычно это позволяет пользователю завершить выполнение программы. Если флаг ISIG не установлен, то проверка не выполняется, и символы intr и quit передаются программе без изменений.

Если установлен флаг ECHO, то символы будут отображаться на экране по мере их набора. Сброс этого флага полезен для процедур проверки паролей и программ, которые используют клавиатуру для особых функций, например, для перемещения курсора или команд экранного редактора.

Если одновременно установлены флаги ЕСНОЕ и ECHO, то символ удаления будет отображаться как последовательность символов backspace-space-backspace (возврат–пробел–возврат). При этом последний символ на терминале немедленно стирается с экрана, и пользователь видит, что символ действительно был удален. Если флаг ЕСНОЕ установлен, а флаг ECHO нет, то символ удаления будет отображаться как space-backspace, тогда при его вводе будет удаляться символ в позиции курсора алфавитно-цифрового терминала.

Если установлен флаг ECHONL, то перевод строки будет всегда отображать на экране, даже если отображение символов отключено, что может быть полезным при выполнении самим терминалом локального отображения вводима символов. Такой режим часто называется полудуплексным режимом (half-duplex mode).

Последним флагом, заслуживающим внимания в этой группе флагов, является флаг NOFLSH, который подавляет обычную очистку очередей ввода и вывод при нажатии клавиш intr и quit

и очистку очереди ввода при нажатии клавиши susp.

Альтернативой TCGetAttr может быть вызов IOCtl:

uses Linux;

var

  tios : Termios;

begin

  IOCtl(1,TCGETS,@tios);

  WriteLn('Input Flags  : $',hexstr(tios.c_iflag,8));

  WriteLn('Output Flags : $',hexstr(tios.c_oflag,8));

  WriteLn('Line Flags   : $',hexstr(tios.c_lflag,8));

  WriteLn('Control Flags: $',hexstr(tios.c_cflag,8));

end.

Для удобства изменения параметров терминала в файле linux определена функция CFMakeRaw:


Содержание  Назад  Вперед