X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/136cb3c7a9fff4252c2bb48aac5db124f8dc3ce0..dd9f8b6bb6935360a8271dc3e8749fb026b601a8:/src/msw/mslu.cpp?ds=sidebyside diff --git a/src/msw/mslu.cpp b/src/msw/mslu.cpp index 8e1dea110d..65ab5f9630 100644 --- a/src/msw/mslu.cpp +++ b/src/msw/mslu.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/mslu.cpp +// Name: src/msw/mslu.cpp // Purpose: Fixes for bugs in MSLU // Author: Vaclav Slavik // Modified by: @@ -9,21 +9,36 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop + #include #endif #ifndef WX_PRECOMP - #include "wx/defs.h" + #include "wx/utils.h" #endif +//------------------------------------------------------------------------ +// Check for use of MSLU +//------------------------------------------------------------------------ + +#if wxUSE_BASE + +bool WXDLLIMPEXP_BASE wxUsingUnicowsDll() +{ +#if wxUSE_UNICODE_MSLU + return (wxGetOsVersion() == wxOS_WINDOWS_9X); +#else + return false; +#endif +} + +#endif // wxUSE_BASE + + #if wxUSE_UNICODE_MSLU //------------------------------------------------------------------------ @@ -34,7 +49,7 @@ // by calling the char version. We still want to use wchar_t version on // NT/2000/XP, though, because they allow for Unicode file names. // -// Moreover, there are bugs in unicows.dll, of course. We have to +// Moreover, there are bugs in unicows.dll, of course. We have to // workaround them, too. // //------------------------------------------------------------------------ @@ -44,14 +59,13 @@ #include #include +#include -#ifdef __GNUWIN32__ - #include - #include +#ifdef __VISUALC__ + #include #endif - -// Undef redirection macros defined in wx/msw/mslu.h: +// Undef redirection macros defined in wx/msw/wrapwin.h: #undef DrawStateW #undef GetOpenFileNameW #undef GetSaveFileNameW @@ -62,25 +76,25 @@ #if wxUSE_GUI -WXDLLEXPORT bool wxMSLU_DrawStateW(WXHDC dc, WXHBRUSH br, WXFARPROC outputFunc, - WXLPARAM lData, WXWPARAM wData, - int x, int y, int cx, int cy, +WXDLLEXPORT int wxMSLU_DrawStateW(WXHDC dc, WXHBRUSH br, WXFARPROC outputFunc, + WXLPARAM lData, WXWPARAM wData, + int x, int y, int cx, int cy, unsigned int flags) { // VS: There's yet another bug in MSLU: DrawStateW behaves like if it was - // expecting char*, not wchar_t* input. We have to use DrawStateA + // expecting char*, not wchar_t* input. We have to use DrawStateA // explicitly. if ( wxUsingUnicowsDll() ) { - return DrawStateA((HDC)dc, (HBRUSH)br, (DRAWSTATEPROC)outputFunc, + return DrawStateA((HDC)dc, (HBRUSH)br, (DRAWSTATEPROC)outputFunc, (LPARAM)(const char*) wxConvLocal.cWX2MB((const wxChar*)lData), wData, x, y, cx, cy, flags); } else { - return DrawStateW((HDC)dc, (HBRUSH)br, (DRAWSTATEPROC)outputFunc, + return DrawStateW((HDC)dc, (HBRUSH)br, (DRAWSTATEPROC)outputFunc, lData, wData, x, y, cx, cy, flags); } } @@ -88,10 +102,10 @@ WXDLLEXPORT bool wxMSLU_DrawStateW(WXHDC dc, WXHBRUSH br, WXFARPROC outputFunc, static void wxFixOPENFILENAME(LPOPENFILENAME ofn) { #ifdef OFN_EXPLORER - // VS: there's a bug in unicows.dll - when multiple files are selected, - // of.nFileOffset doesn't point to the first filename but rather to + // VS: there's a bug in unicows.dll - when multiple files are selected, + // of.nFileOffset doesn't point to the first filename but rather to // the last component of directory name. This bug is known to MSLU - // developers, but they are not going to fix it: "this is a true + // developers, but they are not going to fix it: "this is a true // limitation, that we have decided to live with" and "working // harder on this case just did not seem worth the effort"... // @@ -106,20 +120,20 @@ static void wxFixOPENFILENAME(LPOPENFILENAME ofn) ofn->nFileOffset = wxStrlen(ofn->lpstrFile)+1; } } -#endif +#endif // OFN_EXPLORER } -WXDLLEXPORT bool wxMSLU_GetOpenFileNameW(void *ofn) +WXDLLEXPORT int wxMSLU_GetOpenFileNameW(void *ofn) { - bool ret = GetOpenFileName((LPOPENFILENAME)ofn); + int ret = GetOpenFileName((LPOPENFILENAME)ofn); if ( wxUsingUnicowsDll() && ret != 0 ) wxFixOPENFILENAME((LPOPENFILENAME)ofn); return ret; } -WXDLLEXPORT bool wxMSLU_GetSaveFileNameW(void *ofn) +WXDLLEXPORT int wxMSLU_GetSaveFileNameW(void *ofn) { - bool ret = GetSaveFileName((LPOPENFILENAME)ofn); + int ret = GetSaveFileName((LPOPENFILENAME)ofn); if ( wxUsingUnicowsDll() && ret != 0 ) wxFixOPENFILENAME((LPOPENFILENAME)ofn); return ret; @@ -131,35 +145,61 @@ WXDLLEXPORT bool wxMSLU_GetSaveFileNameW(void *ofn) // Missing libc file manipulation functions in Win9x //------------------------------------------------------------------------ -WXDLLEXPORT int wxMSLU__trename(const wxChar *oldname, const wxChar *newname) +#if wxUSE_BASE + +WXDLLIMPEXP_BASE int wxMSLU__wrename(const wchar_t *oldname, + const wchar_t *newname) { if ( wxUsingUnicowsDll() ) return rename(wxConvFile.cWX2MB(oldname), wxConvFile.cWX2MB(newname)); else - return _trename(oldname, newname); + return _wrename(oldname, newname); } -WXDLLEXPORT int wxMSLU__tremove(const wxChar *name) +WXDLLIMPEXP_BASE int wxMSLU__wremove(const wchar_t *name) { if ( wxUsingUnicowsDll() ) return remove(wxConvFile.cWX2MB(name)); else - return _tremove(name); + return _wremove(name); +} + +WXDLLIMPEXP_BASE FILE* wxMSLU__wfopen(const wchar_t *name,const wchar_t* mode) +{ + if ( wxUsingUnicowsDll() ) + return fopen(wxConvFile.cWX2MB(name),wxConvFile.cWX2MB(mode)); + else + return _wfopen(name,mode); +} + +WXDLLIMPEXP_BASE FILE* wxMSLU__wfreopen(const wchar_t *name, + const wchar_t* mode, + FILE *stream) +{ + if ( wxUsingUnicowsDll() ) + return freopen(wxConvFile.cWX2MB(name), wxConvFile.cWX2MB(mode), stream); + else + return _wfreopen(name, mode, stream); } #if defined( __VISUALC__ ) \ || ( defined(__MINGW32__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \ - || ( defined(__MWERKS__) && defined(__WXMSW__) ) + || ( defined(__MWERKS__) && defined(__WXMSW__) ) \ + || ( defined(__BORLANDC__) && (__BORLANDC__ > 0x460) ) -WXDLLEXPORT int wxMSLU__wopen(const wxChar *name, int flags, int mode) +WXDLLIMPEXP_BASE int wxMSLU__wopen(const wchar_t *name, int flags, int mode) { if ( wxUsingUnicowsDll() ) +#ifdef __BORLANDC__ + return open(wxConvFile.cWX2MB(name), flags, mode); +#else return _open(wxConvFile.cWX2MB(name), flags, mode); +#endif else return _wopen(name, flags, mode); } -WXDLLEXPORT int wxMSLU__waccess(const wxChar *name, int mode) +WXDLLIMPEXP_BASE int wxMSLU__waccess(const wchar_t *name, int mode) { if ( wxUsingUnicowsDll() ) return _access(wxConvFile.cWX2MB(name), mode); @@ -167,7 +207,7 @@ WXDLLEXPORT int wxMSLU__waccess(const wxChar *name, int mode) return _waccess(name, mode); } -WXDLLEXPORT int wxMSLU__wmkdir(const wxChar *name) +WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wchar_t *name) { if ( wxUsingUnicowsDll() ) return _mkdir(wxConvFile.cWX2MB(name)); @@ -175,7 +215,7 @@ WXDLLEXPORT int wxMSLU__wmkdir(const wxChar *name) return _wmkdir(name); } -WXDLLEXPORT int wxMSLU__wrmdir(const wxChar *name) +WXDLLIMPEXP_BASE int wxMSLU__wrmdir(const wchar_t *name) { if ( wxUsingUnicowsDll() ) return _rmdir(wxConvFile.cWX2MB(name)); @@ -183,7 +223,7 @@ WXDLLEXPORT int wxMSLU__wrmdir(const wxChar *name) return _wrmdir(name); } -WXDLLEXPORT int wxMSLU__wstat(const wxChar *name, struct _stat *buffer) +WXDLLIMPEXP_BASE int wxMSLU__wstat(const wchar_t *name, struct _stat *buffer) { if ( wxUsingUnicowsDll() ) return _stat((const char*)wxConvFile.cWX2MB(name), buffer); @@ -191,6 +231,28 @@ WXDLLEXPORT int wxMSLU__wstat(const wxChar *name, struct _stat *buffer) return _wstat(name, buffer); } -#endif +#ifdef __BORLANDC__ +//here _stati64 is defined as stati64, see wx/filefn.h +#undef _stati64 +WXDLLIMPEXP_BASE int wxMSLU__wstati64(const wchar_t *name, struct _stati64 *buffer) + { + if ( wxUsingUnicowsDll() ) + return _stati64((const char*)wxConvFile.cWX2MB(name), (stati64 *) buffer); + else + return _wstati64(name, (stati64 *) buffer); +} +#else +WXDLLIMPEXP_BASE int wxMSLU__wstati64(const wchar_t *name, struct _stati64 *buffer) +{ + if ( wxUsingUnicowsDll() ) + return _stati64((const char*)wxConvFile.cWX2MB(name), buffer); + else + return _wstati64(name, buffer); +} +#endif //__BORLANDC__ + +#endif // compilers having wopen() &c + +#endif // wxUSE_BASE #endif // wxUSE_UNICODE_MSLU