fixed for compilation without wxUSE_WCHAR_T and minor cleanups associated with this
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14005 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
a9bf8315f6
commit
373658eb49
@ -401,13 +401,8 @@ void WXDLLEXPORT wxGetMousePosition( int* x, int* y );
|
|||||||
// MSW only: get user-defined resource from the .res file.
|
// MSW only: get user-defined resource from the .res file.
|
||||||
// Returns NULL or newly-allocated memory, so use delete[] to clean up.
|
// Returns NULL or newly-allocated memory, so use delete[] to clean up.
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
WXDLLEXPORT extern const wxChar* wxUserResourceStr;
|
WXDLLEXPORT extern const wxChar* wxUserResourceStr;
|
||||||
WXDLLEXPORT wxChar* wxLoadUserResource(const wxString& resourceName, const wxString& resourceType = wxUserResourceStr);
|
WXDLLEXPORT wxChar* wxLoadUserResource(const wxString& resourceName, const wxString& resourceType = wxUserResourceStr);
|
||||||
|
|
||||||
// Implemented in utils.cpp: VC++, Win95 only. Sets up a console for standard
|
|
||||||
// input/output
|
|
||||||
WXDLLEXPORT void wxRedirectIOToConsole();
|
|
||||||
|
|
||||||
#endif // MSW
|
#endif // MSW
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -28,8 +28,13 @@
|
|||||||
#pragma hdrstop
|
#pragma hdrstop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/intl.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
#include "wx/msw/private.h"
|
#include "wx/msw/private.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -37,36 +42,42 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
#include "wx/debug.h"
|
|
||||||
#include "wx/strconv.h"
|
#include "wx/strconv.h"
|
||||||
#include "wx/intl.h"
|
|
||||||
#include "wx/log.h"
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// globals
|
// globals
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if wxUSE_WCHAR_T
|
||||||
|
WXDLLEXPORT_DATA(wxMBConv) wxConvLibc;
|
||||||
|
WXDLLEXPORT_DATA(wxCSConv) wxConvLocal((const wxChar *)NULL);
|
||||||
|
#else
|
||||||
|
// stand-ins in absence of wchar_t
|
||||||
|
WXDLLEXPORT_DATA(wxMBConv) wxConvLibc, wxConvFile;
|
||||||
|
#endif // wxUSE_WCHAR_T
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(wxMBConv *) wxConvCurrent = &wxConvLibc;
|
WXDLLEXPORT_DATA(wxMBConv *) wxConvCurrent = &wxConvLibc;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
// ============================================================================
|
// headers
|
||||||
// implementation
|
// ----------------------------------------------------------------------------
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
#if wxUSE_WCHAR_T
|
#if wxUSE_WCHAR_T
|
||||||
|
|
||||||
#ifdef __SALFORDC__
|
#ifdef __SALFORDC__
|
||||||
#include <clib.h>
|
#include <clib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ICONV
|
#ifdef HAVE_ICONV
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
#include "wx/encconv.h"
|
||||||
#include <windows.h>
|
#include "wx/fontmap.h"
|
||||||
#endif
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// macros
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#define BSWAP_UCS4(str, len) { unsigned _c; for (_c=0; _c<len; _c++) str[_c]=wxUINT32_SWAP_ALWAYS(str[_c]); }
|
#define BSWAP_UCS4(str, len) { unsigned _c; for (_c=0; _c<len; _c++) str[_c]=wxUINT32_SWAP_ALWAYS(str[_c]); }
|
||||||
#define BSWAP_UTF16(str, len) { unsigned _c; for (_c=0; _c<len; _c++) str[_c]=wxUINT16_SWAP_ALWAYS(str[_c]); }
|
#define BSWAP_UTF16(str, len) { unsigned _c; for (_c=0; _c<len; _c++) str[_c]=wxUINT16_SWAP_ALWAYS(str[_c]); }
|
||||||
@ -99,6 +110,13 @@ WXDLLEXPORT_DATA(wxMBConv *) wxConvCurrent = &wxConvLibc;
|
|||||||
#error "Weird sizeof(wchar_t): please report your platform details to wx-users mailing list"
|
#error "Weird sizeof(wchar_t): please report your platform details to wx-users mailing list"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// UTF-16 en/decoding
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#ifdef WC_UTF16
|
#ifdef WC_UTF16
|
||||||
|
|
||||||
@ -149,8 +167,6 @@ static size_t decode_utf16(const wchar_t* input, wxUint32& output)
|
|||||||
// wxMBConv
|
// wxMBConv
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(wxMBConv) wxConvLibc;
|
|
||||||
|
|
||||||
size_t wxMBConv::MB2WC(wchar_t *buf, const char *psz, size_t n) const
|
size_t wxMBConv::MB2WC(wchar_t *buf, const char *psz, size_t n) const
|
||||||
{
|
{
|
||||||
return wxMB2WC(buf, psz, n);
|
return wxMB2WC(buf, psz, n);
|
||||||
@ -341,11 +357,11 @@ size_t wxMBConvUTF8::MB2WC(wchar_t *buf, const char *psz, size_t n) const
|
|||||||
if (buf)
|
if (buf)
|
||||||
buf += pa;
|
buf += pa;
|
||||||
len += pa;
|
len += pa;
|
||||||
#else
|
#else // !WC_UTF16
|
||||||
if (buf)
|
if (buf)
|
||||||
*buf++ = res;
|
*buf++ = res;
|
||||||
len++;
|
len++;
|
||||||
#endif
|
#endif // WC_UTF16/!WC_UTF16
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -393,110 +409,6 @@ size_t wxMBConvUTF8::WC2MB(char *buf, const wchar_t *psz, size_t n) const
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// specified character set
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(wxCSConv) wxConvLocal((const wxChar *)NULL);
|
|
||||||
|
|
||||||
#include "wx/encconv.h"
|
|
||||||
#include "wx/fontmap.h"
|
|
||||||
|
|
||||||
// TODO: add some tables here
|
|
||||||
// - perhaps common encodings to common codepages (for Win32)
|
|
||||||
// - perhaps common encodings to objects ("UTF8" -> wxConvUTF8)
|
|
||||||
// - move wxEncodingConverter meat in here
|
|
||||||
|
|
||||||
#if defined(__WIN32__) && !defined(__WXMICROWIN__)
|
|
||||||
|
|
||||||
#if wxUSE_GUI
|
|
||||||
|
|
||||||
// VZ: the new version of wxCharsetToCodepage() is more politically correct
|
|
||||||
// and should work on other Windows versions as well but the old version is
|
|
||||||
// still needed for !wxUSE_FONTMAP || !wxUSE_GUI case
|
|
||||||
|
|
||||||
extern long wxEncodingToCodepage(wxFontEncoding encoding)
|
|
||||||
{
|
|
||||||
// translate encoding into the Windows CHARSET
|
|
||||||
wxNativeEncodingInfo natveEncInfo;
|
|
||||||
if ( !wxGetNativeFontEncoding(encoding, &natveEncInfo) )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
// translate CHARSET to code page
|
|
||||||
CHARSETINFO csetInfo;
|
|
||||||
if ( !::TranslateCharsetInfo((DWORD *)(DWORD)natveEncInfo.charset,
|
|
||||||
&csetInfo,
|
|
||||||
TCI_SRCCHARSET) )
|
|
||||||
{
|
|
||||||
wxLogLastError(_T("TranslateCharsetInfo(TCI_SRCCHARSET)"));
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return csetInfo.ciACP;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if wxUSE_FONTMAP
|
|
||||||
|
|
||||||
extern long wxCharsetToCodepage(const wxChar *name)
|
|
||||||
{
|
|
||||||
// first get the font encoding for this charset
|
|
||||||
if ( !name )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(name, FALSE);
|
|
||||||
if ( enc == wxFONTENCODING_SYSTEM )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
// the use the helper function
|
|
||||||
return wxEncodingToCodepage(enc);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // wxUSE_FONTMAP
|
|
||||||
|
|
||||||
#endif // wxUSE_GUI
|
|
||||||
|
|
||||||
// include old wxCharsetToCodepage() by OK if needed
|
|
||||||
#if !wxUSE_GUI || !wxUSE_FONTMAP
|
|
||||||
|
|
||||||
#include "wx/msw/registry.h"
|
|
||||||
|
|
||||||
// this should work if Internet Exploiter is installed
|
|
||||||
extern long wxCharsetToCodepage(const wxChar *name)
|
|
||||||
{
|
|
||||||
if (!name)
|
|
||||||
return GetACP();
|
|
||||||
|
|
||||||
long CP=-1;
|
|
||||||
|
|
||||||
wxString cn(name);
|
|
||||||
do {
|
|
||||||
wxString path(wxT("MIME\\Database\\Charset\\"));
|
|
||||||
path += cn;
|
|
||||||
wxRegKey key(wxRegKey::HKCR, path);
|
|
||||||
|
|
||||||
if (!key.Exists()) break;
|
|
||||||
|
|
||||||
// two cases: either there's an AliasForCharset string,
|
|
||||||
// or there are Codepage and InternetEncoding dwords.
|
|
||||||
// The InternetEncoding gives us the actual encoding,
|
|
||||||
// the Codepage just says which Windows character set to
|
|
||||||
// use when displaying the data.
|
|
||||||
if (key.HasValue(wxT("InternetEncoding")) &&
|
|
||||||
key.QueryValue(wxT("InternetEncoding"), &CP)) break;
|
|
||||||
|
|
||||||
// no encoding, see if it's an alias
|
|
||||||
if (!key.HasValue(wxT("AliasForCharset")) ||
|
|
||||||
!key.QueryValue(wxT("AliasForCharset"), cn)) break;
|
|
||||||
} while (1);
|
|
||||||
|
|
||||||
return CP;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // !wxUSE_GUI || !wxUSE_FONTMAP
|
|
||||||
|
|
||||||
#endif // Win32
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// wxCharacterSet and derived classes
|
// wxCharacterSet and derived classes
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@ -655,7 +567,7 @@ IC_CharSet::IC_CharSet(const wxChar *name)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ms_wcCharsetName = NULL;
|
ms_wcCharsetName = NULL;
|
||||||
|
|
||||||
// VS: we must not output an error here, since wxWindows will safely
|
// VS: we must not output an error here, since wxWindows will safely
|
||||||
// fall back to using wxEncodingConverter.
|
// fall back to using wxEncodingConverter.
|
||||||
wxLogTrace(wxT("strconv"), wxT("Impossible to convert to/from charset '%s' with iconv, falling back to wxEncodingConverter."), name);
|
wxLogTrace(wxT("strconv"), wxT("Impossible to convert to/from charset '%s' with iconv, falling back to wxEncodingConverter."), name);
|
||||||
@ -807,6 +719,9 @@ size_t IC_CharSet::WC2MB(char *buf, const wchar_t *psz, size_t n)
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
#if defined(__WIN32__) && !defined(__WXMICROWIN__)
|
#if defined(__WIN32__) && !defined(__WXMICROWIN__)
|
||||||
|
|
||||||
|
extern long wxCharsetToCodepage(const wxChar *charset); // from utils.cpp
|
||||||
|
|
||||||
class CP_CharSet : public wxCharacterSet
|
class CP_CharSet : public wxCharacterSet
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -1055,14 +970,6 @@ size_t wxCSConv::WC2MB(char *buf, const wchar_t *psz, size_t n) const
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // !wxUSE_WCHAR_T
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// stand-ins in absence of wchar_t
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(wxMBConv) wxConvLibc, wxConvFile;
|
|
||||||
|
|
||||||
#endif // wxUSE_WCHAR_T
|
#endif // wxUSE_WCHAR_T
|
||||||
|
|
||||||
|
|
||||||
|
@ -213,12 +213,6 @@ bool wxApp::Initialize()
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_UNICODE && !wxUSE_UNICODE_MSLU
|
#endif // wxUSE_UNICODE && !wxUSE_UNICODE_MSLU
|
||||||
|
|
||||||
// Some people may wish to use this, but
|
|
||||||
// probably it shouldn't be here by default.
|
|
||||||
#ifdef __WXDEBUG__
|
|
||||||
// wxRedirectIOToConsole();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxBuffer = new wxChar[1500]; // FIXME
|
wxBuffer = new wxChar[1500]; // FIXME
|
||||||
|
|
||||||
wxClassInfo::InitializeClasses();
|
wxClassInfo::InitializeClasses();
|
||||||
|
@ -525,7 +525,7 @@ DWORD CALLBACK wxRichEditStreamIn(DWORD dwCookie, BYTE *buf, LONG cb, LONG *pcb)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern long wxEncodingToCodepage(wxFontEncoding encoding); // from strconv.cpp
|
extern long wxEncodingToCodepage(wxFontEncoding encoding); // from utils.cpp
|
||||||
|
|
||||||
#if wxUSE_UNICODE_MSLU
|
#if wxUSE_UNICODE_MSLU
|
||||||
bool wxTextCtrl::StreamIn(const wxString& value,
|
bool wxTextCtrl::StreamIn(const wxString& value,
|
||||||
|
@ -1033,8 +1033,7 @@ void wxSleep(int nSecs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_GUI/!wxUSE_GUI
|
#endif // wxUSE_GUI/!wxUSE_GUI
|
||||||
#endif
|
#endif // __WXMICROWIN__
|
||||||
// __WXMICROWIN__
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// deprecated (in favour of wxLog) log functions
|
// deprecated (in favour of wxLog) log functions
|
||||||
@ -1227,7 +1226,7 @@ void wxEndBusyCursor()
|
|||||||
// TRUE if we're between the above two calls
|
// TRUE if we're between the above two calls
|
||||||
bool wxIsBusy()
|
bool wxIsBusy()
|
||||||
{
|
{
|
||||||
return (gs_wxBusyCursorCount > 0);
|
return gs_wxBusyCursorCount > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether this window wants to process messages, e.g. Stop button
|
// Check whether this window wants to process messages, e.g. Stop button
|
||||||
@ -1283,7 +1282,7 @@ wxChar *wxLoadUserResource(const wxString& resourceName, const wxString& resourc
|
|||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
#endif
|
#endif // __WXMICROWIN__
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// get display info
|
// get display info
|
||||||
@ -1340,26 +1339,35 @@ void wxDisplaySize(int *width, int *height)
|
|||||||
HWND hWnd = GetDesktopWindow();
|
HWND hWnd = GetDesktopWindow();
|
||||||
::GetWindowRect(hWnd, & rect);
|
::GetWindowRect(hWnd, & rect);
|
||||||
|
|
||||||
*width = rect.right - rect.left;
|
if ( width )
|
||||||
*height = rect.bottom - rect.top;
|
*width = rect.right - rect.left;
|
||||||
#else
|
if ( height )
|
||||||
|
*height = rect.bottom - rect.top;
|
||||||
|
#else // !__WXMICROWIN__
|
||||||
ScreenHDC dc;
|
ScreenHDC dc;
|
||||||
|
|
||||||
if ( width ) *width = GetDeviceCaps(dc, HORZRES);
|
if ( width )
|
||||||
if ( height ) *height = GetDeviceCaps(dc, VERTRES);
|
*width = ::GetDeviceCaps(dc, HORZRES);
|
||||||
#endif
|
if ( height )
|
||||||
|
*height = ::GetDeviceCaps(dc, VERTRES);
|
||||||
|
#endif // __WXMICROWIN__/!__WXMICROWIN__
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDisplaySizeMM(int *width, int *height)
|
void wxDisplaySizeMM(int *width, int *height)
|
||||||
{
|
{
|
||||||
#ifdef __WXMICROWIN__
|
#ifdef __WXMICROWIN__
|
||||||
// MICROWIN_TODO
|
// MICROWIN_TODO
|
||||||
*width = 0; * height = 0;
|
if ( width )
|
||||||
|
*width = 0;
|
||||||
|
if ( height )
|
||||||
|
*height = 0;
|
||||||
#else
|
#else
|
||||||
ScreenHDC dc;
|
ScreenHDC dc;
|
||||||
|
|
||||||
if ( width ) *width = GetDeviceCaps(dc, HORZSIZE);
|
if ( width )
|
||||||
if ( height ) *height = GetDeviceCaps(dc, VERTSIZE);
|
*width = ::GetDeviceCaps(dc, HORZSIZE);
|
||||||
|
if ( height )
|
||||||
|
*height = ::GetDeviceCaps(dc, VERTSIZE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1381,7 +1389,6 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// window information functions
|
// window information functions
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -1481,229 +1488,6 @@ extern void HIMETRICToPixel(LONG *x, LONG *y)
|
|||||||
|
|
||||||
#endif // wxUSE_GUI
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
#if 0
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
// wild character routines
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool wxIsWild( const wxString& pattern )
|
|
||||||
{
|
|
||||||
wxString tmp = pattern;
|
|
||||||
char *pat = WXSTRINGCAST(tmp);
|
|
||||||
while (*pat) {
|
|
||||||
switch (*pat++) {
|
|
||||||
case '?': case '*': case '[': case '{':
|
|
||||||
return TRUE;
|
|
||||||
case '\\':
|
|
||||||
if (!*pat++)
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
|
|
||||||
{
|
|
||||||
wxString tmp1 = pat;
|
|
||||||
char *pattern = WXSTRINGCAST(tmp1);
|
|
||||||
wxString tmp2 = text;
|
|
||||||
char *str = WXSTRINGCAST(tmp2);
|
|
||||||
char c;
|
|
||||||
char *cp;
|
|
||||||
bool done = FALSE, ret_code, ok;
|
|
||||||
// Below is for vi fans
|
|
||||||
const char OB = '{', CB = '}';
|
|
||||||
|
|
||||||
// dot_special means '.' only matches '.'
|
|
||||||
if (dot_special && *str == '.' && *pattern != *str)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
while ((*pattern != '\0') && (!done)
|
|
||||||
&& (((*str=='\0')&&((*pattern==OB)||(*pattern=='*')))||(*str!='\0'))) {
|
|
||||||
switch (*pattern) {
|
|
||||||
case '\\':
|
|
||||||
pattern++;
|
|
||||||
if (*pattern != '\0')
|
|
||||||
pattern++;
|
|
||||||
break;
|
|
||||||
case '*':
|
|
||||||
pattern++;
|
|
||||||
ret_code = FALSE;
|
|
||||||
while ((*str!='\0')
|
|
||||||
&& (!(ret_code=wxMatchWild(pattern, str++, FALSE))))
|
|
||||||
/*loop*/;
|
|
||||||
if (ret_code) {
|
|
||||||
while (*str != '\0')
|
|
||||||
str++;
|
|
||||||
while (*pattern != '\0')
|
|
||||||
pattern++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case '[':
|
|
||||||
pattern++;
|
|
||||||
repeat:
|
|
||||||
if ((*pattern == '\0') || (*pattern == ']')) {
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (*pattern == '\\') {
|
|
||||||
pattern++;
|
|
||||||
if (*pattern == '\0') {
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (*(pattern + 1) == '-') {
|
|
||||||
c = *pattern;
|
|
||||||
pattern += 2;
|
|
||||||
if (*pattern == ']') {
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (*pattern == '\\') {
|
|
||||||
pattern++;
|
|
||||||
if (*pattern == '\0') {
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((*str < c) || (*str > *pattern)) {
|
|
||||||
pattern++;
|
|
||||||
goto repeat;
|
|
||||||
}
|
|
||||||
} else if (*pattern != *str) {
|
|
||||||
pattern++;
|
|
||||||
goto repeat;
|
|
||||||
}
|
|
||||||
pattern++;
|
|
||||||
while ((*pattern != ']') && (*pattern != '\0')) {
|
|
||||||
if ((*pattern == '\\') && (*(pattern + 1) != '\0'))
|
|
||||||
pattern++;
|
|
||||||
pattern++;
|
|
||||||
}
|
|
||||||
if (*pattern != '\0') {
|
|
||||||
pattern++, str++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
pattern++;
|
|
||||||
str++;
|
|
||||||
break;
|
|
||||||
case OB:
|
|
||||||
pattern++;
|
|
||||||
while ((*pattern != CB) && (*pattern != '\0')) {
|
|
||||||
cp = str;
|
|
||||||
ok = TRUE;
|
|
||||||
while (ok && (*cp != '\0') && (*pattern != '\0')
|
|
||||||
&& (*pattern != ',') && (*pattern != CB)) {
|
|
||||||
if (*pattern == '\\')
|
|
||||||
pattern++;
|
|
||||||
ok = (*pattern++ == *cp++);
|
|
||||||
}
|
|
||||||
if (*pattern == '\0') {
|
|
||||||
ok = FALSE;
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
} else if (ok) {
|
|
||||||
str = cp;
|
|
||||||
while ((*pattern != CB) && (*pattern != '\0')) {
|
|
||||||
if (*++pattern == '\\') {
|
|
||||||
if (*++pattern == CB)
|
|
||||||
pattern++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
while (*pattern!=CB && *pattern!=',' && *pattern!='\0') {
|
|
||||||
if (*++pattern == '\\') {
|
|
||||||
if (*++pattern == CB || *pattern == ',')
|
|
||||||
pattern++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (*pattern != '\0')
|
|
||||||
pattern++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (*str == *pattern) {
|
|
||||||
str++, pattern++;
|
|
||||||
} else {
|
|
||||||
done = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (*pattern == '*')
|
|
||||||
pattern++;
|
|
||||||
return ((*str == '\0') && (*pattern == '\0'));
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // 0
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
// maximum mumber of lines the output console should have
|
|
||||||
static const WORD MAX_CONSOLE_LINES = 500;
|
|
||||||
|
|
||||||
BOOL WINAPI MyConsoleHandler( DWORD dwCtrlType ) { // control signal type
|
|
||||||
FreeConsole();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxRedirectIOToConsole()
|
|
||||||
{
|
|
||||||
int hConHandle;
|
|
||||||
long lStdHandle;
|
|
||||||
CONSOLE_SCREEN_BUFFER_INFO coninfo;
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
// allocate a console for this app
|
|
||||||
AllocConsole();
|
|
||||||
|
|
||||||
// set the screen buffer to be big enough to let us scroll text
|
|
||||||
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),
|
|
||||||
&coninfo);
|
|
||||||
coninfo.dwSize.Y = MAX_CONSOLE_LINES;
|
|
||||||
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),
|
|
||||||
coninfo.dwSize);
|
|
||||||
|
|
||||||
// redirect unbuffered STDOUT to the console
|
|
||||||
lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
|
|
||||||
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
|
|
||||||
if(hConHandle <= 0) return;
|
|
||||||
fp = _fdopen( hConHandle, "w" );
|
|
||||||
*stdout = *fp;
|
|
||||||
setvbuf( stdout, NULL, _IONBF, 0 );
|
|
||||||
|
|
||||||
// redirect unbuffered STDIN to the console
|
|
||||||
lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
|
|
||||||
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
|
|
||||||
if(hConHandle <= 0) return;
|
|
||||||
fp = _fdopen( hConHandle, "r" );
|
|
||||||
*stdin = *fp;
|
|
||||||
setvbuf( stdin, NULL, _IONBF, 0 );
|
|
||||||
|
|
||||||
// redirect unbuffered STDERR to the console
|
|
||||||
lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
|
|
||||||
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
|
|
||||||
if(hConHandle <= 0) return;
|
|
||||||
fp = _fdopen( hConHandle, "w" );
|
|
||||||
*stderr = *fp;
|
|
||||||
setvbuf( stderr, NULL, _IONBF, 0 );
|
|
||||||
|
|
||||||
// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
|
|
||||||
// point to console as well
|
|
||||||
ios::sync_with_stdio();
|
|
||||||
|
|
||||||
SetConsoleCtrlHandler(MyConsoleHandler, TRUE);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// Not supported
|
|
||||||
void wxRedirectIOToConsole()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __WXMICROWIN__
|
#ifdef __WXMICROWIN__
|
||||||
int wxGetOsVersion(int *majorVsn, int *minorVsn)
|
int wxGetOsVersion(int *majorVsn, int *minorVsn)
|
||||||
{
|
{
|
||||||
@ -1712,5 +1496,101 @@ int wxGetOsVersion(int *majorVsn, int *minorVsn)
|
|||||||
if (minorVsn) *minorVsn = 0;
|
if (minorVsn) *minorVsn = 0;
|
||||||
return wxUNIX;
|
return wxUNIX;
|
||||||
}
|
}
|
||||||
#endif
|
#endif // __WXMICROWIN__
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Win32 codepage conversion functions
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if defined(__WIN32__) && !defined(__WXMICROWIN__)
|
||||||
|
|
||||||
|
#if wxUSE_GUI
|
||||||
|
|
||||||
|
#include "wx/fontmap.h"
|
||||||
|
|
||||||
|
// VZ: the new version of wxCharsetToCodepage() is more politically correct
|
||||||
|
// and should work on other Windows versions as well but the old version is
|
||||||
|
// still needed for !wxUSE_FONTMAP || !wxUSE_GUI case
|
||||||
|
|
||||||
|
extern long wxEncodingToCodepage(wxFontEncoding encoding)
|
||||||
|
{
|
||||||
|
// translate encoding into the Windows CHARSET
|
||||||
|
wxNativeEncodingInfo natveEncInfo;
|
||||||
|
if ( !wxGetNativeFontEncoding(encoding, &natveEncInfo) )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// translate CHARSET to code page
|
||||||
|
CHARSETINFO csetInfo;
|
||||||
|
if ( !::TranslateCharsetInfo((DWORD *)(DWORD)natveEncInfo.charset,
|
||||||
|
&csetInfo,
|
||||||
|
TCI_SRCCHARSET) )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("TranslateCharsetInfo(TCI_SRCCHARSET)"));
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return csetInfo.ciACP;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if wxUSE_FONTMAP
|
||||||
|
|
||||||
|
extern long wxCharsetToCodepage(const wxChar *name)
|
||||||
|
{
|
||||||
|
// first get the font encoding for this charset
|
||||||
|
if ( !name )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(name, FALSE);
|
||||||
|
if ( enc == wxFONTENCODING_SYSTEM )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// the use the helper function
|
||||||
|
return wxEncodingToCodepage(enc);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_FONTMAP
|
||||||
|
|
||||||
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
|
// include old wxCharsetToCodepage() by OK if needed
|
||||||
|
#if !wxUSE_GUI || !wxUSE_FONTMAP
|
||||||
|
|
||||||
|
#include "wx/msw/registry.h"
|
||||||
|
|
||||||
|
// this should work if Internet Exploiter is installed
|
||||||
|
extern long wxCharsetToCodepage(const wxChar *name)
|
||||||
|
{
|
||||||
|
if (!name)
|
||||||
|
return GetACP();
|
||||||
|
|
||||||
|
long CP=-1;
|
||||||
|
|
||||||
|
wxString cn(name);
|
||||||
|
do {
|
||||||
|
wxString path(wxT("MIME\\Database\\Charset\\"));
|
||||||
|
path += cn;
|
||||||
|
wxRegKey key(wxRegKey::HKCR, path);
|
||||||
|
|
||||||
|
if (!key.Exists()) break;
|
||||||
|
|
||||||
|
// two cases: either there's an AliasForCharset string,
|
||||||
|
// or there are Codepage and InternetEncoding dwords.
|
||||||
|
// The InternetEncoding gives us the actual encoding,
|
||||||
|
// the Codepage just says which Windows character set to
|
||||||
|
// use when displaying the data.
|
||||||
|
if (key.HasValue(wxT("InternetEncoding")) &&
|
||||||
|
key.QueryValue(wxT("InternetEncoding"), &CP)) break;
|
||||||
|
|
||||||
|
// no encoding, see if it's an alias
|
||||||
|
if (!key.HasValue(wxT("AliasForCharset")) ||
|
||||||
|
!key.QueryValue(wxT("AliasForCharset"), cn)) break;
|
||||||
|
} while (1);
|
||||||
|
|
||||||
|
return CP;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !wxUSE_GUI || !wxUSE_FONTMAP
|
||||||
|
|
||||||
|
#endif // Win32
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user