<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Overly complicated</title>
		<link>http://www.allegro.cc/forums/view/618700</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 04 Aug 2022 23:56:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just looking for advice on what to do.</p><p>Years ago, I wrote a library with an XML parser that would take a file and create the application as it was parsed. It would create the display, event queue, timers, etc. I wanted something I could change the conditions without recompiling. It worked very well. </p><p>I got the bug again and wanted to continue where I left off. However, with all the changes to C++ since, it doesn&#39;t work anymore. I could revert to an older C++, but instead I started over.</p><p>I didn&#39;t want to rewrite the xml parser again so I was looking for alternatives. XML, YAML, JSON, <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>I went with JSON and found a <a href="https://github.com/subh83/RSJp-cpp">light-weight parser</a>. Very light-weight. </p><p>I already reported a bug with parsing escape characters and I have no way of checking if an object is an array or a set of objects themselves. Even an extra comma in the wrong place crashes the parser with no indication where the issue lies.</p><p>Otherwise, the parser is great. I did modify it some. I put it all in its own namespace and removed the RSJ prefix.</p><p>What to do? continue, find a different parser, attempt to modify his parser?</p><p>I could try to add some functions like is_array or is_object. But his code is a bit messy. I hate messy code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 21 Jul 2022 02:03:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could try <a href="http://www.grinninglizard.com/tinyxml/">tinyXML</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 21 Jul 2022 05:19:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For Json I usually use <a href="https://app.quicktype.io/">quicktype</a> purely because if you can pump the Json into the left hand window and then have all the needed code generated for you (or just the parser); although I only use it with C# which is a lot more straightforward (IMHO) than implementing it in C++.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Thu, 21 Jul 2022 13:16:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I use (and even donate to) <a href="https://github.com/nlohmann/json">https://github.com/nlohmann/json</a> for JSON. It&#39;s header-only, no library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11.  It&#39;s <u>insanely</u> well-tested, and is full of features.  It&#39;s one of my favorite libraries on the internet as an example of what great software design looks like in terms of expected features, error messages, simplicity, test coverage, etc.</p><p>To convert or parse your custom object to/from JSON, you would write <span class="source-code">to_json</span> and <span class="source-code">from_json</span> functions.  Note if the object you are parsing is in a namespace, these functions you create must also be in that namespace.</p><p>Here&#39;s an example going to and from an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a></span>:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="p">#include &lt;lib/nlohmann/json.hpp&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> to_json<span class="k2">(</span>nlohmann::json<span class="k3">&amp;</span> j, <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k3">&amp;</span> color<span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>   j <span class="k3">=</span> nlohmann::json<span class="k2">{</span>
<span class="number">  9</span>      <span class="k2">{</span><span class="s">"r"</span>, color.r<span class="k2">}</span>,
<span class="number"> 10</span>      <span class="k2">{</span><span class="s">"g"</span>, color.g<span class="k2">}</span>,
<span class="number"> 11</span>      <span class="k2">{</span><span class="s">"b"</span>, color.b<span class="k2">}</span>,
<span class="number"> 12</span>      <span class="k2">{</span><span class="s">"a"</span>, color.a<span class="k2">}</span>,
<span class="number"> 13</span>   <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span><span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">void</span> from_json<span class="k2">(</span><span class="k1">const</span> nlohmann::json<span class="k3">&amp;</span> j, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k3">&amp;</span> color<span class="k2">)</span>
<span class="number"> 18</span><span class="k2">{</span>
<span class="number"> 19</span>   j.at<span class="k2">(</span><span class="s">"r"</span><span class="k2">)</span>.get_to<span class="k2">(</span>color.r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>   j.at<span class="k2">(</span><span class="s">"g"</span><span class="k2">)</span>.get_to<span class="k2">(</span>color.g<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   j.at<span class="k2">(</span><span class="s">"b"</span><span class="k2">)</span>.get_to<span class="k2">(</span>color.b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   j.at<span class="k2">(</span><span class="s">"a"</span><span class="k2">)</span>.get_to<span class="k2">(</span>color.a<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
</div></div><p>

With those functions, you might save/load the data through files 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="number">  2</span><span class="p">#include &lt;fstream&gt; // for std::ofstream, std::ifstream</span>
<span class="number">  3</span><span class="p">#include &lt;iostream&gt; // for std::cout</span>
<span class="number">  4</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> write_to_file<span class="k2">(</span>std::string json_filename, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>   std::ofstream outfile<span class="k2">;</span>
<span class="number">  9</span>   outfile.open<span class="k2">(</span>json_filename, std::ofstream::out<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>   nlohmann::json result<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>   result<span class="k2">[</span><span class="s">"my_color"</span><span class="k2">]</span> <span class="k3">=</span> color<span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>   outfile <span class="k3">&lt;</span><span class="k3">&lt;</span> std::setw<span class="k2">(</span><span class="n">3</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> result <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 15</span>   outfile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span>
<span class="number"> 19</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> read_from_file<span class="k2">(</span>std::string json_filename<span class="k2">)</span>
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span>   std::ifstream infile<span class="k2">(</span>json_filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   nlohmann::json j<span class="k2">;</span>
<span class="number"> 23</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> result_color<span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>   infile <span class="k3">&gt;</span><span class="k3">&gt;</span> j<span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>j.contains<span class="k2">(</span><span class="s">"my_color"</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 28</span>   <span class="k2">{</span>
<span class="number"> 29</span>      std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Expecting \""</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> json_filename <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\" to contain an object named \"my_color\" but it does not exist."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 30</span>      <span class="k1">return</span> <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">{</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 31</span>   <span class="k2">}</span>
<span class="number"> 32</span>   <span class="k1">else</span>
<span class="number"> 33</span>   <span class="k2">{</span>
<span class="number"> 34</span>      j.at<span class="k2">(</span><span class="s">"my_color"</span><span class="k2">)</span>.get_to<span class="k2">(</span>result_color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>   <span class="k2">}</span>
<span class="number"> 36</span>
<span class="number"> 37</span>   <span class="k1">return</span> result_color<span class="k2">;</span>
<span class="number"> 38</span><span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span>
<span class="number"> 41</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number"> 42</span><span class="k2">{</span>
<span class="number"> 43</span>   std::string my_filename <span class="k3">=</span> <span class="s">"foobar.json"</span><span class="k2">;</span>
<span class="number"> 44</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> my_color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">{</span><span class="n">0</span>.<span class="n">2</span>, <span class="n">0</span>.<span class="n">6</span>, <span class="n">0</span>.<span class="n">4</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 45</span>
<span class="number"> 46</span>   write_to_file<span class="k2">(</span>my_filename, my_color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color_as_read_from_file <span class="k3">=</span> read_from_file<span class="k2">(</span>my_filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>   std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"My color, loaded from a JSON file is:"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl
<span class="number"> 50</span>             <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"  r: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> my_color.r <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl
<span class="number"> 51</span>             <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"  g: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> my_color.g <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl
<span class="number"> 52</span>             <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"  b: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> my_color.b <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl
<span class="number"> 53</span>             <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"  a: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> my_color.a <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl
<span class="number"> 54</span>             <span class="k2">;</span>
<span class="number"> 55</span>
<span class="number"> 56</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 57</span><span class="k2">}</span>
</div></div><p>


Running the program, your output might look like this:</p><pre class="terminal">My color, loaded from a JSON file is:
  r: 0.2
  g: 0.6
  b: 0.4
  a: 1</pre><p>

and the <span class="source-code">foobar.json</span> file that was written might look like this:</p><pre class="terminal">{
   &quot;my_color&quot;: {
      &quot;a&quot;: 1.0,
      &quot;b&quot;: 0.4000000059604645,
      &quot;g&quot;: 0.6000000238418579,
      &quot;r&quot;: 0.20000000298023224
   }
}</pre><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Fri, 22 Jul 2022 01:34:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I also have used nlohmann json. It&#39;s very good, I recommend it. TinyXML2 also works nicely if you want to stick to XML.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618700/1052636#target">DanielH</a> said:</div><div class="quote"><p> However, with all the changes to C++ since, it doesn&#39;t work anymore. 
</p></div></div><p>This surprises me; compatibility is one of the things C++ tries very hard to do
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Fri, 22 Jul 2022 11:09:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll look into nlohmann. the JSON library I&#39;m using doesn&#39;t have write capability.<br />Not fond of the from_json with void return. What if there was an issue grabbing from the file?</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618700/1052641#target">Peter Hull</a> said:</div><div class="quote"><p>This surprises me; compatibility is one of the things C++ tries very hard to do</p></div></div><p>

My library was written ~ 2014 and had a few errors with certain functionality removed. Next chance I get I&#39;ll see what they were to give you a better picture of what I mean.</p><p>Plus, while I was looking at the code to see if I could fix it, I decided I wasn&#39;t happy with it. The library was bulky. I am on the fence on what is deemed &quot;better&quot; practice. I know it&#39;s subjective. Do I add bulky object functionality or keep them barebone? I&#39;m leaning towards barebone at the moment.</p><p>Plus with all the new functionality, I thought I could make it better/cleaner.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 22 Jul 2022 21:13:06 +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/618700/1052643#target">DanielH</a> said:</div><div class="quote"><p> Not fond of the from_json with void return. What if there was an issue grabbing from the file?</p></div></div><p><span class="source-code">to_json</span> and <span class="source-code">from_json</span> don&#39;t grab from a file.  The file interfacing is entirely up to you to implement if you wish.</p><p>If you want to be certain that the fields you expect exist in the JSON object, you can check with <span class="source-code">.contains<span class="k2">(</span><span class="s">"my_color"</span><span class="k2">)</span></span>.  You can then handle it however you want.</p><p>If there&#39;s an error parsing JSON from an invalid JSON string, then nolhmann will raise a parse error, which you can catch.  It has detailed information.  For example, if I were to parse a string containing this invalid JSON:</p><pre class="terminal">
   my_color&quot;: {
      &quot;a&quot;: 1.0,
      &quot;b&quot;: 0.4000000059604645,
      &quot;g&quot;: 0.6000000238418579,
      &quot;r&quot;: 0.20000000298023224
   }
}</pre><p>

It would throw this error:</p><div class="source-code snippet"><div class="inner"><pre>terminating with uncaught exception of type nlohmann::detail::parse_error: <span class="k2">[</span>json.exception.parse_error.101<span class="k2">]</span> parse error at <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> <span class="n">2</span>, column <span class="n">4</span><span class="k2">:</span> syntax error <span class="k1">while</span> parsing value <span class="k3">-</span> invalid literal<span class="k2">;</span> last read: <span class="s">'&lt;U+000A&gt;   m'</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Fri, 22 Jul 2022 23:08:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Made the plunge. Took a few hours, but have everything converted over. </p><p>There was even a NuGet package for it.</p><p>A bit of a learning curve, and I documentation is overwhelming.</p><p>Thanks,
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sun, 24 Jul 2022 02:43:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Also, if you&#39;re interested, Python has good JSON parsing. Though a scripting language may not be right for your project.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 Jul 2022 20:34:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, not quite useful.</p><p>Years ago I was messing with android programming. They use a manifest.xml that specifies any addons, app type, etc.</p><p>I thought it was a good way to initialize an Allegro program. Easier for the end-user. It parses a file and does all the background work (initializes addons, creates a display, event queue, and any timers). Also load any initial objects (bitmaps, fonts, etc).</p><p>I have a series of functions that parses json objects.
</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> parse<span class="k2">(</span>json data<span class="k2">)</span><span class="k2">;</span>
<span class="c">// etc</span>
</pre></div></div><p>

I also have a resource handler that manages those objects. If I need an object, I just grab it. If it doesn&#39;t exists then it loads it for me.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//  set 'keep' to true if the handler manages deletion</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>grab<span class="k2">(</span>handler <span class="k3">*</span>h, <span class="k1">const</span> std::string<span class="k3">&amp;</span> id, <span class="k1">bool</span> keep<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Tue, 26 Jul 2022 00:02:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I generally use a config file for setup. Easy map like language.<br /> 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>config<span class="k2">[</span><span class="s">"Graphics"</span><span class="k2">]</span><span class="k2">[</span><span class="s">"Fullscreen"</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> std::string<span class="k2">(</span><span class="s">"1"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
   fullscreen <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 26 Jul 2022 19:50:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I thought about it, but wasn&#39;t sure if nesting is possible. That&#39;s why I originally went with xml. </p><p>json is simple. just a load of pairs with a key and an object, which could be a set of objects {}, an array [] or a value &quot;&quot;. </p><p>Here is my manifest.json file. I like the simplicity and cleaner look over xml. The only thing is missing is ability to add comments. I could add a comment object and make sure my program ignores it. 
</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="k2">{</span>
<span class="number">   2</span>    <span class="s">"addon"</span><span class="k2">:</span>
<span class="number">   3</span>    <span class="k2">{</span>
<span class="number">   4</span>        <span class="s">"audio"</span><span class="k2">:</span> <span class="k1">false</span>,
<span class="number">   5</span>        <span class="s">"audio_codecs"</span><span class="k2">:</span> <span class="k1">false</span>,
<span class="number">   6</span>        <span class="s">"color"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">   7</span>        <span class="s">"font"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">   8</span>        <span class="s">"font_ttf"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">   9</span>        <span class="s">"image"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">  10</span>        <span class="s">"memfile"</span><span class="k2">:</span> <span class="k1">false</span>,
<span class="number">  11</span>        <span class="s">"native"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">  12</span>        <span class="s">"physics_fs"</span><span class="k2">:</span> <span class="k1">false</span>,
<span class="number">  13</span>        <span class="s">"primitives"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">  14</span>        <span class="s">"video_streaming"</span><span class="k2">:</span> <span class="k1">false</span>
<span class="number">  15</span>    <span class="k2">}</span>,
<span class="number">  16</span>    <span class="s">"application"</span><span class="k2">:</span>
<span class="number">  17</span>    <span class="k2">{</span>
<span class="number">  18</span>        <span class="s">"display"</span><span class="k2">:</span>
<span class="number">  19</span>        <span class="k2">{</span>
<span class="number">  20</span>            <span class="s">"id"</span><span class="k2">:</span> <span class="s">"main"</span>,
<span class="number">  21</span>            <span class="s">"title"</span><span class="k2">:</span> <span class="s">"@text/title"</span>,
<span class="number">  22</span>            <span class="s">"icon"</span><span class="k2">:</span> <span class="s">"@image/icon"</span>,
<span class="number">  23</span>            <span class="s">"width"</span><span class="k2">:</span> <span class="s">"@config/display_width"</span>,
<span class="number">  24</span>            <span class="s">"height"</span><span class="k2">:</span> <span class="s">"@config/display_height"</span>,
<span class="number">  25</span>            <span class="s">"background"</span><span class="k2">:</span> <span class="s">"@color/red"</span>,
<span class="number">  26</span>            <span class="s">"flags"</span><span class="k2">:</span> <span class="s">"windowed|resizable"</span>,
<span class="number">  27</span>            <span class="s">"options"</span><span class="k2">:</span>
<span class="number">  28</span>            <span class="k2">[</span>
<span class="number">  29</span>                <span class="k2">{</span>
<span class="number">  30</span>                    <span class="s">"option"</span><span class="k2">:</span> <span class="s">"single_buffer"</span>,
<span class="number">  31</span>                    <span class="s">"value"</span><span class="k2">:</span> <span class="n">1</span>,
<span class="number">  32</span>                    <span class="s">"importance"</span><span class="k2">:</span> <span class="s">"suggest"</span>
<span class="number">  33</span>                <span class="k2">}</span>
<span class="number">  34</span>            <span class="k2">]</span>
<span class="number">  35</span>        <span class="k2">}</span>,
<span class="number">  36</span>        <span class="s">"timer"</span><span class="k2">:</span>
<span class="number">  37</span>        <span class="k2">[</span>
<span class="number">  38</span>            <span class="k2">{</span>
<span class="number">  39</span>                <span class="s">"id"</span><span class="k2">:</span> <span class="s">"logic"</span>,
<span class="number">  40</span>                <span class="s">"type"</span><span class="k2">:</span> <span class="s">"timer"</span>,
<span class="number">  41</span>                <span class="s">"speed"</span><span class="k2">:</span> <span class="n">60</span>.<span class="n">0</span>
<span class="number">  42</span>            <span class="k2">}</span>,
<span class="number">  43</span>            <span class="k2">{</span>
<span class="number">  44</span>                <span class="s">"id"</span><span class="k2">:</span> <span class="s">"tick"</span>,
<span class="number">  45</span>                <span class="s">"type"</span><span class="k2">:</span> <span class="s">"timer"</span>,
<span class="number">  46</span>                <span class="s">"speed"</span><span class="k2">:</span> <span class="n">100</span>.<span class="n">0</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="s">"eventqueue"</span><span class="k2">:</span>
<span class="number">  50</span>        <span class="k2">{</span>
<span class="number">  51</span>            <span class="s">"id"</span><span class="k2">:</span> <span class="s">"main"</span>,
<span class="number">  52</span>            <span class="s">"source"</span><span class="k2">:</span>
<span class="number">  53</span>            <span class="k2">[</span>
<span class="number">  54</span>                <span class="k2">{</span>
<span class="number">  55</span>                    <span class="s">"display"</span><span class="k2">:</span> <span class="s">"@display/main"</span>
<span class="number">  56</span>                <span class="k2">}</span>,
<span class="number">  57</span>                <span class="k2">{</span>
<span class="number">  58</span>                    <span class="s">"timer"</span><span class="k2">:</span> <span class="s">"@timer/logic"</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="s">"timer"</span><span class="k2">:</span> <span class="s">"@timer/tick"</span>
<span class="number">  62</span>                <span class="k2">}</span>,
<span class="number">  63</span>                <span class="k2">{</span>
<span class="number">  64</span>                    <span class="s">"input"</span><span class="k2">:</span>
<span class="number">  65</span>                    <span class="k2">{</span>
<span class="number">  66</span>                        <span class="s">"keyboard"</span><span class="k2">:</span> <span class="k1">true</span>,
<span class="number">  67</span>                        <span class="s">"mouse"</span><span class="k2">:</span> <span class="k1">true</span>
<span class="number">  68</span>                    <span class="k2">}</span>
<span class="number">  69</span>                <span class="k2">}</span>
<span class="number">  70</span>            <span class="k2">]</span>
<span class="number">  71</span>        <span class="k2">}</span>,
<span class="number">  72</span>        <span class="s">"image"</span><span class="k2">:</span>
<span class="number">  73</span>        <span class="k2">[</span>
<span class="number">  74</span>            <span class="s">"@image/buffer"</span>
<span class="number">  75</span>        <span class="k2">]</span>,
<span class="number">  76</span>        <span class="s">"font"</span><span class="k2">:</span>
<span class="number">  77</span>        <span class="k2">[</span>
<span class="number">  78</span>            <span class="s">"@font/main"</span>
<span class="number">  79</span>        <span class="k2">]</span>
<span class="number">  80</span>    <span class="k2">}</span>,
<span class="number">  81</span>    <span class="s">"path"</span><span class="k2">:</span>
<span class="number">  82</span>    <span class="k2">{</span>
<span class="number">  83</span>        <span class="s">"color"</span><span class="k2">:</span> <span class="s">"data/colors/"</span>,
<span class="number">  84</span>        <span class="s">"config"</span><span class="k2">:</span> <span class="s">"data/config/"</span>,
<span class="number">  85</span>        <span class="s">"font"</span><span class="k2">:</span> <span class="s">"data/fonts/"</span>,
<span class="number">  86</span>        <span class="s">"image"</span><span class="k2">:</span> <span class="s">"data/images/"</span>,
<span class="number">  87</span>        <span class="s">"map"</span><span class="k2">:</span> <span class="s">"data/maps/"</span>,
<span class="number">  88</span>        <span class="s">"text"</span><span class="k2">:</span> <span class="s">"data/text/"</span>
<span class="number">  89</span>    <span class="k2">}</span>,
<span class="number">  90</span>    <span class="s">"filename"</span><span class="k2">:</span>
<span class="number">  91</span>    <span class="k2">{</span>
<span class="number">  92</span>        <span class="s">"color"</span><span class="k2">:</span> <span class="s">"@path/color/color.json"</span>,
<span class="number">  93</span>        <span class="s">"config"</span> <span class="k2">:</span> <span class="s">"@path/config/config.json"</span>,
<span class="number">  94</span>        <span class="s">"font"</span><span class="k2">:</span> <span class="s">"@path/font/font.json"</span>,
<span class="number">  95</span>        <span class="s">"map"</span><span class="k2">:</span> <span class="s">"@path/map/map.json"</span>,
<span class="number">  96</span>        <span class="s">"image"</span><span class="k2">:</span> <span class="s">"@path/image/image.json"</span>,
<span class="number">  97</span>        <span class="s">"text"</span><span class="k2">:</span> <span class="s">"@path/text/text.json"</span>
<span class="number">  98</span>    <span class="k2">}</span>
<span class="number">  99</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Tue, 26 Jul 2022 21:02:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll check out nlohmann&#39;s library. I like that it&#39;s header only, that&#39;s a good call.</p><p>So far I&#39;ve used my own JSON parser, mainly because I didn&#39;t want to bother with compiling yet another dependency. Dependencies are such a pain in C++, to the point where you prefer to write your own code rather than deal with that.</p><p>My own implementation is tested well enough. So far it works with all the JSON I&#39;ve thrown at it <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amarillion)</author>
		<pubDate>Wed, 27 Jul 2022 13:19:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For JSON in C, I use cJSON, and it&#39;s pretty good IMHO. (you can find it here: <a href="https://github.com/DaveGamble/cJSON">https://github.com/DaveGamble/cJSON</a> )</p><p>I recently discovered that KAFKA&#39;s librdkafka is also using it (while building on RedHat 7, because the provided librdkafka is way too old, like from 2018).</p><p>That aside, it fits my needs, which are maybe simpler than others. cJSON is just a header and a c file.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 04 Aug 2022 23:56:22 +0000</pubDate>
	</item>
</rss>
