<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>al_set_debug_file [submitting idea and code]</title>
		<link>http://www.allegro.cc/forums/view/591447</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 21 May 2007 11:20:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>[EDIT: COMMENTS ARE WELCOME]</p><p>Every time I use TRACE I am worried that I can not specify the output file.<br />Today I choose to add my own ( not really difficult ) function to allegro.</p><p>I did the following modification:<br /> <br /> <br />debug.h, inserted at line 28
</p><div class="source-code snippet"><div class="inner"><pre>AL_FUNC<span class="k2">(</span><span class="k1">void</span>, al_set_debug_file, <span class="k2">(</span>AL_CONST <span class="k1">char</span> <span class="k3">*</span>tracefilename , AL_CONST <span class="k1">char</span> <span class="k3">*</span>assertfilename <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
 <br /> <br />allegro.c, inserted at line 576
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/* al_set_debug_file:</span></td></tr><tr><td class="number">2</td><td><span class="c"> * Set a specific file for debug output. If tracefilename or assertfilename file is NULL, then it uses the allegro default.</span></td></tr><tr><td class="number">3</td><td><span class="c"> */</span></td></tr><tr><td class="number">4</td><td><span class="k1">void</span> al_set_debug_file<span class="k2">(</span>AL_CONST <span class="k1">char</span> <span class="k3">*</span>tracefilename , AL_CONST <span class="k1">char</span> <span class="k3">*</span>assertfilename <span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span>  </td></tr><tr><td class="number">6</td><td>  <span class="k1">if</span><span class="k2">(</span> tracefilename <span class="k3">!</span><span class="k3">=</span> NULL <span class="k2">)</span></td></tr><tr><td class="number">7</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>    trace_file <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span> tracefilename , <span class="s">"w"</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>      </td></tr><tr><td class="number">10</td><td>    <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span>trace_file <span class="k2">)</span></td></tr><tr><td class="number">11</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>      <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Impossible to open trace logging file %s\n"</span>, tracefilename <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_37.html" target="_blank">abort</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">16</td><td>    </td></tr><tr><td class="number">17</td><td>    debug_trace_virgin <span class="k3">=</span> FALSE <span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>  </td></tr><tr><td class="number">20</td><td>  <span class="k1">if</span><span class="k2">(</span> assertfilename <span class="k3">!</span><span class="k3">=</span> NULL <span class="k2">)</span></td></tr><tr><td class="number">21</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>    assert_file <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span> assertfilename , <span class="s">"w"</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>      </td></tr><tr><td class="number">24</td><td>    <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span>assert_file <span class="k2">)</span></td></tr><tr><td class="number">25</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>      <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Impossible to open assert logging file %s\n"</span>, assertfilename <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_37.html" target="_blank">abort</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>    </td></tr><tr><td class="number">31</td><td>    debug_assert_virgin <span class="k3">=</span> FALSE <span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>  </td></tr><tr><td class="number">34</td><td>  <span class="k1">if</span><span class="k2">(</span> assertfilename <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">&amp;</span><span class="k3">&amp;</span> tracefilename <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span></td></tr><tr><td class="number">35</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">36</td><td>    <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Please specify at least one filename for debug output\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_37.html" target="_blank">abort</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">40</td><td>  </td></tr><tr><td class="number">41</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

 <br />I did a /misc/fixdll.sh, and a mingw32-make all, mingw32-make installall.</p><p> <br />My test program look like this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> main<span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>  al_set_debug_file<span class="k2">(</span> <span class="s">"serveur.log"</span> , NULL <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>  <a href="http://www.allegro.cc/manual/set_uformat" target="_blank"><span class="a">set_uformat</span></a><span class="k2">(</span>U_ASCII<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>  ShowWindow<span class="k2">(</span><a href="http://www.allegro.cc/manual/win_get_window" target="_blank"><span class="a">win_get_window</span></a><span class="k2">(</span><span class="k2">)</span>,SW_HIDE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>  <a href="http://www.allegro.cc/manual/TRACE" target="_blank"><span class="a">TRACE</span></a><span class="k2">(</span> <span class="s">"\nNILOREA Console Server\n\nVersion: SERVER %s\n         ENGINE %s\n\n"</span>, _SERVER_ , _N_ENGINE_VER_ <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="c">/* other stuff there */</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td><span class="k2">}</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>

As expected, this is working fine, TRACE use the specified filename and ASSERT is keeping default.<br />You only need to call the function before any call to TRACE or AL_TRACE.<br />I do not know if there are any uncovered issue with the function as I only need it for TRACE.</p><p>Everyone, any comments, are you interested by such a feature ? I was thinking that this was laking in Allegro.</p><p>EDITED: Adding assert_file inside the function. Edited one more time for names conflict &amp;&amp; differentiation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Fri, 18 May 2007 19:00:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
if( tracefile != NULL )
</p></div></div><p>

Wouldn&#39;t you have to close the file if it wasn&#39;t NULL? Also, you only open the file if tracefile is not NULL? I&#39;m not sure I understand that part of the code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Fri, 18 May 2007 19:18:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Because I do not want to force people to specify both trace output filename and assert output filename.</p><p>If they want they can just pass NULL and it will let the default.</p><p>If you only want to have a specific assert file, then pass NULL,&quot;myassertfile&quot;<br />If you only want to have a specific trace file, then pass &quot;mytracefile&quot;,NULL<br />If you are silly or your program pass two NULL, then it aborts.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Fri, 18 May 2007 19:19:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah, okay. I see now. I didn&#39;t read carefully enough, and assumed tracefile was the actual FILE*.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Fri, 18 May 2007 19:22:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah the name are not goodly choosen ... Sorry <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" /></p><p>EDIT: I edited the firt post for better reading. now tracefile is tracefilename and assertfile is assertfilename. </p><p>EDIT: Thanks BAF for taking the time to put some comments.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Mon, 21 May 2007 11:20:48 +0000</pubDate>
	</item>
</rss>
