WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Эта глава имеет дело с вводом/выводом символов на экран. Когда мы
говорим "символ", то подразумеваем композицию пикселов, которая может
меняться в зависимости от таблицы представлений символов (charset).
Ваша графическая карта уже предлагает одну или более таких таблиц и по
умолчанию работает в текстовом (charset) режиме, потому что текст
обрабатывается быстрее, чем пиксельная графика. Терминалы можно
использовать лучше, чем как простые и скучные текстовые дисплеи.
Рассмотрим, как использовать специальные возможности, которые
предлагает терминал Linux, особенно консоль Linux.
В следующих разделах мы рассмотрим, как пользоваться различными
пакетами доступа к терминалу. В Linux мы имеем GNU-версию termcap и
можем пользоваться ncurses вместо curses.
Функции printf(...) в libc обеспечивают форматированный вывод и
позволяют трансформировать аргументы.
format содержит два типа объектов:
Форматная информация должна начинаться с %, за которым следуют
значения для формата, дальше идет символ для трансляции (чтобы напечатать
знак %, используйте %%). Возможны следующие значения для
формата:
Возможные значения для трансформации смотри в таблице
8.1.
Точно так же, как printf(...) для форматированного вывода, Вы
можете использовать scanf(...) для форматированного ввода.
format может содержать правила форматирования аргументов (см.
таблицу 8.2. Он может также включать:
Библиотека termcap это API для базы данных termcap, которая
находится в /etc/termcap. Библиотечные функции позволяют:
Программы, использующие библиотеку termcap должны включать
termcap.h и собираться с:
Функции termcap терминально-независимые программы, но дают
программисту только низкоуровневый доступ к терминалу. Для пакета
более высокого уровня потребуется curses или ncurses.
Что касается buffer, то в GNU-версии Linux termcap не нужно
захватывать память. В других версиях вам придется выделить 2048 байт
(прежде buffer требовал 1024 байта, но сейчас размер удвоился).
tgetent(...) возвращает 1 в случае успеха и 0 когда база данных
найдена, но не имеет точки входа для TERM. Другие ошибки возвращают
различные значения.
Следующий пример объясняет как использовать tgetent(...):
По умолчанию termcap использует /etc/termcap как базу данных. Если
переменная среды TERMCAP установлена, например, в $HOME/mytermcap, то
все функции будут пользоваться mytermcap вместо /etc/termcap.
Без начального слэша в TERMCAP определенное значение понимается как имя для
терминала. Каждый фрагмент информации называется свойством (capability). Каждое
свойство это двухсимвольный код, за каждым двухсимвольным кодом стоит
значение свойства. Возможны следующие типы свойств:
Каждое свойство связано с единственным типом значений (co всегда
числовой, hc всегда флаг, а st всегда строка). Три типа
значений и три типа функций, их запрашивающих. char *name
двухсимвольный код свойства.
В этом разделе будем пользоваться следующей терминологией:
Обычно программа, использующая ncurses, выглядит так:
Подключение ncurses.h определит переменные и типы для ncurses,
такие как WINDOW, и прототипы функций. Автоматически подключатся
stdio.h, stdarg.h, termios.h и unctrl.h.
initscr() используется для инициализации структур данных ncurses
и для чтения файла terminfo. Будет захвачена память под stdscr и
curscr. Если произойдет ошибка, то initscr вернет ERR. В противном
случае возвращается указатель на stdscr. Кроме этого, экран будет
очищен и будут проинициализированы LINES и COLS.
endwin() очистит все выделенные ресурсы ncurses и восстановит
режимы tty, какими они были до вызова initscr(). Функция
endwin() должна вызываться перед любой другой функцией из библиотеки
ncurses и перед выходом из вашей программы. Если вы хотите использовать для
вывода более чем один терминал, используйте newterm(...) вместо
initscr().
Компилируйте программу посредством:
Вы можете устанавливать любые флаги (см. gcc(1)). Если путь к
ncurses.h изменился, вы должны включить следующую строку, иначе
ncurses.h, nterm.h, termcap.h и unctrl.h не будут найдены:
Другие возможные в Linux флаги: O2 скажет gcc произвести некоторую
оптимизацию; -ansi: для ANSI си-кода; -Wall выведет все
предупреждения; -m486 оптимизирует код для Intel 486 (можно и для
Intel 386).
Библиотека ncurses находится в /usr/lib. Существует 3 версии библиотеки:
Структуры данных для экрана называются windows и определены в
ncurses.h. Окно это нечто типа символьного массива в памяти, которым
программист может манипулировать без вывода на терминал. При помощи
newwin(...) вы можете создать другие окна.
Чтобы оптимально обновить физический терминал, ncurses имеет
другое окно, curscr. Это изображение, реально выводимое на экран. Для
отображения stdscr на экране используется функция refresh(). После
этого ncurses обновит curscr и физический терминал содержимым stdscr.
Библиотечные функции произведут внутреннюю оптимизацию для процесса
обновления, поэтому вы можете менять различные окна и затем обновлять
экран сразу самым оптимальным способом.
Функциями ncurses вы можете работать со структурой данных window.
Функции, начинающиеся с w, позволяют назначать окно window,
тогда как остальные обычно имеют дело с stdscr. Функции, начинающиеся с
mv, прежде всего переместят курсор на позицию y,x.
Символы имеют тип chtype, который является long unsigned int
, чтобы сохранять дополнительную информацию о себе (атрибуты и т.д.).
Библиотека ncurses использует базу данных terminfo. Обычно она
находится в usr/lib/terminfo/, и ncurses обращается туда за локальными
определениями терминала. Если вы хотите проверить некоторые другие
определения для терминала, не исправляя первоначальную terminfo,
установите соответственно переменную среды TERMINFO. Эта переменная
будет протестирована ncurses, и вместо usr/lib/terminfo/ сохранятся
ваши определения.
Текущей версией ncurses является (на момент написания книги) 1.8.6.
В конце этого раздела вы найдете обзорную таблицу для BSD-Curses,
ncurses и Sun-OS 5.4 curses.
initscr() прочитает terminfo файл и установит структуры данных
ncurses, выделит память для curscr и stdscr и проинициализирует переменные
LINES и COLS значениями, соответствующими вашему терминалу. Будет возвращен
указатель на stdscr или ERR в случае ошибки. Вам НЕ нужно
инициализировать указатель.
Дополнительный вызов refresh() после endwin() восстановит
содержимое терминала, отображавшееся до вызова initscr()
(visual-mode), в противном случае экран будет очищен (non-visual-mode).
Окна могут быть созданы, уничтожены, перемещены, скопированы,
задублированы и т.д.
Верхний левый угол нашего окна находится в строке 10 в колонке
10; окно имеет 10 строк и 60 колонок. Если nlines равна нулю, окно
будет иметь (LINES-begy) строк. Точно так же, если ncols
равна нулю, то окно будет иметь (COLS-begx) колонок.
Когда мы вызываем newwin(...) с нулевыми аргументами:
При помощи LINES и COLS мы можем открыть окно на
середине экрана, какую бы размерность оно ни имело:
Откроется окно с 22 строками и 70 колонками в середине экрана.
Проверьте размер экрана перед тем, как открывать окно. Консоль Linux
имеет не менее 25 строк и 80 колонок, но на Х-терминалах это может не
выполняться (их размеры изменяемы).
С другой стороны, используйте LINES и COLS, чтобы
поместить два окна в один экран:
Подробнее смотрите screen.c в директории с примерами.
begx и begy относятся не к origwin, а к экрану.
В libc printf() используется для форматированного вывода. Вы
можете определять выводимую строку и включать в нее переменные
различных типов. Подробнее смотрите раздел 8.1.1.
vwprintw(...) требует подключения varargs.h. y и x координаты, на которые переместится курсор перед
вставкой str; n это число вставляемых символов
(n=0 вводит чистую строку). y и x координаты, на которые курсор переместится перед
удалением.
Рисунок 8.2: Символы бокса в ncurses.
С включенной keypad(...) при нажатии функциональной клавиши
getch() вернет код, определенный в ncurses.h как макрос KEY_*. При
нажатии ESCAPE (который может быть началом функциональной клавиши)
ncurses запустит односекундный таймер. Если остаток не получен в
течение этой секунды, то возвращается ESCAPE, иначе значение
функциональной клавиши. При необходимости секундный таймер можно
отключить через notimeout().
Поговорим об использовании опций окна и режимов терминала.
Прежде всего, под Linux следует подключить keypad. Это
позволит пользоваться цифровым блоком и клавишами перемещения курсора
на клавиатуре ПК.
Теперь имеется 2 основных типа ввода:
Для первого случая мы установим следующие опции и режимы, и цикл
while сработает корректно:
Эта программа повиснет до нажатия клавиши. Если нажата q, мы
вызываем your_quit_function(), иначе ждем другого ввода.
Выражение switch может быть расширено по нашему желанию. Макросы
KEY_* служат для учета специальных клавиш. Например,
Для второго случая, нам достаточно установить echo(), и символы,
набираемые пользователем, будут напечатаны на экране. Место печати
задается функциями move(...) или wmove(...).
Или вы можете открыть окно с маской (выделяемой другими цветами)
и попросить пользователя ввести строку:
Более подробно см. input.c в каталоге примеров.
Проблема состоит в том, что ncurses иногда делает совершенно
бесполезными атрибуты окна, когда заполняет экран пробелами. Если в
lib_clrtoeol.c BLANK определен как
Как написано в обзоре, окна ncurses есть отображения в памяти.
Это означает, что любое изменение окна не отражается на физическом
экране до тех пор, пока не будет произведено обновление. Это
оптимизирует вывод на экран, поскольку вы получаете возможность
совершать множество действий, а затем лишь единожды вызвать
обновление, чтобы напечатать его на экране. В противном случае на терминале
отражалось бы каждое изменение, что ухудшало бы исполнение ваших программ.
Допустим, мы имеем следующую программу с двумя окнами. Мы
изменяем оба окна, меняя несколько линий текста. Напишем
cgangewin(win) с wrefresh(win).
Тогда ncurses обновит терминал дважды, а это замедлит исполнение
нашей программы. Благодаря doupdate() мы изменим changewin(win)
и нашу основную функцию, добившись этим лучшего исполнения.
wtouchln() захватит n линий, начинающихся в y.
Если change соответствует TRUE, то линии захватываются, в противном
случае нет (изменяются или не изменяются).
untouchwin(win) пометит окно win как неизмененное со
времени последнего вызова refresh().
Атрибуты это специальные возможности терминала, применяемые во время
печати символов на экран. Символы могут быть напечататы жирно, могут быть
подчеркнуты, могут мигать и т.д. В ncurses вы имеете возможность включать или
отключать атрибуты для достижения наилучшего внешнего вида вывода. Возможные
атрибуты перечислены в нижеследующей таблице.
Ncurses определяет 8 цветов, которыми вы можете пользоваться на
терминале с цветовой поддержкой. Сначала проинициализируйте цветовые
структуры данных посредством start_color(), затем проверьте
возможности терминала при помощи has_colors(). start_color() будет
инициализировать COLORS, наибольшее количество цветов, поддерживаемых
терминалом, и COLOR_PAIR, максимальное число цветовых пар, которые вы
можете определить.
Атрибуты могут быть совмещены '|' (OR), поэтому вы можете
получить четкий мерцающий вывод при помощи A_BOLD|A_BLINK
Если вы установите окно с атрибутом attr, все символы,
напечатанные в этом окне, приобретут это свойство и будут его
сохранять до изменения вами атрибута. Это не будет утеряно при
прокрутке или движении окна и т.п.
Будьте осторожны с цветами, если вы пишете программы для ncurses
и BSD curses, так как BSD curses не имеет цветовой поддержки. (Точно
так же не имеют цветовой поддержки старые версии SYS V). Поэтому, если
вы компилируете для обеих библиотек, придется использовать операции #ifdef.
Как комбинировать атрибуты и цвета? Некоторые терминалы, как
консоли в Linux, имеют цвета, а некоторые нет (xterm, vs100 и
т.д.). Следующий код решит эту проблему:
Прежде всего, функция CheckColor проинициализирует цвета при
помощи start_color(). Затем has_colors() вернет TRUE, если
текущий терминал имеет цвета. После этого вызывается ini_tpair(...)
для соединения цветов переднего и заднего плана, и wattrset(...) для
установки этих цветов в данном окне. Впрочем, чтобы установить атрибуты для
черно-белого терминала, мы можем использовать только wattrset(...).
Чтобы получить цвета на xterm, лучший способ, найденный автором, это
использовать ansi_xterm с надерганными элементами terminfo из
Midnight Commander. Просто добудьте исходники ansi_xterm и Midnight
Commander (mc-x.x.tar.gz). Потом скомпилируйте ansi_xterm и
используйте tic с xterm.ti и vt100.ti из архива mc-x.x.tar.gz.
Запустите ansi_xterm и протестируйте его.
При включенном scrollok(...) содержимое окна может быть
прокручено при помощи нижеследующих функций. Замечание: оно будет
прокручено и в случае, если вы напечатаете новую строку, находясь в
последней строке окна, поэтому будьте осторожны со scrollok(...).)
Следующий код объяснит, как прокручивать текст на экране. Смотрите также
type.c в директории примеров.
Мы хотим прокрутить текст в окне, имеющем 18 линий и 66 колонок. S[]
это массив символов с текстом. Max_s является номером последней
строки в S[]. Clear_line напечатает пробелы с текущей
позиции курсора до конца строки, используя текущие атрибуты окна (не
A_NORMAL, как это делает clrtoeol). Beg это последняя строка из
s[], изображенная на данный момент на экране. Scroll перечень
того, что должна сделать функция, показать NEXT или PREVious (следующую или
предыдущую) строку текста.
Последние шесть числовых свойств присутствуют в структуре term SYSV, но не
задокументированы в man page. Комментарии взяты из заголовка этой структуры.
Вперед: 9 Программирование
портов ввода/вывода
Оглавление: Оглавление
Назад: 7 Программирование
звук а
8 Символьная графика
С этими функциями libc вы можете выдавать форматированные строки
в stdout (стандартный вывод), stderr (стандартная ошибка) или другие потоки,
определенные как FILE *stream (например, файлы). sscanf
обеспечивает подобные возможности для чтения форматированного ввода из stdin.
База данных TERMinal CAPabilitie это таблица элементов описания
работы с терминалом в ASCII-файле /etc/termcap. Здесь вы можете найти
информацию о том, как выводить специальные символы, как осуществлять
операции (удаления, вставки символов или строк и т.д.) и как
инициализировать терминал. База данных используется, например,
редактором vi. Имеются библиотечные функции для чтения и использования
возможностей терминала (смотри termcap(3x)). С этой базой данных
программы могут работать с различными терминалами одним и тем же
кодом. База данных termcap и библиотечные функции предоставляют только
низкоуровневый доступ к терминалу. Изменение атрибутов или цветов,
параметризованный вывод и оптимизация остаются программисту.
База данных TERMinal INFOrmation построена над базой данных
termcap и описывает некоторые возможности терминалов на более высоком
уровне. С terminfo программа может легко менять атрибуты экрана,
используя специальные клавиши, такие как функциональные клавиши и др.
Эта база данных может быть найдена в /usr/lib/terminfo/[A-z,0-9]*.
Каждый файл описывает один терминал.
Terminfo хорошая база для работы с терминалом в программе.
Библиотека (BSD-)curses дает вам высокоуровневый доступ к терминалу,
базируясь на terminfo. curses позволяет открывать и манипулировать
окнами на экране, предоставляет весь необходимый набор функций
ввода/вывода и может изменять видеоатрибуты терминально-независимым
образом на более чем 150 терминалах. Библиотека находится в
/usr/lib/libcurses.a. Это BSD-версия curses.
ncurses представляет собой развитие curses. В версии 1.8.6 она должна быть
совместима с AT&T curses, как это определено в SYSVR4, и иметь
несколько расширений, таких как манипулирование цветами, специальная
оптимизация для вывода, оптимизации, зависящие от терминала, и др.
ncurses была протестирована на множестве систем, таких как Sun-OS, HP
и Linux. Автор рекомендует предпочесть ncurses всему остальному. В
SYSV Unix системах (например, Solaris) должна существовать библиотека
curses с теми же функциональными возможностями, что и ncurses (на
самом деле солярисовская curses имеет немного больше функций и
поддержку мыши).8.1 Функции ввода/вывода в libc
8.1.1 Форматированный вывод
преобразует выводимые аргументы в соответствии с шаблоном и записывает его в
stream. Формат определяется аргументом format.
Функция возвращает число записанных символов или отрицательное число в
случае ошибки.
Форматированный аргумент будет при печати прижат влево на своем поле.
Каждое число будет напечатано со знаком, например, +12 или
-2.32.
Если первый символ не знак, то будет вставлен пробел.
Для чисел ширина поля будет заполнена слева нулями.
Изменяет вывод в зависимости от трансформации для аргумента:
Трансформированный аргумент печатается в поле, ширина которого не
меньше, чем сам аргумент. С этим числом вы можете увеличить ширину
поля. Если аргумент меньше, то оставшаяся часть поля заполняется
пробелами или нулями.
То же самое, что fprintf(stdout, ...).
То же, что и printf(...), но вывод будет записан в символьный
указатель s (с последующим \
0). Вы должны
захватить достаточно памяти для s!
vfprintf(FILE *stream, const char *format, va_list arg)
vsprintf(char *s, const char *format, va_list arg)
То же, что и для вышеописанных функций, только список аргументов
находится в arg.Символ Форматируется в d,i int signed, десятиричный o int unsigned, восьмеричный, без предваряющего 0 x,X int unsigned, шестнадцатиричный, без предваряющего 0x u int unsigned, десятиричный c int (unsigned) одиночный символ s char * до \0 f double как [-]mmm.ddd e,E double как [-]m.dddddde+xx, [-]m.dddddde-xx g,G double использует %e или %f когда нужно p void * n int * % %
Таблица 8.1: Libc: трансформации printf
8.1.2 Форматированный ввод
fscanf(...) читает из stream и преобразует ввод по правилам,
определяемым в format. Результаты помещаются в аргументы, заданные в
"..." (эти аргументы должны быть указателями!). Чтение
заканчивается, когда в format исчерпаны правила форматирования.
fscanf вернет EOF, при первом достижении конца файла или при
возникшей ошибке. Если этого не случится, будет возвращено количество
трансформированных аргументов.
То же, что fscanf(stdin,...).
То же, что scanf, но ввод производится из строки str.Символ Вход: тип аргумента d десятичный integer: int* i integer: int* (вход может быть восьми
или шестнадцатиричным) o восьмеричный integer: int* (с или без предваряющего 0)
u десятичный unsigned: unsigned int* x шестнадцатиричный integer: int* (с или без предваряющего
0x) c один или более символов: char* (без завершающего /0)
e,f,gf float: float* (такой как [-]m.dddddde+xx,
[-]m.dddddde-xx) p указатель: void* n число трансформированных аргументов: int* [...] непустое множество символов на входе: char* [^...] исключая такие символы: char* % %
Таблица 8.2: Libc: правила scanf
перед d,i,n,o,u,x может стоять h, если указатель short
то же для l, если указатель long
l также может быть перед e,f,g, если указатель double
L может стоять перед e,f,g, если указатель long double
8.2 Библиотека termcap
8.2.1 Введение
gcc [flags] files -ltermcap
8.2.2 Поиск описания терминала
В операционной системе Linux текущее имя терминала содержится в
переменой среды TERM. Поэтому termtype есть результат вызова
getenv(3).
#define buffer 0
char *termtype=getenv("TERM");
int ok;
ok=tgetent(buffer,termtype);
if (ok==1)
/* все нормально, мы имеем вход */
else if(ok==0)
/* Что-то не так с TERM
* проверим сначала termtype, затем базу данных termcap
*/
else
/* Глобальная ошибка */
8.2.3 Описание терминала
Получение свойства с числовым значением, таким как co. Функция
tgetnum(...) возвращает числовое значение, если свойство доступно, 1 в
противном случае. Заметьте, что возвращаемое значение всегда неотрицательно.
Получение логического свойства. Возвращает 1, если флаг
установлен, 0 в противном случае.
Получение строкового свойства. Возвращает указатель на строку или
NULL в случае отсутствия. В GNU-версии, если area есть NULL, termcap
выделит память сам. termcap больше не позаботится об этом указателе,
если вы не освободите name перед выходом из программы. Такой метод
предпочтителен, поскольку вы не знаете сколько памяти потребуется для
указателя, поэтому позвольте termcap сделать все за вас.8.2.4 Свойства termcap
Boolean
5i принтер не имеет эха на экране am автоматические границы, что означает автоматическое
форматирование строки bs Crtl-H представляет backspace bw backspace на левой границе переносит строку на правую
границу предыдущей da вывести сохраненное над текущим экраном db вывести сохраненное под текущим экраном eo пробел стирает литеру на позиции курсора es esc-последовательности и специальные символы работают в
строке состояния gn родовое устройство hc это терминал твердой копии (hardcopy terminal) HC курсор плохо видно, когда он не на последней линии
hs присутствует линия статуса hz терминал не может напечатать тильды (tilde characters)
in терминал вставляет нули вместо пробелов на пустые места
km терминал имеет мета клавишу mi режим вставки для курсора ms режим стандартного вывода/подчеркивания для курсора
NP нет символов-заполнителей NR ti не обращает teos, терминал может забивать ошибки
ul терминал подчеркивает, но ошибки забивать не может
xb сбой, вызванный столпотворением, F1 посылает ESCAPE, F2
посылает ^C xn сбой новой строки/соединения строк xo терминал использует xon/xoff протокол xs текст, напечатанный поверх выделенного, будет выделен
xt сбой телевизионного луча, неверная табуляция и странный
режим выделения Numeric
co число столбцов dB приостановка на милисекунды для возврата на терминалах
твердой копии dC приостановка на милисекунды для перевода каретки на
терминалах твердой копии dF приостановка на милисекунды для заполнения страницы на
терминалах твердой копии dN приостановка на милисекунды для новой линии на терминалах
твердой копии dT приостановка на милисекунды для табуляции на терминалах
твердой копии dV приостановка на милисекунды для вертикальной табуляции на
терминалах твердой копии it раница между позициями табуляции lh высота мягких меток lm линии памяти lw ширина li число линий Nl число мягких меток pb наименьшая граница, когда требуется дозаполнение sg сбой режима выделения ug сбой режима подчеркивания vt номер виртуального терминала ws ширина линии статуса, если она отлична от ширины экрана
String
!1 клавиша сохранения в верхнем регистре !2 клавиша подвешивания в верхнем регистре !3 клавиша undo в верхнем регистре #1 клавиша помощи в верхнем регистре #2 клавиша home в верхнем регистре #3 клавиша ввода в верхнем регистре #4 клавиша курсор влево в верхнем регистре %0 клавиша redo %1 клавиша помощи %2 клавиша пометки %3 клавиша сообщения %4 клавиша перемещения %5 клавиша следующего объекта %6 клавиша открытия %7 клавиша опций %8 клавиша предыдущего объекта %9 клавиша печати %a клавиша сообщения в верхнем регистре %b клавиша перемещения в верхнем регистре %c клавиша следующего объекта в верхнем регистре %d клавиша опций в верхнем регистре %e клавиша предыдущего объекта в верхнем регистре %f клавиша печати в верхнем регистре %g клавиша redo в верхнем регистре %h клавиша перестановки в верхнем регистре %i клавиша курсор-вправо в верхнем регистре %j клавиша продолжения в верхнем регистре &0 клавиша cancel в верхнем регистре &1 клавиша ссылки &2 клавиша обновления &3 клавиша перестановки &4 клавиша перезапуска &5 клавиша продолжения &6 клавиша сохранения &7 клавиша подвешивания &8 клавиша undo &9 клавиша начала в верхнем регистре *0 клавиша поиска в верхнем регистре *1 клавиша команды в верхнем регистре *2 клавиша копирования в верхнем регистре *3 клавиша создания в верхнем регистре *4 клавиша удаления символа в верхнем регистре *5 клавиша удаления строки в верхнем регистре *6 клавиша выделения *7 клавиша конца в верхнем регистре *8 клавиша очистки линии в верхнем регистре *9 клавиша выхода в верхнем регистре 0 клавиша поиска1 клавиша начала 2 клавиша cancel 3 клавиша закрытия 4 клавиша команды 5 клавиша копирования 6 клавиша создания 7 клавиша конца 8 клавиша ввода/посылки 9 клавиша выхода al клавиша вставки одной линии AL клавиша вставки %1 линий ac цвет блока символов, отображаемых в другой таблице
символов ae конец множества символов из альтернативной таблицы
as начало блока символов в альтернативной таблице bc backspace, если не ^H bl символ звонка bt переход к предыдущему месту табуляции cb очистка от начала линии до курсора cc странный командный символ cd очистка до конца экрана ce очистка до конца линии ch перемещение курсора горизонтально до столбца %1 cl очистка экрана, курсор помещается в начало cm курсор перемещается на строку %1 и колонку %2 (на экране)
CM курсор перемещается на строку %1 и колонку %2 (в памяти)
cr возврат каретки cs область прокрутки от строки %1 до строки %2 ct очистка табуляций cv вертикальное движение курсора до строки %1 dc удаление 1 символа DC удаление %1 символов dl удаление 1 строки DL удаление %1 строк dm начало режима удаления do курсор на 1 линию вниз DO курсор на %1 линию вниз ds убрать строку статуса eA активирование альтернативной символьной таблицы ec удаление %1 символов начиная с позиции курсора ed конец режима удаления ei конец режима вставки ff символ дозаполнения экрана на терминалах твердой копии
fs возврат символа на его позицию перед переходом на строку
статуса F1 строка послана функциональной клавишей F11 ... ...
F9 строка послана функциональной клавишей F19 FA строка послана функциональной клавишей F20 ... ...
FZ строка послана функциональной клавишей F45 Fa строка послана функциональной клавишей F46 ... ...
Fr строка послана функциональной клавишей F63 hd перемещение курсора на пол-линии вниз ho курсор в начало hu перемещение курсора на пол-линии вверх i1 инициализация строки 1 в начале сеанса i3 инициализация строки 3 в начале сеанса is инициализация строки 2 в начале сеанса ic вставка 1 символа IC вставка %1 символов if файл инициализации im начало режима вставки ip вставка времени и необходимых специальных символов после
вставки iP программа инициализации K1 верхняя левая клавиша на keypad K2 центральная клавиша на keypad K3 верхняя правая клавиша на keypad K4 нижняя левая клавиша на keypad K5 нижняя правая клавиша на keypad k0 функциональная клавиша 0 ... ... k9 функциональная клавиша 9 k; функциональная клавиша 10 ka клавиша очистки всех табуляций kA клавиша вставки линии kb клавиша backspace kB клавиша возврата к предыдущему месту табуляции kC клавиша очистки экрана kd клавиша down kD клавиша удаления символа под курсором ke отключение keypad kE клавиша очистки до конца строки kh клавиша курсор home kH клавиша курсор home+down kI вставка символа/клавиша режима вставки kl клавиша курсор left kL клавиша удаления строки kM Mклавиша выхода из режима вставки kN клавиша следующей страницы kP клавиша предыдущей страницы kr клавиша курсор right kR клавиша прокрутки назад/вверх ks включение keypad kS клавиша очистки до конца экрана kt клавиша очистки данной табуляции kT клавиша установки табуляции на этом месте ku клавиша курсор up l0 метка для нулевой функциональной клавиши, если не f0
l1 метка для первой функциональной клавиши, если не f1
l2 метка для второй функциональной клавиши, если не f2
... la метка для десятой функциональной клавиши, если не f10
le курсор влево на 1 символ ll перемещение курсора в нижний левый угол LE курсор влево на %1 символов LF отключение мягких меток LO включение мягких меток mb начало мерцания MC очистка мягких границ md начало режима верхнего регистра me конец всех режимов типа so, us, mb, md, mr mh начало полуяркого режима mk начало темного режима (символы не видны) ML установка левой мягкой границы mm вход терминала в метарежим mo выход терминала из метарежима mp включение защищенного атрибута mr начало режима обращения (reverse mode) MR установка правой мягкой границы nd курсор на 1 символ влево nw команда возврата каретки pc символ-заполнитель pf отключение принтера pk программная клавиша %1 для посылки строки %2, если нажата
пользователем pl программная клавиша %1 для исполнения строки %2 в
локальном режиме pn программная мягкая метка %1 для отображения строки %2
po подключение принтера pO подключение принтера для %1 (<256) байт ps печать содержимого экрана на принтере px программная клавиша %1 для посылки строки %2 в компьютер
r1 сброс строки 1, установка нормальных режимов r2 сброс строки 2, установка нормальных режимов r3 сброс строки 3, установка нормальных режимов RA отключение автоматических границ rc восстановление сохраненной позиции курсора rf сброс строки имени файла RF требование ввода с терминала RI курсор вправо на %1 символов rp повторение символа %1 %2 раз rP заполнение после присланного символа в режиме замены
rs сброс строки RX выключение XON/XOFF управления sa установка атрибутов %1 %2 %3 %4 %5 %6 %7 %8 %9 SA включение автоматических границ sc сохранение позиции курсора se конец режима стандартного вывода sf нормальная прокрутка на одну строку SF нормальная прокрутка на %1 строк so начало режима стандартного вывода sr обратная прокрутка SR прокрутка назад на %1 строк st установка табуляции во всех строках в данной колонке
SX включение XON/XOFF управления ta перемещение к следующей табуляции физического устройства
tc чтение в описании терминала с другой точки входа te конец программы, использующей движение курсора ti начало программы, использующей движение курсора ts перемещение курсора на столбец %1 строки статуса uc подчеркивание символа под курсором и движение курсора
вправо ue конец подчеркивания up курсор на 1 строку вверх UP курсор на %1 строк вверх us начало подчеркивания vb видимый звонок ve нормальный видимый курсор vi невидимый курсор vs курсор стандартного вывода wi установка окна со строки %1 до строки %2 и столбцов с %3
до %4 XF символ XOFF, если не ^S 8.3 Введение в ncurses
#include
gcc [flags] files -lncurses
-I/usr/include/ncurses
8.4 Инициализация
Обычно это первая функция, вызываемая из программы, использующей ncurses. В
некоторых случаях полезно вызывать slk_init(int), filter(),
ripoffline(...) или use_env(bf) перед initscr(). Для
работы с несколькими терминалами (или тестирования возможностей системы) Вы
можете использовать newterm(...) вместо initscr().
stdscr=initscr();
поскольку initscr() сделает это за вас. Если возвращен ERR, ваша
программа должна завершиться, поскольку ни одна функция ncurses не
будет работать:
if (!(initscr()))
{
fprintf(stderr,"type: initscr() failed\n\n");
exit (1);
}
Работая в ncurses с несколькими терминалами, вы должны вызвать для каждого из
них newterm(...) вместо initscr(). type это имя
терминала как оно содержится в $TERM (ansi, xterm, vt100, например).
outfd это указатель для вывода, infd указатель для ввода. Для
каждого терминала, открытого newterm(...), следует вызывать
endwin().
При помощи set_term(SCREEN) Вы можете переключать текущий
терминал. Все функции будут работать с текущим терминалом,
установленным set_term(SCREEN).
endwin() произведет очистку, восстановит режимы терминала,
сохраненные перед вызовом initscr(), и поставит курсор в левый
верхний угол экрана. Не забудьте закрыть все окна перед тем, как вызвать
endwin(), перед выходом из вашей программы.
Возвращает TRUE, если после endwin() была вызвана refresh(),
иначе FALSE.
Вызывается после endwin() для высвобождения всех занятых
ресурсов, когда SCREEN больше не нужен.8.5 Окна
begy и begx координаты верхнего левого угла окна. nlines
это число линий (integer); ncols число колонок (integer).
0 begx
| |
0 | | COLS
- - - - -------|-------------------------|------->
| | ncols |
begy | |<. . . . . . . . . . . .>|
- - - -|- - - -|-------------------------|
| ^| |
| .| |
| .| |
|nlines.| newwin(nlines, ncols, |
| .| begy, begx) |
| v| |
|- - - -|-------------------------|
LINES |
v
Рисунок 8.1: Ncurses: схема для newwin
WINDOW *mywin;
mywin=newwin(0,0,0,0);
открытое окно получает размеры экрана.
#define MYLINE (int) ((LINES-22)/2)
#define MYCOL ((COLS-70)/2)
#define MYLINES 22
#define MYCOLS 70
...
WINDOW *win;
...
if(!(initscr())){
fprintf(stderr, "type: iniscr() failed\n\n");
exit(1);
}
...
if ((LINES<22)||(COLS<70)){
fprintf(stderr, "screen too small\n\n");
endwin(); exit (1);
}
win=newwin(MYLINES,MYCOLS,MYLINE,MYCOL);
#define MYROWS (int) (LINES/2+LINES/4)
#define MYCOLS (int) (COLS/2+COLS/4)
#define LEFTROW (int) ((LINES-MYROWS)/2)
#define LEFTCOL (int) (((COLS-2)-MYCOLS)/2)
#define RIGHTROW (int) (LEFTROW)
#define RIGHTCOL (int) (LEFTROW+2+MYCOLS)
#define WCOLS (int) (MYCOLS/2)
...
WINDOW *leftwin, *rightwin;
...
leftwin=newwin(MYROWS, WCOLS, LEFTROW, LEFTCOL);
rightwin=newwin(MYROWS, WCOLS, RIGHTROW, RIGHTCOL);
...
Удаляет окно win. Подокна win удаляются перед win.
Будут освобождены все ресурсы, занятые win. Удаляйте все открытые
вами окна перед вызовом endwin().
Перемещает окно на координаты by,bx. Если это означает выход за
пределы экрана, то ничего не произойдет и будет возвращен ERR.
Возвращает подокно в середине origwin. Когда вы изменяете одно
из двух окон (origwin или новое), это изменение отразится на обоих
окнах. Вызывайте touchwin(origwin) перед следующим refresh().
То же, что subwin(), begx и begy относятся не к
экрану, а к origwin.
Перенесет win за пределы родительского окна.
Дублирует окно win.
int overwrite(win1, win2)
overlay(...) скопирует весь текст из win1 в win2,
игнорируя пропуски. overwrite(...) делает то же самое, но копирует
вместе с пропусками.
dmaxrow, dmaxcol, overlay)
То же, что overlay(...) и overwrite(...), но позволяет
контролировать область окна для копирования.8.6 Вывод
int waddch(win, ch)
int mvaddch(y, x, ch)
int mvwaddch(win, y, x, ch)
Эти функции выводят символ в окно. Они работают с окном; Вам
нужно вызвать refresh(), чтобы поместить окно на экран. Функции
addch(...) и waddch(...) помещают символ ch в окно
или win. mvaddch(...) и mvwaddch(...) предварительно
ставят курсор на позицию y,x.
int addnstr(str, n)
int waddstr(win, str)
int waddnstr(win, str, n)
int mvaddstr(y, x, str)
int mvaddnstr(y, x, str, n)
int mvwaddstr(win, y, x, str)
int mvwaddnstr(win, y, x, str, n)
Эти функции заносят строку в окно и эквивалентны сериям вызовов
addch(...). str это строка, заканчивающаяся символом с
кодом 0 ("blafoo\
0"). Функции, начинающиеся с
w, заносят str в окно win, остальные в stdscr.
Функции с n пишут n символов строки str. Если
n равен -1, будет записана вся строка str.
int addchnstr(chstr, n)
int waddchstr(win, chstr)
int waddchnstr(win, chstr, n)
int mvaddchstr(y, x, chstr)
int mvaddchnstr(y, x, chstr, n)
int mvwaddchstr(win, y, x, chstr)
int mvwaddchnstr(win, y, x, chstr, n)
Эти функции копируют chstr в окно stdscr или win.
Начальной позицией является позиция курсора. Функции с n пишут
n символов строки chstr. Если n равен -1, будет
записана вся строка. Курсор не двигается и символы не контролируются. Эти
функции быстрее, чем addstr(...). chstr является указателем
на массив элементов chtype.
int wechochar(win, ch)
То же, что addch(...), waddch(win), с последующим
refresh(), wrefresh(win).8.6.1 Форматированный вывод
int wprintw(win, fmt, ...)
int mvprintw(y, x, fmt, ...)
int mvwprintw(win, y, x, fmt, ...)
int vwprintw(win, fmt, va_list)
Эти функции соответствуют printf(...) и подобным ей функциям libc.
8.6.2 Вставка символов и строк
int winsch(win, c)
int mvinsch(y,x,c)
int mvwinsch(win,y,x,c)
Символ ch вставляется слева от курсора, и все символы сдвигаются
на одну позицию вправо. Самый правый символ строки может быть потерян.
int winsertln(win)
Вставляет чистую строку над текущей. Нижняя строка будет потеряна.
int winsdelln(win, n)
Для положительного n эти функции вставляют n строк в
соответствующем окне (n нижних строк будут потеряны). Для
отрицательных n будут удалены n строк под курсором,
оставшиеся сдвинутся вверх.
int insnstr(str, n)
int winsstr(win, str)
int winsnstr(win, str, n)
int mvinsstr(y, x, str)
int mvinsnstr(y, x, str, n)
int mvwinsstr(win, y, x, str)
int mvwinsnstr(win, y, x, str, n)
Эти функции вставят str в текущую строку слева от курсора
(сколько возможно до конца строки). Символы справа от курсора
сдвигаются вправо и удаляются достигнув конца строки. Курсор остается
на месте.
8.6.3 Удаление символов и строк
int wdelch(win)
int mvdelch(y, x)
int mvwdelch(win, y, x)
Выполняется удаление символа под курсором и сдвиг оставшейся справа от
курсора строки на одну позицию влево.
int wdeleteln(win)
Удаление строки под курсором и перемещение нижележащих линий на
одну позицию вверх. Последняя линия окна будет очищена.8.6.4 Боксы и линии
int wborder(win, ls, rs, ts, bs, tl, tr, bl, br)
int box(win, vert, hor)
Очерчивают соответствующее окно (stdscr или win). В таблице 8.3
вы увидите символы и их значения по умолчанию для box(...). На
картинке вы увидите позиции символов для бокса.
int wvline(win, ch, n)
int hline(ch, n)
int whline(win, ch, n)
Эти функции вычерчивают вертикальную или горизонтальную прямую
начиная с позиции курсора. ch это используемый символ, n
задает число таких символов. Позиция курсора не изменяется.8.6.5 Фоновый (background)
символ
void wbkgdset(win, ch)
Устанавливает фоновый символ и атрибут для экрана или окна.
Атрибут в ch будет OR-нут с каждым непробельным символом окна. Фон
становится частью окна и не изменяется при прокрутке и вводе/выводе.
int wbkgd(win, ch)
Установит в ch фоновый символ и атрибут.Код символа Позиция По умолчанию tl левая верхняя ACS_ULCORNER ts верхняя сторона ACS_HLINE tr правая верхняя ACS_URCORNER ls левая сторона ACS_VLINE rs правая сторона ACS_VLINE bl левая нижняя ACS_LLCORNER bs нижняя сторона ACS_HLINE br правая нижняя ACS_LRCORNER rt правая средняя ACS_RTEE lt левая средняя ACS_LTEE tt верхняя средняя ACS_TTEE bt нижняя средняя ACS_BTEE
Таблица 8.3: Ограничительные символы Ncurses
tl ts tt ts tr
|------------|------------|
| |
ls| | |rs
| |
| | |
lt|- - - - - - - - - - - - -|rt
| | |
| |
ls| | |rs
| |
|------------|------------|
bl bs bt bs br
8.7 Ввод
int wgetch(win)
int mvgetch(y, x)
int mvwgetch(win, y, x)
getch() прочитает ввод с терминала. Если режим паузы установлен,
getch() будет ждать нажатия клавиши. Если нет, вернет клавишу из
буфера ввода или ERR, если буфер пуст. mvgetch(...) и
mvwgetch(...) сначала установят курсор на позицию y,x.
w-функции читают ввод с терминала, связанного с окном win,
getch() и mvgetch(...) с stdscr.
Вернет ch в буфер ввода.
int wgetstr(win, str)
int mvgetstr(y, x, str)
int mvwgetstr(win, y, x, str)
int wgetnstr(win, str, n)
Эти функции проделают серию вызовов getch(), пока не будет
получена новая строка. Символы помещаются в str, поэтому не
забывайте захватывать память для вашего символьного указателя перед вызовом
getstr(). Если включено эхо, то строка отображается (используйте
noecho(), чтобы его отключить) и пользовательские символы удаления
будут проинтерпретированы.
chtype winch(win)
chtype mvinch(y, x)
chtype mvwinch(win, y, x)
Эти функции возвращают символ с экрана или окна. Поскольку
возвращается тип chtype, возвращается и атрибут. Информация об
атрибуте может быть получена с помощью констант A_* (см.
таблицу 8.4).
int innstr(str, n)
int winstr(win, str)
int winnstr(win, str, n)
int mvinstr(y, x, str)
int mvinnstr(y, x, str, n)
int mvwinstr(win, y, x, str)
int mvwinnstr(win, y, x, str, n)
Возвращает символьную строку из экрана или окна.
int inchnstr(chstr, n)
int winchstr(win, chstr)
int winchnstr(win, chstr, n)
int mvinchstr(y, x, chstr)
int mvinchnstr(y, x, chstr, n)
int mvwinchstr(win, y, x, chstr)
int mvwinchnstr(win, y, x, chstr, n)
Возвращает строку типа chtype из экрана или окна вместе с
атрибутом для каждого символа. Пока не реализована; lib_inchstr не
включена в библиотеку ncurses.
8.7.1 Форматированный ввод
int wscanw(win, fmt, ...)
int mvscanw(y, x, fmt, ...)
int mvwscanw(win, y, x, fmt, ...)
int vwscanw(win, fmt, va_list)
Функции эквивалентны scanf(...) из libc (см.
раздел 8.1.2). Входом для сканирования служит вызов
wgetstr(...).8.8 Опции
Опции вывода
void idcok(win, bf)
Включение и отключение возможностей вставки/удаления для окна
терминала (idlok(...) для строк, idcok(...) для символов).
Если устанавливается TRUE, то каждое изменение в окне win вызывает
физическое обновление экрана. Это может ухудшить характеристики
программы, поэтому значение по умолчанию FALSE.
Если bf равен TRUE, то следующий вызов wrefresh(win)
очистит экран и полностью его перерисует (Ctrl+L в редакторе vi).
По умолчанию ncurses ставит курсор там, где он был при последнем обновлении
окна. Программы, не использующие курсор, могут установить leaveok(...)
TRUE и сэкономить время, требующееся для движения курсора.
int nonl()
Управление переходом на новую строку. После nl() произойдетт
возврат каретки и дозаполнение; nonl() отключает контроль. В последнем
случае ncurses может ускорить перемещение курсора.8.8.1 Опции ввода
TRUE активизирует keypad на клавиатуре во время ожидания ввода.
Для функциональных клавиш и стрелок keypad ncurses вернет код клавиши,
определенный как KEY_* в ncurses.h. Это очень удобно для клавиатуры
ПК, потому что вы имеете возможность и пользоваться цифровым блоком, и
перемещать курсор.
Если TRUE, то коды клавиш, возвращаемые getch(), 7-битовые
(верхний бит не учитывается).
int nocbreak()
int crmode()
int nocrmode()
cbreak() и nocbreak() устанавливают или снимают режим терминала
CBREAK. Когда CBREAK установлен, читаемый ввод немедленно доступен
программе, когда нет будет буферизован до получения целой строки.
Замечание: crmode() и nocrmode() существуют для
повышения совместимости, их использовать не нужно.
int noraw()
Устанавливает или снимает режим RAW. RAW это то же, что и
CBREAK, только без обработки специальных символов.
int noecho()
Вызывайте echo() для отображения ввода пользователя и noecho(),
чтобы его скрыть.
То же, что и cbreak(), но с паузой в t секунд.
Терминал устанавливается в неблокируемый режим. getch() вернет
ERR, если ввод не готов. Если bf есть FALSE, то getch() будет ждать
нажатия клавиши.
int wtimeout(win, t)
Эти функции рекомендуется использовать вместо halfdelay(t) и
nodelay(win, bf). Результат getch() зависит от значения
t. При положительном t считывание блокируется на t
милисекунд; при t, равном нулю, блокировки не происходит; при
отрицательном t программа блокируется, пока ввод не станет возможен.
Если bf равен TRUE, getch() будет использовать односекундный
таймер для интерпретации вводимой последовательности, начинающейся с
ESCAPE и т.п.
При fd, равном -1, никакой проверки печати производиться не
будет, при других значениях ncurses будет использовать для таких
проверок файловый дескриптор fd вместо stdin.
При активизации истинным bf нажатая клавиша прерывания (типа
quit, break) очистит очередь драйвера tty.8.8.2 Атрибуты терминала
Возвращает скорость терминала в bps (бит в секунду).
Возвращает текущий символ erase.
Возвращает текущий символ kill.
int has_il()
has_ic() возвращает TRUE, если терминал может вставлять/удалять
символ, has_il() возвращает TRUE, если терминал может
вставлять/удалять строку. В противном случае возвращается ERR.
Указатель предоставляет доступ к описанию текущего терминала.
Возвращает содержимое TERM из пользовательской среды.8.8.3 Использование опций
char c;
noecho();
timeout(-1);
nonl();
cbreak();
keypad(stdscr,TRUE);
while(c=getch()){
switch(c){
case 'q': your_quit_function();
default: break;
}
}
KEY_UP KEY_RIGHT KEY_A1 KEY_B2 KEY_C1
KEY_DOWN KEY_LEFT KEY_A3 KEY_C3
для клавиш перемещения курсора. Для просмотра файла цикл может выглядеть
примерно так:
int loop=TRUE;
char c;
enum{UP,DOWN,RIGHT,LEFT};
noecho();
timeout(-1);
nonl();
cbreak();
keypad(stdscr,TRUE);
while(loop==TRUE){
c=getch();
switch(c){
case KEY_UP:
case 'u':
case 'U': scroll_s(UP);
break;
case KEY_DOWN:
case 'd':
case 'D': scroll_s(DOWN);
break;
case KEY_LEFT:
case 'l':
case 'L': scroll_s(LEFT);
break;
case KEY_RIGHT:
case 'r':
case 'R': scroll_s(RIGHT);
break;
case 'q':
case 'Q': loop=FALSE;
default: break;
}
}
WINDOW *maskwin;
WINDOW *mainwin;
char *ptr=(char *)malloc(255);
...
mainwin=newwin(3,37,9,21);
maskwin=newwin(1,21,10,35);
...
werase(mainwin);
werase(maskwin);
...
box(mainwin,0,0)
mvwaddstr(mainwin,1,2,"Inputstring:");
...
wnoutrefresh(mainwin);
wnoutrefresh(maskwin);
doupdate();
...
mvwgetstr(maskwin,0,0,ptr);
...
delwin(maskwin);
delwin(mainwin);
endwin();
free(ptr);
8.9 Очистка окна и линий
int werase(win)
werase(...) и erase() скопируют пробелы на каждую позицию окна
win или stdscr. Например, если вы установили атрибуты цвета в окне и
вызвали werase(), окно должно быть окрашено. Однако автор имел
некоторые проблемы с COLOR_PAIRS, если определял другие атрибуты, а
затем черный по белому, так он писал его собственную стирающую функцию
(это низкоуровневый доступ к структуре WINDOW):
void NewClear(WINDOW *win)
{
int y,x;
for (y = 0; y <= win -> _maxy; y++)
for (x = 0; x <= win -> _maxx; x++)
(chtype *) win-> _line[y][x] = ' '|win-> _attrs;
win -> _curx = win -> _cury = 0;
touchwin(win);
}
#define BLANK ' '|A_NORMAL,
то другие атрибуты окна теряются, пока идет стирание строки.
int wclear(win)
То же, что erase(), но будет также установлен clearok() (экран
будет очищен с последующим обновлением).
int wclrtobot(win)
Очистка текущей строки курсора (начинается с символа справа от
курсора) и строки под курсором.
int wclrtoeol(win)
Очистка текущей строки начиная справа от курсора и до конца строки.8.10 Обновление терминала
int wrefresh(win)
refresh() копирует stdscr на терминал, а wrefresh(win) копирует
изображение окна в stdscr и затем делает curscr подобным stdscr.
int doupdate()
wnoutrefresh(win) копирует окно win только в stdscr. Это означает, что
вывода на терминал не производится, но виртуальный экран stdscr на самом деле
выглядит именно так, как того хочет программист. doupdate() произведет
вывод на терминал. Программа может менять различные окна, вызывая
wnoutrefresh(win) для каждого окна, а затем достаточно один раз
вызвать doupdate(), чтобы обновить физический экран.
main() changewin(WINDOW *win)
{ {
WINDOW *win1,*win2; ... /* здесь мы изменяем */
... ... /* строки */
changewin(win1); wrefresh(win);
changewin(win2); return;
... }
}
main() changewin(WINDOW *win)
{ {
WINDOW *win1,*win2; ... /* здесь мы изменяем */
... ... /* строки */
changewin(win1); wnoutrefresh(win);
changewin(win2); return;
doupdate(); }
...
}
int wredrawln(win, bline, nlines)
Используйте эти функции, когда перед записью чего-нибудь нового
требуется выбросить несколько строк или целый экран (может быть строки
запорчены или что-либо вроде этого).
int touchline(win, start, count)
int wtouchln(win, y, n, changed)
int untouchwin(win)
Говорит ncurses, что были произведены манипуляции с целым окном
или линиями от start до start+count. Например, когда есть
несколько окон, перекрывающих друг друга (как в примере type.c),
изменение одного из них никак не повлияет на изображение других.
int is_wintouched(win)
При помощи этих функций вы можете проверить, были ли линия line или
окно win захвачены со времени последнего вызова refresh().
8.11 Видеоатрибуты и цвет
Определение Атрибут A_ATTRIBUTES маска для атрибутов (chtype) A_NORMAL нормальный, переустановка всего остального A_STANDOUT наиболее яркий режим A_UNDERLINE подчеркивание A_REVERSE обратное изображение A_BLINK мигание A_DIM тусклый или полуяркий режим A_BOLD четкий или очень яркий режим A_ALTCHARSET использование альтернативной символьной таблицы
A_INVIS невидимый режим A_PROTECT не понял A_CHARTEXT маска для действующих символов (chtype) A_COLOR маска для цвета COLOR_PAIR(n) установка цветовой пары n PAIR_NUMBER(a) получение цветовой пары, лежащей в атрибуте a
Определение Цвет COLOR_BLACK черный COLOR_RED красный COLOR_GREEN зеленый COLOR_YELLOW желтый COLOR_BLUE синий COLOR_MAGENTA пурпурный COLOR_CYAN голубой COLOR_WHITE белый
int wattroff(win, attr)
int attron(attr)
int wattron(win, attr)
Включают или отключают указанный атрибут attr, не влияя на другие
атрибуты в окне (stdscr или win).
int wattrset(win, attr)
Установка атрибута в attr в stdscr или win.
int standend()
int wstandout(win)
int wstandend(win)
Включают атрибут наиболее яркого режима для окна (stdscr или win).
Выдает текущие атрибуты для окна win.
Возвращает TRUE, если терминал имеет цвета. Перед тем, как
использовать цвета, проверьте терминал has_colors(), а перед этим
проинициализируйте цвета start_color().
TRUE, если терминал может переопределять цвета.
Цветовая инициализация. Эта функция должна быть вызвана перед
использованием цветов!
Если вы используете цвета в атрибутах окна, то сначала вы должны определить
цветовую пару через init_pair(...). fg и bg это
цвета переднего и заднего плана, спаренные в pair. pair
принимает значения от 1 до COLORPAIRS-1. 0 не ошибка, но
зарезервирован для черного и белого. Определенную однажды pair
можно использовать как атрибут. К примеру, нужны красные символы на синем:
init_pair(1,COLOR_RED,COLOR_BLUE);
Теперь вызовем wattr(...) для установки новой пары цветов для
win:
wattr(win,COLOR_PAIR(1));
Или соединим цветовые пары с другими атрибутами, например:
wattr(win,A_BOLD|COLOR_PAIR(1));
wattr(win1,A_STANDOUT|COLOR_PAIR(1));
Первый вызов установит цветовую пару и атрибут BOLD, второй подключит режим
STANDOUT, и вы получите светлый красный на синем экране.
Вернет цвета переднего и заднего плана из pair.
Изменит цветовые компоненты r, g и b для
color. r, g и b находятся в диапазоне от
1 до COLORS-1.
Получение компонентов r, g и b для color.
void CheckColor(WINDOW *win1, WINDOW *win2)
{
start_color();
if (has_colors()){
/* Хорошо, у нас есть цвета, определяем цветовые пары для
* цветов переднего и заднего плана
*/
init_pair(1,COLOR_BLUE,COLOR_WHITE);
init_pair(2,COLOR_WHITE,COLOR_RED);
/* теперь используем уже определенные цветовые пары для окон */
wattrset(win1,COLOR_PAIR(2));
wattrset(win2,COLOR_PAIR(1));
}
else
{
/* Нет цвета (может быть vt100 или xterm). Ладно, будем
* пользоваться вместо этого черно-белыми атрибутами.
*/
wattrset(win1,A_REVERSE);
wattrset(win2,A_BOLD);
}
return;
}
8.12 Координаты курсора и окна
int wmove(win, y, x)
Движение курсора stdscr или win. Для функций ввода/вывода определяются
дополнительные макросы, передвигающие курсор перед вызовом данных функций.
int curs_set(bf)
Переключает видимость/невидимость курсора, если терминал имеет
такую возможность.
Возвращает координаты курсора. Замечание: это макрос.
Если win подокно, getparyx(...) сохранит координаты окна
относительно родительского окна. В противном случае y и x
установятся в -1.
void getmaxyx(win, y, x)
int getmaxx(win)
int getmaxy(win)
Сохранит начальные и размерные координаты для win в y и
x.
int setsyx(int y, int x)
Сохранит виртуальный курсор экрана в y и x или установит
этот курсор. При y и x, равных -1, getsyx(...)
установит leaveok.8.13 Прокрутка
Если TRUE, текст в окне win будет прокручен вверх на одну строку,
когда курсор находится в правом нижнем углу и напечатан символ. Если
FALSE, то курсор остается на прежней позиции.
Эта функция прокрутит окно (и строки в структуре данных) на одну
строку вверх.
int wscrl(win, n)
Эти функции прокрутят окно stdscr или win вверх или вниз, в
зависимости от целого n. Если n положительное, произойдет
прокрутка окна на n линий вверх, если n отрицательное на
n линий вниз.
int wsetscrreg(win, t, b)
Устанавливают программную область прокрутки.
enum{PREV,NEXT};
void scroll_s(WINDOW *win, int scroll)
{
/* пробуем, должны ли мы прокрутить вниз и если что-нибудь есть,
* то прокрутить
*/
if((scroll==NEXT)&&(beg<=(max_s-18))){
/* одна строка вниз */
beg++;
/* задаем права на прокрутку */
scrollok(win, TRUE);
/* прокручиваем */
wscrl(win, +1);
/* отклоняем права на прокрутку */
scrollok(win, FALSE);
/* устанавливаем новую строку в последней линии */
mvwaddnstr(win,17,0,s[beg+17],66);
/* очищаем последнюю строку от последнего символа до конца
* строки. Иначе атрибуты не будут учтены.
*/
clear_line(66,win);
}
else if((scroll==PREV)&&(beg>0)){
beg--;
scrollok(win, TRUE);
wscrl(win, -1);
scrollok(win, FALSE);
mvwaddnstr(win,0,0,s[beg],66);
clear_line(66,win);
}
wrefresh(win);
return;
}
8.14 Заполнители
8.15 Мягкие метки
int slk_attrset(chtype attr)
int slk_attroff(chtype attr)
Эти функции соответствуют функциям attron(attr),
attrset(attr) and attroff(attr).8.16 Разное
8.17 Низкоуровневый доступ
8.18 Дамп экрана
8.19 Эмуляция termcap
8.20 Функции terminfo
p1 - p9 long int.
8.21 Функции отладки
8.22 Свойства terminfo
8.22.1 Boolean
Переменная Имя свойства Внутренний код
Описание auto_left_margin bw bw Cub1 переносит с
колонки 0 в последнюю колонку auto_right_margin am am Границы терминала
устанавливаются автоматически back_color_erase bce ut Экран очищается с
цветом фона can_change ccc cc Терминал может
переопределять существующие цвета ceol_standout_glitch xhp xs выделение не
удаляется перезаписью (hp) col_addr_glith xhpa YA Только положительное
движение для свойств hpa/mhpa cpi_changes_res cpix YF Изменение размеров
символа изменяет разрешение cr_cancels_micro_mode crxm YB Использование
cr отключает режим micro eat_newline_glitch xenl xn Новая строка
игнорируется после 80 столбцов (Concept) erase_overstrike eo eo Можно забить пробелом
generic_type gn gn Общий тип линии (такой как
выделенная или коммутируемая) hard_copy hc hc Терминал твердой копии
hard_cursor chts HC Курсор аппаратный
has_meta_key km km Имеет метаклавишу ($shift,
sets parity bit$) has_print_wheel daisy YC требуется
вмешательство оператора, чтобы изменить символьную таблицу притера has_status_line hs hs Имеет дополнительную
строку статуса hue_lightness_saturation hls hl Терминал
использует только цветовую нотацию HLS (Tektronix) insert_null_glitch in in Режим вставки
распознает нули lpi_changes_res lpix YG Изменение толщины
линии изменяет разрешение memory_above da da Сохранение содержимого
дисплея над экраном memory_below db db Сохранение содержимого
дисплея под экраном move_insert_mode mir mi Безопасность
передвижения в режиме вставки move_standout_mode msgr ms Безопасность
передвижения в режиме выделения needs_xon_xoff nxon nx Дозаполнение не будет
работать, требуется xon/xoff no_esc_ctl_c xsb xb $Beehive$ (f1=escape,
f2=Ctrl-C) non_rev_rmcup nrrmc NR smcup не оборачивает
rmcup no_pad_char npc NP Символ заполнения не
существует non_dest_scroll_region ndscr ND Область
прокрутки ненарушаема over_strike os os Терминал забивает символы
prtr_silent mc5i 5i Принтер не создает эха на
экране row_addr_glitch xvpa YD Только положительное
движение для свойств vhp\mvpa semi_auto_right_margin sam YE Печать в
последнем столбце вызывает cr status_line_esc_ok eslok es Escape может быть
использован в строке статуса dest_tabs_magic_smso xt xt Нарушена
табуляция, magic so char (Teleray 1061) tilde_glitch hz hz Невозможно напечатать
тильды transparent_underline ul ul Забой
подчеркивания xon_xoff xon xo Терминал использует команды
xon/xoff 8.22.2 Numbers
Переменная Имя свойства Внутренний код
Описание bit_image_entwining bitwin Yo Не
документировано в SYSV buffer_capacity bufsz Ya Буфер печати
columns cols co Число колонок в линии
dot_vert_spacing spinv Yb Высота позиции, в
pin на дюйм dot_horz_spacing spinh Yc Ширина позиции, в
точках на дюйм init_tabs it it Табуляторы изначально каждые
# позиций label_height lh lh Линий в каждой метке
label_width lw lw Колонок в каждой метке
lines lines li Число линий на экране или
странице lines_of_memory lm/TD> lm Число линий в памяти, 0
означает переменное magic_cookie_glitch xmc/TD> sg/TD> Число пробелов слева
от smso или rmso max_colors colors/TD> Co Максимальное количество
цветов на экране max_micro_address maddr Yd Максимальное
значение в micro_..._adress max_micro_jump mjump Ye Максимальное значение
в parm_..._micro max_pairs pairs pa Максимальное число
цветовых пар на экране micro_col_size mcs Yf Размер шага символа в
режиме micro micro_line_size mls Yg Размер шага линии в
режиме micro no_color_video ncv NC Видеоатрибуты, которые
нельзя использовать с цветами number_of_pins npins Yh Число pin на головке
принтера num_labels nlab Nl Число меток на экране
output_res_char orc Yi Горизонтальное
разрешение, в единицах на линию output_res_line orl Yj Вертикальное
разрешение, в единицах на линию output_res_horz_inch orhi Yk Горизонтальное
разрешение, в единицах на дюйм output_res_vert_inch orvi Yl Вертикальное
разрешение, в единицах на дюйм padding_baud_rate pb pb Нижняя граница, когда
требуется cr/nl заполнение virtual_terminal vt vt Номер виртуального
терминала (UNIX) width_status_line wsl ms Число колонок в
строке статуса bit_image_type bitype Yp Тип устройства
двоичного образа buttons tns BT Количество кнопок мыши
max_attributes ma ma Максимальное число
атрибутов, которое можно установить для терминала одновременно maximum_windows wnum MW Максимальное число
возможных окон print_rate cps Ym Скорость печати, в символах
в секунду wide_char_size widcs Yn Размер шага символа в
режиме двойной ширины 8.22.3 Strings
acs_chars acsc ac $Graphics charset pairs$
def=vt100 alt_scancode_esc scesa S8 Альтернативный esc
для эмуляции $scancode$ (по умолчанию vt100) back_tab cbt bt Возврат табулятора (P)
bell bel bl Слышимый сигнал (звонок) (P)
bit_image_repeat birep Xy Повторение
двоичного образа ячейки #1 #2 раз (использует tparm) bit_image_newline binel Zz Передвижение на
следующую линию двоичного образа (использует tparm) bit_image_carriage_return bicr Yv
Передвижение на начало линии двоичного образа (использует tparm) carriage_return cr cr Возврат каретки
change_char_pitch cpi ZA Изменение # символов
на дюйм change_line_pitch lpi ZB Изменение # линий на
дюйм change_res_horz chr ZC Изменение
горизонтального разрешения change_res_vert cvr ZD Изменение
вертикального разрешения change_scroll_region csr cs Изменение до #1
линий через #2 (vt100) (PG) char_padding rmp rP Как ip, только когда в
режиме вставки char_set_names csnm Zy Список наименований
символьной таблицы clear_all_tabs tbc ct Очистка всех позиций
табуляции (P) clear_margins mgc MC Очистка всех границ
(верхней, нижней и сторон) clear_screen clear cl Очистка экрана и курсор
home (P*) clr_bol el1 cb Очистка до начала строки
clr_eol el ce Очистка до конца строки (P)
clr_eos ed cd Очистка до конца дисплея (P*)
code_set_init csin ci Инициализация
последовательности для сложных таблиц кодов color_names colornm Yw Дать наименование для
цвета #1 column_address hpa ch Установка колонки
курсора (PG) command_character cmdch CC cmd символ
терминально устанавливаем в прототипе cursor_address cup cm Показ движения курсора
строка #1 колонка #2 (PG) cursor_down cud1 do Вниз на одну линию cursor_home home ho Курсор в начало (если не
указана позиция курсора) cursor_invisible civis vi Сделать курсор
невидимым cursor_left cub1 le Передвижение курсора на
одну позицию влево cursor_mem_address mrcup CM Запоминание
соответствующей адресации курсора cursor_normal cnorm ve Придать курсору
нормальную видимость (undo vs/vi) cursor_right cuf1 nd Ненарушаемое
пространство (курсор вправо) cursor_to_ll ll ll Последняя строка, первая
колонка (если не указана позиция курсора) cursor_up cuu1 up Пересылка на верхний
уровень (курсор вверх) cursor_visible cvvis vs Сделать курсор
сильновидимым define_bit_image_region defbi Yx Определение
прямоугольной области двоичного образа (использует tparm) define_char defc ZE Определение символов в
символьной таблице delete_character dch1 dc Удаление символа
(P*) delete_line dl1 dl Удаление линии (P*)
device_type devt dv Индикация поддержки
языка/таблицы кодов dis_status_line dsl ds Невозможна строка
статуса display_pc_char dispc S1 Отображение символа
ПК down_half_line hd hd Пол-линии вниз (вперед
1/2 перевода строки) ena_acs enacs eA Включена альтернативная
символьная таблица end_bit_image_region endbi Yy Конец области
двоичного образа (использует tparm) enter_alt_charset_mode smacs as Начало
альтернативная символьной таблицы (P) enter_am_mode smam SA Включение
автоматических границ enter_blink_mode blink mb Включение мигания
enter_bold_mode bold md Включения суперяркого
режима enter_ca_mode smcup ti Строка начала
программ, использующих позицию курсора enter_delete_mode smdc dm Режим удаления
(enter) enter_dim_mode dim mh Включение полуяркого
режима enter_doublewide_mode swidm ZF Возможен режим
двойной ширины enter_draft_quality sdrfq ZG Установка
качества печати enter_insert_mode smir im Режим вставки
(enter) enter_italics_mode sitm ZH Возможен режим
курсива enter_leftward_mode slm ZI Возможно движение
каретки влево enter_micro_mode smicm ZJ Разблокирование
возможностей микропередвижения enter_near_letter_quality snlq ZK Установка
печати NLQ enter_normal_quality snrmq ZL Установка
нормального качества печати enter_pc_charset_mode smpch S2 Ввод режима
показа символов ПК enter_protected_mode prot mp Включение
защищенного режима enter_reverse_mode rev mr Включение обратного
видеорежима enter_scancode_mode smsc S4 Ввод режима
scancode ПК enter_secure_mode invis mk Включение
пробельного режима (символы невидимы) enter_shadow_mode sshm ZM Возможен режим
оттененной печати enter_standout_mode smso so Начало режима
выделения enter_subscript_mode ssubm ZN Возможна печать
индекса enter_superscript_mode ssupm ZO Возможна
печать верхнего индекса enter_underline_mode smul us Начало режима
подчеркивания enter_upward_mode sum ZP Возможно движение
каретки вверх enter_xon_mode smxon SX Включение
подтверждения связи xon/xoff erase_chars ech ec Очистка #1 символов (PG)
exit_alt_charset_mode rmacs ae Конец
альтернативной символьной таблицы (P) exit_am_mode rmam RA Отключение
автоматических границ exit_attribute_mode sgr0 me Отключение всех
атрибутов exit_ca_mode rmcup te Строка конца программ,
использующих позицию курсора exit_delete_mode rmdc ed Конец режима
удаления exit_doublewide_mode rwidm ZQ Невозможна
печать с двойной шириной exit_insert_mode rmir ei Конец режима
вставки exit_italics_mode ritm ZR Невозможна печать
курсивом exit_leftward_mode rlm ZS Возможно движение
каретки вправо (нормального режима) exit_micro_mode rmicm ZT Заблокированы
возможности микропередвижения exit_pc_charset_mode rmpch S3 Невозможен
показ символов ПК exit_scancode_mode rmsc S5 Невозможен режим
просмотра ПК exit_shadow_mode rshm ZU Невозможна
оттененная печать exit_standout_mode rmso se Конец режима
выделения exit_subscript_mode rsubm ZV Невозможна
подстрочная печать exit_superscript_mode rsupm ZW Невозможна
надстрочная печать exit_underline_mode rmul ue Конец режима
подчеркивания exit_upward_mode rum ZX Возможно движение
каретки вниз exit_xon_mode rmxon RX Отключение
подтверждения связи xon/xoff flash_screen flash vb Видимый звонок
(невозможно передвижение курсора) form_feed ff ff Терминал твердой копии
извергает страницы (P*) form_status_line fsl fs Возврат со строки
статуса init_1string is1 i1 Строка инициализации
терминала init_2string is2 i2 Строка инициализации
терминала init_3string is3 i3 Строка инициализации
терминала init_file if if Название содержащего файла
init_prog iprog iP Путь программы для
инициализации initialize_color initc Ic Инициализация
определения цвета initialize_pair initp Ip Инициализация
цветовой пары insert_character ich1 ic Символ вставки (P)
insert_line il1 al Добавление новой чистой
строки (P*) insert_padding ip ip Забивка после
вставленного символа (p*) key_a1 ka1 K1 Верхний левый keypad key_a3 ka3 K3 Верхний правый keypad key_b2 ka2 K2 Центр keypad key_backspace kbs kb Послан клавишей
backspace key_beg kbeg 1 Клавиша начала key_btab kcbt kB Клавиша назад табуляции
key_c1 kc1 K4 Нижний левый keypad key_c3 kc3 K5 Нижний левый keypad key_cancel kcan 2 Клавиша cancel key_catab ktbc ka Послан клавишей очистки
всей табулиции key_clear kclr kC Послан клавишей очистки
экрана или клавишей очистки (стирания) key_close kclo 3 Клавиша close key_command kcmd 4 Командная клавиша
key_copy kcpy 5 Клавиша копирования key_create kcrt 6 Клавиша создания key_ctab kctab kt Послан клавишей очистки
табулиции key_dc kdch1 kD Послан клавишей удаления
символа key_dl kdl1 kL Послан клавишей удаления
строки key_down kcud1 kd Послан клавишей нижнего
терминального массива key_eic krmir kM Послан клавишей rmir или
smir в режиме вставки key_end kend 7 Клавиша end key_enter kent 8 Клавиша ввода/посылки
key_eol kel kE Послан клавишей очистки до
конца строки key_eos ked kS Послан клавишей очистки до
конца экрана key_exit kext 9 Клавиша выхода key_f0 kf0 k0 Функциональная клавиша F00
key_f1 kf1 k1 Функциональная клавиша F01
key_f2 kf2 k2 Функциональная клавиша F02
key_f3 kf3 k3 Функциональная клавиша F03
key_f4 kf4 k4 Функциональная клавиша F04
key_f5 kf5 k5 Функциональная клавиша F05
key_f6 kf6 k6 Функциональная клавиша F06
key_f7 kf7 k7 Функциональная клавиша F07
key_f8 kf8 k8 Функциональная клавиша F08
key_f9 kf9 k9 Функциональная клавиша F09
key_f10 kf10 k; Функциональная клавиша F10
key_f11 kf11 F1 Функциональная клавиша F11
key_f12 kf12 F2 Функциональная клавиша F12
key_f13 kf13 F3 Функциональная клавиша F13
key_f14 kf14 F4 Функциональная клавиша F14
key_f15 kf15 F5 Функциональная клавиша F15
key_f16 kf16 F6 Функциональная клавиша F16
key_f17 kf17 F7 Функциональная клавиша F17
key_f18 kf18 F8 Функциональная клавиша F18
key_f19 kf19 F9 Функциональная клавиша F19
key_f20 kf20 FA функциональная клавиша F00
key_f21 kf21 FB функциональная клавиша F01
key_f22 kf22 FC функциональная клавиша F02
key_f23 kf23 FD функциональная клавиша F03
key_f24 kf24 FE функциональная клавиша F04
key_f25 kf25 FF функциональная клавиша F05
key_f26 kf26 FG функциональная клавиша F06
key_f27 kf27 FH функциональная клавиша F07
key_f28 kf28 FI функциональная клавиша F08
key_f29 kf29 FJ функциональная клавиша F09
key_f30 kf30 FK функциональная клавиша F10
key_f31 kf31 FL функциональная клавиша F11
key_f32 kf32 FM функциональная клавиша F12
key_f33 kf33 FN функциональная клавиша F13
key_f34 kf34 FO функциональная клавиша F14
key_f35 kf35 FP функциональная клавиша F15
key_f36 kf36 FQ функциональная клавиша F16
key_f37 kf37 FR функциональная клавиша F17
key_f38 kf38 FS функциональная клавиша F18
key_f39 kf39 FT функциональная клавиша F19
key_f40 kf40 FU функциональная клавиша F00
key_f41 kf41 FV функциональная клавиша F01
key_f42 kf42 FW функциональная клавиша F02
key_f43 kf43 FX функциональная клавиша F03
key_f44 kf44 FY функциональная клавиша F04
key_f45 kf45 FZ функциональная клавиша F05
key_f46 kf46 Fa функциональная клавиша F06
key_f47 kf47 Fb функциональная клавиша F07
key_f48 kf48 Fc функциональная клавиша F08
key_f49 kf49 Fd функциональная клавиша F09
key_f50 kf50 Fe функциональная клавиша F10
key_f51 kf51 Ff функциональная клавиша F11
key_f52 kf52 Fg функциональная клавиша F12
key_f53 kf53 Fh функциональная клавиша F13
key_f54 kf54 Fi функциональная клавиша F14
key_f55 kf55 Fj функциональная клавиша F15
key_f56 kf56 Fk функциональная клавиша F16
key_f57 kf57 Fl функциональная клавиша F17
key_f58 kf58 Fm функциональная клавиша F18
key_f59 kf59 Fn функциональная клавиша F19
key_f60 kf60 Fo функциональная клавиша F10
key_f61 kf61 Fp функциональная клавиша F11
key_f62 kf62 Fq функциональная клавиша F12
key_f63 kf63 Fr функциональная клавиша F13
key_find kfnd 0 клавиша поиска key_help khlp %1 клавиша помощи key_home khome kh послан клавишей home key_ic kich1 kI послан клавишей символ
вставки/ ввод режима вставки key_il kil1 kA послан клавишей вставки строки
key_left kcub1 kl послан клавишей левого
терминального массива key_ll kll kH послан клавишей home-down
key_mark kmrk %2 клавиша пометки key_message kmsg %3 клавиша сообщения
key_move kmov %4 клавиша перемещения
key_next knxt %5 клавиша следующего key_npage knp kN послан клавишей следующей
страницы key_open kopn %6 клавиша открывания key_options kopt %7 клавиша опций key_ppage kpp kP послан клавишей предыдущей
страницы key_previous kprv %8 клавиша предыдущего
key_print kprt %9 клавиша печати key_redo krdo %0 клавиша redo key_reference kref &1 клавиша ссылки
key_refresh krfr &2 клавиша обновления
key_replace krpl &3 клавиша перестановки
key_restart krst &4 клавиша перезапуска
key_resume kres &5 клавиша возобновления
работы key_right kcuf1 kr послан клавишей стрелки
враво key_save ksav &6 клавиша сохранения key_sbeg kBEG &9 клавиша начала в верхнем
регистре key_scancel kCAN &0 клавиша cancel в верхнем
регистре key_scommand kCMD *1 командная клавиша в
верхнем регистре key_scopy kCPY *2 клавиша копирования в
верхнем регистре key_screate kCRT *3 клавиша создания в
верхнем регистре key_sdc kDC *4 клавиша удаления символа в
верхнем регистре key_sdl kDL *5 клавиша удаления строки в
верхнем регистре key_select kslt *6 клавиша выделения
key_send kEND *7 клавиша конца в верхнем
регистре key_seol kEOL *8 клавиша конца строки в
верхнем регистре key_sexit kEXT *9 клавиша выхода в верхнем
регистре key_sf kind kF послан клавишей прокрутки
прямо/вниз key_sfind kFND *0 клавиша поиска в верхнем
регистре key_shelp kHLP #1 клавиша помощи в верхнем
регистре key_shome kHOM #2 клавиша начала в верхнем
регистре key_sic kIC #3 клавиша вставки символа в
верхнем регистре key_sleft kLFT #4 клавиша влево в верхнем
регистре key_smessage kMSG %a клавиша сообщения в
верхнем регистре key_smove kMOV %b клавиша перемещения в
верхнем регистре key_snext kNXT %c клавиша следующего в
верхнем регистре key_soptions kOPT %d клавиша опций в верхнем
регистре key_sprevious kPRV %e клавиша предыдущего в
верхнем регистре key_sprint kPRT %f клавиша печати в верхнем
регистре key_sr kri kR послан клавишей прокрутки
назад/вверх key_sredo kRDO %g клавиша redo в верхнем
регистре key_sreplace kRPL %h клавиша перестановки в
верхнем регистре key_sright kRIT %i клавиша вправо в верхнем
регистре key_sresume kRES %j клавиша возобновления
работы в верхнем регистре key_ssave kSAV !1 клавиша сохранения в
верхнем регистре key_ssuspend kSPD !2 клавиша приостановки в
верхнем регистре key_stab khts kT послан клавишей установки
табуляции key_sundo kUND !3 клавиша undo в верхнем
регистре key_suspend kspd &7 клавиша приостановки
key_undo kund &8 клавиша undo key_up kcuu1 ku послан клавишей вверх
терминала keypad_local rmkx ke выход из режима $"keypad
transmit"$ keypad_xmit smkx ks установка режима $"keypad
transmit"$ терминала lab_f0 lf0 l0 метки на функциональную клавишу
f0, если не f0 lab_f1 lf1 l1 метки на функциональную клавишу
f1, если не f1 lab_f2 lf2 l2 метки на функциональную клавишу
f2, если не f2 lab_f3 lf3 l3 метки на функциональную клавишу
f3, если не f3 lab_f4 lf4 l4 метки на функциональную клавишу
f4, если не f4 lab_f5 lf5 l5 метки на функциональную клавишу
f5, если не f5 lab_f6 lf6 l6 метки на функциональную клавишу
f6, если не f6 lab_f7 lf7 l7 метки на функциональную клавишу
f7, если не f7 lab_f8 lf8 l8 метки на функциональную клавишу
f8, если не f8 lab_f9 lf9 l9 метки на функциональную клавишу
f9, если не f9 lab_f10 lf10 la метки на функциональную
клавишу f10, если не f10 label_on smln LO подключение мягких меток
label_off rmln LF отключение мягких меток
meta_off rmm mo отключение метарежима
meta_on smm mm включение метарежима (8-ой
бит) micro_column_address mhpa ZY как
column_address для микрорегулировки micro_down mcud1 ZZ как cursor_down для
микрорегулировки micro_left mcub1 Za как cursor_left для
микрорегулировки micro_right mcuf1 Zb как cursor_right для
микрорегулировки micro_row_address mvpa Zc как row_address для
микрорегулировки micro_up mcuu1 Zd как cursor_up для микрорегулировки
newline nel nw новая линия (действует, как lf
после cr) order_of_pins porder Ze Соединяет программные
$buts$ с pin головки принтера orig_colors oc oc Сброс всех цветовых пар
orig_pair op op Установка цветовой пары по
умолчанию, как в первоначальном варианте pad_char pad pc Символ-заполнитель (скорее
всего null) parm_dch dch DC Удаление #1 символов (PG*)
parm_delete_line dl DL Удаление #1 строк
(PG*) parm_down_cursor cud DO Движение курсора вниз
на #1 строк (PG*) parm_down_micro mcud Zf Как cud для
микрорегулирования parm_ich ich IC Вставка #1 пробельных
символов (PG*) parm_index indn SF Прокрутка вперед #1 строк
(PG) parm_insert_line il AL Добавление #1 новых
чистых строк (PG*) parm_left_cursor cub LE Перемещение курсора
влево на #1 позиций (PG) parm_left_micro mcub Zg Как cul для
микрорегулирования parm_right_cursor cuf RI Перемещение курсора
вправо на #1 позиций (PG*) parm_right_micro mcuf Zh Как cur для
микрорегулирования parm_rindex rin SR Прокрутка назад на #1
строк (PG*) parm_upcursor cuu UP Перемещение курсора
вверх на #1 строк (PG*) parm_upmicro mcuu Zi Как cuu для
микрорегулирования pkey_key pfkey pk Программная функциональная
клавиша #1 для печати строки #2 pkey_local pfloc pl Программная функциональная
клавиша #1 для выполнения строки #2 pkey_xmit pfx px Программная функциональная
клавиша #1 для xmit строки #2 pkey_plab pfxl xl Программная клавиша #1 для
xmit #2 и показа #3 plab_norm pln pn Программная метка #1 для
показа строки #2 print_screen mc0 ps Печать содержимого экрана
prtr_non mc5p pO Включение принтера для #1
байт prtr_off mc4 pf Выключение принтера prtr_on mc5 po Включение принтера repeat_char rep rp Повторение символа #1 #2
раз (PG*) req_for_input rfi RF Запрос на ввод reset_1string rs1 r1 Перезапуск терминала в
нормальный режим reset_2string rs2 r2 Перезапуск терминала в
нормальный режим reset_3string rs3 r3 Перезапуск терминала в
нормальный режим reset_file rf rf Имя файла, содержащего
строку перезапуска restore_cursor rc rc Установка курсора на
позицию последнего sc row_address vpa cv Абсолютная вертикальная
позиция (установка линии) (PG) save_cursor sc sc Сохранение позиции курсора
(P) scancode_escape scesc S7 Escape для эмуляции
scancode scroll_forward ind sf Прокрутка текста вверх
(P) scroll_reverse ri sr Прокрутка
текста вниз (P) select_char_set scs Zj Выбор символьной
таблицы set0_des_seq s0ds s0 $Shift to
codeset 0 (EUC set 0, ASCII)$ set1_des_seq s1ds s1 $Shift to codeset 1$
set2_des_seq s2ds s2 $Shift to codeset 2$
set3_des_seq s3ds s3 $Shift to codeset 3$
set_a_background setab AB Установка цвета
заднего плана, используя ANSI escape set_a_foreground setaf AF Установка цвета
переднего плана, используя ANSI escape set_attributes sgr sa Установка
видеоатрибутов (PG9) set_background setb Sb Установка текущего
цвета заднего плана set_bottom_margin smgb Zk Объявление текущей
строки нижней границей set_bottom_margin_parm smgbp Zl Строки на
расстоянии #1 или #2 от нижней границы объявляются нижней границей set_color_band setcolor Yz Установить текущим
цвет #1 set_color_pair scp sp Установка текущей
цветовой пары set_foreground setf Sf Установка текущего
цвета переднего плана set_left_margin smgl ML Установка текущей
колонки как левой границы set_left_margin_parm smglp Zm Установка левой
(правой) границы на #1 (#2) set_lr_margin smglr ML Установка левой и
правой границ set_page_lingth slines YZ Установка длины
страницы в #1 линий (используйте tparm) set_right_margin smgr MR Установка текущей
колонки как правой границы set_right_margin_parm smgrp Zn Установка
колонки #1 как правой границы set_tab hts st Установка табуляций на всех
линиях в текущей колонке set_tb_margin smgtb MT Установка верхней и
нижней границ set_top_margin smgt Zo Установка текущей
строки как верхней границы set_top_margin_parm smgtp Zp Установка строки
#1 как верхней границы set_window wind wi Текущее окно: строки
#1-#2, колонки #3-#4 start_bit_image sbim Zq Начало печати bit image
start_char_set_def scsd Zr Начало определения
символьной таблицы stop_bit_image rbim Zs Конец печати bit image
stop_char_set_def rcsd Zt Конец определения
символьной таблицы subscript_characters subcs Zu Список
подстрочных символов superscript_characters supcs Zv Список
надстрочных символов tab ht ta Табуляция на 8 следующих позиций
these_cause_cr docr Zw Данные символы
вызывают CR to_status_line tsl ts Переход на строку
статуса, первую колонку underline_char uc uc Подчеркнуть символ и
встать после него up_half_line hu hu Передвижение на 1/2
содержимого строки xoff_character xoffc XF символ XOFF
Следующие числовые свойства присутствуют в структуре term SYSV, но не
задокументированы в man page. Комментарии взяты из заголовка этой структуры.
xon_character xonc XN символ XON label_format fln Lf ?? set_clock sclk SC Установка времени дня display_clock dclk DK Вывод времени дня на
экран remove_clock rmclk RC Удаление времени дня
?? create_window cwin CW Определение окна #1 с
параметрами от #2, #3 до #4 #5 goto_window wingo WG Переход в окно #1
hangup hup HU Положить трубку телефона
dial_phone dial DI Набрать номер телефона #1
quick_dial qdial QD Набрать номер телефона #1
без дальнейшего повторения tone tone TO Выбрать длинные гудки pulse pulse PU Выбрать короткие гудки flash_hook hook fh Нажать телефонную клавишу
fixed_pause pause PA Пауза на 2-3 секунды
wait_tone wait WA Ожидание ответного сигнала
user0 u0 u0 Пользовательская строка #0
user1 u1 u1 Пользовательская строка #1
user2 u2 u2 Пользовательская строка #2
user3 u3 u3 Пользовательская строка #3
user4 u4 u4 Пользовательская строка #4
user5 u5 u5 Пользовательская строка #5
user6 u6 u6 Пользовательская строка #6
user7 u7 u7 Пользовательская строка #7
user8 u8 u8 Пользовательская строка #8
user9 u9 u9 Пользовательская строка #9
get_mouse getm Gm Curses должна предоставить
события от мыши key_mouse kmous Km ?? mouse_info minfo Mi Информация о состоянии
мыши pc_term_options pctrm S6 Опции терминала ПК
req_mouse_pos reqmp RQ Требование отчета о
позиции мыши zero_motion zerom Zx Следующий символ не
двигается
Converted on:
Fri Mar 29 14:43:04 EST 1996
Найди своих коллег! |