Скачиваний:
56
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

Описание

uses linux;

(* Установить скорость ввода *)

Procedure CFSetISpeed(var tdes:TermIOS; Speed:Longint);

(* Установить скорость вывода *)

Procedure CFSetOSpeed(var tdes:TermIOS; Speed:Longint);

uses stdio;

(* Получить скорость ввода *)

function cfgetispeed(var tdes:TermIOS):longint;

(* Получить скорость вывода *)

function cfgetospeed(var tdes:TermIOS):longint;

Следующий пример устанавливает в структуре tdes значение скорости терминала равное 9600 бод. Постоянная В9600 определена в файле stdio.

var

tdes:termios;

(* Получает исходные настройки терминала * )

tcgetattr(0, tdes);

(* Изменяет скорость ввода и вывода *)

cfsetispeed(tdes, В9600);

cfsetospeed(tdes, В9600);

Конечно, эти изменения не будут иметь эффекта, пока не будет выполнен вызов tcsetattr:

tcsetattr(0, TCSAFLUSH, tdes);

Следующий пример устанавливает режим контроля четности, напрямую устанавливая необходимые биты:

tdes.c_cflag := tdes.c_cflag or PARENB or PARODD;

tcsetattr(0, TCSAFLUSH, tdes);

В этом примере установка флага PARENB включает проверку четности. Установленный флаг PARODD сообщает, что ожидаемый контроль – контроль нечетности. Если флаг PARODD сброшен и установлен флаг PARENB, то предполагается, что используется контроль по четности. (Термин четность, parity, относится к использованию битов проверки при передаче данных. Для каждого символа задается один такой бит. Это возможно благодаря тому, что набор символов ASCII занимает только семь бит из восьми, используемых для хранения символа на большинстве компьютеров. Значение бита проверки может использоваться для того, чтобы полное число битов в байте было либо четным, либо нечетным. Программист также может полностью выключить проверку четности.)

Поле c_iflag

Поле c_iflag в структуре termios служит для общего управления вводом с терминала. Не будем рассматривать все возможные установки, а выберем из них только наиболее общие.

Три из связанных с этим полем флага связаны с обработкой символа возврата каретки. Они могут быть полезны в терминалах, которые посылают для обозначения конца строки последовательность, включающую символ возврата каретки CR. ОС UNIX, конечно же, ожидает в качестве символа конца строки символ LF (line feed) или символ перевода строки ASCII, символ NL (new line). Следующие флаги могут исправить ситуацию:

INLCR Преобразовывать символ новой строки в возврат каретки

IGNCR Игнорировать возврат каретки

ICRNL Преобразовывать возврат каретки в символ новой строки

Три других поля c_iflag связаны с управлением потоком данных:

IXON Разрешить старт/стопное управление выводом

IXANY Продолжать вывод при нажатии любого символа

IXOFF Разрешить старт/стопное управление вводом

Флаг IXON дает пользователю возможность управления выводом. Если этот флаг установлен, то пользователь может прервать вывод, нажав комбинацию клавиш Ctrl+S. Вывод продолжится после нажатия комбинации Ctrl+Q. Если также установлен параметр IXANY, то для возобновления приостановленного вывода достаточно нажатия любой клавиши, хотя для остановки вывода должна быть нажата именно комбинация клавиш Ctrl+S. Если установлен флаг IXOFF, то система сама пошлет терминалу символ остановки (как обычно, Ctrl+S), когда буфер ввода будет почти заполнен. После того как система будет снова готова к приему данных, для продолжения ввода будет послана комбинация символов Ctrl+Q.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal