2. Внутрь поместите код для перемещения курсора в точку (5, 15) на логическом экране, выведите приветствие "Hello World" и обновите реальный экран. В заключение примените вызов sleep(2
move(5, 15);
printw("%s", "Hello World");
refresh;
sleep(2);
Пока программа выполняется, вы видите фразу "Hello World" в левом верхнем квадранте пустого экрана (рис. 6.2).
Рис. 6.2
Как это работает
Эта программа инициализирует библиотеку curses, перемещает курсор в заданную точку экрана и отображает некоторый текст. После короткой паузы она закрывает библиотеку и завершается.
Экран
Как: вы уже видели, все программы с использованием curses должны начинаться с вызова функции initscr
endwin. Далее приведены их описания из заголовочного файла.#include
WINDOW *initscr(void);
int endwin(void);
Функция initscr
stdscr. Если функция заканчивается аварийно, она просто выводит диагностическое сообщение об ошибке и вызывает завершение программы.Функция endwin
clearok(stdscr, 1) и refresh. Это позволит библиотеке совершенно забыть, как выглядит физический экран, и заставит ее выполнить полное обновление экрана.Вывод на экран
Для обновления экрана предоставляется несколько базовых функций.
#include
int addch(const chtype char_to_add);
int addchstr(chtype *const string_to_add);
int printw(char *format, ...);
int refresh(void);
int box(WINDOW *win_ptr, chtype vertical_char, chtype horizontal_char);
int insch(chtype char_to_insert);
int insertln(void);
int delch(void);
int deleteln(void);
int beep(void);
int flash(void);
У библиотеки curses есть свой символьный тип данных chtype
char. В стандартной версии ncurses для ОС Linux chtype на самом деле — синоним стандартного типа unsigned long.Функции addch
addchstr вставляют заданные символ или строку в текущую позицию на экране. Функция printw форматирует строку так же, как функция printf, и помещает в текущую позицию на экране. Функция refresh вызывает обновление физического экрана, возвращая OK в случае успеха и ERR при возникновении ошибки. Функция box позволяет нарисовать рамку вокруг окна.В стандартной библиотеке curses вы можете применять только "обычные" символы для рисования горизонтальных и вертикальных линий. В расширенной версии библиотеки можно использовать два определения, ASC_VLINE
ACS_HLINE, для вывода символов вертикальных и горизонтальных линий соответственно, которые позволят нарисовать внешне более привлекательную рамку. Для этого ваш терминал должен поддерживать символы псевдографики. Обычно они лучше отображаются в окне эмулятора xterm, чем на стандартной консоли, но их поддержка полна корректировок или "заплат", поэтому мы полагаем, что вы откажетесь от их применения, если важна переносимость вашей программы.Функция insch
insertln вставляет пустую строку, перемещая имеющиеся строки на одну вниз. Функции delch и deleteln аналогичны функциям insert.