<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Timers and high speed animation - need advice!</title>
		<link>http://www.allegro.cc/forums/view/587457</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 08 Sep 2006 02:43:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am trying to understand the Allegro timer/interrupt code in a little more detail as I need a high precision timer system for high speed animations.  I need to animate loads of things at all kinds of speeds but using just one interrupt.</p><p>In a nutshell to get the full range of intervals I need (in this case to animate stuff with a range from 1 to 60 times per sec) I need to install a timer that fires every 120 hunds/sec.  I figure this because it allows me to move things at &gt;30 intervals (say 55 or 49 etc).  To not double the timer range to 120 (as in run it at 60 ticks) means that there is no difference between moving 31 and 59 times per sec as the move interval will not divide into the ticks.</p><p>Anyway putting all that stuff aside (which can clearly be a real head bender) my questions are...</p><p>1. Am I missing the point totally and looking at things the wrong way?  Is there another way of getting stuff to animate at anything from 1 to 59 or even say 47 times per sec?</p><p>2. If my game slows down to &lt; 120 FPS (very likely at times) would the timer interrupt not fire on time.  So it it seperate from the game code like a &quot;proper hardware&quot; interrupt under DOS?</p><p>3. Is 120 ticks per sec considered too fast for an Allegro interrupt?  Not the norm surely?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Bunting)</author>
		<pubDate>Thu, 07 Sep 2006 02:44:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think the highest you can really depend on is about 100 ticks a second -- the timers arn&#39;t much more accurate than 10ms... (I don&#39;t think even the Windows OS timers are for that matter)...</p><p>At any rate, if you&#39;re going to max out at 60 animations per second, then the most you&#39;ll ever need to call your timer is 60 times a second...</p><p>Basically, in each of your objects have a constant variable that says how many ticks to skip per frame of animation, and another variable to count.  (For instance if you want to animate an object at 60 fps, you would never skip any frames and the constant would be 1, if you wanted 30 fps for another object, you would set it to 2, 45 fps would be 1.33, 15 fps would be 4 -- I think the formula is something like constant_skip_var = (1/(fps/60) )</p><p>every tick you would add one to the counter, and every time the counter was equal to or greater than the constant you would call your animate (usually just incrase the frame counter) and subtract the constant value from the counter value.</p><p>--- that method has some obvious flaws though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Jensen)</author>
		<pubDate>Thu, 07 Sep 2006 03:09:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
1. Am I missing the point totally and looking at things the wrong way? Is there another way of getting stuff to animate at anything from 1 to 59 or even say 47 times per sec?
</p></div></div><p>
You should be able to do everything with a single-speed timer, for example 100Hz.</p><p>Animate means either or all of the following:<br />a) take a &quot;logical step&quot; in the unit&#39;s AI: examine the situation and make decisions accordingly.<br />b) modify the coordinates : this is the movement.<br />c) modifiy the appearance. sprite, color, blinking effect on/off, angle (heading)</p><p>For b), you can use coordinates and speed with a precision higher than pixel &quot;integers&quot;. So you can precisely map any speed and position: A constant +0.35 speed will result in a movement of 35 pixels per second.</p><p>a) and c) usually can be taken as discrete steps, so they don&#39;t need sub-step precision.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 07 Sep 2006 12:23:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#ifndef TIMER_H</span></td></tr><tr><td class="number">2</td><td><span class="p">#define TIMER_H</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="p">#ifndef WIN32</span></td></tr><tr><td class="number">5</td><td><span class="p">#include &lt;sys/time.h&gt;</span></td></tr><tr><td class="number">6</td><td><span class="p">#endif</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">extern</span> <span class="k1">class</span> Timer <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>public:</td></tr><tr><td class="number">10</td><td>    </td></tr><tr><td class="number">11</td><td>    <span class="k1">typedef</span> <span class="k1">unsigned</span> <span class="k1">int</span> time_t<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    </td></tr><tr><td class="number">13</td><td>private:</td></tr><tr><td class="number">14</td><td>    </td></tr><tr><td class="number">15</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">unsigned</span> <span class="k1">long</span> <span class="k1">long</span> startTime<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">unsigned</span> <span class="k1">long</span> <span class="k1">long</span> currentTime<span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="p">#else</span></td></tr><tr><td class="number">19</td><td>    timeval startTime<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    timeval currentTime<span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="p">#endif</span></td></tr><tr><td class="number">22</td><td>    </td></tr><tr><td class="number">23</td><td>public:</td></tr><tr><td class="number">24</td><td>    </td></tr><tr><td class="number">25</td><td>    Timer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    </td></tr><tr><td class="number">27</td><td>    time_t usecs<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    time_t msecs<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    time_t secs<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    </td></tr><tr><td class="number">31</td><td><span class="k2">}</span>timer<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td><span class="p">#endif</span></td></tr></tbody></table></div></div><p>
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include "timer.h"</span></td></tr><tr><td class="number">2</td><td><span class="p">#include "log.h"</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">5</td><td><span class="p">#include &lt;windows.h&gt;</span></td></tr><tr><td class="number">6</td><td><span class="p">#else</span></td></tr><tr><td class="number">7</td><td><span class="p">#include &lt;sys/time.h&gt;</span></td></tr><tr><td class="number">8</td><td><span class="p">#endif</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>Timer timer<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>Timer::Timer<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">15</td><td>    startTime <span class="k3">=</span> GetTickCount<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td><span class="p">#else</span></td></tr><tr><td class="number">17</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span><span class="k3">&amp;</span>startTime, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="p">#endif</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>Timer::time_t Timer::usecs<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">24</td><td>    <span class="k1">static</span> <span class="k1">bool</span> onetime <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    <span class="k1">static</span> <span class="k1">unsigned</span> <span class="k1">long</span> <span class="k1">long</span> freq <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    </td></tr><tr><td class="number">27</td><td>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>onetime<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>        </td></tr><tr><td class="number">29</td><td>        onetime <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>        QueryPerformanceFrequency<span class="k2">(</span><span class="k2">(</span>LARGE_INTEGER<span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>freq<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>    </td></tr><tr><td class="number">33</td><td>    QueryPerformanceCounter<span class="k2">(</span><span class="k2">(</span>LARGE_INTEGER<span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>currentTime<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    </td></tr><tr><td class="number">35</td><td>    currentTime <span class="k3">*</span><span class="k3">=</span> <span class="n">1000000</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    currentTime <span class="k3">/</span><span class="k3">=</span> freq<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    </td></tr><tr><td class="number">38</td><td>    <span class="k1">return</span> currentTime <span class="k3">-</span> startTime <span class="k3">*</span> <span class="n">1000</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td><span class="p">#else</span></td></tr><tr><td class="number">40</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span><span class="k3">&amp;</span>currentTime, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    </td></tr><tr><td class="number">42</td><td>    <span class="k1">return</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">long</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span>currentTime.tv_sec <span class="k3">-</span> startTime.tv_sec<span class="k2">)</span> <span class="k3">/</span> <span class="n">1000</span><span class="k2">)</span></td></tr><tr><td class="number">43</td><td>            <span class="k3">+</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">long</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span>currentTime.tv_usec <span class="k3">-</span> startTime.tv_usec<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td><span class="p">#endif</span></td></tr><tr><td class="number">45</td><td><span class="k2">}</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>Timer::time_t Timer::msecs<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">48</td><td><span class="k2">{</span></td></tr><tr><td class="number">49</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">50</td><td>    currentTime <span class="k3">=</span> GetTickCount<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>    </td></tr><tr><td class="number">52</td><td>    <span class="k1">return</span> currentTime <span class="k3">-</span> startTime<span class="k2">;</span></td></tr><tr><td class="number">53</td><td><span class="p">#else</span></td></tr><tr><td class="number">54</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span><span class="k3">&amp;</span>currentTime, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>    </td></tr><tr><td class="number">56</td><td>    <span class="k1">return</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">long</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span>currentTime.tv_sec <span class="k3">-</span> startTime.tv_sec<span class="k2">)</span> <span class="k3">*</span> <span class="n">1000</span><span class="k2">)</span></td></tr><tr><td class="number">57</td><td>            <span class="k3">+</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">long</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span>currentTime.tv_usec <span class="k3">-</span> startTime.tv_usec<span class="k2">)</span> <span class="k3">/</span> <span class="n">1000</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td><span class="p">#endif</span></td></tr><tr><td class="number">59</td><td><span class="k2">}</span></td></tr><tr><td class="number">60</td><td>&#160;</td></tr><tr><td class="number">61</td><td>Timer::time_t Timer::secs<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">62</td><td><span class="k2">{</span></td></tr><tr><td class="number">63</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">64</td><td>    currentTime <span class="k3">=</span> GetTickCount<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>    </td></tr><tr><td class="number">66</td><td>    <span class="k1">return</span> <span class="k2">(</span>currentTime <span class="k3">-</span> startTime<span class="k2">)</span> <span class="k3">/</span> <span class="n">1000</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td><span class="p">#else</span></td></tr><tr><td class="number">68</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span><span class="k3">&amp;</span>currentTime, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>    </td></tr><tr><td class="number">70</td><td>    <span class="k1">return</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">long</span><span class="k2">)</span><span class="k2">(</span>currentTime.tv_sec <span class="k3">-</span> startTime.tv_sec<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td><span class="p">#endif</span></td></tr><tr><td class="number">72</td><td><span class="k2">}</span></td></tr><tr><td class="number">73</td><td><span class="p">#endif</span></td></tr></tbody></table></div></div><p>
There are 1000 milliseconds(msecs) in a second, and 1000 usecs in a millisecond.</p><p>Tested on windows and linux and usec precision appears to be pretty consistent.</p><p>[edit]<br />Heres some usage:
</p><div class="source-code snippet"><div class="inner"><pre>...
Timer::time_t t <span class="k3">=</span> timer.usecs<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

...

cout <span class="k3">&lt;</span><span class="k3">&lt;</span> timer.usecs<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> t <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" Microseconds have passed.\n"</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Thu, 07 Sep 2006 12:31:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If some of your animations are running too fast you should have a frame display for multiple updates.<br />So if your code looks like this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> Update<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">2</td><td>   anim <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>   <span class="k1">if</span><span class="k2">(</span> anim <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">3</span><span class="k2">)</span> anim <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k2">}</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>   <span class="k1">switch</span><span class="k2">(</span>anim<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>   <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span></td></tr><tr><td class="number">9</td><td>      draw_frame0<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>   <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>   <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span></td></tr><tr><td class="number">12</td><td>      draw_frame1<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>   <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>   <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span></td></tr><tr><td class="number">15</td><td>      draw_frame2<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
You can make it run at half speed by changing it to look like this:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> Update<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">2</td><td>   anim <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>   <span class="k1">if</span><span class="k2">(</span> anim <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">6</span><span class="k2">)</span> anim <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k2">}</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>   <span class="k1">switch</span><span class="k2">(</span>anim<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>   <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span></td></tr><tr><td class="number">9</td><td>   <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span></td></tr><tr><td class="number">10</td><td>      draw_frame0<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>   <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>   <span class="k1">case</span> <span class="n">2</span><span class="k2">:</span></td></tr><tr><td class="number">13</td><td>   <span class="k1">case</span> <span class="n">3</span><span class="k2">:</span></td></tr><tr><td class="number">14</td><td>      draw_frame1<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   <span class="k1">case</span> <span class="n">4</span><span class="k2">:</span></td></tr><tr><td class="number">17</td><td>   <span class="k1">case</span> <span class="n">5</span><span class="k2">:</span></td></tr><tr><td class="number">18</td><td>      draw_frame2<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>   <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Wilson Saunders)</author>
		<pubDate>Fri, 08 Sep 2006 01:40:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just some simple math is needed. Here is my (probably flawed somehow) code from a TINS a few years ago:</p><p>anim.h:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// baf 2005</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="c">// anim.h</span>
<span class="number">  4</span><span class="c">// animation stuff</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="p">#ifndef ANIM_H</span>
<span class="number">  7</span><span class="p">#define ANIM_H</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="p">#include "main.h"</span>
<span class="number"> 10</span><span class="p">#include "timers.h"</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">typedef</span> <span class="k1">struct</span> ABITMAP
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>  <span class="k1">int</span> num_frames, fps, w, h, masked<span class="k2">;</span>
<span class="number"> 15</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span>frames<span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span> ABITMAP<span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="k1">typedef</span> <span class="k1">struct</span> ABITMAP_INSTANCE
<span class="number"> 19</span><span class="k2">{</span>
<span class="number"> 20</span>  ABITMAP <span class="k3">*</span>parent<span class="k2">;</span>
<span class="number"> 21</span>  <span class="k1">int</span> curframe<span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span> ABITMAP_INSTANCE<span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>ABITMAP <span class="k3">*</span>load_abitmap<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="k2">;</span>
<span class="number"> 25</span><span class="k1">int</span> save_abitmap<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>filename, ABITMAP <span class="k3">*</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>ABITMAP_INSTANCE <span class="k3">*</span>grab_abitmap_instance<span class="k2">(</span>ABITMAP <span class="k3">*</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="k1">void</span> destroy_abitmap<span class="k2">(</span>ABITMAP <span class="k3">*</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span><span class="k1">void</span> destroy_abitmap_instance<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span><span class="k1">void</span> update_animation<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span><span class="k1">void</span> ablit<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>source, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dest, <span class="k1">int</span> dest_x, <span class="k1">int</span> dest_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span><span class="k1">void</span> ablit_r<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>source, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dest, <span class="k1">int</span> dest_x, <span class="k1">int</span> dest_y, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span><span class="p">#endif</span>
</div></div><p>

anim.c:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">// baf 2005</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="c">// anim.c</span>
<span class="number">   4</span><span class="c">// animation stuff</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="p">#include "anim.h"</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">int</span> lac <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span>ABITMAP <span class="k3">*</span>load_abitmap<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">  11</span><span class="k2">{</span>
<span class="number">  12</span>  <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>abmp<span class="k2">;</span>
<span class="number">  13</span>  ABITMAP <span class="k3">*</span>ret<span class="k2">;</span>
<span class="number">  14</span>  <span class="k1">int</span> i, x, y<span class="k2">;</span>
<span class="number">  15</span>  abmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>abmp<span class="k2">)</span>
<span class="number">  17</span>    <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  18</span>  ret <span class="k3">=</span> <span class="k2">(</span>ABITMAP <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ABITMAP<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>  ret-&gt;num_frames <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>  ret-&gt;fps <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>  ret-&gt;w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>  ret-&gt;h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>  ret-&gt;masked <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>  ret-&gt;frames <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k2">)</span> <span class="k3">*</span> ret-&gt;num_frames<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> ret-&gt;num_frames<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number">  26</span>  <span class="k2">{</span>
<span class="number">  27</span>    abmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen_chunk" target="_blank"><span class="a">pack_fopen_chunk</span></a><span class="k2">(</span>abmp, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>    ret-&gt;frames<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>ret-&gt;w, ret-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>    <span class="k1">for</span><span class="k2">(</span>y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> ret-&gt;h<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span>
<span class="number">  30</span>      <span class="k1">for</span><span class="k2">(</span>x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> ret-&gt;w<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x<span class="k2">)</span>
<span class="number">  31</span>        <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>ret-&gt;frames<span class="k3">&lt;</span>i&gt;, x, y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/pack_igetl" target="_blank"><span class="a">pack_igetl</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>    abmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fclose_chunk" target="_blank"><span class="a">pack_fclose_chunk</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>  <span class="k2">}</span>
<span class="number">  34</span>  <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>  <span class="k1">return</span> ret<span class="k2">;</span>
<span class="number">  36</span><span class="k2">}</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="k1">int</span> save_abitmap<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>filename, ABITMAP <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  39</span><span class="k2">{</span>
<span class="number">  40</span>  <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>abmp<span class="k2">;</span>
<span class="number">  41</span>  <span class="k1">int</span> i, x, y, col<span class="k2">;</span>
<span class="number">  42</span>  abmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>abmp<span class="k2">)</span>
<span class="number">  44</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  45</span>  <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span>bmp-&gt;num_frames, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>  <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span>bmp-&gt;fps, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>  <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span>bmp-&gt;w, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>  <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span>bmp-&gt;h, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>  <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span>bmp-&gt;masked, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> bmp-&gt;num_frames<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number">  51</span>  <span class="k2">{</span>
<span class="number">  52</span>    abmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen_chunk" target="_blank"><span class="a">pack_fopen_chunk</span></a><span class="k2">(</span>abmp, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>    <span class="k1">for</span><span class="k2">(</span>y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> bmp-&gt;h<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span>
<span class="number">  54</span>    <span class="k2">{</span>
<span class="number">  55</span>      <span class="k1">for</span><span class="k2">(</span>x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> bmp-&gt;w<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x<span class="k2">)</span>
<span class="number">  56</span>      <span class="k2">{</span>
<span class="number">  57</span>        col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>bmp-&gt;frames<span class="k3">&lt;</span>i&gt;, x, y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>        <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/getr" target="_blank"><span class="a">getr</span></a><span class="k2">(</span>col<span class="k2">)</span>, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>        <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/getg" target="_blank"><span class="a">getg</span></a><span class="k2">(</span>col<span class="k2">)</span>, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>        <a href="http://www.allegro.cc/manual/pack_iputl" target="_blank"><span class="a">pack_iputl</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/getb" target="_blank"><span class="a">getb</span></a><span class="k2">(</span>col<span class="k2">)</span>, abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>      <span class="k2">}</span>
<span class="number">  62</span>    <span class="k2">}</span>
<span class="number">  63</span>    abmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fclose_chunk" target="_blank"><span class="a">pack_fclose_chunk</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>  <span class="k2">}</span>
<span class="number">  65</span>  <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>abmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span><span class="k2">}</span>
<span class="number">  67</span>
<span class="number">  68</span>ABITMAP_INSTANCE <span class="k3">*</span>grab_abitmap_instance<span class="k2">(</span>ABITMAP <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  69</span><span class="k2">{</span>
<span class="number">  70</span>  ABITMAP_INSTANCE <span class="k3">*</span>ret<span class="k2">;</span>
<span class="number">  71</span>  ret <span class="k3">=</span> <span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ABITMAP_INSTANCE<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>  ret-&gt;parent <span class="k3">=</span> bmp<span class="k2">;</span>
<span class="number">  73</span>  ret-&gt;curframe <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  74</span>  <span class="k1">return</span> ret<span class="k2">;</span>
<span class="number">  75</span><span class="k2">}</span>
<span class="number">  76</span>
<span class="number">  77</span>
<span class="number">  78</span><span class="k1">void</span> destroy_abitmap<span class="k2">(</span>ABITMAP <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  79</span><span class="k2">{</span>
<span class="number">  80</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  81</span>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> bmp-&gt;num_frames<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number">  82</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bmp-&gt;frames<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>bmp-&gt;frames<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span><span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span><span class="k1">void</span> destroy_abitmap_instance<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  88</span><span class="k2">{</span>
<span class="number">  89</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>bmp<span class="k2">)</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="number">  93</span><span class="k1">void</span> update_animation<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>bmp<span class="k2">)</span>
<span class="number">  94</span><span class="k2">{</span>
<span class="number">  95</span>  BASSERT<span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>  
<span class="number">  97</span> <span class="c">/* if(anim_counter == lac)</span>
<span class="number">  98</span><span class="c">    return;</span>
<span class="number">  99</span><span class="c">  lac = anim_counter;*/</span>
<span class="number"> 100</span>  
<span class="number"> 101</span>  <span class="c">// anim_counter goes up by 60 each second... we gotta calculate this with frames per second.</span>
<span class="number"> 102</span>  <span class="c">// update. the curframe.</span>
<span class="number"> 103</span>  <span class="k1">if</span><span class="k2">(</span>anim_counter % <span class="k2">(</span><span class="n">60</span> <span class="k3">/</span> bmp-&gt;parent-&gt;fps<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 104</span>    <span class="k3">+</span><span class="k3">+</span>bmp-&gt;curframe<span class="k2">;</span>
<span class="number"> 105</span>  
<span class="number"> 106</span>   <span class="c">// we dont want segfaults ;)</span>
<span class="number"> 107</span>  <span class="k1">if</span><span class="k2">(</span>bmp-&gt;curframe <span class="k3">&gt;</span><span class="k3">=</span> bmp-&gt;parent-&gt;num_frames<span class="k2">)</span>
<span class="number"> 108</span>    bmp-&gt;curframe %<span class="k3">=</span> bmp-&gt;parent-&gt;num_frames<span class="k2">;</span>
<span class="number"> 109</span>  
<span class="number"> 110</span>  <span class="c">// keep it from overflowing</span>
<span class="number"> 111</span>  <span class="k1">if</span><span class="k2">(</span>anim_counter <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">60</span><span class="k2">)</span>
<span class="number"> 112</span>    anim_counter <span class="k3">-</span><span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number"> 113</span><span class="k2">}</span>
<span class="number"> 114</span>
<span class="number"> 115</span><span class="k1">void</span> ablit<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>source, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dest, <span class="k1">int</span> dest_x, <span class="k1">int</span> dest_y<span class="k2">)</span>
<span class="number"> 116</span><span class="k2">{</span>
<span class="number"> 117</span>  BASSERT<span class="k2">(</span>source<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>  BASSERT<span class="k2">(</span>source-&gt;parent<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>  BASSERT<span class="k2">(</span>source-&gt;parent-&gt;frames<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>  <span class="c">//printf("%d ", source-&gt;curframe);</span>
<span class="number"> 121</span>  <span class="k1">if</span><span class="k2">(</span>source-&gt;parent-&gt;masked<span class="k2">)</span>
<span class="number"> 122</span>    <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>source-&gt;parent-&gt;frames<span class="k2">[</span>source-&gt;curframe<span class="k2">]</span>, dest, <span class="n">0</span>, <span class="n">0</span>, dest_x, dest_y, source-&gt;parent-&gt;w, source-&gt;parent-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>  <span class="k1">else</span>
<span class="number"> 124</span>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>source-&gt;parent-&gt;frames<span class="k2">[</span>source-&gt;curframe<span class="k2">]</span>, dest, <span class="n">0</span>, <span class="n">0</span>, dest_x, dest_y, source-&gt;parent-&gt;w, source-&gt;parent-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span><span class="k2">}</span>
<span class="number"> 126</span>
<span class="number"> 127</span><span class="k1">void</span> ablit_r<span class="k2">(</span>ABITMAP_INSTANCE <span class="k3">*</span>source, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dest, <span class="k1">int</span> dest_x, <span class="k1">int</span> dest_y, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle<span class="k2">)</span>
<span class="number"> 128</span><span class="k2">{</span>
<span class="number"> 129</span>  <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>dest, source-&gt;parent-&gt;frames<span class="k2">[</span>source-&gt;curframe<span class="k2">]</span>, dest_x, dest_y, angle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span><span class="k2">}</span>
</div></div><p>



And here is the abitmap utility:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">// baf 2005</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="c">// abitmap_util.c</span>
<span class="number">   4</span><span class="c">// utility to spew out abitmaps :)</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="p">#include "main.h"</span>
<span class="number">   7</span><span class="p">#include "timers.h"</span>
<span class="number">   8</span><span class="p">#include "anim.h"</span>
<span class="number">   9</span>
<span class="number">  10</span>FILE <span class="k3">*</span>logfile<span class="k2">;</span>
<span class="number">  11</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  14</span><span class="k2">{</span>
<span class="number">  15</span>  <span class="k1">char</span> c <span class="k3">=</span> <span class="s">' '</span>, filename<span class="k2">[</span><span class="n">512</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  17</span>  ABITMAP <span class="k3">*</span>cur<span class="k2">;</span>
<span class="number">  18</span>  ABITMAP_INSTANCE <span class="k3">*</span>cur_i<span class="k2">;</span>
<span class="number">  19</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tmp<span class="k2">;</span> FILE <span class="k3">*</span>hmm<span class="k2">;</span>
<span class="number">  20</span>  logfile <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span><span class="s">"./abitmap_util.log"</span>, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Hey. This is ABITMAP Utility coming at you live from stdout!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Please choose:\n L) Load and view an abitmap\n C) Create an abitmap\n E) Edit an abitmap\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>  <span class="k1">while</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>c<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="s">'l'</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>c<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="s">'c'</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>c<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="s">'e'</span><span class="k2">)</span>
<span class="number">  24</span>  <span class="k2">{</span>
<span class="number">  25</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"-&gt;"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%c"</span>, <span class="k3">&amp;</span>c<span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>  <span class="k2">}</span>
<span class="number">  29</span>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>c<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'l'</span><span class="k2">)</span>
<span class="number">  30</span>  <span class="k2">{</span>
<span class="number">  31</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Enter filename to view -&gt; "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%s"</span>, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>    <span class="c">//if(file_exists(filename, FA_RDONLY, NULL) == 0)</span>
<span class="number">  35</span>    <span class="c">/*if((hmm = fopen(filename, "r")) == NULL)</span>
<span class="number">  36</span><span class="c">    {</span>
<span class="number">  37</span><span class="c">      printf("File doesnt exist! Bye bye\n");</span>
<span class="number">  38</span><span class="c">      return -1;</span>
<span class="number">  39</span><span class="c">    }</span>
<span class="number">  40</span><span class="c">    fclose(hmm);*/</span>
<span class="number">  41</span>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>    cur <span class="k3">=</span> load_abitmap<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>cur<span class="k2">)</span>
<span class="number">  45</span>    <span class="k2">{</span>
<span class="number">  46</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"File doesn't exist! Bye bye\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>      <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  48</span>    <span class="k2">}</span>
<span class="number">  49</span>    cur_i <span class="k3">=</span> grab_abitmap_instance<span class="k2">(</span>cur<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    BASSERT<span class="k2">(</span>cur <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>    BASSERT<span class="k2">(</span>cur_i <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>    install_timers<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT, <span class="n">800</span>, <span class="n">600</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>    buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>    i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  58</span>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="number">  59</span>    <span class="k2">{</span>
<span class="number">  60</span>      <span class="k1">if</span><span class="k2">(</span>i <span class="k3">!</span><span class="k3">=</span> anim_counter<span class="k2">)</span>
<span class="number">  61</span>        update_animation<span class="k2">(</span>cur_i<span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>      i <span class="k3">=</span> anim_counter<span class="k2">;</span>
<span class="number">  63</span>      <a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>      <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>      ablit<span class="k2">(</span>cur_i, buffer, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>      <a href="http://www.allegro.cc/manual/textprintf_right_ex" target="_blank"><span class="a">textprintf_right_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="s">"Frame: %d | ABM FPS: %d"</span>, cur_i-&gt;curframe, cur-&gt;fps<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>      <a href="http://www.allegro.cc/manual/textprintf_right_ex" target="_blank"><span class="a">textprintf_right_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="s">"%d"</span>, anim_counter % <span class="k2">(</span><span class="n">60</span> <span class="k3">/</span> cur-&gt;fps<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>      <a href="http://www.allegro.cc/manual/textprintf_right_ex" target="_blank"><span class="a">textprintf_right_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="s">"DEBUG - cur frame count: %d"</span>, anim_counter<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>      <span class="c">//sleep(60 / cur-&gt;fps + 10);</span>
<span class="number">  71</span>    <span class="k2">}</span>
<span class="number">  72</span>  <span class="k2">}</span>
<span class="number">  73</span>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_826.html" target="_blank">tolower</a><span class="k2">(</span>c<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'e'</span><span class="k2">)</span>
<span class="number">  74</span>  <span class="k2">{</span>
<span class="number">  75</span>    <span class="k1">int</span> done <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  76</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Enter filename to edit -&gt; "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%s"</span>, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>    <a href="http://www.allegro.cc/manual/install_allegro" target="_blank"><span class="a">install_allegro</span></a><span class="k2">(</span>SYSTEM_NONE, <span class="k3">&amp;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_293.html" target="_blank">errno</a>, <a href="http://www.delorie.com/djgpp/doc/libc/libc_52.html" target="_blank">atexit</a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    cur <span class="k3">=</span> load_abitmap<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>cur<span class="k2">)</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  83</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Loaded %s\n"</span>, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Settings:\n\tFPS: %d\n\tMasked: %d\n"</span>, cur-&gt;fps, cur-&gt;masked<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"New FPS -&gt; "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;fps<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"New Masked -&gt; "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;masked<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>    save_abitmap<span class="k2">(</span>filename, cur<span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Modified"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>  <span class="k2">}</span>
<span class="number">  92</span>  <span class="k1">else</span>
<span class="number">  93</span>  <span class="k2">{</span>
<span class="number">  94</span>    <a href="http://www.allegro.cc/manual/install_allegro" target="_blank"><span class="a">install_allegro</span></a><span class="k2">(</span>SYSTEM_NONE, <span class="k3">&amp;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_293.html" target="_blank">errno</a>, <a href="http://www.delorie.com/djgpp/doc/libc/libc_52.html" target="_blank">atexit</a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>    cur <span class="k3">=</span> <span class="k2">(</span>ABITMAP <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ABITMAP<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"How many frames? "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;num_frames<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"How many FPS? "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;fps<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Width "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;w<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Height "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Masked "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%d"</span>, <span class="k3">&amp;</span>cur-&gt;masked<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>    cur-&gt;frames <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k2">)</span> <span class="k3">*</span> cur-&gt;num_frames<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>    <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> cur-&gt;num_frames<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number"> 109</span>    <span class="k2">{</span>
<span class="number"> 110</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Enter filename for frame %d (bmp). -&gt; "</span>, i <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%s"</span>, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>      tmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span>filename, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>      cur-&gt;frames<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>cur-&gt;w, cur-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>tmp, cur-&gt;frames<span class="k3">&lt;</span>i&gt;, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, cur-&gt;w, cur-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>    <span class="k2">}</span>
<span class="number"> 116</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Enter output filename -&gt; "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_670.html" target="_blank">scanf</a><span class="k2">(</span><span class="s">"%s"</span>, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>    save_abitmap<span class="k2">(</span>filename, cur<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Yay! We didnt crash!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>  <span class="k2">}</span>
<span class="number"> 121</span><span class="k2">}</span>
<span class="number"> 122</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Fri, 08 Sep 2006 02:43:36 +0000</pubDate>
	</item>
</rss>
