Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

 

H
—послать символ
H
.

Данная запись кажется сложной, но позволяет задавать параметры в строгом порядке, не зависящем от порядка, в котором терминал ожидает их появления в финальной escape-последовательности. Приращение аргументов

%i
необходимо, поскольку стандартная адресация курсора задается, начиная от верхнего левого угла экрана (0, 0), а терминал VT100 обозначает начальную позицию курсора как (1, 1). Заключительные символы
$<5>
означают, что для обработки терминалом перемещения курсора требуется задержка, эквивалентная времени вывода пяти символов.

Примечание

Мы могли бы описывать огромное множество характеристик, но, к счастью, в основном системы UNIX и Linux приходят с большинством предопределенных терминалов. Если нужно добавить новую модель терминала, вы можете найти полный список характеристик на странице интерактивного справочного руководства, посвященной terminfo. Лучше всего начать с поиска включенного в базу данных терминала, похожего на ваш новый, и затем создания описания новой модели как вариации существующего, т. е. осуществить последовательный просмотр характеристик, одну за другой, и исправление нуждающихся в корректировке.

Применение характеристик terminfo

Теперь, когда вы знаете, как определить характеристики терминала, нужно научиться обращаться к ним. Когда используется terminfo, прежде всего вам нужно задать тип терминала, вызвав функцию

setupterm
. Она инициализирует структуру
TERMINAL
для текущего типа терминала. После этого вы сможете запрашивать характеристики терминала и применять его функциональные возможности. Делается это с помощью вызова
setupterm
, подобного приведенному далее:

#include <term.h>

int setupterm(char *term, int fd, int *errret);

Библиотечная функция

setupterm
задает текущий тип терминала в соответствии с заданным параметром
term
. Если
term
— пустой указатель, применяется переменная окружения
TERM
. Открытый дескриптор файла, предназначенный для записи на терминал, должен передаваться в параметре
fd
. Результат функции хранится в целой переменной, на которую указывает
errret
, если это не пустой указатель. Могут быть записаны следующие значения:

 -1 — нет базы данных terminfo;

 0 — нет совпадающего элемента в базе данных terminfo;

 1 — успешное завершение.

Функция

setupterm
возвращает константу
OK
в случае успешного завершения и
ERR
в случае сбоя. Если на параметр
errret
установлен как пустой указатель,
setupterm
выведет диагностическое сообщение и завершит программу в случае своего аварийного завершения, как в следующем примере:

#include <stdio.h>

#include <term.h>

#include <curses.h>

#include <stdlib.h>

int main {

 setupterm("unlisted", fileno(stdout), (int *)0);

 printf("Done.\n");

 exit(0);

}

Результат выполнения этой программы в вашей системе может не быть точной копией приведенного далее, но его смысл будет вполне понятен. "

Done.
" не выводится, поскольку функция
setupterm
после своего аварийного завершения вызвала завершение программы:

$ cc -о badterm badterm.с -lncurses

$ ./badterm

'unlisted': unknown terminal type.

$

Обратите внимание на строку компиляции в примере: в этой системе Linux мы используем реализацию ncurses библиотеки curses со стандартным заголовочным файлом, находящимся в стандартном каталоге. В таких системах вы можете просто включить файл curses.h и задать

– lncurses
для библиотеки.

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

setupterm
вы можете обращаться к характеристикам базы данных terminfo с помощью вызовов трех функций, по одной на каждый тип характеристики:

#include <term.h>

int tigetflag(char *capname);

int tigetnum(char *capname);

  • Читать дальше
  • 1
  • ...
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: