Операционная система UNIX. Руководство программиста

Атрибуты вывода


Рассказывая об addch(), мы упомянули, что эта подпрограмма выводит в stdscr один знак типа chtype. chtype состоит из двух частей: информации о самом символе и информации о наборе атрибутов, связанных с этим символом. Эти атрибуты позволяют отображать символ с повышенной яркостью, подчеркнутым, инвертированным и т.д.

С stdscr всегда связан набор атрибутов, которые автоматически присваиваются каждому выводимому символу. Вы можете изменить текущие значения атрибутов, используя attrset() или другие подпрограммы пакета curses, которые описаны ниже. Приведем здесь список атрибутов и их описания:

  • A_BLINK - мерцание.
  • A_BOLD - повышенная яркость или жирный шрифт.
  • A_DIM - пониженная яркость.
  • A_REVERSE - инвертированное отображение.
  • A_STANDOUT - как можно заметнее, насколько это возможно на данном терминале.
  • A_UNDERLINE - подчеркивание.
  • A_ALTCHARSET - альтернативная кодировка (см. раздел Линии на экране и прочая графика).

Эти атрибуты можно передавать в качестве аргумента подпрограмме attrset() или ей подобным. Им можно передавать комбинации атрибутов, объединенные операцией дизъюнкции (|).

Примечание

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

Рассмотрим использование одного из этих атрибутов. Следующий фрагмент программы обеспечивает отображение слова с повышенной яркостью:



. . . printw ("Яркое "); attrset (A_BOLD); printw ("слово"); attrset (0); printw (" бросается в глаза.\n"); . . . refresh ();

Атрибуты можно включать по одному, как в примере: attrset (A_BOLD), или в комбинации. Например, чтобы вывести яркий мерцающий текст, Вы можете использовать attrset (A_BOLD | A_BLINK). Те или иные атрибуты включаются и выключаются подпрограммами attron() и attroff() без какого-либо влияния на остальные атрибуты отображения. attrset (0) отключает все атрибуты.

Заметьте, что в набор атрибутов входит A_STANDOUT, который можно применять для привлечения внимания пользователя. Для физической реализации этого атрибута используется наиболее визуально выразительный способ отображения, возможный на данном терминале. Обычно это повышенная яркость или инверсия. Если нужно просто выделить часть текста, все равно, подсветкой, инверсией или как-либо еще, лучше использовать A_STANDOUT. Для его включения и выключения удобны функции standout() и standend() соответственно. Фактически, standend() отключает все атрибуты.


Кроме перечисленных атрибутов, имеется еще две битовые маски, а именно A_CHARTEXT и A_ATTRIBUTES. Их можно использовать для извлечения только символа или только атрибутов из значения, возвращаемого входящей в curses функцией inch(), путем их конъюнкции (операция & языка C) с этим значением. См. описание inch() в curses(3X).

Приведем описание attrset() и других подпрограмм curses, которые используются для управления атрибутами вывода.

attron( ), attroff( ), attrset( )

СИНТАКСИС
#include <curses.h>

int attron (attrs) chtype attrs;

int attrset (attrs) chtype attrs;

int attroff (attrs) chtype attrs;
ОПИСАНИЕ
  attron() включает запрошенные атрибуты attrs, сохраняя те, которые уже включены. attrs принадлежит к типу chtype, определяемому во включаемом файле <curses.h>.
attrset() включает запрошенные атрибуты attrs вместо тех, которые включены в момент обращения к ней.

attroff() выключает запрошенные атрибуты attrs, если они включены.

Атрибуты могут объединятся при помощи побитной операции ИЛИ (|).

Все подпрограммы возвращают OK.

ПРИМЕР
  См. программу highlight в разделе Примеры программ, работающих с curses.
standout( ), standend( )

СИНТАКСИС
  #include <curses.h>

int standout ( )

int standend ( )
ОПИСАНИЕ
  standout() включает атрибут A_STANDOUT и эквивалентен вызову attron (A_STANDOUT).
standend() выключает все атрибуты и эквивалентен вызову attrset (0).

Обе подпрограммы всегда возвращают OK.

ПРИМЕР
  См. программу highlight в разделе Примеры программ, работающих с curses.



Содержание раздела