<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>problems with unicode routines</title>
		<link>http://www.allegro.cc/forums/view/591361</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 12 May 2007 23:23:53 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey, I&#39;ve encountered a problem regarding transference of char data from one string to another.</p><p>Consider the code:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> ParseCodeChunk<span class="k2">(</span> <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>pCode, <span class="k1">int</span> size <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>  <span class="k1">char</span> Stream<span class="k2">[</span><span class="n">10000</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">char</span> Line<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <span class="k1">struct</span> CodeData SomeCode<span class="k2">[</span><span class="n">50</span><span class="k2">]</span><span class="k2">;</span> <span class="c">// holds compiled code</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>  <span class="c">// copy the pCode to Stream</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  <span class="k1">while</span><span class="k2">(</span> we are <span class="k1">not</span> at the end of the script <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>    <span class="c">/* get a segment of data from Stream and put it in line based</span></td></tr><tr><td class="number">12</td><td><span class="c">       on delimiters (eg. spaces, (, ), {, }, etc) */</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>    <a href="http://www.allegro.cc/manual/ustrcpy" target="_blank"><span class="a">ustrcpy</span></a><span class="k2">(</span> SomeCode<span class="k2">[</span> currentline <span class="k2">]</span>.SomeData, Line <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>    <span class="c">// do something to SomeData depending on code contents</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>    <span class="c">// clear the line buffer</span></td></tr><tr><td class="number">19</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span> Line, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/ustrlen" target="_blank"><span class="a">ustrlen</span></a><span class="k2">(</span>Line<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    currentline<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td>  <span class="k1">return</span> OK<span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

When I run this function (which is a bit more complex than above) it separates the code into Line based on the delimiters fine enough. I&#39;m using MSVC .NET so I can stop it at a break point and check the values of the strings so I know that the values are being copied from Stream to Line properly. What I find irritating is that in the second iteration of the while loop, the code</p><div class="source-code snippet"><div class="inner"><pre>  <a href="http://www.allegro.cc/manual/ustrcpy" target="_blank"><span class="a">ustrcpy</span></a><span class="k2">(</span> SomeCode<span class="k2">[</span> currentline <span class="k2">]</span>.SomeData, Line <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

does absolutely nothing. Not only that, but if, as an experiment I said:</p><div class="source-code snippet"><div class="inner"><pre>  SomeCode<span class="k2">[</span> currentline <span class="k2">]</span>.SomeData<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> Line<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>

The second iteration (and all others afterwards) won&#39;t copy any data from Line to SomeData. I would like to know why that is, because it all works perfectly normal for the first iteration.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Master)</author>
		<pubDate>Sat, 12 May 2007 15:59:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should post the entire code just in case the following doesn&#39;t help:</p><p>1. ustrlen() returns the length of the string, <i>not the amount of memory it uses!</i> The size value for memset() should be sizeof(Line).</p><p>2. Remember that one unicode character actually takes up two regular characters, so an array of 256 used for unicode can only fit 128 characters. (Including the NULL terminating character.)</p><p>3. Use <a href="http://www.allegro.cc/manual/api/unicode-routines/ustrzcpy">ustrzcpy()</a> instead. It&#39;s safer.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sat, 12 May 2007 23:23:53 +0000</pubDate>
	</item>
</rss>
