Файл <curses.h>
В файле <curses.h> определяются несколько глобальных переменных и структур данных, а также те из подпрограмм пакета, которые в действительности являются макросами.
Начнем с рассмотрения определяемых в файле переменных и структур данных. В файле <curses.h> определены параметры всех подпрограмм, входящих в пакет curses. Кроме того, определяются целочисленные переменные LINES и COLS, которым при выполнении программы назначаются значения соответственно вертикального и горизонтального размера экрана. Это делается при вызове описываемой ниже подпрограммы initscr(). В файле определяются также константы OK и ERR. Большинство подпрограмм curses возвращают OK при нормальном завершении и ERR при возникновении ошибки.
Примечание
LINES и COLS являются внешними (глобальными) переменными, представляющими размеры экрана. В пользовательском окружении можно установить значения двух подобных им переменных, $LINES и $COLUMNS. Программы curses используют значения этих переменных окружения для определения размера экрана. В этой главе при ссылках на переменные окружения используется знак $, чтобы отличить их от переменных, объявляемых в файле <curses.h>. Дополнительную информацию об этих переменных см. ниже в разделах Подпрограммы initscr(), refresh() и endwin() и Еще о строках, столбцах и подпрограмме initscr().
Рассмотрим теперь макроопределения. Многие подпрограммы curses
определены в <curses.h> как макросы, которые обращаются к другим подпрограммам и макросам из curses. Например, refresh() является макросом. Определение
#define refresh() wrefresh(stdscr)
показывает, что вызов refresh расширяется в обращение к также входящей в curses подпрограмме wrefresh(). Эта последняя, в свою очередь, вызывает две другие подпрограммы curses: wnoutrefresh() и doupdate(). Многие подпрограммы обеспечивают нужный результат, группируя два-три обращения к другим.
Предостережение
Макрорасширения curses могут создать проблемы при использовании некоторых конструкций языка C, например, ++ или --.
Одно последнее замечание о <curses.h>: он автоматически включает <stdio.h>, файл интерфейса с драйвером tty, <termio.h>. Повторное включение в программу этих файлов безвредно, но и бессмысленно.