<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Storing an array into a file &amp; Comparing keyboard states.</title>
		<link>http://www.allegro.cc/forums/view/606575</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 03 Mar 2011 01:26:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, I&#39;ve got a couple quick questions. The biggest and most pressing is about saving arrays as a file. I simply don&#39;t understand it.</p><p>So right now I have this array of tiles, each tile contains two numbers. I&#39;d like to save thoes numbers into a file. In such a way that I can assign thoes values back to an array of tiles again.</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">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> sizeX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> sizeY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmpIdX<span class="k2">(</span>selectedTile.getBmpIdX<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmpIdY<span class="k2">(</span>selectedTile.getBmpIdY<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  <span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k2">}</span>
</div></div><p>

Hokay, so next is. I&#39;m looking for an easy way to compare one ALLEGRO_KEYBOARD_STATE to another.</p><p>It would be great If I could just do something like:
</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="number">  2</span><span class="k1">void</span> CInputManager::checkInput<span class="k2">(</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  kOldState <span class="k3">=</span> kState<span class="k2">;</span>
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>kState<span class="k2">)</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">bool</span> CInputManager::stateChange<span class="k2">(</span><span class="k2">)</span>
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>  <span class="k1">if</span> <span class="k2">(</span>kOldState <span class="k3">=</span><span class="k3">=</span> kState<span class="k2">)</span>
<span class="number"> 11</span>  <span class="k2">{</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>  <span class="k1">else</span>
<span class="number"> 13</span>  <span class="k2">{</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 14</span><span class="k2">}</span>
</div></div><p>

That doesn&#39;t work, I ended up working around it and did this:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><span class="k1">bool</span> CInputManager::tab<span class="k2">(</span><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><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>kState, ALLEGRO_KEY_TAB<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>kOldState, ALLEGRO_KEY_TAB<span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 4</span>  <span class="k2">{</span><span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 5</span>  <span class="k1">else</span>
<span class="number"> 6</span>  <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 7</span><span class="k2">}</span>
</div></div><p>

I can see that being really riddiculous to do if you where asking someone to print their character name or something. So I guess the question is still how can I compare the whole keyboard state?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jason perkins)</author>
		<pubDate>Wed, 02 Mar 2011 05:06:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Jason Perkins said:</div><div class="quote"><p>
Hi, I&#39;ve got a couple quick questions. The biggest and most pressing is about saving arrays as a file. I simply don&#39;t understand it.
</p></div></div><p>
It&#39;s not so bad. Use <span class="source-code"><a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a></span>, <span class="source-code"><a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a></span> or <span class="source-code"><a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a></span> and to read, use <span class="source-code"><a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a></span> or <span class="source-code"><a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a></span> and close the file with <span class="source-code"><a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a></span>.</p><div class="quote_container"><div class="title">Jason Perkins said:</div><div class="quote"><p>
I can see that being really riddiculous to do if you where asking someone to print their character name or something. So I guess the question is still how can I compare the whole keyboard state?
</p></div></div><p>
</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">enum</span> KEYSTATE <span class="k2">{</span>
<span class="number">  2</span>   KEY_PRESS <span class="k3">=</span> <span class="n">1</span>,
<span class="number">  3</span>   KEY_RELEASE <span class="k3">=</span> <span class="n">2</span>,
<span class="number">  4</span>   KEY_HELD <span class="k3">=</span> <span class="n">4</span>,
<span class="number">  5</span>   KEY_OPEN <span class="k3">=</span> <span class="n">8</span>
<span class="number">  6</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">bool</span> keys<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  9</span><span class="k1">bool</span> oldkeys<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k1">int</span> keystates<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 11</span>ALLEGRO_KEY_STATE al_key_state<span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="k1">void</span> init_keyboard_handler<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</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> ALLEGRO_KEY_MAX <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>      keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 17</span>      oldkeys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 18</span>   <span class="k2">}</span>
<span class="number"> 19</span><span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="k1">void</span> update_keyboard_handler<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_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>keystates<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</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> ALLEGRO_KEY_MAX <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>      oldkeys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> keys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 25</span>      keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>keystates , i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>   <span class="k2">}</span>
<span class="number"> 27</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> ALLEGRO_KEY_MAX <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>oldkeys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>keystates<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> KEY_PRESS<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 29</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> oldkeys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>keystates<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> KEY_RELEASE<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 30</span>      <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> oldkeys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>keystates<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> KEY_HELD<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 31</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>oldkeys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>keystates<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> KEY_OPEN<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 32</span>   <span class="k2">}</span>
<span class="number"> 33</span><span class="k2">}</span>
<span class="number"> 34</span>
<span class="number"> 35</span><span class="k1">bool</span> key_press<span class="k2">(</span><span class="k1">int</span> al_key_code<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> keystates<span class="k2">[</span>al_key_code<span class="k2">]</span> <span class="k3">&amp;</span> KEY_PRESS<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 36</span><span class="k1">bool</span> key_release<span class="k2">(</span><span class="k1">int</span> al_key_code<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> keystates<span class="k2">[</span>al_key_code<span class="k2">]</span> <span class="k3">&amp;</span> KEY_RELEASE<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 37</span><span class="k1">bool</span> key_held<span class="k2">(</span><span class="k1">int</span> al_key_code<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> keystates<span class="k2">[</span>al_key_code<span class="k2">]</span> <span class="k3">&amp;</span> KEY_HELD<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 38</span><span class="k1">bool</span> key_open<span class="k2">(</span><span class="k1">int</span> al_key_code<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> keystates<span class="k2">[</span>al_key_code<span class="k2">]</span> <span class="k3">&amp;</span> KEY_OPEN<span class="k2">;</span><span class="k2">}</span>
</div></div><p>

</p><div class="source-code snippet"><div class="inner"><pre>update_keyboard_handler<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

<span class="k1">if</span> <span class="k2">(</span>key_press<span class="k2">(</span>ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span>
</pre></div></div><p>


Using keystates can be a problem if it takes too long between updates, so a lot of people will probably recommend using keyboard events instead though. That makes it harder to detect double clicks and key held durations though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 02 Mar 2011 05:53:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks again, Edgar! That looks like it covers pretty much everything. <br />And about the files. I think I&#39;ve got a bit of a handle on it. I&#39;m about half way there. I decided to just go with &lt;fstream&gt; as it looks simpler <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jason perkins)</author>
		<pubDate>Wed, 02 Mar 2011 06:07:12 +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/606575/905905#target">jason perkins</a> said:</div><div class="quote"><p> I decided to just go with &lt;fstream&gt; as it looks simpler</p></div></div><p>The fstream routines will work fine if you are reading/writing as text.  However, if you are working with binary data, different architectures will represent the data in different ways, so your code will no longer be portable to other platforms.  </p><p>The Allegro routines take care of this problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Wed, 02 Mar 2011 06:13:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Jason Perkins said:</div><div class="quote"><p>
I decided to just go with &lt;fstream&gt; as it looks simpler
</p></div></div><p>
Word to the wise, if you use fstream, you will have to handle endianness on your own if you want your data to be portable to other computers besides your own. Using iostream&#39;s write function will write your data in the order it appears on the computer in use, and if you try to read it from a computer with different endianness, then you will get backwards data.</p><p>Stick with A5&#39;s file I/O and you&#39;ll be much better off. There are functions to read/write a char, read/write in little_endian/big_endian for shorts and ints. I wonder why there isn&#39;t a function for read/write&#39;ing doubles though?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 02 Mar 2011 06:18:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, so I got it working... But it just seems like magic, I have no clue why this works. </p><p>To me this feels like:</p><p>step 1: poop in a box.</p><p>step 2: wait 3 seconds.</p><p>step 3: retrieve gold from box.</p><p>Could someone please explain this a little bit?</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="number">  2</span><span class="k1">void</span> CMap::save<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  mapfile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"map.txt"</span>, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span>sizeX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  7</span>  <span class="k2">{</span>
<span class="number">  8</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> sizeY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</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_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>mapfile, tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdX<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>      <a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>mapfile, tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdY<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <span class="k2">}</span>
<span class="number"> 14</span>  <span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 17</span><span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="k1">void</span> CMap::load<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 20</span><span class="k2">{</span> 
<span class="number"> 21</span>  mapfile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"map.txt"</span>, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> sizeX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 23</span>  <span class="k2">{</span>
<span class="number"> 24</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y<span class="k3">&lt;</span>sizeY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 25</span>    <span class="k2">{</span>
<span class="number"> 26</span>      
<span class="number"> 27</span>      tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmpIdX<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>      tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmpIdY<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>      tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmp<span class="k2">(</span>bmpArray<span class="k2">[</span>tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdX<span class="k2">(</span><span class="k2">)</span><span class="k2">]</span><span class="k2">[</span>tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdY<span class="k2">(</span><span class="k2">)</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    <span class="k2">}</span>
<span class="number"> 31</span>  <span class="k2">}</span>
<span class="number"> 32</span>
<span class="number"> 33</span>  <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jason perkins)</author>
		<pubDate>Wed, 02 Mar 2011 08:05:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you poop gold into a box, you will be able to later retrieve it. What part of that is hard to understand? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Wed, 02 Mar 2011 09:39:39 +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/606575/905925#target">jason perkins</a> said:</div><div class="quote"><p>
Could someone please explain this a little bit?
</p></div></div><p>

Here you go:
</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="number">  2</span><span class="k1">void</span> CMap::save<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  <span class="c">// Open a file for writing:</span>
<span class="number">  5</span>  mapfile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"map.txt"</span>, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>  <span class="c">// Iterate over the 2D array:</span>
<span class="number">  8</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> sizeX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  9</span>  <span class="k2">{</span>
<span class="number"> 10</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> sizeY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 11</span>    <span class="k2">{</span>
<span class="number"> 12</span>      <span class="c">// Write the BmpIdX value to the file</span>
<span class="number"> 13</span>      <a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>mapfile, tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdX<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="c">// Write the BmpIdY value to the file</span>
<span class="number"> 15</span>      <a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>mapfile, tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdY<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <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="c">// Close the file handle.</span>
<span class="number"> 21</span>  <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 22</span>
<span class="number"> 23</span>  <span class="c">// For all intents and purposes, the file now contains a stream of bytes;</span>
<span class="number"> 24</span>  <span class="c">// each group of 4 bytes can be interpreted as a little-endian 32 bit integer,</span>
<span class="number"> 25</span>  <span class="c">// containing a bitmap ID.</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> CMap::load<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 29</span><span class="k2">{</span> 
<span class="number"> 30</span>  <span class="c">// Open file for reading</span>
<span class="number"> 31</span>  mapfile <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"map.txt"</span>, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>  <span class="c">// Iterate over the array</span>
<span class="number"> 34</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> sizeX<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 35</span>  <span class="k2">{</span>
<span class="number"> 36</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> sizeY<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 37</span>    <span class="k2">{</span>
<span class="number"> 38</span>      <span class="c">// Load the BmpX and BmpY values from the file</span>
<span class="number"> 39</span>      tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmpIdX<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>      tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmpIdY<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>      <span class="c">// Get the corresponding bitmap from the bmpArray.</span>
<span class="number"> 42</span>      <span class="c">// It is probably a good idea to add range checks here, to prevent</span>
<span class="number"> 43</span>      <span class="c">// broken map files from requesting invalid bitmaps and causing</span>
<span class="number"> 44</span>      <span class="c">// segfaults or the like</span>
<span class="number"> 45</span>      tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.setBmp<span class="k2">(</span>bmpArray<span class="k2">[</span>tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdX<span class="k2">(</span><span class="k2">)</span><span class="k2">]</span><span class="k2">[</span>tiles<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span>.getBmpIdY<span class="k2">(</span><span class="k2">)</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    <span class="k2">}</span>
<span class="number"> 47</span>  <span class="k2">}</span>
<span class="number"> 48</span>
<span class="number"> 49</span>  <span class="c">// Close the file</span>
<span class="number"> 50</span>  <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>mapfile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span><span class="k2">}</span>
</div></div><p>

Maybe you&#39;re having trouble wrapping your head around the way the 2D array gets serialized into a 1D sequence of 32 bit integers?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Wed, 02 Mar 2011 13:44:47 +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/606575/905964#target">Tobias Dammers</a> said:</div><div class="quote"><p>
Maybe you&#39;re having trouble wrapping your head around the way the 2D array gets serialized into a 1D sequence of 32 bit integers? 
</p></div></div><p>


Yeah after what you wrote there It makes sense though. My interpretation now is, everything I write to the file is writtin as a chunk of data, and that gets placed after the chunk written before it. Which I think is good enough for a pass now <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> Thanks for making it clear.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jason perkins)</author>
		<pubDate>Wed, 02 Mar 2011 14:33:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A file is just a bunch of bytes. When you store bytes in it, you can later retrieve them in the same order. <tt>al_fwrite32le</tt> is just a convenience function that takes a 32-bit integer, chops it into four bytes, and sends them to the file, one by one, starting with the most significant one. <tt>al_fread32le</tt> reads them back in, in the same order they were written, and combines them back into a 32 bit integer. That&#39;s all there is to it, really.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Thu, 03 Mar 2011 01:26:48 +0000</pubDate>
	</item>
</rss>
