<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Structs within structs, and how to assign them?</title>
		<link>http://www.allegro.cc/forums/view/618294</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 11 Dec 2020 22:39:15 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello. I have a structure:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><span class="k1">typedef</span> <span class="k1">struct</span> ColorRing <span class="k2">{</span>
<span class="number"> 2</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">;</span>
<span class="number"> 3</span>    <span class="k1">struct</span> ColorRing<span class="k3">*</span> next<span class="k2">;</span>
<span class="number"> 4</span><span class="k2">}</span> ColorRing<span class="k2">;</span>
</div></div><p>

And a function to initialize that structure:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>ColorRing<span class="k3">*</span> create_color_ring_blue<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">int</span> scale       <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  3</span>    ColorRing<span class="k3">*</span> root <span class="k3">=</span> <span class="k2">(</span>ColorRing<span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ColorRing<span class="k2">)</span> <span class="k3">*</span> scale<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> scale<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>        root-&gt;color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">128</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>        <span class="c">// This always prints 0. Why?</span>
<span class="number">  9</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Color: %i\n"</span>, root-&gt;color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>        <span class="k1">if</span><span class="k2">(</span>i <span class="k3">+</span> <span class="n">1</span> <span class="k3">&lt;</span> scale<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>            root-&gt;next <span class="k3">=</span> root <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 13</span>            root<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 14</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 15</span>            root-&gt;next <span class="k3">=</span> root <span class="k3">-</span> <span class="k2">(</span>scale <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k2">}</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>    <span class="k1">return</span> root <span class="k3">-</span> <span class="k2">(</span>scale <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>

This is what I don&#39;t understand:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><span class="c">// This always prints 0. Why?</span>
<span class="number"> 2</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Color: %i\n"</span>, root-&gt;color<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

<b>How do I assign the output of al_map_rgb to that structure&#39;s member?</b></p><p>-- Edit</p><p>Seems al_map_rgb always returns 0 via printf.</p><p>In any event, the desired usage of the color is here:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span>ColorRing<span class="k3">*</span> cr <span class="k3">=</span> create_color_ring_blue<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2</span><a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>..., cr-&gt;color<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

This only ever produces black.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thatrabbit)</author>
		<pubDate>Thu, 03 Dec 2020 05:21:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try using al_unmap_rgb() (<a href="https://www.allegro.cc/manual/5/al_unmap_rgb">https://www.allegro.cc/manual/5/al_unmap_rgb</a>).  It does the reverse of al_map_rgb() and retrieves the three colours (RGB) for you.</p><p>Any function that takes an ALLEGRO_COLOR value you can use your color value directly.  But if you want to retrieve the stored RGB values, you will need to call al_unmap_rgb() to retrieve them.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Thu, 03 Dec 2020 05:55:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618294/1048244#target">NiteHackr</a> said:</div><div class="quote"><p> But if you want to retrieve the stored RGB values, you will need to call al_unmap_rgb() to retrieve them.</p></div></div><p>Nay, sorry, that&#39;s not my goal. I edited my post to make my intended-usage more clear.</p><p>Thank you for your reply.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thatrabbit)</author>
		<pubDate>Thu, 03 Dec 2020 06:10:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah, okay, than with your desired usage, it will work just fine as that takes an ALLEGRO_COLOR.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Thu, 03 Dec 2020 07:35:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You must not call <b>most</b> allegro functions (like al_map_rgb) before al_init.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 03 Dec 2020 08:30:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618294/1048252#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> You must not call most allegro functions (like al_map_rgb) before al_init.</p></div></div><p>*sigh* Okay. That works. You&#39;ve obviously seen this before?</p><p>I feel mildly similar to when I first wrote this:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><span class="c">// Call this BEFORE we call any bitmap-related functions.</span>
<span class="number"> 2</span><span class="c">// Otherwise, we get shitty performance. Like really shitty.</span>
<span class="number"> 3</span><span class="c">//</span>
<span class="number"> 4</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">192</span>, <span class="n">192</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Thank you, Edgar.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thatrabbit)</author>
		<pubDate>Thu, 03 Dec 2020 10:05:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Meh, just consider it an initiation rite. Everyone always misses stuff like that. You wouldn&#39;t think al_map_rgb would matter, but they cache values, so it does.</p><p>Welcome to the club. May I suggest you join our little <a>-TINS- KrampusHack this year</a>?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 03 Dec 2020 10:11:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/618294/1048242#target">thatrabbit</a> said:</div><div class="quote"><p>
Hello. I have a structure:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>ColorRing<span class="k3">*</span> create_color_ring_blue<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">int</span> scale       <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  3</span>    ColorRing<span class="k3">*</span> root <span class="k3">=</span> <span class="k2">(</span>ColorRing<span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ColorRing<span class="k2">)</span> <span class="k3">*</span> scale<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> scale<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>        root-&gt;color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">128</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>        <span class="c">// This always prints 0. Why?</span>
<span class="number">  9</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Color: %i\n"</span>, root-&gt;color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>        <span class="k1">if</span><span class="k2">(</span>i <span class="k3">+</span> <span class="n">1</span> <span class="k3">&lt;</span> scale<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>            root-&gt;next <span class="k3">=</span> root <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 13</span>            root<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 14</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 15</span>            root-&gt;next <span class="k3">=</span> root <span class="k3">-</span> <span class="k2">(</span>scale <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k2">}</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>    <span class="k1">return</span> root <span class="k3">-</span> <span class="k2">(</span>scale <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>
</p></div></div><p>

Just to nitpick, this would be easier to understand if you left <span class="source-code">root</span> pointing to the first element, and used a new variable <span class="source-code">it</span> or <span class="source-code">iterator</span> (or whatever) to move through the array. It&#39;s also easier to split the special last case out of the loop.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>ColorRing <span class="k3">*</span> create_color_ring_blue<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">const</span> <span class="k1">int</span> scale <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  3</span>    ColorRing <span class="k3">*</span> root <span class="k3">=</span> <span class="k2">(</span>ColorRing <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ColorRing<span class="k2">)</span> <span class="k3">*</span> scale<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    <span class="k1">if</span> <span class="k2">(</span>root <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> blue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">128</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>    <span class="k1">char</span> r, g, b<span class="k2">;</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/al_unmap_rgb"><span class="a">al_unmap_rgb</span></a><span class="k2">(</span>blue, <span class="k3">&amp;</span>r, <span class="k3">&amp;</span>g, <span class="k3">&amp;</span>b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Color: %d %d %d\n"</span>, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>r, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>g, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    ColorRing <span class="k3">*</span> last <span class="k3">=</span> <span class="k3">&amp;</span>root<span class="k2">[</span>scale <span class="k3">-</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <span class="k1">for</span><span class="k2">(</span>ColorRing <span class="k3">*</span> it <span class="k3">=</span> root<span class="k2">;</span> it <span class="k3">&lt;</span> last<span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>        it-&gt;color <span class="k3">=</span> blue<span class="k2">;</span>
<span class="number"> 17</span>        it-&gt;next <span class="k3">=</span> it <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 18</span>    <span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    last-&gt;color <span class="k3">=</span> blue<span class="k2">;</span>
<span class="number"> 21</span>    last-&gt;next <span class="k3">=</span> root<span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    <span class="k1">return</span> root<span class="k2">;</span>
<span class="number"> 24</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 03 Dec 2020 21:48:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618294/1048256#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> Everyone always misses stuff like that.  </p></div></div><p>I&#39;ve been messing with DOS stuff again, and was fiddling with a little program to show the colors in CGA video mode 4.  I couldn&#39;t get it to work right for 6 HOURS (although in my defense I couldn&#39;t seem to catch it in GDB and none of the windowed debuggers I have will work for more than 2 minutes)  </p><p>It was supposed to show the top 25% as one color (black), then each additional quarter of the screen showed the other 3 colors, but this showed the top 50% as black. </p><p>Can you spot the problem?</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;string.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;time.h&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;dos.h&gt;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">unsigned</span> <span class="k1">char</span> prop<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> ch<span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>  <span class="k1">return</span> ch <span class="k3">+</span> <span class="k2">(</span>ch<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">2</span><span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>ch <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">4</span><span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>ch <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">6</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="c">//char far *p  = 0xB8000000;  //For the 16 bit Watcom compiler, but</span>
<span class="number"> 16</span>  <span class="c">//char far *p2 = 0xBA000000;  //it doesn't work right no matter which compiler</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="k1">char</span> <span class="k3">*</span>p  <span class="k3">=</span> <span class="n">0xB8000</span><span class="k2">;</span>  <span class="c">//CGA graphics are "interleaved" so odd numbered</span>
<span class="number"> 19</span>  <span class="k1">char</span> <span class="k3">*</span>p2 <span class="k3">=</span> <span class="n">0xBA000</span><span class="k2">;</span>  <span class="c">//scanlines are 8K higher in memory</span>
<span class="number"> 20</span>
<span class="number"> 21</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 22</span>  <span class="k1">unsigned</span> <span class="k1">char</span> c<span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>
<span class="number"> 25</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%X\n"</span>,c<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%X\n"</span>,c<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%X\n"</span>,c<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%X\n"</span>,c<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_383.html" target="_blank">getch</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>  _asm pusha
<span class="number"> 37</span>  _asm mov ax,<span class="n">4</span><span class="k2">;</span>
<span class="number"> 38</span>  _asm <span class="k1">int</span> <span class="n">10</span>h<span class="k2">;</span>
<span class="number"> 39</span>  _asm popa
<span class="number"> 40</span>
<span class="number"> 41</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>  <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">2000</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 43</span>  <span class="k2">{</span>
<span class="number"> 44</span>    p<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 45</span>    p2<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 46</span>  <span class="k2">}</span>
<span class="number"> 47</span>
<span class="number"> 48</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>  <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">4000</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>  <span class="k2">{</span>
<span class="number"> 51</span>    p<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 52</span>    p2<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 53</span>  <span class="k2">}</span>
<span class="number"> 54</span>
<span class="number"> 55</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>  <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">6000</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 57</span>  <span class="k2">{</span>
<span class="number"> 58</span>    p<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 59</span>    p2<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 60</span>  <span class="k2">}</span>
<span class="number"> 61</span>
<span class="number"> 62</span>  c <span class="k3">=</span> prop<span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span>  <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">8000</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 64</span>  <span class="k2">{</span>
<span class="number"> 65</span>    p<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 66</span>    p2<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 67</span>  <span class="k2">}</span>
<span class="number"> 68</span>
<span class="number"> 69</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_383.html" target="_blank">getch</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>
<span class="number"> 71</span>  _asm pusha
<span class="number"> 72</span>  _asm mov ax,<span class="n">3</span><span class="k2">;</span>
<span class="number"> 73</span>  _asm <span class="k1">int</span> <span class="n">10</span>h<span class="k2">;</span>
<span class="number"> 74</span>  _asm popa
<span class="number"> 75</span>
<span class="number"> 76</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 77</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Thu, 03 Dec 2020 22:59:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618294/1048263#target">Arthur Kalliokoski</a> said:</div><div class="quote"><p>Can you spot the problem?</p></div></div><p>

Hmmm... never worked with CGA mode before, only VGA.  The only thing I can think of is your character pointers rather than unsigned character pointers?</p><p>You make me want to mess with DOS again.  I miss that.  What are you using to compile this with?  I used to use DJGPP to compile with when I first learned C under DOS.  I still have ALL my old source code as I&#39;m a packrat and keep even the stupid little things, including many code examples I got from Allegro people back in the &#39;90s! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 04 Dec 2020 11:07:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618294/1048276#target">NiteHackr</a> said:</div><div class="quote"><p> never worked with CGA mode before, only VGA  </p></div></div><p>Broad hint: The problem has nothing to do with hardware or CGA, just a coding error. I went so far as to trying it in system memory on Linux and examined the memory with a debugger, which still had the problem.</p><p>Or if you wanna cheat...
</p><div class="spoiler"><p>My treacherous little fingers muscle memory went and snuck in the semicolon at the end of that for(;;) loop on line 49 so the body of the loop doesn&#39;t get executed</p></div><p>

As to the other questions, I was tired of OpenGL inconsistencies etc. so I decided to just blit a memory buffer to a window with graphic primitives similar to Allegro 4, and one day thought &quot;I wonder how slow it would be in DOS&quot; although CGA resolution is too small for just about any sort of interface beyond a pixel-y game. I&#39;m using Watcom and nasm in case I feel like giving something to the freedos crowd as those are their preferences.</p><p>I&#39;ve hijacked this thread far enough.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sat, 05 Dec 2020 04:03:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you want to visualize something use %x
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (RmBeer2)</author>
		<pubDate>Sun, 06 Dec 2020 04:46:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah!!!  I don&#39;t know how I didn&#39;t spot that, but I have made the same mistake.  In fact, it is probably my most common mistake to make!  I had to read your spoiler to see it, but now it seems so obvious. Such a simple mistake, but a nasty one and difficult to find. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>I can see how a debugger wouldn&#39;t catch that as it is still valid code... though I would think that a decent IDE would warn you of it given the code following it.  Is there a flag to warn of such things?  I know I would turn it on if there was.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 07 Dec 2020 09:44:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Apple&#39;s compiler gives this (even with no &#39;warning&#39; flags applied)
</p><div class="source-code snippet"><div class="inner"><pre>$ gcc ak.c

ak.c:49:19: warning: <span class="k1">for</span> loop has empty body <span class="k2">[</span><span class="k3">-</span>Wempty-body<span class="k2">]</span>
  <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">4000</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

(though obviously none of the rest of it compiles anyway)</p><p>So it&#39;s definitely possible for the compiler to detect this - maybe you just need a newer version?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Mon, 07 Dec 2020 12:28:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618294/1048323#target">Peter Hull</a> said:</div><div class="quote"><p> Apple&#39;s compiler gives this (even with no &#39;warning&#39; flags applied) </p></div></div><p>I don&#39;t have the original anymore (just a one-off test) but
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="p">#define LIMIT 1000</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">unsigned</span> <span class="k1">int</span> array<span class="k2">[</span>LIMIT<span class="k2">]</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">10</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>    array<span class="k2">[</span>LIMIT<span class="k2">]</span> <span class="k3">=</span> i<span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="c">//just to make sure the whole thing doesn't get optimized away</span>
<span class="number"> 15</span>  <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span>LIMIT<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 16</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d\n"</span>,array<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>
run through Slackware current gcc version 5.5.0 gave an error as<br />&quot;warning: array subscript is above array bounds [-Warray-bounds]&quot; <br />with -O2 -Wall options. Changing line 12 to read<br /><span class="source-code">array<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> i<span class="k2">;</span></span><br />got it to compile with no warnings or errors</p><p>The latest DJGPP has gcc version 9.3.0 (!) which gave these warnings
</p><pre>
t.c: In function &#39;main&#39;:
t.c:12:2: warning: this &#39;for&#39; clause does not guard... [-Wmisleading-indentation]
   12 |  for(i=0;i&lt;10;i++);
      |  ^~~
t.c:13:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the &#39;for&#39;
   13 |   array[LIMIT] = i;
      |   ^~~~~
t.c:13:8: warning: array subscript 1000 is above array bounds of &#39;unsigned int[1000]&#39; [-Warray-bounds]
   13 |   array[LIMIT] = i;
      |   ~~~~~^~~~~~~
t.c:6:14: note: while referencing &#39;array&#39;
    6 | unsigned int array[LIMIT];
      |              ^~~~~
</pre><p>

OTOH, I seem to remember an old ALLEGRO.TXT as saying something about such a loop being used for a delay <br />&quot;If the compiler complains, try changing it to<br /><span class="source-code"><span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">1000</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span><span class="k2">;</span></span><br />to beat the compiler into submission.&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 08 Dec 2020 02:55:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">array<span class="k2">[</span>LIMIT<span class="k2">]</span></span> is definitely out of bounds if you set the LIMIT to 1000, then use this, the maximum is only 999, so this should be array[LIMIT-1]. </p><p>But anyhow, yeah, for loops were common for delays, which is why I originally seen it as valid (even if poor) code.  I would expect a warning when it is followed with braces and/or indented code though.</p><p>Nice to see DJGPP is still going.</p><p>You&#39;re making me want to fire up some old DOS projects again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 11 Dec 2020 09:05:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Also, did you notice the semicolon on line 11?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 11 Dec 2020 22:39:15 +0000</pubDate>
	</item>
</rss>
