<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Need help with structs</title>
		<link>http://www.allegro.cc/forums/view/617861</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 19 Jun 2019 11:02:17 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am trying to make a change in the position of the scroller through this function but nothing is happening, I suspect that I&#39;m using structs wrongly.<br />I searched online but the issue couldn&#39;t be resolved.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> On_click_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span>scroll<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span>
        <span class="k1">if</span><span class="k2">(</span>event.mouse.x <span class="k3">&gt;</span> scroll-&gt;x1 <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.x <span class="k3">&lt;</span> scroll-&gt;x2 <span class="k3">&amp;</span><span class="k3">&amp;</span>
           event.mouse.y <span class="k3">&gt;</span> scroll-&gt;y1 <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&lt;</span> scroll-&gt;y2 <span class="k3">&amp;</span><span class="k3">&amp;</span> scroll-&gt;flag <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
           <span class="k2">{</span>
            scroll-&gt;flag <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
            scroll-&gt;from_y <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
           <span class="k2">}</span>

<span class="k2">}</span>
</pre></div></div><p>

What could be the problem?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 14 Jun 2019 19:17:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It doesn&#39;t look like the problem is in the code you are showing.</p><p>What happens to your scroller when you change the from_y and flag values? Are you redrawing your scroller?</p><p>However, the problem could be absolute coordinates vs relative coordinates. Shouldn&#39;t you be subtracting scroller-&gt;y1 from event.mouse.y?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 14 Jun 2019 19:37:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have divided it into three functions</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>SCROLLER scroller_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER scroll<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    On_click_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>    On_drag_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    On_release_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>    <span class="k1">return</span> scroll<span class="k2">;</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">void</span> On_click_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span>scroll<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span>
<span class="number"> 13</span>        <span class="k1">if</span><span class="k2">(</span>event.mouse.x <span class="k3">&gt;</span> scroll-&gt;x1 <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.x <span class="k3">&lt;</span> scroll-&gt;x2 <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 14</span>           event.mouse.y <span class="k3">&gt;</span> scroll-&gt;y1 <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&lt;</span> scroll-&gt;y2 <span class="k3">&amp;</span><span class="k3">&amp;</span> scroll-&gt;flag <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 15</span>           <span class="k2">{</span>
<span class="number"> 16</span>            scroll-&gt;flag <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 17</span>            scroll-&gt;from_y <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 18</span>           <span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k1">void</span> On_drag_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span>scroll<span class="k2">)</span>
<span class="number"> 23</span><span class="k2">{</span>
<span class="number"> 24</span>    <span class="k1">if</span><span class="k2">(</span>scroll-&gt;flag <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 25</span>        scroll-&gt;ordinate <span class="k3">=</span> event.mouse.y <span class="k3">-</span> scroll-&gt;from_y<span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="k1">void</span> On_release_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event,SCROLLER <span class="k3">*</span>scroll<span class="k2">)</span>
<span class="number"> 29</span><span class="k2">{</span>
<span class="number"> 30</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span>
<span class="number"> 31</span>    scroll-&gt;flag <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 32</span><span class="k2">}</span>
</div></div><p>

I have uploaded the source files in the attachments.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 14 Jun 2019 19:56:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This function is incorrect because it takes Scroller by value, and not by reference (C++) or pointer (C).</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617861/1042567#target">Doctor Cop</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>SCROLLER scroller_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER scroll<span class="k2">)</span> <span class="k2">{</span>
   On_click_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
   On_drag_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
   On_release_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">return</span> scroll<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div></div><p>
You&#39;re returning a copy of a copy. The SCROLLER returned by the function calls your three callback checks on a local copy of &#39;scroll&#39;. You need to use pointers.</p><p>The function could be changed to :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> scroller_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event , SCROLLER<span class="k3">*</span> pscroll<span class="k2">)</span> <span class="k2">{</span>
   On_click_scroller<span class="k2">(</span>event , pscroll<span class="k2">)</span><span class="k2">;</span>
   On_drag_scroller<span class="k2">(</span>event , pscroll<span class="k2">)</span><span class="k2">;</span>
   On_release_scroller<span class="k2">(</span>event , pscroll<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">return</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
And then it should work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 14 Jun 2019 20:02:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Changed the function but still no difference.</p><p>See the attachments.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 14 Jun 2019 20:33:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Have you tried setting breakpoints and using a debugger to see how far it gets? Where does it get stuck, what is the state of the stack where it gets stuck or does not enter.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 14 Jun 2019 20:40:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>well, I&#39;m not compiling on Code blocks and I don&#39;t know how to use command line GDB. I will have to learn it first to do that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 14 Jun 2019 20:49:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh yeah, using a debugger is an absolute must to be a programmer in 2019.</p><p>If you switch to visual studio as your IDE, debugging is a lot easier.</p><p>Is there a reason you&#39;re not using an IDE like VS or Code blocks?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 14 Jun 2019 21:21:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In job postings, I find that they require the command line compilers and Linux knowledge. It was explicitly said that I need to be able to work with Linux and GCC compiler.</p><p>I am making a project for students to learn C programming. They are the people who don&#39;t even know how to create header files and how to manage code. Some don&#39;t even have enough resources to download an IDE so I decided to go fully command line.</p><p>I will look for GDB tutorials shortly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Fri, 14 Jun 2019 22:56:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There are plenty of free IDEs for Linux that use GDB and GCC and let you set breakpoints using a gui interface.</p><p><a href="https://www.tecmint.com/best-linux-ide-editors-source-code-editors/">https://www.tecmint.com/best-linux-ide-editors-source-code-editors/</a></p><p>There is simply no reason for anyone who codes professionally not to use a debugger. Any company that doesn&#39;t, don&#39;t go work there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 14 Jun 2019 23:52:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>GDB primer :</p><pre>
gdb&gt;backtrace (bt)
gdb&gt;bt
Gives you the stack trace

gdb&gt;print x
prints the value of the expression x, including function calls

gdb&gt;break file.ext:###
Sets a breakpoint in file.ext on line ###

gdb&gt;run

gdb&gt;continue
Unpauses execution after hitting a breakpoint

gdb&gt;breakpoints
Tells you the currently selected breakpoints

gdb&gt;info threads
Gives you info on the threads currently executing (paused)

gdb&gt;thread apply all bt
Gives you a backtrace for every thread

gdb&gt;thread #
Switches to thread #

gdb&gt;frame #
Switches to frame #

gdb&gt;info locals
gdb&gt;info globals
Gives you information on local or global variables.

gdb&gt;info globals EXPR
Gives you info on global variables that match EXPR
</pre><p>

That pretty much covers the basics of using GDB. You can always type &#39;help&#39; or &#39;help TOPIC&#39; and get the runtime info on that command.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 14 Jun 2019 23:58:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Seems like you aren&#39;t calling that listener function anywhere inside the loop?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 15 Jun 2019 00:22:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar, that was really helpful.<br />Peter, The file is in the attachments.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 15 Jun 2019 01:06:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What you&#39;re failing to understand is the difference between pass by value and pass by reference. In your code you are still using copies of objects instead of pointers to objects. If you alter a copy, the original remains unchanged. Pass by pointer and then your changes will take effect.</p><p><a href="https://stackoverflow.com/questions/2229498/passing-by-reference-in-c">https://stackoverflow.com/questions/2229498/passing-by-reference-in-c</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 15 Jun 2019 01:29:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>At first, I was using pass by reference but when it didn&#39;t compile then I changed it to pass by value.</p><p>I have made these changes and I will be blunt to say that I have tried everything I could (even stack overflow) but couldn&#39;t find anything on how to resolve this problem and there doesn&#39;t seem to be any good tutorial on struct with pointers in function parameters (or I&#39;m just not good at searching).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 15 Jun 2019 09:59:55 +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/617861/1042579#target">Peter Hull</a> said:</div><div class="quote"><p> Seems like you aren&#39;t calling that listener function anywhere inside the loop?
</p></div></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 15 Jun 2019 11:31:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Peter, I&#39;m calling it inside bt_list_box_listner(); function.</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">#pragma once</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro5.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="c">// Structure for scroller (a subset of List Box)</span>
<span class="number">  8</span><span class="k1">typedef</span> <span class="k1">struct</span> SCROLLER
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>    <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> width, height<span class="k2">;</span>
<span class="number"> 12</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"> 13</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> tail_color<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <span class="c">// To be manipulated by the internal functions</span>
<span class="number"> 16</span>    <span class="k1">int</span> x1, y1, x2, y2<span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">char</span> flag<span class="k2">;</span>
<span class="number"> 18</span>    <span class="k1">long</span> from_y<span class="k2">;</span>
<span class="number"> 19</span>    <span class="k1">int</span> ordinate<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="k2">}</span> SCROLLER<span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">typedef</span> <span class="k1">struct</span> LIST_BOX
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>    <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number"> 26</span>    <span class="k1">int</span> width, height<span class="k2">;</span>
<span class="number"> 27</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> background<span class="k2">;</span>
<span class="number"> 28</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> seperator_line<span class="k2">;</span>
<span class="number"> 29</span>    SCROLLER scroller<span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span> LIST_BOX<span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>
<span class="number"> 33</span>
<span class="number"> 34</span><span class="c">///////////////////////////////////////////</span>
<span class="number"> 35</span><span class="c">//                                       //</span>
<span class="number"> 36</span><span class="c">//               LIST_BOX                //</span>
<span class="number"> 37</span><span class="c">//                                       //</span>
<span class="number"> 38</span><span class="c">///////////////////////////////////////////</span>
<span class="number"> 39</span>
<span class="number"> 40</span><span class="c">// The function to draw the whole List Box</span>
<span class="number"> 41</span><span class="k1">void</span> list_box<span class="k2">(</span><span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>
<span class="number"> 43</span><span class="c">// The function to Initialize LIST_BOX struct</span>
<span class="number"> 44</span>LIST_BOX bt_create_list_box<span class="k2">(</span><span class="k1">int</span> x,  <span class="k1">int</span> y, <span class="k1">int</span> width, <span class="k1">int</span> height, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> background, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> seperator_line
<span class="number"> 45</span>                            , <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> scroller_color, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> tail_color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span><span class="c">// The function to draw List Box in render mode</span>
<span class="number"> 48</span><span class="k1">void</span> bt_draw_list_box<span class="k2">(</span>LIST_BOX box<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>
<span class="number"> 50</span><span class="c">// Listen to the ALLEGRO_EVENT (for List Box)</span>
<span class="number"> 51</span>LIST_BOX bt_list_box_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, LIST_BOX box<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>
<span class="number"> 53</span><span class="c">////////////////////////////////////////////</span>
<span class="number"> 54</span>
<span class="number"> 55</span>
<span class="number"> 56</span>
<span class="number"> 57</span><span class="c">///////////////////////////////////////////</span>
<span class="number"> 58</span><span class="c">//                                       //</span>
<span class="number"> 59</span><span class="c">//               SCROLLER                //</span>
<span class="number"> 60</span><span class="c">//                                       //</span>
<span class="number"> 61</span><span class="c">///////////////////////////////////////////</span>
<span class="number"> 62</span>
<span class="number"> 63</span><span class="c">// The function to Initialize SCROLLER struct</span>
<span class="number"> 64</span>SCROLLER create_scroller<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> width, <span class="k1">int</span> height
<span class="number"> 65</span>                         , <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> tail_color, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>
<span class="number"> 67</span><span class="c">// The function to draw scroller in render mode</span>
<span class="number"> 68</span><span class="k1">void</span> draw_scroller<span class="k2">(</span>SCROLLER scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>
<span class="number"> 70</span><span class="c">// Listen to the ALLEGRO_EVENT (for scroller)</span>
<span class="number"> 71</span><span class="k1">void</span> scroller_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 72</span>
<span class="number"> 73</span><span class="k1">void</span> On_click_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span><span class="k3">*</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span>
<span class="number"> 75</span><span class="k1">void</span> On_drag_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span><span class="k3">*</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 76</span>
<span class="number"> 77</span><span class="k1">void</span> On_release_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span><span class="k3">*</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 78</span><span class="c">////////////////////////////////////////////</span>
<span class="number"> 79</span><span class="c">//</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 15 Jun 2019 11:33:57 +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/617861/1042591#target">Doctor Cop</a> said:</div><div class="quote"><p> Peter, I&#39;m calling it inside bt_list_box_listner(); function.
</p></div></div><p>Right and where are you calling that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 15 Jun 2019 12:25:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is Text_Box.c file</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 "Text_Box.h"</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="c">// To be replaced by properly designed functions</span>
<span class="number">   4</span><span class="k1">void</span> list_box<span class="k2">(</span><span class="k1">int</span> y<span class="k2">)</span>
<span class="number">   5</span><span class="k2">{</span>
<span class="number">   6</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><span class="n">75</span>, <span class="n">75</span>, <span class="n">775</span>, <span class="n">575</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">12</span>, <span class="n">83</span>, <span class="n">95</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">// rgb(51, 102, 153)</span>
<span class="number">   7</span>
<span class="number">   8</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> <span class="n">475</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">=</span><span class="n">25</span><span class="k2">)</span>
<span class="number">   9</span>    <span class="k2">{</span>
<span class="number">  10</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span><span class="n">100</span>, <span class="n">100</span><span class="k3">+</span>i, <span class="n">725</span>, <span class="n">100</span><span class="k3">+</span>i, <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">155</span>, <span class="n">155</span>, <span class="n">155</span><span class="k2">)</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//rgb(182, 182, 182)</span>
<span class="number">  11</span>     <span class="c">//   al_draw_line(100+i, 100, 100+i, 550, al_map_rgb(255, 255, 255), 1);</span>
<span class="number">  12</span>    <span class="k2">}</span>
<span class="number">  13</span>
<span class="number">  14</span>    <span class="c">//al_draw_filled_rectangle(750, 75, 775, 575, al_map_rgb(51, 102, 153));</span>
<span class="number">  15</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span><span class="n">763</span>, <span class="n">100</span>, <span class="n">763</span>, <span class="n">550</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">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//757, 100, 757, 550</span>
<span class="number">  16</span>    <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span><span class="n">760</span>, <span class="n">100</span><span class="k3">+</span>y, <span class="n">765</span>, <span class="n">200</span><span class="k3">+</span>y, <span class="n">2</span>, <span class="n">2</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">255</span>, <span class="n">255</span>, <span class="n">70</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="c">//LIST_BOX functions</span>
<span class="number">  21</span><span class="c">/////////////////////////////////////////////////////////////////////////////////////////////</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="c">// Initializes the LIST_BOX struct</span>
<span class="number">  24</span>LIST_BOX bt_create_list_box<span class="k2">(</span><span class="k1">int</span> x,  <span class="k1">int</span> y, <span class="k1">int</span> width, <span class="k1">int</span> height, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> background, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> seperator_line
<span class="number">  25</span>                            , <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> scroller_color, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> tail_color<span class="k2">)</span>
<span class="number">  26</span><span class="k2">{</span>
<span class="number">  27</span>    LIST_BOX list_box<span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span>    list_box.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  30</span>    list_box.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  31</span>    list_box.width <span class="k3">=</span> width<span class="k2">;</span>
<span class="number">  32</span>    list_box.height <span class="k3">=</span> height<span class="k2">;</span>
<span class="number">  33</span>    list_box.background <span class="k3">=</span> background<span class="k2">;</span>
<span class="number">  34</span>    list_box.seperator_line <span class="k3">=</span> seperator_line<span class="k2">;</span>
<span class="number">  35</span>
<span class="number">  36</span>    list_box.scroller <span class="k3">=</span> create_scroller<span class="k2">(</span>list_box.width<span class="k3">+</span><span class="n">50</span>, list_box.y, <span class="n">50</span>, list_box.height, tail_color, scroller_color<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span>    <span class="k1">return</span> list_box<span class="k2">;</span>
<span class="number">  39</span><span class="k2">}</span>
<span class="number">  40</span>
<span class="number">  41</span><span class="c">// To be called while rendering</span>
<span class="number">  42</span><span class="k1">void</span> bt_draw_list_box<span class="k2">(</span>LIST_BOX box<span class="k2">)</span>
<span class="number">  43</span><span class="k2">{</span>
<span class="number">  44</span>    <span class="c">// Taking measures for the List Box's x2 y2</span>
<span class="number">  45</span>    <span class="k1">int</span> bg_width_pos <span class="k3">=</span> box.x <span class="k3">+</span> box.width<span class="k2">;</span>
<span class="number">  46</span>    <span class="k1">int</span> bg_height_pos <span class="k3">=</span> box.y <span class="k3">+</span> box.height<span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span>    <span class="c">// Drawing background</span>
<span class="number">  49</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>box.x, box.y, bg_width_pos, bg_height_pos, box.background<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>    <span class="c">// I Don't remember why did I do that</span>
<span class="number">  52</span>    <span class="k1">int</span> loop <span class="k3">=</span> box.height <span class="k3">-</span> <span class="n">25</span><span class="k2">;</span>
<span class="number">  53</span>    <span class="c">// To draw separator lines</span>
<span class="number">  54</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> loop<span class="k2">;</span> i<span class="k3">+</span><span class="k3">=</span><span class="n">25</span><span class="k2">)</span>
<span class="number">  55</span>    <span class="k2">{</span>
<span class="number">  56</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>box.x<span class="k3">+</span><span class="n">25</span>, box.y<span class="k3">+</span><span class="n">25</span><span class="k3">+</span>i, bg_width_pos-50, box.y<span class="k3">+</span><span class="n">25</span><span class="k3">+</span>i, box.seperator_line, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//rgb(182, 182, 182)</span>
<span class="number">  57</span>
<span class="number">  58</span>    <span class="k2">}</span>
<span class="number">  59</span>
<span class="number">  60</span>    <span class="c">// Drawing actual scroller</span>
<span class="number">  61</span>    draw_scroller<span class="k2">(</span>box.scroller<span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span><span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span><span class="c">// Makes changes in the LIST_BOX, to be called in the logical computational part</span>
<span class="number">  65</span>LIST_BOX bt_list_box_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, LIST_BOX box<span class="k2">)</span>
<span class="number">  66</span><span class="k2">{</span>
<span class="number">  67</span>    scroller_listener<span class="k2">(</span>event, <span class="k3">&amp;</span>box.scroller<span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>    <span class="k1">return</span> box<span class="k2">;</span>
<span class="number">  69</span><span class="k2">}</span>
<span class="number">  70</span>
<span class="number">  71</span><span class="c">//LIST_BOX functions</span>
<span class="number">  72</span><span class="c">/////////////////////////////////////////////////////////////////////////////////////////////</span>
<span class="number">  73</span>SCROLLER create_scroller<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> width, <span class="k1">int</span> height
<span class="number">  74</span>                         , <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> tail_color, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
<span class="number">  75</span><span class="k2">{</span>
<span class="number">  76</span>    SCROLLER scroll<span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>    scroll.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  79</span>    scroll.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  80</span>    scroll.width <span class="k3">=</span> width<span class="k2">;</span>
<span class="number">  81</span>    scroll.height <span class="k3">=</span> height<span class="k2">;</span>
<span class="number">  82</span>    scroll.color <span class="k3">=</span> color<span class="k2">;</span>
<span class="number">  83</span>    scroll.tail_color <span class="k3">=</span> tail_color<span class="k2">;</span>
<span class="number">  84</span>    scroll.flag <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  85</span>    scroll.from_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  86</span>    scroll.ordinate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  87</span>
<span class="number">  88</span>    <span class="c">// Scroller button information</span>
<span class="number">  89</span>    scroll.x1 <span class="k3">=</span> scroll.x <span class="k3">+</span> <span class="n">10</span><span class="k2">;</span>
<span class="number">  90</span>    scroll.y1 <span class="k3">=</span> scroll.y <span class="k3">+</span> <span class="n">25</span><span class="k2">;</span>
<span class="number">  91</span>    scroll.x2 <span class="k3">=</span> scroll.x <span class="k3">+</span> <span class="n">15</span><span class="k2">;</span>
<span class="number">  92</span>    scroll.y2 <span class="k3">=</span> scroll.y <span class="k3">+</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  93</span>
<span class="number">  94</span>    <span class="k1">return</span> scroll<span class="k2">;</span>
<span class="number">  95</span><span class="k2">}</span>
<span class="number">  96</span>
<span class="number">  97</span>
<span class="number">  98</span><span class="c">// The function to draw scroller in render mode</span>
<span class="number">  99</span><span class="k1">void</span> draw_scroller<span class="k2">(</span>SCROLLER scroll<span class="k2">)</span>
<span class="number"> 100</span><span class="k2">{</span>
<span class="number"> 101</span>
<span class="number"> 102</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>scroll.x <span class="k3">+</span> <span class="n">13</span>, scroll.y <span class="k3">+</span> <span class="n">25</span>, scroll.x <span class="k3">+</span> <span class="n">13</span>, scroll.height <span class="k3">+</span> scroll.y <span class="k3">-</span> <span class="n">25</span>
<span class="number"> 103</span>                 , scroll.tail_color, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>    <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span>scroll.x1, scroll.y1<span class="k3">+</span>scroll.ordinate, scroll.x2, scroll.y2<span class="k3">+</span>scroll.ordinate
<span class="number"> 105</span>                                     , <span class="n">2</span>, <span class="n">2</span>, scroll.color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>
<span class="number"> 107</span><span class="k2">}</span>
<span class="number"> 108</span>
<span class="number"> 109</span><span class="c">// Listen to the ALLEGRO_EVENT (for scroller)</span>
<span class="number"> 110</span><span class="k1">void</span> scroller_listener<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER<span class="k3">*</span> scroll<span class="k2">)</span>
<span class="number"> 111</span><span class="k2">{</span>
<span class="number"> 112</span>    On_click_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>    On_drag_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>    On_release_scroller<span class="k2">(</span>event, <span class="k3">&amp;</span>scroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span><span class="k2">}</span>
<span class="number"> 116</span>
<span class="number"> 117</span><span class="k1">void</span> On_click_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span><span class="k3">*</span>scroll<span class="k2">)</span>
<span class="number"> 118</span><span class="k2">{</span>
<span class="number"> 119</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span>
<span class="number"> 120</span>        <span class="k1">if</span><span class="k2">(</span>event.mouse.x <span class="k3">&gt;</span> <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>x1 <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.x <span class="k3">&lt;</span> <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>x2 <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 121</span>           event.mouse.y <span class="k3">&gt;</span> <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y1 <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&lt;</span> <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y2 <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>flag <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 122</span>           <span class="k2">{</span>
<span class="number"> 123</span>            <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>flag <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 124</span>            <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>from_y <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 125</span>           <span class="k2">}</span>
<span class="number"> 126</span>
<span class="number"> 127</span><span class="k2">}</span>
<span class="number"> 128</span>
<span class="number"> 129</span><span class="k1">void</span> On_drag_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event, SCROLLER <span class="k3">*</span><span class="k3">*</span>scroll<span class="k2">)</span>
<span class="number"> 130</span><span class="k2">{</span>
<span class="number"> 131</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>flag <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 132</span>        <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>ordinate <span class="k3">=</span> event.mouse.y <span class="k3">-</span> <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>from_y<span class="k2">;</span>
<span class="number"> 133</span><span class="k2">}</span>
<span class="number"> 134</span>
<span class="number"> 135</span><span class="k1">void</span> On_release_scroller<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event,SCROLLER <span class="k3">*</span><span class="k3">*</span>scroll<span class="k2">)</span>
<span class="number"> 136</span><span class="k2">{</span>
<span class="number"> 137</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span>
<span class="number"> 138</span>    <span class="k3">*</span><span class="k2">(</span>scroll<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>flag <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 139</span><span class="k2">}</span>
</div></div><p>

This is main.c file</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;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   3</span><span class="c">//#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/keyboard.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;allegro5/mouse.h&gt;</span>
<span class="number">   8</span><span class="p">#include "Text_Box.h"</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">void</span> menu_icon<span class="k2">(</span><span class="k1">int</span>, <span class="k1">int</span>, <span class="k1">int</span>, <span class="k1">int</span>, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a>, <span class="k1">int</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="p">#define MAXWIDTH 900</span>
<span class="number">  13</span><span class="p">#define MAXHEIGHT 600</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  16</span><span class="k2">{</span>
<span class="number">  17</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="number">  18</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>
<span class="number">  19</span>    <span class="c">//al_init_image_addon();</span>
<span class="number">  20</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>
<span class="number">  21</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>
<span class="number">  22</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>
<span class="number">  23</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>
<span class="number">  24</span>
<span class="number">  25</span>    <span class="c">//al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR);</span>
<span class="number">  26</span>
<span class="number">  27</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</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>MAXWIDTH, MAXHEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  30</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">2</span>.<span class="n">0</span><span class="k3">/</span><span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> m_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">255</span>, <span class="n">214</span>, <span class="n">51</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"res/L.ttf"</span>, <span class="n">14</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>    LIST_BOX list_box <span class="k3">=</span> bt_create_list_box<span class="k2">(</span><span class="n">75</span>, <span class="n">75</span>, <span class="n">800</span>, <span class="n">500</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">12</span>, <span class="n">83</span>, <span class="n">95</span><span class="k2">)</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">155</span>, <span class="n">155</span>, <span class="n">155</span><span class="k2">)</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">255</span>, <span class="n">255</span>, <span class="n">70</span><span class="k2">)</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">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>    <span class="c">//ALLEGRO_BITMAP *background = al_load_bitmap("res/background.jpg");</span>
<span class="number">  35</span>
<span class="number">  36</span>
<span class="number">  37</span>    <span class="k1">int</span> x<span class="k3">=</span><span class="n">0</span>, sc_y<span class="k3">=</span><span class="n">0</span>, sc_pointed_y, sc_pointed_y_trigger<span class="k3">=</span><span class="n">0</span>, main_loop <span class="k3">=</span> <span class="k1">true</span>, menu <span class="k3">=</span> <span class="n">0</span>, scr_prev_pos<span class="k3">=</span><span class="n">0</span>, scroller<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  38</span>    <span class="k1">int</span> width<span class="k3">=</span><span class="n">50</span>, height<span class="k3">=</span><span class="n">50</span>, place_x<span class="k3">=</span><span class="n">25</span>, place_y<span class="k3">=</span><span class="n">25</span>, animate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  39</span>    <span class="c">//enum {};</span>
<span class="number">  40</span>
<span class="number">  41</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span>    <span class="k1">while</span><span class="k2">(</span>main_loop<span class="k2">)</span>
<span class="number">  49</span>    <span class="k2">{</span>
<span class="number">  50</span>
<span class="number">  51</span>        <span class="c">//if(al_is_event_queue_empty(queue))</span>
<span class="number">  52</span>        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>
<span class="number">  54</span>        <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number">  55</span>            main_loop <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number">  58</span>        <span class="k2">{</span>
<span class="number">  59</span>            <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</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">77</span>, <span class="n">77</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//rgb(153,50,204)</span>
<span class="number">  60</span>
<span class="number">  61</span>        <span class="c">//al_draw_scaled_bitmap(background, 0, 0, 4896, 3264, 0, 0, 800, 600, 0);</span>
<span class="number">  62</span>        <a href="http://www.allegro.cc/manual/al_draw_rounded_rectangle"><span class="a">al_draw_rounded_rectangle</span></a><span class="k2">(</span><span class="n">400</span><span class="k3">-</span><span class="n">100</span>, <span class="n">300</span><span class="k3">-</span><span class="n">20</span>, <span class="n">400</span><span class="k3">+</span><span class="n">100</span>, <span class="n">300</span><span class="k3">+</span><span class="n">20</span>, <span class="n">20</span>, <span class="n">20</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">70</span>, <span class="n">60</span>, <span class="n">100</span><span class="k2">)</span>, <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</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><span class="n">0</span>, <span class="n">0</span>, <span class="n">50</span>, <span class="n">50</span>, m_color<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</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><span class="n">0</span>, <span class="n">50</span>, <span class="n">50</span>, MAXHEIGHT, <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">255</span>, <span class="n">214</span>, <span class="n">51</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//rgb(218, 112, 214) rgb(255, 214, 51) al_map_rgb(230, 46, 0)</span>
<span class="number">  65</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span><span class="n">50</span>, <span class="n">0</span>, <span class="n">50</span>, MAXHEIGHT, <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">0</span><span class="k2">)</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>        menu_icon<span class="k2">(</span><span class="n">50</span>, <span class="n">50</span>, <span class="n">25</span>, <span class="n">25</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">0</span><span class="k2">)</span>, animate<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>        bt_draw_list_box<span class="k2">(</span>list_box<span class="k2">)</span><span class="k2">;</span> <span class="c">//list_box(sc_y);</span>
<span class="number">  68</span>
<span class="number">  69</span>            <span class="k1">if</span><span class="k2">(</span>menu<span class="k2">)</span>
<span class="number">  70</span>            <span class="k2">{</span>
<span class="number">  71</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><span class="n">50</span>, <span class="n">0</span>, MAXWIDTH, <span class="n">50</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">22</span>, <span class="n">88</span>, <span class="n">110</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>            <span class="k2">}</span>
<span class="number">  73</span>
<span class="number">  74</span>        <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>        <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">02</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>        <span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span>
<span class="number">  79</span>        <span class="k2">{</span>
<span class="number">  80</span>                <span class="k1">if</span><span class="k2">(</span>event.mouse.x <span class="k3">&lt;</span> <span class="n">50</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&lt;</span> <span class="n">50</span><span class="k2">)</span>
<span class="number">  81</span>                    m_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">140</span>, <span class="n">152</span>, <span class="n">63</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>                <span class="k1">else</span>
<span class="number">  83</span>                    m_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">255</span>, <span class="n">214</span>, <span class="n">51</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>        <span class="k2">}</span>
<span class="number">  85</span>
<span class="number">  86</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span>
<span class="number">  87</span>        <span class="k2">{</span>
<span class="number">  88</span>            <span class="c">//scr_prev_pos = event.mouse.y;</span>
<span class="number">  89</span>
<span class="number">  90</span>
<span class="number">  91</span>            <span class="k1">if</span><span class="k2">(</span>event.mouse.x <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span>place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  92</span>            <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.x <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>place_x<span class="k3">+</span><span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  93</span>            <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span>place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  94</span>            <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>place_y<span class="k3">+</span><span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  95</span>            <span class="k2">{</span>
<span class="number">  96</span>                <span class="k1">if</span><span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number">  97</span>                <span class="k2">{</span>
<span class="number">  98</span>                    <span class="k2">(</span><span class="n">5</span> <span class="k3">=</span><span class="k3">=</span> animate<span class="k2">)</span> ? <span class="k2">(</span>animate <span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">:</span> <span class="k2">(</span>animate <span class="k3">=</span> <span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>                    menu <span class="k3">=</span> <span class="k3">!</span>menu<span class="k2">;</span>
<span class="number"> 100</span>                <span class="k2">}</span>
<span class="number"> 101</span>            <span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span>        <span class="k2">}</span>
<span class="number"> 104</span>
<span class="number"> 105</span>        <span class="k1">if</span><span class="k2">(</span>event.mouse.x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">753</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.x <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">761</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">100</span><span class="k3">+</span>sc_y <span class="k3">&amp;</span><span class="k3">&amp;</span> event.mouse.y <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">200</span><span class="k3">+</span>sc_y<span class="k2">)</span>
<span class="number"> 106</span>            <span class="k2">{</span>
<span class="number"> 107</span>
<span class="number"> 108</span>                <span class="k1">if</span><span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 109</span>                <span class="k2">{</span>
<span class="number"> 110</span>                    scroller <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 111</span>
<span class="number"> 112</span>                    <span class="k1">if</span><span class="k2">(</span>sc_pointed_y_trigger <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 113</span>                    <span class="k2">{</span>
<span class="number"> 114</span>                        sc_pointed_y <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 115</span>                        sc_pointed_y_trigger <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 116</span>                    <span class="k2">}</span>
<span class="number"> 117</span>                <span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</span>                <span class="k1">if</span><span class="k2">(</span>scroller<span class="k2">)</span>
<span class="number"> 120</span>                <span class="k2">{</span>
<span class="number"> 121</span>                    <span class="c">//if((event.mouse.y - 150) &lt; 550 &amp;&amp; (event.mouse.y - 150) &gt; 100)</span>
<span class="number"> 122</span>                        sc_y <span class="k3">=</span> event.mouse.y <span class="k3">-</span> <span class="n">150</span><span class="k2">;</span>
<span class="number"> 123</span>                <span class="k2">}</span>
<span class="number"> 124</span>            <span class="k2">}</span>
<span class="number"> 125</span>
<span class="number"> 126</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span>
<span class="number"> 127</span>        <span class="k2">{</span>
<span class="number"> 128</span>            scroller <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 129</span>            sc_pointed_y_trigger <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 130</span>            <span class="c">//scr_prev_pos = event.mouse.y;</span>
<span class="number"> 131</span>        <span class="k2">}</span>
<span class="number"> 132</span>
<span class="number"> 133</span>        <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 134</span>        <span class="k2">{</span>
<span class="number"> 135</span>            <span class="k1">switch</span><span class="k2">(</span>event.keyboard.keycode<span class="k2">)</span>
<span class="number"> 136</span>            <span class="k2">{</span>
<span class="number"> 137</span>                <span class="k1">case</span> ALLEGRO_KEY_ESCAPE <span class="k2">:</span>
<span class="number"> 138</span>                    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 140</span>            <span class="k2">}</span>
<span class="number"> 141</span>        <span class="k2">}</span>
<span class="number"> 142</span>
<span class="number"> 143</span>    <span class="k2">}</span>
<span class="number"> 144</span>
<span class="number"> 145</span>    list_box <span class="k3">=</span> bt_list_box_listener<span class="k2">(</span>event, list_box<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 146</span>
<span class="number"> 147</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>    <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 150</span><span class="k2">}</span>
<span class="number"> 151</span>
<span class="number"> 152</span><span class="k1">void</span> menu_icon<span class="k2">(</span><span class="k1">int</span> width, <span class="k1">int</span> height, <span class="k1">int</span> place_x, <span class="k1">int</span> place_y, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> colorU, <span class="k1">int</span> animate<span class="k2">)</span>
<span class="number"> 153</span><span class="k2">{</span>
<span class="number"> 154</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>width<span class="k3">/</span><span class="n">4</span> <span class="k3">+</span> animate, place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>height<span class="k3">/</span><span class="n">3</span>, place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>width-<span class="k2">(</span>width<span class="k3">/</span><span class="n">4</span><span class="k2">)</span> <span class="k3">+</span> animate, place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>height<span class="k3">/</span><span class="n">3</span>, colorU, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>width<span class="k3">/</span><span class="n">4</span> <span class="k3">-</span> animate, place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span><span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span>, place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>width-<span class="k2">(</span>width<span class="k3">/</span><span class="n">4</span><span class="k2">)</span> <span class="k3">-</span> animate, place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span><span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span>, colorU, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>width<span class="k3">/</span><span class="n">4</span> <span class="k3">+</span> animate, place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>height-<span class="k2">(</span>height<span class="k3">/</span><span class="n">3</span><span class="k2">)</span>, place_x-<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>width-<span class="k2">(</span>width<span class="k3">/</span><span class="n">4</span><span class="k2">)</span> <span class="k3">+</span> animate, place_y-<span class="k2">(</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span>height-<span class="k2">(</span>height<span class="k3">/</span><span class="n">3</span><span class="k2">)</span>, colorU, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 15 Jun 2019 12:39:23 +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/617861/1042592#target">Peter Hull</a> said:</div><div class="quote"><p> Right and where are you calling that?
</p></div></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 15 Jun 2019 12:58:57 +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/617861/1042592#target">Peter Hull</a> said:</div><div class="quote"><p>Right and where are you calling that? </p></div></div><p>
at line no. 145.</p><div class="source-code snippet"><div class="inner"><pre>  <span class="n">145</span> list_box <span class="k3">=</span> bt_list_box_listener<span class="k2">(</span>event, list_box<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I now know it wasn&#39;t in the loop.</p><p>It&#39;s working now and blinking for some reason.<br />Anyway Thanks Peter.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sat, 15 Jun 2019 13:40:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, Pointer Primer :</p><p>First, in C, all variables are pass by value, including pointers. But a pointer happens to hold the address of another object, which can be used to change that object, but not the pointer you pass to the function.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span> DATA <span class="k2">{</span>
   <span class="k1">int</span> x<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

Pass by value :
</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">void</span> IncrementLocalDataCopy<span class="k2">(</span>DATA d<span class="k2">)</span><span class="k2">{</span>
<span class="number">  2</span>   d.x<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="c">/// Does nothing to the DATA passed to the function, but affects the local copy</span>
<span class="number">  3</span><span class="k2">}</span>
<span class="number">  4</span><span class="k1">void</span> IncrementLocalDataPointerCopy<span class="k2">(</span>DATA<span class="k3">*</span> d<span class="k2">)</span><span class="k2">{</span>
<span class="number">  5</span>   d-&gt;x<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="c">/// The pointer is passed by value, but it references a DATA object named d passed to the function</span>
<span class="number">  6</span><span class="k2">}</span>
<span class="number">  7</span><span class="k1">void</span> IncementLocalIntCopy<span class="k2">(</span><span class="k1">int</span> i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>   i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="c">/// Increments local copy of i, not the int passed to it.</span>
<span class="number">  9</span><span class="k2">}</span>
<span class="number"> 10</span><span class="k1">void</span> IncrementLocalIntPointerCopy<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span> iptr<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>   iptr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="c">/// = 0;/// Doesn't affect the pointer passed to the function, but affects iptr</span>
<span class="number"> 12</span>   <span class="c">/// *iptr = &amp;iptr;/// Stores the address of iptr inside the memory pointed to by iptr</span>
<span class="number"> 13</span>                 <span class="c">/// But remember! iptr is a local object and it's address is on the last frame of the stack!</span>
<span class="number"> 14</span>                 <span class="c">/// So now we have leaked a pointer to memory that is out of bounds as soon as the function returns</span>
<span class="number"> 15</span>                 <span class="c">/// Passing the address of a local or temporary object is not good</span>
<span class="number"> 16</span>                 <span class="c">/// It's BAD, MMMKAY?</span>
<span class="number"> 17</span><span class="k2">}</span>
</div></div><p>
They are all pass by value, including the pointer. But the pointer allows you to change memory.</p><p>Here&#39;s a little quiz for you. What does the following code output? Does it compile? Does it run successfully? Why or why not?</p><div class="source-code snippet"><div class="inner"><pre>DATA d <span class="k3">=</span> <span class="k2">{</span><span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
<span class="k1">int</span> i <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="k1">int</span><span class="k3">*</span> iptr <span class="k3">=</span> <span class="k3">&amp;</span>i<span class="k2">;</span>

IncrementLocalDataCopy<span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span>
IncrementLocalDataPointerCopy<span class="k2">(</span><span class="k3">&amp;</span>d<span class="k2">)</span><span class="k2">;</span>
IncrementLocalIntCopy<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span>
IncrementLocalIntPointerCopy<span class="k2">(</span>iptr<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">"d.x is %d , and i is %d\n"</span> , d.x , i<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

</p><div class="spoiler"><p>
They are equal<br />&lt;spoiler&gt;<br />They equal 2<br />&lt;/spoiler&gt;
</p></div><p>

Tips on working with pointers :</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="k1">int</span><span class="k3">*</span> iptr <span class="k3">=</span> <span class="k3">&amp;</span>i<span class="k2">;</span><span class="c">/// &amp; Means 'the address of' i</span>
i-&gt;x <span class="k3">=</span> i-&gt;x <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span><span class="c">/// -&gt; Derefences a pointer and accesses a field</span>
<span class="k3">*</span>iptr <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span><span class="c">/// * Dereferences a pointer and returns a reference to i which is used to assign the value 3</span>
iptr <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="c">/// Does nothing to i</span>
<span class="k3">*</span>iptr <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span><span class="c">/// Crashes if you're lucky with a segfault SIGSEGV accessing invalid memory address</span>
</pre></div></div><p>

And if you ever switch to C++, they introduce a second meaning for &amp; when inside a function signature or variable declaration. It means &#39;a reference to&#39; an object.</p><p>Example :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="k1">int</span><span class="k3">&amp;</span> j <span class="k3">=</span> i<span class="k2">;</span><span class="c">/// j now references i</span>
j <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span><span class="c">/// Directly modifies i through its address</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 should be 1, and the value is %d"</span> , i<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

There. Learn that, and then tell us why it wasn&#39;t working. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 15 Jun 2019 20:22:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar, for the valuable lesson and I already knew about the references.<br />I was confused about passing structs as pointer copy because that was my first time doing it and there was a logical error in my program that lead me to believe that I&#39;m using it wrongly.<br />Thanks again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Sun, 16 Jun 2019 12:45:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>On &quot;pass by value&quot; - I saw something like that recently (OK, a year ago):<br /><a href="https://news.ycombinator.com/item?id=16533862">https://news.ycombinator.com/item?id=16533862</a><br />and the author responded to my comments:<br /><a href="https://news.ycombinator.com/item?id=16537111">https://news.ycombinator.com/item?id=16537111</a><br />(also note the response from munificent aka Bob Nystrom who knows a thing or two <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> )</p><p>On the other stuff - GDB would have helped you here</p><div class="source-code snippet"><div class="inner"><pre>gdb&gt; br bt_list_box_listener
gdb&gt; run
</pre></div></div><p>

to set a breakpoint on that function and run the program; it would then be obvious it was not being called, since the breakpoint would not be hit.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Mon, 17 Jun 2019 17:35:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Peter!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Wed, 19 Jun 2019 11:02:17 +0000</pubDate>
	</item>
</rss>
