<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Runtime determination of graphic mode types</title>
		<link>http://www.allegro.cc/forums/view/599169</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 16 Feb 2009 19:07:26 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><s><b>Edit</b></s><br />I traded out is_a_real_mode for is_a_magic_mode, to be more consistent in usage among the set of functions. Source code and demonstration program updated as well.</p><p>I&#39;ve created some helper functions that I think would be useful to add to the Allegro library version 4.3.11 for future use in Allegro 4.4. They let you determine whether a certain graphics card driver is windowed, fullscreen, definitely windowed or fullscreen, or whether it is a magic driver like GFX_AUTODETECT*, GFX_SAFE, and GFX_TEXT. There is also a function to determine the current graphics driver, which is useful for when you set a magic mode that can set several different drivers.</p><p>Here are the function declarations that would be added to allegro\gfx.h :
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//</span>
AL_FUNC<span class="k2">(</span><span class="k1">int</span> , is_a_windowed_mode   , <span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
AL_FUNC<span class="k2">(</span><span class="k1">int</span> , is_a_fullscreen_mode , <span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
AL_FUNC<span class="k2">(</span><span class="k1">int</span> , is_a_definite_mode   , <span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
AL_FUNC<span class="k2">(</span><span class="k1">int</span> , is_a_magic_mode      , <span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
AL_FUNC<span class="k2">(</span><span class="k1">int</span> , current_gfx_mode     , <span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="c">//</span>
</pre></div></div><p>

The first four functions allow the programmer to determine which drivers and modes they want to allow the users of their program to select during run time. In Windows, they can use the is_a_windowed_mode function to filter out any window sizes that are not smaller than the desktop to prevent a failure to set a driver. The is_a_definite_mode function can be used to prevent a user from trying to set GFX_AUTODETECT or GFX_SAFE, neither of which guarantee to be windowed or fullscreen only.</p><p>The current_gfx_mode function will let a programmer determine which of several possible graphics mode drivers has been set, especially in the case of using GFX_AUTODETECT* and GFX_SAFE modes.</p><p>Here&#39;s the code for all 5 functions that would be added to src\graphics.c :
</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">//</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="c">/* is_a_windowed_mode :</span></td></tr><tr><td class="number">5</td><td><span class="c"> * Determines if graphics_card is a windowed driver.</span></td></tr><tr><td class="number">6</td><td><span class="c"> * A return value of 0 does NOT indicate that it is</span></td></tr><tr><td class="number">7</td><td><span class="c"> * a fullscreen driver, just that it is unknown whether</span></td></tr><tr><td class="number">8</td><td><span class="c"> * it is a windowed driver. GFX_SAFE is not definitively</span></td></tr><tr><td class="number">9</td><td><span class="c"> * a windowed mode, as with system drivers that don't</span></td></tr><tr><td class="number">10</td><td><span class="c"> * provide a recommended safe mode, GFX_AUTODETECT is</span></td></tr><tr><td class="number">11</td><td><span class="c"> * used, and that can set windowed or fullscreen modes.</span></td></tr><tr><td class="number">12</td><td><span class="c"> */</span></td></tr><tr><td class="number">13</td><td><span class="k1">int</span> is_a_windowed_mode<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>   </td></tr><tr><td class="number">15</td><td>   _DRIVER_INFO<span class="k3">*</span> gfx_driver_info  <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   GFX_DRIVER<span class="k3">*</span>   gfx_driver_entry <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>   </td></tr><tr><td class="number">18</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>system_driver<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>   </td></tr><tr><td class="number">20</td><td>   <span class="k1">if</span> <span class="k2">(</span>graphics_card <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">21</td><td>   </td></tr><tr><td class="number">22</td><td>   <span class="c">/* ask the system driver for a list of graphics hardware drivers */</span></td></tr><tr><td class="number">23</td><td>   <span class="k1">if</span> <span class="k2">(</span>system_driver-&gt;gfx_drivers<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>      gfx_driver_info <span class="k3">=</span> system_driver-&gt;gfx_drivers<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>   <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>      gfx_driver_info <span class="k3">=</span> _gfx_driver_list<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">28</td><td>   </td></tr><tr><td class="number">29</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>gfx_driver_info<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>   </td></tr><tr><td class="number">31</td><td>   <span class="k1">while</span><span class="k2">(</span>gfx_driver_info-&gt;driver<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">32</td><td>      <span class="k1">if</span> <span class="k2">(</span>gfx_driver_info-&gt;id <span class="k3">=</span><span class="k3">=</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>         gfx_driver_entry <span class="k3">=</span> <span class="k2">(</span>GFX_DRIVER<span class="k3">*</span><span class="k2">)</span>gfx_driver_info-&gt;driver<span class="k2">;</span></td></tr><tr><td class="number">34</td><td>         <span class="k1">return</span> gfx_driver_entry-&gt;windowed<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>      <span class="k3">+</span><span class="k3">+</span>gfx_driver_info<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">38</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span><span class="c">// windowed status is unknown for graphics_card value</span></td></tr><tr><td class="number">39</td><td><span class="k2">}</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td><span class="c">/* is_a_fullscreen_mode :</span></td></tr><tr><td class="number">44</td><td><span class="c"> * Determines if graphics_card is a fullscreen driver.</span></td></tr><tr><td class="number">45</td><td><span class="c"> * A return value of 0 does NOT indicate that it is</span></td></tr><tr><td class="number">46</td><td><span class="c"> * a windowed driver, just that it is unknown whether</span></td></tr><tr><td class="number">47</td><td><span class="c"> * it is a fullscreen driver. GFX_AUTODETECT_FULLSCREEN</span></td></tr><tr><td class="number">48</td><td><span class="c"> * will return non-zero, but GFX_AUTODETECT will not, as</span></td></tr><tr><td class="number">49</td><td><span class="c"> * it can set either windowed or fullscreen modes.</span></td></tr><tr><td class="number">50</td><td><span class="c"> */</span></td></tr><tr><td class="number">51</td><td><span class="k1">int</span> is_a_fullscreen_mode<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">52</td><td>   </td></tr><tr><td class="number">53</td><td>   _DRIVER_INFO<span class="k3">*</span> gfx_driver_info  <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">54</td><td>   GFX_DRIVER<span class="k3">*</span>   gfx_driver_entry <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">55</td><td>   </td></tr><tr><td class="number">56</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>system_driver<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>   </td></tr><tr><td class="number">58</td><td>   <span class="k1">if</span> <span class="k2">(</span>graphics_card <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_FULLSCREEN<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">59</td><td>   </td></tr><tr><td class="number">60</td><td>   <span class="c">/* ask the system driver for a list of graphics hardware drivers */</span></td></tr><tr><td class="number">61</td><td>   <span class="k1">if</span> <span class="k2">(</span>system_driver-&gt;gfx_drivers<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">62</td><td>      gfx_driver_info <span class="k3">=</span> system_driver-&gt;gfx_drivers<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>   <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">64</td><td>      gfx_driver_info <span class="k3">=</span> _gfx_driver_list<span class="k2">;</span></td></tr><tr><td class="number">65</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">66</td><td>   </td></tr><tr><td class="number">67</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>gfx_driver_info<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>   <span class="k1">while</span><span class="k2">(</span>gfx_driver_info-&gt;driver<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">69</td><td>      <span class="k1">if</span> <span class="k2">(</span>gfx_driver_info-&gt;id <span class="k3">=</span><span class="k3">=</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">70</td><td>         gfx_driver_entry <span class="k3">=</span> <span class="k2">(</span>GFX_DRIVER<span class="k3">*</span><span class="k2">)</span>gfx_driver_info-&gt;driver<span class="k2">;</span></td></tr><tr><td class="number">71</td><td>         <span class="k1">return</span> <span class="k3">!</span>gfx_driver_entry-&gt;windowed<span class="k2">;</span></td></tr><tr><td class="number">72</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">73</td><td>      <span class="k3">+</span><span class="k3">+</span>gfx_driver_info<span class="k2">;</span></td></tr><tr><td class="number">74</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span><span class="c">// fullscreen status is unknown for graphics_card value</span></td></tr><tr><td class="number">76</td><td><span class="k2">}</span></td></tr><tr><td class="number">77</td><td>&#160;</td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td>&#160;</td></tr><tr><td class="number">80</td><td><span class="c">/* is_a_definite_mode :</span></td></tr><tr><td class="number">81</td><td><span class="c"> * Determines if graphics_card is definitively</span></td></tr><tr><td class="number">82</td><td><span class="c"> * a windowed or fullscreen driver. This means</span></td></tr><tr><td class="number">83</td><td><span class="c"> * GFX_AUTODETECT and GFX_TEXT return false.</span></td></tr><tr><td class="number">84</td><td><span class="c"> * See is_a_windowed_mode for details about GFX_SAFE.</span></td></tr><tr><td class="number">85</td><td><span class="c"> */</span></td></tr><tr><td class="number">86</td><td><span class="k1">int</span> is_a_definite_mode<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">87</td><td>   <span class="k1">if</span> <span class="k2">(</span>is_a_windowed_mode<span class="k2">(</span>graphics_card<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">88</td><td>   <span class="k1">if</span> <span class="k2">(</span>is_a_fullscreen_mode<span class="k2">(</span>graphics_card<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">89</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span><span class="c">// graphics_card is not a definitive mode</span></td></tr><tr><td class="number">90</td><td><span class="k2">}</span></td></tr><tr><td class="number">91</td><td>&#160;</td></tr><tr><td class="number">92</td><td>&#160;</td></tr><tr><td class="number">93</td><td>&#160;</td></tr><tr><td class="number">94</td><td><span class="c">/* is_a_magic_mode :</span></td></tr><tr><td class="number">95</td><td><span class="c"> * Determines whether graphics_card is one</span></td></tr><tr><td class="number">96</td><td><span class="c"> * of the magic drivers, or is unknown.</span></td></tr><tr><td class="number">97</td><td><span class="c"> */</span></td></tr><tr><td class="number">98</td><td><span class="k1">int</span> is_a_magic_mode<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">99</td><td>   <span class="k1">switch</span> <span class="k2">(</span>graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">100</td><td>      <span class="k1">case</span> GFX_AUTODETECT            <span class="k2">:</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>      <span class="k1">case</span> GFX_AUTODETECT_FULLSCREEN <span class="k2">:</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>      <span class="k1">case</span> GFX_AUTODETECT_WINDOWED   <span class="k2">:</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>      <span class="k1">case</span> GFX_SAFE                  <span class="k2">:</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>      <span class="k1">case</span> GFX_TEXT                  <span class="k2">:</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">106</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td><span class="k2">}</span></td></tr><tr><td class="number">108</td><td>&#160;</td></tr><tr><td class="number">109</td><td>&#160;</td></tr><tr><td class="number">110</td><td>&#160;</td></tr><tr><td class="number">111</td><td><span class="c">/* current_gfx_mode :</span></td></tr><tr><td class="number">112</td><td><span class="c"> * Tells you which graphics mode is currently</span></td></tr><tr><td class="number">113</td><td><span class="c"> * set. Useful for determining which driver that</span></td></tr><tr><td class="number">114</td><td><span class="c"> * GFX_AUTODETECT* or GFX_SAFE set successfully.</span></td></tr><tr><td class="number">115</td><td><span class="c"> */</span></td></tr><tr><td class="number">116</td><td><span class="k1">int</span> current_gfx_mode<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">117</td><td>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>gfx_driver<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> GFX_NONE<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">118</td><td>   <span class="k1">return</span> gfx_driver-&gt;id<span class="k2">;</span></td></tr><tr><td class="number">119</td><td><span class="k2">}</span></td></tr><tr><td class="number">120</td><td>&#160;</td></tr><tr><td class="number">121</td><td><span class="c">//</span></td></tr></tbody></table></div></div><p>

Naming conventions -</p><p>So, I have a couple questions :</p><p>1. Is the is_a_*_mode naming convention acceptable, or would people like to see something else?</p><p>If the current is_windowed_mode() function is renamed to in_windowed_mode(), then these functions could use a is_*_mode() naming convention, and I think in_windowed_mode would be a more appropriate name for it&#39;s purpose, since it checks the current graphics mode, and not an arbitrary one.</p><p>2. Do you see any improvements that could be made to the functions, or do you see any problems with them as they are?</p><p>Here is a zip file of <a href="http://www.allegro.cc/files/attachment/597741">the source code</a>, and a zip file of a statically linked <a href="http://www.allegro.cc/files/attachment/597742">win32 executable</a> of an example program that demonstrates the use of the functions to filter graphics modes used by the gfx_mode_select_filter function.</p><p>The program depends on Allegro 4.3.11+ for some fixes made to the gfx_mode_select* functions since 4.2 came out. Any revision more recent than August &#39;08 should suffice. The program itself contains directions how to use it on screen.</p><p>I&#39;ll write up accompanying documentation for the manual tomorrow, and if everything&#39;s acceptable, I&#39;ll submit a patch for everything to [AD] for review.</p><p><s><b>Edit</b></s><br />Anyone have any constructive comments to make, or any preferences on the names of the functions before I submit them to [AD]?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 12 Feb 2009 09:31:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Looks neat.</p><p>1. I would not put is_* ,but rather use in_* instead because it makes more sense.</p><p>like in_magic_mode(...)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Alianix)</author>
		<pubDate>Thu, 12 Feb 2009 11:17:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That would actually be a different set of functions though, because for these functions you can pass any graphics card that is recognized on your platform as the parameter, as opposed to finding out whether the currently set mode is one of those types. The second behaviour could be easily implemented using these functions though :</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//</span>
   <span class="k1">int</span> mode_set <span class="k3">=</span> current_gfx_mode<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
   <span class="k1">if</span> <span class="k2">(</span>is_a_windowed_mode<span class="k2">(</span>mode_set<span class="k2">)</span><span class="k2">)</span>   <span class="k2">{</span><span class="c">/* .... */</span><span class="k2">}</span>
   <span class="k1">if</span> <span class="k2">(</span>is_a_fullscreen_mode<span class="k2">(</span>mode_set<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="c">/* .... */</span><span class="k2">}</span>
<span class="c">//</span>
</pre></div></div><p>

However, the first four functions are generally more useful before you set a new graphics mode, and for customizing the allowable types of graphics modes that you wish to allow your program user to set. Also, the <i>is_windowed_mode</i> function already exists to test the current mode&#39;s type. If it were renamed to <i>in_windowed_mode</i>, then I could use the is_*_mode naming convention instead of the is_a_*_mode naming convention, but it seems fine to me either way.</p><p><s><b>Edit</b></s><br />After some suggestions by Peter, I combined the is_a_*_mode functions into a single get_gfx_mode_type function, and renamed current_gfx_mode to get_gfx_mode.</p><p>Here&#39;s the updated header addition :
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//</span>

<span class="c">/// Bitfield for relaying graphics driver type information</span>
<span class="p">#define GFX_TYPE_UNKNOWN     0</span>
<span class="p">#define GFX_TYPE_WINDOWED    1</span>
<span class="p">#define GFX_TYPE_FULLSCREEN  2</span>
<span class="p">#define GFX_TYPE_DEFINITE    4</span>
<span class="p">#define GFX_TYPE_MAGIC       8</span>

AL_FUNC<span class="k2">(</span><span class="k1">int</span> , get_gfx_mode_type , <span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
AL_FUNC<span class="k2">(</span><span class="k1">int</span> , get_gfx_mode      , <span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">//</span>
</pre></div></div><p>

Reworked source code :
</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">//</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="c">/* get_gfx_mode_type :</span></td></tr><tr><td class="number">4</td><td><span class="c"> * Evaluates the type of the graphics driver card</span></td></tr><tr><td class="number">5</td><td><span class="c"> * and tells you whether it is a windowed, fullscreen,</span></td></tr><tr><td class="number">6</td><td><span class="c"> * definitely windowed or fullscreen, and/or a magic driver.</span></td></tr><tr><td class="number">7</td><td><span class="c"> */</span></td></tr><tr><td class="number">8</td><td><span class="k1">int</span> get_gfx_mode_type<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>   <span class="k1">int</span> gfx_type <span class="k3">=</span> GFX_TYPE_UNKNOWN<span class="k2">;</span><span class="c">// 0</span></td></tr><tr><td class="number">10</td><td>   </td></tr><tr><td class="number">11</td><td>   _DRIVER_INFO<span class="k3">*</span> gfx_driver_info  <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>   GFX_DRIVER<span class="k3">*</span>   gfx_driver_entry <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>   </td></tr><tr><td class="number">14</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>system_driver<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   </td></tr><tr><td class="number">16</td><td>   <span class="c">/* ask the system driver for a list of graphics hardware drivers */</span></td></tr><tr><td class="number">17</td><td>   <span class="k1">if</span> <span class="k2">(</span>system_driver-&gt;gfx_drivers<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>      gfx_driver_info <span class="k3">=</span> system_driver-&gt;gfx_drivers<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>   <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>      gfx_driver_info <span class="k3">=</span> _gfx_driver_list<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>   </td></tr><tr><td class="number">23</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>gfx_driver_info<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>   </td></tr><tr><td class="number">25</td><td>   <span class="k1">while</span><span class="k2">(</span>gfx_driver_info-&gt;driver<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>      <span class="k1">if</span> <span class="k2">(</span>gfx_driver_info-&gt;id <span class="k3">=</span><span class="k3">=</span> graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">27</td><td>         gfx_driver_entry <span class="k3">=</span> <span class="k2">(</span>GFX_DRIVER<span class="k3">*</span><span class="k2">)</span>gfx_driver_info-&gt;driver<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>         <span class="k1">if</span> <span class="k2">(</span>gfx_driver_entry-&gt;windowed<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">29</td><td>            gfx_type <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>GFX_TYPE_WINDOWED   <span class="k3">|</span> GFX_TYPE_DEFINITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>         <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>            gfx_type <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>GFX_TYPE_FULLSCREEN <span class="k3">|</span> GFX_TYPE_DEFINITE<span class="k2">)</span><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>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">35</td><td>      <span class="k3">+</span><span class="k3">+</span>gfx_driver_info<span class="k2">;</span></td></tr><tr><td class="number">36</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">37</td><td>   </td></tr><tr><td class="number">38</td><td>   <span class="k1">switch</span> <span class="k2">(</span>graphics_card<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">39</td><td>      <span class="k1">case</span> GFX_AUTODETECT <span class="k2">:</span></td></tr><tr><td class="number">40</td><td>         gfx_type <span class="k3">|</span><span class="k3">=</span> GFX_TYPE_MAGIC<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>      <span class="k1">case</span> GFX_AUTODETECT_FULLSCREEN <span class="k2">:</span></td></tr><tr><td class="number">43</td><td>         gfx_type <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>GFX_TYPE_MAGIC <span class="k3">|</span> GFX_TYPE_FULLSCREEN <span class="k3">|</span> GFX_TYPE_DEFINITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>      <span class="k1">case</span> GFX_AUTODETECT_WINDOWED <span class="k2">:</span></td></tr><tr><td class="number">46</td><td>         gfx_type <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>GFX_TYPE_MAGIC <span class="k3">|</span> GFX_TYPE_WINDOWED   <span class="k3">|</span> GFX_TYPE_DEFINITE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>      <span class="k1">case</span> GFX_SAFE <span class="k2">:</span></td></tr><tr><td class="number">49</td><td>         gfx_type <span class="k3">|</span><span class="k3">=</span> GFX_TYPE_MAGIC<span class="k2">;</span></td></tr><tr><td class="number">50</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>      <span class="k1">case</span> GFX_TEXT <span class="k2">:</span></td></tr><tr><td class="number">52</td><td>         gfx_type <span class="k3">|</span><span class="k3">=</span> GFX_TYPE_MAGIC<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">55</td><td>   <span class="k1">return</span> gfx_type<span class="k2">;</span></td></tr><tr><td class="number">56</td><td><span class="k2">}</span></td></tr><tr><td class="number">57</td><td>&#160;</td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>&#160;</td></tr><tr><td class="number">60</td><td><span class="c">/* get_gfx_mode :</span></td></tr><tr><td class="number">61</td><td><span class="c"> * Tells you which graphics mode is currently set.</span></td></tr><tr><td class="number">62</td><td><span class="c"> * Useful for determining the actual driver that</span></td></tr><tr><td class="number">63</td><td><span class="c"> * GFX_AUTODETECT* or GFX_SAFE set successfully.</span></td></tr><tr><td class="number">64</td><td><span class="c"> */</span></td></tr><tr><td class="number">65</td><td><span class="k1">int</span> get_gfx_mode<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">66</td><td>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>gfx_driver<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> GFX_NONE<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">67</td><td>   <span class="k1">return</span> gfx_driver-&gt;id<span class="k2">;</span></td></tr><tr><td class="number">68</td><td><span class="k2">}</span></td></tr><tr><td class="number">69</td><td>&#160;</td></tr><tr><td class="number">70</td><td><span class="c">//</span></td></tr></tbody></table></div></div><p>

 <a href="http://www.allegro.cc/files/attachment/597790">Updated source code</a> of example using the functions.<br /> <a href="http://www.allegro.cc/files/attachment/597791">Static win32 4.3.11+ binary</a> of the example program.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 16 Feb 2009 16:52:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Looks good. Way to go Edgar!:D
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Don Freeman)</author>
		<pubDate>Mon, 16 Feb 2009 17:49:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks. It hasn&#39;t been accepted yet though, I&#39;m just posting the latest incarnation for comments, suggestions, or for others to use if they like.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 16 Feb 2009 19:07:26 +0000</pubDate>
	</item>
</rss>
