<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>We must post bugs and squash them***</title>
		<link>http://www.allegro.cc/forums/view/618435</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 12 Jun 2021 22:52:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Bugz everywhere!!! I must squash them!</p><p>Spot the bug :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>list.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">;</span> i <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> <span class="k3">-</span><span class="k3">-</span>i<span class="k2">)</span> <span class="k2">{</span>
   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%u\n"</span> , i<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

<img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 10 Jun 2021 06:50:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If <span class="source-code">size<span class="k2">(</span><span class="k2">)</span></span> returns 0, then <span class="source-code">i</span> would be 4 billion (too lazy to look up the number), assuming the cast to unsigned treats negative numbers that way.</p><p>I feel like that&#39;s not the bug you&#39;re asking us to find though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Thu, 10 Jun 2021 07:16:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;SDL2/SDL.h&gt;</span>
<span class="p">#include &lt;SDL2/SDL_timer.h&gt;</span>
 
<span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
    SDL_Init<span class="k2">(</span>SDL_INIT_EVERYTHING<span class="k2">)</span><span class="k2">;</span>
    SDL_Window<span class="k3">*</span> win <span class="k3">=</span> SDL_CreateWindow<span class="k2">(</span><span class="s">"Welcome to SDL"</span>,
                                       SDL_WINDOWPOS_CENTERED,
                                       SDL_WINDOWPOS_CENTERED,
                                       <span class="n">1000</span>, <span class="n">1000</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    SDL_Delay<span class="k2">(</span><span class="n">2000</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 10 Jun 2021 10:10:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>When i reaches 0 and it substracts 1, it wraps around to the maximum value of unsigned int. Therefore, the loop never ends.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Darío B.)</author>
		<pubDate>Thu, 10 Jun 2021 14:39:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>GCC knows!
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> &lt;source&gt;:4:43: warning: comparison of unsigned expression in &#39;&gt;= 0&#39; is always true [-Wtype-limits]</p></div></div><p>(strangely, clang does too but it&#39;s not reported, even with -W -Wall)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Thu, 10 Jun 2021 20:12:42 +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/618435/1050231#target">SiegeLord</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>SDL_Init<span class="k2">(</span>SDL_INIT_EVERYTHING<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>

Ohhh, can we have al_init_everything()? Instead of:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_install_joystick"><span class="a">al_install_joystick</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Maybe with a bonus version that also creates a display and timer and event queue with everything attached, and a call to al_reserve_samples? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p><div class="source-code snippet"><div class="inner"><pre>queue <span class="k3">=</span> al_init_everything_ex<span class="k2">(</span><span class="n">1280</span>, <span class="n">720</span>, <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="c">// can get the created display with al_get_current_display()</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 10 Jun 2021 21:08:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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">#call-to-action button {</span>
<span class="number">  2</span>  border: none<span class="k2">;</span>
<span class="number">  3</span>  outline: none<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>  width: <span class="n">320</span>px<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>  font-family: inherit<span class="k2">;</span>
<span class="number">  8</span>  font-size: <span class="n">3</span>.<span class="n">5</span>rem<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  color: #eeeeee<span class="k2">;</span>
<span class="number"> 11</span>  text-shadow: <span class="n">1</span>px <span class="n">1</span>px #<span class="n">000000</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>  background: none<span class="k2">;</span>
<span class="number"> 14</span>  border-image: url<span class="k2">(</span><span class="s">'border3.png'</span><span class="k2">)</span> <span class="n">24</span> <span class="n">24</span> fill <span class="k3">/</span> <span class="n">24</span>px <span class="n">24</span>px repeat<span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="p">#call-to-action button::before {</span>
<span class="number"> 18</span>  visibility: hidden<span class="k2">;</span>
<span class="number"> 19</span>  position: absolute<span class="k2">;</span>
<span class="number"> 20</span>  content: url<span class="k2">(</span><span class="s">'border3.png'</span><span class="k2">)</span> url<span class="k2">(</span><span class="s">'border3-hover.png'</span><span class="k2">)</span> url<span class="k2">(</span><span class="s">'border3-active.png'</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="p">#call-to-action button:hover {</span>
<span class="number"> 24</span>  color: #ffffff<span class="k2">;</span>
<span class="number"> 25</span>  text-shadow: <span class="n">1</span>px <span class="n">1</span>px #<span class="n">000000</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>  border-image: url<span class="k2">(</span><span class="s">'border3-hover.png'</span><span class="k2">)</span> <span class="n">24</span> <span class="n">24</span> fill <span class="k3">/</span> <span class="n">24</span>px <span class="n">24</span>px repeat<span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
<span class="number"> 29</span>
<span class="number"> 30</span><span class="p">#call-to-action button:active {</span>
<span class="number"> 31</span>  color: #dddddd<span class="k2">;</span>
<span class="number"> 32</span>  border-image: url<span class="k2">(</span><span class="s">'border3-active.png'</span><span class="k2">)</span> <span class="n">24</span> <span class="n">24</span> fill <span class="k3">/</span> <span class="n">24</span>px <span class="n">24</span>px repeat<span class="k2">;</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>

That <span class="source-code"><span class="p">#call-to-action button::before</span></span> to prevent image loading when hover/clicked causing a very brief flicker... <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Thu, 10 Jun 2021 21:14:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can do what I did. I wrapped them up in a function and used flags.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//pseudo code</span>
<span class="k1">int</span> init<span class="k2">(</span><span class="k1">int</span> flags<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span>
    <span class="k1">if</span> <span class="k2">(</span>flag <span class="k3">&amp;</span> FLAG_IMAGE_ADDON<span class="k2">)</span> ...
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 11 Jun 2021 00:19:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The correct code would have been :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> list.size<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> i <span class="k3">&gt;</span> <span class="n">0</span> <span class="k2">;</span> <span class="k3">-</span><span class="k3">-</span>i<span class="k2">)</span> <span class="k2">{</span>
   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%i\n"</span> , <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>i <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
It&#39;s not often you see underflows, but they&#39;re there.</p><p><b>EDIT</b><br />Eagle init code (verbatim)
</p><div class="source-code snippet"><div class="inner"><pre>Allegro5System<span class="k3">*</span> a5sys <span class="k3">=</span> GetAllegro5System<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>EAGLE_FULL_SETUP <span class="k3">!</span><span class="k3">=</span> a5sys-&gt;Initialize<span class="k2">(</span>EAGLE_FULL_SETUP<span class="k2">)</span> <span class="k2">{</span>
   EagleWarn<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Not all modules initialized. Warning.\n"</span><span class="k2">;</span>
<span class="k2">}</span>
EagleGraphicsContext<span class="k3">*</span> win <span class="k3">=</span> a5sys-&gt;CreateGraphicsContext<span class="k2">(</span><span class="n">800</span>,<span class="n">600</span> , EAGLE_WINDOWED <span class="k3">|</span> EAGLE_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>win <span class="k3">&amp;</span><span class="k3">&amp;</span> win-&gt;Valid<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
   EagleCritical<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed to create window.\n"</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
3 line setup for a window. It serves me right. No more lame queue creation and registration every time you want a window with input. Multiple thread safe windows and more.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 11 Jun 2021 01:48:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />....Eagle anyone?....no? well ok then.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Fri, 11 Jun 2021 05:01:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That was not an example of a bug, just init code.</p><p>Post your bugs!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 11 Jun 2021 21:36:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="remote-thumbnail"><span class="json">{"name":"612991","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/8\/88c3874f8b5efb365312ba84dabe7fe5.png","w":462,"h":201,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/8\/88c3874f8b5efb365312ba84dabe7fe5"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/8/88c3874f8b5efb365312ba84dabe7fe5-240.jpg" alt="612991" width="240" height="104" /></span><br />From the init code of a microcontroller
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Fri, 11 Jun 2021 22:11:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sweet. Hope that microcontroller didn&#39;t do anything important. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 11 Jun 2021 22:15:26 +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/618435/1050235#target">Elias</a> said:</div><div class="quote"><p>Ohhh, can we have al_init_everything()</p></div></div><p>
Then I also want al_destroy_everything()<br /><img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Polybios)</author>
		<pubDate>Sat, 12 Jun 2021 02:38:56 +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/618435/1050249#target">Polybios</a> said:</div><div class="quote"><p> Then I also want al_destroy_everything()
</p></div></div><p>That exists but only people above our pay-grade are allowed to used it.</p><p>Here&#39;s a bit of a shocker that I did not know about until today, from <span class="source-code">man <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a></span></p><pre>
SYNOPSIS
     #include &lt;stdlib.h&gt;

     int
     abs(int i);

DESCRIPTION
     The abs() function computes the absolute value of the integer i.

RETURN VALUES
     The abs() function returns the absolute value.
</pre><p>
So far, so good, but then:
</p><pre>
BUGS
     The absolute value of the most negative integer remains negative.
</pre><p> <br /><img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 12 Jun 2021 14:04:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s because signed integers have an extra negative number compared to positive numbers, for example, for an 8 bit value, we have -128 to 127.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Sat, 12 Jun 2021 19:20:46 +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/618435/1050251#target">MiquelFire</a> said:</div><div class="quote"><p> That&#39;s because signed integers have an extra negative number compared to positive numbers, for example, for an 8 bit value, we have -128 to 127. 
</p></div></div><p>You know this and I know this. But I&#39;m sure I&#39;ve never written code to account for it
</p><div class="source-code snippet"><div class="inner"><pre>x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>x<span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
 something<span class="k2">(</span>x<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
 error<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
I don&#39;t think there&#39;s a better option either, returning zero or INT_MAX or anything else would also lead to silent errors. And C doesn&#39;t usually raise a signal for integer arithmetic (? does it?)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 12 Jun 2021 22:17:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to think if a way in which the negative number issue with abs would matter anyway. With signed 8-bit, if -128 is a possible value, what&#39;s stopping you from getting -150 before you call abs? I think the times you need to worry about the minimum number being passed to abs, you have to worry about the value being out of range for the integer type you are using anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Sat, 12 Jun 2021 22:52:41 +0000</pubDate>
	</item>
</rss>
