<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Grabber With Allegro 5?</title>
		<link>http://www.allegro.cc/forums/view/618864</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 13 Oct 2023 20:46:25 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All,</p><p>Is it possible to use Grabber files with Allegro 5?  From what I&#39;m reading, the answer is no.  It looks like zip files and multiple commands for interfile locations etc.  I was just hoping I was misunderstanding.</p><p>Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 29 Sep 2023 00:43:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No grabber/datafile system. I&#39;m working on my own that loads a void pointer array similar to allegro 4 datafile. It uses an text file index.
</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>datafile
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  $header <span class="k3">=</span> <span class="s">"D"</span>
<span class="number">  4</span>  $base_path <span class="k3">=</span> <span class="s">"$(system.directory)/$(index.directory)"</span>
<span class="number">  5</span>
<span class="number">  6</span>  bitmap
<span class="number">  7</span>  <span class="k2">{</span>
<span class="number">  8</span>    $path <span class="k3">=</span> <span class="s">"$(base_path)/images"</span>
<span class="number">  9</span>    $header <span class="k3">=</span> <span class="s">"BITMAP"</span>
<span class="number"> 10</span>    logo
<span class="number"> 11</span>    <span class="k2">{</span>
<span class="number"> 12</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.path)/logo.bmp"</span>
<span class="number"> 13</span>      masked <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 14</span>    <span class="k2">}</span>
<span class="number"> 15</span>    icon
<span class="number"> 16</span>    <span class="k2">{</span>
<span class="number"> 17</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.path)/icon.png"</span>
<span class="number"> 18</span>      masked <span class="k3">=</span> <span class="k1">true</span>  
<span class="number"> 19</span>    <span class="k2">}</span>
<span class="number"> 20</span>    icon_sheet
<span class="number"> 21</span>    <span class="k2">{</span>
<span class="number"> 22</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.path)/icon_sheet.png"</span>
<span class="number"> 23</span>      masked <span class="k3">=</span> <span class="k1">true</span>  
<span class="number"> 24</span>    <span class="k2">}</span>
<span class="number"> 25</span>    monster
<span class="number"> 26</span>    <span class="k2">{</span>
<span class="number"> 27</span>      $path <span class="k3">=</span> <span class="s">"$(bitmap.path)/Monsters and animals"</span>
<span class="number"> 28</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.monster.path)/*.png"</span>
<span class="number"> 29</span>      masked <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 30</span>      sort <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 31</span>    <span class="k2">}</span>
<span class="number"> 32</span>  <span class="k2">}</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>

The tags with $name are variables accessed as $(name).</p><p>Specify path &amp; file name. If it needs alpha mask fix. Supports wildcards. I am still tweaking it and only have bitmaps supported. It has option to save a header file as well with indexing. That is important if end result is a void* array.</p><p>The above index outputs this header file
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">/* */</span>
<span class="number">  2</span><span class="c">/* */</span>
<span class="number">  3</span><span class="c">/* Date: 10:22:19 p.m.  9/27/2023 */</span> 
<span class="number">  4</span><span class="c">/* Do not hand edit! */</span>
<span class="number">  5</span>
<span class="number">  6</span>constexpr <span class="k1">auto</span> D_BITMAP_LOGO <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>                  <span class="c">/* BITMAP */</span>
<span class="number">  7</span>constexpr <span class="k1">auto</span> D_BITMAP_ICON_SHEET <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>            <span class="c">/* BITMAP */</span>
<span class="number">  8</span>constexpr <span class="k1">auto</span> D_BITMAP_ICON <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>                  <span class="c">/* BITMAP */</span>
<span class="number">  9</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0000 <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 10</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0001 <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 11</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0002 <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 12</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0003 <span class="k3">=</span> <span class="n">6</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 13</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0004 <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 14</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0005 <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 15</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0006 <span class="k3">=</span> <span class="n">9</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
<span class="number"> 16</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0007 <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 17</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0008 <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 18</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0009 <span class="k3">=</span> <span class="n">12</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 19</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0010 <span class="k3">=</span> <span class="n">13</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 20</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0011 <span class="k3">=</span> <span class="n">14</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 21</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0012 <span class="k3">=</span> <span class="n">15</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 22</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0013 <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 23</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0014 <span class="k3">=</span> <span class="n">17</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 24</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0015 <span class="k3">=</span> <span class="n">18</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 25</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0016 <span class="k3">=</span> <span class="n">19</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 26</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0017 <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 27</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0018 <span class="k3">=</span> <span class="n">21</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 28</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0019 <span class="k3">=</span> <span class="n">22</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 29</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0020 <span class="k3">=</span> <span class="n">23</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 30</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0021 <span class="k3">=</span> <span class="n">24</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 31</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0022 <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 32</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0023 <span class="k3">=</span> <span class="n">26</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 33</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0024 <span class="k3">=</span> <span class="n">27</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 34</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0025 <span class="k3">=</span> <span class="n">28</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 35</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0026 <span class="k3">=</span> <span class="n">29</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 36</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0027 <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 37</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0028 <span class="k3">=</span> <span class="n">31</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 38</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0029 <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 39</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0030 <span class="k3">=</span> <span class="n">33</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 40</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0031 <span class="k3">=</span> <span class="n">34</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 41</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0032 <span class="k3">=</span> <span class="n">35</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 42</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0033 <span class="k3">=</span> <span class="n">36</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 43</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0034 <span class="k3">=</span> <span class="n">37</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 44</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0035 <span class="k3">=</span> <span class="n">38</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 45</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0036 <span class="k3">=</span> <span class="n">39</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 46</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0037 <span class="k3">=</span> <span class="n">40</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 47</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0038 <span class="k3">=</span> <span class="n">41</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 48</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0039 <span class="k3">=</span> <span class="n">42</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 49</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0040 <span class="k3">=</span> <span class="n">43</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 50</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0041 <span class="k3">=</span> <span class="n">44</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 51</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0042 <span class="k3">=</span> <span class="n">45</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 52</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0043 <span class="k3">=</span> <span class="n">46</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 53</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0044 <span class="k3">=</span> <span class="n">47</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 54</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0045 <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 55</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0046 <span class="k3">=</span> <span class="n">49</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 56</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0047 <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 57</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0048 <span class="k3">=</span> <span class="n">51</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 58</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0049 <span class="k3">=</span> <span class="n">52</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 59</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0050 <span class="k3">=</span> <span class="n">53</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 60</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0051 <span class="k3">=</span> <span class="n">54</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 61</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0052 <span class="k3">=</span> <span class="n">55</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 62</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0053 <span class="k3">=</span> <span class="n">56</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 63</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0054 <span class="k3">=</span> <span class="n">57</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 64</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0055 <span class="k3">=</span> <span class="n">58</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 65</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0056 <span class="k3">=</span> <span class="n">59</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
<span class="number"> 66</span>constexpr <span class="k1">auto</span> D_BITMAP_MONSTER0057 <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>          <span class="c">/* BITMAP */</span>
</div></div><p>

Also, it&#39;s C++ not C.</p><p>Once it&#39;s all tweaked, I&#39;m going to work it so that loads directly from a zip file. One convenient package.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 29 Sep 2023 02:50:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That looks like a good way to deal with it. What are your internals like?</p><p>In my FileSystem I can load a manuscript with simple lines like this :
</p><pre>
mouse = mysha.png
cat = garfield.jpg
meow = meow.ogg
eek = eek.ogg
music = backgroundmusic.ogg
</pre><p>
and it will load them all and make them available under the shortcut names.</p><p>Simple enough for my needs and supports zip files transparently as if they were a folder :
</p><pre>
archive = Data/data.7z
music = Data/data.7z/music.ogg
</pre><p>
Sadly it still involves a cast from a base* or a void* at some point. Can&#39;t be avoided completely.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 29 Sep 2023 21:54:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nice All.  I wish I had your gray matter, I&#39;d just write mine too.  Meanwhile I&#39;ll just keep all the bitmaps, ttf, and WAV files in the folder with the executable.  Works fine, just not as clean as I was hoping for.</p><p>Daniel, let me know when you have something to trial.  I&#39;d like to see how it works.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Mon, 02 Oct 2023 08:11:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>loading</b>
</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">// from init function</span>
<span class="number">  2</span>std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loading Datafile File: "</span><span class="k2">;</span>
<span class="number">  3</span>this-&gt;m_data_file <span class="k3">=</span> datafile::read<span class="k2">(</span><span class="s">"data\\datafile\\index.ini"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span><span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>m_data_file<span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"failed"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">return</span> wind::failure<span class="k2">;</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"pass"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="c">// if you need the header file</span>
<span class="number"> 13</span><span class="c">//if (!al_filename_exists("include\\datafile.h"))</span>
<span class="number"> 14</span><span class="c">//{</span>
<span class="number"> 15</span>  <span class="c">//datafile::write_header(this-&gt;m_data_file, "include\\datafile.h");</span>
<span class="number"> 16</span><span class="c">//}</span>
</div></div><p>

<b>destroying</b>
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//from kill/shutdown function</span>
<span class="k1">if</span> <span class="k2">(</span>m_data_file<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">delete</span> this-&gt;m_data_file<span class="k2">;</span>
  this-&gt;m_data_file <span class="k3">=</span> nullptr<span class="k2">;</span>
  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Datafile Destroyed"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

<b>using</b>
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// draw function</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> logo <span class="k3">=</span> this-&gt;m_data_file-&gt;get<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span>DATAFILE_BITMAP_LOGO<span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>logo,
  <span class="n">0</span>.<span class="n">0f</span>, <span class="n">0</span>.<span class="n">0f</span>,
  <span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>logo<span class="k2">)</span>,
  <span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>logo<span class="k2">)</span>,
  <span class="n">0</span>.<span class="n">0f</span>, <span class="n">0</span>.<span class="n">0f</span>,
  <span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>this-&gt;m_buffer<span class="k2">)</span>,
  <span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>this-&gt;m_buffer<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> this-&gt;m_data_file-&gt;get<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span>DATAFILE_FONT_MYSTICORA<span class="k2">)</span><span class="k2">;</span>
string_t<span class="k3">*</span> text <span class="k3">=</span> this-&gt;m_data_file-&gt;get<span class="k3">&lt;</span>string_t<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span>DATAFILE_TEXT_TITLE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color::map<span class="k2">(</span><span class="n">0xffffff</span><span class="k2">)</span>, <span class="n">50</span>, <span class="n">200</span>, <span class="n">0</span>, text-&gt;c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

If you&#39;re ambitious and realize I will probably update/modify the code in the future, you can check out my <a href="https://github.com/dlharmon911/Tilemap">github repository</a>.</p><p>EDIT: Modified what the code, so what I wrote here is not valid. You&#39;ll just have to check out the app that is in the repository that uses the library.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Mon, 02 Oct 2023 21:16:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel, </p><p>Forgive my ignorance.  I get most of what is being done between the two post, but &quot;datafile&quot; is throwing me.  It&#39;s not a struct or not a type I&#39;m familiar with. It&#39;s not a function.  Later you use it like a struct or class  datafile::read etc.  I&#39;m just not understanding what is represents. </p><p>I understand the index (header file) and that is what indexs an array. I get that  concept anyway.  </p><p>In any case, is this the process you use or you creating as we speak?  Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Wed, 04 Oct 2023 22:54:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you knowledgeable on STL? Or maybe namespaces?</p><p>My naming convention might be confusing:<br />&quot;datafile&quot; is the name of the namespace<br />&quot;datafile_t&quot; is a class that wraps an std::vector&lt;void*&gt;</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// how to open file and create datafile_t object</span>
datafile_t<span class="k3">*</span> dfile <span class="k3">=</span> datafile::read<span class="k2">(</span><span class="k1">const</span> string_t<span class="k3">&amp;</span> filename<span class="k2">)</span><span class="k2">;</span>

<span class="c">// how to access the objects (pointers)</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bitmap <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k3">*</span>dfile<span class="k2">)</span><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="k2">;</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bitmap <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>dfile-&gt;get<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="k2">;</span>
</pre></div></div><p>

Seems I didn&#39;t upload the latest also, I changed it so vector now wraps a std::shared_ptr&lt;void&gt;. However, it also removed ability to directly access the void* array. Object access is still the same.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// no longer valid</span>
<span class="k1">void</span><span class="k3">*</span><span class="k3">*</span> array_data <span class="k3">=</span> datafile_t::data<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span>bitmap <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>array_data<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="k2">;</span>
</pre></div></div><p>
Can&#39;t do that now that they are shared pointers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 05 Oct 2023 00:31:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel, Namespace I should have recognized it.  Now it makes more sense to me.   Still a little over my head but I get the gist of it.   Thanks for the detail.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 05 Oct 2023 20:51:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am thinking about making a similar product, but much much simpler. Still uses the same text file processing, but the datafile itself is simple.</p><p>Header file will be something simple like this:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">typedef</span> <span class="k1">struct</span> datafile_t
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">void</span><span class="k3">*</span> data<span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">int</span> type<span class="k2">;</span>
<span class="number">  5</span><span class="k2">}</span> datafile_t<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="c">// main load/destroy functions</span>
<span class="number">  8</span>datafile_t<span class="k3">*</span> <a href="http://www.allegro.cc/manual/load_datafile"><span class="a">load_datafile</span></a><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">  9</span><span class="k1">void</span> destroy_datafile<span class="k2">(</span>datafile_t<span class="k3">*</span> datafile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">// standalone function</span>
<span class="number"> 12</span><span class="k1">bool</span> write_datafile_header<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"> 13</span>
<span class="number"> 14</span><span class="c">// type creation functions for custom types</span>
<span class="number"> 15</span><span class="k1">void</span> register_object_type<span class="k2">(</span><span class="k1">int</span> type, <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span>name, <span class="k1">void</span><span class="k3">*</span> <span class="k2">(</span><span class="k3">*</span>parser<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span>, <span class="k1">void</span><span class="k3">*</span> <span class="k2">(</span><span class="k3">*</span>deleter<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

load_datafile will return an array of datafile_t;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 05 Oct 2023 21:26:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel,   I&#39;m just trying to learn somethings here.  If you get bored with the questions, you can drop out.  Don&#39;t feel obligated.</p><p>Will load_datafile return an array or a pointer to the first element in an array. Probably the same thing but the latter would imply the array size is known.</p><p>Will this create a data file or read from it.  If create, how do you write to a file with multiple types?  If it reads from one, does it look for a EOF to determine when a file with in the overall file is complete?  </p><p>Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 06 Oct 2023 00:02:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618864/1053913#target">AceBlkwell</a> said:</div><div class="quote"><p>Will load_datafile return an array or a pointer to the first element in an array.</p></div></div><p>
It would return an array. The last element&#39;s data pointing to null.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Will this create a data file or read from it</p></div></div><p>
The datafile array is the end product of parsing a text file. Do not confuse the two. </p><p>This does not function the same was as Allegro4&#39;s datafile loading. That was a complete file with all objects stored in it. Mine only reads a single text file in a folder that has other files and folders where assets are stored.</p><p>I wrote individual functions that parse each type.</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>datafile
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  $base_path <span class="k3">=</span> <span class="s">"$(system.directory)/$(index.directory)"</span>
<span class="number">  4</span>
<span class="number">  5</span>  bitmap
<span class="number">  6</span>  <span class="k2">{</span>
<span class="number">  7</span>    $path <span class="k3">=</span> <span class="s">"$(base_path)/images"</span>
<span class="number">  8</span>    logo
<span class="number">  9</span>    <span class="k2">{</span>
<span class="number"> 10</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.path)/logo.bmp"</span>
<span class="number"> 11</span>      masked <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 12</span>    <span class="k2">}</span>
<span class="number"> 13</span>    icon
<span class="number"> 14</span>    <span class="k2">{</span>
<span class="number"> 15</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.path)/icon.png"</span>
<span class="number"> 16</span>      masked <span class="k3">=</span> <span class="k1">true</span>  
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>    icon_sheet
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>      file <span class="k3">=</span> <span class="s">"$(bitmap.path)/icon_sheet.png"</span>
<span class="number"> 21</span>      masked <span class="k3">=</span> <span class="k1">true</span>  
<span class="number"> 22</span>    <span class="k2">}</span>
<span class="number"> 23</span>    <span class="p">#monster</span>
<span class="number"> 24</span>    <span class="p">#{</span>
<span class="number"> 25</span>      <span class="p">#$path = "$(bitmap.path)/Monsters and animals"</span>
<span class="number"> 26</span>      <span class="p">#file = "$(bitmap.monster.path)/*.png"</span>
<span class="number"> 27</span>      <span class="p">#masked = true</span>
<span class="number"> 28</span>      <span class="p">#sort = true</span>
<span class="number"> 29</span>    <span class="p">#}</span>
<span class="number"> 30</span>  <span class="k2">}</span>
<span class="number"> 31</span>  <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>
<span class="number"> 32</span>  <span class="k2">{</span>
<span class="number"> 33</span>    $path <span class="k3">=</span> <span class="s">"$(base_path)/fonts"</span>
<span class="number"> 34</span>    mysticora
<span class="number"> 35</span>    <span class="k2">{</span>
<span class="number"> 36</span>      file <span class="k3">=</span> <span class="s">"$(font.path)/mysticora.ttf"</span>
<span class="number"> 37</span>
<span class="number"> 38</span>      <span class="p">#size in pixels</span>
<span class="number"> 39</span>      size <span class="k3">=</span> <span class="n">20</span>
<span class="number"> 40</span>      <span class="p">#truetype (optional)</span>
<span class="number"> 41</span>      truetype <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 42</span>      <span class="p">#flags (optional)</span>
<span class="number"> 43</span>      <span class="p">#flags = no_kerning|monochrome|no_premultified_alpha</span>
<span class="number"> 44</span>    <span class="k2">}</span>
<span class="number"> 45</span>  <span class="k2">}</span>
<span class="number"> 46</span>  text
<span class="number"> 47</span>  <span class="k2">{</span>
<span class="number"> 48</span>    title <span class="k3">=</span> The Great Escape<span class="k3">!</span>
<span class="number"> 49</span>  <span class="k2">}</span>
<span class="number"> 50</span><span class="k2">}</span>
</div></div><p>

All I&#39;m doing is writing some functions to simplify loading multiple files.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 06 Oct 2023 00:26:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Daniel, </p><p>So if I&#39;m understanding correctly. In short, you use a header to basically allow you to use easily understood names as an index for an array that holds various pictures and wav files.  But the BMPs and WAV themselves are separate files in the programs folder or designated path?</p><p>My only concern (or preference) is the amount of files.  Example, my last A4 game had 15+ BMPs between backgrounds, player pieces, game board pieces.  Then couple that with 5 to 7 WAV files, not includeing 2-3 font files.  Under A5 I would have 25+ files to be included with the game, where under A4 I have 2.  Program file and grabber data file.  Again, not a deal breaker where game function is concerned.  It just increases the risk of a missing file or user manipulated file affecting game function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Mon, 09 Oct 2023 19:06:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Put it all in a zip file and use PhysFS.</p><p>Option one: Open files<br /><span class="remote-thumbnail"><span class="json">{"name":"613356","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fbccfce10e1c37d0267b1afeaf350d4e.png","w":248,"h":278,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fbccfce10e1c37d0267b1afeaf350d4e"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/b/fbccfce10e1c37d0267b1afeaf350d4e-240.jpg" alt="613356" width="240" height="269" /></span></p><p>Option two: zip file<br /><span class="remote-thumbnail"><span class="json">{"name":"613357","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/a\/4a35a423e83698b3918ef8ee86867f46.png","w":249,"h":295,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/a\/4a35a423e83698b3918ef8ee86867f46"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/a/4a35a423e83698b3918ef8ee86867f46-240.jpg" alt="613357" width="240" height="284" /></span></p><p>I plan on implementing option two. Eventually.</p><p>Yesterday, I started working on a standalone app that just outputs the header file. I kept changing thing and the header file would get corrupt, which would lead to errors in my app.</p><p>I also implemented nested datafiles. Don&#39;t know if needed, but older Grabber/Datafile had nested datafiles.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p"># This is a comment</span>
<span class="number">  2</span>main
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>    $base_path <span class="k3">=</span> <span class="s">"$(system.directory)/$(index.directory)"</span>
<span class="number">  5</span>
<span class="number">  6</span>    bitmap
<span class="number">  7</span>    <span class="k2">{</span>
<span class="number">  8</span>        $path <span class="k3">=</span> <span class="s">"$(base_path)/images"</span>
<span class="number">  9</span>        logo
<span class="number"> 10</span>        <span class="k2">{</span>
<span class="number"> 11</span>            file <span class="k3">=</span> <span class="s">"$(bitmap.path)/logo.bmp"</span>
<span class="number"> 12</span>            masked <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 13</span>        <span class="k2">}</span>
<span class="number"> 14</span>        icon
<span class="number"> 15</span>        <span class="k2">{</span>
<span class="number"> 16</span>            file <span class="k3">=</span> <span class="s">"$(bitmap.path)/icon.png"</span>
<span class="number"> 17</span>            masked <span class="k3">=</span> <span class="k1">true</span>    
<span class="number"> 18</span>        <span class="k2">}</span>
<span class="number"> 19</span>        icon_sheet
<span class="number"> 20</span>        <span class="k2">{</span>
<span class="number"> 21</span>            file <span class="k3">=</span> <span class="s">"$(bitmap.path)/icon_sheet.png"</span>
<span class="number"> 22</span>            masked <span class="k3">=</span> <span class="k1">true</span>    
<span class="number"> 23</span>        <span class="k2">}</span>
<span class="number"> 24</span>        <span class="p">#monster</span>
<span class="number"> 25</span>        <span class="p">#{</span>
<span class="number"> 26</span>            <span class="p">#$path = "$(bitmap.path)/Monsters and animals"</span>
<span class="number"> 27</span>            <span class="p">#file = "$(bitmap.monster.path)/*.png"</span>
<span class="number"> 28</span>            <span class="p">#masked = true</span>
<span class="number"> 29</span>            <span class="p">#sort = true</span>
<span class="number"> 30</span>        <span class="p">#}</span>
<span class="number"> 31</span>    <span class="k2">}</span>
<span class="number"> 32</span>    <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>
<span class="number"> 33</span>    <span class="k2">{</span>
<span class="number"> 34</span>        $path <span class="k3">=</span> <span class="s">"$(base_path)/fonts"</span>
<span class="number"> 35</span>        mysticora
<span class="number"> 36</span>        <span class="k2">{</span>
<span class="number"> 37</span>            file <span class="k3">=</span> <span class="s">"$(font.path)/mysticora.ttf"</span>
<span class="number"> 38</span>
<span class="number"> 39</span>            <span class="p">#size in pixels</span>
<span class="number"> 40</span>            size <span class="k3">=</span> <span class="n">20</span>
<span class="number"> 41</span>
<span class="number"> 42</span>            <span class="p">#truetype (optional)</span>
<span class="number"> 43</span>            truetype <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 44</span>            
<span class="number"> 45</span>            <span class="p">#flags (optional)</span>
<span class="number"> 46</span>            <span class="p">#flags = no_kerning|monochrome|no_premultified_alpha</span>
<span class="number"> 47</span>        <span class="k2">}</span>
<span class="number"> 48</span>    <span class="k2">}</span>
<span class="number"> 49</span>    text
<span class="number"> 50</span>    <span class="k2">{</span>
<span class="number"> 51</span>        title <span class="k3">=</span> The Great Escape<span class="k3">!</span>
<span class="number"> 52</span>    <span class="k2">}</span>
<span class="number"> 53</span>    datafile
<span class="number"> 54</span>    <span class="k2">{</span>
<span class="number"> 55</span>        buster
<span class="number"> 56</span>        <span class="k2">{</span>
<span class="number"> 57</span>            text
<span class="number"> 58</span>            <span class="k2">{</span>
<span class="number"> 59</span>                title2 <span class="k3">=</span> The Mouseketeers<span class="k3">!</span>
<span class="number"> 60</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><span class="k2">}</span>
</div></div><p>

</p><div class="source-code snippet"><div class="inner"><pre><span class="c">/* */</span>
<span class="c">/* */</span>
<span class="c">/* Date:  7:12:01 a.m. 10/08/2023 */</span> 
<span class="c">/* Do not hand edit! */</span>

constexpr <span class="k1">auto</span> DATAFILE_TEXT_TITLE <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>            <span class="c">/* TEXT */</span>
constexpr <span class="k1">auto</span> DATAFILE_BITMAP_LOGO <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
constexpr <span class="k1">auto</span> DATAFILE_BITMAP_ICON <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>           <span class="c">/* BITMAP */</span>
constexpr <span class="k1">auto</span> DATAFILE_BITMAP_ICON_SHEET <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>     <span class="c">/* BITMAP */</span>
constexpr <span class="k1">auto</span> DATAFILE_FONT_MYSTICORA <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>        <span class="c">/* FONT */</span>
constexpr <span class="k1">auto</span> DATAFILE_BUSTER <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>                <span class="c">/* DATAFILE */</span>
constexpr <span class="k1">auto</span> DATAFILE_BUSTER_TEXT_TITLE2 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>    <span class="c">/* TEXT */</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Mon, 09 Oct 2023 20:55:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Daniel. I browsed PhysFS.  I think I get the skinny of it.  I&#39;d need to generate a test run program to understand exactly how it works.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Mon, 09 Oct 2023 21:16:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I do too. I haven&#39;t used PhysFS either. Working on other issues first. I&#39;ll get around to it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Mon, 09 Oct 2023 21:37:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Eagle already uses Allegro 5 and PhysFS and works with archives as if they were folders.</p><p>All you need is PHYSFS_Init(argv) and then you mount the archive, read from it normally, close the archive, and you&#39;re done.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Oct 2023 22:36:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Simplified things a bit. I messed with it last night. Thought I was done, but realized it&#39;s broken. It works as is as long as you don&#39;t use nested datafiles. Will fix that in a bit. It&#39;s a fairly simple fix.</p><p>also think about just making it it&#39;s own repository.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifndef _WIND_DATAFILE_H_</span>
<span class="number">  2</span><span class="p">#define _WIND_DATAFILE_H_</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include "w_base.h"</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">namespace</span> wind
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>  <span class="k1">typedef</span> <span class="k1">struct</span> datafile_t
<span class="number">  9</span>  <span class="k2">{</span>
<span class="number"> 10</span>    <span class="k1">void</span><span class="k3">*</span> data<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int32_t</span> type<span class="k2">;</span>
<span class="number"> 12</span>  <span class="k2">}</span> datafile_t<span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="k1">namespace</span> datafile
<span class="number"> 15</span>  <span class="k2">{</span>
<span class="number"> 16</span>    <span class="k1">enum</span> element_type
<span class="number"> 17</span>    <span class="k2">{</span>
<span class="number"> 18</span>      bitmap,
<span class="number"> 19</span>      <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,
<span class="number"> 20</span>      text,
<span class="number"> 21</span>      datafile,
<span class="number"> 22</span>      user_defined <span class="k3">=</span> <span class="n">0x100</span>
<span class="number"> 23</span>    <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">namespace</span> parser
<span class="number"> 26</span>    <span class="k2">{</span>
<span class="number"> 27</span>      <span class="k1">typedef</span> <span class="k1">struct</span> parse_data_t parse_data_t<span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>      <span class="k1">using</span> deleter_t <span class="k3">=</span> <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>      <span class="k1">using</span> parser_t <span class="k3">=</span> <span class="k1">void</span><span class="k3">*</span> <span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>      deleter_t get_deleter<span class="k2">(</span><span class="k1">int32_t</span> type<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>      <span class="k1">bool</span> has_children<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>      <span class="k1">bool</span> contains<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data, <span class="k1">const</span> string_t<span class="k3">&amp;</span> name<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>      parse_data_t get_child<span class="k2">(</span>parse_data_t<span class="k3">&amp;</span> data, <span class="k1">const</span> string_t<span class="k3">&amp;</span> name<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>      <span class="k1">const</span> parse_data_t get_child<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data, <span class="k1">const</span> string_t<span class="k3">&amp;</span> name<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>      <span class="k1">bool</span> has_content<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>      wind::string_t get_content_as_string<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>      <span class="k1">int32_t</span> get_content_as_integer<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>      <span class="k1">double</span> get_content_as_real<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>      <span class="k1">bool</span> get_content_as_boolean<span class="k2">(</span><span class="k1">const</span> parse_data_t<span class="k3">&amp;</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>      <span class="k1">void</span> register_object_type<span class="k2">(</span><span class="k1">int32_t</span> type, <span class="k1">const</span> string_t<span class="k3">&amp;</span> name, parser_t parser, deleter_t deleter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>    <span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span>    datafile_t<span class="k3">*</span> load<span class="k2">(</span><span class="k1">const</span> string_t<span class="k3">&amp;</span> filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    <span class="k1">void</span> destroy<span class="k2">(</span>datafile_t<span class="k3">*</span> datafile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>  <span class="k2">}</span>
<span class="number"> 48</span><span class="k2">}</span>
<span class="number"> 49</span>
<span class="number"> 50</span><span class="p">#endif // !_WIND_DATAFILE_H_</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 11 Oct 2023 21:27:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel, <br />Looks more concise though I&#39;m not sure I know what I&#39;m looking at entirely. </p><p>Edgar, <br />I jumped on your site.  I checked out Eagle. I downloaded the binaries and the program ran, however, I&#39;m not sure what it does.  I tried to pull up a bmp but it wouldn&#39;t do anything.  In short, what is the programs purpose?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Wed, 11 Oct 2023 22:12:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you don&#39;t care about adding custom types, then all you need is these two functions:
</p><div class="source-code snippet"><div class="inner"><pre>datafile_t<span class="k3">*</span> load<span class="k2">(</span><span class="k1">const</span> string_t<span class="k3">&amp;</span> filename<span class="k2">)</span><span class="k2">;</span>
<span class="k1">void</span> destroy<span class="k2">(</span>datafile_t<span class="k3">*</span> datafile<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

It will parse your text file, load the assets, create an datafile_t array. The size of the array 1 more than the number of objects. The data value of the last argument is NULL. That&#39;s how you know it&#39;s the end of the array.</p><p>In your game, you can use as such
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bitmap <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>datafile<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span>.data<span class="k2">;</span>
</pre></div></div><p>

I tried to make the final product similar to Allegro 4&#39;s datafile. It&#39;s just the loading is different as it&#39;s not one file.</p><p>If you want custom objects, then you can register your own type with custom parse and deleter. the other functions are used to access the data from the text file. I hid the actual data inside parse_data_t to make it cleaner.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 11 Oct 2023 22:25:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Use the menu. Which program are you running? There are lots.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 11 Oct 2023 22:31:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry Edgar, I meant no disrespect. I wasn&#39;t implying the program didn&#39;t work as intended, only that i didn&#39;t know what it ws supposed to do.  The included picture is what I ran.  I clicked on file and tried to open a BMP file but nothing happened. </p><p>Nice Daniel.  Thanks for the update.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 12 Oct 2023 01:33:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Click &quot;Formatting Help&quot;. However, there is an issue with attachments. You cannot use the link that is given right after it is attached. You have to submit/update post first and use the link from the post itself. A little annoying.</p><p><span class="remote-thumbnail"><span class="json">{"name":"613358","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/d\/0ddad389091e36509ce80cc844869e70.jpg","w":825,"h":658,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/d\/0ddad389091e36509ce80cc844869e70"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/d/0ddad389091e36509ce80cc844869e70-240.jpg" alt="613358" width="240" height="191" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 12 Oct 2023 01:42:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ace, that program is from Eagle 4 GUI. That&#39;s the old version of Eagle.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 12 Oct 2023 20:37:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Guys, </p><p>I&#39;ve gotten the A5 version, but still don&#39;t know what to do or the purpose of the program.  Meaning, Like Word is a word processing program, Doom is a game program, Eagle 5 is a ..... program.   Is it a compression program, or a cooler version of a grabber type program?</p><p>When I click on the Upper left Upper right etc, nothing happens.  I figure it&#39;s my ignorance more than the program.  Just curious. </p><p>Daniel, I&#39;ve worked with the Formatting Help- for images for 20 mins.  I just keep getting a hyperlink to this entry for edit.  In any case the picture seems to be working.  It&#39;s just a snapshot of the Eagle 5 program. </p><p> <span class="remote-thumbnail"><span class="json">{"name":"613361","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/5\/45b12507f1c3329bae11a2dbbe1612b1.jpg","w":791,"h":620,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/5\/45b12507f1c3329bae11a2dbbe1612b1"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/5/45b12507f1c3329bae11a2dbbe1612b1-240.jpg" alt="613361" width="240" height="188" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 13 Oct 2023 19:24:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="remote-thumbnail"><span class="json">{"name":"613362","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/8\/58a979be29f12e7989bec37a31556fb2.png","w":1030,"h":534,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/8\/58a979be29f12e7989bec37a31556fb2"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/8/58a979be29f12e7989bec37a31556fb2-240.jpg" alt="613362" width="240" height="124" /></span><br />Oops. I forgot the closing &quot; at end of tag in picture</p><p><span class="remote-thumbnail"><span class="json">{"name":"613361","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/5\/45b12507f1c3329bae11a2dbbe1612b1.jpg","w":791,"h":620,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/5\/45b12507f1c3329bae11a2dbbe1612b1"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/5/45b12507f1c3329bae11a2dbbe1612b1-240.jpg" alt="613361" width="240" height="188" /></span></p><p>As for Eagle, that is a GUI, and I&#39;m sure Edgar can explain more.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 13 Oct 2023 20:29:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks, I got it to work.  I was using the link to the forum post and not the picture.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 13 Oct 2023 20:35:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Those are old example programs that don&#39;t DO anything. They&#39;re just examples of widgets and layouts. All the new examples are in the GIT repo and the latest build(s).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 13 Oct 2023 20:46:25 +0000</pubDate>
	</item>
</rss>
