<?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>Work experience &#187; Programming</title>
	<atom:link href="http://experience.masalas.org/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://experience.masalas.org</link>
	<description>It&#039;s all about IT</description>
	<lastBuildDate>Fri, 05 Mar 2010 16:15:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Delphi multithread tutorial</title>
		<link>http://experience.masalas.org/programming/delphi-thread-tutorial/</link>
		<comments>http://experience.masalas.org/programming/delphi-thread-tutorial/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 12:47:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://experience.masalas.org/delphi-tutorial-threads.html</guid>
		<description><![CDATA[Recently I was reading about programming with threads in Borland Delphi. There is very good tutorial written by Martin Harvey: Multithreading &#8211; The Delphi way but is seemes, that demon.co.uk is dead, so I would like to share offline version of this great tutorial. Hope Martin wouldn&#8217;t mind bout that. All copyright goes to Martin [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I was reading about programming with threads in Borland Delphi. There is very good tutorial written by Martin Harvey: <a href="http://www.pergolesi.demon.co.uk/prog/threads/ToC.html" target="_blank">Multithreading &#8211; The Delphi way</a> but is seemes, that demon.co.uk is dead, so I would like to share offline version of this great tutorial. Hope Martin wouldn&#8217;t mind bout that. All copyright goes to Martin Harvey. And I just make some kind of mirror.<br />
Here is the table of contents:</p>
<p><span id="more-44"></span></p>
<pre>Introduction.
Dedications.
Recommended Reading.
Navigation hints.
Change history.
Credits.
Chapter 1. What are threads? Why use them?
Chapter 2. Creating a thread in Delphi.
Chapter 3. Basic synchronization.
Chapter 4. Simple thread destruction.
Chapter 5. More thread destruction. Deadlock.
Chapter 6. More synchronization: Critical sections and mutexes.
Chapter 7. Mutex programming guidelines. Concurrency control.
Chapter 8. Delphi thread safe classes and Priorities.
Chapter 9. Semaphores. Data flow scheduling. The producer - consumer relationship.
Chapter 10. I/O and data flow: from blocking to asynchronous and back.
Chapter 11. Synchronizers and Events.
Chapter 12. More Win32 synchronization facilities.
Chapter 13. Using threads in conjunction with the BDE, Exceptions and DLLs.
Chapter 14. A real world problem, and its solution.</pre>
<p>Download tutorial&#8217;s offline version: <a href="http://experience.masalas.org/wp/wp-content/uploads/tutorial_multithreading_the_delphi_way_v1.1.zip">tutorial multithreading the Delphi way v1.1 (270KB)</a></p>
<p>Or you can find online version here: <a href="http://www.eonclash.com/Tutorials/Multithreading/MartinHarvey1.1/ToC.html">http://www.eonclash.com/Tutorials/Multithreading/MartinHarvey1.1/ToC.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://experience.masalas.org/programming/delphi-thread-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimize MySQL queries</title>
		<link>http://experience.masalas.org/web/optimize-mysql/</link>
		<comments>http://experience.masalas.org/web/optimize-mysql/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 11:14:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://experience.masalas.org/Optimising-MySQL-queries.html</guid>
		<description><![CDATA[MySQL is powerfull enough to make almost anything in web development. Even wikipedia uses it. Of course, I am not guru to understand and make such a big system. But even most of small projects need optimisation. By optimising MySQL queries, you get faster responses from server, smaller database size etc. Size does matter when [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL is powerfull enough to make almost anything in web development. Even <a href="http://www.wikipedia.com">wikipedia</a> uses it. Of course, I am not guru to understand and make such a big system. But even most of small projects need optimisation. By optimising MySQL queries, you get faster responses from server, smaller database size etc. Size does matter when you use MySQL databases on shared hostings.</p>
<p>There is small article on MySQL optimisation in <a href="http://linuxformat.co.uk/wiki/index.php/PHP_-_Optimising_MySQL_queries">linuxformat.co.uk wiki</a></p>
<p>What I did learn from this article:</p>
<ul>
<li>
<div class="MarkCode">SELECT password FROM users WHERE Username = &#8216;myuser&#8217; LIMIT 1;</div>
<p>Always select just fields which you will need in current situation, <small>SELECT * &#8230;</small> is not good in most cases. If field by which you filter data, is unique, use <small>LIMIT 1</small> statement.</li>
<li>Create fields with as small data types as it is possible. Good example with age field. It is better to use TINYINT UNSIGNED than INT (who lives negative years and reaches 255 year old? )</li>
<li>When database has lots of data, you can check is your schemata is optimised with query:
<div class="MarkCode">SELECT * FROM table PROCEDURE ANALYSE();</div>
<p>It will show you  optimal field data type by analyzing records (look at Optimal_fieldtype column)</li>
<li>Add Index to most searchable columns:
<div class="MarkCode">ALTER TABLE tablename ADD INDEX name(column)</div>
<p>MySQL Index is similar to book&#8217;s index.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://experience.masalas.org/web/optimize-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CP to Unicode</title>
		<link>http://experience.masalas.org/programming/cp-to-unicode/</link>
		<comments>http://experience.masalas.org/programming/cp-to-unicode/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 13:28:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://experience.masalas.org/CP-to-unicode-converter.html</guid>
		<description><![CDATA[Here youll find CP to unicode converter written by me. I needed such utility for MS-DOS. Yes, MS-DOS doesn&#8217;t support unicode, but what to do if you need to convert from windows-1257 to Unicode. Yes, there are some converters written for windows. Some of them are shareware. But I didn&#8217;t find any freeware to batch [...]]]></description>
			<content:encoded><![CDATA[<p>Here youll find CP to unicode converter written by me. I needed such utility for MS-DOS. Yes, MS-DOS doesn&#8217;t support unicode, but what to do if you need to convert from windows-1257 to Unicode. Yes, there are some converters written for windows. Some of them are shareware. But I didn&#8217;t find any freeware to batch convert lots of files at a time. Well there are linux sollutions such as enca but it didn&#8217;t work as I expected. So I written little conversion utility by myself.</p>
<p><span id="more-49"></span>At first I&#8217;ve opened unicode documment in hex editor and realised, that first two symbols in it shows, that this document is in unicode, they are 0xFF and 0xFE (in HEX). Then follows symbols. Unicode uses two bytes for one symbol. So I needed to know table which corresponds to windows-1257 and unicode. This website has what I need http://www.orwell.ru.<br />
I didnt need to make universal CP to unicode converter, so I just took cp1257 table and transformed it to two arrays (one array is the first unicode byte and second is 2nd unicode byte). At first I thought somehow to replace cp symbol to two corresponding unicode symbols, but bright idea catched my mind, that array&#8217;s indexes are the same :) So if I get cp1257 symbols number in code table, I can use it in unicode arrays indexes. For example if symbol is &#8220;!&#8221; (EXCLAMATION MARK) its code 0&#215;22 in hex and 33 in dec. So I can take value number 33 from unicode table arrays and it&#8217;ll be the same exclamation mark symbol. Ok, let&#8217;s see this little converter written in turbo pascal, you can use it or change it as much as you need:</p>
<div class="dean_ch" style="white-space: nowrap;"><span class="kw2">Program</span> cp2uni;<br />
<span class="kw2">uses</span> crt;</p>
<p><span class="coMULTI">{ Characters table found here: http://www.orwell.ru/test/CP/_?cp1257 }</span><br />
<span class="coMULTI">{ Don&#8217;t forget that bytes written in reverse order }</span><br />
<span class="coMULTI">{ If you need to write 0&#215;0021 you will write 0&#215;21 0&#215;00 }</span><br />
<span class="coMULTI">{ In Turbo Pascal hex numbers are written in $XX form<br />
{ eg in C 0&#215;21, in TP $21 }</span></p>
<p><span class="coMULTI">{ IBM CP to Unicode Windows-1257 characters table First byte }</span><br />
<span class="kw4">const</span> unicodeArrayFb: <span class="kw4">array</span><span class="br0">&#91;</span><span class="nu0">0</span>..<span class="nu0">255</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">byte</span> =<br />
<span class="br0">&#40;</span><br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">02</span>, $<span class="nu0">03</span>, $<span class="nu0">04</span>, $<span class="nu0">05</span>, $<span class="nu0">06</span>, $<span class="nu0">07</span>, $<span class="nu0">08</span>,<br />
&nbsp;$<span class="nu0">09</span>, $0A, $0B, $0C, $0D, $0E, $0F, $<span class="nu0">10</span>, $<span class="nu0">11</span>,<br />
&nbsp;$<span class="nu0">12</span>, $<span class="nu0">13</span>, $<span class="nu0">14</span>, $<span class="nu0">15</span>, $<span class="nu0">16</span>, $<span class="nu0">17</span>, $<span class="nu0">18</span>, $<span class="nu0">19</span>, $1A,<br />
&nbsp;$1B, $1C, $1D, $1E, $1F, $<span class="nu0">20</span>, $<span class="nu0">21</span>, $<span class="nu0">22</span>, $<span class="nu0">23</span>,<br />
&nbsp;$<span class="nu0">24</span>, $<span class="nu0">25</span>, $<span class="nu0">26</span>, $<span class="nu0">27</span>, $<span class="nu0">28</span>, $<span class="nu0">29</span>, $2A, $2B, $2C,<br />
&nbsp;$2D, $2E, $2F, $<span class="nu0">30</span>, $<span class="nu0">31</span>, $<span class="nu0">32</span>, $<span class="nu0">33</span>, $<span class="nu0">34</span>, $<span class="nu0">35</span>,<br />
&nbsp;$<span class="nu0">36</span>, $<span class="nu0">37</span>, $<span class="nu0">38</span>, $<span class="nu0">39</span>, $3A, $3B, $3C, $3D, $3E,<br />
&nbsp;$3F, $<span class="nu0">40</span>, $<span class="nu0">41</span>, $<span class="nu0">42</span>, $<span class="nu0">43</span>, $<span class="nu0">44</span>, $<span class="nu0">45</span>, $<span class="nu0">46</span>, $<span class="nu0">47</span>,<br />
&nbsp;$<span class="nu0">48</span>, $<span class="nu0">49</span>, $4A, $4B, $4C, $4D, $4E, $4F, $<span class="nu0">50</span>,<br />
&nbsp;$<span class="nu0">51</span>, $<span class="nu0">52</span>, $<span class="nu0">53</span>, $<span class="nu0">54</span>, $<span class="nu0">55</span>, $<span class="nu0">56</span>, $<span class="nu0">57</span>, $<span class="nu0">58</span>, $<span class="nu0">59</span>,<br />
&nbsp;$5A, $5B, $5C, $5D, $5E, $5F, $<span class="nu0">60</span>, $<span class="nu0">61</span>, $<span class="nu0">62</span>,<br />
&nbsp;$<span class="nu0">63</span>, $<span class="nu0">64</span>, $<span class="nu0">65</span>, $<span class="nu0">66</span>, $<span class="nu0">67</span>, $<span class="nu0">68</span>, $<span class="nu0">69</span>, $6A, $6B,<br />
&nbsp;$6C, $6D, $6E, $6F, $<span class="nu0">70</span>, $<span class="nu0">71</span>, $<span class="nu0">72</span>, $<span class="nu0">73</span>, $<span class="nu0">74</span>,<br />
&nbsp;$<span class="nu0">75</span>, $<span class="nu0">76</span>, $<span class="nu0">77</span>, $<span class="nu0">78</span>, $<span class="nu0">79</span>, $7A, $7B, $7C, $7D,<br />
&nbsp;$7E, $7F, $AC, $<span class="nu0">20</span>, $1A, $<span class="nu0">20</span>, $1E, $<span class="nu0">26</span>, $<span class="nu0">20</span>,<br />
&nbsp;$<span class="nu0">21</span>, $<span class="nu0">20</span>, $<span class="nu0">30</span>, $<span class="nu0">20</span>, $<span class="nu0">39</span>, $<span class="nu0">20</span>, $A8, $C7, $B8,<br />
&nbsp;$<span class="nu0">20</span>, $<span class="nu0">18</span>, $<span class="nu0">19</span>, $1C, $1D, $<span class="nu0">22</span>, $<span class="nu0">13</span>, $<span class="nu0">14</span>, $<span class="nu0">20</span>,<br />
&nbsp;$<span class="nu0">22</span>, $<span class="nu0">20</span>, $3A, $<span class="nu0">20</span>, $AF, $DB, $<span class="nu0">20</span>, $A0, $<span class="nu0">20</span>,<br />
&nbsp;$A2, $A3, $A4, $<span class="nu0">20</span>, $A6, $A7, $D8, $A9, $<span class="nu0">56</span>,<br />
&nbsp;$AB, $AC, $AD, $AE, $C6, $B0, $B1, $B2, $B3,<br />
&nbsp;$B4, $B5, $B6, $B7, $F8, $B9, $<span class="nu0">57</span>, $BB, $BC,<br />
&nbsp;$BD, $BE, $E6, $<span class="nu0">04</span>, $2E, $<span class="nu0">00</span>, $<span class="nu0">06</span>, $C4, $C5,<br />
&nbsp;$<span class="nu0">18</span>, $<span class="nu0">12</span>, $0C, $C9, $<span class="nu0">79</span>, $<span class="nu0">16</span>, $<span class="nu0">22</span>, $<span class="nu0">36</span>, $2A,<br />
&nbsp;$3B, $<span class="nu0">60</span>, $<span class="nu0">43</span>, $<span class="nu0">45</span>, $D3, $4C, $D5, $D6, $D7,<br />
&nbsp;$<span class="nu0">72</span>, $<span class="nu0">41</span>, $5A, $6A, $DC, $7B, $7D, $DF, $<span class="nu0">05</span>,<br />
&nbsp;$2F, $<span class="nu0">01</span>, $<span class="nu0">07</span>, $E4, $E5, $<span class="nu0">19</span>, $<span class="nu0">13</span>, $0D, $E9,<br />
&nbsp;$7A, $<span class="nu0">17</span>, $<span class="nu0">23</span>, $<span class="nu0">37</span>, $2B, $3C, $<span class="nu0">61</span>, $<span class="nu0">44</span>, $<span class="nu0">46</span>,<br />
&nbsp;$F3, $4D, $F5, $F6, $F7, $<span class="nu0">73</span>, $<span class="nu0">42</span>, $5B, $6B,<br />
&nbsp;$FC, $7C, $7E, $D9<br />
<span class="br0">&#41;</span>;</p>
<p><span class="coMULTI">{ IBM CP to Unicode Windows-1257 characters table Second byte }</span><br />
<span class="kw4">const</span> unicodeArraySb: <span class="kw4">array</span><span class="br0">&#91;</span><span class="nu0">0</span>..<span class="nu0">255</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">byte</span> =<br />
<span class="br0">&#40;</span><br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>,<br />
&nbsp;$<span class="nu0">20</span>, $<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">02</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">20</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">21</span>, $<span class="nu0">00</span>, $<span class="nu0">20</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">02</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>,<br />
&nbsp;$<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>,<br />
&nbsp;$<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>,<br />
&nbsp;$<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>,<br />
&nbsp;$<span class="nu0">00</span>, $<span class="nu0">01</span>, $<span class="nu0">01</span>, $<span class="nu0">02</span><br />
&nbsp;<span class="br0">&#41;</span>;</p>
<p><span class="kw1">var</span> InFile, outFile: <span class="kw4">File</span> <span class="kw1">of</span> <span class="kw4">byte</span>;<br />
&nbsp; &nbsp; inFileExists, outFileExists: <span class="kw4">boolean</span>;<br />
&nbsp; &nbsp; inFileName, outFileName, Path: <span class="kw4">String</span>;<br />
&nbsp; &nbsp; Ch,Cho: <span class="kw4">Byte</span>;<br />
<span class="kw1">begin</span><br />
&nbsp; <span class="coMULTI">{ Just clear screen }</span><br />
&nbsp; clrscr;<br />
&nbsp; <span class="kw3">writeln</span><span class="br0">&#40;</span><span class="st0">&#8216;Converter windows-1257 to unicode&#8230;&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw3">writeln</span><span class="br0">&#40;</span><span class="st0">&#8216;By Vaidotas Gaidelis, 2006&#8242;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; <span class="coMULTI">{ Ugly routine to get path to application}</span><br />
&nbsp; GetDir<span class="br0">&#40;</span><span class="nu0">0</span>, Path<span class="br0">&#41;</span>;<br />
&nbsp; <span class="coMULTI">{ Assign filenames from command line parameters }</span><br />
&nbsp; inFileName := path+<span class="st0">&#8216;<span class="es0">\&#8217;</span>+ParamStr(1);<br />
&nbsp; outFileName := path+&#8217;</span>\<span class="st0">&#8216;+ParamStr(2);<br />
&nbsp; writeln(inFileName+ &#8216;</span> -&gt; <span class="st0">&#8216;+outFileName);<br />
&nbsp; {$I-}<br />
&nbsp; Assign(inFile, inFileName);<br />
&nbsp; Reset(inFile);<br />
&nbsp; Close(inFile);</p>
<p>&nbsp; Assign(outFile, outFileName);<br />
&nbsp; Rewrite(outFile);<br />
&nbsp; Close(outFile);<br />
&nbsp; {$I+}<br />
&nbsp; inFileExists := (IOResult = 0) And (inFileName &lt;&gt; &#8216;</span><span class="st0">&#8216;);<br />
&nbsp; If inFileExists then<br />
&nbsp; Begin<br />
&nbsp; &nbsp;ReWrite(outFile);<br />
&nbsp; &nbsp;Reset(inFile);<br />
&nbsp; &nbsp;{ First two bytes shows, that file is unicode}<br />
&nbsp; &nbsp;Cho := $FF;<br />
&nbsp; &nbsp;Write(outFile, Cho);<br />
&nbsp; &nbsp;Cho := $FE;<br />
&nbsp; &nbsp;Write(outFile, Cho);<br />
&nbsp; &nbsp;While Not EOF(inFile) Do<br />
&nbsp; &nbsp;Begin<br />
&nbsp; &nbsp; &nbsp;{ Get symbol&#8217;</span>s number <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw3">Read</span><span class="br0">&#40;</span>inFile, Ch<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="coMULTI">{ Write two unicode bytes from array }</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw3">Write</span><span class="br0">&#40;</span>outFile, unicodeArrayFb<span class="br0">&#91;</span>Ch<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="kw3">Write</span><span class="br0">&#40;</span>outFile, unicodeArraySb<span class="br0">&#91;</span>Ch<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="kw1">End</span>;<br />
&nbsp; &nbsp;Close<span class="br0">&#40;</span>inFile<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;Close<span class="br0">&#40;</span>outFile<span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">End</span> <span class="kw1">Else</span><br />
&nbsp; <span class="kw1">Begin</span><br />
&nbsp; &nbsp;<span class="coMULTI">{ whoops, something went wrong. Try again ;) }</span><br />
&nbsp; &nbsp;<span class="kw3">Writeln</span><span class="br0">&#40;</span><span class="st0">&#8216;File not found!&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="kw3">Writeln</span><span class="br0">&#40;</span><span class="st0">&#8216;Usage: cp2uni.exe [inFile] [outFile]&#8216;</span><span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">End</span>;<br />
<span class="kw1">end</span>.</div>
<p>I&#8217;ve chosen Turbo pascal, just because I needed to write converter for DOS and It was pleasure to remember school times :) But If youre programmer, you&#8217;ll rewrite this app in whatever you want or need programming language ;)</p>
<p>Also you can download compiled version <a href="http://experience.masalas.org/wp-content/uploads/CP2UNI.exe">cp2uni (~7Kb)</a></p>
<p>Note: This app converts from cp1257 (or windows-1257) to unicode. No checking if encoding is right, just blind conversion. Windows-1257 is lithuanian symbols. If you need to write converter from other encodings, reffer to http://www.orwell.ru and change unicode arrays to your desired table.</p>
<p>If you use this app, code or piece of code, be nice and mention that in comments. Also I will appreciate some ideas or improvements for this converter. This converter is open source and freeware. USE IT ON YOUR OWN RISK.</p>
]]></content:encoded>
			<wfw:commentRss>http://experience.masalas.org/programming/cp-to-unicode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
