<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>I did something Noobish... Again...</title>
		<link>http://www.allegro.cc/forums/view/590148</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 20 Feb 2007 00:55:13 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you don&#39;t want to be exposed to sloppy code stop reading...<br />Ok, this is the problem: I validate the set_gfx_mode and it returns a proper 0.<br />But there is a problem.<br />If it wasn&#39;t for a hilarious typing mistake I wouldn&#39;t have noticed it.<br />(The program doesn&#39;t work properly if I remove it either, that&#39;s why I started checking all the values and there seems to be no error after that.)<br />If I compile with mingw I don&#39;t get any error message, just a blank-out like nothing happened.</p><p>But if I compile with DJGPP it says (or something):<br />   Error in line: 220<br />   Not a Mode-X colordepth </p><p>This shouldn&#39;t happen. I&#39;ve compiled dozens of times with DJGPP on that computer and never had that problem. It shouldn&#39;t be reverting to mode-x.(I run it under windows 95). Also the line where I check SET_GFX_MODE never returns a non-zero.<br />It doesn&#39;t seem to load my image either, but that&#39;s no surprise.</p><p>Here&#39;s the startup:
</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">void</span> my_error<span class="k2">(</span><span class="k1">int</span><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">int</span> main<span class="k2">(</span><span class="k1">int</span> argv, <span class="k1">char</span><span class="k3">*</span> argc<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>        <span class="k1">char</span> ted<span class="k2">[</span><span class="n">24</span><span class="k2">]</span><span class="k2">;</span>                   <span class="c">//I'll get rid of these</span></td></tr><tr><td class="number">6</td><td>        <span class="k1">int</span> reeks<span class="k2">[</span><span class="n">6</span><span class="k2">]</span> <span class="k3">=</span><span class="k2">{</span><span class="n">0</span>,<span class="n">2</span>,<span class="n">6</span>,<span class="n">8</span>,<span class="n">9</span>,<span class="n">10</span><span class="k2">}</span><span class="k2">;</span>   <span class="c">//      soon enough...</span></td></tr><tr><td class="number">7</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>        <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span><span class="c">//?set_keyboard_rate(1000,0);key_led_flags = 0;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>        <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT,<span class="n">640</span>,<span class="n">480</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span> my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</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/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span> my_buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">//Falsch</span></td></tr><tr><td class="number">15</td><td>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>my_buffer<span class="k2">)</span> my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>                                 </td></tr><tr><td class="number">16</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span> main_field <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_sub_bitmap" target="_blank"><span class="a">create_sub_bitmap</span></a><span class="k2">(</span>my_buffer,<span class="n">0</span>,<span class="n">80</span>,<span class="n">640</span>,<span class="n">400</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">//Falsch</span></td></tr><tr><td class="number">17</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span> status_field <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_sub_bitmap" target="_blank"><span class="a">create_sub_bitmap</span></a><span class="k2">(</span>my_buffer,<span class="n">0</span>,<span class="n">0</span>,<span class="n">640</span>,<span class="n">80</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">//Falsch</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">if</span><span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k3">|</span><span class="k3">|</span> status_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span> <span class="c">// :-[ ::) this is line 220</span></td></tr><tr><td class="number">19</td><td>  sam::character pokiponman<span class="k2">(</span><a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"BB.BMP"</span>,NULL<span class="k2">)</span>,reeks,<span class="n">32</span>,<span class="n">59</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

And if I make everything so it does work in mode-x I get a traceback of 1 line(!)<br />which says something about a DJGPP wrapper (or something).<br />And as it doesn&#39;t work with mingw either, I probably made some obvious noobish misstake...<br />Noobish source attached.<br />(I use allegro 4.2.1 with DJGPP and 4.2.0 with mingw)<br />I&#39;ll be very grateful to any non-noob willing to waste his (or less likely her) time on this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Mon, 19 Feb 2007 16:48:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmmm... quick thought:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>status_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
I&#39;m not very good with operator precedence, but your original statement may or may not evaluate to:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> <span class="k2">(</span><span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> status_field<span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
which is equivalent to
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> status_field<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
which in turn can be boiled down to
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> status_field<span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
...which is very likely to be true.</p><p>Not sure though, I might have operator precedence wrong.<br />The safest check would be:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>main_field <span class="k3">|</span><span class="k3">|</span> status_field<span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
...but even this doesn&#39;t make too much sense; it means that if the creation of any of the 2 sub-bitmaps was successful, you throw an error. I think you mean the opposite:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>main_field <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>status_field<span class="k2">)</span>my_error<span class="k2">(</span>__LINE__<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Try this and see if it fixes the error.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Mon, 19 Feb 2007 16:59:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That was the hilarious typing misstake I was talking about...<br />As for all the other consequenses, read my first post. Besides, there shouldn&#39;t be an allegro_error at this point if everything worked properly.<br />[MAGIC EDIT looking into future]<br />Allegro_error is initialized at this point otherwise the output would have been different (i.e. just &quot;error in line 220&quot;). And it is a relevant message, because Mode-x only supports 8bpp and I (only) tried 16. Please read my post more carefully.<br />Oh, there&#39;s one thing I forgot to mention: in one version I just changed set_color_depth(8). Which results in another error namely: Not a proper mode-X resolution. And it still it only catches this in line 220... Bizarre!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Mon, 19 Feb 2007 17:02:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If there has been no error, then allegro_error is undefined (i.e. cannot be trusted to tell you anything meaningful). Inspecting allegro_error makes sense only if an allegro function call has failed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Mon, 19 Feb 2007 17:07:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not related to the error, but...
</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>status_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="c">// Equivalent</span>
main_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> status_field <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span>

<span class="c">// Furthermore</span>
<span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> <span class="k2">(</span><span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> status_field<span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span>
<span class="c">// NOT Equivalent</span>
<span class="k2">(</span>main_field <span class="k3">!</span><span class="k3">=</span> status_field<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span>

<span class="c">// Correct reduction</span>
main_field <span class="k3">!</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span> status_field
</pre></div></div><p>

weapon_S: Just print out the value of your driver name:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">2</span>, <span class="n">2</span>, <span class="k3">-</span><span class="n">1</span>, <span class="n">0</span>, <span class="s">"I am using graphics driver %s"</span>, gfx_driver-&gt;name<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Mon, 19 Feb 2007 19:58:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thought I might be wrong...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Mon, 19 Feb 2007 21:00:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I fixed it (I think).<br />I had a function definition at the end of main. I think it confused END_OF_MAIN.<br />Whatever it was it&#39;s working (kind of) properly now.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
main_field != (bool) status_field
</p></div></div><p>
As with many mathematic deductions it&#39;s not the same, because if they&#39;re both true I get true. Which isn&#39;t the case with the original expression,... I think.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Mon, 19 Feb 2007 23:44:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I had a function definition at the end of main. I think it confused END_OF_MAIN.
</p></div></div><p>Just for your information, that wasn&#39;t the problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Tue, 20 Feb 2007 00:55:13 +0000</pubDate>
	</item>
</rss>
