+#ifdef __WIN32__
+# define wxMAXPATH 65534
+#else
+# define wxMAXPATH 1024
+#endif
+
+# define wxMAXFILE 1024
+
+# define wxMAXEXT 5
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// wxWin macros
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxFileDialog, wxDialog)
+
+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
+
+wxString wxFileSelector(const wxChar *title,
+ const wxChar *defaultDir,
+ const wxChar *defaultFileName,
+ const wxChar *defaultExtension,
+ const wxChar *filter,
+ int flags,
+ wxWindow *parent,
+ int x, int y)
+{
+ // In the original implementation, defaultExtension is passed to the
+ // lpstrDefExt member of OPENFILENAME. This extension, if non-NULL, is
+ // appended to the filename if the user fails to type an extension. The new
+ // implementation (taken from wxFileSelectorEx) appends the extension
+ // automatically, by looking at the filter specification. In fact this
+ // should be better than the native Microsoft implementation because
+ // Windows only allows *one* default extension, whereas here we do the
+ // right thing depending on the filter the user has chosen.
+
+ // If there's a default extension specified but no filter, we create a
+ // suitable filter.
+
+ wxString filter2;
+ if ( defaultExtension && !filter )
+ filter2 = wxString(wxT("*.")) + defaultExtension;
+ else if ( filter )
+ filter2 = filter;
+
+ wxString defaultDirString;
+ if (defaultDir)
+ defaultDirString = defaultDir;
+
+ wxString defaultFilenameString;
+ if (defaultFileName)
+ defaultFilenameString = defaultFileName;
+
+ wxFileDialog fileDialog(parent, title, defaultDirString,
+ defaultFilenameString, filter2,
+ flags, wxPoint(x, y));
+ if( wxStrlen(defaultExtension) != 0 )
+ {
+ int filterFind = 0,
+ filterIndex = 0;