Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Функции

addch
и
addchstr
вставляют заданные символ или строку в текущую позицию на экране. Функция
printw
форматирует строку так же, как функция
printf
, и помещает в текущую позицию на экране. Функция
refresh
вызывает обновление физического экрана, возвращая
OK
в случае успеха и
ERR
при возникновении ошибки. Функция
box
позволяет нарисовать рамку вокруг окна.

Примечание

В стандартной библиотеке curses вы можете применять только "обычные" символы для рисования горизонтальных и вертикальных линий. В расширенной версии

библиотеки можно использовать два определения,
ASC_VLINE
и
ACS_HLINE
, для вывода символов вертикальных и горизонтальных линий соответственно, которые позволят нарисовать внешне более привлекательную рамку. Для этого ваш терминал должен поддерживать символы псевдографики. Обычно они лучше отображаются в окне эмулятора xterm, чем на стандартной консоли, но их поддержка полна корректировок или "заплат", поэтому мы полагаем, что вы откажетесь от их применения, если важна переносимость вашей программы.

Функция

insch
вставляет символ, сдвигая имеющиеся символы вправо. При этом не определено, что произойдет в конце строки, результат зависит от используемого терминала. Функция
insertln
вставляет пустую строку, перемещая имеющиеся строки на одну вниз. Функции
delch
и
deleteln
аналогичны функциям
insert
.

Для получения звука можно вызвать функцию

beep
. Немногие терминалы не способны издавать звуки, в этом случае некоторые установки библиотеки curses при вызове
beep
заставят экран мигать. Если вы работаете в густонаселенном офисе и звуковые сигналы могут издавать многие компьютеры, возможно, вы сочтете мигание предпочтительным режимом. Как и ожидалось, функция
flash
вызывает мигание экрана, если это невозможно, она попробует заставить терминал издать звуковой сигнал взамен.

Считывание с экрана

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

#include <curses.h>

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 <curses.h>

int erase (void);

int clear(void);

int clrtobot(void);

int clrtoeol(void);

Функция

erase
записывает пробелы во все позиции экрана. Функция
clear
, как и
erase
, очищает экран, но вызывает перерисовку экрана с помощью внутреннего вызова низкоуровневой функции clear
o
k, которая выполняет последовательность очистки экрана и новое отображение экрана при следующем вызове
refresh
.

Функция

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

Функция

clrtobot
очищает экран, начиная с текущей позиции курсора и далее до конца экрана, а функция
clrtoeol
очищает экран, начиная с текущей позиции курсора до конца строки, в которой находится курсор.

Перемещение курсора

Для перемещения курсора применяется единственная функция с дополнительной командой, управляющей положением курсора после обновления экрана.

#include <curses.h>

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 <curses.h>

int attron(chtype attribute);

int attroff(chtype attribute);

int attrset(chtype attribute);

int standout(void);

int standend(void);

Функция

attrset
устанавливает атрибуты curses, функции
attron
и
attroff
включают и отключают заданные атрибуты, не портя остальные, а функции
standout
и
standend
обеспечивают более выразительный режим выделения или "лучший из всех" режим. На большинстве терминалов выбирается инверсия.

Поделиться:
Популярные книги

Император Пограничья 8

Астахов Евгений Евгеньевич
8. Император Пограничья
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 8

Темная сторона. Том 2

Лисина Александра
10. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Темная сторона. Том 2

Я уже барон

Дрейк Сириус
2. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я уже барон

Ярар. Начало

Грехов Тимофей
1. Ярар
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ярар. Начало

Имя нам Легион. Том 1

Дорничев Дмитрий
1. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 1

Язычник

Мазин Александр Владимирович
5. Варяг
Приключения:
исторические приключения
8.91
рейтинг книги
Язычник

Неудержимый. Книга XI

Боярский Андрей
11. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XI

Черный маг императора 3

Герда Александр
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора 3

Отмороженный 9.0

Гарцевич Евгений Александрович
9. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 9.0

Вперед в прошлое 6

Ратманов Денис
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 6

Академия проклятий. Книги 1 - 7

Звездная Елена
Академия Проклятий
Фантастика:
фэнтези
8.98
рейтинг книги
Академия проклятий. Книги 1 - 7

Деревенщина в Пекине

Афанасьев Семён
1. Пекин
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Деревенщина в Пекине

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Надуй щеки! Том 7

Вишневский Сергей Викторович
7. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 7