Для получения звука можно вызвать функцию 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
, очищает экран, но вызывает перерисовку экрана с помощью внутреннего вызова низкоуровневой функции clearo
k, которая выполняет последовательность очистки экрана и новое отображение экрана при следующем вызове refresh
.
Функция clear
обычно применяет команду терминала, которая очищает весь экран, а не пытается стереть текущие непробельные символы во всех точках экрана. Это делает функцию clear
надежным средством очистки экрана. Сочетание функции clear
с последующей функцией refresh
может обеспечить удобную команду перерисовки экрана в том случае, когда изображение на экране беспорядочно или испорчено каким-либо образом.
Функция clrtobot
очищает экран, начиная с текущей позиции курсора и далее до конца экрана, а функция clrtoeol
очищает экран, начиная с текущей позиции курсора до конца строки, в которой находится курсор.
Перемещение курсора
Для перемещения курсора применяется единственная функция с дополнительной командой, управляющей положением курсора после обновления экрана.
#include
int move(int new_y, int new_x);
int leaveok(WINDOW *window_ptr, bool leave_flag);
Функция move
просто переносит позицию логического курсора в заданное место на экране. Напоминаем о том, что начало экранных координат (0, 0) находится в левом верхнем углу экрана. В большинстве версий библиотеки curses две глобальные целочисленные переменные, LINES
и COLUMNS
, определяют размер физического экрана и могут применяться для определения максимально допустимых значений параметров new_y
и new_x
. Вызов move
сам по себе не приводит к перемещению физического курсора. Он только изменяет позицию на логическом экране, в которой появится следующий вывод. Если вы хотите, чтобы экранный курсор переместился немедленно после вызова функции move, вставьте следом за ним вызов функции refresh
.
Функция leaveok
устанавливает флаг, управляющий положением курсора на физическом экране после его обновления. По умолчанию флаг равен false
, и после вызова refresh
аппаратный курсор остается в той же точке экрана, что и логический курсор. Если флаг равен true
, аппаратный курсор можно оставить в случайно выбранной точке экрана. Как правило, значение, устанавливаемое по умолчанию, предпочтительней, т.к. курсор остается в не лишенной смысла позиции.
Атрибуты символов
У всех символов, обрабатываемых curses, могут быть определенные атрибуты, управляющие способом отображения символа на экране при условии, что оборудование, применяемое для их отображения, поддерживает требуемый атрибут. Определены следующие атрибуты: A_BLINK
, A_BOLD
, A_DIM
, A_REVERSE
, A_STANDOUT
и A_UNDERLINE
. Вы можете использовать перечисленные далее функции для установки атрибутов по одному или все вместе.
#include
int attron(chtype attribute);
int attroff(chtype attribute);
int attrset(chtype attribute);
int standout(void);
int standend(void);