<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>A5 Screenshot Code: For Wiki?</title>
		<link>http://www.allegro.cc/forums/view/606622</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 12 Mar 2011 00:11:25 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t see any Allegro 5 screenshot-ing code in the wiki, so I wrote some:</p><p><b>EDIT</b>: Code was updated. Original is in spoiler at bottom of post.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number">   2</span><span class="c">//</span>
<span class="number">   3</span><span class="c">// Allegro 5 Screenshot Functions</span>
<span class="number">   4</span><span class="c">//</span>
<span class="number">   5</span><span class="c">// Usage:</span>
<span class="number">   6</span><span class="c">//</span>
<span class="number">   7</span><span class="c">// To save a screenshot Call:</span>
<span class="number">   8</span><span class="c">// ale_screenshot(const char *destination_path, const char *gamename)</span>
<span class="number">   9</span><span class="c">// </span>
<span class="number">  10</span><span class="c">// </span>
<span class="number">  11</span><span class="c">// If you simply want a screenshot to be saved when F12 is pressed, call:</span>
<span class="number">  12</span><span class="c">//</span>
<span class="number">  13</span><span class="c">// ale_screenshot_process_event(ALLEGRO_EVENT ev, const char *destination_path, const char *gamename)</span>
<span class="number">  14</span><span class="c">//</span>
<span class="number">  15</span><span class="c">// after receiving an Event, and the function will automatically check for the</span>
<span class="number">  16</span><span class="c">// key press.</span>
<span class="number">  17</span><span class="c">//</span>
<span class="number">  18</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number">  19</span>
<span class="number">  20</span>
<span class="number">  21</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="c">// Save a copy of the current target_bitmap (usually what's on the screen).</span>
<span class="number">  24</span><span class="c">// The screenshot is placed in `destination_path`.</span>
<span class="number">  25</span><span class="c">// The filename will follow the format "`gamename`-YYYYMMDD[a-z].png"</span>
<span class="number">  26</span><span class="c">// Where [a-z] starts at 'a' and increases (towards 'z') to prevent duplicates</span>
<span class="number">  27</span><span class="c">// on the same day.</span>
<span class="number">  28</span><span class="c">// This filename format allows for easy time-based sorting in a file manager,</span>
<span class="number">  29</span><span class="c">// even if the "Modified Date" or other file information is lost.</span>
<span class="number">  30</span><span class="c">//</span>
<span class="number">  31</span><span class="c">// Arguments:</span>
<span class="number">  32</span><span class="c">// `destination_path` - Where to put the screenshot. If NULL, uses</span>
<span class="number">  33</span><span class="c">//      ALLEGRO_USER_DOCUMENTS_PATH.</span>
<span class="number">  34</span><span class="c">//</span>
<span class="number">  35</span><span class="c">// `gamename` - The name of your game (only use path-valid characters).</span>
<span class="number">  36</span><span class="c">//      If NULL, uses al_get_app_name().</span>
<span class="number">  37</span><span class="c">//</span>
<span class="number">  38</span><span class="c">//</span>
<span class="number">  39</span><span class="c">// Returns:</span>
<span class="number">  40</span><span class="c">// 0 on success, anything else on failure.</span>
<span class="number">  41</span><span class="k1">inline</span> <span class="k1">int</span> ale_screenshot<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>destination_path, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span>
<span class="number">  42</span><span class="k2">{</span>
<span class="number">  43</span>  ALLEGRO_PATH <span class="k3">*</span>path<span class="k2">;</span>
<span class="number">  44</span>  <span class="k1">char</span> <span class="k3">*</span>filename, <span class="k3">*</span>filename_wp<span class="k2">;</span>
<span class="number">  45</span>  <span class="k1">struct</span> tm <span class="k3">*</span>tmp<span class="k2">;</span>
<span class="number">  46</span>  time_t t<span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">unsigned</span> <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  48</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path_cstr<span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>destination_path<span class="k2">)</span>
<span class="number">  51</span>    path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_standard_path"><span class="a">al_get_standard_path</span></a><span class="k2">(</span>ALLEGRO_USER_DOCUMENTS_PATH<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  <span class="k1">else</span>
<span class="number">  53</span>    path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path_for_directory"><span class="a">al_create_path_for_directory</span></a><span class="k2">(</span>destination_path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>path<span class="k2">)</span>
<span class="number">  56</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>gamename<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  59</span>    <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span>gamename <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_app_name"><span class="a">al_get_app_name</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number">  60</span>      <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>      <span class="k1">return</span> <span class="k3">-</span><span class="n">2</span><span class="k2">;</span>
<span class="number">  62</span>    <span class="k2">}</span>
<span class="number">  63</span>  <span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span>  t <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>  tmp <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_538.html" target="_blank">localtime</a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>tmp<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  68</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">3</span><span class="k2">;</span>
<span class="number">  70</span>  <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>  <span class="c">// Length of gamename + length of "-YYYYMMDD" + length of maximum [a-z] + NULL terminator</span>
<span class="number">  73</span>  <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span>filename_wp <span class="k3">=</span> filename <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>gamename<span class="k2">)</span> <span class="k3">+</span> <span class="n">9</span> <span class="k3">+</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number">  74</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number">  76</span>  <span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>filename, gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>  <span class="c">// Skip to the '.' in the filename, or the end.</span>
<span class="number">  80</span>  <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> <span class="k3">*</span>filename_wp <span class="k3">!</span><span class="k3">=</span> <span class="s">'.'</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">*</span>filename_wp <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>filename_wp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>
<span class="number">  82</span>  <span class="k3">*</span>filename_wp<span class="k3">+</span><span class="k3">+</span> <span class="k3">=</span> <span class="s">'-'</span><span class="k2">;</span>
<span class="number">  83</span>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_760.html" target="_blank">strftime</a><span class="k2">(</span>filename_wp, <span class="n">9</span>, <span class="s">"%Y%m%d"</span>, tmp<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">8</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  84</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">5</span><span class="k2">;</span>
<span class="number">  87</span>  <span class="k2">}</span>
<span class="number">  88</span>  filename_wp <span class="k3">+</span><span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">26</span><span class="k3">*</span><span class="n">26</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  91</span>    <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&gt;</span> <span class="n">25</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  92</span>      filename_wp<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i <span class="k3">/</span> <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number">  93</span>      filename_wp<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i % <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number">  94</span>      filename_wp<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  95</span>    <span class="k2">}</span>
<span class="number">  96</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  97</span>      filename_wp<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i % <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number">  98</span>      filename_wp<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  99</span>    <span class="k2">}</span>
<span class="number"> 100</span>
<span class="number"> 101</span>    <a href="http://www.allegro.cc/manual/al_set_path_filename"><span class="a">al_set_path_filename</span></a><span class="k2">(</span>path, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>    <a href="http://www.allegro.cc/manual/al_set_path_extension"><span class="a">al_set_path_extension</span></a><span class="k2">(</span>path, <span class="s">".png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>    path_cstr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>
<span class="number"> 105</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_filename_exists"><span class="a">al_filename_exists</span></a><span class="k2">(</span>path_cstr<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 106</span>      <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 107</span>
<span class="number"> 108</span>    <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span>path_cstr, <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 112</span>  <span class="k2">}</span>
<span class="number"> 113</span>
<span class="number"> 114</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>  <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>
<span class="number"> 117</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span>
<span class="number"> 118</span><span class="k2">}</span>
<span class="number"> 119</span>
<span class="number"> 120</span>
<span class="number"> 121</span><span class="c">// Automatically calls ale_screenshot when F12 is pressed.</span>
<span class="number"> 122</span><span class="c">// Returns 0 if a screenshot is saved, 1 if not, and anything else if an error occurs.</span>
<span class="number"> 123</span><span class="k1">inline</span> <span class="k1">int</span> ale_screenshot_process_event<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>destination_path, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span>
<span class="number"> 124</span><span class="k2">{</span>
<span class="number"> 125</span>  <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 126</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 127</span>
<span class="number"> 128</span>  <span class="k1">if</span><span class="k2">(</span>ev.keyboard.keycode <span class="k3">!</span><span class="k3">=</span> ALLEGRO_KEY_F12<span class="k2">)</span>
<span class="number"> 129</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>  <span class="k1">return</span> ale_screenshot<span class="k2">(</span>destination_path, gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span><span class="k2">}</span>
</div></div><p>


It&#39;s supposed to be copy-paste-able, so other people can just drop it into their games and live the joys of screenshots.</p><p>It&#39;s used like this:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>

ale_screenshot_process_event<span class="k2">(</span>ev, <span class="s">"screenshots/"</span>, <span class="s">"IonWave"</span><span class="k2">)</span><span class="k2">;</span>

... the <a href="http://www.allegro.cc/manual/rest"><span class="a">rest</span></a> of your game logic ...
</pre></div></div><p>

<b>or</b></p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>User clicks the screenshot button, <span class="k1">or</span> does a funny dance<span class="k2">)</span>
     ale_screenshot<span class="k2">(</span><span class="s">"screenshots/"</span>, <span class="s">"IonWave"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>


Works great for me! Should I put it on the wiki? Comments? Additions? Complaints?</p><p>Note: I tried to have the key be ALLEGRO_KEY_PRINTSCREEN, but that event never fired on my system. Of course, you&#39;re free to use whatever key you like.</p><p><b>Old Versions</b>
</p><div class="spoiler"><p>
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number">   2</span><span class="c">//</span>
<span class="number">   3</span><span class="c">// Allegro 5 Screenshot Functions</span>
<span class="number">   4</span><span class="c">//</span>
<span class="number">   5</span><span class="c">// Usage:</span>
<span class="number">   6</span><span class="c">//</span>
<span class="number">   7</span><span class="c">// To save a screenshot Call:</span>
<span class="number">   8</span><span class="c">// al_screenshot(const char *destination_path, const char *gamename)</span>
<span class="number">   9</span><span class="c">// </span>
<span class="number">  10</span><span class="c">// </span>
<span class="number">  11</span><span class="c">// If you simply want a screenshot to be saved when F11 is pressed, call:</span>
<span class="number">  12</span><span class="c">//</span>
<span class="number">  13</span><span class="c">// al_screenshot_process_event(ALLEGRO_EVENT ev, const char *destination_path, const char *gamename)</span>
<span class="number">  14</span><span class="c">//</span>
<span class="number">  15</span><span class="c">// after receiving an Event, and the function will automatically check for the</span>
<span class="number">  16</span><span class="c">// key press.</span>
<span class="number">  17</span><span class="c">//</span>
<span class="number">  18</span><span class="c">///////////////////////////////////////////////////////////////////////////////</span>
<span class="number">  19</span>
<span class="number">  20</span>
<span class="number">  21</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="c">// Save a copy of the current target_bitmap (usually what's on the screen).</span>
<span class="number">  24</span><span class="c">// The screenshot is placed in `destination_path`.</span>
<span class="number">  25</span><span class="c">// The filename will follow the format "`gamename`-YYYYMMDD[a-z].png"</span>
<span class="number">  26</span><span class="c">// Where [a-z] starts at 'a' and increases (towards 'z') to prevent duplicates</span>
<span class="number">  27</span><span class="c">// on the same day.</span>
<span class="number">  28</span><span class="c">// This filename format allows for easy time-based sorting in a file manager,</span>
<span class="number">  29</span><span class="c">// even if the "Modified Date" or other file information is lost.</span>
<span class="number">  30</span><span class="c">//</span>
<span class="number">  31</span><span class="c">// Arguments:</span>
<span class="number">  32</span><span class="c">// `destination_path` - Where to put the screenshot. If NULL, uses</span>
<span class="number">  33</span><span class="c">//      ALLEGRO_USER_DOCUMENTS_PATH.</span>
<span class="number">  34</span><span class="c">//</span>
<span class="number">  35</span><span class="c">// `gamename` - The name of your game (only use path-valid characters).</span>
<span class="number">  36</span><span class="c">//</span>
<span class="number">  37</span><span class="c">//</span>
<span class="number">  38</span><span class="c">// Returns:</span>
<span class="number">  39</span><span class="c">// 0 on success, anything else on failure.</span>
<span class="number">  40</span><span class="k1">inline</span> <span class="k1">int</span> al_screenshot<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>destination_path, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span>
<span class="number">  41</span><span class="k2">{</span>
<span class="number">  42</span>  ALLEGRO_PATH <span class="k3">*</span>path<span class="k2">;</span>
<span class="number">  43</span>  <span class="k1">size_t</span> gamename_len<span class="k2">;</span>
<span class="number">  44</span>  <span class="k1">char</span> <span class="k3">*</span>filename<span class="k2">;</span>
<span class="number">  45</span>  <span class="k1">struct</span> tm <span class="k3">*</span>tmp<span class="k2">;</span>
<span class="number">  46</span>  time_t t<span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">unsigned</span> <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  48</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path_cstr<span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>  <span class="k1">if</span><span class="k2">(</span>destination_path <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  51</span>    path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_standard_path"><span class="a">al_get_standard_path</span></a><span class="k2">(</span>ALLEGRO_USER_DOCUMENTS_PATH<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  <span class="k1">else</span>
<span class="number">  53</span>    path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path_for_directory"><span class="a">al_create_path_for_directory</span></a><span class="k2">(</span>destination_path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>  <span class="k1">if</span><span class="k2">(</span>gamename <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  56</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">if</span><span class="k2">(</span>path <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  59</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">2</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>  gamename_len <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>  t <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>  tmp <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_538.html" target="_blank">localtime</a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>  <span class="k1">if</span><span class="k2">(</span>tmp <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  65</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">3</span><span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span>  <span class="c">// Length of gamename + length of "-YYYYMMDD" + length of maximum [a-z] + NULL terminator</span>
<span class="number">  68</span>  filename <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>gamename_len <span class="k3">+</span> <span class="n">9</span> <span class="k3">+</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>  <span class="k1">if</span><span class="k2">(</span>filename <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  70</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number">  71</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>filename, gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>  filename<span class="k2">[</span>gamename_len<span class="k2">]</span> <span class="k3">=</span> <span class="s">'-'</span><span class="k2">;</span>
<span class="number">  73</span>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_760.html" target="_blank">strftime</a><span class="k2">(</span>filename <span class="k3">+</span> gamename_len <span class="k3">+</span> <span class="n">1</span>, <span class="n">9</span>, <span class="s">"%Y%m%d"</span>, tmp<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">8</span><span class="k2">)</span>
<span class="number">  74</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">5</span><span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">26</span><span class="k3">*</span><span class="n">26</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  77</span>    <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&gt;</span> <span class="n">25</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">9</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i <span class="k3">/</span> <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number">  79</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">10</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i % <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number">  80</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">11</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  81</span>    <span class="k2">}</span>
<span class="number">  82</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  83</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">9</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i % <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number">  84</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">10</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  85</span>    <span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span>    <a href="http://www.allegro.cc/manual/al_set_path_filename"><span class="a">al_set_path_filename</span></a><span class="k2">(</span>path, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>    <a href="http://www.allegro.cc/manual/al_set_path_extension"><span class="a">al_set_path_extension</span></a><span class="k2">(</span>path, <span class="s">".png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>    path_cstr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>path, ALLEGRO_NATIVE_PATH_SEP<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><a href="http://www.allegro.cc/manual/al_filename_exists"><span class="a">al_filename_exists</span></a><span class="k2">(</span>path_cstr<span class="k2">)</span><span class="k2">)</span>
<span class="number">  92</span>      <span class="k1">continue</span><span class="k2">;</span>
<span class="number">  93</span>
<span class="number">  94</span>    <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span>path_cstr, <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  98</span>  <span class="k2">}</span>
<span class="number">  99</span>
<span class="number"> 100</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>  <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>
<span class="number"> 103</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span>
<span class="number"> 104</span><span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span>
<span class="number"> 107</span><span class="c">// Automatically calls al_screenshot when F11 is pressed.</span>
<span class="number"> 108</span><span class="c">// Returns 0 if a screenshot is saved, 1 if not, and anything else if an error occurs.</span>
<span class="number"> 109</span><span class="k1">inline</span> <span class="k1">int</span> al_screenshot_process_event<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>destination_path, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span>
<span class="number"> 110</span><span class="k2">{</span>
<span class="number"> 111</span>  <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 112</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 113</span>
<span class="number"> 114</span>  <span class="k1">if</span><span class="k2">(</span>ev.keyboard.keycode <span class="k3">!</span><span class="k3">=</span> ALLEGRO_KEY_F11<span class="k2">)</span>
<span class="number"> 115</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 116</span>
<span class="number"> 117</span>  <span class="k1">return</span> al_screenshot<span class="k2">(</span>destination_path, gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span><span class="k2">}</span>
</div></div><p>
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="c">// Call this during your event processing.</span>
<span class="number">  4</span><span class="c">// Takes a screenshot of your game when F11 is pressed.</span>
<span class="number">  5</span><span class="c">// Saves the screenshot to the folder specified by `destination_path`</span>
<span class="number">  6</span><span class="c">// Files are saved in the format: "`gamename`-YYYYMMDD[a-z].png"</span>
<span class="number">  7</span><span class="c">// Where [a-z] starts a, and increases (to prevent duplicates on the same day)</span>
<span class="number">  8</span><span class="c">// Using YYYYMMDD[a-z] means that the filenames sort correctly in a file viewer,</span>
<span class="number">  9</span><span class="c">// even if the "Date Modified" information gets messed up.</span>
<span class="number"> 10</span><span class="k1">inline</span> <span class="k1">void</span> screenshoter_event<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>destination_path, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>fp<span class="k2">;</span>
<span class="number"> 13</span>  ALLEGRO_PATH <span class="k3">*</span>path<span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">size_t</span> gamename_len<span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">char</span> <span class="k3">*</span>filename<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">struct</span> tm <span class="k3">*</span>tmp<span class="k2">;</span>
<span class="number"> 17</span>  time_t t<span class="k2">;</span>
<span class="number"> 18</span>  <span class="k1">unsigned</span> <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path_cstr<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>  <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">!</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number"> 22</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  <span class="k1">if</span><span class="k2">(</span>ev.keyboard.keycode <span class="k3">!</span><span class="k3">=</span> ALLEGRO_KEY_F11<span class="k2">)</span>
<span class="number"> 25</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>  path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path_for_directory"><span class="a">al_create_path_for_directory</span></a><span class="k2">(</span>destination_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  gamename_len <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>  t <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>  tmp <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_538.html" target="_blank">localtime</a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <span class="k1">if</span><span class="k2">(</span>tmp <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 33</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>  <span class="c">// Length of gamename + length of "-YYYYMMDD" + length of maximum [a-z] + NULL terminator</span>
<span class="number"> 36</span>  filename <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>gamename_len <span class="k3">+</span> <span class="n">9</span> <span class="k3">+</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>  <span class="k1">if</span><span class="k2">(</span>filename <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 38</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 39</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>filename, gamename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>  filename<span class="k2">[</span>gamename_len<span class="k2">]</span> <span class="k3">=</span> <span class="s">'-'</span><span class="k2">;</span>
<span class="number"> 41</span>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_760.html" target="_blank">strftime</a><span class="k2">(</span>filename <span class="k3">+</span> gamename_len <span class="k3">+</span> <span class="n">1</span>, <span class="n">9</span>, <span class="s">"%Y%m%d"</span>, tmp<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">8</span><span class="k2">)</span>
<span class="number"> 42</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">26</span><span class="k3">*</span><span class="n">26</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 45</span>    <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&gt;</span> <span class="n">25</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">9</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i <span class="k3">/</span> <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number"> 47</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">10</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i % <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number"> 48</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">11</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 49</span>    <span class="k2">}</span>
<span class="number"> 50</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 51</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">9</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i % <span class="n">26</span><span class="k2">)</span> <span class="k3">+</span> <span class="s">'a'</span><span class="k2">;</span>
<span class="number"> 52</span>      filename<span class="k2">[</span>gamename_len<span class="k3">+</span><span class="n">10</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 53</span>    <span class="k2">}</span>
<span class="number"> 54</span>
<span class="number"> 55</span>    <a href="http://www.allegro.cc/manual/al_set_path_filename"><span class="a">al_set_path_filename</span></a><span class="k2">(</span>path, filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>    <a href="http://www.allegro.cc/manual/al_set_path_extension"><span class="a">al_set_path_extension</span></a><span class="k2">(</span>path, <span class="s">".png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>    path_cstr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>
<span class="number"> 59</span>    fp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span>path_cstr, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>    <span class="k1">if</span><span class="k2">(</span>fp <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 61</span>      <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>fp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>      <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 63</span>    <span class="k2">}</span>
<span class="number"> 64</span>
<span class="number"> 65</span>    <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span>path_cstr, <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 67</span>  <span class="k2">}</span>
<span class="number"> 68</span>
<span class="number"> 69</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>  <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 71</span><span class="k2">}</span>
</div></div><p>
</p></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Tue, 08 Mar 2011 04:35:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My main complaint/comment about that piece of code is that there doesn&#39;t seem to be a good reason for the function to take an ALLEGRO_EVENT. In fact, it&#39;s probably better if it doesn&#39;t, because as it is you can&#39;t &quot;drop it in&quot; as is if you want different ways to safe a screenshot. Cleaner, in my opinion, is to catch the relevant event in the main loop and then call the relevant function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Tue, 08 Mar 2011 05:00:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If the path is <span class="source-code">NULL</span>, you could default to the <span class="source-code">ALLEGRO_USER_DOCUMENTS_PATH</span> folder. If gamename is NULL, you could default to <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_app_name"><span class="a">al_get_app_name</span></a><span class="k2">(</span><span class="k2">)</span></span>.</p><p>You could use <span class="source-code"><a href="http://www.allegro.cc/manual/al_filename_exists"><span class="a">al_filename_exists</span></a><span class="k2">(</span><span class="k2">)</span></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 08 Mar 2011 05:05:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for the suggestions and comments!</p><p>I updated the code in the original post. Compiles and runs in my game (Allegro 5.0.0, MinGW).</p><p>I couldn&#39;t figure out a simple way to take adventage of <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_app_name"><span class="a">al_get_app_name</span></a></span>, since it can return the EXE&#39;s full filename (test.exe), and that would mess up the later call to <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_path_extension"><span class="a">al_set_path_extension</span></a><span class="k2">(</span>path, <span class="s">".png"</span><span class="k2">)</span><span class="k2">;</span></span> (It would overwrite the timecode things)</p><p>I&#39;ll work on that a little bit more and post another update later.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/906600#target">Evert</a> said:</div><div class="quote"><p>My main complaint/comment about that piece of code is that there doesn&#39;t seem to be a good reason for the function to take an ALLEGRO_EVENT.</p></div></div><p>
Fixed that too. Now there&#39;s two functions <span class="source-code">al_screenshot</span> which just takes a path and name, and immediately takes the screenshot; and <span class="source-code">al_screenshot_process_event</span> which is the convenience function that calls al_screenshot when F11 is pressed.</p><p>EDIT: Oh, also, it returns success codes now, so you can check that and have your game display &quot;Screenshot taken&quot; or something.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Tue, 08 Mar 2011 06:26:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>nitpick: a lot of people expect F11 to go into fullscreen mode. Maybe you should use F12 for screenshot.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Tue, 08 Mar 2011 06:32:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/906609#target">Billybob</a> said:</div><div class="quote"><p> I couldn&#39;t figure out a simple way to take adventage of al_get_app_name, since it can return the EXE&#39;s full filename
</p></div></div><p>It would be on the programmer to set the app name first.</p><p>But since <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_app_name"><span class="a">al_get_app_name</span></a><span class="k2">(</span><span class="k2">)</span></span> returns a <span class="source-code"><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span></span>, it wouldn&#39;t really be any extra effort for the programmer to pass that if he wanted.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 08 Mar 2011 06:34:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Please don&#39;t use the al_ prefix.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 08 Mar 2011 06:42:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Code updated again.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/906610#target">kazzmir</a> said:</div><div class="quote"><p>nitpick: a lot of people expect F11 to go into fullscreen mode. Maybe you should use F12 for screenshot.</p></div></div><p>
Fixed.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/906611#target">Matthew Leverton</a> said:</div><div class="quote"><p>It would be on the programmer to set the app name first.</p></div></div><p>
Well, anyway, I fixed the code to handle &#39;.&#39; in the gamename.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/906612#target">Peter Wang</a> said:</div><div class="quote"><p>Please don&#39;t use the al_ prefix.</p></div></div><p>
Sorry <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /> I&#39;ve now changed it to ale_ simply because it&#39;s related to Allegro&#39;s functions and couldn&#39;t come up with a more appropriate prefix (feel free to suggest).</p><p>EDIT: So, should this go on the Wiki, or is it complete garbage? I haven&#39;t tried to edit the wiki before ...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Tue, 08 Mar 2011 06:52:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It isn&#39;t garbge, put it on the wiki right away!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 08 Mar 2011 07:05:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I agree with amcerasoli. The more content the better!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (_Kronk_)</author>
		<pubDate>Tue, 08 Mar 2011 07:11:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cool <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /><br />Alright I wrote a page on the wiki <a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Screenshot">Allegro 5 Screenshot</a></p><p>I hope I did it right. So ... how do I link it from one of the categories and which category would it go under?</p><p>EDIT: Welp, I figured out how to put it in a category. It&#39;s just under Allegro for now...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Tue, 08 Mar 2011 07:54:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you not think it&#39;s confusing that the allegro wiki mixes A4 and A5 to the point where you are guessing which one you are reading (e.g. click on the &#39;examples&#39; wiki entry).</p><p>Perhaps it&#39;s time to actively promote A5 and legacyise (a made-up word perhaps) A4; the best way being to make A4 wiki less prominent and make the wiki A5 focused? Just like in the allegro.cc home page where the entry point for &#39;Files&#39; is allegro 5.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Tue, 08 Mar 2011 19:10:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Better yet would be to make a separate category for Allegro 4 and Allegro 5. There&#39;s no reason to make Allegro 4 articles &#39;deprecated&#39; or anything like that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 09 Mar 2011 03:42:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I kind of like the way World of Warcraft names their screenshots.</p><p>WoWScrnShot_010411_015003</p><p>You have whatever name you wish, followed by the MMDDYY_HHMMSS  (although I prefer YYMMDD_HHMMSS myself, the files will then be listed in the right order in a directory).  This gets rid of any limits on how many you can do in a day because they will never be over written and it makes it easy to know when you took the screenshot at a glance.</p><p>You could also simply do a &quot;screenshot%d&quot; or &quot;screenshot%03d&quot; and add on a number you increment for each shot.</p><p>The function prefix could also be &quot;a5_screenshot&quot; if you&#39;re looking for something that is easily recognizable other than &quot;al_&quot;.</p><p>Edit: I would also prefer it to be automated so that nothing needs to be passed to the function, just have it get the executable filename, crop the &quot;.exe&quot; off of it, then save the screenshot into the same folder that the executable resides in, perhaps creating a &quot;screenshots&quot; folder if one doesn&#39;t exist and saving all screenshots in there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 11 Mar 2011 04:15:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/907042#target">Neil Roy</a> said:</div><div class="quote"><p>I would also prefer it to be automated so that nothing needs to be passed to the function, just have it get the executable filename, crop the &quot;.exe&quot; off of it, then save the screenshot into the same folder that the executable resides in, perhaps creating a &quot;screenshots&quot; folder if one doesn&#39;t exist and saving all screenshots in there.</p></div></div><p>
Horrible idea in general. That&#39;s not the sort of behaviour you want to hard-code inside the function, because it&#39;s not portable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Fri, 11 Mar 2011 05:14:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Guess my screenshot function will be horrible and windows only then.  <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 11 Mar 2011 07:40:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s perfectly okay to write another wrapper function that does those things and then calls the underlying ale_screenshot function (everything except the different time-format).</p><p>I personally like the idea of having the screenshots folder being created automatically, but past some point I didn&#39;t want to bloat out my code. I&#39;m hoping for it to be part-useful tool/part-useful learning guide. Too much complexity and it becomes hard to understand.</p><p>So yeah, if you do write a wrapper, put it on the Wiki. It can be another sub-section of the article I put up, or a separate article linked from the original.</p><p>And thanks for commenting on it regardless! <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Fri, 11 Mar 2011 08:13:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah yes, for a learning tool, you definitely need to stick to just the basics.  You can then perhaps gives tips for how the reader could expand it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 11 Mar 2011 08:19:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/907068#target">Neil Roy</a> said:</div><div class="quote"><p>Guess my screenshot function will be horrible and windows only then.</p></div></div><p>
In Windows you can&#39;t be sure that you can write to the executable directory either. Allegro has a function for querying standard path locations.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Fri, 11 Mar 2011 10:49:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m curious, under which circumstances would an allegro game not be able to write to it&#39;s own directory?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 11 Mar 2011 11:22:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606622/907096#target">Neil Roy</a> said:</div><div class="quote"><p>I&#39;m curious, under which circumstances would an allegro game not be able to write to it&#39;s own directory?</p></div></div><p>
Installed in Program Files, and you&#39;re not admin.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Fri, 11 Mar 2011 11:30:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Under GNU/Linux, the executable may be installed to &#39;/usr/bin&#39;, with its data stored at &#39;/usr/share/mygame&#39;, then user files and configuration go to &#39;~/.mygame&#39;. The user will not have permissions to write to the executable or data directory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Fri, 11 Mar 2011 11:36:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well that explains why I don&#39;t install my games in program files and why I don&#39;t use Linux. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>In my games, I make the default installation directory %userprofile%/GameName
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sat, 12 Mar 2011 00:11:25 +0000</pubDate>
	</item>
</rss>
