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

     

Линии на экране и прочая графика


Многие терминалы поддерживают альтернативную кодировку для простых графических изображений (графические символы, или глифы). Этим набором символов можно пользоваться и в программах, работающих с curses. В curses используются те же названия глифов, что и в графическом наборе символов VT100.

Для работы с альтернативной кодировкой в curses-программе, необходимо передать подпрограмме waddch() (или подобной) последовательность символов, чьи имена начинаются с ACS_. Например, ACS_ULCORNER - это переменная для символа, изображающего левый верхний угол. Если терминал поддерживает этот символ, то в ACS_ULCORNER будет результат операции ИЛИ (|) соответствующего значения и битной маски A_ALTCHARSET. Если такого графического символа нет, используется символ из стандартного набора ASCII, аппроксимирующий требуемое изображение. Например, для аппроксимации ACS_HLINE, горизонтальной черты, используется - (знак минус). Если близкая аппроксимация невозможна, используется +, знак плюс. Все стандартные имена ACS_ и аппроксимирующие их символы перечислены в curses(3X).

Мы приведем часть текста программы, которая использует графические символы. В примере вызывается подпрограмма box(), входящая в пакет curses, для того, чтобы окружить меню на экране рамкой. По умолчанию box() использует графические символы, но по выбору пользователя может рисовать знаками и - [см. curses(3X)]. Если меню, изображенное в рамке, имеет продолжение вверх или вниз за пределы рамки, то для указания этого выводятся стрелки соответственно вверх или вниз (ACS_UARROW и ACS_DARROW).

box (menuwin, ACS_VLINE, ACS_HLINE); ... /* Вывод стрелок вверх/вниз */ wmove (menuwin, maxy, maxx - 5);

/* вывод стрелки вверх или горизонтальной черты */ if (moreabove) waddch(menuwin, ASC_UARROW); else waddch (menuwin, ACS_HLINE);

/* вывод стрелки вниз или горизонтальной черты */ if (morebelow) waddch (menuwin, ASC_DARROW); else waddch (menuwin, ACS_HLINE);

Приведем еще один пример. Поскольку символ для стрелки вниз (например, строчная v) не очень выделяется на экране, если на нем много строчных букв, этот символ можно заменить на прописную V.

if ( ! (ACS_DARROW & A_ALTCHARSET)) ACS_DARROW = 'V';

Более подробную информацию см. в Справочнике программиста, curses(3X).



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