<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mike &#187; Инструментарий</title>
	<atom:link href="http://mikhail.krivyy.com/category/zametki/instruments/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikhail.krivyy.com</link>
	<description>мнение автора может не совпадать с его точкой зрения ©</description>
	<lastBuildDate>Fri, 10 Feb 2012 08:08:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<mikes>en</mikes>		<item>
		<title>Bin2C &#8212; преобразование бинарных файлов в массив C/C++</title>
		<link>http://mikhail.krivyy.com/2004/10/09/binary-files-to-c-module/</link>
		<comments>http://mikhail.krivyy.com/2004/10/09/binary-files-to-c-module/#comments</comments>
		<pubDate>Sat, 09 Oct 2004 10:02:25 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Инструментарий]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2004/10/09/binary-files-to-c-module/</guid>
		<description><![CDATA[Понадобилось мне в одной CGIшке, написанной на СИ, выдавать картинки, причем их не надо было создавать налету, они уже были в виде GIF файлов. Найти bin2c написанной пару лет назад (я думаю, что уже писал такую утилитку, и не один раз) не удалось, по этому быстренько написал на том, что было под рукой &#8212; PHP. [...]]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне в одной CGIшке, написанной на СИ, выдавать картинки, причем их не надо было создавать налету, они уже были в виде GIF файлов. Найти bin2c написанной пару лет назад (я думаю, что уже писал такую утилитку, и не один раз) не удалось, по этому быстренько написал на том, что было под рукой &#8212; PHP. </p>
<p><span id="more-155"></span></p>
<p>Вот рабочий вариант: </p>
<table align=center>
<form enctype="multipart/form-data" action="/services/bin2c/index.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000"/>
<tr>
<td>Файл:</td>
<td>
<input name="userfile" type="file"/></td>
</tr>
<tr>
<td align=center colspan=2>
<input type="submit" value="Отправить"/></td>
</tr>
</form>
</table>
<p>Вот исходник: </p>
<ol class="codelist">
<li class="tab0 odd"><code>&lt;?</code></li>
<li class="tab0 even"><code>$d=&quot;\t&quot;;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>if (isset($_FILES[&quot;userfile&quot;])) {</code></li>
<li class="tab1 odd"><code>Header(&quot;Content-Type: text/plain&quot;);</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>$size=@filesize($_FILES[&quot;userfile&quot;][&quot;tmp_name&quot;]);</code></li>
<li class="tab1 even"><code>if ($size&lt;100000 &amp;&amp; $size&gt;0) {</code></li>
<li class="tab2 odd"><code>$fd=fopen($_FILES[&quot;userfile&quot;][&quot;tmp_name&quot;],&quot;r&quot;);</code></li>
<li class="tab2 even"><code>$contents=fread ($fd,$size);</code></li>
<li class="tab2 odd"><code>fclose ($fd);</code></li>
<li class="tab2 even"><code>for ($i=0;$i&lt;$size;$i++) {</code></li>
<li class="tab3 odd"><code>$d.=sprintf(&quot;0x%02X&quot;,ord($contents[$i]));</code></li>
<li class="tab3 even"><code>$d.=(($i-7)%8)?&quot;, &quot;:&quot;, \n\t&quot;;</code></li>
<li class="tab3 odd"><code>}</code></li>
<li class="tab2 even"><code>}</code></li>
<li class="tab1 odd"><code>print &quot;const int data_size=&quot;.$size.&quot;;\nchar data[]={\n&quot;.substr($d,0,-2).&quot;\n};&quot;;</code></li>
<li class="tab1 even"><code>}</code></li>
<li class="tab0 odd"><code>else {</code></li>
<li class="tab1 even"><code>$SITE[&quot;title&quot;]=&quot;Bin2C - преобразование бинарных файлов в массив C/C++&quot;;</code></li>
<li class="tab0 odd"><code>?&gt;</code></li>
<li class="tab0 even"><code>&lt;H1&gt;Bin2C - преобразование бинарных файлов в массив C/C++ &lt;/H1&gt;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>&lt;table align=center&gt;</code></li>
<li class="tab0 odd"><code>&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;index.php&quot; method=&quot;post&quot;&gt;</code></li>
<li class="tab0 even"><code>&lt;input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;100000&quot;&gt;</code></li>
<li class="tab0 odd"><code>&lt;tr&gt;&lt;td&gt;Файл:&lt;/td&gt;&lt;td&gt;&lt;input name=&quot;userfile&quot; type=&quot;file&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</code></li>
<li class="tab0 even"><code>&lt;tr&gt;&lt;td align=center colspan=2&gt;&lt;input type=&quot;submit&quot; value=&quot;Отправить&quot;&gt;&lt;/td&gt;&lt;/tr&gt;</code></li>
<li class="tab0 odd"><code>&lt;/form&gt;&lt;/table&gt;</code></li>
<li class="tab0 even"><code>&lt;?</code></li>
<li class="tab1 odd"><code>}</code></li>
<li class="tab0 even"><code>?&gt;</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/bin2c.phps">bin2c.phps</a></li>
<p>У программы есть глюк &#8212; она не удалит последнюю запятую, если размер файла будет кратен восьми. Ну меня устраивал и такой вариант. </p>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2004/10/09/binary-files-to-c-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Таблица Unicode для русских букв</title>
		<link>http://mikhail.krivyy.com/2004/10/09/unicode-russian/</link>
		<comments>http://mikhail.krivyy.com/2004/10/09/unicode-russian/#comments</comments>
		<pubDate>Sat, 09 Oct 2004 10:00:49 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Инструментарий]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2004/10/09/unicode-russian/</guid>
		<description><![CDATA[0&#215;0410 А 0&#215;0430 а 0&#215;0411 Б 0&#215;0431 б 0&#215;0412 В 0&#215;0432 в 0&#215;0413 Г 0&#215;0433 г 0&#215;0414 Д 0&#215;0434 д 0&#215;0415 Е 0&#215;0435 е 0&#215;0401 Ё 0&#215;0451 ё 0&#215;0416 Ж 0&#215;0436 ж 0&#215;0417 З 0&#215;0437 з 0&#215;0418 И 0&#215;0438 и 0&#215;0419 Й 0&#215;0439 й 0x041A К 0x043A к 0x041B Л 0x043B л 0x041C М 0x043C [...]]]></description>
			<content:encoded><![CDATA[<div align="center">
<table bgcolor=#C0C0C0 cellspacing=1 cellpadding=5 border=0 width=300 align=center>
<tr bgcolor=white>
<td>0&#215;0410</td>
<td>А</td>
<td>0&#215;0430</td>
<td>а</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0411</td>
<td>Б</td>
<td>0&#215;0431</td>
<td>б</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0412</td>
<td>В</td>
<td>0&#215;0432</td>
<td>в</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0413</td>
<td>Г</td>
<td>0&#215;0433</td>
<td>г</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0414</td>
<td>Д</td>
<td>0&#215;0434</td>
<td>д</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0415</td>
<td>Е</td>
<td>0&#215;0435</td>
<td>е</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0401</td>
<td>Ё</td>
<td>0&#215;0451</td>
<td>ё</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0416</td>
<td>Ж</td>
<td>0&#215;0436</td>
<td>ж</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0417</td>
<td>З</td>
<td>0&#215;0437</td>
<td>з</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0418</td>
<td>И</td>
<td>0&#215;0438</td>
<td>и</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0419</td>
<td>Й</td>
<td>0&#215;0439</td>
<td>й</td>
</tr>
<tr bgcolor=white>
<td>0x041A</td>
<td>К</td>
<td>0x043A</td>
<td>к</td>
</tr>
<tr bgcolor=white>
<td>0x041B</td>
<td>Л</td>
<td>0x043B</td>
<td>л</td>
</tr>
<tr bgcolor=white>
<td>0x041C</td>
<td>М</td>
<td>0x043C</td>
<td>м</td>
</tr>
<tr bgcolor=white>
<td>0x041D</td>
<td>Н</td>
<td>0x043D</td>
<td>н</td>
</tr>
<tr bgcolor=white>
<td>0x041E</td>
<td>О</td>
<td>0x043E</td>
<td>о</td>
</tr>
<tr bgcolor=white>
<td>0x041F</td>
<td>П</td>
<td>0x043F</td>
<td>п</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0420</td>
<td>Р</td>
<td>0&#215;0440</td>
<td>р</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0421</td>
<td>С</td>
<td>0&#215;0441</td>
<td>с</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0422</td>
<td>Т</td>
<td>0&#215;0442</td>
<td>т</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0423</td>
<td>У</td>
<td>0&#215;0443</td>
<td>у</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0424</td>
<td>Ф</td>
<td>0&#215;0444</td>
<td>ф</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0425</td>
<td>Х</td>
<td>0&#215;0445</td>
<td>х</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0426</td>
<td>Ц</td>
<td>0&#215;0446</td>
<td>ц</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0427</td>
<td>Ч</td>
<td>0&#215;0447</td>
<td>ч</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0428</td>
<td>Ш</td>
<td>0&#215;0448</td>
<td>ш</td>
</tr>
<tr bgcolor=white>
<td>0&#215;0429</td>
<td>Щ</td>
<td>0&#215;0449</td>
<td>щ</td>
</tr>
<tr bgcolor=white>
<td>0x042A</td>
<td>Ъ</td>
<td>0x044A</td>
<td>ъ</td>
</tr>
<tr bgcolor=white>
<td>0x042B</td>
<td>Ы</td>
<td>0x044B</td>
<td>ы</td>
</tr>
<tr bgcolor=white>
<td>0x042C</td>
<td>Ь</td>
<td>0x044C</td>
<td>ь</td>
</tr>
<tr bgcolor=white>
<td>0x042D</td>
<td>Э</td>
<td>0x044D</td>
<td>э</td>
</tr>
<tr bgcolor=white>
<td>0x042E</td>
<td>Ю</td>
<td>0x044E</td>
<td>ю</td>
</tr>
<tr bgcolor=white>
<td>0x042F</td>
<td>Я</td>
<td>0x044F</td>
<td>я</td>
</tr>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2004/10/09/unicode-russian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Управление светодиодами на ноутбуке ASUS L3C</title>
		<link>http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/</link>
		<comments>http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/#comments</comments>
		<pubDate>Wed, 28 Jul 2004 16:39:33 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Инструментарий]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2004/07/28/asus-l3c-led/</guid>
		<description><![CDATA[На ноутбуках ASUS, серии L3 есть четыре светодиода. Зеленый &#8212; питание или спящий режим; Условно красный (скорее оранжевый) &#8212; зарядка; Синий &#8212; новая почта; Условно желтый (скорее оранжевый) &#8212; WIFI.   Первый два работают всегда и у всех. Скорее всего, программно с ними вообще нельзя ничего сделать. Я не смог подобрать номер порта для них. [...]]]></description>
			<content:encoded><![CDATA[<p>На ноутбуках ASUS, серии L3 есть четыре светодиода.</p>
<ul>
<li>Зеленый &#8212; питание или спящий режим;</li>
<li>Условно красный (скорее оранжевый) &#8212; зарядка;</li>
<li>Синий &#8212; новая почта;</li>
<li>Условно желтый (скорее оранжевый) &#8212; WIFI.</li>
</ul>
<p> </p>
<div style="text-align: center"><img id="image148" title="asus_nb.gif" alt="asus_nb.gif" src="http://mikhail.krivyy.com/wp-content/uploads/2006/10/asus_nb.gif" /></div>
</p>
<p>Первый два работают всегда и у всех. Скорее всего, программно с ними вообще нельзя ничего сделать. Я не смог подобрать номер порта для них.</p>
<p><span id="more-152"></span></p>
<p>Синий светодиод работает только если установлена специальная программа, которую предоставляет производитель, и только при использовании Outlook.</p>
<p>Желтый работает, если есть WI-FI. В моей модели его нет.</p>
<p>Негоже терять такие замечательные сигнализаторы, подумал я, и прикрутил их к The Bat! (особенно с учетом того, что их видно даже при закрытой крышке).</p>
<p>Ниже приведен код консольной программки, написанной на Borland C++ Builder. </p>
<ol class="codelist">
<li class="tab0 odd"><code>//---------------------------------------------------------------------------</code></li>
<li class="tab0 even"><code>#pragma hdrstop</code></li>
<li class="tab0 odd"><code>//---------------------------------------------------------------------------</code></li>
<li class="tab0 even"><code>#pragma argsused</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>#include &lt;windows.h&gt;</code></li>
<li class="tab0 odd"><code>#include &lt;shlobj.h&gt;</code></li>
<li class="tab0 even"><code>#include &lt;stdio.h&gt;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>#include &lt;windows.h&gt;</code></li>
<li class="tab0 odd"><code>#include &lt;shlobj.h&gt;</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>HANDLE ATKACPIhandle;</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>int CtrlACPI(int code, int hasArg, int arg)</code></li>
<li class="tab0 even"><code>{</code></li>
<li class="tab1 odd"><code>long bytes = 0;</code></li>
<li class="tab1 even"><code>long inbuf[5];</code></li>
<li class="tab1 odd"><code>struct cmbuf {</code></li>
<li class="tab2 even"><code>short cmds[2];</code></li>
<li class="tab2 odd"><code>long cm2;</code></li>
<li class="tab1 even"><code>} cbuf;</code></li>
<li class="tab1 odd"><code>long outbuf[192];</code></li>
<li class="tab1 even"><code>int ret;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab1 even"><code>cbuf.cmds[0] = 0;</code></li>
<li class="tab1 odd"><code>cbuf.cmds[1] = 4;</code></li>
<li class="tab1 even"><code>cbuf.cm2 = arg;</code></li>
<li class="tab1 odd"><code>inbuf[0] = 2;</code></li>
<li class="tab1 even"><code>inbuf[1] = code;</code></li>
<li class="tab1 odd"><code>inbuf[2] = hasArg;</code></li>
<li class="tab1 even"><code>inbuf[3] = 8 * hasArg;</code></li>
<li class="tab1 odd"><code>inbuf[4] = (long)&amp;cbuf;</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>ret = DeviceIoControl(ATKACPIhandle, 0x222404, inbuf, sizeof(inbuf),</code></li>
<li class="tab2 even"><code>outbuf, sizeof(outbuf), (unsigned long*)&amp;bytes, NULL);</code></li>
<li class="tab1 odd"><code>return ret;</code></li>
<li class="tab0 even"><code>}</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>WNDCLASS wndclass;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>LRESULT CALLBACK wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)</code></li>
<li class="tab0 odd"><code>{</code></li>
<li class="tab1 even"><code>int ret;</code></li>
<li class="tab1 odd"><code>switch(uMsg) {</code></li>
<li class="tab1 even"><code>case WM_DESTROY:</code></li>
<li class="tab2 odd"><code>PostQuitMessage(0);</code></li>
<li class="tab2 even"><code>ret = 0;</code></li>
<li class="tab2 odd"><code>break;</code></li>
<li class="tab1 even"><code>default:</code></li>
<li class="tab2 odd"><code>ret = DefWindowProc(hwnd,uMsg,wParam,lParam);</code></li>
<li class="tab2 even"><code>break;</code></li>
<li class="tab1 odd"><code>}</code></li>
<li class="tab1 even"><code>return ret;</code></li>
<li class="tab0 odd"><code>}</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>int main(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR cmdLine,</code></li>
<li class="tab1 even"><code>int iCmdShow)</code></li>
<li class="tab0 odd"><code>{</code></li>
<li class="tab1 even"><code>FILETIME stamp = {0};</code></li>
<li class="tab1 odd"><code>long old = -1, count;</code></li>
<li class="tab1 even"><code>HWND hwnd;</code></li>
<li class="tab1 odd"><code>HKEY UnreadMailKey;</code></li>
<li class="tab1 even"><code>HANDLE KeyEvent;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab1 even"><code>wndclass.hInstance = hInstance;</code></li>
<li class="tab1 odd"><code>wndclass.lpszClassName = &quot;hyc&quot;;</code></li>
<li class="tab1 even"><code>wndclass.lpfnWndProc = wndproc;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab1 even"><code>do {</code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code>if (RegisterClass(&amp;wndclass) == 0 ) break;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code>hwnd = CreateWindow(&quot;hyc&quot;, &quot;hyc&quot;, WS_OVERLAPPEDWINDOW,</code></li>
<li class="tab3 odd"><code>CW_USEDEFAULT, CW_USEDEFAULT,</code></li>
<li class="tab3 even"><code>CW_USEDEFAULT, CW_USEDEFAULT,</code></li>
<li class="tab3 odd"><code>NULL, NULL, wndclass.hInstance, NULL);</code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code>if (!hwnd) break;</code></li>
<li class="even">&nbsp;</li>
<li class="tab2 odd"><code>ATKACPIhandle = CreateFile(&quot;\\\\.\\ATKACPI&quot;,</code></li>
<li class="tab3 even"><code>GENERIC_READ|GENERIC_WRITE,</code></li>
<li class="tab3 odd"><code>FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,</code></li>
<li class="tab3 even"><code>0, NULL);</code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code>if (!ATKACPIhandle) break;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab2 even"><code>for (;;) {</code></li>
<li class="tab6 odd"><code>CtrlACPI(0x44454c57, 1, 1);</code></li>
<li class="tab6 even"><code>CtrlACPI(0x44454c4d, 1, 1);</code></li>
<li class="tab12 odd"><code>Sleep(100);</code></li>
<li class="tab6 even"><code>CtrlACPI(0x44454c57, 1, 0);</code></li>
<li class="tab6 odd"><code>CtrlACPI(0x44454c4d, 1, 0);</code></li>
<li class="tab12 even"><code>Sleep(100);</code></li>
<li class="tab3 odd"><code>}</code></li>
<li class="tab1 even"><code>} while(0);</code></li>
<li class="tab0 odd"><code>return(0);</code></li>
<li class="tab0 even"><code>}</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/asusled.cpp">asusled.cpp</a></li>
<p>Программка управляется из командной строки:</p>
<blockquote><p>
asusled.exe mail on  &#8212; включить синий светодиод<br />
asusled.exe mail off &#8212; выключить синий светодиод<br />
asusled.exe wifi on  &#8212; включить желтый светодиод<br />
asusled.exe wifi off &#8212; выключить желтый светодиод
</p></blockquote>
<p><a id="p149" title="asusled.exe" href="http://mikhail.krivyy.com/wp-content/uploads/2006/10/asusled.exe">Скачать рабочую версию</a> [exe, 52Kb]</p>
<p>В TheBat! необходимо настроить &#171;<strong>сортировщик писем</strong>&#187; так, чтобы при<br />
приходе новой почты запускалась программа &#171;<strong>asusled.exe mail on</strong>&#171;,<br />
и при прочтении писем &#8212; &#171;<strong>asusled.exe mail off</strong>&#171;.</p>
<p>Два разных светодиода я использую для двух разных почтовых ящиков.</p>
<p>Решение для почтового клиента Mozilla (FireBird) можно найти <a id="p151" href="http://mikhail.krivyy.com/wp-content/uploads/2006/10/chkmail.zip">здесь</a>. [zip, 6Kb]</p>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Преобразование строковой даты в time_t</title>
		<link>http://mikhail.krivyy.com/2003/04/07/using-timegm-structure/</link>
		<comments>http://mikhail.krivyy.com/2003/04/07/using-timegm-structure/#comments</comments>
		<pubDate>Mon, 07 Apr 2003 10:10:59 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Инструментарий]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2006/10/05/using-timegm-structure/</guid>
		<description><![CDATA[Если вам необходимо преобразовать строку, содержащую дату в формате &#187; Fri, 6 Dec 2002 13:03:56 GMT&#187; (это достаточно распространенный формат, например в HTTP заголовках так пишется дата в полях Last-Modified и Date) то можете воспользоваться следующей функцией: /* Возвращает time_t для строки в формате: Mon, 07 Apr 2003 12:58:39 GMT */ unsigned long stimegm(char *dt) [...]]]></description>
			<content:encoded><![CDATA[<p>Если вам необходимо преобразовать строку, содержащую дату в формате &#187; Fri, 6 Dec 2002 13:03:56 GMT&#187; (это достаточно распространенный формат, например в HTTP заголовках так пишется дата в полях Last-Modified и Date) то можете воспользоваться следующей функцией: </p>
<p><span id="more-159"></span></p>
<ol class="codelist">
<li class="tab0 odd"><code>/* Возвращает time_t для строки в формате: Mon, 07 Apr 2003 12:58:39 GMT */</code></li>
<li class="tab0 even"><code>unsigned long stimegm(char *dt) {</code></li>
<li class="tab1 odd"><code>if (!dt) return(0);</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>char weekday[4],month[4];</code></li>
<li class="tab1 even"><code>unsigned long DD=0,YY=0,MM=0,hh=0,mm=0,ss=0;</code></li>
<li class="odd">&nbsp;</li>
<li class="tab1 even"><code>sscanf(dt,&quot;%3s, %u %3s %u %u:%u:%u GMT&quot;,&amp;weekday,&amp;DD,&amp;month,&amp;YY,&amp;hh,&amp;mm,&amp;ss);</code></li>
<li class="odd">&nbsp;</li>
<li class="tab1 even"><code>if (strcmp(month,&quot;Jan&quot;)==0) MM=1;</code></li>
<li class="tab1 odd"><code>if (strcmp(month,&quot;Feb&quot;)==0) MM=2;</code></li>
<li class="tab1 even"><code>if (strcmp(month,&quot;Mar&quot;)==0) MM=3;</code></li>
<li class="tab1 odd"><code>if (strcmp(month,&quot;Apr&quot;)==0) MM=4;</code></li>
<li class="tab1 even"><code>if (strcmp(month,&quot;May&quot;)==0) MM=5;</code></li>
<li class="tab1 odd"><code>if (strcmp(month,&quot;Jun&quot;)==0) MM=6;</code></li>
<li class="tab1 even"><code>if (strcmp(month,&quot;Jul&quot;)==0) MM=7;</code></li>
<li class="tab1 odd"><code>if (strcmp(month,&quot;Aug&quot;)==0) MM=8;</code></li>
<li class="tab1 even"><code>if (strcmp(month,&quot;Sep&quot;)==0) MM=9;</code></li>
<li class="tab1 odd"><code>if (strcmp(month,&quot;Oct&quot;)==0) MM=10;</code></li>
<li class="tab1 even"><code>if (strcmp(month,&quot;Nov&quot;)==0) MM=11;</code></li>
<li class="tab1 odd"><code>if (strcmp(month,&quot;Dec&quot;)==0) MM=12;</code></li>
<li class="even">&nbsp;</li>
<li class="tab1 odd"><code>// Далее идет код Сергея Сидорина</code></li>
<li class="tab1 even"><code>unsigned long days = ((YY-1970)*(365+365+366+365)+1)/4 + DD - 1;</code></li>
<li class="tab1 odd"><code>switch (MM) {</code></li>
<li class="tab2 even"><code>case 2: days += 31; break;</code></li>
<li class="tab2 odd"><code>case 3: days += 31+28; break;</code></li>
<li class="tab2 even"><code>case 4: days += 31+28+31; break;</code></li>
<li class="tab2 odd"><code>case 5: days += 31+28+31+30; break;</code></li>
<li class="tab2 even"><code>case 6: days += 31+28+31+30+31; break;</code></li>
<li class="tab2 odd"><code>case 7: days += 31+28+31+30+31+30; break;</code></li>
<li class="tab2 even"><code>case 8: days += 31+28+31+30+31+30+31; break;</code></li>
<li class="tab2 odd"><code>case 9: days += 31+28+31+30+31+30+31+31; break;</code></li>
<li class="tab2 even"><code>case 10: days += 31+28+31+30+31+30+31+31+30; break;</code></li>
<li class="tab2 odd"><code>case 11: days += 31+28+31+30+31+30+31+31+30+31; break;</code></li>
<li class="tab2 even"><code>case 12: days += 31+28+31+30+31+30+31+31+30+31+30; break;</code></li>
<li class="tab1 odd"><code>}</code></li>
<li class="tab1 even"><code>if ( (MM &gt;= 3) &amp;&amp; (YY%4 == 0) )</code></li>
<li class="tab2 odd"><code>days ++;</code></li>
<li class="tab1 even"><code>return days*24*3600 + hh*3600 + mm*60 + ss;</code></li>
<li class="tab1 odd"><code>}</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/stimegm.cpp">stimegm.cpp</a></li>
<p>Вообще-то есть три функции, способные заменить эту, но они не доступны во всех операционных системах. </p>
<table width=400 border=0 cellspacing=1 cellpadding=5 bgcolor=white align=center>
<tr bgcolor=#F8F8F8>
<td align=center><b>&nbsp;</b></td>
<td align=center><b>Windows</b></td>
<td align=center><b>Linux</b></td>
<td align=center><b>FreeBSD</b></td>
</tr>
<tr bgcolor=#F8F8F8>
<td>strptime()</td>
<td align=center>-</td>
<td align=center>+</td>
<td align=center>+</td>
</tr>
<tr bgcolor=#F8F8F8>
<td>timegm()</td>
<td align=center>-</td>
<td align=center>-</td>
<td align=center>+</td>
</tr>
<tr bgcolor=#F8F8F8>
<td>mktime()</td>
<td align=center>+</td>
<td align=center>+</td>
<td align=center>+</td>
</tr>
</table>
<p>P.S. Функция не преобразовывает GMT время в ваше локальное. Для этого вы можете воспользоваться функцией localtime() </p>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2003/04/07/using-timegm-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Многострочный поиск и замена в файлах</title>
		<link>http://mikhail.krivyy.com/2003/02/05/replace-string/</link>
		<comments>http://mikhail.krivyy.com/2003/02/05/replace-string/#comments</comments>
		<pubDate>Wed, 05 Feb 2003 10:06:47 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Инструментарий]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2003/02/05/replace-string/</guid>
		<description><![CDATA[Как-то понадобилось заменить один многострочный блок на другой в 17 тыс файлах. DreamWeather умер на первых 500. А приведенный ниже скриптик все сделал быстро и оперативно. &#60;? $old=&#34;\r\n&#34;; // что заменям $new=&#34;,&#34;; // на что заменяем $ext=&#34;.htm&#34;; // Задает расширение файлов, в которых // будет производится замена &#160; $d = dir(&#34;.&#34;); while($entry=$d-&#62;read()) { if (strpos($entry,$ext)!=0) [...]]]></description>
			<content:encoded><![CDATA[<p>Как-то понадобилось заменить один многострочный блок на другой в 17 тыс файлах.<br />
DreamWeather умер на первых 500. А приведенный ниже скриптик все сделал быстро<br />
и оперативно. </p>
<p><span id="more-157"></span></p>
<ol class="codelist">
<li class="tab0 odd"><code>&lt;?</code></li>
<li class="tab0 even"><code>$old=&quot;\r\n&quot;;           // что заменям</code></li>
<li class="tab0 odd"><code>$new=&quot;,&quot;;              // на что заменяем</code></li>
<li class="tab0 even"><code>$ext=&quot;.htm&quot;;           // Задает расширение файлов, в которых</code></li>
<li class="tab23 odd"><code>// будет производится замена</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>$d = dir(&quot;.&quot;);</code></li>
<li class="tab0 even"><code>while($entry=$d-&gt;read()) {</code></li>
<li class="tab1 odd"><code>if (strpos($entry,$ext)!=0) {</code></li>
<li class="tab2 even"><code>$fp=fopen($entry,&quot;rt&quot;);</code></li>
<li class="tab2 odd"><code>$txt=&quot;&quot;;</code></li>
<li class="tab2 even"><code>while (!feof($fp)) {</code></li>
<li class="tab3 odd"><code>$str=fgets($fp,65536);</code></li>
<li class="tab3 even"><code>$txt=$txt.$str;</code></li>
<li class="tab3 odd"><code>}</code></li>
<li class="tab2 even"><code>fclose($fp);</code></li>
<li class="tab2 odd"><code>$txt=str_replace(&quot;\n&quot;,&quot;\r&quot;,$txt);</code></li>
<li class="tab2 even"><code>$txt=str_replace($old,$new,$txt);</code></li>
<li class="tab2 odd"><code>$fw=fopen(&quot;tmp.tmp&quot;,&quot;wt&quot;);</code></li>
<li class="tab2 even"><code>fputs($fw,$txt);</code></li>
<li class="tab2 odd"><code>fclose($fw);</code></li>
<li class="tab2 even"><code>unlink($entry);</code></li>
<li class="tab2 odd"><code>rename(&quot;tmp.tmp&quot;,$entry);</code></li>
<li class="tab2 even"><code>print $entry.&quot;\n&quot;;</code></li>
<li class="tab2 odd"><code>}</code></li>
<li class="tab1 even"><code>}</code></li>
<li class="tab0 odd"><code>$d-&gt;close();</code></li>
<li class="tab0 even"><code>?&gt;</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/replace.phps">replace.phps</a></li>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/2003/02/05/replace-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ассемблер и WATCOM C++</title>
		<link>http://mikhail.krivyy.com/1999/11/06/watcom-c-and-assembler/</link>
		<comments>http://mikhail.krivyy.com/1999/11/06/watcom-c-and-assembler/#comments</comments>
		<pubDate>Sat, 06 Nov 1999 10:14:37 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Инструментарий]]></category>

		<guid isPermaLink="false">http://mike.nov.ru/2006/10/05/assembler-i-watcom-c/</guid>
		<description><![CDATA[Достаточно не прозрачно оказалось подключить функции, написанные на ассемблере к WATCOM C++. Надеюсь, этот пример поможет вам сэкономить на этом время. library.asm &#160; .386 &#160; .model large .code global _readkey_ : proc &#160; _TEXT SEGMENT BYTE PUBLIC USE32 'CODE' ASSUME cs:_TEXT &#160; _readkey_ PROC FAR xor eax,eax int 16h db 0C3h _readkey_ ENDP &#160; _TEXT [...]]]></description>
			<content:encoded><![CDATA[<p>Достаточно не прозрачно оказалось подключить функции, написанные на ассемблере к WATCOM C++. Надеюсь, <a href="/wp-content/uploads/2006/10/watasm.zip">этот пример</a> поможет вам сэкономить на этом время. </p>
<p><span id="more-164"></span></p>
<h2>library.asm</h2>
<ol class="codelist">
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>.386</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>.model large</code></li>
<li class="tab0 odd"><code>.code</code></li>
<li class="tab0 even"><code>global  _readkey_ : proc</code></li>
<li class="odd">&nbsp;</li>
<li class="tab0 even"><code>_TEXT        SEGMENT BYTE PUBLIC USE32 'CODE'</code></li>
<li class="tab13 odd"><code>ASSUME  cs:_TEXT</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>_readkey_    PROC FAR</code></li>
<li class="tab13 even"><code>xor eax,eax</code></li>
<li class="tab13 odd"><code>int 16h</code></li>
<li class="tab13 even"><code>db  0C3h</code></li>
<li class="tab0 odd"><code>_readkey_    ENDP</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>_TEXT       ENDS</code></li>
<li class="tab0 even"><code>end</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/library.asm">library.asm</a></li>
<h2>library.h</h2>
<ol class="codelist">
<li class="tab0 odd"><code>extern void _readkey(void);</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/library.h">library.h</a></li>
<h2>asm.c</h2>
<ol class="codelist">
<li class="tab0 odd"><code>#include &quot;asm\library.h&quot;</code></li>
<li class="even">&nbsp;</li>
<li class="tab0 odd"><code>void main(void)</code></li>
<li class="tab1 even"><code>{</code></li>
<li class="tab2 odd"><code>getch();</code></li>
<li class="tab2 even"><code>_readkey();</code></li>
<li class="tab1 odd"><code>}</code></li>
</ol>
<p> <P><strong>Download this code:</strong> <a href="/wp-content/uploads/2006/10/asm.c">asm.c</a></li>
]]></content:encoded>
			<wfw:commentRss>http://mikhail.krivyy.com/1999/11/06/watcom-c-and-assembler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

