<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Convert *bitmap to char buffer</title>
		<link>http://www.allegro.cc/forums/view/618846</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 22 Jul 2023 01:32:44 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi all:<br />  As the title states, I need to know how to convert Allegro *BITMAP<br />to char, so I can store the chars into my buffer, char name[50].<br />Can someone help me on how to do this? I have search the internet but<br />have not found how this can be done. If you need more info, let me know.<br />Thanks for your time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Tue, 18 Jul 2023 00:59:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m guessing since you reference BITMAP and not ALLEGRO_BITMAP that you mean A4.</p><p>If so, then this should hopefully help: <a href="https://www.allegro.cc/manual/4/api/direct-access-to-video-memory/">https://www.allegro.cc/manual/4/api/direct-access-to-video-memory/</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Wed, 19 Jul 2023 08:54:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi LennyLen:<br />  No, I am using allegro5. Sorry, I did not mean to mislead anyone.<br />I should have stated that fact. Hear is why I think this is what I<br />need to do:<br /> Right click image in file manager.<br /> I then string copy argv[1] into my char name[100].<br /> My image loads and displays on screen.<br /> I am able to modify image.<br /> I then save image to &quot;sample.png&quot;.<br /> Everything is fine.<br /> Now my original char name[100] is no longer valid.<br /> But if there was a way to update the name buffer with<br /> the new info, I would be very happy!<br />Is this possible or have I completely lost my mind?</p><p>Thanks for your reply, have a great day!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 19 Jul 2023 18:17:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your original post said to put an allegro bitmap into char buffer. <br />Now you just want to know how to modify a char buffer?</p><p>strcpy_s(my_buffer, size of my buffer, new name);
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 19 Jul 2023 18:43:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Daniel:<br />  You are correct. I had a name to begin with. It was stored in argv[1].<br />Now I have no name. All I have now is a modified bitmap. There is no name<br />associated with this bitmap. If I try to associate a name I would create<br />a seg fault because I can&#39;t copy *bitmap into a char buffer.<br />Am i missing something here? Please explain.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 19 Jul 2023 21:16:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Learn the difference between a pointer and an array. char[100] is an array. char* is a pointer. If you want to copy into a char buffer fine, declare an array of char large enough to hold + 1 for the null or allocate memory for it. Then use strncpy to copy it into your char buffer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 19 Jul 2023 22:29:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Edgar:<br />  Yeah, I already know the difference. If I read you correctly, you are<br />saying I need to save it like I would save to a .png file except to a<br />buffer instead! Is this correct? If so, I already do this to a file, but<br />I end up saving the complete backbuffer. If I have it in the buffer, I<br />can save only the image. Kind of crazy I guess, but that is what I got.<br />Saving to a file, I can do, but saving to a buffer I will have to do some<br />research. Never done that before. Thanks for the tip, learn something<br />new every day! I will mark this closed! Thanks again!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Wed, 19 Jul 2023 23:26:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So you do want to save a bitmap to a char buffer. I am thoroughly confused.</p><p>It&#39;s not so easy. </p><p>The ALLEGRO_BITMAP pointer doesn&#39;t just point to the ALLEGRO_BITMAP struct. There are internal data pointers as well that point somewhere else. </p><p>It is doable.</p><p>Hardest part would be calculating the buffer size needed? </p><p>Take a look at the struct.
</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">struct</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   ALLEGRO_BITMAP_INTERFACE <span class="k3">*</span>vt<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>   <span class="c">/*</span>
<span class="number">  6</span><span class="c">    * When this is a sub-bitmap, these are inherited from the parent. Don't</span>
<span class="number">  7</span><span class="c">    * access them directly, but use al_get_bitmap_format/flags or</span>
<span class="number">  8</span><span class="c">    * _al_get_bitmap_display unless you are super sure this is not a sub-bitmap</span>
<span class="number">  9</span><span class="c">    * (e.g. when you're creating a new bitmap).</span>
<span class="number"> 10</span><span class="c">    */</span>
<span class="number"> 11</span>   <span class="k1">int</span> _format<span class="k2">;</span>
<span class="number"> 12</span>   <span class="k1">int</span> _flags<span class="k2">;</span>
<span class="number"> 13</span>   <span class="k1">int</span> _depth<span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">int</span> _samples<span class="k2">;</span>
<span class="number"> 15</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>_display<span class="k2">;</span>
<span class="number"> 16</span>   ALLEGRO_BITMAP_WRAP _wrap_u<span class="k2">;</span>
<span class="number"> 17</span>   ALLEGRO_BITMAP_WRAP _wrap_v<span class="k2">;</span>
<span class="number"> 18</span>   <span class="c">/* What format is used for the backing memory</span>
<span class="number"> 19</span><span class="c">    * (can be different from _format, for e.g. compressed bitmaps) */</span>
<span class="number"> 20</span>   <span class="k1">int</span> _memory_format<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   <span class="k1">int</span> w, h<span class="k2">;</span>
<span class="number"> 23</span>   <span class="c">/*</span>
<span class="number"> 24</span><span class="c">    * The number of bytes between a pixel at (x,y) and (x,y+1).</span>
<span class="number"> 25</span><span class="c">    * This is larger than w * pixel_size if there is padding between lines.</span>
<span class="number"> 26</span><span class="c">    */</span>
<span class="number"> 27</span>   <span class="k1">int</span> pitch<span class="k2">;</span>
<span class="number"> 28</span>   <span class="c">/* </span>
<span class="number"> 29</span><span class="c">    * clip left, right, top, bottom</span>
<span class="number"> 30</span><span class="c">    * Clip anything outside of this. cr/cb are exclusive, that is (0, 0, 1, 1)</span>
<span class="number"> 31</span><span class="c">    * is the single pixel spawning a rectangle from floating point 0/0 to 1/1 -</span>
<span class="number"> 32</span><span class="c">    * or in other words, the single pixel 0/0.</span>
<span class="number"> 33</span><span class="c">    *</span>
<span class="number"> 34</span><span class="c">    * There is always confusion as to whether cr/cb are exclusive, leading to</span>
<span class="number"> 35</span><span class="c">    * subtle bugs.  The suffixes are supposed to help with that.</span>
<span class="number"> 36</span><span class="c">    */</span>
<span class="number"> 37</span>   <span class="k1">int</span> cl<span class="k2">;</span>
<span class="number"> 38</span>   <span class="k1">int</span> cr_excl<span class="k2">;</span>
<span class="number"> 39</span>   <span class="k1">int</span> ct<span class="k2">;</span>
<span class="number"> 40</span>   <span class="k1">int</span> cb_excl<span class="k2">;</span>
<span class="number"> 41</span>   <span class="c">/*</span>
<span class="number"> 42</span><span class="c">    * Locking info.</span>
<span class="number"> 43</span><span class="c">    *</span>
<span class="number"> 44</span><span class="c">    * These values represent the actual locking dimensions, which may be different</span>
<span class="number"> 45</span><span class="c">    * from what was passed in to al_lock_bitmap_region. This is transparent to the</span>
<span class="number"> 46</span><span class="c">    * user, but the internal drawing functions must take this into account. To</span>
<span class="number"> 47</span><span class="c">    * that end, use this lock_data parameter value and NOT the one in locked_region.</span>
<span class="number"> 48</span><span class="c">    *</span>
<span class="number"> 49</span><span class="c">    * locked - locked or not?</span>
<span class="number"> 50</span><span class="c">    * lock_x/y - top left of the locked region</span>
<span class="number"> 51</span><span class="c">    * lock_w/h - width and height of the locked region</span>
<span class="number"> 52</span><span class="c">    * lock_flags - flags the region was locked with</span>
<span class="number"> 53</span><span class="c">    * lock_data - the pointer to the real locked data (see above)</span>
<span class="number"> 54</span><span class="c">    * locked_region - a copy of the locked rectangle</span>
<span class="number"> 55</span><span class="c">    */</span>
<span class="number"> 56</span>   <span class="k1">bool</span> locked<span class="k2">;</span>
<span class="number"> 57</span>   <span class="k1">int</span> lock_x<span class="k2">;</span>
<span class="number"> 58</span>   <span class="k1">int</span> lock_y<span class="k2">;</span>
<span class="number"> 59</span>   <span class="k1">int</span> lock_w<span class="k2">;</span>
<span class="number"> 60</span>   <span class="k1">int</span> lock_h<span class="k2">;</span>
<span class="number"> 61</span>   <span class="k1">void</span><span class="k3">*</span> lock_data<span class="k2">;</span>
<span class="number"> 62</span>   <span class="k1">int</span> lock_flags<span class="k2">;</span>
<span class="number"> 63</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> locked_region<span class="k2">;</span>
<span class="number"> 64</span>
<span class="number"> 65</span>   <span class="c">/* Transformation for this bitmap */</span>
<span class="number"> 66</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> transform<span class="k2">;</span>
<span class="number"> 67</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> inverse_transform<span class="k2">;</span>
<span class="number"> 68</span>   <span class="k1">bool</span>              inverse_transform_dirty<span class="k2">;</span>
<span class="number"> 69</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> proj_transform<span class="k2">;</span>
<span class="number"> 70</span>
<span class="number"> 71</span>   <span class="c">/* Blender for this bitmap (if not set, use TLS) */</span>
<span class="number"> 72</span>   <span class="k1">bool</span>            use_bitmap_blender<span class="k2">;</span>
<span class="number"> 73</span>   ALLEGRO_BLENDER blender<span class="k2">;</span>
<span class="number"> 74</span>
<span class="number"> 75</span>   <span class="c">/* Shader applied to this bitmap.  Set this field with</span>
<span class="number"> 76</span><span class="c">    * _al_set_bitmap_shader_field to maintain invariants.</span>
<span class="number"> 77</span><span class="c">    */</span>
<span class="number"> 78</span>   ALLEGRO_SHADER <span class="k3">*</span>shader<span class="k2">;</span>
<span class="number"> 79</span>
<span class="number"> 80</span>   <span class="c">/* Info for sub-bitmaps */</span>
<span class="number"> 81</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>parent<span class="k2">;</span>
<span class="number"> 82</span>   <span class="k1">int</span> xofs<span class="k2">;</span>
<span class="number"> 83</span>   <span class="k1">int</span> yofs<span class="k2">;</span>
<span class="number"> 84</span>
<span class="number"> 85</span>   <span class="c">/* A memory copy of the bitmap data. May be NULL for an empty bitmap. */</span>
<span class="number"> 86</span>   <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>memory<span class="k2">;</span>
<span class="number"> 87</span>
<span class="number"> 88</span>   <span class="c">/* Extra data for display bitmaps, like texture id and so on. */</span>
<span class="number"> 89</span>   <span class="k1">void</span> <span class="k3">*</span>extra<span class="k2">;</span>
<span class="number"> 90</span>
<span class="number"> 91</span>   _AL_LIST_ITEM <span class="k3">*</span>dtor_item<span class="k2">;</span>
<span class="number"> 92</span>
<span class="number"> 93</span>   <span class="c">/* set_target_bitmap and lock_bitmap mark bitmaps as dirty for preservation */</span>
<span class="number"> 94</span>   <span class="k1">bool</span> dirty<span class="k2">;</span>
<span class="number"> 95</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

You could also look at the register save and load functions. Make your own that loads/saves to/from a char buffer.</p><p>After all that, I don&#39;t know why you would want to.</p><p>EDIT:<br />I&#39;m still confused. Do you need to save the filename of the bitmap or the bitmap itself to a buffer?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 19 Jul 2023 23:40:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&gt;EDIT:<br />&gt;I&#39;m still confused. Do you need to save the filename of the bitmap or the bitmap<br />&gt;itself to a buffer?</p><p>I wonder that also. Please be very clear what you want, and array of rgb stored in char, or a string name to save the file as? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 20 Jul 2023 01:55:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar and Daniel:<br />  Sorry, I guess I am going at this the wrong way. I think I can clear<br />this up:<br />I am now in my file manager, I right click on an image, image shows on screen.<br />Everything is fine. I take the first argument argv[1] and strcpy into my char<br />name[100] buffer. I then save to &quot;sample,png&quot; file. I then open my file manager<br />and I see the file ONLY. Bear with me now. Code below:</p><div class="source-code snippet"><div class="inner"><pre>                              <span class="k1">if</span><span class="k2">(</span>lp <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
                                 <span class="k2">{</span>             <span class="c">// saving DEFAULT image</span>
                                     <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>temp_image<span class="k2">)</span><span class="k2">;</span>
                                     temp_image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>name<span class="k2">)</span><span class="k2">;</span>
                                     <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"sample.png"</span>, temp_image<span class="k2">)</span><span class="k2">;</span>
                                     <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>temp_image<span class="k2">)</span><span class="k2">;</span>
                                 <span class="k2">}</span>
</pre></div></div><p>

Notice the (name) buffer called. Everything is still fine. I am happy!!!</p><p>Now I want to modify that image. Buffer called name[] is no longer valid,</p><p>Now I save the modified image. Code below:</p><div class="source-code snippet"><div class="inner"><pre>                              <span class="k1">if</span><span class="k2">(</span>rt <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">|</span><span class="k3">|</span> mr <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">|</span><span class="k3">|</span> dt <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
                                 <span class="k2">{</span>             <span class="c">// saving ROTATED OR MIRROR images</span>
                                    temp_image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>screen_width, working_screen_height<span class="k2">)</span><span class="k2">;</span>
                                    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>temp_image<span class="k2">)</span><span class="k2">;</span>
                                    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<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="k2">;</span>
                                    <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
                                    <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"sample.png"</span>, temp_image<span class="k2">)</span><span class="k2">;</span>
                                    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>temp_image<span class="k2">)</span><span class="k2">;</span>
                                 <span class="k2">}</span>
Sorry, the code ran over to the next line.
</pre></div></div><p>

I go back to the file manager. I see the &quot;sample.png&quot; file but I also see the<br />complete backbuffer. I am NOT happy!!! The first thing you are going to say<br />is &#39;That is what you ask for&#39;. Right, because if I had ask for image_width and<br />image_height, I would have gotten pure garbage. Now, if I had the name buffer<br />updated I could have used the first code I posted and I would be happy again!<br />Either the name[] buffer needs to be updated or my second code needs to change.</p><p>I hope it is clear now. Thanks again for your time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Thu, 20 Jul 2023 03:31:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You modify the image, name hasn&#39;t changed since you set it to argv[1]<br />What do you want name to be if image is modified?</p><p>First code<br />1. set temporary_bitmap to target. Why this line and what is temp_image at this point?<br />2. load temporary with filename from name buffer<br />3. save temporary_as &#39;sample.png&#39;<br />4. delete temporary</p><p>Second code<br />1. create a temporary bitmap size of display<br />2. set temporary as target<br />3. draw display back buffer to temporary<br />4. save temporary as &#39;sample.png&#39;<br />5. destroy temporary</p><p>So, what&#39;s the problem? Why do you say name[] is invalid if image is modified. </p><p>also, use a bitmap to keep your bitmap in and don&#39;t use the display&#39;s back buffer. Do you need to save the entire display? OR just the bitmap you modified?</p><p>Maybe if you explain a bit what your app does.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 20 Jul 2023 04:24:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Daniel:<br /> I want you to do me a favor. Go back and read the very first line of your<br />last post. That is exactly my problem. If I bring up image representing argv[1]<br />and I modify that image, argv[1] does NOT exist any longer at this sitting. So,<br />what I want is name[] buffer updated to reflect the changes to argv[1]. Then<br />and only then can I use the first code to save the image and get only the image<br />without the complete backbuffer. If I try to save argv[1] after the modification<br />I will receive the original argv[1], NOT what I want. I hope this helps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Thu, 20 Jul 2023 05:04:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You said you had a char buffer called name.</p><p>At the start of your program, copy argv[1] to name. No need to ever use argv after that. <br />If you modify your image, modify name.</p><p>Here&#39;s and app that loads a bitmap from argv[1], modifies it, and save<br />Left mouse down: puts a black dot<br />F2: saves image to sample.png<br />Escape: exits
</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_image.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;string&gt;</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="k1">const</span> <span class="k1">int</span> display_width <span class="k3">=</span> <span class="n">1366</span><span class="k2">;</span>
<span class="number">   6</span><span class="k1">const</span> <span class="k1">int</span> display_height <span class="k3">=</span> <span class="n">768</span><span class="k2">;</span>
<span class="number">   7</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> nullptr<span class="k2">;</span>
<span class="number">   8</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> nullptr<span class="k2">;</span>
<span class="number">   9</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> nullptr<span class="k2">;</span>
<span class="number">  10</span><span class="k1">int32_t</span> logic_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  11</span><span class="k1">bool</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_519.html" target="_blank">kill</a> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  12</span><span class="k1">bool</span> dirty <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  13</span><span class="k1">const</span> <span class="k1">char</span> name<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">"My App Name"</span><span class="k2">;</span>
<span class="number">  14</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bitmap <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number">  15</span><span class="k1">char</span> bitmap_filename<span class="k2">[</span><span class="n">256</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number">  16</span><span class="k1">bool</span> bitmap_is_modified <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  17</span><span class="k1">bool</span> mouse_button_was_pressed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  18</span><span class="k1">int</span> bitmap_x <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  19</span><span class="k1">int</span> bitmap_y <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  20</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  21</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">int</span> init<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span><span class="k1">void</span> shutdown<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k1">int32_t</span> do_loop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span><span class="k1">void</span> draw_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span><span class="k1">void</span> process_logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span><span class="k1">void</span> process_input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span><span class="k1">void</span> display_set_title<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</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><span class="k3">*</span> argv<span class="k2">)</span>
<span class="number">  32</span><span class="k2">{</span>
<span class="number">  33</span>  <span class="k1">if</span> <span class="k2">(</span>init<span class="k2">(</span>argc, argv<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  34</span>  <span class="k2">{</span>
<span class="number">  35</span>    do_loop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>  <span class="k2">}</span>
<span class="number">  37</span>
<span class="number">  38</span>  shutdown<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>
<span class="number">  40</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  41</span><span class="k2">}</span>
<span class="number">  42</span>
<span class="number">  43</span><span class="k1">int</span> init<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span>
<span class="number">  44</span><span class="k2">{</span>
<span class="number">  45</span>  <span class="k1">if</span> <span class="k2">(</span>argc <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number">  46</span>  <span class="k2">{</span>
<span class="number">  47</span>    strcpy_s<span class="k2">(</span>bitmap_filename, <span class="n">256</span>, argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>  <span class="k2">}</span>
<span class="number">  49</span>
<span class="number">  50</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="number">  51</span>  <span class="k2">{</span>
<span class="number">  52</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  53</span>  <span class="k2">}</span>
<span class="number">  54</span>
<span class="number">  55</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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">  56</span>  <span class="k2">{</span>
<span class="number">  57</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  58</span>  <span class="k2">}</span>
<span class="number">  59</span>
<span class="number">  60</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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">  61</span>  <span class="k2">{</span>
<span class="number">  62</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  63</span>  <span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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>
<span class="number">  66</span>  <span class="k2">{</span>
<span class="number">  67</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  68</span>  <span class="k2">}</span>
<span class="number">  69</span>
<span class="number">  70</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLES, <span class="n">8</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_WINDOWED <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</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>display_width, display_height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  75</span>  <span class="k2">{</span>
<span class="number">  76</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  77</span>  <span class="k2">}</span>
<span class="number">  78</span>  display_set_title<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>
<span class="number">  80</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">  81</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>queue<span class="k2">)</span>
<span class="number">  82</span>  <span class="k2">{</span>
<span class="number">  83</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  84</span>  <span class="k2">}</span>
<span class="number">  85</span>
<span class="number">  86</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">1</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">  87</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span>
<span class="number">  88</span>  <span class="k2">{</span>
<span class="number">  89</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  90</span>  <span class="k2">}</span>
<span class="number">  91</span>
<span class="number">  92</span>  <span class="k1">if</span> <span class="k2">(</span>argc <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number">  93</span>  <span class="k2">{</span>
<span class="number">  94</span>    <span class="k1">if</span> <span class="k2">(</span>bitmap<span class="k2">)</span>
<span class="number">  95</span>    <span class="k2">{</span>
<span class="number">  96</span>      <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>    <span class="k2">}</span>
<span class="number">  98</span>    bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>bitmap_filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>
<span class="number"> 100</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bitmap<span class="k2">)</span>
<span class="number"> 101</span>    <span class="k2">{</span>
<span class="number"> 102</span>      <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 103</span>    <span class="k2">}</span>
<span class="number"> 104</span>  <span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</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"> 107</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"> 108</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"> 109</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"> 110</span>
<span class="number"> 111</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"> 112</span>
<span class="number"> 113</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 114</span><span class="k2">}</span>
<span class="number"> 115</span>
<span class="number"> 116</span><span class="k1">void</span> shutdown<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 117</span><span class="k2">{</span>
<span class="number"> 118</span>  <span class="k1">if</span> <span class="k2">(</span>bitmap<span class="k2">)</span>
<span class="number"> 119</span>  <span class="k2">{</span>
<span class="number"> 120</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>    bitmap <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 122</span>  <span class="k2">}</span>
<span class="number"> 123</span>
<span class="number"> 124</span>  <span class="k1">if</span> <span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 125</span>  <span class="k2">{</span>
<span class="number"> 126</span>    <a href="http://www.allegro.cc/manual/al_stop_timer"><span class="a">al_stop_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>    <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>    timer <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 129</span>  <span class="k2">}</span>
<span class="number"> 130</span>
<span class="number"> 131</span>  <span class="k1">if</span> <span class="k2">(</span>queue<span class="k2">)</span>
<span class="number"> 132</span>  <span class="k2">{</span>
<span class="number"> 133</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"> 134</span>    queue <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 135</span>  <span class="k2">}</span>
<span class="number"> 136</span>
<span class="number"> 137</span>  <span class="k1">if</span> <span class="k2">(</span>display<span class="k2">)</span>
<span class="number"> 138</span>  <span class="k2">{</span>
<span class="number"> 139</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"> 140</span>    display <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 141</span>  <span class="k2">}</span>
<span class="number"> 142</span><span class="k2">}</span>
<span class="number"> 143</span>
<span class="number"> 144</span><span class="k1">int32_t</span> do_loop<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 145</span><span class="k2">{</span>
<span class="number"> 146</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_519.html" target="_blank">kill</a><span class="k2">)</span>
<span class="number"> 147</span>  <span class="k2">{</span>
<span class="number"> 148</span>    process_input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>
<span class="number"> 150</span>    <span class="k1">while</span> <span class="k2">(</span>logic_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 151</span>    <span class="k2">{</span>
<span class="number"> 152</span>      process_logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>      <span class="k3">-</span><span class="k3">-</span>logic_counter<span class="k2">;</span>
<span class="number"> 154</span>    <span class="k2">}</span>
<span class="number"> 155</span>
<span class="number"> 156</span>    <span class="k1">if</span> <span class="k2">(</span>dirty<span class="k2">)</span>
<span class="number"> 157</span>    <span class="k2">{</span>
<span class="number"> 158</span>      draw_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>      dirty <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 160</span>    <span class="k2">}</span>
<span class="number"> 161</span>
<span class="number"> 162</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">01</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>  <span class="k2">}</span>
<span class="number"> 164</span>
<span class="number"> 165</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 166</span><span class="k2">}</span>
<span class="number"> 167</span>
<span class="number"> 168</span><span class="k1">void</span> draw_display<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 169</span><span class="k2">{</span>
<span class="number"> 170</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</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">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"> 172</span>
<span class="number"> 173</span>  <span class="k1">if</span> <span class="k2">(</span>bitmap<span class="k2">)</span>
<span class="number"> 174</span>  <span class="k2">{</span>
<span class="number"> 175</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bitmap, bitmap_x, bitmpa_y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 176</span>  <span class="k2">}</span>
<span class="number"> 177</span>
<span class="number"> 178</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"> 179</span><span class="k2">}</span>
<span class="number"> 180</span>
<span class="number"> 181</span><span class="k1">void</span> process_logic<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 182</span><span class="k2">{</span>
<span class="number"> 183</span>  <span class="k1">if</span> <span class="k2">(</span>mouse_button_was_pressed<span class="k2">)</span>
<span class="number"> 184</span>  <span class="k2">{</span>
<span class="number"> 185</span>    <span class="k1">if</span> <span class="k2">(</span>bitmap<span class="k2">)</span>
<span class="number"> 186</span>    <span class="k2">{</span>
<span class="number"> 187</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> region <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>bitmap, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_WRITEONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> target <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 190</span>      <a href="http://www.allegro.cc/manual/al_put_pixel"><span class="a">al_put_pixel</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">-</span> bitmap_x, <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">-</span> bitmap_y, <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="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>      <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>      bitmap_is_modified <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 194</span>      display_set_title<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>      dirty <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 196</span>    <span class="k2">}</span>
<span class="number"> 197</span>  <span class="k2">}</span>
<span class="number"> 198</span><span class="k2">}</span>
<span class="number"> 199</span>
<span class="number"> 200</span><span class="k1">void</span> process_input<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 201</span><span class="k2">{</span>
<span class="number"> 202</span>  <span class="k1">static</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"> 203</span>
<span class="number"> 204</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>al_event_queue_is_empty<span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 205</span>  <span class="k2">{</span>
<span class="number"> 206</span>    <a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_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"> 207</span>
<span class="number"> 208</span>    <span class="k1">switch</span> <span class="k2">(</span>event.type<span class="k2">)</span>
<span class="number"> 209</span>    <span class="k2">{</span>
<span class="number"> 210</span>    <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 211</span>    <span class="k2">{</span>
<span class="number"> 212</span>      <span class="k3">+</span><span class="k3">+</span>logic_counter<span class="k2">;</span>
<span class="number"> 213</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 214</span>
<span class="number"> 215</span>    <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 216</span>    <span class="k2">{</span>
<span class="number"> 217</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_519.html" target="_blank">kill</a> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 218</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 219</span>
<span class="number"> 220</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_AXES:
<span class="number"> 221</span>    <span class="k2">{</span>
<span class="number"> 222</span>      <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">=</span> event.mouse.x<span class="k2">;</span>
<span class="number"> 223</span>      <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 224</span>
<span class="number"> 225</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 226</span>
<span class="number"> 227</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP:
<span class="number"> 228</span>    <span class="k2">{</span>
<span class="number"> 229</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"> 230</span>      <span class="k2">{</span>
<span class="number"> 231</span>        mouse_button_was_pressed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 232</span>      <span class="k2">}</span>
<span class="number"> 233</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 234</span>
<span class="number"> 235</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN:
<span class="number"> 236</span>    <span class="k2">{</span>
<span class="number"> 237</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"> 238</span>      <span class="k2">{</span>
<span class="number"> 239</span>        mouse_button_was_pressed <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 240</span>      <span class="k2">}</span>
<span class="number"> 241</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 242</span>
<span class="number"> 243</span>    <span class="k1">case</span> ALLEGRO_EVENT_KEY_UP:
<span class="number"> 244</span>    <span class="k2">{</span>
<span class="number"> 245</span>      <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span>
<span class="number"> 246</span>      <span class="k2">{</span>
<span class="number"> 247</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_519.html" target="_blank">kill</a> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 248</span>      <span class="k2">}</span>
<span class="number"> 249</span>
<span class="number"> 250</span>      <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_F2<span class="k2">)</span>
<span class="number"> 251</span>      <span class="k2">{</span>
<span class="number"> 252</span>        <span class="k1">if</span> <span class="k2">(</span>bitmap<span class="k2">)</span>
<span class="number"> 253</span>        <span class="k2">{</span>
<span class="number"> 254</span>          <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"sample.png"</span>, bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>          bitmap_is_modified <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 256</span>          display_set_title<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 257</span>        <span class="k2">}</span>
<span class="number"> 258</span>      <span class="k2">}</span>
<span class="number"> 259</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 260</span>    <span class="k2">}</span>
<span class="number"> 261</span>  <span class="k2">}</span>
<span class="number"> 262</span><span class="k2">}</span>
<span class="number"> 263</span>
<span class="number"> 264</span><span class="k1">void</span> display_set_title<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 265</span><span class="k2">{</span>
<span class="number"> 266</span>  <span class="k1">char</span> title<span class="k2">[</span><span class="n">256</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 267</span>
<span class="number"> 268</span>  strcat_s<span class="k2">(</span>title, <span class="n">256</span>, name<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 269</span>
<span class="number"> 270</span>  <span class="k1">if</span> <span class="k2">(</span>bitmap_filename<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 271</span>  <span class="k2">{</span>
<span class="number"> 272</span>    strcat_s<span class="k2">(</span>title, <span class="n">256</span>, <span class="s">" - "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 273</span>    strcat_s<span class="k2">(</span>title, <span class="n">256</span>, bitmap_filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 274</span>
<span class="number"> 275</span>    <span class="k1">if</span> <span class="k2">(</span>bitmap_is_modified<span class="k2">)</span>
<span class="number"> 276</span>    <span class="k2">{</span>
<span class="number"> 277</span>      strcat_s<span class="k2">(</span>title, <span class="n">256</span>, <span class="s">"*"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 278</span>    <span class="k2">}</span>
<span class="number"> 279</span>  <span class="k2">}</span>
<span class="number"> 280</span>
<span class="number"> 281</span>  <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>display, title<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 282</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 20 Jul 2023 06:49:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s a matter of shallow vs deep copy. If you just point to argv[1], any changes to it will change argv[1]. Just make a char buffer and copy the new name into it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 20 Jul 2023 20:28:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could also add a function to load a different bitmap and modify name. If you had some sort of fileloader dialog or whatever.
</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">bool</span> bitmap_load<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> filename<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>filename<span class="k2">)</span>
<span class="number">  4</span>    <span class="k2">{</span>
<span class="number">  5</span>        <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  6</span>    <span class="k2">}</span>
<span class="number">  7</span>    
<span class="number">  8</span>    <span class="k1">if</span> <span class="k2">(</span>bitmap<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_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    <span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bitmap<span class="k2">)</span>
<span class="number"> 15</span>    <span class="k2">{</span>
<span class="number"> 16</span>        <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>    
<span class="number"> 19</span>    strcpy_s<span class="k2">(</span>name, <span class="n">256</span>, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    bitmap_is_modified <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 20 Jul 2023 22:33:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Daniel and Edgar:<br />   Well it looks like I am stuck with what I have. Any changes I make I get<br />kick right back to codeblocks. I ran your program Daniel and it ran fine with<br />some minor changes. I also investigated what Edgar posted. I am a little concerned about what happened. He talked like the argv[1] would be alive for the<br />complete sitting. I found that not to be the case. I rotated the bitmap<br />and all went well except when I tried to copy argv[1] to another buffer. Back<br />to codeblocks I went in a flash. I hope Edgar is not upset with what I said. I<br />would not question him at all. Both of you know more about this than I do. I<br />am just saying what I found on my machine. My program runs fine I already have<br />it in my Linux system. I click on an image and the image is on the screen. I might look into what you just posted about loading a new file from the disk.<br />Thanks to both of you for your help!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Fri, 21 Jul 2023 00:38:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you changing argv in your code? While it is not constant, if you don&#39;t modify it, then it will always point to the same array of constant strings. Also, it will persist throughout runtime, You shouldn&#39;t have any program accessing it at any point (inside of scope). If outside of scope, then make a buffer.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> name<span class="k2">[</span><span class="n">256</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span> <span class="c">// valid throughout source file</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><span class="k3">*</span> argv<span class="k2">)</span> <span class="c">// valid only inside main.</span>
<span class="k2">{</span>
<span class="k2">}</span>
</pre></div></div><p>

Unless your modifying it.</p><p>Also, can post code?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 21 Jul 2023 01:24:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Daniel:<br />  I am sure the problem in losing argv[1] is because I leave main(). The best I<br />can do to get what I want is a complete rewrite of the program. It was a very<br />expensive lesson to learn. I go back and forth out of main() all the time. The<br />main problem is having to save the complete backbuffer after changing argv[1].<br />It is too big of a problem to try to change what I have now! I hate to give it up<br />because it is the only image viewer I have. I will start Monday to rewrite what<br />I have now keeping in mind saving argv[1] all through the program.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Fri, 21 Jul 2023 18:02:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is probably a stupid suggestion and not applicable, but is there any way to declare argv[1] static?  I know when you want to keep a value in a variable for when you re-enter a function, you can make it static and value does not reinitialize.</p><p>static int count = 0;</p><p>Just thinking out loud.   </p><p>Or maybe write the name to global variable or file?  Again, just shooting in the dark.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 21 Jul 2023 21:18:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Once again, why and huh?</p><p>Reenter function? </p><p>They are already static because they will only ever be alive while your program is running. Which is the entire time. Just because you jump to other code and back doesn&#39;t change that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 21 Jul 2023 22:56:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Daniel:<br />  Hey, I lied to you! I didn&#39;t wait till next week, I rewrote enough to test<br />out the life of argv[1]. OK, I am inside of main the whole time. I know what<br />you and Edgar said about staying within main and I did. The name buffer is<br />still not updating. In fact, the program is worse than before the rewrite. I<br />don&#39;t doubt what you are saying. I would never do that. It is not what I see<br />on my end. The only time I am able to save ONLY the image is when I bring up<br />the image and save without any changes. I guess I have completed this project.<br />Three months is enough time to spend on it. It works and works fine and I am<br />happy I got this far. Time to move on to something else. Thanks for the help!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Scooter)</author>
		<pubDate>Sat, 22 Jul 2023 01:02:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t give up.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618846/1053769#target">Scooter</a> said:</div><div class="quote"><p>The name buffer is still not updating</p></div></div><p>
Are you not updating the name buffer? It won&#39;t magically change unless you change it. </p><p>Did you create a name buffer or are you only using argv[1]?</p><p>I&#39;m still confused on what you are doing or not doing or what you are trying to accomplish.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sat, 22 Jul 2023 01:32:44 +0000</pubDate>
	</item>
</rss>
