<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Native file dialog patch</title>
		<link>http://www.allegro.cc/forums/view/614917</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 28 Dec 2014 04:15:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>NiteHackr brought up a bug in the native file dialog on Windows in this thread :<br /><a href="https://www.allegro.cc/forums/thread/614568">https://www.allegro.cc/forums/thread/614568</a></p><p>I said I would work on it and I finally got time to do it.</p><p>The problem was that lpstrFile wasn&#39;t being initialized (which prevented you from specifying the open/save file), and lpstrInitialDir was being initialized with a file path and not a folder.</p><p>This is a very hacky fix, but it works, and it gives you the idea. I&#39;m not aware of the conventions for handling strings in allegro internals so this is the way I did it. Here&#39;s the diff for win_dialog.c :</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>c:\mingw\LIBS\A5GIT\allegro\addons\native_dialog&gt;diff <span class="k3">-</span>u win_dialog.c win_dialog.new.c
<span class="number">  3</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> win_dialog.c        <span class="n">2014</span><span class="k3">-</span><span class="n">12</span><span class="k3">-</span><span class="n">22</span> <span class="n">18</span><span class="k2">:</span><span class="n">37</span><span class="k2">:</span><span class="n">54</span>.<span class="n">191842600</span> <span class="k3">-</span><span class="n">0600</span>
<span class="number">  4</span><span class="k3">+</span><span class="k3">+</span><span class="k3">+</span> win_dialog.new.c    <span class="n">2014</span><span class="k3">-</span><span class="n">12</span><span class="k3">-</span><span class="n">22</span> <span class="n">18</span><span class="k2">:</span><span class="n">41</span><span class="k2">:</span><span class="n">30</span>.<span class="n">428979100</span> <span class="k3">-</span><span class="n">0600</span>
<span class="number">  5</span>@@ <span class="k3">-</span><span class="n">8</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">8</span>,<span class="n">8</span> @@
<span class="number">  6</span>  <span class="k3">*</span>
<span class="number">  7</span>  <span class="k3">*</span><span class="k3">/</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k3">+</span>#include <span class="k3">&lt;</span>stdio.h&gt;
<span class="number"> 10</span><span class="k3">+</span>
<span class="number"> 11</span> <span class="p">#include "allegro5/allegro.h"</span>
<span class="number"> 12</span> <span class="p">#include "allegro5/allegro_native_dialog.h"</span>
<span class="number"> 13</span> <span class="p">#include "allegro5/internal/aintern.h"</span>
<span class="number"> 14</span>@@ <span class="k3">-</span><span class="n">141</span>,<span class="n">8</span> <span class="k3">+</span><span class="n">143</span>,<span class="n">10</span> @@
<span class="number"> 15</span>    OPENFILENAME ofn<span class="k2">;</span>
<span class="number"> 16</span>    ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 18</span><span class="k3">+</span>   <span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span>    <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">char</span> buf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k3">+</span>   <span class="k1">char</span> dirbuf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 22</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>    win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number"> 25</span>@@ <span class="k3">-</span><span class="n">170</span>,<span class="n">8</span> <span class="k3">+</span><span class="n">174</span>,<span class="n">20</span> @@
<span class="number"> 26</span>    ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 29</span><span class="k3">-</span>      ofn.lpstrInitialDir <span class="k3">=</span>
<span class="number"> 30</span><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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span><span class="k3">+</span>
<span class="number"> 32</span><span class="k3">+</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>buf , <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> , ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span><span class="k3">+</span>
<span class="number"> 34</span><span class="k3">+</span>      <span class="c">// this is wrong - fc_initial_path holds the filename, not the base dir</span>
<span class="number"> 35</span><span class="k3">+</span>      <span class="k1">for</span> <span class="k2">(</span>count <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> count <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_path_num_components"><span class="a">al_get_path_num_components</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>count<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 36</span><span class="k3">+</span>         <span class="k1">char</span><span class="k3">*</span> dirpath <span class="k3">=</span> <span class="k3">&amp;</span>dirbuf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k3">+</span>         <span class="k1">int</span> n <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span><span class="k3">+</span>         <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> path_comp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_path_component"><span class="a">al_get_path_component</span></a><span class="k2">(</span>fd-&gt;fc_initial_path , count<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k3">+</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>dirpath , <span class="s">"%s%c%n"</span> , path_comp , ALLEGRO_NATIVE_PATH_SEP , <span class="k3">&amp;</span>n<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k3">+</span>         dirpath <span class="k3">+</span><span class="k3">=</span> n<span class="k2">;</span>
<span class="number"> 41</span><span class="k3">+</span>      <span class="k2">}</span>
<span class="number"> 42</span><span class="k3">+</span>
<span class="number"> 43</span><span class="k3">+</span>      ofn.lpstrInitialDir <span class="k3">=</span> dirbuf<span class="k2">;</span>
<span class="number"> 44</span><span class="k3">+</span><span class="c">//         al_path_cstr(fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP);</span>
<span class="number"> 45</span>    <span class="k2">}</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number"> 48</span>
<span class="number"> 49</span>c:\mingw\LIBS\A5GIT\allegro\addons\native_dialog&gt;
</div></div><p>

And here&#39;s the full al_show_native_file_dialog with the changes made to it so you can see more easily what is different. Whatever changes you wanna make are fine. I&#39;m sure it will need to be edited before being accepted.</p><div class="source-code"><div class="toolbar"><span class="name">win_dialog.c</span><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"> 139</span>
<span class="number"> 140</span><span class="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number"> 141</span>   ALLEGRO_NATIVE_DIALOG <span class="k3">*</span>fd<span class="k2">)</span>
<span class="number"> 142</span><span class="k2">{</span>
<span class="number"> 143</span>   OPENFILENAME ofn<span class="k2">;</span>
<span class="number"> 144</span>   ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number"> 145</span>   <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 146</span>   <span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 147</span>   <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number"> 148</span>   <span class="k1">char</span> buf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 149</span>   <span class="k1">char</span> dirbuf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 150</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 151</span>
<span class="number"> 152</span>   win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FOLDER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 155</span>      <span class="k1">return</span> select_folder<span class="k2">(</span>win_display, fd<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>   <span class="k2">}</span>
<span class="number"> 157</span>
<span class="number"> 158</span>   <span class="c">/* Selecting a file. */</span>
<span class="number"> 159</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>ofn, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>OPENFILENAME<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 160</span>   ofn.lStructSize <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>OPENFILENAME<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>   ofn.hwndOwner <span class="k3">=</span> <span class="k2">(</span>win_display<span class="k2">)</span> ? win_display-&gt;window <span class="k2">:</span> NULL<span class="k2">;</span>
<span class="number"> 162</span>
<span class="number"> 163</span>   <span class="c">/* Create filter string. */</span>
<span class="number"> 164</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_patterns<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 165</span>      filter_string <span class="k3">=</span> create_filter_string<span class="k2">(</span>fd-&gt;fc_patterns<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>      ofn.lpstrFilter <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>   <span class="k2">}</span>
<span class="number"> 168</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 169</span>      <span class="c">/* List all files by default. */</span>
<span class="number"> 170</span>      ofn.lpstrFilter <span class="k3">=</span> <span class="s">"All Files\0*.*\0\0"</span><span class="k2">;</span>
<span class="number"> 171</span>   <span class="k2">}</span>
<span class="number"> 172</span>
<span class="number"> 173</span>   ofn.lpstrFile <span class="k3">=</span> buf<span class="k2">;</span>
<span class="number"> 174</span>   ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>
<span class="number"> 176</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 177</span>
<span class="number"> 178</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>buf , <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> , ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>
<span class="number"> 180</span>      <span class="c">// this is wrong - fc_initial_path holds the filename, not the base dir</span>
<span class="number"> 181</span>      <span class="k1">for</span> <span class="k2">(</span>count <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> count <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_path_num_components"><span class="a">al_get_path_num_components</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>count<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 182</span>         <span class="k1">char</span><span class="k3">*</span> dirpath <span class="k3">=</span> <span class="k3">&amp;</span>dirbuf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 183</span>         <span class="k1">int</span> n <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 184</span>         <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> path_comp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_path_component"><span class="a">al_get_path_component</span></a><span class="k2">(</span>fd-&gt;fc_initial_path , count<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 185</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>dirpath , <span class="s">"%s%c%n"</span> , path_comp , ALLEGRO_NATIVE_PATH_SEP , <span class="k3">&amp;</span>n<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 186</span>         dirpath <span class="k3">+</span><span class="k3">=</span> n<span class="k2">;</span>
<span class="number"> 187</span>      <span class="k2">}</span>
<span class="number"> 188</span>      
<span class="number"> 189</span>      ofn.lpstrInitialDir <span class="k3">=</span> dirbuf<span class="k2">;</span>
<span class="number"> 190</span><span class="c">//         al_path_cstr(fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP);</span>
<span class="number"> 191</span>   <span class="k2">}</span>
<span class="number"> 192</span>
<span class="number"> 193</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number"> 194</span>      ofn.lpstrTitle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>fd-&gt;title<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>
<span class="number"> 196</span>   flags <span class="k3">|</span><span class="k3">=</span> OFN_NOCHANGEDIR <span class="k3">|</span> OFN_EXPLORER<span class="k2">;</span>
<span class="number"> 197</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_SAVE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 198</span>      flags <span class="k3">|</span><span class="k3">=</span> OFN_OVERWRITEPROMPT<span class="k2">;</span>
<span class="number"> 199</span>   <span class="k2">}</span>
<span class="number"> 200</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 201</span>      flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FILE_MUST_EXIST<span class="k2">)</span> ? OFN_FILEMUSTEXIST <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 202</span>   <span class="k2">}</span>
<span class="number"> 203</span>   flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_MULTIPLE<span class="k2">)</span> ? OFN_ALLOWMULTISELECT <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 204</span>   flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_SHOW_HIDDEN<span class="k2">)</span> ? <span class="n">0x10000000</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// NOTE: 0x10000000 is FORCESHOWHIDDEN</span>
<span class="number"> 205</span>   ofn.Flags <span class="k3">=</span> flags<span class="k2">;</span>
<span class="number"> 206</span>
<span class="number"> 207</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> OFN_OVERWRITEPROMPT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 208</span>      ret <span class="k3">=</span> GetSaveFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 209</span>   <span class="k2">}</span>
<span class="number"> 210</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 211</span>      ret <span class="k3">=</span> GetOpenFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span>   <span class="k2">}</span>
<span class="number"> 213</span>
<span class="number"> 214</span>   <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>filter_string<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><span class="k3">!</span>ret<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 217</span>      DWORD err <span class="k3">=</span> GetLastError<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>      <span class="k1">if</span> <span class="k2">(</span>err <span class="k3">!</span><span class="k3">=</span> ERROR_SUCCESS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 219</span>         <span class="k1">char</span> buf<span class="k2">[</span><span class="n">1000</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 220</span>         FormatMessage<span class="k2">(</span>FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, <span class="n">0</span>, buf, <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>         ALLEGRO_ERROR<span class="k2">(</span><span class="s">"al_show_native_file_dialog failed: %s\n"</span>, buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>      <span class="k2">}</span>
<span class="number"> 223</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 224</span>   <span class="k2">}</span>
<span class="number"> 225</span>
<span class="number"> 226</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> OFN_ALLOWMULTISELECT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 227</span>      <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 228</span>      <span class="c">/* Count number of file names in buf. */</span>
<span class="number"> 229</span>      fd-&gt;fc_path_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 230</span>      i <span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>      <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 232</span>         <span class="k1">if</span> <span class="k2">(</span>buf<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 233</span>            fd-&gt;fc_path_count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 234</span>            <span class="k1">if</span> <span class="k2">(</span>buf<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span>
<span class="number"> 235</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 236</span>         <span class="k2">}</span>
<span class="number"> 237</span>         i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 238</span>      <span class="k2">}</span>
<span class="number"> 239</span>   <span class="k2">}</span>
<span class="number"> 240</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 241</span>      fd-&gt;fc_path_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 242</span>   <span class="k2">}</span>
<span class="number"> 243</span>
<span class="number"> 244</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_path_count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 245</span>      fd-&gt;fc_paths <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>      fd-&gt;fc_paths<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path"><span class="a">al_create_path</span></a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>   <span class="k2">}</span>
<span class="number"> 248</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 249</span>      <span class="k1">int</span> i, p<span class="k2">;</span>
<span class="number"> 250</span>      <span class="c">/* If multiple files were selected, the first string in buf is the</span>
<span class="number"> 251</span><span class="c">       * directory name, followed by each of the file names terminated by NUL.</span>
<span class="number"> 252</span><span class="c">       */</span>
<span class="number"> 253</span>      fd-&gt;fc_paths <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>fd-&gt;fc_path_count <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 254</span>      i <span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>      <span class="k1">for</span> <span class="k2">(</span>p <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> p <span class="k3">&lt;</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>fd-&gt;fc_path_count<span class="k2">;</span> p<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 256</span>         fd-&gt;fc_paths<span class="k2">[</span>p<span class="k2">]</span> <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>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 257</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>fd-&gt;fc_paths<span class="k2">[</span>p<span class="k2">]</span>, buf<span class="k3">+</span>i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 258</span>         i <span class="k3">+</span><span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k3">+</span>i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 259</span>      <span class="k2">}</span>
<span class="number"> 260</span>   <span class="k2">}</span>
<span class="number"> 261</span>
<span class="number"> 262</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 263</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 23 Dec 2014 07:00:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could you change this to use <span class="source-code"><a href="http://www.allegro.cc/manual/al_remove_path_component"><span class="a">al_remove_path_component</span></a></span>?</p><p>EDIT: nvm, only removes directories...</p><p>EDIT2: Try <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_path_filename"><span class="a">al_set_path_filename</span></a></span> with NULL.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 23 Dec 2014 07:10:54 +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/614917/1008493#target">Trent Gamblin</a> said:</div><div class="quote"><p>Try al_set_path_filename with NULL.</p></div></div><p>
Okay, it works. Just have to keep in mind the file name has been erased from fc_initial_path for future reference.</p><p>Here&#39;s the new diff :
</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>c:\mingw\LIBS\A5GIT\allegro\addons\native_dialog&gt;diff <span class="k3">-</span>u win_dialog.old.c win_dialog.c
<span class="number">  2</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> win_dialog.old.c    <span class="n">2014</span><span class="k3">-</span><span class="n">12</span><span class="k3">-</span><span class="n">22</span> <span class="n">18</span><span class="k2">:</span><span class="n">37</span><span class="k2">:</span><span class="n">54</span>.<span class="n">191842600</span> <span class="k3">-</span><span class="n">0600</span>
<span class="number">  3</span><span class="k3">+</span><span class="k3">+</span><span class="k3">+</span> win_dialog.c        <span class="n">2014</span><span class="k3">-</span><span class="n">12</span><span class="k3">-</span><span class="n">22</span> <span class="n">22</span><span class="k2">:</span><span class="n">44</span><span class="k2">:</span><span class="n">16</span>.<span class="n">880748300</span> <span class="k3">-</span><span class="n">0600</span>
<span class="number">  4</span>@@ <span class="k3">-</span><span class="n">17</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">17</span>,<span class="n">8</span> @@
<span class="number">  5</span>
<span class="number">  6</span> <span class="p">#include "allegro5/allegro_windows.h"</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k3">+</span>#include <span class="k3">&lt;</span>string.h&gt;
<span class="number">  9</span><span class="k3">+</span>
<span class="number"> 10</span> <span class="c">/* We use RichEdit by default. */</span>
<span class="number"> 11</span> <span class="p">#include &lt;richedit.h&gt;</span>
<span class="number"> 12</span> <span class="p">#include &lt;shlobj.h&gt; // for folder selector</span>
<span class="number"> 13</span>@@ <span class="k3">-</span><span class="n">142</span>,<span class="n">9</span> <span class="k3">+</span><span class="n">144</span>,<span class="n">12</span> @@
<span class="number"> 14</span>    ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number"> 17</span><span class="k3">-</span>   <span class="k1">char</span> buf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 18</span><span class="k3">+</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k3">+</span>   <span class="k1">char</span> buf<span class="k2">[</span>BUFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 20</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k3">+</span>   buf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k3">+</span>
<span class="number"> 24</span>    win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FOLDER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>@@ <span class="k3">-</span><span class="n">166</span>,<span class="n">12</span> <span class="k3">+</span><span class="n">171</span>,<span class="n">15</span> @@
<span class="number"> 28</span>       ofn.lpstrFilter <span class="k3">=</span> <span class="s">"All Files\0*.*\0\0"</span><span class="k2">;</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span>
<span class="number"> 31</span><span class="k3">+</span>   <span class="c">/* Provide buffer for file chosen by dialog. */</span>
<span class="number"> 32</span>    ofn.lpstrFile <span class="k3">=</span> buf<span class="k2">;</span>
<span class="number"> 33</span>    ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span><span class="k3">+</span>   <span class="c">/* Initialize file name buffer and starting directory */</span>
<span class="number"> 36</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 37</span><span class="k3">-</span>      ofn.lpstrInitialDir <span class="k3">=</span>
<span class="number"> 38</span><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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k3">+</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_769.html" target="_blank">strncpy</a><span class="k2">(</span>buf , <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>fd-&gt;fc_initial_path , ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span> , BUFSIZE <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k3">+</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>fd-&gt;fc_initial_path , NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span><span class="k3">+</span>      ofn.lpstrInitialDir <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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    <span class="k2">}</span>
<span class="number"> 43</span>
<span class="number"> 44</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number"> 45</span>
<span class="number"> 46</span>c:\mingw\LIBS\A5GIT\allegro\addons\native_dialog&gt;
</div></div><p>

And the function :
</p><div class="source-code"><div class="toolbar"><span class="name">win_dialog.new.c</span><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"> 140</span><span class="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number"> 141</span>   ALLEGRO_NATIVE_DIALOG <span class="k3">*</span>fd<span class="k2">)</span>
<span class="number"> 142</span><span class="k2">{</span>
<span class="number"> 143</span>   OPENFILENAME ofn<span class="k2">;</span>
<span class="number"> 144</span>   ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number"> 145</span>   <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 146</span>   <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number"> 147</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="number"> 148</span>   <span class="k1">char</span> buf<span class="k2">[</span>BUFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 149</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 150</span>
<span class="number"> 151</span>   buf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span>
<span class="number"> 152</span>
<span class="number"> 153</span>   win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number"> 154</span>
<span class="number"> 155</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FOLDER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 156</span>      <span class="k1">return</span> select_folder<span class="k2">(</span>win_display, fd<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>   <span class="k2">}</span>
<span class="number"> 158</span>
<span class="number"> 159</span>   <span class="c">/* Selecting a file. */</span>
<span class="number"> 160</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>ofn, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>OPENFILENAME<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>   ofn.lStructSize <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>OPENFILENAME<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>   ofn.hwndOwner <span class="k3">=</span> <span class="k2">(</span>win_display<span class="k2">)</span> ? win_display-&gt;window <span class="k2">:</span> NULL<span class="k2">;</span>
<span class="number"> 163</span>
<span class="number"> 164</span>   <span class="c">/* Create filter string. */</span>
<span class="number"> 165</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_patterns<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 166</span>      filter_string <span class="k3">=</span> create_filter_string<span class="k2">(</span>fd-&gt;fc_patterns<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>      ofn.lpstrFilter <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 168</span>   <span class="k2">}</span>
<span class="number"> 169</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 170</span>      <span class="c">/* List all files by default. */</span>
<span class="number"> 171</span>      ofn.lpstrFilter <span class="k3">=</span> <span class="s">"All Files\0*.*\0\0"</span><span class="k2">;</span>
<span class="number"> 172</span>   <span class="k2">}</span>
<span class="number"> 173</span>
<span class="number"> 174</span>   <span class="c">/* Provide buffer for file chosen by dialog. */</span>
<span class="number"> 175</span>   ofn.lpstrFile <span class="k3">=</span> buf<span class="k2">;</span>
<span class="number"> 176</span>   ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span>
<span class="number"> 178</span>   <span class="c">/* Initialize file name buffer and starting directory */</span>
<span class="number"> 179</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 180</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_769.html" target="_blank">strncpy</a><span class="k2">(</span>buf , <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>fd-&gt;fc_initial_path , ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span> , BUFSIZE <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</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>fd-&gt;fc_initial_path , NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>      ofn.lpstrInitialDir <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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>   <span class="k2">}</span>
<span class="number"> 184</span>
<span class="number"> 185</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number"> 186</span>      ofn.lpstrTitle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>fd-&gt;title<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>
<span class="number"> 188</span>   flags <span class="k3">|</span><span class="k3">=</span> OFN_NOCHANGEDIR <span class="k3">|</span> OFN_EXPLORER<span class="k2">;</span>
<span class="number"> 189</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_SAVE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 190</span>      flags <span class="k3">|</span><span class="k3">=</span> OFN_OVERWRITEPROMPT<span class="k2">;</span>
<span class="number"> 191</span>   <span class="k2">}</span>
<span class="number"> 192</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 193</span>      flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FILE_MUST_EXIST<span class="k2">)</span> ? OFN_FILEMUSTEXIST <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 194</span>   <span class="k2">}</span>
<span class="number"> 195</span>   flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_MULTIPLE<span class="k2">)</span> ? OFN_ALLOWMULTISELECT <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 196</span>   flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_SHOW_HIDDEN<span class="k2">)</span> ? <span class="n">0x10000000</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// NOTE: 0x10000000 is FORCESHOWHIDDEN</span>
<span class="number"> 197</span>   ofn.Flags <span class="k3">=</span> flags<span class="k2">;</span>
<span class="number"> 198</span>
<span class="number"> 199</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> OFN_OVERWRITEPROMPT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 200</span>      ret <span class="k3">=</span> GetSaveFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>   <span class="k2">}</span>
<span class="number"> 202</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 203</span>      ret <span class="k3">=</span> GetOpenFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>   <span class="k2">}</span>
<span class="number"> 205</span>
<span class="number"> 206</span>   <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 207</span>
<span class="number"> 208</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ret<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 209</span>      DWORD err <span class="k3">=</span> GetLastError<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span>      <span class="k1">if</span> <span class="k2">(</span>err <span class="k3">!</span><span class="k3">=</span> ERROR_SUCCESS<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 211</span>         <span class="k1">char</span> buf<span class="k2">[</span><span class="n">1000</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 212</span>         FormatMessage<span class="k2">(</span>FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, <span class="n">0</span>, buf, <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>         ALLEGRO_ERROR<span class="k2">(</span><span class="s">"al_show_native_file_dialog failed: %s\n"</span>, buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>      <span class="k2">}</span>
<span class="number"> 215</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 216</span>   <span class="k2">}</span>
<span class="number"> 217</span>
<span class="number"> 218</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> OFN_ALLOWMULTISELECT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 219</span>      <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 220</span>      <span class="c">/* Count number of file names in buf. */</span>
<span class="number"> 221</span>      fd-&gt;fc_path_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 222</span>      i <span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 223</span>      <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 224</span>         <span class="k1">if</span> <span class="k2">(</span>buf<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 225</span>            fd-&gt;fc_path_count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 226</span>            <span class="k1">if</span> <span class="k2">(</span>buf<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span>
<span class="number"> 227</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 228</span>         <span class="k2">}</span>
<span class="number"> 229</span>         i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 230</span>      <span class="k2">}</span>
<span class="number"> 231</span>   <span class="k2">}</span>
<span class="number"> 232</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 233</span>      fd-&gt;fc_path_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 234</span>   <span class="k2">}</span>
<span class="number"> 235</span>
<span class="number"> 236</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_path_count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 237</span>      fd-&gt;fc_paths <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>      fd-&gt;fc_paths<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path"><span class="a">al_create_path</span></a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 239</span>   <span class="k2">}</span>
<span class="number"> 240</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 241</span>      <span class="k1">int</span> i, p<span class="k2">;</span>
<span class="number"> 242</span>      <span class="c">/* If multiple files were selected, the first string in buf is the</span>
<span class="number"> 243</span><span class="c">       * directory name, followed by each of the file names terminated by NUL.</span>
<span class="number"> 244</span><span class="c">       */</span>
<span class="number"> 245</span>      fd-&gt;fc_paths <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>fd-&gt;fc_path_count <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>      i <span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>      <span class="k1">for</span> <span class="k2">(</span>p <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> p <span class="k3">&lt;</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>fd-&gt;fc_path_count<span class="k2">;</span> p<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 248</span>         fd-&gt;fc_paths<span class="k2">[</span>p<span class="k2">]</span> <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>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</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>fd-&gt;fc_paths<span class="k2">[</span>p<span class="k2">]</span>, buf<span class="k3">+</span>i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>         i <span class="k3">+</span><span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k3">+</span>i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 251</span>      <span class="k2">}</span>
<span class="number"> 252</span>   <span class="k2">}</span>
<span class="number"> 253</span>
<span class="number"> 254</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 255</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 23 Dec 2014 12:17:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not sure this is going to work. Shouldn&#39;t it check if it&#39;s an OPEN dialog before trimming the filename? After all if it&#39;s a SAVE dialog you want the filename right?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 23 Dec 2014 12:41:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well you don&#39;t need it. Unless someone tried to re-use a file dialog. We could clone a path, discard the filename, set the directory and then discard the clone after calling GetOpenFileName. Because you don&#39;t want the filename in the string for the directory in open or save dialogs.</p><p>New patch using a clone of the directory and checking for an empty filename to respect the documentation that states when the path ends with a directory separator then the filename is not specified, but the starting directory is :</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>c:\mingw\LIBS\A5GIT\allegro\addons\native_dialog&gt;diff <span class="k3">-</span>u win_dialog.old.c win_dialog.c
<span class="number">  3</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> win_dialog.old.c    <span class="n">2014</span><span class="k3">-</span><span class="n">12</span><span class="k3">-</span><span class="n">22</span> <span class="n">18</span><span class="k2">:</span><span class="n">37</span><span class="k2">:</span><span class="n">54</span>.<span class="n">191842600</span> <span class="k3">-</span><span class="n">0600</span>
<span class="number">  4</span><span class="k3">+</span><span class="k3">+</span><span class="k3">+</span> win_dialog.c        <span class="n">2014</span><span class="k3">-</span><span class="n">12</span><span class="k3">-</span><span class="n">23</span> <span class="n">12</span><span class="k2">:</span><span class="n">51</span><span class="k2">:</span><span class="n">26</span>.<span class="n">442877800</span> <span class="k3">-</span><span class="n">0600</span>
<span class="number">  5</span>@@ <span class="k3">-</span><span class="n">17</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">17</span>,<span class="n">8</span> @@
<span class="number">  6</span>
<span class="number">  7</span> <span class="p">#include "allegro5/allegro_windows.h"</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k3">+</span>#include <span class="k3">&lt;</span>string.h&gt;
<span class="number"> 10</span><span class="k3">+</span>
<span class="number"> 11</span> <span class="c">/* We use RichEdit by default. */</span>
<span class="number"> 12</span> <span class="p">#include &lt;richedit.h&gt;</span>
<span class="number"> 13</span> <span class="p">#include &lt;shlobj.h&gt; // for folder selector</span>
<span class="number"> 14</span>@@ <span class="k3">-</span><span class="n">142</span>,<span class="n">8</span> <span class="k3">+</span><span class="n">144</span>,<span class="n">12</span> @@
<span class="number"> 15</span>    ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number"> 18</span><span class="k3">-</span>   <span class="k1">char</span> buf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k3">+</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k3">+</span>   <span class="k1">char</span> buf<span class="k2">[</span>BUFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 21</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 22</span><span class="k3">+</span>   ALLEGRO_PATH<span class="k3">*</span> initial_dir_path <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k3">+</span>
<span class="number"> 24</span><span class="k3">+</span>   buf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>@@ <span class="k3">-</span><span class="n">166</span>,<span class="n">12</span> <span class="k3">+</span><span class="n">172</span>,<span class="n">24</span> @@
<span class="number"> 29</span>       ofn.lpstrFilter <span class="k3">=</span> <span class="s">"All Files\0*.*\0\0"</span><span class="k2">;</span>
<span class="number"> 30</span>    <span class="k2">}</span>
<span class="number"> 31</span>
<span class="number"> 32</span><span class="k3">+</span>   <span class="c">/* Provide buffer for file chosen by dialog. */</span>
<span class="number"> 33</span>    ofn.lpstrFile <span class="k3">=</span> buf<span class="k2">;</span>
<span class="number"> 34</span>    ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span><span class="k3">+</span>   <span class="c">/* Initialize file name buffer and starting directory */</span>
<span class="number"> 37</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 38</span><span class="k3">-</span>      ofn.lpstrInitialDir <span class="k3">=</span>
<span class="number"> 39</span><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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k3">+</span>
<span class="number"> 41</span><span class="k3">+</span>      <span class="c">/* Respect an empty filename */</span>
<span class="number"> 42</span><span class="k3">+</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_path_filename"><span class="a">al_get_path_filename</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span><span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 43</span><span class="k3">+</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_769.html" target="_blank">strncpy</a><span class="k2">(</span>buf , <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>fd-&gt;fc_initial_path , ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span> , BUFSIZE <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span><span class="k3">+</span>      <span class="k2">}</span>
<span class="number"> 45</span><span class="k3">+</span>
<span class="number"> 46</span><span class="k3">+</span>      <span class="c">/* Clone the directory */</span>
<span class="number"> 47</span><span class="k3">+</span>      initial_dir_path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_clone_path"><span class="a">al_clone_path</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span><span class="k3">+</span>      <span class="k1">if</span> <span class="k2">(</span>initial_dir_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span><span class="k3">+</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>initial_dir_path , NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span><span class="k3">+</span>         ofn.lpstrInitialDir <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>initial_dir_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span><span class="k3">+</span>      <span class="k2">}</span>
<span class="number"> 52</span>    <span class="k2">}</span>
<span class="number"> 53</span>
<span class="number"> 54</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number"> 55</span>@@ <span class="k3">-</span><span class="n">194</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">212</span>,<span class="n">10</span> @@
<span class="number"> 56</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 57</span>       ret <span class="k3">=</span> GetOpenFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>    <span class="k2">}</span>
<span class="number"> 59</span><span class="k3">+</span>
<span class="number"> 60</span><span class="k3">+</span>   <span class="k1">if</span> <span class="k2">(</span>initial_dir_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 61</span><span class="k3">+</span>      <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>initial_dir_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span><span class="k3">+</span>   <span class="k2">}</span>
<span class="number"> 63</span>
<span class="number"> 64</span>    <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>
<span class="number"> 66</span>
<span class="number"> 67</span>c:\mingw\LIBS\A5GIT\allegro\addons\native_dialog&gt;
</div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="name">win_dialog.new.c</span><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="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number">   3</span>   ALLEGRO_NATIVE_DIALOG <span class="k3">*</span>fd<span class="k2">)</span>
<span class="number">   4</span><span class="k2">{</span>
<span class="number">   5</span>   OPENFILENAME ofn<span class="k2">;</span>
<span class="number">   6</span>   ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number">   7</span>   <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   8</span>   <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number">   9</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="number">  10</span>   <span class="k1">char</span> buf<span class="k2">[</span>BUFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number">  11</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  12</span>   ALLEGRO_PATH<span class="k3">*</span> initial_dir_path <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span>   buf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>   win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FOLDER<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  19</span>      <span class="k1">return</span> select_folder<span class="k2">(</span>win_display, fd<span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>   <span class="k2">}</span>
<span class="number">  21</span>
<span class="number">  22</span>   <span class="c">/* Selecting a file. */</span>
<span class="number">  23</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>ofn, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>OPENFILENAME<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>   ofn.lStructSize <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>OPENFILENAME<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>   ofn.hwndOwner <span class="k3">=</span> <span class="k2">(</span>win_display<span class="k2">)</span> ? win_display-&gt;window <span class="k2">:</span> NULL<span class="k2">;</span>
<span class="number">  26</span>
<span class="number">  27</span>   <span class="c">/* Create filter string. */</span>
<span class="number">  28</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_patterns<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  29</span>      filter_string <span class="k3">=</span> create_filter_string<span class="k2">(</span>fd-&gt;fc_patterns<span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>      ofn.lpstrFilter <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>   <span class="k2">}</span>
<span class="number">  32</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  33</span>      <span class="c">/* List all files by default. */</span>
<span class="number">  34</span>      ofn.lpstrFilter <span class="k3">=</span> <span class="s">"All Files\0*.*\0\0"</span><span class="k2">;</span>
<span class="number">  35</span>   <span class="k2">}</span>
<span class="number">  36</span>
<span class="number">  37</span>   <span class="c">/* Provide buffer for file chosen by dialog. */</span>
<span class="number">  38</span>   ofn.lpstrFile <span class="k3">=</span> buf<span class="k2">;</span>
<span class="number">  39</span>   ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>
<span class="number">  41</span>   <span class="c">/* Initialize file name buffer and starting directory */</span>
<span class="number">  42</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  43</span>      
<span class="number">  44</span>      <span class="c">/* Respect an empty filename */</span>
<span class="number">  45</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_path_filename"><span class="a">al_get_path_filename</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span><span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  46</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_769.html" target="_blank">strncpy</a><span class="k2">(</span>buf , <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>fd-&gt;fc_initial_path , ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span> , BUFSIZE <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>      <span class="k2">}</span>
<span class="number">  48</span>      
<span class="number">  49</span>      <span class="c">/* Clone the directory */</span>
<span class="number">  50</span>      initial_dir_path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_clone_path"><span class="a">al_clone_path</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>      <span class="k1">if</span> <span class="k2">(</span>initial_dir_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  52</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>initial_dir_path , NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>         ofn.lpstrInitialDir <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>initial_dir_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</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="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number">  58</span>      ofn.lpstrTitle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>fd-&gt;title<span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</span>   flags <span class="k3">|</span><span class="k3">=</span> OFN_NOCHANGEDIR <span class="k3">|</span> OFN_EXPLORER<span class="k2">;</span>
<span class="number">  61</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_SAVE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  62</span>      flags <span class="k3">|</span><span class="k3">=</span> OFN_OVERWRITEPROMPT<span class="k2">;</span>
<span class="number">  63</span>   <span class="k2">}</span>
<span class="number">  64</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  65</span>      flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_FILE_MUST_EXIST<span class="k2">)</span> ? OFN_FILEMUSTEXIST <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  66</span>   <span class="k2">}</span>
<span class="number">  67</span>   flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_MULTIPLE<span class="k2">)</span> ? OFN_ALLOWMULTISELECT <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  68</span>   flags <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span>fd-&gt;flags <span class="k3">&amp;</span> ALLEGRO_FILECHOOSER_SHOW_HIDDEN<span class="k2">)</span> ? <span class="n">0x10000000</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// NOTE: 0x10000000 is FORCESHOWHIDDEN</span>
<span class="number">  69</span>   ofn.Flags <span class="k3">=</span> flags<span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> OFN_OVERWRITEPROMPT<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  72</span>      ret <span class="k3">=</span> GetSaveFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>   <span class="k2">}</span>
<span class="number">  74</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  75</span>      ret <span class="k3">=</span> GetOpenFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>   <span class="k2">}</span>
<span class="number">  77</span>   
<span class="number">  78</span>   <span class="k1">if</span> <span class="k2">(</span>initial_dir_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  79</span>      <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>initial_dir_path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>   <span class="k2">}</span>
<span class="number">  81</span>
<span class="number">  82</span>   <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>
<span class="number">  84</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ret<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  85</span>      DWORD err <span class="k3">=</span> GetLastError<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>      <span class="k1">if</span> <span class="k2">(</span>err <span class="k3">!</span><span class="k3">=</span> ERROR_SUCCESS<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>         <span class="k1">char</span> buf<span class="k2">[</span><span class="n">1000</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  88</span>         FormatMessage<span class="k2">(</span>FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, <span class="n">0</span>, buf, <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>         ALLEGRO_ERROR<span class="k2">(</span><span class="s">"al_show_native_file_dialog failed: %s\n"</span>, buf<span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>      <span class="k2">}</span>
<span class="number">  91</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  92</span>   <span class="k2">}</span>
<span class="number">  93</span>
<span class="number">  94</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> OFN_ALLOWMULTISELECT<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  95</span>      <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  96</span>      <span class="c">/* Count number of file names in buf. */</span>
<span class="number">  97</span>      fd-&gt;fc_path_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  98</span>      i <span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>      <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 100</span>         <span class="k1">if</span> <span class="k2">(</span>buf<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 101</span>            fd-&gt;fc_path_count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 102</span>            <span class="k1">if</span> <span class="k2">(</span>buf<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span><span class="k2">)</span>
<span class="number"> 103</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 104</span>         <span class="k2">}</span>
<span class="number"> 105</span>         i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 106</span>      <span class="k2">}</span>
<span class="number"> 107</span>   <span class="k2">}</span>
<span class="number"> 108</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 109</span>      fd-&gt;fc_path_count <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 110</span>   <span class="k2">}</span>
<span class="number"> 111</span>
<span class="number"> 112</span>   <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_path_count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 113</span>      fd-&gt;fc_paths <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>      fd-&gt;fc_paths<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path"><span class="a">al_create_path</span></a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>   <span class="k2">}</span>
<span class="number"> 116</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 117</span>      <span class="k1">int</span> i, p<span class="k2">;</span>
<span class="number"> 118</span>      <span class="c">/* If multiple files were selected, the first string in buf is the</span>
<span class="number"> 119</span><span class="c">       * directory name, followed by each of the file names terminated by NUL.</span>
<span class="number"> 120</span><span class="c">       */</span>
<span class="number"> 121</span>      fd-&gt;fc_paths <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span>fd-&gt;fc_path_count <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>      i <span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>      <span class="k1">for</span> <span class="k2">(</span>p <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> p <span class="k3">&lt;</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>fd-&gt;fc_path_count<span class="k2">;</span> p<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 124</span>         fd-&gt;fc_paths<span class="k2">[</span>p<span class="k2">]</span> <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>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</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>fd-&gt;fc_paths<span class="k2">[</span>p<span class="k2">]</span>, buf<span class="k3">+</span>i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>         i <span class="k3">+</span><span class="k3">=</span> skip_nul_terminated_string<span class="k2">(</span>buf<span class="k3">+</span>i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>      <span class="k2">}</span>
<span class="number"> 128</span>   <span class="k2">}</span>
<span class="number"> 129</span>
<span class="number"> 130</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 131</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 24 Dec 2014 01:17:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cloning the string wasn&#39;t the problem I had in mind. When you go to save a file sometimes you want a default filename, for examples when you do Save As. How is this specified if not through fc_initial_path?</p><p>EDIT: Ok I think you last patch looks good (upon further inspection <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />)... let me look closer and I&#39;ll let you know.</p><p>EDIT2: Here&#39;s what I came up with. Your patch fails in some cases. For example if you set the initial path to C:\Users\trent then it assumes trent is a filename. I check if it exists, if it does I check if it&#39;s a directory, if it doesn&#39;t exist I assume it&#39;s a file.</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>diff <span class="k3">-</span><span class="k3">-</span>git a<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c b<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c
<span class="number">  2</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="n">1f2ffb0</span>..<span class="n">04bd873</span> <span class="n">100644</span>
<span class="number">  3</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> a<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c
<span class="number">  4</span><span class="k3">+</span><span class="k3">+</span><span class="k3">+</span> b<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c
<span class="number">  5</span>@@ <span class="k3">-</span><span class="n">17</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">17</span>,<span class="n">8</span> @@
<span class="number">  6</span> 
<span class="number">  7</span> <span class="p">#include "allegro5/allegro_windows.h"</span>
<span class="number">  8</span> 
<span class="number">  9</span><span class="k3">+</span>#include <span class="k3">&lt;</span>string.h&gt;
<span class="number"> 10</span><span class="k3">+</span>
<span class="number"> 11</span> <span class="c">/* We use RichEdit by default. */</span>
<span class="number"> 12</span> <span class="p">#include &lt;richedit.h&gt;</span>
<span class="number"> 13</span> <span class="p">#include &lt;shlobj.h&gt; // for folder selector</span>
<span class="number"> 14</span>@@ <span class="k3">-</span><span class="n">142</span>,<span class="n">8</span> <span class="k3">+</span><span class="n">144</span>,<span class="n">12</span> @@ <span class="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number"> 15</span>    ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="number"> 18</span><span class="k3">-</span>   <span class="k1">char</span> buf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span> <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k3">+</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k3">+</span>   <span class="k1">char</span> buf<span class="k2">[</span>BUFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 21</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 22</span><span class="k3">+</span>   ALLEGRO_PATH<span class="k3">*</span> initial_dir_path <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 23</span><span class="k3">+</span>
<span class="number"> 24</span><span class="k3">+</span>   buf<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 25</span> 
<span class="number"> 26</span>    win_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_WIN <span class="k3">*</span><span class="k2">)</span>display<span class="k2">;</span>
<span class="number"> 27</span> 
<span class="number"> 28</span>@@ <span class="k3">-</span><span class="n">166</span>,<span class="n">12</span> <span class="k3">+</span><span class="n">172</span>,<span class="n">34</span> @@ <span class="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number"> 29</span>       ofn.lpstrFilter <span class="k3">=</span> <span class="s">"All Files\0*.*\0\0"</span><span class="k2">;</span>
<span class="number"> 30</span>    <span class="k2">}</span>
<span class="number"> 31</span> 
<span class="number"> 32</span><span class="k3">+</span>   <span class="c">/* Provide buffer for file chosen by dialog. */</span>
<span class="number"> 33</span>    ofn.lpstrFile <span class="k3">=</span> buf<span class="k2">;</span>
<span class="number"> 34</span>    ofn.nMaxFile <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span> 
<span class="number"> 36</span><span class="k3">+</span>   <span class="c">/* Initialize file name buffer and starting directory */</span>
<span class="number"> 37</span>    <span class="k1">if</span> <span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 38</span><span class="k3">-</span>      ofn.lpstrInitialDir <span class="k3">=</span>
<span class="number"> 39</span><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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k3">+</span>      <span class="k1">bool</span> is_dir<span class="k2">;</span>
<span class="number"> 41</span><span class="k3">+</span>      <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path <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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span><span class="k3">+</span>
<span class="number"> 43</span><span class="k3">+</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<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 44</span><span class="k3">+</span>         <a href="http://www.allegro.cc/manual/ALLEGRO_FS_ENTRY"><span class="a">ALLEGRO_FS_ENTRY</span></a> <span class="k3">*</span>fs <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_fs_entry"><span class="a">al_create_fs_entry</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span><span class="k3">+</span>         is_dir <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_fs_entry_mode"><span class="a">al_get_fs_entry_mode</span></a><span class="k2">(</span>fs<span class="k2">)</span> <span class="k3">&amp;</span> ALLEGRO_FILEMODE_ISDIR<span class="k2">;</span>
<span class="number"> 46</span><span class="k3">+</span>         <a href="http://www.allegro.cc/manual/al_destroy_fs_entry"><span class="a">al_destroy_fs_entry</span></a><span class="k2">(</span>fs<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span><span class="k3">+</span>      <span class="k2">}</span>
<span class="number"> 48</span><span class="k3">+</span>      <span class="k1">else</span>
<span class="number"> 49</span><span class="k3">+</span>         is_dir <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 50</span><span class="k3">+</span>
<span class="number"> 51</span><span class="k3">+</span>      <span class="k1">if</span> <span class="k2">(</span>is_dir<span class="k2">)</span>
<span class="number"> 52</span><span class="k3">+</span>            ofn.lpstrInitialDir <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>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span><span class="k3">+</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 54</span><span class="k3">+</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_769.html" target="_blank">strncpy</a><span class="k2">(</span>buf, <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>fd-&gt;fc_initial_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span>, BUFSIZE <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span><span class="k3">+</span>         <span class="c">/* Clone the directory */</span>
<span class="number"> 56</span><span class="k3">+</span>         initial_dir_path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_clone_path"><span class="a">al_clone_path</span></a><span class="k2">(</span>fd-&gt;fc_initial_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span><span class="k3">+</span>         <span class="k1">if</span> <span class="k2">(</span>initial_dir_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 58</span><span class="k3">+</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>initial_dir_path, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span><span class="k3">+</span>            ofn.lpstrInitialDir <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>initial_dir_path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k3">+</span>         <span class="k2">}</span>
<span class="number"> 61</span><span class="k3">+</span>      <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="k1">if</span> <span class="k2">(</span>fd-&gt;title<span class="k2">)</span>
<span class="number"> 65</span>@@ <span class="k3">-</span><span class="n">195</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">223</span>,<span class="n">10</span> @@ <span class="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
<span class="number"> 66</span>       ret <span class="k3">=</span> GetOpenFileName<span class="k2">(</span><span class="k3">&amp;</span>ofn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>    <span class="k2">}</span>
<span class="number"> 68</span> 
<span class="number"> 69</span><span class="k3">+</span>   <span class="k1">if</span> <span class="k2">(</span>initial_dir_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 70</span><span class="k3">+</span>      <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>initial_dir_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 71</span><span class="k3">+</span>   <span class="k2">}</span>
<span class="number"> 72</span><span class="k3">+</span>
<span class="number"> 73</span>    <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>filter_string<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span> 
<span class="number"> 75</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ret<span class="k2">)</span> <span class="k2">{</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Wed, 24 Dec 2014 04:03:39 +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/614917/1008512#target">Trent Gamblin</a> said:</div><div class="quote"><p>
EDIT2: Here&#39;s what I came up with. Your patch fails in some cases. For example if you set the initial path to C:\Users\trent then it assumes trent is a filename. I check if it exists, if it does I check if it&#39;s a directory, if it doesn&#39;t exist I assume it&#39;s a file.
</p></div></div><p>
Okay, yeah, your patch looks fine and it passes my simple test program.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 25 Dec 2014 10:45:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the patch, it&#39;s committed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Thu, 25 Dec 2014 20:33:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This needs a small fix to compile on Windows: </p><div class="source-code snippet"><div class="inner"><pre>diff <span class="k3">-</span><span class="k3">-</span>git a<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c b<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c
<a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="n">04bd873</span>..a47b9a6 <span class="n">100644</span>
<span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> a<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c
<span class="k3">+</span><span class="k3">+</span><span class="k3">+</span> b<span class="k3">/</span>addons<span class="k3">/</span>native_dialog<span class="k3">/</span>win_dialog.c
@@ <span class="k3">-</span><span class="n">144</span>,<span class="n">8</span> <span class="k3">+</span><span class="n">144</span>,<span class="n">8</span> @@ <span class="k1">bool</span> _al_show_native_file_dialog<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display,
    ALLEGRO_DISPLAY_WIN <span class="k3">*</span>win_display<span class="k2">;</span>
    <span class="k1">int</span> flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
    <span class="k1">bool</span> ret<span class="k2">;</span>
<span class="k3">-</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="k3">-</span>   <span class="k1">char</span> buf<span class="k2">[</span>BUFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="k3">+</span>   <span class="k1">char</span> buf<span class="k2">[</span><span class="n">4096</span><span class="k2">]</span><span class="k2">;</span>
<span class="k3">+</span>   <span class="k1">const</span> <span class="k1">int</span> BUFSIZE <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>filter_string <span class="k3">=</span> NULL<span class="k2">;</span>
    ALLEGRO_PATH<span class="k3">*</span> initial_dir_path <span class="k3">=</span> NULL<span class="k2">;</span>
</pre></div></div><p>
 <br />or see the attached patch for git HEAD.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Sat, 27 Dec 2014 14:58:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Applied, thanks (and thanks for using <span class="source-code">git am</span>, makes hunting down people&#39;s emails easier <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 28 Dec 2014 01:01:28 +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/614917/1008592#target">tobing</a> said:</div><div class="quote"><p>
This needs a small fix to compile on Windows
</p></div></div><p>
It works with MinGW 4.8.1. Are you using MSVC?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 28 Dec 2014 03:10:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, I&#39;m using MSVC 2013 right now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Sun, 28 Dec 2014 04:15:30 +0000</pubDate>
	</item>
</rss>
