<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Help with file I/O</title>
		<link>http://www.allegro.cc/forums/view/591546</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 25 May 2007 00:36:33 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m really struggling in loading a high score table.<br />I can create a blank hi-score table and save it to disk with no problems.  When I try to load the data, the program runs ok and the name is displayed ok, but the score is loaded as some high number.  I&#39;m getting confused so any help would be gratefully received.</p><p>int blank_hiscores(void)<br />{<br />   // Save a new blank hi-score table<br />   //<br />   ofstream myfile (&quot;hiscores.txt&quot;);<br />   for (int n=10; n&gt;0;n--)<br />   {<br />       myfile &lt;&lt; &quot;xxxxxx&quot;;    //name<br />       myfile &lt;&lt; &quot;\n&quot;;<br />       myfile &lt;&lt; n;           //score<br />       myfile &lt;&lt; &quot;\n&quot;; <br />   }<br />   myfile.close();   <br />   textprintf_ex(screen, font, 10, 50, makecol(255, 255, 255),-1, &quot;New Hi-score table created&quot;);<br />   rest(1000);<br />   clear_bitmap(screen);<br />}</p><p>int load_hiscores(void)<br />{<br />    string dummy;<br />    int dummy1;<br />    <br />    // Load Hi-score table<br />    //<br />   ifstream myfile (&quot;hiscores.txt&quot;);<br />   for (int n=0; n&lt;10;n++)<br />   {<br />       getline (myfile,dummy);<br />       hi_scores[n].name=dummy;<br />       textprintf_ex(screen, font, 60, 30+(n*10), makecol(255, 255, 255),-1, &quot;%s&quot;, hi_scores[n].name.c_str());<br />       <br />       getline (myfile,dummy);<br />       hi_scores[n].score=dummy1;<br />       textprintf_ex(screen, font, 200, 30+(n*10), makecol(255, 255, 255),-1, &quot;%i&quot;, hi_scores[n].score);<br />   }<br />   myfile.close();   <br />   textprintf_ex(screen, font, 10, 300, makecol(255, 255, 255),-1, &quot;Hi-Score table loaded&quot;);<br />   rest(2000);<br />   clear_bitmap(screen);<br />}
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gary_ramsgate)</author>
		<pubDate>Thu, 24 May 2007 02:37:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You do realize you never actually set dummy1 to anything, right?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Thu, 24 May 2007 03:19:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">X-G said:</div><div class="quote"><p>
You do realize you never actually set dummy1 to anything, right?
</p></div></div><p>
Since he&#39;s asking us why he&#39;s outputting garbage he probably doesn&#39;t. <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" /><img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" /> It&#39;s an honest mistake with identifiers dummy and dummy1. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p><div class="quote_container"><div class="title">gary_ramsgate said:</div><div class="quote"><p>
getline (myfile,<b>dummy</b>);<br />hi_scores[n].score=<b>dummy1</b>;
</p></div></div><p>
In other words, you mistakenly loaded the score into the string object instead of the integer. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>I haven&#39;t done C/C++, file I/O, nor Allegro programming in a while so I couldn&#39;t say if that&#39;s the only problem...</p><p>Also, use <b>[code]</b>mycodehere<b>[/code]</b> tags and <b>use descriptive variable identifiers</b>. dummy and dummy1 are worse than a and b. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>For other BBCode syntax on Allegro.cc, check out the <a href="http://allegro.cc/mockup.html">Help</a> section (the Help button on the Post Reply toolbar).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 24 May 2007 04:47:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I use this code for my games that need a high score table, it can load and save and sort names, its doesn&#39;t deal with getting names from user, and showing the high-score table, it just manages the table itself. Even if the code isn&#39;t much use, it will stick you on the right track.</p><p><a href="http://www.timorg.net/high_score.zip">http://www.timorg.net/high_score.zip</a></p><p>If you need an example of use, I will whack something together.</p><p>-Tim
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Thu, 24 May 2007 10:53:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wrote a small &quot;game template&quot; for allegro games some time ago. It also contains high score routines. You might want to take a look at it to get some ideas.</p><p>Please note that the main() routine is basically a showcase of the functions.</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">#include &lt;allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">   4</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="k1">enum</span> <span class="k2">{</span>
<span class="number">   7</span>    HI_COLOR   <span class="k3">=</span> <span class="k3">-</span><span class="n">3</span>,
<span class="number">   8</span>    TRUE_COLOR,
<span class="number">   9</span>    INDEXED_COLOR
<span class="number">  10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="k1">enum</span> <span class="k2">{</span>
<span class="number">  13</span>    MODE_FAILED,
<span class="number">  14</span>    WINDOWED,
<span class="number">  15</span>    FULLSCREEN,
<span class="number">  16</span>    WINDOWED_OR_FULLSCREEN,
<span class="number">  17</span>    FULLSCREEN_OR_WINDOWED
<span class="number">  18</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number">  21</span>    <span class="k1">int</span> w, h, bpp<span class="k2">;</span>
<span class="number">  22</span>    <span class="k1">int</span> windowed<span class="k2">;</span>
<span class="number">  23</span>    <span class="k1">int</span> preferred_bpp<span class="k2">;</span>
<span class="number">  24</span>    
<span class="number">  25</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer<span class="k2">;</span>
<span class="number">  26</span><span class="k2">}</span> ScreenInfo<span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="k1">enum</span> <span class="k2">{</span> HISCORE_COUNT <span class="k3">=</span> <span class="n">10</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  29</span><span class="k1">enum</span> <span class="k2">{</span> HISCORE_NAME_LENGTH <span class="k3">=</span> <span class="n">16</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number">  33</span>    <span class="k1">int</span>   score<span class="k2">;</span>
<span class="number">  34</span>    <span class="k1">char</span>  name<span class="k2">[</span>HISCORE_NAME_LENGTH<span class="k2">]</span><span class="k2">;</span>
<span class="number">  35</span>    <span class="k1">char</span>  new_entry<span class="k2">;</span>
<span class="number">  36</span><span class="k2">}</span> HiscoreEntry<span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="c">/* We need one element more than actually used by the game */</span>
<span class="number">  39</span>HiscoreEntry hiscores<span class="k2">[</span>HISCORE_COUNT <span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  40</span>ScreenInfo   screen_info <span class="k3">=</span> <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="n">0</span>, NULL <span class="k2">}</span><span class="k2">;</span>
<span class="number">  41</span>
<span class="number">  42</span>
<span class="number">  43</span><span class="c">/*</span>
<span class="number">  44</span><span class="c"> * Sets all hiscore table entries to a given name and value.</span>
<span class="number">  45</span><span class="c"> *     name  - the name to use. If longer than HISCORE_NAME_LENGTH, the name will be truncated.</span>
<span class="number">  46</span><span class="c"> *     score - the score </span>
<span class="number">  47</span><span class="c"> */</span>
<span class="number">  48</span><span class="k1">void</span> hiscore_init<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>name, <span class="k1">int</span> score<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  49</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number">  50</span>    <span class="k1">for</span> <span class="k2">(</span>a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> HISCORE_COUNT<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  51</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_732.html" target="_blank">snprintf</a><span class="k2">(</span>hiscores<span class="k2">[</span>a<span class="k2">]</span>.name, HISCORE_NAME_LENGTH, name<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>        hiscores<span class="k2">[</span>a<span class="k2">]</span>.score <span class="k3">=</span> score<span class="k2">;</span>
<span class="number">  53</span>        hiscores<span class="k2">[</span>a<span class="k2">]</span>.new_entry <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  54</span>    <span class="k2">}</span>
<span class="number">  55</span><span class="k2">}</span>
<span class="number">  56</span>
<span class="number">  57</span><span class="c">/*</span>
<span class="number">  58</span><span class="c"> * Compares two hiscore entries. Used by quicksort in the hiscore_add() method</span>
<span class="number">  59</span><span class="c"> */</span>
<span class="number">  60</span><span class="k1">int</span> hiscore_compare<span class="k2">(</span><span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>lhs, <span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>rhs<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  61</span>    <span class="k1">return</span> <span class="k2">(</span><span class="k2">(</span>HiscoreEntry<span class="k3">*</span><span class="k2">)</span> rhs<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>score <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span>HiscoreEntry<span class="k3">*</span><span class="k2">)</span> lhs<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>score<span class="k2">;</span>
<span class="number">  62</span><span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span>
<span class="number">  65</span><span class="c">/*</span>
<span class="number">  66</span><span class="c"> * Adds a new score to the table. After the call to this function</span>
<span class="number">  67</span><span class="c"> * you can recognize the new element in the table by the state of the</span>
<span class="number">  68</span><span class="c"> * new_entry flag - so if you want to display the latest entry to the table</span>
<span class="number">  69</span><span class="c"> * differently, just check the newly added flag.</span>
<span class="number">  70</span><span class="c"> */</span>
<span class="number">  71</span><span class="k1">void</span> hiscore_add<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>name, <span class="k1">int</span> score<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  72</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number">  73</span>    <span class="k1">for</span> <span class="k2">(</span>a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> HISCORE_COUNT<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  74</span>        hiscores<span class="k2">[</span>a<span class="k2">]</span>.new_entry <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  75</span>    <span class="k2">}</span>
<span class="number">  76</span>    
<span class="number">  77</span>    <span class="c">/* the table contains one element more than HISCORE_COUNT,</span>
<span class="number">  78</span><span class="c">     * allowing us to add new scores easily</span>
<span class="number">  79</span><span class="c">     */</span>
<span class="number">  80</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_732.html" target="_blank">snprintf</a><span class="k2">(</span>hiscores<span class="k2">[</span>HISCORE_COUNT<span class="k2">]</span>.name, HISCORE_NAME_LENGTH, name<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    hiscores<span class="k2">[</span>HISCORE_COUNT<span class="k2">]</span>.score <span class="k3">=</span> score<span class="k2">;</span>
<span class="number">  82</span>    hiscores<span class="k2">[</span>a<span class="k2">]</span>.new_entry <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  83</span>    
<span class="number">  84</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>hiscores, HISCORE_COUNT<span class="k3">+</span><span class="n">1</span>, <span class="k1">sizeof</span><span class="k2">(</span>HiscoreEntry<span class="k2">)</span>, hiscore_compare<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span><span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span><span class="k1">int</span> hiscore_save<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">  88</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number">  89</span>    <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>f <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>    
<span class="number">  91</span>    <span class="k1">if</span> <span class="k2">(</span>f <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  92</span>        <span class="k1">for</span> <span class="k2">(</span>a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> HISCORE_COUNT<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  93</span>            <a href="http://www.allegro.cc/manual/pack_fwrite" target="_blank"><span class="a">pack_fwrite</span></a><span class="k2">(</span>hiscores<span class="k2">[</span>a<span class="k2">]</span>.name, HISCORE_NAME_LENGTH, f<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>            <a href="http://www.allegro.cc/manual/pack_iputw" target="_blank"><span class="a">pack_iputw</span></a><span class="k2">(</span>hiscores<span class="k2">[</span>a<span class="k2">]</span>.score, f<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>        <span class="k2">}</span>
<span class="number">  96</span>        <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>        
<span class="number">  98</span>        <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number">  99</span>    <span class="k2">}</span>
<span class="number"> 100</span>    <span class="k1">return</span> FALSE<span class="k2">;</span>
<span class="number"> 101</span><span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span><span class="k1">int</span> hiscore_load<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"> 104</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number"> 105</span>    <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>f <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>    
<span class="number"> 107</span>    <span class="k1">if</span> <span class="k2">(</span>f <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 108</span>        <span class="k1">for</span> <span class="k2">(</span>a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> HISCORE_COUNT<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>            <a href="http://www.allegro.cc/manual/pack_fread" target="_blank"><span class="a">pack_fread</span></a><span class="k2">(</span>hiscores<span class="k2">[</span>a<span class="k2">]</span>.name, HISCORE_NAME_LENGTH, f<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>            hiscores<span class="k2">[</span>a<span class="k2">]</span>.score <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_igetw" target="_blank"><span class="a">pack_igetw</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>        <span class="k2">}</span>
<span class="number"> 112</span>        <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>        
<span class="number"> 114</span>        <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number"> 115</span>    <span class="k2">}</span>
<span class="number"> 116</span>    <span class="k1">return</span> FALSE<span class="k2">;</span>
<span class="number"> 117</span><span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</span>
<span class="number"> 120</span><span class="c">/*</span>
<span class="number"> 121</span><span class="c"> * Sets a gfx mode.</span>
<span class="number"> 122</span><span class="c"> * If you pass a literal value for the colordepth (say 16) this</span>
<span class="number"> 123</span><span class="c"> * routine will try to set the colordepth and return a failure if</span>
<span class="number"> 124</span><span class="c"> * this depth could not be set. If you pass a mode constant the</span>
<span class="number"> 125</span><span class="c"> * routine will try several fitting color depths if the preferred</span>
<span class="number"> 126</span><span class="c"> * one could not be set.</span>
<span class="number"> 127</span><span class="c"> * If you want to force a windowed mode, pass WINDOWED as windowed parameter</span>
<span class="number"> 128</span><span class="c"> * If you want to force a fullscreen mode, pass FULLSCREEN as windowed.</span>
<span class="number"> 129</span><span class="c"> * If you prefer windowed, but can live with fullscreen use WINDOWE_OR_FULLSCREEN.</span>
<span class="number"> 130</span><span class="c"> * If you prefer fullscreen, but windowed is ok as well, pass FULLSCREEN_OR_WINDOWED</span>
<span class="number"> 131</span><span class="c"> *</span>
<span class="number"> 132</span><span class="c"> *   width      - screen width</span>
<span class="number"> 133</span><span class="c"> *   height     - screen height</span>
<span class="number"> 134</span><span class="c"> *   colordepth - either HI_COLOR, TRUE_COLOR, INDEXED_COLOR or the bpp</span>
<span class="number"> 135</span><span class="c"> *                value you want to use (8, 16, etc..)</span>
<span class="number"> 136</span><span class="c"> *   windowed   - either WINDOWED, FULLSCREEN, WINDOWED_OR_FULLSCREEN or</span>
<span class="number"> 137</span><span class="c"> *                FULLSCREEN_OR_WINDOWED</span>
<span class="number"> 138</span><span class="c"> *</span>
<span class="number"> 139</span><span class="c"> *   returns TRUE if the mode was set, FALSE otherwise</span>
<span class="number"> 140</span><span class="c"> */</span>
<span class="number"> 141</span><span class="k1">int</span> init_graphics<span class="k2">(</span><span class="k1">int</span> width, <span class="k1">int</span> height, <span class="k1">int</span> colordepth, <span class="k1">int</span> windowed<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 142</span>    
<span class="number"> 143</span>    <span class="c">/*</span>
<span class="number"> 144</span><span class="c">     * Not all cards support 16 bit color, some require 15</span>
<span class="number"> 145</span><span class="c">     * even if they are listed as "HiColor".</span>
<span class="number"> 146</span><span class="c">     * In order to set a fitting graphics mode, some</span>
<span class="number"> 147</span><span class="c">     * alternatives are defined.</span>
<span class="number"> 148</span><span class="c">     * The 24 bit color mode is always tried last, since</span>
<span class="number"> 149</span><span class="c">     * the 3 byte alignement makes it a terribly slow mode to</span>
<span class="number"> 150</span><span class="c">     * use.</span>
<span class="number"> 151</span><span class="c">     */</span>
<span class="number"> 152</span>    <span class="k1">static</span> <span class="k1">int</span> hicolor<span class="k2">[</span><span class="k2">]</span>  <span class="k3">=</span>  <span class="k2">{</span> <span class="n">16</span>, <span class="n">15</span>, <span class="n">32</span>, <span class="n">24</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 153</span>    <span class="k1">static</span> <span class="k1">int</span> truecolor<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">32</span>, <span class="n">16</span>, <span class="n">15</span>, <span class="n">24</span>,  <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 154</span>    <span class="k1">int</span> <span class="k3">*</span>depths <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 155</span>    <span class="k1">int</span>  bpp   <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 156</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number"> 157</span>    <span class="k1">int</span> mode <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 158</span>    <span class="k1">int</span> result <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 159</span>    
<span class="number"> 160</span>    <span class="c">/*</span>
<span class="number"> 161</span><span class="c">     * depths is the array containing the bpp values.</span>
<span class="number"> 162</span><span class="c">     * We'll iterate over that array (if it is != NULL)</span>
<span class="number"> 163</span><span class="c">     * below and set the corresponding mode. If the</span>
<span class="number"> 164</span><span class="c">     * array is NULL we'll try to set the colordepth</span>
<span class="number"> 165</span><span class="c">     * stored in bpp (if bpp != 0)</span>
<span class="number"> 166</span><span class="c">     */</span>
<span class="number"> 167</span>    <span class="k1">switch</span> <span class="k2">(</span>colordepth<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 168</span>        <span class="k1">case</span> HI_COLOR:
<span class="number"> 169</span>            depths <span class="k3">=</span> hicolor<span class="k2">;</span>
<span class="number"> 170</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 171</span>        <span class="k1">case</span> TRUE_COLOR:
<span class="number"> 172</span>            depths <span class="k3">=</span> truecolor<span class="k2">;</span>
<span class="number"> 173</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 174</span>        <span class="k1">case</span> INDEXED_COLOR:
<span class="number"> 175</span>            bpp <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 176</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 177</span>        default:            
<span class="number"> 178</span>            bpp <span class="k3">=</span> colordepth<span class="k2">;</span>
<span class="number"> 179</span>    <span class="k2">}</span>
<span class="number"> 180</span>    
<span class="number"> 181</span>    <span class="c">/* Set the first mode (windows or fullscreen) to try */</span>
<span class="number"> 182</span>    <span class="k1">if</span> <span class="k2">(</span>windowed <span class="k3">=</span><span class="k3">=</span> WINDOWED <span class="k3">|</span><span class="k3">|</span> windowed <span class="k3">=</span><span class="k3">=</span> WINDOWED_OR_FULLSCREEN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 183</span>        mode <span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">;</span>
<span class="number"> 184</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 185</span>        mode <span class="k3">=</span> GFX_AUTODETECT_FULLSCREEN<span class="k2">;</span>
<span class="number"> 186</span>    <span class="k2">}</span>    
<span class="number"> 187</span>    
<span class="number"> 188</span>    <span class="k1">if</span> <span class="k2">(</span>depths<span class="k2">)</span> <span class="k2">{</span>  
<span class="number"> 189</span>        <span class="c">/* While no mode is set and we have alternative modes */</span>
<span class="number"> 190</span>        <span class="k1">while</span> <span class="k2">(</span>result <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> windowed <span class="k3">!</span><span class="k3">=</span> MODE_FAILED<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 191</span>            a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 192</span>            <span class="k1">while</span> <span class="k2">(</span>depths<span class="k2">[</span>a<span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> result <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 193</span>                <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depths<span class="k2">[</span>a<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>            
<span class="number"> 194</span>                result <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>mode, width, height, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>                <span class="k1">if</span> <span class="k2">(</span>result <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 196</span>                    bpp <span class="k3">=</span> depths<span class="k2">[</span>a<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 197</span>                <span class="k2">}</span>
<span class="number"> 198</span>                <span class="k3">+</span><span class="k3">+</span>a<span class="k2">;</span>
<span class="number"> 199</span>            <span class="k2">}</span>        
<span class="number"> 200</span>            
<span class="number"> 201</span>            <span class="k1">if</span> <span class="k2">(</span>result <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</span>                <span class="k1">if</span> <span class="k2">(</span>windowed <span class="k3">=</span><span class="k3">=</span> WINDOWED_OR_FULLSCREEN <span class="k3">&amp;</span><span class="k3">&amp;</span> mode <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 203</span>                    mode <span class="k3">=</span> GFX_AUTODETECT_FULLSCREEN<span class="k2">;</span>
<span class="number"> 204</span>                <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>windowed <span class="k3">=</span><span class="k3">=</span> FULLSCREEN_OR_WINDOWED <span class="k3">&amp;</span><span class="k3">&amp;</span> mode <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_FULLSCREEN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 205</span>                    mode <span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">;</span>
<span class="number"> 206</span>                <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 207</span>                    windowed <span class="k3">=</span> MODE_FAILED<span class="k2">;</span>
<span class="number"> 208</span>                <span class="k2">}</span>
<span class="number"> 209</span>            <span class="k2">}</span>
<span class="number"> 210</span>        <span class="k2">}</span>
<span class="number"> 211</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>bpp <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 212</span>        <span class="c">/* User has requested a very specific color depth */</span>
<span class="number"> 213</span>        <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>bpp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>        result <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>mode, width, height, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span>        
<span class="number"> 216</span>        <span class="k1">if</span> <span class="k2">(</span>result <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>            
<span class="number"> 217</span>            <span class="k1">if</span> <span class="k2">(</span>windowed <span class="k3">=</span><span class="k3">=</span> WINDOWED_OR_FULLSCREEN <span class="k3">&amp;</span><span class="k3">&amp;</span> mode <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 218</span>                mode <span class="k3">=</span> GFX_AUTODETECT_FULLSCREEN<span class="k2">;</span>
<span class="number"> 219</span>            <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>windowed <span class="k3">=</span><span class="k3">=</span> FULLSCREEN_OR_WINDOWED <span class="k3">&amp;</span><span class="k3">&amp;</span> mode <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_FULLSCREEN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 220</span>                mode <span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">;</span>
<span class="number"> 221</span>            <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 222</span>                windowed <span class="k3">=</span> MODE_FAILED<span class="k2">;</span>
<span class="number"> 223</span>            <span class="k2">}</span>
<span class="number"> 224</span>            
<span class="number"> 225</span>            <span class="c">/* if there is a 2nd mode we can try, try it: */</span>
<span class="number"> 226</span>            <span class="k1">if</span> <span class="k2">(</span>windowed <span class="k3">!</span><span class="k3">=</span>MODE_FAILED<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 227</span>                result <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>mode, width, height, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>            <span class="k2">}</span>
<span class="number"> 229</span>        <span class="k2">}</span>
<span class="number"> 230</span>    <span class="k2">}</span>
<span class="number"> 231</span>    
<span class="number"> 232</span>    <span class="c">/* If a mode was set, result is equal to (or greater than) 0.</span>
<span class="number"> 233</span><span class="c">     */</span>
<span class="number"> 234</span>    <span class="k1">if</span> <span class="k2">(</span>result <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 235</span>        
<span class="number"> 236</span>        <span class="c">/* If this method was called to change the graphics mode,</span>
<span class="number"> 237</span><span class="c">         * we'll try to maintain the contents of the screen</span>
<span class="number"> 238</span><span class="c">         */</span>
<span class="number"> 239</span>        <span class="k1">if</span> <span class="k2">(</span>screen_info.w <span class="k3">=</span><span class="k3">=</span> width <span class="k3">&amp;</span><span class="k3">&amp;</span> screen_info.h <span class="k3">=</span><span class="k3">=</span> height<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 240</span>            <span class="c">/* screensize was not changed, blit doublebuffer to screen */</span>
<span class="number"> 241</span>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>screen_info.buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>            
<span class="number"> 243</span>            <span class="k1">if</span> <span class="k2">(</span>screen_info.bpp <span class="k3">!</span><span class="k3">=</span> bpp<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 244</span>                <span class="c">/* colordepth has changed, we need a new buffer.</span>
<span class="number"> 245</span><span class="c">                 * If we destroy the buffer here and set it to NULL,</span>
<span class="number"> 246</span><span class="c">                 * a new bufer will be created below</span>
<span class="number"> 247</span><span class="c">                 */</span>
<span class="number"> 248</span>                <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>screen_info.buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>                screen_info.buffer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 250</span>            <span class="k2">}</span>
<span class="number"> 251</span>        <span class="k2">}</span>
<span class="number"> 252</span>        screen_info.w              <span class="k3">=</span> width<span class="k2">;</span>
<span class="number"> 253</span>        screen_info.h              <span class="k3">=</span> height<span class="k2">;</span>
<span class="number"> 254</span>        screen_info.bpp            <span class="k3">=</span> bpp<span class="k2">;</span>
<span class="number"> 255</span>        screen_info.preferred_bpp  <span class="k3">=</span> colordepth<span class="k2">;</span>
<span class="number"> 256</span>        screen_info.windowed       <span class="k3">=</span> <span class="k2">(</span>mode <span class="k3">=</span><span class="k3">=</span> GFX_AUTODETECT_WINDOWED<span class="k2">)</span><span class="k2">;</span>        
<span class="number"> 257</span>        
<span class="number"> 258</span>        <span class="c">/* create a doublebuffer if needed */</span>
<span class="number"> 259</span>        <span class="k1">if</span> <span class="k2">(</span>screen_info.buffer <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 260</span>            screen_info.buffer         <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 261</span>        <span class="k2">}</span>
<span class="number"> 262</span>        
<span class="number"> 263</span>        <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number"> 264</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>        
<span class="number"> 265</span>        <span class="k1">return</span> FALSE<span class="k2">;</span>
<span class="number"> 266</span>    <span class="k2">}</span>         
<span class="number"> 267</span><span class="k2">}</span>
<span class="number"> 268</span>
<span class="number"> 269</span><span class="c">/*</span>
<span class="number"> 270</span><span class="c"> * Allows you to toggle the fullscreen / windowed aspect of your game.</span>
<span class="number"> 271</span><span class="c"> *    windowed - set to TRUE if you want to switch to windowed mode, </span>
<span class="number"> 272</span><span class="c"> *               set to FALSE if you want to switch to fullscreen mode.</span>
<span class="number"> 273</span><span class="c"> *</span>
<span class="number"> 274</span><span class="c"> *   returns TRUE if the switch worked, FALSE otherwise</span>
<span class="number"> 275</span><span class="c"> */</span>
<span class="number"> 276</span><span class="k1">int</span> set_window_mode<span class="k2">(</span><span class="k1">int</span> windowed<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 277</span>    <span class="k1">if</span> <span class="k2">(</span>screen_info.windowed <span class="k3">!</span><span class="k3">=</span> windowed<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 278</span>        <span class="c">/* if your game uses video BITMAPs make sure to release them here,</span>
<span class="number"> 279</span><span class="c">         * and recreate them after the call to init_graphics, kinda like this:</span>
<span class="number"> 280</span><span class="c">         *</span>
<span class="number"> 281</span><span class="c">         * int result = 0;</span>
<span class="number"> 282</span><span class="c">         * unload_all_video_bitmaps();</span>
<span class="number"> 283</span><span class="c">         * result = init_graphics(screen_info.w, screen_info.h, screen_info.preferred_bpp, windowed ? WINDOWED : FULLSCREEN);</span>
<span class="number"> 284</span><span class="c">         * load_all_video_bitmaps();</span>
<span class="number"> 285</span><span class="c">         * return result;</span>
<span class="number"> 286</span><span class="c">         */</span>
<span class="number"> 287</span>        <span class="k1">return</span> init_graphics<span class="k2">(</span>screen_info.w, screen_info.h, screen_info.preferred_bpp, windowed ? WINDOWED <span class="k2">:</span> FULLSCREEN<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 288</span>    <span class="k2">}</span>
<span class="number"> 289</span>    <span class="k1">return</span> TRUE<span class="k2">;</span>
<span class="number"> 290</span><span class="k2">}</span>
<span class="number"> 291</span>
<span class="number"> 292</span>
<span class="number"> 293</span><span class="k1">void</span> update_screen<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 294</span>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>screen_info.buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, screen_info.w, screen_info.h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 295</span><span class="k2">}</span>
<span class="number"> 296</span>
<span class="number"> 297</span>
<span class="number"> 298</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> argv<span class="k2">)</span> <span class="k2">{</span>        
<span class="number"> 299</span>    <span class="k1">int</span> lastkey <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 300</span>    <span class="k1">int</span> a<span class="k2">;</span>
<span class="number"> 301</span>    
<span class="number"> 302</span>    <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span>colorFont<span class="k2">;</span>
<span class="number"> 303</span>    
<span class="number"> 304</span>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 305</span>    <span class="k1">if</span> <span class="k2">(</span>init_graphics<span class="k2">(</span><span class="n">800</span>, <span class="n">600</span>, HI_COLOR, WINDOWED_OR_FULLSCREEN<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 306</span>        <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 307</span>        
<span class="number"> 308</span>        text_mode<span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 309</span>       
<span class="number"> 310</span>        <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 311</span>        clear<span class="k2">(</span>screen_info.buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 312</span>        textprintf<span class="k2">(</span>screen_info.buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="s">"%ix%ix%i"</span>, screen_info.w, screen_info.h, screen_info.bpp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 313</span>        
<span class="number"> 314</span>        update_screen<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 315</span>        
<span class="number"> 316</span>        <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>  <span class="k2">{</span>
<span class="number"> 317</span>                        
<span class="number"> 318</span>            <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> lastkey <span class="k3">!</span><span class="k3">=</span> KEY_W<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 319</span>                lastkey <span class="k3">=</span> KEY_W<span class="k2">;</span>
<span class="number"> 320</span>                set_window_mode<span class="k2">(</span>TRUE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 321</span>            <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_F<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> lastkey <span class="k3">!</span><span class="k3">=</span> KEY_F<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 322</span>                lastkey <span class="k3">=</span> KEY_F<span class="k2">;</span>
<span class="number"> 323</span>                set_window_mode<span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 324</span>            <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 325</span>                lastkey <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 326</span>            <span class="k2">}</span>
<span class="number"> 327</span>            
<span class="number"> 328</span>            <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 329</span>        <span class="k2">}</span>
<span class="number"> 330</span>    <span class="k2">}</span>
<span class="number"> 331</span>    
<span class="number"> 332</span>    hiscore_init<span class="k2">(</span><span class="s">"This string is way too long. Way too long"</span>, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 333</span>    hiscore_add<span class="k2">(</span><span class="s">"foo"</span>, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 334</span>    hiscore_add<span class="k2">(</span><span class="s">"bar"</span>, <span class="n">30</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 335</span>    hiscore_add<span class="k2">(</span><span class="s">"baz"</span>, <span class="n">15</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 336</span>    <span class="k1">for</span> <span class="k2">(</span>a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> HISCORE_COUNT<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 337</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%2i %16s    %i\n"</span>, <span class="k2">(</span>a<span class="k3">+</span><span class="n">1</span><span class="k2">)</span>, hiscores<span class="k2">[</span>a<span class="k2">]</span>.name, hiscores<span class="k2">[</span>a<span class="k2">]</span>.score<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 338</span>    <span class="k2">}</span>
<span class="number"> 339</span>    hiscore_save<span class="k2">(</span><span class="s">"hiscores.bin"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 340</span>    hiscore_load<span class="k2">(</span><span class="s">"hiscores.bin"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 341</span>    <span class="k1">for</span> <span class="k2">(</span>a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> a <span class="k3">&lt;</span> HISCORE_COUNT<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 342</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%2i %16s    %i\n"</span>, <span class="k2">(</span>a<span class="k3">+</span><span class="n">1</span><span class="k2">)</span>, hiscores<span class="k2">[</span>a<span class="k2">]</span>.name, hiscores<span class="k2">[</span>a<span class="k2">]</span>.score<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 343</span>    <span class="k2">}</span>
<span class="number"> 344</span><span class="k2">}</span> 
<span class="number"> 345</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 24 May 2007 11:08:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Many thanks for the code. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gary_ramsgate)</author>
		<pubDate>Thu, 24 May 2007 12:28:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thats a clever trick of using enums for named constants.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Thu, 24 May 2007 14:09:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Since he&#39;s asking us why he&#39;s outputting garbage he probably doesn&#39;t.
</p></div></div><p>

It&#39;s a rhetorical device, you dimwit.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Thu, 24 May 2007 14:18:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Thats a clever trick of using enums for named constants.
</p></div></div><p>It&#39;s pretty standard for C++. It allows you to put constants in a namespace.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 24 May 2007 16:11:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
&gt; Thats a clever trick of using enums for named constants.<br />It&#39;s pretty standard for C++. It allows you to put constants in a namespace.
</p></div></div><p>
It&#39;s also pretty standard for C <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 24 May 2007 16:39:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It was / is pretty standard for C before even C++ exists <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 24 May 2007 16:48:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm, interesting. Why doesn&#39;t the grabber emit that sort of header then?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 24 May 2007 17:08:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Heh, because grabber is a secret build from allegro big 5 ;-)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 24 May 2007 17:11:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sometimes using the preprocessor can be the better option. Esp. if you use some of the more powerful features of the pp.</p><p>Another point is that using the PP is IMO the better solution for the grabber headers. You&#39;re not working with actual constants. You are actually accessing an index. You just prefer to give that index a speaking name. So the mapping is value -&gt; name.</p><p>In the case above the mapping is vice versa. I have name and map it to a value.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 24 May 2007 17:24:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">spellcaster said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">enum</span> <span class="k2">{</span>
    HI_COLOR   <span class="k3">=</span> <span class="k3">-</span><span class="n">3</span>,
    TRUE_COLOR,
    INDEXED_COLOR
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>
I&#39;m not sure I understand the point of using enums instead of the preprocessor. It would help if I understood namespaces... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> And if you&#39;re not defining a namespace, spellcaster, wouldn&#39;t it be better to use the preprocessor? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p><img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><div class="quote_container"><div class="title">X-G said:</div><div class="quote"><p>
It&#39;s a rhetorical device, you dimwit.
</p></div></div><p>
<span class="source-code">X_G.PostCount<span class="k3">+</span><span class="k3">=</span><span class="n">2</span><span class="k2">;</span></span><img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 24 May 2007 18:37:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
And if you&#39;re not defining a namespace, spellcaster, wouldn&#39;t it be better to use the preprocessor? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div></div><p>It&#39;s never better to use the preprocessor.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">enum</span> <span class="k2">{</span> NamedConstant <span class="k3">=</span> <span class="n">2</span> <span class="k2">}</span><span class="k2">;</span>

<span class="k1">void</span> foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">int</span> NamedConstant <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
    NamedConstant <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>Obviously, this is an obvious example, since no one would create a variable named NamedConstant. However, this is totally valid code that compiles. But, had you used the preprocessor, you get this error message:</p><div class="source-code snippet"><div class="inner"><pre>test.cpp: In function <span class="s">'void foo()'</span><span class="k2">:</span>
test.cpp:4: error: expected unqualified-id before numeric constant
test.cpp:5: error: invalid lvalue in assignment
</pre></div></div><p>Quite cryptic.</p><p>For a more likely example, try this on for size:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">struct</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k2">{</span>
    <span class="k1">int</span> w, h<span class="k2">;</span>
<span class="k2">}</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k2">;</span>

<span class="p">#define BITMAP 3</span>

<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer<span class="k2">;</span>
</pre></div></div><p>This sort of thing <a href="http://www.allegro.cc/forums/search/ab343d23745804d2cd60d732ebfefe3d">happens all the time</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 24 May 2007 19:24:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Name collision is just a fact of programming though. I don&#39;t think that&#39;s a valid flaw in #define&#39;ing constants. I was told that by #define&#39;ing your global constants you save memory (even though it wouldn&#39;t be much).</p><p>Besides, considering how quickly the problem was detected in those threads returned by the search I would say that it&#39;s relatively easy to track down. You also probably don&#39;t want a local variable named the same as your constant to avoid logical errors (perhaps breaking somebody else&#39;s code) so I would still lean towards the preprocessor when possible.</p><p>It&#39;s also easy to come up with a naming convention to separate preprocessor definitions from other entities.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">/*</span>
<span class="c"> *  For example, and this is not to be taken as real code...</span>
<span class="c"> */</span>

<span class="p">#define NAMED_CONSTANT 4</span>

<span class="k1">class</span> NamedConstant
<span class="k2">{</span>
private:
    <span class="k1">int</span> mintNamedConstant<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

Anybody else have an opinion? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 24 May 2007 20:59:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Name collision is just a fact of programming though.
</p></div></div><p>Sure, if you code like that. Using constants inside specific scopes completely eliminates the collision. You can select either constant:</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;iostream&gt;</span>

<span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>

<span class="k1">enum</span> <span class="k2">{</span> Bitmap <span class="k3">=</span> <span class="n">3</span> <span class="k2">}</span><span class="k2">;</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> argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
        <span class="k1">int</span> Bitmap<span class="k2">;</span>
        Bitmap <span class="k3">=</span> <span class="k2">:</span><span class="k2">:</span>Bitmap<span class="k2">;</span>

        cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Bitmap constant is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k2">:</span><span class="k2">:</span>Bitmap <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
        cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Bitmap variable is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> Bitmap <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>

        <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I was told that by #define&#39;ing your global constants you save memory (even though it wouldn&#39;t be much).
</p></div></div><p>Well, that&#39;s wrong, as the compiler will inline the constants anyways.</p><p>[append]<br />In addition, even if creating an enumeration caused any extra space to be allocated in the executable (which it doesn&#39;t), it would have to be enough data to cause the program to spill over into the next allocation chunk, otherwise it&#39;s insignificant. Allocation chunks are typically (or always, on a Pentium, IIRC) 4kb.<br />[/append]</p><p>The problem is that you&#39;re using the preprocessor to do things the compiler should be doing. It&#39;s like running a sed script on your code before you compile it. The sed script doesn&#39;t know whether or not you mean the variable or the constant, it just does string replacement. The compiler can accomplish the same task, but more intelligently.</p><p>Libraries that use the preprocessor have to prefix all of their symbols to avoid collision. Instead of doing that, use namespaces. Compare:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// GfxLib.h</span>
<span class="p">#define MODE_SOLID 0x01</span>
</pre></div></div><p>That uses the preprocessor to represent a flag passed to a function that draws shapes in a graphics library.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// ColDetek.h</span>
<span class="p">#define MODE_SOLID 0x03</span>
</pre></div></div><p>That uses the preprocessor to represent a flag passed to a function in a physics library. Now one can&#39;t use both libraries in the same file. To fix the problem, both libraries need to be made compliant.
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// GfxLib.h</span>
<span class="p">#define GFXLIB_MODE_SOLID 0x01</span>
</pre></div></div><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// ColDetek.h</span>
<span class="p">#define COLDETEK_MODE_SOLID 0x03</span>
</pre></div></div><p>Now to use them we have to use GFXLIB_MODE_SOLID or COLDETEK_MODE_SOLID. How annoying. Instead, use enumerations and namespaces:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// GfxLib.h</span>
<span class="k1">namespace</span> GfxLib
<span class="k2">{</span>

<span class="k1">enum</span> <span class="k2">{</span> MODE_SOLID <span class="k3">=</span> <span class="n">1</span> <span class="k2">}</span><span class="k2">;</span>

<span class="k2">}</span>
</pre></div></div><div class="source-code snippet"><div class="inner"><pre><span class="c">// ColDetek.h</span>
<span class="k1">namespace</span> ColDetek
<span class="k2">{</span>

<span class="k1">enum</span> <span class="k2">{</span> MODE_SOLID <span class="k3">=</span> <span class="n">3</span> <span class="k2">}</span><span class="k2">;</span>

<span class="k2">}</span>
</pre></div></div><p>

Now, when you want to use ColDetek&#39;s constants, use ColDetek::MODE_SOLID. How does that help? using statements!</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">using</span> <span class="k1">namespace</span> ColDetek<span class="k2">;</span>

    ColDetekFunction<span class="k2">(</span>data, MODE_SOLID<span class="k2">)</span><span class="k2">;</span>

    <span class="c">// Lots of other calls to ColDetek's functions</span>

    <span class="c">// But we can still use GfxLib in this function</span>
    GfxLib::DrawPoly<span class="k2">(</span>points, GfxLib::MODE_SOLID<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Namespace collisions are <i>not</i> a product of programming, they are a product of poor programming.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 24 May 2007 21:55:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks. That&#39;s all very interesting.
</p><div class="quote_container"><div class="title">CGamesPlay said:</div><div class="quote"><p>
Well, that&#39;s wrong, as the compiler will inline the constants anyways.
</p></div></div><p>
What do you mean by inline the constants? And if there&#39;s no difference in memory usage between using the preprocessor instruction (#define) versus an enum or const definition then why do large commercial games #define constants? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p><div class="quote_container"><div class="title">CGamesPlay said:</div><div class="quote"><p>
<span class="source-code">    <span class="c">// But we can still use GfxLib in this function</span></span>
</p></div></div><p>
However, wouldn&#39;t using the prefix make it more clear which namespace each constant belongs to?
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> foo<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    ColDetekFunction<span class="k2">(</span>data, ColDetek::MODE_SOLID<span class="k2">)</span><span class="k2">;</span>

    <span class="c">// Lots of other calls to ColDetek's functions</span>

    GfxLib::DrawPoly<span class="k2">(</span>points, GfxLib::MODE_SOLID<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 24 May 2007 22:35:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I&#39;m curious how the std namespace is defined if it contains entities from different header files... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> Or am I misunderstanding the structure of the std namespace? Does anybody know where it&#39;s defined? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div></div><p>Namespaces don&#39;t have to be declared all at once. This code is valid:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">namespace</span> foo <span class="k2">{</span>

<span class="k1">enum</span> <span class="k2">{</span> constant <span class="k2">}</span><span class="k2">;</span>

<span class="k2">}</span>

<span class="k1">namespace</span> foo <span class="k2">{</span>

<span class="k1">void</span> func<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

<span class="k2">}</span>
</pre></div></div><p>

</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, is there a way to switch between namespaces in the same scope (for example, use one, stop using it, use another one)?
</p></div></div><p>No, because you can&#39;t &quot;stop&quot; using a namespace.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
However, wouldn&#39;t using the prefix make it more clear which namespace each constant belongs to?
</p></div></div><p>Well, yeah, but it can also make it more convoluted. It gets to a point where you know you are passing ColDetek::MODE_SOLID to ColDetek::ColDetekFunction.</p><p>[edit]<br />Changed example to be clearer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 24 May 2007 22:46:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">CGamesPlay said:</div><div class="quote"><p>
Namespaces don&#39;t have to be declared all at once.
</p></div></div><p>
</p><div class="quote_container"><div class="title">CGamesPlay said:</div><div class="quote"><p>
No, because you can&#39;t &quot;stop&quot; using a namespace.
</p></div></div><p>
Good to know. Thanks!</p><p> <sub>I deleted the question in his quote convinced that it was a stupid qustion... Apparently it wasn&#39;t... :-/</sub>
</p><div class="quote_container"><div class="title">CGamesPlay said:</div><div class="quote"><p>
Well, yeah, but it can also make it more convoluted. It gets to a point where you know you are passing ColDetek::MODE_SOLID to ColDetek::ColDetekFunction.
</p></div></div><p>
True... <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 24 May 2007 22:51:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I&#39;m not sure I understand the point of using enums instead of the preprocessor. It would help if I understood namespaces... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> And if you&#39;re not defining a namespace, spellcaster, wouldn&#39;t it be better to use the preprocessor?
</p></div></div><p>

Define &quot;better&quot;. Main reason I use enums is that the enum is known to the compiler, so it&#39;ll appear in compile errors, during debug sessions, etc.</p><p>Besides that, it&#39;s mainly a question of style and lazyness. If I have a couple of constants with increasing numbers, using an enum is simply less typing. </p><p>And adding a new constant in the middle is way less work.<br />I also think that the enum version is slightly more readable.</p><p>You can also do something like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">enum</span> <span class="k2">{</span>
   MODE_1 <span class="k3">=</span> <span class="n">0</span>
   MODE_2,
   MODE_3,
   MODE_GUARD        
<span class="k2">}</span><span class="k2">;</span>
<span class="k1">int</span> countModes <span class="k3">=</span> MODE_GUARD <span class="k3">-</span> MODE_1<span class="k2">;</span>
<span class="c">// or</span>
<span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> a<span class="k3">=</span>MODE_1<span class="k2">;</span> a <span class="k3">&lt;</span> MODE_GUARD<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>a<span class="k2">)</span> <span class="k2">{</span>
<span class="k2">}</span>
</pre></div></div><p>

That&#39;s nothing fancy. It&#39;s just practical and provides a bit of comfort. Oh, have I mentioned that it saves a couple of keystrokes as well? This will not make a big difference, but if you start using it, and you need to insert that extra constant in the middle, you&#39;ll just smile, do it and smile even broader.</p><p>Guess that&#39;s why I&#39;m using it. I like that warm feeling <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Thu, 24 May 2007 22:57:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
What do you mean by inline the constants?
</p></div></div><div class="source-code snippet"><div class="inner"><pre><span class="k1">const</span> <span class="k1">int</span> NamedConstant <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="k1">enum</span> <span class="k2">{</span> NamedConstant <span class="k3">=</span> <span class="n">3</span> <span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>Both of those create constant values. When you compile the program, the compiler doesn&#39;t actually add that value to the code as a variable. Instead, wherever you use the variable, the compiler places the literal value there directly.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
And if there&#39;s no difference in memory usage between using the preprocessor instruction (#define) versus an enum or const definition then why do large commercial games #define constants? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div></div><p>In C there isn&#39;t much advantage to using the enums since you can&#39;t select the scoping you want anyways (in other words the function scope will always override the named constant and you can&#39;t change that behavior), and #defines are easier to type, I suppose (there might be an argument for &quot;easier to read&quot; also). The tradition probably carried over into C++, before people popularly realized the concrete benefits of enumerations.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 24 May 2007 22:59:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In C++, this is also quite nice:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">enum</span> WHATEVER <span class="k2">{</span>
ENUM1,
ENUM2,
ENUM3
<span class="k2">}</span>

<span class="k1">void</span> doSomething<span class="k2">(</span>WHATEVER w<span class="k2">)</span> <span class="k2">{</span>
...
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Thu, 24 May 2007 23:35:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">typedef</span> <span class="k1">enum</span> WHATEVER <span class="k2">{</span>
ENUM1,
ENUM2,
ENUM3
<span class="k2">}</span> WHATEVER<span class="k2">;</span>

<span class="k1">void</span> doSomething<span class="k2">(</span>WHATEVER w<span class="k2">)</span> <span class="k2">{</span>
...
<span class="k2">}</span>
</pre></div></div><p>
Works in C, too. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Another thing I like about enums:
</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">enum</span> eFoo <span class="k2">{</span></td></tr><tr><td class="number">2</td><td>   VAL1,</td></tr><tr><td class="number">3</td><td>   VAL2,</td></tr><tr><td class="number">4</td><td>   VAL3</td></tr><tr><td class="number">5</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">void</span> someFunc<span class="k2">(</span>eFoo foo<span class="k2">)</span></td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>   <span class="k1">switch</span><span class="k2">(</span>foo<span class="k2">)</span></td></tr><tr><td class="number">10</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>      <span class="k1">case</span> VAL1:</td></tr><tr><td class="number">12</td><td>         ...</td></tr><tr><td class="number">13</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      <span class="k1">case</span> VAL2:</td></tr><tr><td class="number">15</td><td>         ...</td></tr><tr><td class="number">16</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
will generate a warning in GCC that &#39;VAL3&#39; isn&#39;t handled in the switch statement.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 24 May 2007 23:55:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>KittyCat: that&#39;s pretty interesting !
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Fri, 25 May 2007 00:36:33 +0000</pubDate>
	</item>
</rss>
