Примечание
В стандарте X/Open определены два варианта curses: базовый и расширенный. Расширенный вариант библиотеки curses содержит разнородную кучу дополнительных функций, включая ряд функций для обработки многостолбцовых символов и подпрограммы управления цветом. Кроме приведенного далее в этой главе описания способов управления цветом, мы будем в основном привязаны к функциям базовой версии библиотеки.
При компиляции программ, использующих curses, следует подключить заголовочный файл curses.h и на этапе редактирования связей саму библиотеку с помощью аргумента -lcurses. Во многих системах Linux вы можете применять просто библиотеку curses, а потом обнаружить, что на самом деле вы пользуетесь усовершенствованной, более новой реализацией ncurses.
Для того чтобы проверить, как установлена библиотека curses в вашей системе, выполните команду
ls -l /usr/include/*curses.h
для просмотра заголовочных файлов и
ls -l /usr/lib/lib*curses*
для проверки библиотечных файлов. Если вы увидите, что curses.h и ncurses.h — прямо связанные файлы, и существует файл библиотеки ncurses, то у вас есть возможность компилировать файлы из этой главы с помощью следующей команды:
$ gcc program. с -о program -lcurses
Если установка curses в вашей системе не использует автоматически ncurses, вы сможете явно задать использование ncurses, включив файл ncurses.h вместо файла curses.h и выполнив следующую команду:
$ gcc -I/usr/include/ncurses program.с -о program -lncurses
в которой опция -I
задает каталог для поиска заголовочного файла.
Примечание
В загружаемом коде сценария Makefile предполагается, что в установленной у вас системе по умолчанию применяется библиотека curses, поэтому вы должны заменить его или откомпилировать вручную, если в вашей системе это не так.
Если вы точно не знаете, как установлена библиотека curses в вашей системе, обратитесь к страницам интерактивного справочного руководства, посвященным ncurses, или просмотрите другую интерактивную документацию; обычное место ее хранения — каталог /usr/share/doc/, в котором вы найдете каталог curses или ncurses часто с присоединенным в конце номером версии.
Терминология библиотеки curses и общие представления
Подпрограммы curses действуют на экранах, в окнах и вложенных окнах или подокнах. Экран — это устройство (обычно экран терминала, но может быть и экран эмулятора терминала xterm), на который вы записываете информацию. Он занимает все доступное пространство дисплея этого устройства, Если экран — окно терминала в графическом окне, то он представляет собой совокупность всех доступных символьных позиций в окне терминала. Всегда существует, по крайней мере, одно окно curses с именем stdscr
, совпадающее по размеру с физическим экраном. Вы можете создавать дополнительные окна с размером, меньшим, чем размер экрана. Окна могут накладываться друг на друга и иметь много вложенных окон, но каждое из них всегда должно находиться внутри родительского окна.
Библиотека curses поддерживает две структуры данных, действующие как отображение экрана терминала: stdscr
и curscr
. Структура stdscr
, наиболее важная из двух, обновляется, когда функции curses формируют вывод. Структура данных stdscr
— "стандартный экран". Она действует во многом так же, как стандартный вывод stdout из библиотеки stdio. Эта структура — стандартное окно вывода в программах, использующих библиотеку curses. Структура curscr
похожа на stdscr
, но хранит внешний вид отображаемого в текущий момент экрана. Вывод, записанный в структуру stdscr
, не появляется на экране до тех пор, пока программа не вызовет функцию refresh
, в которой библиотека curses сравнивает содержимое stdscr
(как должен выглядеть экран) со второй структурой curscr
(как выглядит экран в данный момент). Затем curses
использует различия между этими двумя структурами для обновления экрана.
Некоторым программам с использованием curses нужно знать, что библиотека поддерживает структуру stdscr
, которая применяется в нескольких функциях curses как параметр. Однако действительная структура stdscr
реализуется по-разному, и к ней никогда не следует обращаться напрямую. У программ с использованием curses практически нет нужды в применении структуры curscr
.
Таким образом, процесс вывода символов в программе с применением curses выглядит следующим образом:
1. Используется функция библиотеки curses для обновления логического экрана.
Читать дальше