Для обновления экрана предоставляется несколько базовых функций.
#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.
Для получения звука можно вызвать функцию beep. Немногие терминалы не способны издавать звуки, в этом случае некоторые установки библиотеки curses при вызове beepзаставят экран мигать. Если вы работаете в густонаселенном офисе и звуковые сигналы могут издавать многие компьютеры, возможно, вы сочтете мигание предпочтительным режимом. Как и ожидалось, функция flashвызывает мигание экрана, если это невозможно, она попробует заставить терминал издать звуковой сигнал взамен.
Вы можете считывать символы с экрана, хотя эта функциональная возможность применяется нечасто, поскольку гораздо легче отслеживать то, что выводится. Если вам все-таки это потребуется, выполняйте считывание с помощью следующих функций:
#include
chtype inch(void);
int instr(char *string);
int innstr(char *string, int number_of_characters);
Функция inchдолжна быть всегда доступна, а функции instrи innstrне всегда поддерживаются. Функция inchвозвращает символ из текущей позиции курсора на экране и данные о его атрибутах. Обратите внимание на то, что функция возвращает значение не char, a chtype, в то время как функции instrи innstrпишут в массивы с элементами типа char.
Существует четыре основных способа очистки области экрана:
#include
int erase (void);
int clear(void);
int clrtobot(void);
int clrtoeol(void);
Функция eraseзаписывает пробелы во все позиции экрана. Функция clear, как и erase, очищает экран, но вызывает перерисовку экрана с помощью внутреннего вызова низкоуровневой функции clear ok, которая выполняет последовательность очистки экрана и новое отображение экрана при следующем вызове refresh.
Функция clearобычно применяет команду терминала, которая очищает весь экран, а не пытается стереть текущие непробельные символы во всех точках экрана. Это делает функцию clearнадежным средством очистки экрана. Сочетание функции clearс последующей функцией refreshможет обеспечить удобную команду перерисовки экрана в том случае, когда изображение на экране беспорядочно или испорчено каким-либо образом.
Читать дальше