<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF91%3AUnix_API</id>
		<title>LXF91:Unix API - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF91%3AUnix_API"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;action=history"/>
		<updated>2026-05-13T13:13:17Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;diff=5724&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Первая программа ''ncurses'' */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;diff=5724&amp;oldid=prev"/>
				<updated>2008-12-02T05:20:40Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Первая программа &amp;#039;&amp;#039;ncurses&amp;#039;&amp;#039;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 05:20, 2 декабря 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 191:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;журнале не изобразить).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;журнале не изобразить).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;LXF91_AAPI1&lt;/del&gt;.png|Рис. 1]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;LXF91_API1&lt;/ins&gt;.png|Рис. 1]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Две строки от ''ncurses''.'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Две строки от ''ncurses''.'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 208:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 208:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; gcc cursed.c -o cursed -lncurses&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; gcc cursed.c -o cursed -lncurses&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Окна==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Окна==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;diff=5723&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;diff=5723&amp;oldid=prev"/>
				<updated>2008-12-02T05:19:47Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;amp;diff=5723&amp;amp;oldid=5720&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;diff=5720&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF91:Unix_API&amp;diff=5720&amp;oldid=prev"/>
				<updated>2008-12-01T12:19:03Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Unix API''' Настоящее программирование для Unix – без прикрас и библиотек-«оберток»&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
{{Цикл/Unix_API}}&lt;br /&gt;
=ncurses: привет Окнам!=&lt;br /&gt;
 &lt;br /&gt;
: '''ЧАСТЬ 11''' Оконный интерфейс не обязательно должен быть графическим! '''Андрей Боровский''' покажет, как создавать удобные приложения, работающие прямо в консоли.&lt;br /&gt;
&lt;br /&gt;
:::: ''As honour, love, obedience, troops of friends,''&lt;br /&gt;
:::: ''I must not look to have; but, in their stead,''&lt;br /&gt;
:::: ''Curses, not loud but deep, mouth-honour, breath,''&lt;br /&gt;
:::: ''Which the poor heart would fain deny, and dare not.''&lt;br /&gt;
:::::::'''William Shakespeare, The Tragedy of Macbeth.'''&lt;br /&gt;
&lt;br /&gt;
В прошлый раз мы научились управлять текстовой консолью с помощью интерфейса ''termios''. Однако, для того, чтобы представить текстовый экран во всем великолепии, возможностей ''termios'' недостаточно. Сегодня мы поговорим о дополнительном&lt;br /&gt;
средстве управления терминалом – библиотеке ''ncurses''. Она и вправду&lt;br /&gt;
заставляет терминал переливаться всеми цветами радуги (вот почему&lt;br /&gt;
во всей серии статей из серии Unix API, эта – единственная, в которой&lt;br /&gt;
вы найдете снимки экранов).&lt;br /&gt;
&lt;br /&gt;
Когда-то давным-давно графические терминалы были редкостью,&lt;br /&gt;
а пользователи текстовых терминалов хотели работать с интерфейсами, похожими на графические (и, самое главное, использовать новое удобное средство ввода – мышь). Специально для того, чтобы предоставить интерфейс «покажи и щелкни» пользователям текстовыхm терминалов, была разработана библиотека ''curses'' (ее название происодит от ее важнейшей функции – управления курсором, а вовсе не от&lt;br /&gt;
проклятия, которое она накладывает на программистов). Изначально&lt;br /&gt;
библиотека curses создавалась для BSD UNIX. В Linux используется&lt;br /&gt;
открытый (распространяющийся на условиях MIT License) клон ''curses'' –&lt;br /&gt;
библиотека ''ncurses'' (new curses). Приложений, использующих ''ncurses''&lt;br /&gt;
в современной Linux-системе не так уж и много. Среди наиболее популярных проектов на базе ''ncurses'' можно назвать ''Midnight Commander'',&lt;br /&gt;
текстовый Web-браузер ''lynx'', программу для чтения новостей ''tin'' и&lt;br /&gt;
почтовый клиент ''mutt''. Сравнительно невысокая популярность ''ncurses''&lt;br /&gt;
объясняется тем, что ниша ее применения сократилась. Большинство&lt;br /&gt;
современных компьютеров поддерживают растровую графику, так что&lt;br /&gt;
если вам нужно реализовать интерфейс «покажи и щелкни», вы, как&lt;br /&gt;
правило, можете воспользоваться более совершенными графическими средствами. Выбирать ncurses как платформу для нового проекта&lt;br /&gt;
следует, только если, с одной стороны, вашей программе совершенно&lt;br /&gt;
необходим интерфейс «покажи и щелкни», а с другой – она должна&lt;br /&gt;
работать в условиях полного отсутствия графической подсистемы.&lt;br /&gt;
&lt;br /&gt;
==Введение в ''ncurses''==&lt;br /&gt;
&lt;br /&gt;
Основными понятиями в ''ncurses'' являются '''экран''' ('''screen'''), '''окно''' ('''window''')&lt;br /&gt;
и '''подокно''' ('''subwindow'''). Экраном называется все пространство, на котором ''ncurses'' может выводить данные. С точки зрения ''ncurses'', экран –&lt;br /&gt;
это матрица ячеек, в которые можно выводить символы. Если монитор работает в текстовом режиме, экран ''ncurses'' совпадает с экраном&lt;br /&gt;
монитора. Если терминал эмулируется графической программой, экраном является рабочая область окна этой программы. Окном ''ncurses''&lt;br /&gt;
называется прямоугольная часть экрана, для которой определены особые параметры вывода. В частности, размеры окна влияют на перенос&lt;br /&gt;
и прокрутку выводимых строк. В каком-то смысле окно можно назвать&lt;br /&gt;
«экраном в экране». В процессе инициализации ''ncurses'' автоматически&lt;br /&gt;
создается окно '''stdscr'', размеры которого совпадают с размерами экрана. Кроме структуры '''stdscr''' по умолчанию создается еще одна структура – '''curscr'''. Если окно '''stdscr''' предназначено в ''ncurses'' для стандартного вывода данных, то '''curscr''' содержит копию данных, отражающую&lt;br /&gt;
текущее состояние экрана. Кода вы записываете данные в '''stdscr''' (или&lt;br /&gt;
другое окно), эти данные не отображаются на экране монитора автоматически. Для того, чтобы сделать новый вывод видимым, вы должны вызывать специальную функцию обновления экрана ('''refresh()''' или&lt;br /&gt;
'''wrefresh()'''). Эта функция сравнивает содержимое окна '''stdscr''' и '''curscr''' и&lt;br /&gt;
обновляет экран на основе различий между ними, а затем вносит изменения в структуру '''curscr'''. Благодаря наличию окна '''curscr''', приложению&lt;br /&gt;
''ncurses'' не требуется «помнить» весь свой предыдущий вывод и перерисовывать его всякий раз, когда в этом возникает потребность. Этим&lt;br /&gt;
программы ''ncurses'' отличаются от графических программ. В старину,&lt;br /&gt;
когда терминалы связывались с компьютерами через модемы, использование двух окон давало дополнительное преимущество в скорости&lt;br /&gt;
обмена данными, ведь программе нужно было передавать на терминал&lt;br /&gt;
не копию экрана целиком, а только последние изменения.&lt;br /&gt;
&lt;br /&gt;
Помимо стандартных окон ''ncurses'', вы можете создавать собственные окна размера, меньшего '''stdscr'''. Ваша программа может работать с несколькими окнами одновременно, выполняя вывод в каждое из них.&lt;br /&gt;
Кроме '''окон''' ('''windows'''), программы ''ncurses'' могут создавать '''подокна'''&lt;br /&gt;
('''subwindows'''), поведение которых несколько отличается от поведения&lt;br /&gt;
стандартных окон.&lt;br /&gt;
&lt;br /&gt;
Важнейшей особенностью ''ncurses'' является возможность указать произвольную позицию курсора для вывода (и ввода) данных. Позиция курсора отсчитывается от левого верхнего угла текущего окна. Ячейка в верхнем левом углу имеет координаты (0, 0). При работе с функциями ''ncurses''&lt;br /&gt;
важно помнить, что первой координатой является номер строки (что соответствует '''y''' в терминах графического программирования), а второй координатой – номер столбца (соответствует '''x''' в графическом режиме).&lt;br /&gt;
&lt;br /&gt;
В случае ошибки функции ''ncurses'' обычно возвращают константу&lt;br /&gt;
'''ERR'''. Если функция не должна возвращать какое-то информативное&lt;br /&gt;
значение (как, например, функция '''getch()'''), в случае успешного выполнения она возвращает константу '''OK'''.&lt;br /&gt;
&lt;br /&gt;
==Первая программа ''ncurses''==&lt;br /&gt;
&lt;br /&gt;
Написание первой программы ''ncurses'' (она называется '''cursed''', исходный текст вы найдете на DVD в файле '''cursed.c''') мы начнем с перечисления заголовочных файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;curses.h&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Помимо уже знакомых нам заголовочных файлов, в программу включен '''curses.h''', который содержит объявления функций, констант и структур данных, экспортируемых библиотекой ''ncurses''.&lt;br /&gt;
&lt;br /&gt;
Прежде чем переходить к программированию ''ncurses'', следует рассмотреть решение одной задачи, с которой сталкиваются все разработчики, использующие эту библиотеку. Речь идет об изменении размеров&lt;br /&gt;
окна терминала (под размерами окна в данном случае понимается число строк и столбцов). Пользователи настоящих текстовых терминалов редко переключали их режимы, и готовы были мириться с последствиями своих действий. В наши дни, когда экраном терминала зачастую служит окно графической программы, пользователь вправе ожидать,&lt;br /&gt;
что при изменении размеров окна работа консольной программы не&lt;br /&gt;
нарушится, а ее интерфейс не развалится.&lt;br /&gt;
&lt;br /&gt;
Когда размеры окна терминала меняются, выполняющаяся в нем&lt;br /&gt;
программа получает сигнал '''SIGWINCH'''. Это одновременно и хорошо,&lt;br /&gt;
и плохо. Хорошо – потому, что терминал информирует программу&lt;br /&gt;
об изменении своих размеров, плохо – потому, что сигналы имеют&lt;br /&gt;
особенность вмешиваться в работу программы. Например, если вы&lt;br /&gt;
напишете программу, использующую ''ncurses'', и не позаботитесь об&lt;br /&gt;
обработке сигнала '''SIGWINCH''', при изменении размеров окна терминала ваша программа может неожиданно завершиться, оставив терминал в ненормальном состоянии. Давайте посмотрим, как обрабатывается&lt;br /&gt;
сигнал '''SIGWINCH''' в программе ''cursed''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 void sig_winch(int signo)&lt;br /&gt;
 {&lt;br /&gt;
    struct winsize size;&lt;br /&gt;
    ioctl(fileno(stdout), TIOCGWINSZ, (char *) &amp;amp;size);&lt;br /&gt;
    resizeterm(size.ws_row, size.ws_col);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция '''sig_winch()''' представляет собой обработчик сигнала&lt;br /&gt;
'''SIGWINCH'''. Следует отметить, что изменение размеров экрана во время работы программы ''ncurses'' представляет собой довольно нетривиальную задачу и стандартного рецепта, описывающего, что нужно&lt;br /&gt;
делать, не существует. Разработчики ''ncurses'', как могли, постарались&lt;br /&gt;
упростить решение этой задачи для программистов, введя функцию&lt;br /&gt;
'''resizeterm()'''. Функцию '''resizeterm()''' следует вызывать сразу после&lt;br /&gt;
изменения размеров окна терминала. Аргументами функции должны&lt;br /&gt;
быть новые размеры экрана, заданные в строках и столбцах. Функция&lt;br /&gt;
'''resizeterm()''' старается сохранить внешний вид и порядок работы приложения в окне терминала с новыми размерами, но это ей удается не&lt;br /&gt;
всегда, с чем мы и столкнемся ниже. Необходимые для '''resizeterm()'''&lt;br /&gt;
значения размеров окна мы получаем с помощью специального вызова '''ioctl()'''. При этом первым параметром функции '''ioctl() ''' должен быть&lt;br /&gt;
дескриптор файла устройства, представляющего терминал. Вторым&lt;br /&gt;
параметром '''ioctl()''' должна быть константа '''TIOCGWINSZ''', а третьим – адрес структуры '''struct winsize'''. Структура '''winsize''', определенная в файле '''&amp;lt;sys/ioctl.h&amp;gt;''', включает в себя поля '''ws_row''' и '''ws_col''', в которых&lt;br /&gt;
возвращается число строк и столбцов окна терминала.&lt;br /&gt;
&lt;br /&gt;
Перейдем теперь к функции '''main()''' программы ''cursed'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 int main(int argc, char ** argv)&lt;br /&gt;
 {&lt;br /&gt;
    initscr();&lt;br /&gt;
    signal(SIGWINCH, sig_winch);&lt;br /&gt;
    noecho();&lt;br /&gt;
    curs_set(0);&lt;br /&gt;
    attron(A_BOLD);&lt;br /&gt;
    move(5, 15);&lt;br /&gt;
    printw(“Hello, brave new curses world!\n”);&lt;br /&gt;
    attroff(A_BOLD);&lt;br /&gt;
    attron(A_BLINK);&lt;br /&gt;
    move(7, 16);&lt;br /&gt;
    printw(“Press any key to continue...”);&lt;br /&gt;
    refresh();&lt;br /&gt;
    getch();&lt;br /&gt;
    endwin();&lt;br /&gt;
    exit(EXIT_SUCCESS);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Работа с ''ncurses'' начинается с вызова функции '''initscr()'''. Эта функции инициализирует структуры данных ncurses и переводит терминал в нужный режим. По окончании работы с ''ncurses'' следует вызвать функцию '''endwin()''', которая восстанавливает то состояние, в котором терминал находился до инициализации ''ncurses''.&lt;br /&gt;
&lt;br /&gt;
После вызова ''initscr()'' мы устанавливаем обработчик сигнал&lt;br /&gt;
'''SIGWINCH'''. Устанавливать обработчик '''SIGWINCH''' следует именно после инициализации ''ncurses'', поскольку в нем используется функция&lt;br /&gt;
'''resizeterm()''', предполагающая, что библиотека ''ncurses'' уже инициализирована. Функция '''noecho()''' отключает отображение символов, вводимых с клавиатуры. Функция '''cur_set()''' управляет видимостью курсора.&lt;br /&gt;
Если вызвать эту функцию с параметром '''0''', курсор станет невидимым,&lt;br /&gt;
вызов же функции с ненулевым параметром снова «включит» его.&lt;br /&gt;
&lt;br /&gt;
Функция '''attron()''' позволяет указать некоторые дополнительные&lt;br /&gt;
атрибуты выводимого текста. Ей можно передать одну или несколько&lt;br /&gt;
констант, обозначающих атрибуты (в последнем случае их следует объ-&lt;br /&gt;
единить с помощью операции «'''|'''»). Например, атрибут '''A_UNDERLINE'''&lt;br /&gt;
включает подчеркивание текста, атрибут '''A_REVERSE''' меняет местами&lt;br /&gt;
цвет фона и текста, атрибут '''A_BLINK''' делает текст мигающим, атрибут&lt;br /&gt;
'''A_DIM''' снижает яркость текста по сравнению с нормальной, атрибут '''A_BOLD''' делает текст жирным в монохромном режиме и управляет яркостью цвета в цветном режиме работы монитора. Специальный атрибут&lt;br /&gt;
'''COLOR_PAIR()''' применяется для установки цветов фона и текста. На&lt;br /&gt;
man-странице, посвященной функции '''attron()''', вы найдете описания и&lt;br /&gt;
других атрибутов. Все перечисленные выше атрибуты оказывают воздействие только на тот текст, который выводится после их установки.&lt;br /&gt;
&lt;br /&gt;
Сбросить атрибуты можно с помощью функции '''attroff()'''. Так же,&lt;br /&gt;
как и в случае с '''attron()''', функции '''attroff()''' можно передать несколько&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>