Unix Man (Справочное руководство)


CURSES(3X) - часть 3


ОПИСАНИЕ


Пакет curses дает пользователю независимый от терминала метод вывода на экран с разумной оптимизацией.

Инициализирующие процедуры initscr или newterm необходимо обязательно вызвать самыми первыми (три исключения из этого правила будут описаны ниже). При завершении работы нужно вызвать процедуру endwin. Чтобы вводимые символы не изображались на экране (большинству интерактивных экранных программ нужен именно такой режим) после вызова процедуры initscr необходимо вызвать

cbreak (); noecho ()

Большинство программ дополнительно вызывают

nonl (); intrflush (stdscr, FALSE); keypad (stdscr, TRUE)

Перед запуском программы, использующей пакет curses, на терминале необходимо установить позиции табуляции и, если требуется, вывести инициализирующие последовательности. Это обычно делается командой tput init, причем переменная окружения TERM должна быть предварительно определена и помещена в окружение командой export TERM. Подробнее см. , и раздел Табуляции и инициализация в .

Библиотека curses содержит процедуры, манипулирующие структурами данных, называемыми окнами, которые можно мыслить как двумерные массивы символов, представляющие весь экран или его часть. Всегда имеется стандартное окно, размером с экран, называемое stdscr. Другие окна могут быть созданы процедурой newwin. В программах на окна ссылаются с помощью переменных типа WINDOW *; тип структур WINDOW определен во включаемом файле <curses.h>. Этими структурами данных можно манипулировать с помощью процедур, описанных ниже, среди которых основными являются move и addch. (Самыми общими являются процедуры, имена которых начинаются с буквы w, в них можно указать окно в качестве параметра. Процедуры, имена которых не начинаются с буквы w, обычно имеют дело с stdscr.) Затем вызывается процедура refresh, которая обращается к нужным процедурам, чтобы экран пользователя выглядел как stdscr. Символы в окне имеют тип chtype, что позволяет для каждого символа хранить дополнительную информацию.

Существуют окна специального типа (спецокна), которые не ограничены размерами экрана и содержимое которых целиком на экране не изображается. Более подробно об этих окнах см. ниже в разделе Управление окнами (процедура newpad).

Для каждого изображаемого на экране символа могут быть заданы атрибуты визуализации, что позволяет выводить подчеркнутые или инвертированные символы на терминалах, обладающих соответствующими возможностями. С помощью пакета curses можно вывести псевдографические символы. При вводе процедуры пакета могут преобразовывать последовательности, посылаемые стрелками и функциональными клавишами. Атрибуты визуализации, псевдографические символы и коды для функциональных клавиш описаны в файле <curses.h>, например A_REVERSE, ACS_HLINE, KEY_LEFT.

В пакете curses определена также переменная curscr типа WINDOW *, которую можно использовать в качестве аргумента некоторых процедур нижнего уровня, таких как перерисовка испорченного экрана. Если обратиться к процедуре clearok с аргументом curscr, то следующее обращение к wrefresh для любого окна приведет к очистке экрана и затем его полной перерисовке. Если обратиться к процедуре wrefresh с аргументом curscr, то экран немедленно очистится и перерисуется. Именно так большинство программ осуществляет перерисовку экрана.

Информация о размерах экрана, заданная в terminfo, может быть перекрыта переменными окружения LINES и COLUMNS, что используется, например, для терминала AT&T 5620, имеющего переменный размер экрана.

Если определена переменная окружения TERMINFO, процедуры пакета curses сначала ищут описание терминала не в стандартном месте, а в указанном. Например, если переменная окружения TERM имеет значение att4425, то скомпилированное описание характеристик по умолчанию извлекается из файла /usr/lib/terminfo/a/att4425. Однако, если значение переменной окружения TERMINFO равно $HOME/myterms, то curses вначале проверит файл $HOME/ myterms/a/att4425, и только если этот файл отсутствует, обратится к /usr/lib/terminfo/a/att4425. Подобное соглашение удобно для экспериментов с описаниями, а также тогда, когда нет прав на запись в каталог /usr/lib/ terminfo.

Во включаемом файле <curses.h> определены глобальные переменные LINES и COLS типа int. В процедуре initscr этим переменным присваивается число строк экрана и число символов в строке (более подробную информацию см. в разделе Процедуры уровня terminfo). Константы TRUE и FALSE суть 1 и 0 соответственно. Процедуры обычно возвращают значения ERR или OK; таким образом можно определить, успешно ли завершилась процедура. Константы ERR и OK также определены в файле <curses.h>




Начало  Назад  Вперед