<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Making a grabber for Mugen&#39;s SFF file format</title>
		<link>http://www.allegro.cc/forums/view/342381</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 02 Apr 2004 19:20:51 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,<br />    Does anyone have ever do a grabber to load a Mugen&#39;s sff file format or fnt file format for Allegro or can help making one, for KOF91 project ( <a href="http://koflinux.sourceforge.net">http://koflinux.sourceforge.net</a> )?<br />     Thanks a lot for the help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Mon, 15 Mar 2004 16:23:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>why you want to write a new grabber.<br />You can make plugins for Allegro&#39;s current grabber.</p><p>It&#39;s also possible that you can load your file without a plugin.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zebellah)</author>
		<pubDate>Tue, 16 Mar 2004 00:32:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t specially want to write a new grabber, nor plugins, nor specific function. I just want to know if somebody have ever do it and would like to share his code with me to save me lot of time writing one of this solution. Especially because I&#39;m not really familiar with file structure loading.<br />If nobody never do such a thing I will publish it when I wrote it (time, time, time) as part of the KOF91 source code.<br />Thanks a lot for any help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Tue, 16 Mar 2004 14:26:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;d like to help, but I can&#39;t find a file spec for either sff or fnt.<br />Care to share a link?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Tue, 16 Mar 2004 14:39:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks a lot spellcaster,<br />Here is the définition of the formats:
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
/*--| SFF file structure<br />|--------------------------------------------------*\<br />  Version 1.01<br />HEADER (512 bytes)<br />------<br />Bytes<br />00-11  &quot;ElecbyteSpr\0&quot; signature				[12]<br />12-15  1 verhi, 1 verlo, 1 verlo2, 1 verlo3			[04]<br />16-19  Number of groups						[04]<br />20-24  Number of images						[04]<br />24-27  File offset where first subfile is located		[04]<br />28-31  Size of subheader in bytes				[04]<br />32     Palette type (1=SPRPALTYPE_SHARED or 0=SPRPALTYPE_INDIV)	[01]<br />33-35  Blank; set to zero					[03]<br />36-511 Blank; can be used for comments				[476]</p><p>SUBFILEHEADER (32 bytes)<br />-------<br />Bytes<br />00-03 File offset where next subfile in the &quot;linked list&quot; is	[04]<br />      located.  Null if last subfile</p><p>04-07 Subfile length (not including header)			[04]<br />      Length is 0 if it is a linked sprite<br />08-09 Image axis X coordinate					[02]<br />10-11 Image axis Y coordinate					[02]<br />12-13 Group number						[02]<br />14-15 Image number (in the group)				[02]<br />16-17 Index of previous copy of sprite (linked sprites only)	[02]<br />      This is the actual<br />18    True if palette is same as previous image			[01]<br />19-31 Blank; can be used for comments				[14]<br />32-   PCX graphic data. If palette data is available, it is the last<br />      768 bytes.<br />*--------------------------------------------------------------------------*/</p><p>/*--| SND file structure<br />|--------------------------------------------------*\<br />  Version 1.01<br />HEADER<br />------<br />Bytes<br />00-11  &quot;ElecbyteSnd\0&quot; signature				[12]<br />12-15  4 verhi, 4 verlo						[04]<br />16-19  Number of sounds						[04]<br />20-23  File offset where first subfile is located.		[04]<br />24-511 Blank; can be used for comments.				[488]</p><p>SUBFILEHEADER<br />-------<br />Bytes<br />00-03 File offset where next subfile in the linked list is	[04]<br />      located. Null if last subfile.<br />04-07 Subfile length (not including header.)			[04]<br />08-11 Group number						[04]<br />12-15 Sample number						[04]<br />08-   Sound data (WAV)</p><p>*--------------------------------------------------------------------------*/</p><p>/*--| FNT file structure <br />|--------------------------------------------------*\<br />/*
</p><ul><li><p>Very simple file format, formed by concatenating a pcx file and a text
</p></li><li><p>file together and prepending a header.
</p></li><li><p>May be optimized for size by stripping the text file of comments before
</p></li><li><p>adding it to the .fnt file. Be sure text data comes last in the file.
</p></li></ul><p>*/</p><p>  Version 1.0<br />HEADER<br />------<br />Bytes<br />00-11  &quot;ElecbyteFnt\0&quot; signature                                         <br />[12]<br />12-15  2 verhi, 2 verlo                                                  <br />[04]<br />16-20  File offset where PCX data is located.                            <br />[04]<br />20-23  Length of PCX data in bytes.                                      <br />[04]<br />24-27  File offset where TEXT data is located.                           <br />[04]<br />28-31  Length of TEXT data in bytes.                                     <br />[04]<br />32-63  Blank; can be used for comments.                                  <br />[40]<br />*--------------------------------------------------------------------------*/
</p></div></div><p>
I can&#39;t myself explain everything and hope this will look simplest for you than for me.<br />Thanks a lot if you can help me
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Fri, 19 Mar 2004 01:11:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>it seems to be pretty straight forward.<br />I&#39;ll see what I can do <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Tue, 23 Mar 2004 16:25:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It will realy help me, thanks a lot.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Tue, 23 Mar 2004 16:36:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just a couple of questions:</p><p>Do you have some files I could test my loader with?<br />What output do you expect? For the SFF file, you could get a list or an array of BITMAPs + some extra data (like the (x,y) offset; group, index, etc.) is that what you want?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Tue, 23 Mar 2004 18:00:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could download Mugen on my website:<br /><a href="http://zesensei.free.fr/mugen/tools/mug10414.exe"> http://zesensei.free.fr/mugen/tools/mug10414.exe</a> It has fnt, sff, snd files.<br />For me a good result would be:<br />for sff and snd a linked list with a structure of this type:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> sprites<span class="k2">{</span>
<span class="k1">int</span> group<span class="k2">;</span>
<span class="k1">int</span> number<span class="k2">;</span>
<span class="k1">int</span> x_axis<span class="k2">;</span>
<span class="k1">int</span> y_axis<span class="k2">;</span>
<span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span> image<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/RGB" target="_blank"><span class="a">RGB</span></a> <span class="k3">*</span> palette<span class="k2">;</span>
<span class="k1">struct</span> sprites <span class="k3">*</span> next<span class="k2">;</span> 
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
and same for sound.<br />For fnt it will be great it Fonts became Allegro font.<br />Thanks for the help
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Wed, 24 Mar 2004 14:49:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, here&#039;s the sff loader.<br />Right now it exports a linked list... but you can change that easily so it returns an array. Just check the source.</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">/**</span>
<span class="number">  2</span><span class="c"> loader.h</span>
<span class="number">  3</span><span class="c"> </span>
<span class="number">  4</span><span class="c"> Mugen SFF Loader (Header)</span>
<span class="number">  5</span><span class="c"> written by Lennart Steinke (http://www.steinke.net) </span>
<span class="number">  6</span><span class="c"> */</span>
<span class="number">  7</span><span class="p">#ifndef SFF_LOADER</span>
<span class="number">  8</span><span class="p">#define SFF_LOADER</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number"> 13</span>    <span class="k1">char</span> magic<span class="k2">[</span><span class="n">12</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">char</span> version<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">int</span>  countGroups<span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">int</span>  countImages<span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">int</span>  offsetFirstSubFile<span class="k2">;</span>
<span class="number"> 18</span>    <span class="k1">int</span>  sizeOfSubfileHeader<span class="k2">;</span>
<span class="number"> 19</span>    <span class="k1">char</span> palType<span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">char</span> padding<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 21</span>    <span class="k1">char</span> comment<span class="k2">[</span><span class="n">476</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span> SFFHeader<span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number"> 25</span>    <span class="k1">int</span>   nextSubFile<span class="k2">;</span>
<span class="number"> 26</span>    <span class="k1">int</span>   sizeOfData<span class="k2">;</span>
<span class="number"> 27</span>    <span class="k1">short</span> x<span class="k2">;</span>
<span class="number"> 28</span>    <span class="k1">short</span> y<span class="k2">;</span>
<span class="number"> 29</span>    <span class="k1">short</span> group<span class="k2">;</span>
<span class="number"> 30</span>    <span class="k1">short</span> curIndex<span class="k2">;</span>
<span class="number"> 31</span>    <span class="k1">short</span> prevIndex<span class="k2">;</span>
<span class="number"> 32</span>    <span class="k1">char</span>  reusePalette<span class="k2">;</span>
<span class="number"> 33</span>    <span class="k1">char</span>  comment<span class="k2">[</span><span class="n">13</span><span class="k2">]</span><span class="k2">;</span>   
<span class="number"> 34</span>    <span class="k1">char</span>  pcxData<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 35</span><span class="k2">}</span> SFFSubFileHeader<span class="k2">;</span>
<span class="number"> 36</span>
<span class="number"> 37</span><span class="k1">typedef</span> <span class="k1">struct</span> SFFEntryStruct <span class="k2">{</span>
<span class="number"> 38</span>    <span class="k1">short</span>   x, y, group, curIndex, prevIndex<span class="k2">;</span>
<span class="number"> 39</span>    <span class="k1">char</span>    isLinkedImage<span class="k2">;</span>
<span class="number"> 40</span>    <a href="http://www.allegro.cc/manual/RGB" target="_blank"><span class="a">RGB</span></a><span class="k3">*</span>    pal<span class="k2">;</span>
<span class="number"> 41</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> image<span class="k2">;</span>
<span class="number"> 42</span>    <span class="k1">char</span>    comment<span class="k2">[</span><span class="n">13</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 43</span>    
<span class="number"> 44</span>    <span class="k1">struct</span> SFFEntryStruct <span class="k3">*</span>next<span class="k2">;</span>
<span class="number"> 45</span><span class="k2">}</span> SFFEntry<span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span><span class="p">#define SFF_LOAD_RET_TYPE SFFEntry*</span>
<span class="number"> 48</span>
<span class="number"> 49</span>SFF_LOAD_RET_TYPE sffLoad<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"> 50</span>SFF_LOAD_RET_TYPE sffLoadFromMemory<span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span>memory<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span><span class="p">#endif</span>
</div></div><p>

Here&#039;s the implementation of the loader:
</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">/**</span>
<span class="number">   2</span><span class="c"> loader.c</span>
<span class="number">   3</span><span class="c"> Mugen SFF Loader (source)</span>
<span class="number">   4</span><span class="c"> written by Lennart Steinke (http://www.steinke.net) </span>
<span class="number">   5</span><span class="c"> */</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   8</span><span class="p">#include "loader.h"</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">int</span> sff_memloadInt<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>data, <span class="k1">int</span> <span class="k3">*</span>ofs<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  11</span>    <span class="k1">int</span> a,b<span class="k2">;</span>
<span class="number">  12</span>    a <span class="k3">=</span> data<span class="k2">[</span><span class="k3">*</span>ofs<span class="k2">]</span><span class="k2">;</span>
<span class="number">  13</span>    <span class="k2">(</span><span class="k3">*</span>ofs<span class="k2">)</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  14</span>    b <span class="k3">=</span> data<span class="k2">[</span><span class="k3">*</span>ofs<span class="k2">]</span><span class="k2">;</span>
<span class="number">  15</span>    <span class="k2">(</span><span class="k3">*</span>ofs<span class="k2">)</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  16</span>    <span class="k1">return</span> a <span class="k3">+</span> <span class="k2">(</span>b <span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">8</span><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><a href="http://www.allegro.cc/manual/RGB" target="_blank"><span class="a">RGB</span></a><span class="k3">*</span> sffLoadPaletteFromMemory<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>data<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  20</span>    <a href="http://www.allegro.cc/manual/RGB" target="_blank"><span class="a">RGB</span></a><span class="k3">*</span> pal <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/RGB" target="_blank"><span class="a">RGB</span></a><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/RGB" target="_blank"><span class="a">RGB</span></a><span class="k2">)</span> <span class="k3">*</span> <span class="n">256</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>    <span class="k1">int</span>  a, ofs<span class="k2">;</span>
<span class="number">  22</span>    ofs <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  23</span>    <span class="k1">for</span> <span class="k2">(</span>a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> <span class="n">256</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  24</span>        pal<span class="k2">[</span>a<span class="k2">]</span>.r <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  25</span>        pal<span class="k2">[</span>a<span class="k2">]</span>.g <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  26</span>        pal<span class="k2">[</span>a<span class="k2">]</span>.b <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  27</span>    <span class="k2">}</span>
<span class="number">  28</span>    <span class="k1">return</span> pal<span class="k2">;</span>
<span class="number">  29</span><span class="k2">}</span>
<span class="number">  30</span>
<span class="number">  31</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> sffLoadPcxFromMemory<span class="k2">(</span><span class="k1">char</span><span class="k3">*</span> data<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  32</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  33</span>    
<span class="number">  34</span>    <span class="c">/* skip the first 3 bytes */</span>
<span class="number">  35</span>    <span class="k1">int</span>     ofs <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  36</span>    <span class="k1">char</span>    planes <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  37</span>    <span class="k1">int</span>     width  <span class="k3">=</span> <span class="k3">-</span>sff_memloadInt<span class="k2">(</span>data, <span class="k3">&amp;</span>ofs<span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>    <span class="k1">int</span>     height <span class="k3">=</span> <span class="k3">-</span>sff_memloadInt<span class="k2">(</span>data, <span class="k3">&amp;</span>ofs<span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>    <span class="k1">int</span>     bpp  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  40</span>    <span class="k1">int</span>     bytesPerLine <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  41</span>    <span class="k1">int</span>     x,y<span class="k2">;</span>
<span class="number">  42</span>    <span class="k1">int</span>     value<span class="k2">;</span>
<span class="number">  43</span>    <span class="k1">int</span>     count<span class="k2">;</span>
<span class="number">  44</span>    
<span class="number">  45</span>    width <span class="k3">+</span><span class="k3">=</span> sff_memloadInt<span class="k2">(</span>data, <span class="k3">&amp;</span>ofs<span class="k2">)</span> <span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  46</span>    height<span class="k3">+</span><span class="k3">=</span> sff_memloadInt<span class="k2">(</span>data, <span class="k3">&amp;</span>ofs<span class="k2">)</span> <span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  47</span>    
<span class="number">  48</span>    <span class="c">/* skip 4 bytes (dpi) */</span>
<span class="number">  49</span>    ofs <span class="k3">+</span><span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  50</span>    
<span class="number">  51</span>    <span class="c">/* skip 16 color palette */</span>
<span class="number">  52</span>    ofs <span class="k3">+</span><span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>
<span class="number">  53</span>    
<span class="number">  54</span>    <span class="c">/* padding */</span>
<span class="number">  55</span>    ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  56</span>        
<span class="number">  57</span>        
<span class="number">  58</span>    bpp  <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span> <span class="k3">*</span><span class="n">8</span><span class="k2">;</span>
<span class="number">  59</span>    <span class="k1">if</span> <span class="k2">(</span>bpp <span class="k3">!</span><span class="k3">=</span> <span class="n">8</span><span class="k2">)</span> <span class="k2">{</span> <span class="c">/* || bpp != 24) {*/</span>
<span class="number">  60</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  61</span>    <span class="k2">}</span>
<span class="number">  62</span>    
<span class="number">  63</span>    bytesPerLine <span class="k3">=</span> sff_memloadInt<span class="k2">(</span>data, <span class="k3">&amp;</span>ofs<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>    
<span class="number">  65</span>    <span class="c">/* image data starts at ofs 128*/</span>
<span class="number">  66</span>    ofs <span class="k3">=</span> <span class="n">128</span><span class="k2">;</span>
<span class="number">  67</span>    bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap_ex" target="_blank"><span class="a">create_bitmap_ex</span></a><span class="k2">(</span>bpp, width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</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> height<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  69</span>        x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  70</span>        <span class="k1">while</span> <span class="k2">(</span>x <span class="k3">&lt;</span> bytesPerLine<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  71</span>            value <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  72</span>            
<span class="number">  73</span>            <span class="c">/* check if upper 2 bit are set */</span>
<span class="number">  74</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>value <span class="k3">&amp;</span> <span class="n">0xc0</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0xc0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  75</span>                <span class="c">/* bits are set, that means the</span>
<span class="number">  76</span><span class="c">                   lower 6 bit contain the repeat count,</span>
<span class="number">  77</span><span class="c">                   and the color is stored in the next byte</span>
<span class="number">  78</span><span class="c">                */</span>
<span class="number">  79</span>                count <span class="k3">=</span> value <span class="k3">&amp;</span> <span class="n">0x3f</span><span class="k2">;</span>
<span class="number">  80</span>                value <span class="k3">=</span> data<span class="k2">[</span>ofs<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  81</span>            <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  82</span>                <span class="c">/* value contains the color already */</span>
<span class="number">  83</span>                count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  84</span>            <span class="k2">}</span>
<span class="number">  85</span>            <span class="k1">if</span> <span class="k2">(</span>bpp <span class="k3">=</span><span class="k3">=</span> <span class="n">8</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  86</span>                <span class="k1">while</span> <span class="k2">(</span>count <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>                    <span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&lt;</span> bmp-&gt;w<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  88</span>                        bmp-&gt;line<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span> <span class="k3">=</span> value<span class="k2">;</span>
<span class="number">  89</span>                        <span class="k3">+</span><span class="k3">+</span>x<span class="k2">;</span>
<span class="number">  90</span>                    <span class="k2">}</span>
<span class="number">  91</span>                    count--<span class="k2">;</span>
<span class="number">  92</span>                <span class="k2">}</span>
<span class="number">  93</span>            <span class="k2">}</span>
<span class="number">  94</span>        <span class="k2">}</span>
<span class="number">  95</span>    <span class="k2">}</span>
<span class="number">  96</span>    
<span class="number">  97</span>    
<span class="number">  98</span>    <span class="k1">return</span> bmp<span class="k2">;</span>
<span class="number">  99</span><span class="k2">}</span>
<span class="number"> 100</span>
<span class="number"> 101</span>SFF_LOAD_RET_TYPE sffLoadFromMemory<span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span>memory<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 102</span>    <span class="k1">char</span><span class="k3">*</span>      data       <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span> memory<span class="k2">;</span>
<span class="number"> 103</span>    SFFHeader<span class="k3">*</span> header     <span class="k3">=</span> <span class="k2">(</span>SFFHeader<span class="k3">*</span><span class="k2">)</span> memory<span class="k2">;</span>
<span class="number"> 104</span>    SFFSubFileHeader <span class="k3">*</span>sub <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 105</span>    <span class="k1">int</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a>      <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 106</span>    SFFEntry<span class="k3">*</span>  first      <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 107</span>    SFFEntry<span class="k3">*</span>  cur        <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 108</span>    
<span class="number"> 109</span>    SFFEntry<span class="k3">*</span><span class="k3">*</span>  sprArray   <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 110</span>    
<span class="number"> 111</span>    sprArray <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_81.html" target="_blank">calloc</a><span class="k2">(</span>header-&gt;countImages, <span class="k1">sizeof</span><span class="k2">(</span>SFFEntry<span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>    
<span class="number"> 113</span>    sub <span class="k3">=</span> <span class="k2">(</span>SFFSubFileHeader<span class="k3">*</span><span class="k2">)</span> <span class="k3">&amp;</span>data<span class="k2">[</span>header-&gt;offsetFirstSubFile<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 114</span>    <span class="k1">while</span> <span class="k2">(</span>sub <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>        
<span class="number"> 115</span>        <span class="k1">if</span> <span class="k2">(</span>first <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 116</span>            first <span class="k3">=</span> <span class="k2">(</span>SFFEntry<span class="k3">*</span><span class="k2">)</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_81.html" target="_blank">calloc</a><span class="k2">(</span><span class="n">1</span>, <span class="k1">sizeof</span><span class="k2">(</span>SFFEntry<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>            cur   <span class="k3">=</span> first<span class="k2">;</span>
<span class="number"> 118</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 119</span>            cur-&gt;next <span class="k3">=</span> <span class="k2">(</span>SFFEntry<span class="k3">*</span><span class="k2">)</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_81.html" target="_blank">calloc</a><span class="k2">(</span><span class="n">1</span>, <span class="k1">sizeof</span><span class="k2">(</span>SFFEntry<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>            cur <span class="k3">=</span> cur-&gt;next<span class="k2">;</span>
<span class="number"> 121</span>        <span class="k2">}</span>
<span class="number"> 122</span>        cur-&gt;x <span class="k3">=</span> sub-&gt;x<span class="k2">;</span>
<span class="number"> 123</span>        cur-&gt;y <span class="k3">=</span> sub-&gt;y<span class="k2">;</span>
<span class="number"> 124</span>        cur-&gt;group <span class="k3">=</span> sub-&gt;group<span class="k2">;</span>
<span class="number"> 125</span>        cur-&gt;curIndex <span class="k3">=</span> sub-&gt;curIndex<span class="k2">;</span>
<span class="number"> 126</span>        cur-&gt;prevIndex <span class="k3">=</span> sub-&gt;prevIndex<span class="k2">;</span>        
<span class="number"> 127</span>        
<span class="number"> 128</span>        <span class="k1">if</span> <span class="k2">(</span>sub-&gt;sizeOfData <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 129</span>            <span class="c">// This is just a link to another image</span>
<span class="number"> 130</span>            cur-&gt;isLinkedImage <span class="k3">=</span> TRUE<span class="k2">;</span>            
<span class="number"> 131</span>            cur-&gt;image <span class="k3">=</span> sprArray<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>image<span class="k2">;</span>
<span class="number"> 132</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>            
<span class="number"> 133</span>            cur-&gt;isLinkedImage <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 134</span>            cur-&gt;image <span class="k3">=</span> sffLoadPcxFromMemory<span class="k2">(</span>sub-&gt;pcxData<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span>cur-&gt;comment, sub-&gt;comment, <span class="n">13</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>sub-&gt;reusePalette<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 137</span>                <span class="c">/* Tha palette is stored in the last 768 bytes</span>
<span class="number"> 138</span><span class="c">                   of the pcx data</span>
<span class="number"> 139</span><span class="c">                */</span>
<span class="number"> 140</span>                cur-&gt;pal <span class="k3">=</span> sffLoadPaletteFromMemory<span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k2">(</span>sub-&gt;pcxData<span class="k2">[</span>sub-&gt;sizeOfData <span class="k3">-</span> <span class="n">768</span><span class="k2">]</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>                
<span class="number"> 142</span>            <span class="k2">}</span>
<span class="number"> 143</span>        <span class="k2">}</span>
<span class="number"> 144</span>        sprArray<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span> <span class="k3">=</span> cur<span class="k2">;</span>
<span class="number"> 145</span>        
<span class="number"> 146</span>        <span class="c">/*</span>
<span class="number"> 147</span><span class="c">        According to the docs, the last subfile is indicated by a 0.</span>
<span class="number"> 148</span><span class="c">        During tests it became obvious that this is not the case.</span>
<span class="number"> 149</span><span class="c">        Thus I'm checking both for 0 and check if the index is </span>
<span class="number"> 150</span><span class="c">        smaller than the number of sprites in the file.</span>
<span class="number"> 151</span><span class="c">        */</span>
<span class="number"> 152</span>        <span class="k3">+</span><span class="k3">+</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number"> 153</span>        <span class="k1">if</span> <span class="k2">(</span>sub-&gt;nextSubFile <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> header-&gt;countImages<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 154</span>            sub <span class="k3">=</span> <span class="k2">(</span>SFFSubFileHeader<span class="k3">*</span><span class="k2">)</span> <span class="k3">&amp;</span>data<span class="k2">[</span>sub-&gt;nextSubFile<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 155</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 156</span>            sub <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 157</span>        <span class="k2">}</span>                
<span class="number"> 158</span>    <span class="k2">}</span>
<span class="number"> 159</span>    
<span class="number"> 160</span>    <span class="c">/* NOTE: You might want to return the sprArray instead;</span>
<span class="number"> 161</span><span class="c">       if so, don't free it here :)</span>
<span class="number"> 162</span><span class="c">    */</span>
<span class="number"> 163</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>sprArray<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>    
<span class="number"> 165</span>    <span class="k1">return</span> first<span class="k2">;</span>
<span class="number"> 166</span><span class="k2">}</span>
<span class="number"> 167</span>
<span class="number"> 168</span>SFF_LOAD_RET_TYPE sffLoad<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"> 169</span>    <span class="k1">long</span> size  <span class="k3">=</span> file_size<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>    <span class="k1">long</span> toGo  <span class="k3">=</span> size<span class="k2">;</span>
<span class="number"> 171</span>    <span class="k1">long</span> start <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 172</span>    <span class="k1">long</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 173</span>    FILE <span class="k3">*</span>f    <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 174</span>    <span class="k1">char</span> <span class="k3">*</span>data <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 175</span>    SFF_LOAD_RET_TYPE ret <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 176</span>    
<span class="number"> 177</span>    <span class="k1">if</span> <span class="k2">(</span>size <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 178</span>        f <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span>filename, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>        data <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>size<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>        <span class="k1">while</span> <span class="k2">(</span>toGo <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_313.html" target="_blank">feof</a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 181</span>            count  <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_349.html" target="_blank">fread</a><span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>data<span class="k2">[</span>start<span class="k2">]</span><span class="k2">)</span>,<span class="n">1</span>,toGo, f<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>            <span class="k1">if</span> <span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 183</span>                <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>            <span class="k2">}</span>
<span class="number"> 185</span>                
<span class="number"> 186</span>            toGo  <span class="k3">-</span><span class="k3">=</span> count<span class="k2">;</span>
<span class="number"> 187</span>            start <span class="k3">+</span><span class="k3">=</span> count<span class="k2">;</span>
<span class="number"> 188</span>        <span class="k2">}</span>
<span class="number"> 189</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span>        
<span class="number"> 190</span>        ret <span class="k3">=</span>  sffLoadFromMemory<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>    <span class="k2">}</span>
<span class="number"> 193</span>    <span class="k1">return</span> ret<span class="k2">;</span>
<span class="number"> 194</span><span class="k2">}</span>
</div></div><p>

And here a small demo:
</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">/**</span>
<span class="number">  2</span><span class="c"> testloader.c</span>
<span class="number">  3</span><span class="c"> </span>
<span class="number">  4</span><span class="c"> Mugen SFF Loader (test)</span>
<span class="number">  5</span><span class="c"> written by Lennart Steinke (http://www.steinke.net) </span>
<span class="number">  6</span><span class="c"> */</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">  9</span><span class="p">#include "loader.h"</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">int</span> setGfxMode<span class="k2">(</span><span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">int</span> bpp<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">16</span>, <span class="n">15</span>, <span class="n">32</span>, <span class="n">24</span>, <span class="n">8</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 13</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">for</span> <span class="k2">(</span>a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> bpp<span class="k2">[</span>a<span class="k2">]</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</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>bpp<span class="k2">[</span>a<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k1">if</span> <span class="k2">(</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_WINDOWED, w, h, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>            <span class="k1">return</span> <span class="n">1</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="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>
<span class="number"> 24</span>
<span class="number"> 25</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 26</span>
<span class="number"> 27</span>    SFFEntry <span class="k3">*</span>first, <span class="k3">*</span>cur<span class="k2">;</span>
<span class="number"> 28</span>    <span class="k1">int</span> lastKey <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 29</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"> 30</span>    
<span class="number"> 31</span>    first <span class="k3">=</span> sffLoad<span class="k2">(</span>argc <span class="k3">&gt;</span> <span class="n">1</span> ? argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k2">:</span> <span class="s">"intro.sff"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    
<span class="number"> 33</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>setGfxMode<span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 34</span>        <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"oups!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>    <span class="k2">}</span>
<span class="number"> 37</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"> 38</span>    cur <span class="k3">=</span> first<span class="k2">;</span>
<span class="number"> 39</span>    
<span class="number"> 40</span>    <span class="k1">if</span> <span class="k2">(</span>cur-&gt;pal<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 41</span>        <a href="http://www.allegro.cc/manual/set_palette" target="_blank"><span class="a">set_palette</span></a><span class="k2">(</span>cur-&gt;pal<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    <span class="k2">}</span>
<span class="number"> 43</span>    
<span class="number"> 44</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="k2">{</span>
<span class="number"> 45</span>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>cur-&gt;image, <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>, cur-&gt;x, cur-&gt;y, cur-&gt;image-&gt;w, cur-&gt;image-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>        
<span class="number"> 47</span>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 48</span>            <span class="k1">if</span> <span class="k2">(</span>lastKey <span class="k3">!</span><span class="k3">=</span> KEY_SPACE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>                lastKey <span class="k3">=</span> KEY_SPACE<span class="k2">;</span>
<span class="number"> 50</span>                                
<span class="number"> 51</span>                <span class="k1">if</span> <span class="k2">(</span>cur-&gt;next<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 52</span>                    cur <span class="k3">=</span> cur-&gt;next<span class="k2">;</span>
<span class="number"> 53</span>                <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 54</span>                    clear<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>                    cur <span class="k3">=</span> first<span class="k2">;</span>
<span class="number"> 56</span>                <span class="k2">}</span>
<span class="number"> 57</span>                <span class="k1">if</span> <span class="k2">(</span>cur-&gt;pal<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 58</span>                    <a href="http://www.allegro.cc/manual/set_palette" target="_blank"><span class="a">set_palette</span></a><span class="k2">(</span>cur-&gt;pal<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>                <span class="k2">}</span>
<span class="number"> 60</span>            <span class="k2">}</span>
<span class="number"> 61</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 62</span>            lastKey <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 63</span>        <span class="k2">}</span>
<span class="number"> 64</span>    <span class="k2">}</span>
<span class="number"> 65</span>        
<span class="number"> 66</span>    
<span class="number"> 67</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 68</span><span class="k2">}</span>
<span class="number"> 69</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>


Please note that the file specs above seem to be incorrect.<br />Some fields seem to have different sizes than listed. And in some cases the logic doesn&#039;t seem to be correct (like the way to determine the last subfile).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Wed, 24 Mar 2004 22:03:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks a lot for the code, it works well.<br />I think linked list will be fine, if there&#39;s any problem I could easely convert it into array.<br />Could I use your code in KOF 91 project (it&#39;s opend source, you&#39;ll be mentionned in the developement team if you want)?<br />Do you think you can do the same thing for other formats?<br />If not, the sff management is already a huge part, thanks again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Thu, 25 Mar 2004 15:34:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sure, just use it - that&#39;s why I wrote it <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Regarding the array: It&#39;s already there, I&#39;m using it internally ofr index sprites - so if you want it, you could just change the return type to the array. That way you&#39;d have both array (since it was returned) and the linked list (since the array members are still linked).</p><p>I&#39;m working on the other formats. Just a question to the FNT format - the txt file is pretty simple, but for some chars the it looks weird... mainly for the [ and ] I guess. Not sure why. Is there any documentation for the TXT part of the FNT?<br />I think I could guess how it&#39;s composed... but that would be just a guess. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>(oh... and please answer to this post, so I can add the new loaders in my next reply <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />)<br />Might take some time though... the allegro font structure is quite complex IIRC - so I might have to play around with it a bit.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 25 Mar 2004 15:41:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks a lot,<br />here&#39;s a litle explanation of how the elecbyte&#39;s fntmaker works, it could help about the format:</p><p>====================<br />III. Fntmaker<br />====================</p><p>The fonts generated by fntmaker work for 2000.06.27 and newer versions<br />of M.U.G.E.N.</p><p>pcx file - Supply a pcx file which contains all the characters in your font<br />           alphabet, arranged from left to right in a single row. The pcx<br />           file must be an 8-bit color sprite.<br />txt file - Copy a txt file from work/font in custom.zip, and edit it to fit<br />           your font&#39;s pcx file. The first part is are the font settings.<br />           It is followed by character and offset pairs. The character is a<br />           letter or symbol in your pcx file you wish to represent. The<br />           offset is the starting x location within the pcx file of the<br />           character. For example,<br />             B 55<br />           means that character &#39;B&#39; begins at an offset of 55 pixels from the<br />           left. Semicolon is treated as a comment character. To put in<br />           entries for special characters such as a semi-colon, you need to<br />           use a hex sequence representing the ASCII number of the<br />           character. Hex sequences start with 0x. For example, a semicolon<br />           (ASCII value 5B) starting at pixel 100 would have an entry:<br />             0x5B 100</p><p>Fonts with more than one color use &quot;color banks&quot; in their palette to store<br />multiple color arrangements. Each color bank in the palette has a number of<br />palette entries equal to the value of the &quot;Color&quot; parameter in the font&#39;s<br />txt file. The first color bank starts at color 255, and its entries are<br />laid out in reverse palette order. The next color bank&#39;s first palette entry<br />starts immediately following the first, and so on. For example, a font with<br />16 colors has its first bank&#39;s entries from 255 to 240. The second bank has<br />entries 239 to 224 and so on. The number of banks you can have is limited by<br />the palette space.</p><p>I hope it could help you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Thu, 25 Mar 2004 16:39:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for that info... makes sense now <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Regarding the multiple color banks... allegro can&#39;t handle that. <br />I can copy the data into an allegro FONT and return a struct containing both FONT and palette .. but the actual color bank switch has to be made programmtically - if you&#39;re using hicolor display you could change the palette, set the changed pal and blit it. If you&#39;re in a 8 bit mode, things get a bit more messy.</p><p>You could either &quot;clone&quot; the fonts to get different versions (in different color sets) or create totally new font rendering functions.</p><p>Cloning would be faster, more easy to implement but does of course waste some memory.</p><p>What do you prefer?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 25 Mar 2004 19:06:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know you weren&#39;t directing this at me, but here&#39;s an idea. What if you load all the font data as true-color bitmap (according to their color banks), then do an optimized palette generation on it and make it an 8-bit bitmap to cut up for the font? Granted it won&#39;t look the same, but if you&#39;re gonna put it in FONT, you won&#39;t have much choice. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 25 Mar 2004 19:27:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The font is already an 8bit bmp. It has it&#39;s own palette (256 colors). The point is that you&#39;d have to add an offset to each pixel to support the color bank feature.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 25 Mar 2004 19:46:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm.. I&#39;m not sure I understand the color banks portion then. What does it do? Whats its purpose?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 25 Mar 2004 20:08:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Assume you have a font with a gradient red-&gt;yellow using 8 colors.<br />The font is using the colors 247-255.<br />These 8 colors are color bank 0.<br />You could now use another 8 indices in the palette to define a blue-&gt;white gradient. Those colors would now be color bank 1.</p><p>I guess that mugens font drawing allows you to specify the color bank... so you could draw a text with font A, color bank 0 (red-&gt;yellow text) or using color bank 1 (blue-&gt;white text).</p><p>Allegro&#39;s glyph drawing functions don&#39;t work that way.</p><p>So, I could either generate several fonts (not much efford, not really memory wasting) or create functions mimicing the color bank switching.</p><p>I think, I&#39;ll go for the creation of multiple fonts <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 25 Mar 2004 20:15:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think the creation of clone fonts is a good idea, as it will become possible to have palettes that are not specify with the original font picture&#39;s pal.<br />Spellcaster is right, mugen call a font and then its color bank to show it with right palette. I think a call to an array of fonts (or linked list) with an index that is correspinding to the bank used to make the clone will be a good idea.<br />A little explaination too, Mugen use fixed fonts and proportional fonts. I don&#39;t understand really the differences, but it&#39;s one of the attribute you specify when you create a font. I don&#39;t know if it&#39;s really important, but I think I&#39;ve seen something like that (fixed and proportionnal) in Allegro doc.<br />Thanks a lot for the help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Fri, 26 Mar 2004 14:16:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Mugen use fixed fonts and proportional fonts. I don&#39;t understand really the differences</p></div></div><p>

In a fixed width font all characters are the same width (for instance, W and I). In a proportional font, W is wider than I.</p><p>spellcaster: if you really wanted to, you could probably hack the FONT vtable so that it can draw the colourbanked fonts. That&#39;s probably going to be a lot of work for little obvious gain over what you&#39;re proposing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Fri, 26 Mar 2004 15:44:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t think that this is needed. Mugen fonts are pretty small - I doubt it&#39;ll be a big overhead if one would simply clone the fonts.</p><p>I&#39;ll add a 
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a><span class="k3">*</span> fntGetColorBankFont<span class="k2">(</span> FntFont<span class="k3">*</span> fnt, <span class="k1">int</span> bank<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
to my code. Or something similar. If somebody can come up with a good name for that function, I&#39;d be grateful <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Expect the font functions today (sorry... I was pretty busy yesterday).</p><p>Regarding the proportional fonts: What evert said... in theory, at least. It seems like a lot of mugen fonts are labeled as &quot;proportional&quot; but are in fact fixed size... but that&#39;s not a big problem, IMO.</p><p>I might need to bug Bruce about the wave formats, though <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Fri, 26 Mar 2004 15:57:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks again,<br />FONT* fntGetColorBankFont( FntFont* fnt, int bank); could become get_cfont( FntFont* fnt, int bank); for get colored font??<br />I&#39;m not really good at function baptism...<br />Thanks for the help
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Sun, 28 Mar 2004 18:20:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s the loader.<br />I decided to create different palettes instead of different fonts - so this solution will only work in a high color mode.<br />If you want to support 8 bit, you need to clone the font and change the actual pixel data of the glyphs.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 01 Apr 2004 21:22:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks again, and again,<br />    It works good for some fonts. Just a detail, the code didn&#39;t compile on my Win98 with Mingw32.<br />    It was because of a detail: declaration of variables MUST be before calling any function with my GCC. So for the testloader.c I got to put allegro_init() after declarations. Same problem in loader.c where I got to declare int count, and char * txt at the beginning of the function in order to make it compile.<br />    I learn a lot with your code fully documented, really clean and structured.</p><p>    For the bugs, here are some fonts that didn&#39;t work with the testloader prog. And if I pass the same name as the exemple font you give in your zip file (name1.fnt) as an argument color banks seems to disappear. Pretty weird...</p><p>    I&#39;ll look later the how of this... It works with some fnt, a great beginning.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Fri, 02 Apr 2004 13:37:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Get a new gcc - it should work with the later 3.0 versions... but to be honest, it was an mistake... <br />I normally try to declare my vars at the beginning. Regarding the testloader - I used only the font testing part and had the other stuff REMed. At the end I removed the comments and made a test run.</p><p>Since it worked, I was assuming it would be ok.
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> Same problem in loader.c where I got to declare int count, and char * txt </p></div></div><p>
Sorry. But, as I said, it&#39;ll work in any c99 compiler (say the later gccs). But I changed that - it wasn&#39;t intentional in the first place.<br />There&#39;s no need to put txt at the beginning, though. Just swap the char* txt; with the line above that.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>And if I pass the same name as the exemple font you give in your zip file (name1.fnt) as an argument color banks seems to disappear. Pretty weird...</p></div></div><p>
Check the testloader code. There&#39;s a bug in name1.fnt. If you split it (I think I have the split.c code in that zip as well) and look into the txt.txt file, you&#39;ll see that it has colors=1 in it. And that&#39;s wrong. The numbers of colors should be 16 for that font.<br />That&#39;s why I added a small hack inside the loader - if it is using the default font, then it&#39;ll override the number of colors.</p><p>EDIT:<br />Just in case I didn&#39;t put the split stuff in the zip, here it is:
</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 &lt;stdio.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;stdlib.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">int</span> readIntFrom<span class="k2">(</span>FILE <span class="k3">*</span>f, <span class="k1">int</span> ofs<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_354.html" target="_blank">fseek</a><span class="k2">(</span>f, ofs, SEEK_SET<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_349.html" target="_blank">fread</a><span class="k2">(</span><span class="k3">&amp;</span>i, <span class="n">4</span>, <span class="n">1</span>, f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">return</span> i<span class="k2">;</span></td></tr><tr><td class="number">9</td><td><span class="k2">}</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>    </td></tr><tr><td class="number">13</td><td>    FILE <span class="k3">*</span>f <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    FILE <span class="k3">*</span>o <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">int</span> pcxOfs <span class="k3">=</span> readIntFrom<span class="k2">(</span>f, <span class="n">16</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">int</span> pcxLen <span class="k3">=</span> readIntFrom<span class="k2">(</span>f, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">int</span> txtOfs <span class="k3">=</span> readIntFrom<span class="k2">(</span>f, <span class="n">24</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    <span class="k1">int</span> txtLen <span class="k3">=</span> readIntFrom<span class="k2">(</span>f, <span class="n">28</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    </td></tr><tr><td class="number">20</td><td>    <span class="k1">char</span> <span class="k3">*</span>buffer <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>    </td></tr><tr><td class="number">22</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"pcx: %i, %i\ntxt: %i, %i\n"</span>, pcxOfs, pcxLen, txtOfs, txtLen<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    </td></tr><tr><td class="number">24</td><td>    o <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">"pcx.pcx"</span>, <span class="s">"wb"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    buffer <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>pcxLen<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_354.html" target="_blank">fseek</a><span class="k2">(</span>f, pcxOfs, SEEK_SET<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_349.html" target="_blank">fread</a><span class="k2">(</span>buffer, <span class="n">1</span>, pcxLen, f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_371.html" target="_blank">fwrite</a><span class="k2">(</span>buffer, <span class="n">1</span>, pcxLen, o<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>o<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    </td></tr><tr><td class="number">32</td><td>    o <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">"txt.txt"</span>, <span class="s">"wb"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    buffer <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>txtLen<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_354.html" target="_blank">fseek</a><span class="k2">(</span>f, txtOfs, SEEK_SET<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_349.html" target="_blank">fread</a><span class="k2">(</span>buffer, <span class="n">1</span>, txtLen, f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_371.html" target="_blank">fwrite</a><span class="k2">(</span>buffer, <span class="n">1</span>, txtLen, o<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>o<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    </td></tr><tr><td class="number">40</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Fri, 02 Apr 2004 15:09:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the reply.<br />For the name1.fnt that&#39;s my fault, I haven&#39;t read that this fount was malformed.<br />For GCC I&#39;ll do so later, it could explain some warning I did&#39;nt have on others computers (or on Linux). Note: &lt;mem.h&gt; should not be include on my Mandrake 9.2, it didn&#39;t found it. <br />But what about fnts I put in my last post? Did you try them, did it work or crash (segmentation fault), like on my computer?<br />Do you have an idea fo the reason fo that crash?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Fri, 02 Apr 2004 15:30:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Fixed.<br />There was a bug in my pcx loading code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Fri, 02 Apr 2004 16:05:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Better and better...<br />All work good now. Thanks a lot.<br />Do you plan to do .snd as well?<br />I think I could release a new version of KOF 91 in some hours with your code and it will looks like far better than other versions...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Fri, 02 Apr 2004 17:10:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll look into the snd format as well, but I&#39;m not an expert with waveforms. On the other hand, I do have some spare time now...</p><p>Anyway, please reply to this post, so I can answer again as soon as I have something for you <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Fri, 02 Apr 2004 17:29:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well got to reply...<br />I&#39;ve made a new version of KOF 91 with fnt support (a really limited one, as I haven&#39;t fix every call to text for now).<br />It&#39;ll be ready for dowload (binaries and sources) on my website : <a href="http://zesensei.free.fr">http://zesensei.free.fr</a><br />It&#39;s already nicer than ever, thanks to you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (zesensei)</author>
		<pubDate>Fri, 02 Apr 2004 19:20:51 +0000</pubDate>
	</item>
</rss>
