Библиотека Curses

Библиотека curses содержит функции управления дисплеями, которые могут применяться независимо от типа терминала, к которому подключен конкретный дисплей. Библиотека curses поддерживает управление цветом. В ней нет поддержки многобайтовых символов. Термин "символ" в документации по Curses всегда означает "однобайтовый символ".

В дальнейшем в этом документе библиотека curses будет называться просто curses.

Основным объектом в программах, использующих curses, является структура данных с информацией об окне. Эта структура позволяет управлять данными, показанными на дисплее терминала. Можно настроить curses так, что дисплей будет рассматриваться как одно большое окно, а можно создать на дисплее несколько окон. Эти окна могут иметь различные размеры и перекрывать друг друга. Типичное приложение curses содержит одно основное окно, в котором находится одно вложенное окно.

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

Терминология

Рекомендуем вам ознакомиться со следующими терминами, связанными с curses:

Термин Определение
текущий символ Символ, на который в настоящий момент указывает логический курсор.
текущая строка Строка, в которой находится логический курсор.
curscr Стандартное виртуальное окно curses. Структура curscr (текущий экран) - это внутреннее представление данных, показанных на дисплее. Изменять curscr нельзя.
display Физический дисплей рабочей станции.
логический курсор Определяет расположение курсора в каждом окне. Положение логического курсора каждого окна хранится в структуре данных с информацией об этом окне.
панель Панель - это окно, которое не ограничено размерами экрана
физический курсор Курсор дисплея. Этот курсор служит для вывода данных на дисплей рабочей станции. У каждого дисплея существует только один физический курсор.
экран Окно, занимающее весь дисплей. Синоним stdscr.
stdscr Стандартное виртуальное окно (стандартный экран) curses, которое представляет весь дисплей целиком.
window Указатель на структуру данных C, а также ее графическое представление на дисплее. Окно можно считать двумерной структурой, которая в любой момент времени отражает вид дисплея или его части.

Соглашения об именах

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

Префикс Описание
w Обозначает функцию, для которой в качестве аргумента должно быть задано окно
p Обозначает функцию, для которой в качестве аргумента должна быть задана панель
mv Обозначает функцию перехода к указанным координатам

Если есть несколько версий функции curses, не содержащих ни один из предыдущих префиксов, то будет применяться окно curses по умолчанию - stdscr (стандартное окно). Большинство функций, работающих с окном stdscr - это макрокоманды, определенные в файле /usr/include/curses.h с помощью операторов #define. При компиляции препроцессор заменяет эти операторы. В результате макрокоманды не включаются в откомпилированный код, в данные трассировки, отладки, а также в исходный код curses.

Если функция curses имеет только одну версию, то она не обязательно использует stdscr. Например, функция printw выводит строку данных в окно stdscr. Функция wprintw выводит строку в окно, заданное в аргументе window. Функция mvprintw преобразует указанные координаты в координаты stdscr, а затем выполняет ту же операцию, что и printw . Аналогично, функция mvwprintw преобразует указанные координаты в координаты указанного окна, а затем выполняет ту же операцию, что и wprintw.

Структура программ curses

Программы curses, как правило, выполняются в следующем порядке:

  1. Запуск curses.
  2. Проверка поддержки цвета (не обязательно).
  3. Запуск поддержки цвета (не обязательно).
  4. Создание одного или нескольких окон.
  5. Управление окнами.
  6. Уничтожение одного или нескольких окон.
  7. Завершение curses.

Некоторые шаги не обязательны; ход работы конкретной программы не обязательно должен соответствовать этой последовательности.

Коды возврата

Большинство функций curses возвращают либо целое значение ERR, либо целое значение OK. Если функция не соответствует этому соглашению, то это всегда указывается в ее описании. Функции, возвращающие указатели, в случае ошибки возвращают пустой указатель.