Перейти к содержимому

Graphics h c как подключить

  • автор:

Библиотека graphics.h

точно так! Странные преподаватели использование windows.h называют использованием язычества и ругаются страшными словами, что это WinApi. Переубедить преподавателя я не могу, так что остается вариант переписать код под grafics.h, станцевав с бубном вокруг студии.

26 июн 2013 в 13:40

Эээ. А как они называют использование borland-специфической библиотеки graphics? Хотя они правы, переходите с устаревшего на прогрессивный WinRT, там у вас будет XAML в нативном коде. Но не на борландовскую фигню, которая устарела ещё когда Windows в детский садик ходила. Могу поспорить, ваши преподаватели просто не знают WinAPI, поэтому и требуют насиловать труп.

26 июн 2013 в 16:29

знают они или нет — это вопрос десятый, об этом можно спорить, пока течет вода и горит огонь, Вы же понимаете, что от этого работа не сдастся =) хотя я разделяю Вашу точку зрения 😉

27 июн 2013 в 9:39

Если от использования той или иной графической библиотеки зависит то, зачтётся работа или нет, подумайте, нужен ли вам такой вуз и не зря ли вы тратите там своё время.

Graphics h c как подключить

Здравствуйте, форумчане
Столкнулся с такой проблемой. При компиляции простейшей программы с библиотекой graphics.h происходит appcrash.

#include int main()

Винда закрывает приложение, предлагая найти решение в интернете, в консоли предлагает нажать любую клавишу для выхода
Пробовал менять дирректорию, разместил исходный файл в каталог с программой — выдает сообщение
c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe cannot open output file C:\Program Files\Dev-Cpp\Test.exe: Permission denied
C:\Program Files\Dev-Cpp\collect2.exe [Error] ld returned 1 exit status
Уже просто нету сил, я не знаю что ей надо, в чем проблема. Ну вот ну все остальное, хелло ворлд и прочее выполняется без проблем, а вот с рисованием полный трындец. Очень хочется все это освоить, но из за вот таких вот кренделей остается только рвать волосы в эрогенных зонах. Помогите пожалуйста. Использую dev c++ 5.10, система Windows vista.

Последний раз редактировалось Alex11223; 01.07.2017 в 10:32 .
Регистрация: 12.01.2011
Сообщений: 19,500

Странная ошибка, но вообще graphics.h это древняя Борландовская библиотека и вряд ли она есть в MinGW.
Как и getch.

Возьмите что-то современное для графики.

Регистрация: 01.07.2017
Сообщений: 3

Спасибо за ответ. Просто это первое что мне пришло в голову и первое что нашел поисковик для работы с графикой. В MinGW библиотека устанавливается отдельно. Вот как заставить ее работать тут начинаются танцы с бубном.

Участник клуба
Регистрация: 09.05.2015
Сообщений: 1,404

А никак не заставишь.
Чтобы это работало, надо MS-DOS либо Windows 95/98. И соответственный DOS-овский компилятор C.
А дальше уже нужно использовать библиотеки рисования графики под Windows.
Я уже лет 15 пытаюсь этому научиться.

Вот пример кода, который реально работает (смотри третью колонку):
http://programmersforum.ru/showpost. 5&postcount=68

мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/

Последний раз редактировалось jura_k; 01.07.2017 в 12:08 .
Регистрация: 12.01.2011
Сообщений: 19,500
Сообщение от jura_k
Чтобы это работало, надо MS-DOS либо Windows 95/98. И соответственный DOS-овский компилятор C.

Вроде бы есть современная эмуляция http://winbgim.codecutter.org/

Но лучше взять что-то из Qt, SFML, SDL, Cairo, .
Или WinAPI (GDI, . ) если зачем-то хочется только под винду.

Регистрация: 18.09.2015
Сообщений: 2,409
Сообщение от Андрейшн

Винда закрывает приложение, предлагая найти решение в интернете, в консоли предлагает нажать любую клавишу для выхода
Пробовал менять дирректорию, разместил исходный файл в каталог с программой — выдает сообщение
c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe cannot open output file C:\Program Files\Dev-Cpp\Test.exe: Permission denied
C:\Program Files\Dev-Cpp\collect2.exe [Error] ld returned 1 exit status
Уже просто нету сил, я не знаю что ей надо, в чем проблема. Ну вот ну все остальное, хелло ворлд и прочее выполняется без проблем, а вот с рисованием полный трындец. Очень хочется все это освоить, но из за вот таких вот кренделей остается только рвать волосы в эрогенных зонах. Помогите пожалуйста. Использую dev c++ 5.10, система Windows vista.

Новичкам свойственно ошибаться. Вы ещё не успели подумать, а уже раз 30 ошиблись.
Windows vista сменить на Windows 7. (просто придираюсь)
dev c++ 5.10 сменить на QT Creater. (dev не популярная среда:не развивается, не поддерживается, да ещё и глючная)
Вместо graphics.h использовать QPainter (graphics — это досовская библиотека, дос это не консоль. Меняем на крос Win/Linux)
Да и ещё getch это си, а вы про си++ пишете
Консольное приложение заменить на оконное.

Читать учебник:
Программирование на языке С++ в среде Qt Creator
Е. Р. Алексеев, Г. Г. Злобин, Д. А.Костюк,
О. В.Чеснокова, А. С.Чмыхало

Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 01.07.2017 в 14:49 . Причина: поправил опечатку gchar на getch

Не подключается graphics h

проходили в колледже графику с помощью graphics.h. (Там я даже анимировал стакан)) Дома на пк не работает :/ Подключил заголовочный файл, библиотеку, но не работает окно вывода. Код:

#include "graphics.h" #pragma comment(lib, "graphics.lib") int main()

Screen

Файлы для graphics.h брал на github — https://github.com/ahuynh359/Graphics IDE — Visual studio 2019

Отслеживать

задан 13 июн 2022 в 14:27

5 2 2 бронзовых знака

ошибок нет уже хорошо значит работает (доходит до return) попробуйте с getchar()

13 июн 2022 в 14:53

а еще лучше добавьте delay(5000) к примеру, перед getchar() у вас просто сразу выход походу происходит

13 июн 2022 в 15:41

Спасибо! С getchar заработало 🙂

Graphics h c как подключить

Эта глава имеет дело с вводом/выводом символов на экран. Когда мы говорим «символ», то подразумеваем композицию пикселов, которая может меняться в зависимости от таблицы представлений символов (charset). Ваша графическая карта уже предлагает одну или более таких таблиц и по умолчанию работает в текстовом (charset) режиме, потому что текст обрабатывается быстрее, чем пиксельная графика. Терминалы можно использовать лучше, чем как простые и скучные текстовые дисплеи. Рассмотрим, как использовать специальные возможности, которые предлагает терминал Linux, особенно консоль Linux.

  • printf, sprintf, fprintf, scanf, sscanf, fscanf
    С этими функциями libc вы можете выдавать форматированные строки в stdout (стандартный вывод), stderr (стандартная ошибка) или другие потоки, определенные как FILE *stream (например, файлы). sscanf обеспечивает подобные возможности для чтения форматированного ввода из stdin.
  • termcap
    База данных TERMinal CAPabilitie это таблица элементов описания работы с терминалом в ASCII-файле /etc/termcap. Здесь вы можете найти информацию о том, как выводить специальные символы, как осуществлять операции (удаления, вставки символов или строк и т.д.) и как инициализировать терминал. База данных используется, например, редактором vi. Имеются библиотечные функции для чтения и использования возможностей терминала (смотри termcap(3x)). С этой базой данных программы могут работать с различными терминалами одним и тем же кодом. База данных termcap и библиотечные функции предоставляют только низкоуровневый доступ к терминалу. Изменение атрибутов или цветов, параметризованный вывод и оптимизация остаются программисту.
  • terminfo database
    База данных TERMinal INFOrmation построена над базой данных termcap и описывает некоторые возможности терминалов на более высоком уровне. С terminfo программа может легко менять атрибуты экрана, используя специальные клавиши, такие как функциональные клавиши и др. Эта база данных может быть найдена в /usr/lib/terminfo/[A-z,0-9]* . Каждый файл описывает один терминал.
  • curses
    Terminfo хорошая база для работы с терминалом в программе. Библиотека (BSD-)curses дает вам высокоуровневый доступ к терминалу, базируясь на terminfo. curses позволяет открывать и манипулировать окнами на экране, предоставляет весь необходимый набор функций ввода/вывода и может изменять видеоатрибуты терминально-независимым образом на более чем 150 терминалах. Библиотека находится в /usr/lib/libcurses.a . Это BSD-версия curses.
  • ncurses
    ncurses представляет собой развитие curses. В версии 1.8.6 она должна быть совместима с AT&T curses, как это определено в SYSVR4, и иметь несколько расширений, таких как манипулирование цветами, специальная оптимизация для вывода, оптимизации, зависящие от терминала, и др. ncurses была протестирована на множестве систем, таких как Sun-OS, HP и Linux. Автор рекомендует предпочесть ncurses всему остальному. В SYSV Unix системах (например, Solaris) должна существовать библиотека curses с теми же функциональными возможностями, что и ncurses (на самом деле солярисовская curses имеет немного больше функций и поддержку мыши).

В следующих разделах мы рассмотрим, как пользоваться различными пакетами доступа к терминалу. В Linux мы имеем GNU-версию termcap и можем пользоваться ncurses вместо curses.

  • 8.1 Функции ввода/вывода в libc
    • 8.1.1 Форматированный вывод
    • 8.1.2 Форматированный ввод

    • 8.2.1 Введение
    • 8.2.2 Поиск описания терминала
    • 8.2.3 Описание терминала
    • 8.2.4 Свойства termcap
      • Boolean
      • Numeric
      • String

      • 8.6.1 Форматированный вывод
      • 8.6.2 Вставка символов и линий
      • 8.6.3 Удаление символов и линий
      • 8.6.4 Боксы и линии
      • 8.6.5 Фоновый символ

      • 8.7.1 Форматированный ввод

      • Опции вывода
      • 8.8.1 Опции ввода
      • 8.8.2 Атрибуты терминала
      • 8.8.3 Использование опций

      • 8.22.1 Boolean
      • 8.22.2 Numbers
      • 8.22.3 Strings

      Функции printf(. ) в libc обеспечивают форматированный вывод и позволяют трансформировать аргументы.


        int fprintf(FILE *stream, const char *format, . ),
        преобразует выводимые аргументы в соответствии с шаблоном и записывает его в stream . Формат определяется аргументом format . Функция возвращает число записанных символов или отрицательное число в случае ошибки.


      1. обычные символы и
      2. информацию, как трансформировать или форматировать аргументы.

      Форматная информация должна начинаться с % , за которым следуют значения для формата, дальше идет символ для трансляции (чтобы напечатать знак % , используйте %% ). Возможны следующие значения для формата:

      • Параметры:

        • Форматированный аргумент будет при печати прижат влево на своем поле.
        • +
          Каждое число будет напечатано со знаком, например, +12 или -2.32 .

        • Для o первое число будет 0 .
        • Для x или X будет напечатано в конце 0x или 0X соответственно.
        • Для e, E, f, F вывод имеет десятичную точку.
        • Для g или G в конце аргумента будут напечатаны нули.

        СимволФорматируется в
        d,iint signed, десятиричный
        oint unsigned, восьмеричный, без предваряющего 0
        x,Xint unsigned, шестнадцатиричный, без предваряющего 0x
        uint unsigned, десятиричный
        cint (unsigned) одиночный символ
        schar * до \0
        fdouble как [-]mmm.ddd
        e,Edouble как [-]m.dddddde+xx, [-]m.dddddde-xx
        g,Gdouble использует %e или %f когда нужно
        pvoid *
        nint *
        %%

        Таблица 8.1: Libc: трансформации printf

        Точно так же, как printf(. ) для форматированного вывода, Вы можете использовать scanf(. ) для форматированного ввода.


          int fscanf(FILE *stream, const char *format, . )
          fscanf(. ) читает из stream и преобразует ввод по правилам, определяемым в format . Результаты помещаются в аргументы, заданные в «. » (эти аргументы должны быть указателями!). Чтение заканчивается, когда в format исчерпаны правила форматирования. fscanf вернет EOF, при первом достижении конца файла или при возникшей ошибке. Если этого не случится, будет возвращено количество трансформированных аргументов.


        • пробелы или табуляции, которые игнорируются;
        • любой нормальный символ, кроме %. Символы должны быть во вводе на соответствующих позициях.
        • правила преобразования, заданные с % , необязательный символ * (позволит fscanf(. ) присвоить аргументу), необязательное число, необязательный символ h, l или L (для задания длины считываемой инфомации) и символ трансформации.

        Таблица 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

        Библиотека termcap это API для базы данных termcap, которая находится в /etc/termcap . Библиотечные функции позволяют:

        • получить описание текущего терминала: tgetent(. ) .
        • найти описание для информации: tgetnum(. ) , tgetflag(. ) , tgetstr(. ) .
        • Представить числовые параметры в форме, специфичной для терминала: tparam(. ) , tgoto(. ) .
        • вычислить и произвести поточечный вывод: tputs(. ) .

        Программы, использующие библиотеку termcap должны включать termcap.h и собираться с:

        gcc [flags] files -ltermcap

        Функции termcap терминально-независимые программы, но дают программисту только низкоуровневый доступ к терминалу. Для пакета более высокого уровня потребуется curses или ncurses.


          int tgetent(void *buffer, const char *termtype)
          В операционной системе Linux текущее имя терминала содержится в переменой среды TERM. Поэтому termtype есть результат вызова getenv(3) .

        Что касается buffer , то в GNU-версии Linux termcap не нужно захватывать память. В других версиях вам придется выделить 2048 байт (прежде buffer требовал 1024 байта, но сейчас размер удвоился).

        tgetent(. ) возвращает 1 в случае успеха и 0 когда база данных найдена, но не имеет точки входа для TERM. Другие ошибки возвращают различные значения.

        Следующий пример объясняет как использовать tgetent(. ) :

        #define buffer 0 char *termtype=getenv("TERM"); int ok; ok=tgetent(buffer,termtype); if (ok==1) /* все нормально, мы имеем вход */ else if(ok==0) /* Что-то не так с TERM * проверим сначала termtype, затем базу данных termcap */ else /* Глобальная ошибка */

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

        • Числовой : например, co число столбцов
        • Логический или флаговый : например, hc терминал твердой копии (hardcopy terminal)
        • Строковый : например, st установка табуляции

        Каждое свойство связано с единственным типом значений ( co всегда числовой, hc всегда флаг, а st всегда строка). Три типа значений и три типа функций, их запрашивающих. char *name двухсимвольный код свойства.

        • int tgetnum(char *name)
          Получение свойства с числовым значением, таким как co . Функция tgetnum(. ) возвращает числовое значение, если свойство доступно, 1 в противном случае. Заметьте, что возвращаемое значение всегда неотрицательно.
        • int tgetflag(char *name)
          Получение логического свойства. Возвращает 1, если флаг установлен, 0 в противном случае.
        • char *tgetstr(char *name, char **area)
          Получение строкового свойства. Возвращает указатель на строку или NULL в случае отсутствия. В GNU-версии, если area есть NULL, termcap выделит память сам. termcap больше не позаботится об этом указателе, если вы не освободите name перед выходом из программы. Такой метод предпочтителен, поскольку вы не знаете сколько памяти потребуется для указателя, поэтому позвольте termcap сделать все за вас.

        5iпринтер не имеет эха на экране
        amавтоматические границы, что означает автоматическое форматирование строки
        bsCrtl-H представляет backspace
        bwbackspace на левой границе переносит строку на правую границу предыдущей
        daвывести сохраненное над текущим экраном
        dbвывести сохраненное под текущим экраном
        eoпробел стирает литеру на позиции курсора
        esesc-последовательности и специальные символы работают в строке состояния
        gnродовое устройство
        hcэто терминал твердой копии (hardcopy terminal)
        HCкурсор плохо видно, когда он не на последней линии
        hsприсутствует линия статуса
        hzтерминал не может напечатать тильды (tilde characters)
        inтерминал вставляет нули вместо пробелов на пустые места
        kmтерминал имеет мета клавишу
        miрежим вставки для курсора
        msрежим стандартного вывода/подчеркивания для курсора
        NPнет символов-заполнителей
        NRti не обращает teos, терминал может забивать ошибки
        ulтерминал подчеркивает, но ошибки забивать не может
        xbсбой, вызванный столпотворением, F1 посылает ESCAPE, F2 посылает ^C
        xnсбой новой строки/соединения строк
        xoтерминал использует xon/xoff протокол
        xsтекст, напечатанный поверх выделенного, будет выделен
        xtсбой телевизионного луча, неверная табуляция и странный режим выделения

        coчисло столбцов
        dBприостановка на милисекунды для возврата на терминалах твердой копии
        dCприостановка на милисекунды для перевода каретки на терминалах твердой копии
        dFприостановка на милисекунды для заполнения страницы на терминалах твердой копии
        dNприостановка на милисекунды для новой линии на терминалах твердой копии
        dTприостановка на милисекунды для табуляции на терминалах твердой копии
        dVприостановка на милисекунды для вертикальной табуляции на терминалах твердой копии
        itраница между позициями табуляции
        lhвысота мягких меток
        lmлинии памяти
        lwширина
        liчисло линий
        Nlчисло мягких меток
        pbнаименьшая граница, когда требуется дозаполнение
        sgсбой режима выделения
        ugсбой режима подчеркивания
        vtномер виртуального терминала
        wsширина линии статуса, если она отлична от ширины экрана

        !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начало блока символов в альтернативной таблице
        bcbackspace, если не ^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клавиша удаления строки
        kMMклавиша выхода из режима вставки
        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 ( initscr() используется для инициализации структур данных ncurses и для чтения файла terminfo. Будет захвачена память под stdscr и curscr. Если произойдет ошибка, то initscr вернет ERR. В противном случае возвращается указатель на stdscr. Кроме этого, экран будет очищен и будут проинициализированы LINES и COLS.

        endwin() очистит все выделенные ресурсы ncurses и восстановит режимы tty, какими они были до вызова initscr() . Функция endwin() должна вызываться перед любой другой функцией из библиотеки ncurses и перед выходом из вашей программы. Если вы хотите использовать для вывода более чем один терминал, используйте newterm(. ) вместо initscr() .

        Компилируйте программу посредством:

        gcc [flags] files -lncurses

        Вы можете устанавливать любые флаги (см. gcc(1)). Если путь к ncurses.h изменился, вы должны включить следующую строку, иначе ncurses.h, nterm.h, termcap.h и unctrl.h не будут найдены:

        -I/usr/include/ncurses

        Другие возможные в Linux флаги: O2 скажет gcc произвести некоторую оптимизацию; -ansi : для ANSI си-кода; -Wall выведет все предупреждения; -m486 оптимизирует код для Intel 486 (можно и для Intel 386).

        • libncurses.a обычная ncurses
        • libdcurses.a ncurses для отладки
        • libpcurses.a ncurses для профилирования (существует ли что-нибудь после 1.8.6libcurses.a?)
        • libcurses.a не четвертая версия, это первоначальная BSD curses (в slackware 2.1.0 в пакете bsd).

        Структуры данных для экрана называются 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.


          WINDOW *initscr()
          Обычно это первая функция, вызываемая из программы, использующей ncurses. В некоторых случаях полезно вызывать slk_init(int), filter() , ripoffline(. ) или use_env(bf) перед initscr() . Для работы с несколькими терминалами (или тестирования возможностей системы) Вы можете использовать newterm(. ) вместо initscr() .

        initscr() прочитает terminfo файл и установит структуры данных ncurses, выделит память для curscr и stdscr и проинициализирует переменные LINES и COLS значениями, соответствующими вашему терминалу. Будет возвращен указатель на stdscr или ERR в случае ошибки. Вам НЕ нужно инициализировать указатель.

        stdscr=initscr();

        поскольку initscr() сделает это за вас. Если возвращен ERR, ваша программа должна завершиться, поскольку ни одна функция ncurses не будет работать:

        if (!(initscr()))

        Окна могут быть созданы, уничтожены, перемещены, скопированы, задублированы и т.д.


          WINDOW *newwin(nlines, ncols, begy, begx)
          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

        Верхний левый угол нашего окна находится в строке 10 в колонке 10; окно имеет 10 строк и 60 колонок. Если nlines равна нулю, окно будет иметь ( LINES-begy ) строк. Точно так же, если ncols равна нулю, то окно будет иметь ( COLS-begx ) колонок.

        Когда мы вызываем newwin(. ) с нулевыми аргументами:

        WINDOW *mywin; mywin=newwin(0,0,0,0);

        открытое окно получает размеры экрана.

        При помощи LINES и COLS мы можем открыть окно на середине экрана, какую бы размерность оно ни имело:

        #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);

        Откроется окно с 22 строками и 70 колонками в середине экрана. Проверьте размер экрана перед тем, как открывать окно. Консоль Linux имеет не менее 25 строк и 80 колонок, но на Х-терминалах это может не выполняться (их размеры изменяемы).

        С другой стороны, используйте LINES и COLS , чтобы поместить два окна в один экран:

        #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); .

        • int addch(ch)
          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 addstr(str)
          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 addchstr(chstr)
          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 echochar(ch)
          int wechochar(win, ch)
          То же, что addch(. ) , waddch(win) , с последующим refresh() , wrefresh(win) .


          int printw(fmt, . )
          int wprintw(win, fmt, . )
          int mvprintw(y, x, fmt, . )
          int mvwprintw(win, y, x, fmt, . )
          int vwprintw(win, fmt, va_list)
          Эти функции соответствуют printf(. ) и подобным ей функциям libc.

        В libc printf() используется для форматированного вывода. Вы можете определять выводимую строку и включать в нее переменные различных типов. Подробнее смотрите раздел 8.1.1.

        • int insch(c)
          int winsch(win, c)
          int mvinsch(y,x,c)
          int mvwinsch(win,y,x,c)
          Символ ch вставляется слева от курсора, и все символы сдвигаются на одну позицию вправо. Самый правый символ строки может быть потерян.
        • int insertln()
          int winsertln(win)
          Вставляет чистую строку над текущей. Нижняя строка будет потеряна.
        • int insdelln(n)
          int winsdelln(win, n)
          Для положительного n эти функции вставляют n строк в соответствующем окне ( n нижних строк будут потеряны). Для отрицательных n будут удалены n строк под курсором, оставшиеся сдвинутся вверх.
        • int insstr(str)
          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 в текущую строку слева от курсора (сколько возможно до конца строки). Символы справа от курсора сдвигаются вправо и удаляются достигнув конца строки. Курсор остается на месте.


          int delch()
          int wdelch(win)
          int mvdelch(y, x)
          int mvwdelch(win, y, x)
          Выполняется удаление символа под курсором и сдвиг оставшейся справа от курсора строки на одну позицию влево.


          int border(ls, rs, ts, bs, tl, tr, bl, br)
          int wborder(win, ls, rs, ts, bs, tl, tr, bl, br)
          int box(win, vert, hor)
          Очерчивают соответствующее окно (stdscr или win ). В таблице 8.3 вы увидите символы и их значения по умолчанию для box(. ) . На картинке вы увидите позиции символов для бокса.


        • void bkgdset(ch)
          void wbkgdset(win, ch)
          Устанавливает фоновый символ и атрибут для экрана или окна. Атрибут в ch будет OR-нут с каждым непробельным символом окна. Фон становится частью окна и не изменяется при прокрутке и вводе/выводе.
        • int bkgd(ch)
          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

        Рисунок 8.2: Символы бокса в ncurses.

        tl ts tt ts tr |------------|------------| | | ls| | |rs | | | | | lt|- - - - - - - - - - - - -|rt | | | | | ls| | |rs | | |------------|------------| bl bs bt bs br


          int getch()
          int wgetch(win)
          int mvgetch(y, x)
          int mvwgetch(win, y, x)
          getch() прочитает ввод с терминала. Если режим паузы установлен, getch() будет ждать нажатия клавиши. Если нет, вернет клавишу из буфера ввода или ERR, если буфер пуст. mvgetch(. ) и mvwgetch(. ) сначала установят курсор на позицию y,x . w-функции читают ввод с терминала, связанного с окном win , getch() и mvgetch(. ) с stdscr.


        • int scanw(fmt, . )
          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(. ) .

        • int idlok(win, bf)
          void idcok(win, bf)
          Включение и отключение возможностей вставки/удаления для окна терминала ( idlok(. ) для строк, idcok(. ) для символов).
        • void immedok(win, bf)
          Если устанавливается TRUE, то каждое изменение в окне win вызывает физическое обновление экрана. Это может ухудшить характеристики программы, поэтому значение по умолчанию FALSE.
        • int clearok(win, bf)
          Если bf равен TRUE, то следующий вызов wrefresh(win) очистит экран и полностью его перерисует (Ctrl+L в редакторе vi).
        • int leaveok(win, bf)
          По умолчанию ncurses ставит курсор там, где он был при последнем обновлении окна. Программы, не использующие курсор, могут установить leaveok(. ) TRUE и сэкономить время, требующееся для движения курсора.
        • int nl()
          int nonl()
          Управление переходом на новую строку. После nl() произойдетт возврат каретки и дозаполнение; nonl() отключает контроль. В последнем случае ncurses может ускорить перемещение курсора.

        • int keypad(win, bf)
          TRUE активизирует keypad на клавиатуре во время ожидания ввода. Для функциональных клавиш и стрелок keypad ncurses вернет код клавиши, определенный как KEY_* в ncurses.h. Это очень удобно для клавиатуры ПК, потому что вы имеете возможность и пользоваться цифровым блоком, и перемещать курсор.
        • int meta(win, bf)
          Если TRUE, то коды клавиш, возвращаемые getch() , 7-битовые (верхний бит не учитывается).
        • int cbreak()
          int nocbreak()
          int crmode()
          int nocrmode()
          cbreak() и nocbreak() устанавливают или снимают режим терминала CBREAK. Когда CBREAK установлен, читаемый ввод немедленно доступен программе, когда нет будет буферизован до получения целой строки. Замечание: crmode() и nocrmode() существуют для повышения совместимости, их использовать не нужно.
        • int raw()
          int noraw()
          Устанавливает или снимает режим RAW. RAW это то же, что и CBREAK, только без обработки специальных символов.
        • int echo()
          int noecho()
          Вызывайте echo() для отображения ввода пользователя и noecho() , чтобы его скрыть.
        • int halfdelay(t)
          То же, что и cbreak() , но с паузой в t секунд.
        • int nodelay(win, bf)
          Терминал устанавливается в неблокируемый режим. getch() вернет ERR, если ввод не готов. Если bf есть FALSE, то getch() будет ждать нажатия клавиши.
        • int timeout(t)
          int wtimeout(win, t)
          Эти функции рекомендуется использовать вместо halfdelay(t) и nodelay(win, bf) . Результат getch() зависит от значения t . При положительном t считывание блокируется на t милисекунд; при t , равном нулю, блокировки не происходит; при отрицательном t программа блокируется, пока ввод не станет возможен.
        • int notimeout(win, bf)
          Если bf равен TRUE, getch() будет использовать односекундный таймер для интерпретации вводимой последовательности, начинающейся с ESCAPE и т.п.
        • int typeahead(fd)
          При fd , равном -1, никакой проверки печати производиться не будет, при других значениях ncurses будет использовать для таких проверок файловый дескриптор fd вместо stdin .
        • int intrflush(win, bf)
          При активизации истинным bf нажатая клавиша прерывания (типа quit, break) очистит очередь драйвера tty.

        • int baudrate()
          Возвращает скорость терминала в bps (бит в секунду).
        • char erasechar()
          Возвращает текущий символ erase.
        • char killchar()
          Возвращает текущий символ kill.
        • int has_ic()
          int has_il()
          has_ic() возвращает TRUE, если терминал может вставлять/удалять символ, has_il() возвращает TRUE, если терминал может вставлять/удалять строку. В противном случае возвращается ERR.
        • char *longname()
          Указатель предоставляет доступ к описанию текущего терминала.
        • char *termname()
          Возвращает содержимое TERM из пользовательской среды.

        Поговорим об использовании опций окна и режимов терминала.

        Прежде всего, под Linux следует подключить keypad. Это позволит пользоваться цифровым блоком и клавишами перемещения курсора на клавиатуре ПК.

        Теперь имеется 2 основных типа ввода:

        1. Программа ожидает нажатия клавиши, чтобы вызвать соответствующую функцию (например, что-нибудь вроде «press ‘q’ for quit» и ждет q );
        2. Ожидается, что пользователь введет строку символов в маску на экране (например, каталог или адрес в базе данных).

        Для первого случая мы установим следующие опции и режимы, и цикл while сработает корректно:

        char c; noecho(); timeout(-1); nonl(); cbreak(); keypad(stdscr,TRUE); while(c=getch()) < switch(c)< case 'q': your_quit_function(); default: break; >>

        Эта программа повиснет до нажатия клавиши. Если нажата q , мы вызываем your_quit_function(), иначе ждем другого ввода.

        Выражение switch может быть расширено по нашему желанию. Макросы KEY_* служат для учета специальных клавиш. Например,

        KEY_UP KEY_RIGHT KEY_A1 KEY_B2 KEY_C1 KEY_DOWN KEY_LEFT KEY_A3 KEY_C3

        для клавиш перемещения курсора. Для просмотра файла цикл может выглядеть примерно так:

        int loop=TRUE; char c; enum; 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; >>

        Для второго случая, нам достаточно установить echo() , и символы, набираемые пользователем, будут напечатаны на экране. Место печати задается функциями move(. ) или wmove(. ) .

        Или вы можете открыть окно с маской (выделяемой другими цветами) и попросить пользователя ввести строку:

        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);

        Более подробно см. input.c в каталоге примеров.


          int erase()
          int werase(win)
          werase(. ) и erase() скопируют пробелы на каждую позицию окна win или stdscr. Например, если вы установили атрибуты цвета в окне и вызвали werase() , окно должно быть окрашено. Однако автор имел некоторые проблемы с COLOR_PAIRS, если определял другие атрибуты, а затем черный по белому, так он писал его собственную стирающую функцию (это низкоуровневый доступ к структуре WINDOW):

        void NewClear(WINDOW *win) < int y,x; for (y = 0; y _maxy; y++) for (x = 0; x _maxx; x++) (chtype *) win-> _line[y][x] = ' '|win-> _attrs; win -> _curx = win -> _cury = 0; touchwin(win); >

        Проблема состоит в том, что ncurses иногда делает совершенно бесполезными атрибуты окна, когда заполняет экран пробелами. Если в lib_clrtoeol.c BLANK определен как

        #define BLANK ' '|A_NORMAL,

        Как написано в обзоре, окна ncurses есть отображения в памяти. Это означает, что любое изменение окна не отражается на физическом экране до тех пор, пока не будет произведено обновление. Это оптимизирует вывод на экран, поскольку вы получаете возможность совершать множество действий, а затем лишь единожды вызвать обновление, чтобы напечатать его на экране. В противном случае на терминале отражалось бы каждое изменение, что ухудшало бы исполнение ваших программ.

        • int refresh()
          int wrefresh(win)
          refresh() копирует stdscr на терминал, а wrefresh(win) копирует изображение окна в stdscr и затем делает curscr подобным stdscr.
        • int wnoutrefresh(win)
          int doupdate()
          wnoutrefresh(win) копирует окно win только в stdscr. Это означает, что вывода на терминал не производится, но виртуальный экран stdscr на самом деле выглядит именно так, как того хочет программист. doupdate() произведет вывод на терминал. Программа может менять различные окна, вызывая wnoutrefresh(win) для каждого окна, а затем достаточно один раз вызвать doupdate() , чтобы обновить физический экран.

        Допустим, мы имеем следующую программу с двумя окнами. Мы изменяем оба окна, меняя несколько линий текста. Напишем cgangewin(win) с wrefresh(win) .

        main() changewin(WINDOW *win) < < WINDOW *win1,*win2; . /* здесь мы изменяем */ . . /* строки */ changewin(win1); wrefresh(win); changewin(win2); return; . >>

        Тогда ncurses обновит терминал дважды, а это замедлит исполнение нашей программы. Благодаря doupdate() мы изменим changewin(win) и нашу основную функцию, добившись этим лучшего исполнения.

        main() changewin(WINDOW *win) < < WINDOW *win1,*win2; . /* здесь мы изменяем */ . . /* строки */ changewin(win1); wnoutrefresh(win); changewin(win2); return; doupdate(); >. >

        wtouchln() захватит n линий, начинающихся в y . Если change соответствует TRUE, то линии захватываются, в противном случае нет (изменяются или не изменяются).

        Атрибуты это специальные возможности терминала, применяемые во время печати символов на экран. Символы могут быть напечататы жирно, могут быть подчеркнуты, могут мигать и т.д. В ncurses вы имеете возможность включать или отключать атрибуты для достижения наилучшего внешнего вида вывода. Возможные атрибуты перечислены в нижеследующей таблице.

        ОпределениеАтрибут
        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

        Таблица 8.4: Ncurses-атрибуты

        Ncurses определяет 8 цветов, которыми вы можете пользоваться на терминале с цветовой поддержкой. Сначала проинициализируйте цветовые структуры данных посредством start_color() , затем проверьте возможности терминала при помощи has_colors(). start_color() будет инициализировать COLORS , наибольшее количество цветов, поддерживаемых терминалом, и COLOR_PAIR , максимальное число цветовых пар, которые вы можете определить.

        ОпределениеЦвет
        COLOR_BLACKчерный
        COLOR_REDкрасный
        COLOR_GREENзеленый
        COLOR_YELLOWжелтый
        COLOR_BLUEсиний
        COLOR_MAGENTAпурпурный
        COLOR_CYANголубой
        COLOR_WHITEбелый

        Таблица 8.5: Цвета в Ncurses

        Атрибуты могут быть совмещены ‘|’ (OR), поэтому вы можете получить четкий мерцающий вывод при помощи A_BOLD|A_BLINK

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

        Будьте осторожны с цветами, если вы пишете программы для ncurses и BSD curses, так как BSD curses не имеет цветовой поддержки. (Точно так же не имеют цветовой поддержки старые версии SYS V). Поэтому, если вы компилируете для обеих библиотек, придется использовать операции #ifdef.

        • int attroff(attr)
          int wattroff(win, attr)
          int attron(attr)
          int wattron(win, attr)
          Включают или отключают указанный атрибут attr , не влияя на другие атрибуты в окне (stdscr или win ).
        • int attrset(attr)
          int wattrset(win, attr)
          Установка атрибута в attr в stdscr или win .
        • int standout()
          int standend()
          int wstandout(win)
          int wstandend(win)
          Включают атрибут наиболее яркого режима для окна (stdscr или win ).
        • chtype getattrs(win)
          Выдает текущие атрибуты для окна win .
        • bool has_colors()
          Возвращает TRUE, если терминал имеет цвета. Перед тем, как использовать цвета, проверьте терминал has_colors() , а перед этим проинициализируйте цвета start_color() .
        • bool can_change_color()
          TRUE, если терминал может переопределять цвета.
        • int start_color()
          Цветовая инициализация. Эта функция должна быть вызвана перед использованием цветов!
        • int init_pair(pair,fg,bg)
          Если вы используете цвета в атрибутах окна, то сначала вы должны определить цветовую пару через 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));

        Как комбинировать атрибуты и цвета? Некоторые терминалы, как консоли в Linux, имеют цвета, а некоторые нет (xterm, vs100 и т.д.). Следующий код решит эту проблему:

        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; >

        Прежде всего, функция 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 и протестируйте его.

        • int move(y, x)
          int wmove(win, y, x)
          Движение курсора stdscr или win . Для функций ввода/вывода определяются дополнительные макросы, передвигающие курсор перед вызовом данных функций.

            int curs_set(bf)
            Переключает видимость/невидимость курсора, если терминал имеет такую возможность.
          • void getyx(win, y, x)
            Возвращает координаты курсора. Замечание: это макрос.
          • void getparyx(win, y, x)
            Если win подокно, getparyx(. ) сохранит координаты окна относительно родительского окна. В противном случае y и x установятся в -1.
          • void getbegyx(win, y, x)
            void getmaxyx(win, y, x)
            int getmaxx(win)
            int getmaxy(win)
            Сохранит начальные и размерные координаты для win в y и x .
          • int getsyx(int y, int x)
            int setsyx(int y, int x)
            Сохранит виртуальный курсор экрана в y и x или установит этот курсор. При y и x , равных -1, getsyx(. ) установит leaveok .


            int scrollok(win, bf)
            Если TRUE, текст в окне win будет прокручен вверх на одну строку, когда курсор находится в правом нижнем углу и напечатан символ. Если FALSE, то курсор остается на прежней позиции.

          Следующий код объяснит, как прокручивать текст на экране. Смотрите также type.c в директории примеров.

          Мы хотим прокрутить текст в окне, имеющем 18 линий и 66 колонок. S[] это массив символов с текстом. Max_s является номером последней строки в S[] . Clear_line напечатает пробелы с текущей позиции курсора до конца строки, используя текущие атрибуты окна (не A_NORMAL, как это делает clrtoeol). Beg это последняя строка из s[] , изображенная на данный момент на экране. Scroll перечень того, что должна сделать функция, показать NEXT или PREVious (следующую или предыдущую) строку текста.

          enum; 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; >

          • WINDOW *newpad(nlines, ncols)
          • WINDOW *subpad(orig, nlines, ncols, begy, begx)
          • int prefresh(pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)
          • int pnoutrefresh(pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)
          • int pechochar(pad, ch)

          • int slk_init(int fmt)
          • int slk_set(int labnum, char *label, int fmt)
          • int slk_refresh()
          • int slk_noutrefresh()
          • char *slk_label(int labnum)
          • int slk_clear()
          • int slk_restore()
          • int slk_touch()
          • int slk_attron(chtype attr)
            int slk_attrset(chtype attr)
            int slk_attroff(chtype attr)
            Эти функции соответствуют функциям attron(attr) , attrset(attr) and attroff(attr) .

          • int beep()
          • int flash()
          • char *unctrl(chtype c)
          • char *keyname(int c)
          • TT>int filter()
          • void use_env(bf)
          • int putwin(WINDOW *win, FILE *filep)
          • WINDOW *getwin(FILE *filep)
          • int delay_output(int ms)
          • int flushinp()

          • int def_prog_mode()
          • int def_shell_mode()
          • int reset_prog_mode()
          • int reset_shell_mode()
          • int resetty()
          • int savetty()
          • int ripoffline(int line, int (*init))
          • int napms(int ms)

          • int scr_dump(char *filename)
          • int scr_restore(char *filename)
          • int scr_init(char *filename)
          • int scr_set(char *filename)

          • int tgetent(char *bp, char *name)
          • int tgetflag(char id[2])
          • int tgetnum(char id[2])
          • char *tgetstr(char id[2], char **area)
          • char *tgoto(char *cap, int col, int row)
          • int tputs(char *str, int affcnt, int (*putc)())

          • int setupterm(char *term, int fildes, int *errret)
          • int setterm(char *term)
          • int set_curterm(TERMINAL *nterm)
          • int del_curterm(TERMINAL *oterm)
          • int restartterm(char *term, int fildes, int *errret)
          • char *tparm(char *str, p1, p2, p3, p4, p5, p6, p7, p8, p9)
            p1 — p9 long int.
          • int tputs(char *str, int affcnt, int (*putc)(char))
          • int putp(char *str)
          • int vidputs(chtype attr, int (*putc)(char))
          • int vidattr(chtype attr)
          • int mvcur(int oldrow, int oldcol, int newrow, int newcol)
          • int tigetnum(char *capname)
          • int tigetstr(char *capname)

          • void _init_trace()
          • void _tracef(char *, . )
          • char *_traceattr(mode)
          • void traceon()
          • void traceoff()

          ПеременнаяИмя свойстваВнутренний код Описание auto_left_marginbwbwCub1 переносит с колонки 0 в последнюю колонку auto_right_marginamamГраницы терминала устанавливаются автоматически back_color_erasebceutЭкран очищается с цветом фона can_changecccccТерминал может переопределять существующие цвета ceol_standout_glitchxhpxsвыделение не удаляется перезаписью (hp) col_addr_glithxhpaYAТолько положительное движение для свойств hpa/mhpa cpi_changes_rescpixYFИзменение размеров символа изменяет разрешение cr_cancels_micro_modecrxmYBИспользование cr отключает режим micro eat_newline_glitchxenlxnНовая строка игнорируется после 80 столбцов (Concept) erase_overstrikeeoeoМожно забить пробелом generic_typegngnОбщий тип линии (такой как выделенная или коммутируемая) hard_copyhchcТерминал твердой копии hard_cursorchtsHCКурсор аппаратный has_meta_keykmkmИмеет метаклавишу ($shift, sets parity bit$) has_print_wheeldaisyYCтребуется вмешательство оператора, чтобы изменить символьную таблицу притера has_status_linehshsИмеет дополнительную строку статуса hue_lightness_saturationhlshlТерминал использует только цветовую нотацию HLS (Tektronix) insert_null_glitchininРежим вставки распознает нули lpi_changes_reslpixYGИзменение толщины линии изменяет разрешение memory_abovedadaСохранение содержимого дисплея над экраном memory_belowdbdbСохранение содержимого дисплея под экраном move_insert_modemirmiБезопасность передвижения в режиме вставки move_standout_modemsgrmsБезопасность передвижения в режиме выделения needs_xon_xoffnxonnxДозаполнение не будет работать, требуется xon/xoff no_esc_ctl_cxsbxb$Beehive$ (f1=escape, f2=Ctrl-C) non_rev_rmcupnrrmcNRsmcup не оборачивает rmcup no_pad_charnpcNPСимвол заполнения не существует non_dest_scroll_regionndscrNDОбласть прокрутки ненарушаема over_strikeososТерминал забивает символы prtr_silentmc5i5iПринтер не создает эха на экране row_addr_glitchxvpaYDТолько положительное движение для свойств vhp\mvpa semi_auto_right_marginsamYEПечать в последнем столбце вызывает cr status_line_esc_okeslokesEscape может быть использован в строке статуса dest_tabs_magic_smsoxtxtНарушена табуляция, magic so char (Teleray 1061) tilde_glitchhzhzНевозможно напечатать тильды transparent_underlineululЗабой подчеркивания xon_xoffxonxoТерминал использует команды xon/xoff
          ПеременнаяИмя свойстваВнутренний код Описание bit_image_entwiningbitwinYoНе документировано в SYSV buffer_capacitybufszYaБуфер печати columnscolscoЧисло колонок в линии dot_vert_spacingspinvYbВысота позиции, в pin на дюйм dot_horz_spacingspinhYcШирина позиции, в точках на дюйм init_tabsititТабуляторы изначально каждые # позиций label_heightlhlhЛиний в каждой метке label_widthlwlwКолонок в каждой метке lineslinesliЧисло линий на экране или странице lines_of_memorylm/TD>lmЧисло линий в памяти, 0 означает переменное magic_cookie_glitchxmc/TD>sg/TD>Число пробелов слева от smso или rmso max_colorscolors/TD>CoМаксимальное количество цветов на экране max_micro_addressmaddrYdМаксимальное значение в micro_. _adress max_micro_jumpmjumpYeМаксимальное значение в parm_. _micro max_pairspairspaМаксимальное число цветовых пар на экране micro_col_sizemcsYfРазмер шага символа в режиме micro micro_line_sizemlsYgРазмер шага линии в режиме micro no_color_videoncvNCВидеоатрибуты, которые нельзя использовать с цветами number_of_pinsnpinsYhЧисло pin на головке принтера num_labelsnlabNlЧисло меток на экране output_res_charorcYiГоризонтальное разрешение, в единицах на линию output_res_lineorlYjВертикальное разрешение, в единицах на линию output_res_horz_inchorhiYkГоризонтальное разрешение, в единицах на дюйм output_res_vert_inchorviYlВертикальное разрешение, в единицах на дюйм padding_baud_ratepbpbНижняя граница, когда требуется cr/nl заполнение virtual_terminalvtvtНомер виртуального терминала (UNIX) width_status_linewslmsЧисло колонок в строке статуса bit_image_typebitypeYpТип устройства двоичного образа buttonstnsBTКоличество кнопок мыши max_attributesmamaМаксимальное число атрибутов, которое можно установить для терминала одновременно maximum_windowswnumMWМаксимальное число возможных окон print_ratecpsYmСкорость печати, в символах в секунду wide_char_sizewidcsYnРазмер шага символа в режиме двойной ширины

          Последние шесть числовых свойств присутствуют в структуре term SYSV, но не задокументированы в man page. Комментарии взяты из заголовка этой структуры.

          acs_charsacscac$Graphics charset pairs$ def=vt100 alt_scancode_escscesaS8Альтернативный esc для эмуляции $scancode$ (по умолчанию vt100) back_tabcbtbtВозврат табулятора (P) bellbelblСлышимый сигнал (звонок) (P) bit_image_repeatbirepXyПовторение двоичного образа ячейки #1 #2 раз (использует tparm) bit_image_newlinebinelZzПередвижение на следующую линию двоичного образа (использует tparm) bit_image_carriage_returnbicrYv Передвижение на начало линии двоичного образа (использует tparm) carriage_returncrcrВозврат каретки change_char_pitchcpiZAИзменение # символов на дюйм change_line_pitchlpiZBИзменение # линий на дюйм change_res_horzchrZCИзменение горизонтального разрешения change_res_vertcvrZDИзменение вертикального разрешения change_scroll_regioncsrcsИзменение до #1 линий через #2 (vt100) (PG) char_paddingrmprPКак ip, только когда в режиме вставки char_set_namescsnmZyСписок наименований символьной таблицы clear_all_tabstbcctОчистка всех позиций табуляции (P) clear_marginsmgcMCОчистка всех границ (верхней, нижней и сторон) clear_screenclearclОчистка экрана и курсор home (P*) clr_bolel1 cbОчистка до начала строки clr_eolelceОчистка до конца строки (P) clr_eosedcdОчистка до конца дисплея (P*) code_set_initcsinciИнициализация последовательности для сложных таблиц кодов color_namescolornmYwДать наименование для цвета #1 column_addresshpachУстановка колонки курсора (PG) command_charactercmdchCCcmd символ терминально устанавливаем в прототипе cursor_addresscupcmПоказ движения курсора строка #1 колонка #2 (PG) cursor_down cud1doВниз на одну линию cursor_home homehoКурсор в начало (если не указана позиция курсора) cursor_invisiblecivisviСделать курсор невидимым cursor_leftcub1leПередвижение курсора на одну позицию влево cursor_mem_addressmrcupCMЗапоминание соответствующей адресации курсора cursor_normalcnormveПридать курсору нормальную видимость (undo vs/vi) cursor_rightcuf1ndНенарушаемое пространство (курсор вправо) cursor_to_llllllПоследняя строка, первая колонка (если не указана позиция курсора) cursor_upcuu1upПересылка на верхний уровень (курсор вверх) cursor_visiblecvvisvsСделать курсор сильновидимым define_bit_image_regiondefbiYxОпределение прямоугольной области двоичного образа (использует tparm) define_chardefcZEОпределение символов в символьной таблице delete_characterdch1dcУдаление символа (P*) delete_linedl1dlУдаление линии (P*) device_typedevtdvИндикация поддержки языка/таблицы кодов dis_status_linedsldsНевозможна строка статуса display_pc_chardispcS1Отображение символа ПК down_half_linehdhdПол-линии вниз (вперед 1/2 перевода строки) ena_acsenacseAВключена альтернативная символьная таблица end_bit_image_regionendbiYyКонец области двоичного образа (использует tparm) enter_alt_charset_modesmacsasНачало альтернативная символьной таблицы (P) enter_am_modesmamSAВключение автоматических границ enter_blink_modeblinkmbВключение мигания enter_bold_modeboldmdВключения суперяркого режима enter_ca_modesmcuptiСтрока начала программ, использующих позицию курсора enter_delete_modesmdcdmРежим удаления (enter) enter_dim_modedimmhВключение полуяркого режима enter_doublewide_modeswidmZFВозможен режим двойной ширины enter_draft_qualitysdrfqZGУстановка качества печати enter_insert_modesmirimРежим вставки (enter) enter_italics_modesitmZHВозможен режим курсива enter_leftward_modeslmZIВозможно движение каретки влево enter_micro_modesmicmZJРазблокирование возможностей микропередвижения enter_near_letter_qualitysnlqZKУстановка печати NLQ enter_normal_qualitysnrmqZLУстановка нормального качества печати enter_pc_charset_modesmpchS2Ввод режима показа символов ПК enter_protected_modeprotmpВключение защищенного режима enter_reverse_moderevmrВключение обратного видеорежима enter_scancode_modesmscS4Ввод режима scancode ПК enter_secure_modeinvismkВключение пробельного режима (символы невидимы) enter_shadow_modesshmZMВозможен режим оттененной печати enter_standout_modesmsosoНачало режима выделения enter_subscript_modessubmZNВозможна печать индекса enter_superscript_modessupmZOВозможна печать верхнего индекса enter_underline_modesmulusНачало режима подчеркивания enter_upward_modesumZPВозможно движение каретки вверх enter_xon_modesmxonSXВключение подтверждения связи xon/xoff erase_charsechecОчистка #1 символов (PG) exit_alt_charset_modermacsaeКонец альтернативной символьной таблицы (P) exit_am_modermamRAОтключение автоматических границ exit_attribute_modesgr0meОтключение всех атрибутов exit_ca_modermcupteСтрока конца программ, использующих позицию курсора exit_delete_modermdcedКонец режима удаления exit_doublewide_moderwidmZQНевозможна печать с двойной шириной exit_insert_modermireiКонец режима вставки exit_italics_moderitmZRНевозможна печать курсивом exit_leftward_moderlmZSВозможно движение каретки вправо (нормального режима) exit_micro_modermicmZTЗаблокированы возможности микропередвижения exit_pc_charset_modermpchS3Невозможен показ символов ПК exit_scancode_modermscS5Невозможен режим просмотра ПК exit_shadow_modershmZUНевозможна оттененная печать exit_standout_modermsoseКонец режима выделения exit_subscript_modersubmZVНевозможна подстрочная печать exit_superscript_modersupmZWНевозможна надстрочная печать exit_underline_modermulueКонец режима подчеркивания exit_upward_moderumZXВозможно движение каретки вниз exit_xon_modermxonRXОтключение подтверждения связи xon/xoff flash_screenflashvbВидимый звонок (невозможно передвижение курсора) form_feedffffТерминал твердой копии извергает страницы (P*) form_status_linefslfsВозврат со строки статуса init_1stringis1i1Строка инициализации терминала init_2stringis2i2Строка инициализации терминала init_3stringis3i3Строка инициализации терминала init_fileififНазвание содержащего файла init_progiprogiPПуть программы для инициализации initialize_colorinitcIcИнициализация определения цвета initialize_pairinitpIpИнициализация цветовой пары insert_characterich1icСимвол вставки (P) insert_lineil1alДобавление новой чистой строки (P*) insert_paddingipipЗабивка после вставленного символа (p*) key_a1ka1K1Верхний левый keypad key_a3ka3K3Верхний правый keypad key_b2ka2K2Центр keypad key_backspacekbskbПослан клавишей backspace key_begkbeg1Клавиша начала key_btabkcbtkBКлавиша назад табуляции key_c1kc1K4Нижний левый keypad key_c3kc3K5Нижний левый keypad key_cancelkcan2Клавиша cancel key_catabktbckaПослан клавишей очистки всей табулиции key_clearkclrkCПослан клавишей очистки экрана или клавишей очистки (стирания) key_closekclo3Клавиша close key_commandkcmd4Командная клавиша key_copykcpy5Клавиша копирования key_createkcrt6Клавиша создания key_ctabkctabktПослан клавишей очистки табулиции key_dckdch1kDПослан клавишей удаления символа key_dlkdl1kLПослан клавишей удаления строки key_downkcud1kdПослан клавишей нижнего терминального массива key_eickrmirkMПослан клавишей rmir или smir в режиме вставки key_endkend7Клавиша end key_enterkent8Клавиша ввода/посылки key_eolkelkEПослан клавишей очистки до конца строки key_eoskedkSПослан клавишей очистки до конца экрана key_exitkext9Клавиша выхода key_f0kf0k0Функциональная клавиша F00 key_f1kf1k1Функциональная клавиша F01 key_f2kf2k2Функциональная клавиша F02 key_f3kf3k3Функциональная клавиша F03 key_f4kf4k4Функциональная клавиша F04 key_f5kf5k5Функциональная клавиша F05 key_f6kf6k6Функциональная клавиша F06 key_f7kf7k7Функциональная клавиша F07 key_f8kf8k8Функциональная клавиша F08 key_f9kf9k9Функциональная клавиша F09 key_f10kf10k;Функциональная клавиша F10 key_f11kf11F1Функциональная клавиша F11 key_f12kf12F2Функциональная клавиша F12 key_f13kf13F3Функциональная клавиша F13 key_f14kf14F4Функциональная клавиша F14 key_f15kf15F5Функциональная клавиша F15 key_f16kf16F6Функциональная клавиша F16 key_f17kf17F7Функциональная клавиша F17 key_f18kf18F8Функциональная клавиша F18 key_f19kf19F9Функциональная клавиша F19 key_f20kf20FAфункциональная клавиша F00 key_f21kf21FBфункциональная клавиша F01 key_f22kf22FCфункциональная клавиша F02 key_f23kf23FDфункциональная клавиша F03 key_f24kf24FEфункциональная клавиша F04 key_f25kf25FFфункциональная клавиша F05 key_f26kf26FGфункциональная клавиша F06 key_f27kf27FHфункциональная клавиша F07 key_f28kf28FIфункциональная клавиша F08 key_f29kf29FJфункциональная клавиша F09 key_f30kf30FKфункциональная клавиша F10 key_f31kf31FLфункциональная клавиша F11 key_f32kf32FMфункциональная клавиша F12 key_f33kf33FNфункциональная клавиша F13 key_f34kf34FOфункциональная клавиша F14 key_f35kf35FPфункциональная клавиша F15 key_f36kf36FQфункциональная клавиша F16 key_f37kf37FRфункциональная клавиша F17 key_f38kf38FSфункциональная клавиша F18 key_f39kf39FTфункциональная клавиша F19 key_f40kf40FUфункциональная клавиша F00 key_f41kf41FVфункциональная клавиша F01 key_f42kf42FWфункциональная клавиша F02 key_f43kf43FXфункциональная клавиша F03 key_f44kf44FYфункциональная клавиша F04 key_f45kf45FZфункциональная клавиша F05 key_f46kf46Faфункциональная клавиша F06 key_f47kf47Fbфункциональная клавиша F07 key_f48kf48Fcфункциональная клавиша F08 key_f49kf49Fdфункциональная клавиша F09 key_f50kf50Feфункциональная клавиша F10 key_f51kf51Ffфункциональная клавиша F11 key_f52kf52Fgфункциональная клавиша F12 key_f53kf53Fhфункциональная клавиша F13 key_f54kf54Fiфункциональная клавиша F14 key_f55kf55Fjфункциональная клавиша F15 key_f56kf56Fkфункциональная клавиша F16 key_f57kf57Flфункциональная клавиша F17 key_f58kf58Fmфункциональная клавиша F18 key_f59kf59Fnфункциональная клавиша F19 key_f60kf60Foфункциональная клавиша F10 key_f61kf61Fpфункциональная клавиша F11 key_f62kf62Fqфункциональная клавиша F12 key_f63kf63Frфункциональная клавиша F13 key_findkfnd0клавиша поиска key_helpkhlp%1клавиша помощи key_homekhomekh послан клавишей home key_ickich1kIпослан клавишей символ вставки/ ввод режима вставки key_ilkil1kAпослан клавишей вставки строки key_leftkcub1klпослан клавишей левого терминального массива key_llkllkHпослан клавишей home-down key_markkmrk%2клавиша пометки key_messagekmsg%3клавиша сообщения key_movekmov%4клавиша перемещения key_nextknxt%5клавиша следующего key_npageknpkNпослан клавишей следующей страницы key_openkopn%6клавиша открывания key_optionskopt%7клавиша опций key_ppagekppkPпослан клавишей предыдущей страницы key_previouskprv%8клавиша предыдущего key_printkprt%9клавиша печати key_redokrdo%0клавиша redo key_referencekref&1клавиша ссылки key_refreshkrfr&2клавиша обновления key_replacekrpl&3клавиша перестановки key_restartkrst&4клавиша перезапуска key_resumekres&5клавиша возобновления работы key_rightkcuf1krпослан клавишей стрелки враво key_saveksav&6клавиша сохранения key_sbegkBEG&9клавиша начала в верхнем регистре key_scancelkCAN&0клавиша cancel в верхнем регистре key_scommandkCMD*1командная клавиша в верхнем регистре key_scopykCPY*2клавиша копирования в верхнем регистре key_screatekCRT*3клавиша создания в верхнем регистре key_sdckDC*4клавиша удаления символа в верхнем регистре key_sdlkDL*5клавиша удаления строки в верхнем регистре key_selectkslt*6клавиша выделения key_sendkEND*7клавиша конца в верхнем регистре key_seolkEOL*8клавиша конца строки в верхнем регистре key_sexitkEXT*9клавиша выхода в верхнем регистре key_sfkindkFпослан клавишей прокрутки прямо/вниз key_sfindkFND*0клавиша поиска в верхнем регистре key_shelpkHLP#1клавиша помощи в верхнем регистре key_shomekHOM#2клавиша начала в верхнем регистре key_sickIC#3клавиша вставки символа в верхнем регистре key_sleftkLFT#4клавиша влево в верхнем регистре key_smessagekMSG%aклавиша сообщения в верхнем регистре key_smovekMOV%bклавиша перемещения в верхнем регистре key_snextkNXT%cклавиша следующего в верхнем регистре key_soptionskOPT%dклавиша опций в верхнем регистре key_spreviouskPRV%eклавиша предыдущего в верхнем регистре key_sprintkPRT%fклавиша печати в верхнем регистре key_srkrikRпослан клавишей прокрутки назад/вверх key_sredokRDO%gклавиша redo в верхнем регистре key_sreplacekRPL%hклавиша перестановки в верхнем регистре key_srightkRIT%iклавиша вправо в верхнем регистре key_sresumekRES%jклавиша возобновления работы в верхнем регистре key_ssavekSAV!1клавиша сохранения в верхнем регистре key_ssuspendkSPD!2клавиша приостановки в верхнем регистре key_stabkhtskTпослан клавишей установки табуляции key_sundokUND!3клавиша undo в верхнем регистре key_suspendkspd&7клавиша приостановки key_undokund&8клавиша undo key_upkcuu1kuпослан клавишей вверх терминала keypad_localrmkxkeвыход из режима $»keypad transmit»$ keypad_xmitsmkxksустановка режима $»keypad transmit»$ терминала lab_f0lf0l0метки на функциональную клавишу f0, если не f0 lab_f1lf1l1метки на функциональную клавишу f1, если не f1 lab_f2lf2l2метки на функциональную клавишу f2, если не f2 lab_f3lf3l3метки на функциональную клавишу f3, если не f3 lab_f4lf4l4метки на функциональную клавишу f4, если не f4 lab_f5lf5l5метки на функциональную клавишу f5, если не f5 lab_f6lf6l6метки на функциональную клавишу f6, если не f6 lab_f7lf7l7метки на функциональную клавишу f7, если не f7 lab_f8lf8l8метки на функциональную клавишу f8, если не f8 lab_f9lf9l9метки на функциональную клавишу f9, если не f9 lab_f10lf10laметки на функциональную клавишу f10, если не f10 label_onsmlnLOподключение мягких меток label_offrmlnLFотключение мягких меток meta_offrmmmoотключение метарежима meta_onsmmmmвключение метарежима (8-ой бит) micro_column_addressmhpaZYкак column_address для микрорегулировки micro_downmcud1ZZкак cursor_down для микрорегулировки micro_leftmcub1Zaкак cursor_left для микрорегулировки micro_rightmcuf1Zbкак cursor_right для микрорегулировки micro_row_addressmvpaZcкак row_address для микрорегулировки micro_up mcuu1Zdкак cursor_up для микрорегулировки newlinenelnwновая линия (действует, как lf после cr) order_of_pinsporderZeСоединяет программные $buts$ с pin головки принтера orig_colorsococСброс всех цветовых пар orig_pairopopУстановка цветовой пары по умолчанию, как в первоначальном варианте pad_charpadpcСимвол-заполнитель (скорее всего null) parm_dchdchDCУдаление #1 символов (PG*) parm_delete_linedlDLУдаление #1 строк (PG*) parm_down_cursorcudDOДвижение курсора вниз на #1 строк (PG*) parm_down_micromcudZfКак cud для микрорегулирования parm_ichichICВставка #1 пробельных символов (PG*) parm_indexindnSFПрокрутка вперед #1 строк (PG) parm_insert_lineilALДобавление #1 новых чистых строк (PG*) parm_left_cursorcubLEПеремещение курсора влево на #1 позиций (PG) parm_left_micromcubZgКак cul для микрорегулирования parm_right_cursorcufRIПеремещение курсора вправо на #1 позиций (PG*) parm_right_micromcufZhКак cur для микрорегулирования parm_rindexrinSRПрокрутка назад на #1 строк (PG*) parm_upcursorcuuUPПеремещение курсора вверх на #1 строк (PG*) parm_upmicromcuuZiКак cuu для микрорегулирования pkey_keypfkeypkПрограммная функциональная клавиша #1 для печати строки #2 pkey_local pflocplПрограммная функциональная клавиша #1 для выполнения строки #2 pkey_xmitpfxpxПрограммная функциональная клавиша #1 для xmit строки #2 pkey_plabpfxlxlПрограммная клавиша #1 для xmit #2 и показа #3 plab_normplnpnПрограммная метка #1 для показа строки #2 print_screenmc0psПечать содержимого экрана prtr_nonmc5ppOВключение принтера для #1 байт prtr_offmc4pfВыключение принтера prtr_onmc5poВключение принтера repeat_charreprpПовторение символа #1 #2 раз (PG*) req_for_inputrfiRFЗапрос на ввод reset_1stringrs1r1Перезапуск терминала в нормальный режим reset_2stringrs2r2Перезапуск терминала в нормальный режим reset_3stringrs3r3Перезапуск терминала в нормальный режим reset_filerfrfИмя файла, содержащего строку перезапуска restore_cursorrcrcУстановка курсора на позицию последнего sc row_addressvpacvАбсолютная вертикальная позиция (установка линии) (PG) save_cursorscscСохранение позиции курсора (P) scancode_escapescescS7Escape для эмуляции scancode scroll_forwardindsfПрокрутка текста вверх (P) scroll_reverseri srПрокрутка текста вниз (P) select_char_setscsZjВыбор символьной таблицы set0_des_seqs0ds s0$Shift to codeset 0 (EUC set 0, ASCII)$ set1_des_seqs1dss1$Shift to codeset 1$ set2_des_seqs2dss2$Shift to codeset 2$ set3_des_seqs3dss3$Shift to codeset 3$ set_a_backgroundsetabABУстановка цвета заднего плана, используя ANSI escape set_a_foregroundsetafAFУстановка цвета переднего плана, используя ANSI escape set_attributessgrsaУстановка видеоатрибутов (PG9) set_backgroundsetbSbУстановка текущего цвета заднего плана set_bottom_marginsmgbZkОбъявление текущей строки нижней границей set_bottom_margin_parmsmgbpZlСтроки на расстоянии #1 или #2 от нижней границы объявляются нижней границей set_color_bandsetcolorYzУстановить текущим цвет #1 set_color_pairscpspУстановка текущей цветовой пары set_foregroundsetfSfУстановка текущего цвета переднего плана set_left_marginsmglMLУстановка текущей колонки как левой границы set_left_margin_parmsmglpZmУстановка левой (правой) границы на #1 (#2) set_lr_marginsmglrMLУстановка левой и правой границ set_page_lingthslinesYZУстановка длины страницы в #1 линий (используйте tparm) set_right_marginsmgrMRУстановка текущей колонки как правой границы set_right_margin_parmsmgrpZnУстановка колонки #1 как правой границы set_tabhtsstУстановка табуляций на всех линиях в текущей колонке set_tb_marginsmgtbMTУстановка верхней и нижней границ set_top_marginsmgtZoУстановка текущей строки как верхней границы set_top_margin_parmsmgtpZpУстановка строки #1 как верхней границы set_windowwindwiТекущее окно: строки #1-#2, колонки #3-#4 start_bit_image sbimZqНачало печати bit image start_char_set_defscsdZrНачало определения символьной таблицы stop_bit_imagerbimZsКонец печати bit image stop_char_set_defrcsdZtКонец определения символьной таблицы subscript_characterssubcsZuСписок подстрочных символов superscript_characterssupcsZvСписок надстрочных символов tabhttaТабуляция на 8 следующих позиций these_cause_crdocrZwДанные символы вызывают CR to_status_linetsltsПереход на строку статуса, первую колонку underline_charucucПодчеркнуть символ и встать после него up_half_linehuhuПередвижение на 1/2 содержимого строки xoff_characterxoffcXFсимвол XOFF xon_characterxoncXNсимвол XON

          Следующие числовые свойства присутствуют в структуре term SYSV, но не задокументированы в man page. Комментарии взяты из заголовка этой структуры.

          label_formatflnLf??
          set_clocksclkSC Установка времени дня
          display_clockdclkDKВывод времени дня на экран
          remove_clockrmclkRCУдаление времени дня ??
          create_windowcwinCWОпределение окна #1 с параметрами от #2, #3 до #4 #5
          goto_windowwingoWGПереход в окно #1
          hanguphupHUПоложить трубку телефона
          dial_phonedialDIНабрать номер телефона #1
          quick_dialqdialQDНабрать номер телефона #1 без дальнейшего повторения
          tonetoneTOВыбрать длинные гудки
          pulsepulsePUВыбрать короткие гудки
          flash_hookhookfhНажать телефонную клавишу
          fixed_pausepausePAПауза на 2-3 секунды
          wait_tonewaitWAОжидание ответного сигнала
          user0u0u0Пользовательская строка #0
          user1u1u1Пользовательская строка #1
          user2u2u2Пользовательская строка #2
          user3u3u3Пользовательская строка #3
          user4u4u4Пользовательская строка #4
          user5u5u5Пользовательская строка #5
          user6u6u6Пользовательская строка #6
          user7u7u7Пользовательская строка #7
          user8u8u8Пользовательская строка #8
          user9u9u9Пользовательская строка #9
          get_mousegetmGmCurses должна предоставить события от мыши
          key_mousekmousKm??
          mouse_infominfoMiИнформация о состоянии мыши
          pc_term_optionspctrmS6Опции терминала ПК
          req_mouse_posreqmpRQТребование отчета о позиции мыши
          zero_motionzeromZxСледующий символ не двигается

          Converted on:
          Fri Mar 29 14:43:04 EST 1996

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *