attempted Unicode fixes for BC++

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4921 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-12-13 15:51:01 +00:00
parent 864e8bd0fc
commit 191ab39aee
2 changed files with 54 additions and 266 deletions

View File

@@ -12,9 +12,9 @@
#ifndef _WX_WXCHAR_H_ #ifndef _WX_WXCHAR_H_
#define _WX_WXCHAR_H_ #define _WX_WXCHAR_H_
//#ifdef __GNUG__ #ifdef __GNUG__
//#pragma interface "wxchar.h" #pragma interface "wxchar.h"
//#endif #endif
// only do SBCS or _UNICODE // only do SBCS or _UNICODE
#if defined (_MBCS ) #if defined (_MBCS )
@@ -41,9 +41,29 @@
# endif # endif
#endif #endif
// Windows (VC++) has broad TCHAR support // ----------------------------------------------------------------------------
#if defined(__VISUALC__) && defined(__WIN32__) // define wxHAVE_TCHAR_FUNCTIONS for the compilers which support the
// wide-character functions
// ----------------------------------------------------------------------------
#ifdef __WIN32__
// VC++ and BC++ starting with 5.2 have TCHAR support
#ifdef __VISUALC__
#define wxHAVE_TCHAR_FUNCTIONS
#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x520)
#define wxHAVE_TCHAR_FUNCTIONS
#endif
#elif defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
// VisualAge 4.0+ supports TCHAR
#define wxHAVE_TCHAR_FUNCTIONS
// but not stdio.h nor time nor conversion functions
#define wxNO_TCHAR_STDIO
#define wxNO_TCHAR_STDLIB
#define wxNO_TCHAR_TIME
#endif
#ifdef wxHAVE_TCHAR_FUNCTIONS
# define HAVE_WCSLEN 1 # define HAVE_WCSLEN 1
# include <tchar.h> # include <tchar.h>
@@ -62,6 +82,7 @@ typedef _TUCHAR wxUChar;
# define wxUSE_WCHAR_T 1 # define wxUSE_WCHAR_T 1
// ctype.h functions // ctype.h functions
#ifndef wxNO_TCHAR_CTYPE
# define wxIsalnum _istalnum # define wxIsalnum _istalnum
# define wxIsalpha _istalpha # define wxIsalpha _istalpha
# define wxIsctrl _istctrl # define wxIsctrl _istctrl
@@ -75,11 +96,15 @@ typedef _TUCHAR wxUChar;
# define wxIsxdigit _istxdigit # define wxIsxdigit _istxdigit
# define wxTolower _totlower # define wxTolower _totlower
# define wxToupper _totupper # define wxToupper _totupper
#endif // wxNO_TCHAR_CTYPE
// locale.h functons // locale.h functons
#ifndef wxNO_TCHAR_LOCALE
# define wxSetlocale _tsetlocale # define wxSetlocale _tsetlocale
#endif // wxNO_TCHAR_LOCALE
// string.h functions // string.h functions
#ifndef wxNO_TCHAR_STRING
# define wxStrcat _tcscat # define wxStrcat _tcscat
# define wxStrchr _tcschr # define wxStrchr _tcschr
# define wxStrcmp _tcscmp # define wxStrcmp _tcscmp
@@ -97,12 +122,13 @@ typedef _TUCHAR wxUChar;
# define wxStrspn _tcsspn # define wxStrspn _tcsspn
# define wxStrstr _tcsstr # define wxStrstr _tcsstr
# define wxStrtod _tcstod # define wxStrtod _tcstod
// is there a _tcstok[_r] ?
# define wxStrtol _tcstol # define wxStrtol _tcstol
# define wxStrtoul _tcstoul # define wxStrtoul _tcstoul
# define wxStrxfrm _tcsxfrm # define wxStrxfrm _tcsxfrm
#endif // wxNO_TCHAR_STRING
// stdio.h functions // stdio.h functions
#ifndef wxNO_TCHAR_STDIO
# define wxFgetc _fgettc # define wxFgetc _fgettc
# define wxFgetchar _fgettchar # define wxFgetchar _fgettchar
# define wxFgets _fgetts # define wxFgets _fgetts
@@ -131,225 +157,8 @@ typedef _TUCHAR wxUChar;
# define wxVprintf _vtprintf # define wxVprintf _vtprintf
# define wxVsscanf _vstscanf # define wxVsscanf _vstscanf
# define wxVsprintf _vstprintf # define wxVsprintf _vstprintf
#elif defined(__VISAGECPP__)
// stdlib.h functions // it has some stdio.h functions, apparently
# if !wxUSE_UNICODE
# define wxAtof atof
# endif
# define wxAtoi _ttoi
# define wxAtol _ttol
# define wxGetenv _tgetenv
# define wxSystem _tsystem
// time.h functions
# define wxAsctime _tasctime
# define wxCtime _tctime
// #elif defined(XXX)
// #include XXX-specific files here
// typeddef YYY wxChar;
// translate wxZZZ names
#elif defined(__BORLANDC__) && defined(__WIN32__)
#if (__BORLANDC__ >= 0x520)
// BC++ 5.02 and later has broad tchar support
# define HAVE_WCSLEN 1
# include <tchar.h>
# if wxUSE_UNICODE // temporary - preserve binary compatibility
typedef _TCHAR wxChar;
typedef _TSCHAR wxSChar;
typedef _TUCHAR wxUChar;
# else
# define wxChar char
# define wxSChar signed char
# define wxUChar unsigned char
# endif
// wchar_t is available
# undef wxUSE_WCHAR_T
# define wxUSE_WCHAR_T 1
// ctype.h functions
# define wxIsalnum _istalnum
# define wxIsalpha _istalpha
# define wxIsctrl _istcntrl
# define wxIsdigit _istdigit
# define wxIsgraph _istgraph
# define wxIslower _istlower
# define wxIsprint _istprint
# define wxIspunct _istpunct
# define wxIsspace _istspace
# define wxIsupper _istupper
# define wxIsxdigit _istxdigit
# define wxTolower _totlower
# define wxToupper _totupper
// locale.h functons
# define wxSetlocale _tsetlocale
// string.h functions
# define wxStrcat _tcscat
# define wxStrchr _tcschr
# define wxStrcmp _tcscmp
# define wxStrcoll _tcscoll
# define wxStrcpy _tcscpy
# define wxStrcspn _tcscspn
# define wxStrftime _tcsftime
# define wxStricmp _tcsicmp
# define wxStrlen_ _tcslen // used in wxStrlen inline function
# define wxStrncat _tcsncat
# define wxStrncmp _tcsncmp
# define wxStrncpy _tcsncpy
# define wxStrpbrk _tcspbrk
# define wxStrrchr _tcsrchr
# define wxStrspn _tcsspn
# define wxStrstr _tcsstr
# define wxStrtod _tcstod
// is there a _tcstok[_r] ?
# define wxStrtol _tcstol
# define wxStrtoul _tcstoul
# define wxStrxfrm _tcsxfrm
// stdio.h functions
# define wxFgetc _fgettc
# define wxFgetchar _fgettchar
# define wxFgets _fgetts
# define wxFopen _tfopen
# define wxFputc _fputtc
# define wxFputchar _fputtchar
# define wxFprintf _ftprintf
# define wxFreopen _tfreopen
# define wxFscanf _ftscanf
# define wxGetc _gettc
# define wxGetchar _gettchar
# define wxGets _getts
# define wxPerror _tperror
# define wxPrintf _tprintf
# define wxPutc _puttc
# define wxPutchar _puttchar
# define wxPuts _putts
# define wxRemove _tremove
# define wxRename _trename
# define wxScanf _tscanf
# define wxSprintf _stprintf
# define wxSscanf _stscanf
# define wxTmpnam _ttmpnam
# define wxUngetc _ungettc
# define wxVfprint _vftprintf
# define wxVprintf _vtprintf
# define wxVsscanf _vstscanf
# define wxVsprintf _vstprintf
// stdlib.h functions
# define wxAtof _ttof
# define wxAtoi _ttoi
# define wxAtol _ttol
# define wxGetenv _tgetenv
# define wxSystem _tsystem
// time.h functions
# define wxAsctime _tasctime
# define wxCtime _tctime
// #elif defined(XXX)
// #include XXX-specific files here
// typeddef YYY wxChar;
// translate wxZZZ names
#else
// Borland C++ 4.52 doesn't have much tchar support
// maybe Borland C++ 5.02 has, can't check right now
// but I'll use the Win32 API instead here
# include <tchar.h>
# if wxUSE_UNICODE // temporary - preserve binary compatibility
typedef _TCHAR wxChar;
typedef _TSCHAR wxSChar;
typedef _TUCHAR wxUChar;
# else
# define wxChar char
# define wxSChar signed char
# define wxUChar unsigned char
# endif
// wchar_t is available
# undef wxUSE_WCHAR_T
// This test is for C++Builder
# define wxUSE_WCHAR_T 1
# define wxNEED_WCSLEN
# define wxNEED_WX_CTYPE_H
// #define wxStrtok strtok_r // Borland C++ 4.52 doesn't have strtok_r
# define wxNEED_WX_STRING_H
# define wxNEED_WX_STDIO_H
# define wxNEED_WX_STDLIB_H
# define wxNEED_WX_TIME_H
#endif // __BORLANDC__ >= 0x530
// VisualAge C++ V4.0 has broad tchar support
#elif defined(__VISAGECPP__) && __IBMCPP__ >= 400
# define HAVE_WCSLEN 1
# include <wchar.h>
# include <tchar.h>
# if wxUSE_UNICODE // temporary - preserve binary compatibility
typedef _TCHAR wxChar;
typedef _TSCHAR wxSChar;
typedef _TUCHAR wxUChar;
# else
# define wxChar char
# define wxSChar signed char
# define wxUChar unsigned char
# endif
// wchar_t is available
# undef wxUSE_WCHAR_T
# define wxUSE_WCHAR_T 1
// ctype.h functions
# define wxIsalnum _istalnum
# define wxIsalpha _istalpha
# define wxIsctrl _istcntrl
# define wxIsdigit _istdigit
# define wxIsgraph _istgraph
# define wxIslower _istlower
# define wxIsprint _istprint
# define wxIspunct _istpunct
# define wxIsspace _istspace
# define wxIsupper _istupper
# define wxIsxdigit _istxdigit
# define wxTolower _totlower
# define wxToupper _totupper
// locale.h functons -- not defined in tchar.h
# define wxSetlocale setlocale
// string.h functions
# define wxStrcat _tcscat
# define wxStrchr _tcschr
# define wxStrcmp _tcscmp
# define wxStrcoll _tcscoll
# define wxStrcpy _tcscpy
# define wxStrcspn _tcscspn
# define wxStrftime _tcsftime
# define wxStricmp _tcsicmp
# define wxStrlen_ _tcslen // used in wxStrlen inline function
# define wxStrncat _tcsncat
# define wxStrncmp _tcsncmp
# define wxStrncpy _tcsncpy
# define wxStrpbrk _tcspbrk
# define wxStrrchr _tcsrchr
# define wxStrspn _tcsspn
# define wxStrstr _tcsstr
# define wxStrtod _tcstod
// is there a _tcstok[_r] ?
# define wxStrtol _tcstol
# define wxStrtoul _tcstoul
# define wxStrxfrm _tcsxfrm
// stdio.h functions
# define wxFgetc _fgettc # define wxFgetc _fgettc
# define wxFgets _fgetts # define wxFgets _fgetts
# define wxFputc _fputtc # define wxFputc _fputtc
@@ -366,40 +175,26 @@ typedef _TUCHAR wxUChar;
# define wxVfprint _vftprintf # define wxVfprint _vftprintf
# define wxVprintf _vtprintf # define wxVprintf _vtprintf
# define wxVsprintf _vstprintf # define wxVsprintf _vstprintf
// not defined in tchar.h #endif // wxNO_TCHAR_STDIO
# define wxFgetchar fgetchar
# define wxFopen fopen
# define wxFputchar fputchar
# define wxFreopen freopen
# define wxGets gets
# define wxPerror perror
# define wxPuts puts
# define wxRemove remove
# define wxRename rename
# define wxTmpnam tmpnam
# define wxUngetc ungetc
# define wxVsscanf vsscanf
// stdlib.h functions -- none defined in tchar.h // stdlib.h functions
#ifndef wxNO_TCHAR_STDLIB
# if !wxUSE_UNICODE # if !wxUSE_UNICODE
# define wxAtof atof # define wxAtof atof
# endif # endif
# define wxAtoi atoi # define wxAtoi _ttoi
# define wxAtol atol # define wxAtol _ttol
# define wxGetenv getenv # define wxGetenv _tgetenv
# define wxSystem system # define wxSystem _tsystem
#endif // wxNO_TCHAR_STDLIB
// time.h functions -- none defined in tchar.h // time.h functions
# define wxAsctime asctime #ifndef wxNO_TCHAR_TIME
# define wxCtime ctime # define wxAsctime _tasctime
# define wxCtime _tctime
#endif // wxNO_TCHAR_TIME
// #elif defined(XXX) #else // !TCHAR-aware compilers
// #include XXX-specific files here
// typeddef YYY wxChar;
// translate wxZZZ names
#else//!TCHAR-aware compilers
// check whether we should include wchar.h or equivalent // check whether we should include wchar.h or equivalent
# if wxUSE_UNICODE # if wxUSE_UNICODE
@@ -664,11 +459,11 @@ typedef unsigned __WCHAR_TYPE__ wxUChar;
# undef wxNEED_WCSLEN # undef wxNEED_WCSLEN
#endif #endif
/// checks whether the passed in pointer is NULL and if the string is empty // checks whether the passed in pointer is NULL and if the string is empty
WXDLLEXPORT inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; } WXDLLEXPORT inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; }
#ifndef wxNEED_WX_STRING_H #ifndef wxNEED_WX_STRING_H
/// safe version of strlen() (returns 0 if passed NULL pointer) // safe version of strlen() (returns 0 if passed NULL pointer)
WXDLLEXPORT inline size_t wxStrlen(const wxChar *psz) WXDLLEXPORT inline size_t wxStrlen(const wxChar *psz)
{ return psz ? wxStrlen_(psz) : 0; } { return psz ? wxStrlen_(psz) : 0; }
#endif #endif
@@ -714,7 +509,7 @@ WXDLLEXPORT wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_pt
#endif #endif
#ifndef wxSetlocale #ifndef wxSetlocale
WXDLLEXPORT wxChar * wxSetlocale(int category, const wxChar *locale); WXDLLEXPORT wxWCharBuffer wxSetlocale(int category, const wxChar *locale);
#endif #endif
#ifdef wxNEED_WCSLEN // for use in buffer.h #ifdef wxNEED_WCSLEN // for use in buffer.h

View File

@@ -189,18 +189,11 @@ WXDLLEXPORT wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_pt
#endif #endif
#ifndef wxSetlocale #ifndef wxSetlocale
WXDLLEXPORT wxChar * wxSetlocale(int category, const wxChar *locale) WXDLLEXPORT wxWCharBuffer wxSetlocale(int category, const wxChar *locale)
{ {
#ifdef wxUSE_THREADS
wxASSERT_MSG( wxThread::IsMain(), _T("wxSetlocale() is not MT-safe") );
#endif
static wxWCharBuffer s_wzLocale;
char *localeOld = setlocale(category, wxConvLibc.cWX2MB(locale)); char *localeOld = setlocale(category, wxConvLibc.cWX2MB(locale));
s_wzLocale = wxConvLibc.cMB2WC(localeOld);
return s_wzLocale; return wxWCharBuffer(wxConvLibc.cMB2WC(localeOld));
} }
#endif #endif