<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF92%3AUnix_API</id>
		<title>LXF92:Unix API - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF92%3AUnix_API"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;action=history"/>
		<updated>2026-05-14T02:34:20Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5638&amp;oldid=prev</id>
		<title>Crazy Rebel: оформление</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5638&amp;oldid=prev"/>
				<updated>2008-11-26T12:17:48Z</updated>
		
		<summary type="html">&lt;p&gt;оформление&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&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&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;Версия 12:17, 26 ноября 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 39:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 39:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(на диске – файл '''cursedcolors.c''')&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(на диске – файл '''cursedcolors.c''')&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=c&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;termios.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;termios.h&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;sys/ioctl.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;sys/ioctl.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 80:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 80:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;    exit(EXIT_SUCCESS);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;    exit(EXIT_SUCCESS);&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Эта программа основана на программе ''cursedwindows'' из предыдущей статьи, так что многие ее части должны быть вам знакомы.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Эта программа основана на программе ''cursedwindows'' из предыдущей статьи, так что многие ее части должны быть вам знакомы.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 160:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 160:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в файле '''cursedinput.c''') позволяет пользователю вводить строку текста и, затем, распечатывает введенную строку.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в файле '''cursedinput.c''') позволяет пользователю вводить строку текста и, затем, распечатывает введенную строку.&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=c&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;termios.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;termios.h&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;sys/ioctl.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;sys/ioctl.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 200:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 200:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;    exit(EXIT_SUCCESS);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;    exit(EXIT_SUCCESS);&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Поскольку в программе ''cursedinput'' пользователь&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Поскольку в программе ''cursedinput'' пользователь&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 240:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 240:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF92_api2.jpg|Рис. 2]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF92_api2.jpg|Рис. 2]]&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=c&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; keypad(wnd, TRUE);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; keypad(wnd, TRUE);&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; wprintw(wnd, “Enter password...\n”);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; wprintw(wnd, “Enter password...\n”);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 249:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 249:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  else&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  else&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  wprintw(wnd, “ACCESS DENIED!”);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;  wprintw(wnd, “ACCESS DENIED!”);&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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;/code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Определенная нами функция '''get_password()''' принимает три параметра – идентификатор окна, в котором выполняется ввод, адрес буфера, в который записываются вводимые символы и число, указывающее длину буфера (вместе с завершающим нулем). Прототип&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Определенная нами функция '''get_password()''' принимает три параметра – идентификатор окна, в котором выполняется ввод, адрес буфера, в который записываются вводимые символы и число, указывающее длину буфера (вместе с завершающим нулем). Прототип&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 255:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 255:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим теперь саму функцию '''get_password()''':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим теперь саму функцию '''get_password()''':&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=c&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; void get_password(WINDOW * win, char * password, int max_len)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; void get_password(WINDOW * win, char * password, int max_len)&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 277:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 277:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     wechochar(win, ‘\n’);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;     wechochar(win, ‘\n’);&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Функция считывает символы из входного потока с помощью функции '''wgetch()''' до тех пор, пока пользователь не нажмет Enter, или пока&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Функция считывает символы из входного потока с помощью функции '''wgetch()''' до тех пор, пока пользователь не нажмет Enter, или пока&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 323:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 323:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;никаких окон (кроме окна '''stdscr''', которое создается автоматически).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;никаких окон (кроме окна '''stdscr''', которое создается автоматически).&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=c&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;termios.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;termios.h&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;sys/ioctl.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; #include &amp;lt;sys/ioctl.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 359:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 359:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;   exit(EXIT_SUCCESS);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;   exit(EXIT_SUCCESS);&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Поддержка мыши в ncurses инициализируется с помощью функции&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;Строка 388:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 388:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;на структуру '''MEVENT'''. Определение структуры '''MEVENT''' выглядит следующим образом:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;на структуру '''MEVENT'''. Определение структуры '''MEVENT''' выглядит следующим образом:&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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;&amp;lt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source lang=c&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; typedef struct {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; typedef struct {&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; short id; /* идентификатор для различения нескольких устройств */&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; short id; /* идентификатор для различения нескольких устройств */&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 394:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 394:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; mmask_t bstate; /* маска событий */&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; mmask_t bstate; /* маска событий */&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; } MEVENT;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; } MEVENT;&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;&amp;lt;/&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;&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;&amp;lt;/&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/ins&gt;&amp;gt;&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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &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: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Координаты указателя возвращаются в формате строка ('''y'''), столбец ('''x'''). Поле '''bstate''' содержит один-единственный бит, соответствующий константе события.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Координаты указателя возвращаются в формате строка ('''y'''), столбец ('''x'''). Поле '''bstate''' содержит один-единственный бит, соответствующий константе события.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5438&amp;oldid=prev</id>
		<title>Crazy Rebel в 10:57, 19 ноября 2008</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5438&amp;oldid=prev"/>
				<updated>2008-11-19T10:57:32Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;amp;diff=5438&amp;amp;oldid=5437&quot;&gt;(Различия между версиями)&lt;/a&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5437&amp;oldid=prev</id>
		<title>Crazy Rebel в 10:17, 19 ноября 2008</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5437&amp;oldid=prev"/>
				<updated>2008-11-19T10:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;amp;diff=5437&amp;amp;oldid=5436&quot;&gt;(Различия между версиями)&lt;/a&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5436&amp;oldid=prev</id>
		<title>Crazy Rebel: Новая: Категория:Учебники {{Цикл/Unix_API}} : '''Unix API''' Настоящее программирование для Unix – без прикрас и библиот...</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF92:Unix_API&amp;diff=5436&amp;oldid=prev"/>
				<updated>2008-11-19T10:07:59Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: &lt;a href=&quot;/index.php/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D0%B8&quot; title=&quot;Категория:Учебники&quot;&gt;Категория:Учебники&lt;/a&gt; {{Цикл/Unix_API}} : '''Unix API''' Настоящее программирование для Unix – без прикрас и библиот...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Категория:Учебники]]&lt;br /&gt;
{{Цикл/Unix_API}}&lt;br /&gt;
: '''Unix API''' Настоящее программирование для Unix – без прикрас и библиотек-«оберток»&lt;br /&gt;
&lt;br /&gt;
==С окнами на «ты»==&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 12''' В заключительной статье цикла о программировании для Unix '''Андрей Боровский''' расскажет об использовании цветов и поддержке мыши... в консоли!&lt;br /&gt;
&lt;br /&gt;
М&lt;br /&gt;
            ы продолжаем знакомство с ncurses. В прошлый раз мы&lt;br /&gt;
            научились создавать окна. На этом уроке мы рассмотрим&lt;br /&gt;
            другие важные возможности ncurses, такие, как управле-&lt;br /&gt;
ние цветом и поддержка мыши.&lt;br /&gt;
Управление цветом&lt;br /&gt;
Принципы работы с цветом в ncurses могут оказаться неожиданны-&lt;br /&gt;
ми для тех, кто привык работать с цветами в растровых графических&lt;br /&gt;
системах (и для тех, кто имеет опыт работы с текстовым режимом&lt;br /&gt;
DOS/Windows). Библиотека ncurses инициализирует восемь базовых&lt;br /&gt;
цветов: черный, красный, зеленый, желтый, синий (blue), ярко-крас-&lt;br /&gt;
ный (magenta), голубой (cyan) и белый (базовыми называются цвета&lt;br /&gt;
с обычным уровнем яркости). Поскольку к каждому базовому цве-&lt;br /&gt;
ту можно применить атрибут повышенной яркости A_BOLD, всего&lt;br /&gt;
мы получаем 16 цветов (в результате применения атрибута A_BOLD&lt;br /&gt;
к черному цвету получается темно-серый цвет). Базовым цветам&lt;br /&gt;
соответствуют константы COLOR_BLACK, COLOR_RED, COLOR_GREEN,&lt;br /&gt;
COLOR_YELLLOW, COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN и&lt;br /&gt;
COLOR_WHITE (для черного, красного, зеленого, желтого, синего,&lt;br /&gt;
ярко-красного, голубого и белого цветов соответственно). Следует&lt;br /&gt;
отметить, что фактические цвета в окне терминала зависят, прежде&lt;br /&gt;
всего, от настроек самого терминала. Например, базовый желтый&lt;br /&gt;
цвет (COLOR_YELLLOW) будет выглядеть скорее как коричневый, а&lt;br /&gt;
для того, чтобы он стал собственно желтым, ему необходимо придать&lt;br /&gt;
атрибут повышенной яркости. Библиотека ncurses позволяет опреде-&lt;br /&gt;
лять собственные цвета с помощью функции init_color, но эта воз-&lt;br /&gt;
можность поддерживается не всеми консолями. Позволяет ли консоль&lt;br /&gt;
определять собственные цвета, можно выяснить с помощью функции&lt;br /&gt;
can_change_color(). Цвета в ncurses объединяются в пары – цвет сим-&lt;br /&gt;
волов (foreground) и цвет фона (background). Перед тем как печатать&lt;br /&gt;
цветной текст, необходимо определить соответствующую цветовую&lt;br /&gt;
пару и установить ее в качестве атрибута текста (так же, как устанавли-&lt;br /&gt;
вается атрибут мигания или подчеркивания). Изменить цвет фона или&lt;br /&gt;
символов независимо друг от друга нельзя, необходимо определять&lt;br /&gt;
новую пару. Система управления цветами ncurses инициализирует две&lt;br /&gt;
переменные – COLORS (количество базовых цветов) и COLOR_PAIRS&lt;br /&gt;
(максимальное количество цветовых пар, которые можно определить&lt;br /&gt;
одновременно). При работе с терминалом konsole эти переменные при-&lt;br /&gt;
нимают значения 8 и 64 соответственно.&lt;br /&gt;
     Рассмотрим управление цветом на примере программы cursedcolors&lt;br /&gt;
(на диске – файл cursedcolors.c)&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;
 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;
 int main(int argc, char ** argv)&lt;br /&gt;
 {&lt;br /&gt;
    WINDOW * wnd;&lt;br /&gt;
    WINDOW * subwnd;&lt;br /&gt;
    initscr();&lt;br /&gt;
    signal(SIGWINCH, sig_winch);&lt;br /&gt;
    curs_set(FALSE);&lt;br /&gt;
    start_color();&lt;br /&gt;
    refresh();&lt;br /&gt;
    init_pair(1, COLOR_BLUE, COLOR_GREEN);&lt;br /&gt;
    init_pair(2, COLOR_YELLOW, COLOR_BLUE);&lt;br /&gt;
    wnd = newwin(5, 18, 2, 4);&lt;br /&gt;
    wattron(wnd, COLOR_PAIR(1));&lt;br /&gt;
    box(wnd, ‘|’, ‘-’);&lt;br /&gt;
    subwnd = derwin(wnd, 3, 16, 1, 1);&lt;br /&gt;
    wbkgd(subwnd, COLOR_PAIR(2));&lt;br /&gt;
    wattron(subwnd, A_BOLD);&lt;br /&gt;
    wprintw(subwnd, “Hello, brave new curses world!\n”);&lt;br /&gt;
    wrefresh(subwnd);&lt;br /&gt;
    wrefresh(wnd);&lt;br /&gt;
    delwin(subwnd);&lt;br /&gt;
    delwin(wnd);&lt;br /&gt;
    wmove(stdscr, 8, 1);&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;
     Эта программа основана на программе cursedwindows из преды-&lt;br /&gt;
дущей статьи, так что многие ее части должны быть вам знакомы.&lt;br /&gt;
Функция start_color() инициализирует управление цветом ncurses.&lt;br /&gt;
Остальные функции, связанные с цветом, можно использовать только&lt;br /&gt;
после вызова start_color(). Новые цветовые пары создаются с помо-&lt;br /&gt;
щью функции init_pair(). Первым параметром init_pair() должен быть&lt;br /&gt;
один из допустимых номеров пары (от 1 до COLOR_PAIRS-1). Вторым&lt;br /&gt;
параметром функции init_pair() должна быть константа, обознача-&lt;br /&gt;
ющая базовый цвет символа, а третьим – константа, обозначающая&lt;br /&gt;
базовый цвет фона. Цветовая пара с номером 0 определена в ncurses&lt;br /&gt;
как «белый на черном», и изменить ее нельзя. Мы создаем две пары&lt;br /&gt;
цветов – «синие символы на зеленом фоне» под номером 1 и желтые&lt;br /&gt;
символы на синем фоне (любимое сочетание цветов небезызвестного&lt;br /&gt;
Питера Нортона) под номером 2. Номер цветовой пары служит ее иден-&lt;br /&gt;
тификатором. Для того чтобы сделать выбранную цветовую пару атри-&lt;br /&gt;
бутом выводимого текста, необходимо установить с помощью функции&lt;br /&gt;
attron/wattron атрибут COLOR_PAIR(X), где X – номер цветовой пары.&lt;br /&gt;
Атрибут COLOR_PAIR(X) можно комбинировать с другими, например, с&lt;br /&gt;
атрибутом A_BOLD, который влияет на яркость цвета символов (но не&lt;br /&gt;
на яркость цвета фона). Для того чтобы изменить яркость фона, необ-&lt;br /&gt;
ходимо скомбинировать этот атрибут с A_REVERSE.&lt;br /&gt;
    Вызов функции&lt;br /&gt;
 wattron(wnd, COLOR_PAIR(1));&lt;br /&gt;
устанавливает цвет фона и символов (цветовую пару 1) для «внешне-&lt;br /&gt;
го» окна wnd, содержащего рамку. Теперь функция box() напечатает&lt;br /&gt;
символы рамки с учетом заданных атрибутов цвета. Функция wbkgd()&lt;br /&gt;
позволяет нам заполнить структуру данных, соответствующую массиву&lt;br /&gt;
символов окна, различными атрибутами текста. Вызов&lt;br /&gt;
 wbkgd(subwnd, COLOR_PAIR(2));&lt;br /&gt;
заполняет окно subwnd фоновым цветом из цветовой пары 2 и уста-&lt;br /&gt;
навливает соответствующий цвет символов в окне. Помимо атрибута&lt;br /&gt;
COLOR_PAIR(), этой функции можно передавать все те же комбина-&lt;br /&gt;
ции атрибутов, что и wattron(). Атрибуты затем будут применены к&lt;br /&gt;
тексту, выводимому в окне по умолчанию. Для того чтобы сделать&lt;br /&gt;
цвет шрифта в окне subwnd ярким, мы вызываем функцию wattron() с&lt;br /&gt;
атрибутом A_BOLD. Заметьте, что в функции wattron(), вызванной для&lt;br /&gt;
окна subwnd, мы не указываем цветовую пару, поскольку в этом нет&lt;br /&gt;
необходимости. Функция wbkgd() уже заполнила символьный массив&lt;br /&gt;
окна subwnd нужными атрибутами цвета, и нам остается только указать&lt;br /&gt;
атрибут яркости. В принципе, мы могли бы обойтись и без wattron(),&lt;br /&gt;
если бы вызов wbkgd() выглядел так:&lt;br /&gt;
 wbkgd(subwnd, COLOR_PAIR(2)|A_BOLD);&lt;br /&gt;
    Теперь мы можем распечатать текст в окне, что и делается с помо-&lt;br /&gt;
щью функции wprintw(). Для того чтобы символы, напечатанные в окне,&lt;br /&gt;
стали видимыми, необходимо вызвать функцию wrefresh(). Теперь окно&lt;br /&gt;
с текстом и обрамляющая его рамка сияют разными цветами (Рис. 1).&lt;br /&gt;
Вы могли заметить, что если в обычном режиме окно терминала было,&lt;br /&gt;
например, белым, то во время работы программы cursedcolors оно ста-&lt;br /&gt;
новится черным. Это происходит потому, что по умолчанию при ини-&lt;br /&gt;
циализации цвета окно stdscr заполняется атрибутами цветовой пары&lt;br /&gt;
0, как если бы была вызвана функция&lt;br /&gt;
 wbkgd(stdscr, COLOR_PAIR(0));&lt;br /&gt;
    В результате надпись “Press any key to continue...”, которую мы&lt;br /&gt;
печатаем в окне stdscr, выводится белым шрифтом на черном фоне.&lt;br /&gt;
    При работе с цветом в ncurses следует помнить о том, что массивы&lt;br /&gt;
данных окон хранят только номера цветовых пар, применяемых к каж-&lt;br /&gt;
дой ячейке, а не сами значения цветов. Из этого следует, что цвета уже&lt;br /&gt;
напечатанного текста зависят от определения цветовых пар. Допустим,&lt;br /&gt;
вы определили цветовую пару 1 как «желтый на синем» и напечатали&lt;br /&gt;
какой-нибудь текст, используя эту пару в качестве атрибута. Если затем&lt;br /&gt;
вы переопределите цветовую пару 1 как «красный на белом», цвета&lt;br /&gt;
шрифта и фона в уже напечатанном тексте изменятся соответственно&lt;br /&gt;
новому определению цветовой пары.&lt;br /&gt;
Ввод данных в окнах&lt;br /&gt;
С одной из функций ввода данных – getch(), мы уже познакомились.&lt;br /&gt;
Мы также знаем, что этой функции соответствует «оконная» функция&lt;br /&gt;
wgetch(). Обе они позволяют считывать отдельные символы. В отличие&lt;br /&gt;
от них, семейство функций getstr()/getnstr/wgetstr()/wgetnstr() позволя-&lt;br /&gt;
ет считывать целые строки. Буква n перед str в именах функций свиде-&lt;br /&gt;
тельствует о том, что эти варианты функций позволяют указать макси-&lt;br /&gt;
мальную длину строки-буфера и, тем самым, избежать его переполне-&lt;br /&gt;
ния при вводе. Программа cursedinput (ее исходные тексты вы найдете&lt;br /&gt;
в файле cursedinput.c) позволяет пользователю вводить строку текста&lt;br /&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;
 #define MAX_NAME_LEN 15&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;
 int main(int argc, char ** argv)&lt;br /&gt;
 {&lt;br /&gt;
    WINDOW * wnd;&lt;br /&gt;
    char name[MAX_NAME_LEN + 1];&lt;br /&gt;
    initscr();&lt;br /&gt;
    signal(SIGWINCH, sig_winch);&lt;br /&gt;
    curs_set(TRUE);&lt;br /&gt;
    start_color();&lt;br /&gt;
    refresh();&lt;br /&gt;
    init_pair(1, COLOR_YELLOW, COLOR_BLUE);&lt;br /&gt;
    wnd = newwin(5, 23, 2, 2);&lt;br /&gt;
    wbkgd(wnd, COLOR_PAIR(1));&lt;br /&gt;
    wattron(wnd, A_BOLD);&lt;br /&gt;
    wprintw(wnd, “Enter your name...\n”);&lt;br /&gt;
    wgetnstr(wnd, name, MAX_NAME_LEN);&lt;br /&gt;
    name[MAX_NAME_LEN] = 0;&lt;br /&gt;
    wprintw(wnd, “Hello, %s!”, name);&lt;br /&gt;
    wrefresh(wnd);&lt;br /&gt;
    delwin(wnd);&lt;br /&gt;
    curs_set(FALSE);&lt;br /&gt;
    move(8, 4);&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;
    Поскольку в программе cursedinput пользователь&lt;br /&gt;
должен вводить данные, нам удобно сделать кур-&lt;br /&gt;
сор видимым, что мы и делаем с помощью вызова&lt;br /&gt;
curs_set(TRUE). Собственно ввод строки выполняется с&lt;br /&gt;
помощью wgetnstr(). Первый параметр функции – иден-&lt;br /&gt;
тификатор окна, в котором вводятся данные (то есть&lt;br /&gt;
отображаются вводимые символы и курсор), второй&lt;br /&gt;
параметр – строка-буфер, в которую записываются вве-&lt;br /&gt;
денные символы, а третьим аргументом является дли-&lt;br /&gt;
на буфера. При работе с программой вы увидите, что&lt;br /&gt;
нельзя ввести число символов, превышающее MAX_NAME_LEN. Перед&lt;br /&gt;
выводом строки “Press any key to continue...” мы снова прячем курсор.&lt;br /&gt;
    Режим работы терминала, в котором была запущена наша програм-&lt;br /&gt;
ма (она наследует его от программы-родителя), может повлиять на&lt;br /&gt;
поведение некоторых функций ввода данных. В одной из предыдущих&lt;br /&gt;
статей мы уже упоминали о каноническом и неканоническом режиме&lt;br /&gt;
работы терминала. В каноническом режиме терминал буферизует вво-&lt;br /&gt;
димые данные и передает их программе только после того, как поль-&lt;br /&gt;
зователь нажмет Enter. В неканоническом режиме вводимые символы&lt;br /&gt;
передаются программе немедленно. Режим работы терминала мож-&lt;br /&gt;
но изменить с помощью функций cbreak() и nocbreak(). В результате&lt;br /&gt;
вызова cbreak() терминал переходит в режим, в котором введенные&lt;br /&gt;
символы предаются программе, не дожидаясь нажатия Enter, а клави-&lt;br /&gt;
ша BackSpace игнорируется. Терминал выводится из режима cbreak() с&lt;br /&gt;
помощью вызова функции nocbreak().&lt;br /&gt;
    Работая с программой cursedinput, вы, конечно, заметили, что&lt;br /&gt;
функция wgetnstr() допускает редактирование вводимой строки с&lt;br /&gt;
помощью клавиши BackSpace. Поведение этой функции не зависит от&lt;br /&gt;
режима cbreak()/nocbreak(), но поведение других функций, в частно-&lt;br /&gt;
сти, getch(), зависит. В режиме nocbreak() функция getch() возвращает&lt;br /&gt;
управление программе только после того, как пользователь нажмет&lt;br /&gt;
Enter. Все наши программы (как и большинство программ ncurses)&lt;br /&gt;
устанавливают режим cbreak().&lt;br /&gt;
Функция для ввода пароля&lt;br /&gt;
Чтобы лучше изучить возможности ввода текста в библиотеке ncurses,&lt;br /&gt;
напишем функцию, предназначенную для ввода пароля. Вместо вво-&lt;br /&gt;
димых символов наша функция будет печатать на&lt;br /&gt;
экране звездочки (Рис. 2). Cтроку можно будет&lt;br /&gt;
редактировать с помощью клавиши BackSpace. Мы&lt;br /&gt;
перепишем программу cursedinput так, чтобы вмес-&lt;br /&gt;
то своего имени пользователь вводил пароль, кото-&lt;br /&gt;
рый затем сверяется с константой, заданной в про-&lt;br /&gt;
грамме, и в зависимости от того, совпадут они или&lt;br /&gt;
нет, будет выводиться сообщение о предоставлении&lt;br /&gt;
доступа или отказе в нем. Исходный текст програм-&lt;br /&gt;
мы вы найдете в файле cursedpassword.c. Мы при-&lt;br /&gt;
водим только фрагмент, изменившийся по сравнению с программой&lt;br /&gt;
cursedinput.&lt;br /&gt;
 keypad(wnd, TRUE);&lt;br /&gt;
 wprintw(wnd, “Enter password...\n”);&lt;br /&gt;
  get_password(wnd, password, MAX_LEN);&lt;br /&gt;
  wattron(wnd, A_BLINK);&lt;br /&gt;
  if (strcmp(password, RIGHT_PASSWORD) == 0)&lt;br /&gt;
  wprintw(wnd, “ACCESS GRANTED!”);&lt;br /&gt;
  else&lt;br /&gt;
  wprintw(wnd, “ACCESS DENIED!”);&lt;br /&gt;
      Определенная нами функция get_password() принимает три пара-&lt;br /&gt;
метра – идентификатор окна, в котором выполняется ввод, адрес&lt;br /&gt;
буфера, в который записываются вводимые символы и число, ука-&lt;br /&gt;
зывающее длину буфера (вместе с завершающим нулем). Прототип&lt;br /&gt;
функции strcmp(), которую мы используем для сравнения пере-&lt;br /&gt;
данной пользователем строки и пароля, находится в файле string.h.&lt;br /&gt;
Рассмотрим теперь саму функцию get_password():&lt;br /&gt;
 void get_password(WINDOW * win, char * password, int max_len)&lt;br /&gt;
 {&lt;br /&gt;
     int i = 0;&lt;br /&gt;
     int ch;&lt;br /&gt;
     while (((ch = wgetch(win)) != 10) &amp;amp;&amp;amp; (i &amp;lt; max_len-1)) {&lt;br /&gt;
       if (ch == KEY_BACKSPACE) {&lt;br /&gt;
         int x, y;&lt;br /&gt;
         if (i==0) continue;&lt;br /&gt;
         getyx(win, y, x);&lt;br /&gt;
         mvwaddch(win, y, x-1, ‘ ‘);&lt;br /&gt;
         wrefresh(win);&lt;br /&gt;
         wmove(win, y, x-1);&lt;br /&gt;
         i--;&lt;br /&gt;
         continue;&lt;br /&gt;
       }&lt;br /&gt;
       password[i++] = ch;&lt;br /&gt;
       wechochar(win, ‘*’);&lt;br /&gt;
     }&lt;br /&gt;
     password[i] = 0;&lt;br /&gt;
     wechochar(win, ‘\n’);&lt;br /&gt;
 }&lt;br /&gt;
     Функция считывает символы из входного потока с помощью функ-&lt;br /&gt;
ции wgetch() до тех пор, пока пользователь не нажмет Enter, или пока&lt;br /&gt;
длина введенной строки не сравняется с максимально допустимой.&lt;br /&gt;
Для вывода отдельных символов в окно можно применить функцию&lt;br /&gt;
waddch(), однако мы используем функцию wechochar(), которая экви-&lt;br /&gt;
валентна вызову waddch() с последующим вызовом wrefresh(). Самая&lt;br /&gt;
сложная часть функции get_password() связана с обработкой нажатия&lt;br /&gt;
клавиши BackSpace. Прежде всего, необходимо получить код этой&lt;br /&gt;
специальной клавиши. По умолчанию при нажатии на специальные&lt;br /&gt;
клавиши, такие как стрелки, клавиши F1-F12 или BackSpace, терминал&lt;br /&gt;
генерирует последовательность кодов, представляющих так называе-&lt;br /&gt;
мую Esc-последовательность клавиши. Для того чтобы заменить Esc-&lt;br /&gt;
последовательность одним специальным кодом, необходимо вызвать&lt;br /&gt;
функцию keypad() с ненулевым вторым параметром (что мы и делаем&lt;br /&gt;
в главной функции программы). Первым параметром keypad() должен&lt;br /&gt;
быть идентификатор окна (в нашем случае – wnd).&lt;br /&gt;
     Вызов keypad() с ненулевым вторым параметром приводит к тому,&lt;br /&gt;
что клавиши F1-F12 генерируют коды KEY_F1-KEY_F12, клавиши со&lt;br /&gt;
стрелками – коды KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, а клавиша&lt;br /&gt;
BackSpace – код KEY_BACKSPACE. Описание других кодов специальных&lt;br /&gt;
клавиш и событий вы найдете на странице man функции getch(). Получив&lt;br /&gt;
в потоке ввода код KEY_BACKSPACE, мы должны выполнить несколько&lt;br /&gt;
операций, прежде всего – стереть только что напечатанную звездочку.&lt;br /&gt;
Для этого нужно получить текущие координаты курсора, сдвинуть его&lt;br /&gt;
на одну позицию влево и напечатать пробел. Затем курсор снова нужно&lt;br /&gt;
сдвинуть на одну позицию влево. Получить текущие координаты курсо-&lt;br /&gt;
ра в окне можно с помощью макроса getyx(). Его первым параметром&lt;br /&gt;
является идентификатор окна, вторым – переменная, в которой макрос&lt;br /&gt;
сохранит значение строки курсора, третьим – переменная, в которой&lt;br /&gt;
будет сохранен столбец курсора. Именно потому, что getyx() – макрос,&lt;br /&gt;
мы передаем для получения значений переменные, а не указатели на&lt;br /&gt;
них. Функция mvwaddch() сочетает перемещение курсора и вывод сим-&lt;br /&gt;
вола. Первый параметр функции – идентификатор окна. За ним следуют&lt;br /&gt;
новые координаты курсора – строка и столбец. Последним параметром&lt;br /&gt;
функции является символ, который нужно напечатать. После того, как&lt;br /&gt;
мы привели в порядок экран, мы уменьшаем на единицу счетчик вве-&lt;br /&gt;
денных символов (переменная i). Если переменная i равна нулю, никаких&lt;br /&gt;
действий не выполняется. Наша функция get_password() будет работать&lt;br /&gt;
правильно только в режиме cbreak(). Следует отметить, что функция не&lt;br /&gt;
будет корректно работать с клавишей BackSpace, если при вводе пароля&lt;br /&gt;
произошел перенос строки.&lt;br /&gt;
Окна и мыши&lt;br /&gt;
Еще одной полезной возможностью, которую ncurses предостав-&lt;br /&gt;
ляет программистам, является поддержка мыши в окне терминала.&lt;br /&gt;
Рассмотрим программу cursedmouse (на диске – файл cursedmouse.c),&lt;br /&gt;
которая регистрирует щелчки левой кнопкой мыши, сделанные пользо-&lt;br /&gt;
вателем в окне терминала, и распечатывает координаты курсора мыши&lt;br /&gt;
в момент щелчка. Ради простоты мы не создаем в этой программе&lt;br /&gt;
никаких окон (кроме окна stdscr, которое создается автоматически).&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;
 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;
    nodelay(stdscr, 1);&lt;br /&gt;
    while (wgetch(stdscr) != ERR);&lt;br /&gt;
    nodelay(stdscr, 0);&lt;br /&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;
   keypad(stdscr, 1);&lt;br /&gt;
   mousemask(BUTTON1_CLICKED, NULL);&lt;br /&gt;
   move(2,2);&lt;br /&gt;
   printw(“Press the left mouse button to test mouse\n”);&lt;br /&gt;
   printw(“Press any key to quit...\n”);&lt;br /&gt;
   refresh();&lt;br /&gt;
   while (wgetch(stdscr) == KEY_MOUSE) {&lt;br /&gt;
      MEVENT event;&lt;br /&gt;
      getmouse(&amp;amp;event);&lt;br /&gt;
      move(0, 0);&lt;br /&gt;
      printw(“Mouse button pressed at %i, %i\n”, event.x, event.y);&lt;br /&gt;
      refresh();&lt;br /&gt;
      move(event.y, event.x);&lt;br /&gt;
   }&lt;br /&gt;
   endwin();&lt;br /&gt;
   exit(EXIT_SUCCESS);&lt;br /&gt;
 }&lt;br /&gt;
    Поддержка мыши в ncurses инициализируется с помощью функции&lt;br /&gt;
mousemask(). Первым параметром этой функции должна быть маска&lt;br /&gt;
событий мыши, которые следует обрабатывать в программе, вторым&lt;br /&gt;
параметром может быть указатель на переменную, в которой функция&lt;br /&gt;
сохранит прежнюю маску событий, или NULL, если прежняя маска нам&lt;br /&gt;
не нужна. Каждому событию мыши в ncurses соответствует своя кон-&lt;br /&gt;
станта. Если мы хотим обрабатывать несколько событий мыши, при&lt;br /&gt;
вызове функции mousemask() мы должны объединить соответствую-&lt;br /&gt;
щие константы операцией «ИЛИ» (|). Повторный вызов mousemask()&lt;br /&gt;
приведет к установке новой маски событий (вызов mousemask() с пер-&lt;br /&gt;
вым аргументом, равным 0, отключает поддержку мыши).&lt;br /&gt;
    Рассмотрим некоторые константы, определяющие события мыши.&lt;br /&gt;
Константа BUTTON1_CLICKED соответствует щелчку левой кнопкой&lt;br /&gt;
мыши (точнее говоря – щелчку первой кнопкой; будет ли пер-&lt;br /&gt;
вая кнопка левой кнопкой мыши, зависит от настроек). Константа&lt;br /&gt;
BUTTON2_PRESSED указывает, что программа должна реагировать&lt;br /&gt;
на нажатие пользователем второй (обычно – правой) кнопки мыши.&lt;br /&gt;
Константа REPORT_MOUSE_POSITION указывает, что мы хотим отсле-&lt;br /&gt;
живать движение указателя мыши, а константа ALL_MOUSE_EVENTS&lt;br /&gt;
заставляет программу реагировать на все события мыши. Более пол-&lt;br /&gt;
ное описание констант событий вы найдете на man-странице функ-&lt;br /&gt;
ции mousemask(3x). В качестве результирующего значения функция&lt;br /&gt;
mousemask() возвращает маску из выбранных нами событий, которые&lt;br /&gt;
фактически могут быть обработаны. Если функция возвращает 0, зна-&lt;br /&gt;
чит, работа с мышью в консоли не поддерживается.&lt;br /&gt;
    Каждый раз, когда в системе происходит одно из «наблюдаемых»&lt;br /&gt;
событий мыши, в потоке ввода программы появляется специальный&lt;br /&gt;
символ KEY_MOUSE. Точнее говоря, по умолчанию, в потоке ввода&lt;br /&gt;
программы Linux появляется Esc-последовательность, соответствую-&lt;br /&gt;
щая этому символу, так что в программе cursedmouse мы тоже должны&lt;br /&gt;
вызвать функцию keypad() с ненулевым вторым параметром.&lt;br /&gt;
     После того, как мы считали из потока ввода специальный символ&lt;br /&gt;
KEY_MOUSE, мы можем получить более подробную информацию о&lt;br /&gt;
вызвавшем его событии мыши. Делается это с помощью функции&lt;br /&gt;
getmouse(). Аргументом функции getmouse() должен быть указатель&lt;br /&gt;
на структуру MEVENT. Определение структуры MEVENT выглядит сле-&lt;br /&gt;
дующим образом:&lt;br /&gt;
 typedef struct {&lt;br /&gt;
 short id; /* идентификатор для различения нескольких устройств */&lt;br /&gt;
 int x, y, z;  /* координаты указателя в момент события */&lt;br /&gt;
 mmask_t bstate; /* маска событий */&lt;br /&gt;
 } MEVENT;&lt;br /&gt;
     Координаты указателя возвращаются в формате строка (y), стол-&lt;br /&gt;
бец (x). Поле bstate содержит один-единственный бит, соответствую-&lt;br /&gt;
щий константе события.&lt;br /&gt;
     В программе cursedmouse мы считываем поступающие во входной&lt;br /&gt;
поток символы в цикле. Если во входном потоке появляется символ&lt;br /&gt;
KEY_MOUSE, мы, с помощью функции getmouse(), определяем коор-&lt;br /&gt;
динаты указателя мыши в момент возникновения события и распеча-&lt;br /&gt;
тываем их в левом верхнем углу экрана, а затем переводим курсор туда,&lt;br /&gt;
куда указывала мышь в момент возникновения события. Появление в&lt;br /&gt;
потоке ввода символа, отличного от KEY_MOUSE, приводит к заверше-&lt;br /&gt;
нию программы.&lt;br /&gt;
     Осталось обратить внимание читателя на обработку сигнала&lt;br /&gt;
SIGWINCH в программе cursedmouse. Изменение размеров экрана&lt;br /&gt;
при включенной поддержке мыши приведет к появлению в потоке&lt;br /&gt;
ввода символов Esc-последовательности специального символа KEY_&lt;br /&gt;
RESIZE (это еще один способ предупредить программу о том, что&lt;br /&gt;
размеры экрана изменились). В программе cursedmouse появление в&lt;br /&gt;
потоке ввода каких-либо кодов, отличных от KEY_MOUSE, приводит&lt;br /&gt;
к завершению программы. Для того чтобы избежать этого, в обра-&lt;br /&gt;
ботчике сигнала SIGWINCH мы опустошаем поток ввода с помощью&lt;br /&gt;
функции flushinp(). Естественно, этот способ спасения программы&lt;br /&gt;
от досрочного завершения годится далеко не всегда, ведь в момент&lt;br /&gt;
изменения размеров окна терминала поток ввода может содержать&lt;br /&gt;
важную информацию. Все это лишний раз демонстрирует, насколь-&lt;br /&gt;
ко нетривиальной является обработка изменения размеров экрана в&lt;br /&gt;
программах ncurses.&lt;br /&gt;
     На этом я заканчиваю (честное слово!) серию статей, посвященную&lt;br /&gt;
Unix API. Я благодарю вас за внимание, проявленное к этой серии, и&lt;br /&gt;
надеюсь, что с помощью моих статей вы получили некоторое общее&lt;br /&gt;
представление о низкоуровневом программировании в Linux/Unix, а&lt;br /&gt;
самое главное, смогли ответить на вопрос – нужно ли вам все это. '''LXF'''&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>