1999-01-27 05:00:02 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: wxchar.h
|
|
|
|
// Purpose: Declarations common to wx char/wchar_t usage (wide chars)
|
|
|
|
// Author: Joel Farley
|
|
|
|
// Modified by:
|
|
|
|
// Created: 1998/06/12
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Copyright: (c) wxWindows copyright
|
|
|
|
// Licence: wxWindows licence
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#ifndef _WX_WXCHAR_H_
|
|
|
|
#define _WX_WXCHAR_H_
|
|
|
|
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma interface "wxchar.h"
|
|
|
|
#endif
|
1999-01-27 05:00:02 -05:00
|
|
|
|
|
|
|
// only do SBCS or _UNICODE
|
|
|
|
#if defined (_MBCS )
|
2000-03-03 06:10:51 -05:00
|
|
|
// It may be OK anyway.
|
|
|
|
// # error "MBCS is not supported by wxChar"
|
1999-01-27 05:00:02 -05:00
|
|
|
#endif
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// first deal with Unicode setting
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
1999-04-19 12:07:51 -04:00
|
|
|
// set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined
|
|
|
|
#if defined(_UNICODE) || defined(UNICODE)
|
1999-07-27 23:38:12 -04:00
|
|
|
# undef wxUSE_UNICODE
|
|
|
|
# define wxUSE_UNICODE 1
|
1999-04-19 12:07:51 -04:00
|
|
|
#else
|
1999-07-27 23:38:12 -04:00
|
|
|
# ifndef wxUSE_UNICODE
|
|
|
|
# define wxUSE_UNICODE 0
|
|
|
|
# endif
|
2000-07-15 15:51:35 -04:00
|
|
|
#endif // Unicode
|
1999-04-19 12:07:51 -04:00
|
|
|
|
|
|
|
// and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1...
|
|
|
|
#if wxUSE_UNICODE
|
1999-07-27 23:38:12 -04:00
|
|
|
# ifndef _UNICODE
|
|
|
|
# define _UNICODE
|
|
|
|
# endif
|
|
|
|
# ifndef UNICODE
|
|
|
|
# define UNICODE
|
|
|
|
# endif
|
2000-07-15 15:51:35 -04:00
|
|
|
#endif // Unicode
|
|
|
|
|
|
|
|
// Unicode support requires wchar_t
|
|
|
|
#if wxUSE_UNICODE
|
|
|
|
# undef wxUSE_WCHAR_T
|
|
|
|
# define wxUSE_WCHAR_T 1
|
|
|
|
#endif // Unicode
|
1999-04-19 12:07:51 -04:00
|
|
|
|
1999-12-13 10:51:01 -05:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// 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
|
2001-11-27 15:44:22 -05:00
|
|
|
#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 )
|
2001-06-02 22:58:56 -04:00
|
|
|
#define wxHAVE_TCHAR_FUNCTIONS
|
|
|
|
#include <stddef.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <ctype.h>
|
2001-10-24 16:56:37 -04:00
|
|
|
#elif defined(__CYGWIN__)
|
2002-04-05 05:43:33 -05:00
|
|
|
#ifndef HAVE_WCSLEN
|
|
|
|
#define HAVE_WCSLEN
|
|
|
|
#endif // !HAVE_WCSLEN
|
2001-10-24 16:56:37 -04:00
|
|
|
#include <stddef.h>
|
|
|
|
#include <wchar.h>
|
1999-12-13 10:51:01 -05:00
|
|
|
#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
|
1999-12-14 18:32:53 -05:00
|
|
|
#define wxNO_TCHAR_LOCALE
|
|
|
|
//
|
|
|
|
// supplemental VA V4 defs so at least we know what these are
|
|
|
|
// just define to standard defs
|
|
|
|
//
|
|
|
|
|
|
|
|
// for wcslen
|
|
|
|
#include <wchar.h>
|
|
|
|
|
|
|
|
// locale.h functons -- not defined in tchar.h
|
|
|
|
#define wxSetlocale setlocale
|
|
|
|
// some stdio functions are defined others are not
|
|
|
|
// these are not
|
|
|
|
#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 not defined in VA V4
|
|
|
|
#if !wxUSE_UNICODE
|
|
|
|
# define wxAtof atof
|
|
|
|
#endif
|
|
|
|
#define wxAtoi atoi
|
|
|
|
#define wxAtol atol
|
|
|
|
#define wxGetenv getenv
|
|
|
|
#define wxSystem system
|
|
|
|
// time.h functions -- none defined in tchar.h
|
|
|
|
#define wxAsctime asctime
|
|
|
|
#define wxCtime ctime
|
2001-10-20 04:07:47 -04:00
|
|
|
#elif defined(__MWERKS__)
|
|
|
|
// for wcslen
|
|
|
|
#if wxUSE_WCHAR_T
|
|
|
|
#include <wchar.h>
|
|
|
|
#endif
|
2000-07-15 15:51:35 -04:00
|
|
|
#endif // compilers with (good) TCHAR support
|
1999-01-27 05:00:02 -05:00
|
|
|
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifdef wxHAVE_TCHAR_FUNCTIONS
|
1999-07-27 23:38:12 -04:00
|
|
|
# define HAVE_WCSLEN 1
|
1999-05-13 17:21:04 -04:00
|
|
|
|
1999-07-27 23:38:12 -04:00
|
|
|
# include <tchar.h>
|
1999-10-04 18:55:10 -04:00
|
|
|
|
1999-07-27 23:38:12 -04:00
|
|
|
# if wxUSE_UNICODE // temporary - preserve binary compatibility
|
2001-06-02 22:58:56 -04:00
|
|
|
#if defined(__GNUWIN32__)
|
|
|
|
#define _TCHAR TCHAR
|
|
|
|
#define _TSCHAR TCHAR
|
|
|
|
#define _TUCHAR TCHAR
|
|
|
|
#endif
|
|
|
|
|
1999-01-27 05:00:02 -05:00
|
|
|
typedef _TCHAR wxChar;
|
1999-02-03 11:48:12 -05:00
|
|
|
typedef _TSCHAR wxSChar;
|
1999-01-27 05:00:02 -05:00
|
|
|
typedef _TUCHAR wxUChar;
|
1999-07-27 23:38:12 -04:00
|
|
|
# else
|
|
|
|
# define wxChar char
|
|
|
|
# define wxSChar signed char
|
|
|
|
# define wxUChar unsigned char
|
|
|
|
# endif
|
2000-07-15 15:51:35 -04:00
|
|
|
|
|
|
|
// wchar_t is available
|
|
|
|
#ifndef wxUSE_WCHAR_T
|
|
|
|
#define wxUSE_WCHAR_T 1
|
|
|
|
#endif // !defined(wxUSE_WCHAR_T)
|
1999-01-27 05:00:02 -05:00
|
|
|
|
|
|
|
// ctype.h functions
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifndef wxNO_TCHAR_CTYPE
|
2000-01-02 21:19:07 -05:00
|
|
|
#ifdef __BORLANDC__
|
|
|
|
# include <ctype.h>
|
|
|
|
#endif
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxIsalnum _istalnum
|
|
|
|
# define wxIsalpha _istalpha
|
|
|
|
# define wxIsctrl _istctrl
|
|
|
|
# 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
|
1999-12-13 10:51:01 -05:00
|
|
|
#endif // wxNO_TCHAR_CTYPE
|
1999-01-27 05:00:02 -05:00
|
|
|
|
|
|
|
// locale.h functons
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifndef wxNO_TCHAR_LOCALE
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxSetlocale _tsetlocale
|
1999-12-13 10:51:01 -05:00
|
|
|
#endif // wxNO_TCHAR_LOCALE
|
1999-01-27 05:00:02 -05:00
|
|
|
|
|
|
|
// string.h functions
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifndef wxNO_TCHAR_STRING
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxStrcat _tcscat
|
|
|
|
# define wxStrchr _tcschr
|
|
|
|
# define wxStrcmp _tcscmp
|
|
|
|
# define wxStrcoll _tcscoll
|
|
|
|
# define wxStrcpy _tcscpy
|
|
|
|
# define wxStrcspn _tcscspn
|
|
|
|
# define wxStrftime _tcsftime
|
|
|
|
# define wxStricmp _tcsicmp
|
2001-06-26 16:59:19 -04:00
|
|
|
# define wxStrnicmp _tcsnicmp
|
1999-07-27 23:38:12 -04:00
|
|
|
# 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
|
|
|
|
# define wxStrtol _tcstol
|
|
|
|
# define wxStrtoul _tcstoul
|
|
|
|
# define wxStrxfrm _tcsxfrm
|
1999-12-13 10:51:01 -05:00
|
|
|
#endif // wxNO_TCHAR_STRING
|
1999-01-27 05:00:02 -05:00
|
|
|
|
|
|
|
// stdio.h functions
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifndef wxNO_TCHAR_STDIO
|
2002-02-17 18:29:25 -05:00
|
|
|
# if wxUSE_UNICODE_MSLU
|
|
|
|
# define wxRemove wxMSLU__tremove
|
|
|
|
# define wxRename wxMSLU__trename
|
|
|
|
# else
|
|
|
|
# define wxRemove _tremove
|
|
|
|
# define wxRename _trename
|
|
|
|
# endif
|
1999-07-27 23:38:12 -04:00
|
|
|
# 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 wxScanf _tscanf
|
|
|
|
# define wxSprintf _stprintf
|
|
|
|
# define wxSscanf _stscanf
|
|
|
|
# define wxTmpnam _ttmpnam
|
|
|
|
# define wxUngetc _tungetc
|
|
|
|
# define wxVfprint _vftprintf
|
|
|
|
# define wxVprintf _vtprintf
|
|
|
|
# define wxVsscanf _vstscanf
|
|
|
|
# define wxVsprintf _vstprintf
|
1999-12-14 18:32:53 -05:00
|
|
|
#elif defined(__VISAGECPP__) && (__IBMCPP__ >= 400)
|
1999-12-13 10:51:01 -05:00
|
|
|
// it has some stdio.h functions, apparently
|
1999-12-08 02:54:58 -05:00
|
|
|
# define wxFgetc _fgettc
|
|
|
|
# define wxFgets _fgetts
|
|
|
|
# define wxFputc _fputtc
|
|
|
|
# define wxFprintf _ftprintf
|
|
|
|
# define wxFscanf _ftscanf
|
|
|
|
# define wxGetc _gettc
|
|
|
|
# define wxGetchar _gettchar
|
|
|
|
# define wxPrintf _tprintf
|
|
|
|
# define wxPutc _puttc
|
|
|
|
# define wxPutchar _puttchar
|
|
|
|
# define wxScanf _tscanf
|
|
|
|
# define wxSprintf _stprintf
|
|
|
|
# define wxSscanf _stscanf
|
|
|
|
# define wxVfprint _vftprintf
|
|
|
|
# define wxVprintf _vtprintf
|
|
|
|
# define wxVsprintf _vstprintf
|
1999-12-13 10:51:01 -05:00
|
|
|
#endif // wxNO_TCHAR_STDIO
|
1999-12-08 02:54:58 -05:00
|
|
|
|
|
|
|
// stdlib.h functions
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifndef wxNO_TCHAR_STDLIB
|
|
|
|
# if !wxUSE_UNICODE
|
|
|
|
# define wxAtof atof
|
|
|
|
# endif
|
1999-12-08 02:54:58 -05:00
|
|
|
# define wxAtoi _ttoi
|
|
|
|
# define wxAtol _ttol
|
|
|
|
# define wxGetenv _tgetenv
|
|
|
|
# define wxSystem _tsystem
|
1999-12-13 10:51:01 -05:00
|
|
|
#endif // wxNO_TCHAR_STDLIB
|
1999-12-08 02:54:58 -05:00
|
|
|
|
|
|
|
// time.h functions
|
1999-12-13 10:51:01 -05:00
|
|
|
#ifndef wxNO_TCHAR_TIME
|
1999-12-08 02:54:58 -05:00
|
|
|
# define wxAsctime _tasctime
|
|
|
|
# define wxCtime _tctime
|
1999-12-13 10:51:01 -05:00
|
|
|
#endif // wxNO_TCHAR_TIME
|
1999-12-08 02:54:58 -05:00
|
|
|
|
1999-12-13 10:51:01 -05:00
|
|
|
#else // !TCHAR-aware compilers
|
1999-04-08 19:38:47 -04:00
|
|
|
|
1999-04-20 07:00:06 -04:00
|
|
|
// check whether we should include wchar.h or equivalent
|
2000-07-15 15:51:35 -04:00
|
|
|
# if !defined(wxUSE_WCHAR_T)
|
1999-07-27 23:38:12 -04:00
|
|
|
# if defined(__VISUALC__) && (__VISUALC__ < 900)
|
|
|
|
# define wxUSE_WCHAR_T 0 // wchar_t is not available for MSVC++ 1.5
|
|
|
|
# elif defined(__UNIX__)
|
2001-11-04 12:20:38 -05:00
|
|
|
# if defined(HAVE_WCSTR_H) || defined(HAVE_WCHAR_H) || defined(__FreeBSD__) || defined(__DARWIN__)
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxUSE_WCHAR_T 1
|
|
|
|
# else
|
|
|
|
# define wxUSE_WCHAR_T 0
|
|
|
|
# endif
|
|
|
|
# elif defined(__GNUWIN32__) && !defined(__MINGW32__) // Cygwin (not Mingw32) doesn't have wcslen.h, needed in buffer.h
|
|
|
|
# define wxUSE_WCHAR_T 0
|
|
|
|
# elif defined(__BORLANDC__) // WIN16 BC++
|
|
|
|
# define wxUSE_WCHAR_T 0
|
|
|
|
# elif defined(__WATCOMC__)
|
|
|
|
# define wxUSE_WCHAR_T 0
|
2001-10-22 01:11:09 -04:00
|
|
|
# elif defined(__VISAGECPP__) && (__IBMCPP__ < 400)
|
|
|
|
# define wxUSE_WCHAR_T 0
|
1999-07-27 23:38:12 -04:00
|
|
|
# else
|
2002-03-25 09:06:42 -05:00
|
|
|
// add additional compiler checks if this fails
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxUSE_WCHAR_T 1
|
|
|
|
# endif
|
2000-07-15 15:51:35 -04:00
|
|
|
# endif // !defined(wxUSE_WCHAR_T)
|
1999-07-27 23:38:12 -04:00
|
|
|
|
2002-03-25 09:06:42 -05:00
|
|
|
# if wxUSE_WCHAR_T
|
|
|
|
# ifdef HAVE_WCHAR_H
|
|
|
|
// include wchar.h to get wcslen() declaration used by wx/buffer.h
|
|
|
|
# include <wchar.h>
|
|
|
|
# elif defined(HAVE_WCSTR_H)
|
|
|
|
// old compilers have wcslen() here
|
|
|
|
# include <wcstr.h>
|
|
|
|
# elif defined(__FreeBSD__) || defined(__DARWIN__) || defined(__EMX__)
|
|
|
|
// include stdlib.h for wchar_t, wcslen is provided in wxchar.cpp
|
|
|
|
# include <stdlib.h>
|
|
|
|
size_t WXDLLEXPORT wcslen(const wchar_t *s);
|
|
|
|
# endif // HAVE_WCHAR_H
|
|
|
|
# endif // wxUSE_WCHAR_T
|
1999-04-19 15:54:58 -04:00
|
|
|
|
1999-04-08 19:38:47 -04:00
|
|
|
// check whether we are doing Unicode
|
1999-07-27 23:38:12 -04:00
|
|
|
# if wxUSE_UNICODE
|
1999-04-08 19:38:47 -04:00
|
|
|
|
1999-07-27 23:38:12 -04:00
|
|
|
# include <wctype.h>
|
1999-04-08 19:38:47 -04:00
|
|
|
|
|
|
|
// this is probably glibc-specific
|
1999-07-27 23:38:12 -04:00
|
|
|
# if defined(__WCHAR_TYPE__)
|
1999-04-08 19:38:47 -04:00
|
|
|
|
|
|
|
typedef __WCHAR_TYPE__ wxChar;
|
|
|
|
typedef signed __WCHAR_TYPE__ wxSChar;
|
|
|
|
typedef unsigned __WCHAR_TYPE__ wxUChar;
|
|
|
|
|
1999-10-06 14:12:57 -04:00
|
|
|
# define _T(x) L##x
|
1999-07-27 23:38:12 -04:00
|
|
|
|
|
|
|
// ctype.h functions (wctype.h)
|
|
|
|
# define wxIsalnum iswalnum
|
|
|
|
# define wxIsalpha iswalpha
|
|
|
|
# define wxIsctrl iswcntrl
|
|
|
|
# define wxIsdigit iswdigit
|
|
|
|
# define wxIsgraph iswgraph
|
|
|
|
# define wxIslower iswlower
|
|
|
|
# define wxIsprint iswprint
|
|
|
|
# define wxIspunct iswpunct
|
|
|
|
# define wxIsspace iswspace
|
|
|
|
# define wxIsupper iswupper
|
|
|
|
# define wxIsxdigit iswxdigit
|
|
|
|
|
|
|
|
# if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)
|
|
|
|
// /usr/include/wctype.h incorrectly declares translations tables which
|
|
|
|
// provokes tons of compile-time warnings - try to correct this
|
|
|
|
# define wxTolower(wc) towctrans((wc), (wctrans_t)__ctype_tolower)
|
|
|
|
# define wxToupper(wc) towctrans((wc), (wctrans_t)__ctype_toupper)
|
|
|
|
# else
|
|
|
|
# define wxTolower towlower
|
|
|
|
# define wxToupper towupper
|
|
|
|
# endif // gcc/!gcc
|
|
|
|
|
|
|
|
// string.h functions (wchar.h)
|
|
|
|
# define wxStrcat wcscat
|
|
|
|
# define wxStrchr wcschr
|
|
|
|
# define wxStrcmp wcscmp
|
|
|
|
# define wxStrcoll wcscoll
|
|
|
|
# define wxStrcpy wcscpy
|
|
|
|
# define wxStrcspn wcscspn
|
|
|
|
# define wxStrlen_ wcslen // used in wxStrlen inline function
|
|
|
|
# define wxStrncat wcsncat
|
|
|
|
# define wxStrncmp wcsncmp
|
|
|
|
# define wxStrncpy wcsncpy
|
|
|
|
# define wxStrpbrk wcspbrk
|
|
|
|
# define wxStrrchr wcsrchr
|
|
|
|
# define wxStrspn wcsspn
|
|
|
|
# define wxStrstr wcsstr
|
|
|
|
# define wxStrtod wcstod
|
|
|
|
# define wxStrtok wcstok
|
|
|
|
# define wxStrtol wcstol
|
|
|
|
# define wxStrtoul wcstoul
|
|
|
|
# define wxStrxfrm wcsxfrm
|
1999-01-27 05:00:02 -05:00
|
|
|
|
1999-04-08 19:38:47 -04:00
|
|
|
// glibc doesn't have wc equivalents of the other stuff
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxNEED_WX_STDIO_H
|
|
|
|
# define wxNEED_WX_STDLIB_H
|
|
|
|
# define wxNEED_WX_TIME_H
|
1999-04-08 19:38:47 -04:00
|
|
|
|
1999-07-27 23:38:12 -04:00
|
|
|
# else//!glibc
|
|
|
|
# error "Please define your compiler's Unicode conventions in wxChar.h"
|
|
|
|
# endif
|
|
|
|
# else//!Unicode
|
1999-01-27 05:00:02 -05:00
|
|
|
|
1999-07-27 23:38:12 -04:00
|
|
|
# include <ctype.h>
|
|
|
|
# include <string.h>
|
1999-04-12 16:01:51 -04:00
|
|
|
|
2002-03-25 09:06:42 -05:00
|
|
|
typedef char wxChar;
|
|
|
|
typedef signed char wxSChar;
|
|
|
|
typedef unsigned char wxUChar;
|
1999-10-04 16:15:38 -04:00
|
|
|
|
2001-07-15 17:04:44 -04:00
|
|
|
# if defined(__FreeBSD__) || defined(__DARWIN__)
|
1999-10-06 14:12:57 -04:00
|
|
|
# undef _T
|
1999-10-04 16:15:38 -04:00
|
|
|
# endif
|
1999-10-14 08:37:52 -04:00
|
|
|
|
|
|
|
# if !defined(__MINGW32__) || !defined(_T)
|
|
|
|
# define _T(x) x
|
|
|
|
# endif
|
1999-07-27 23:38:12 -04:00
|
|
|
|
|
|
|
// ctype.h functions
|
1999-10-04 16:15:38 -04:00
|
|
|
# define wxIsalnum isalnum
|
|
|
|
# define wxIsalpha isalpha
|
|
|
|
# define wxIsctrl isctrl
|
|
|
|
# define wxIsdigit isdigit
|
|
|
|
# define wxIsgraph isgraph
|
|
|
|
# define wxIslower islower
|
|
|
|
# define wxIsprint isprint
|
|
|
|
# define wxIspunct ispunct
|
|
|
|
# define wxIsspace isspace
|
|
|
|
# define wxIsupper isupper
|
|
|
|
# define wxIsxdigit isxdigit
|
|
|
|
# define wxTolower tolower
|
|
|
|
# define wxToupper toupper
|
|
|
|
|
|
|
|
// locale.h functons
|
|
|
|
# define wxSetlocale setlocale
|
|
|
|
|
|
|
|
// string.h functions
|
|
|
|
// #define wxStricmp strcasecmp
|
|
|
|
// wxStricmp is defined below!!
|
|
|
|
|
|
|
|
#ifdef HAVE_STRTOK_R
|
|
|
|
#define wxStrtok(str, sep, last) strtok_r(str, sep, last)
|
|
|
|
#else
|
|
|
|
#define wxStrtok(str, sep, last) strtok(str, sep)
|
|
|
|
#endif
|
1999-07-27 23:38:12 -04:00
|
|
|
|
|
|
|
// leave the rest to defaults below
|
1999-10-04 16:15:38 -04:00
|
|
|
# define wxNEED_WX_STRING_H
|
|
|
|
# define wxNEED_WX_STDIO_H
|
|
|
|
# define wxNEED_WX_STDLIB_H
|
|
|
|
# define wxNEED_WX_TIME_H
|
1999-07-27 23:38:12 -04:00
|
|
|
|
|
|
|
# endif//Unicode
|
1999-04-19 12:07:51 -04:00
|
|
|
#endif//TCHAR-aware compilers
|
|
|
|
|
|
|
|
// define wxStricmp for various compilers without Unicode possibilities
|
|
|
|
#if !defined(wxStricmp) && !wxUSE_UNICODE
|
2001-12-15 18:17:56 -05:00
|
|
|
# if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__SALFORDC__) || defined(__VISAGECPP__) || defined(__EMX__) || defined(__DJGPP__)
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxStricmp stricmp
|
1999-11-07 09:53:38 -05:00
|
|
|
# define wxStrnicmp strnicmp
|
1999-08-20 11:36:30 -04:00
|
|
|
# elif defined(__SC__) || defined(__VISUALC__) || (defined(__MWERKS__) && defined(__INTEL__))
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxStricmp _stricmp
|
1999-11-07 09:53:38 -05:00
|
|
|
# define wxStrnicmp _strnicmp
|
2001-02-15 16:51:14 -05:00
|
|
|
# elif defined(__UNIX__) || defined(__GNUWIN32__)
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxStricmp strcasecmp
|
1999-11-07 09:53:38 -05:00
|
|
|
# define wxStrnicmp strncasecmp
|
1999-07-27 23:38:12 -04:00
|
|
|
# elif defined(__MWERKS__) && !defined(__INTEL__)
|
|
|
|
// use wxWindows' implementation
|
|
|
|
# else
|
|
|
|
// if you leave wxStricmp undefined, wxWindows' implementation will be used
|
|
|
|
# error "Please define string case-insensitive compare for your OS/compiler"
|
|
|
|
# endif
|
1999-04-19 12:07:51 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
// if we need to define for standard headers, and we're not using Unicode,
|
|
|
|
// just define to standard C library routines
|
|
|
|
#if !wxUSE_UNICODE
|
1999-07-27 23:38:12 -04:00
|
|
|
# ifdef wxNEED_WX_STRING_H
|
|
|
|
# define wxStrcat strcat
|
|
|
|
# define wxStrchr strchr
|
|
|
|
# define wxStrcmp strcmp
|
|
|
|
# define wxStrcoll strcoll
|
|
|
|
# define wxStrcpy strcpy
|
|
|
|
# define wxStrcspn strcspn
|
2002-01-20 11:09:06 -05:00
|
|
|
#if !defined(__MWERKS__) || !defined(__WXMAC__)
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxStrdup strdup
|
2002-01-20 11:09:06 -05:00
|
|
|
#endif
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxStrlen_ strlen // used in wxStrlen inline function
|
|
|
|
# define wxStrncat strncat
|
|
|
|
# define wxStrncmp strncmp
|
|
|
|
# define wxStrncpy strncpy
|
|
|
|
# define wxStrpbrk strpbrk
|
|
|
|
# define wxStrrchr strrchr
|
|
|
|
# define wxStrspn strspn
|
|
|
|
# define wxStrstr strstr
|
|
|
|
# define wxStrtod strtod
|
|
|
|
# define wxStrtol strtol
|
|
|
|
# define wxStrtoul strtoul
|
|
|
|
# define wxStrxfrm strxfrm
|
|
|
|
# undef wxNEED_WX_STRING_H
|
|
|
|
# endif
|
|
|
|
|
|
|
|
# ifdef wxNEED_WX_STDIO_H
|
|
|
|
# define wxFgetc fgetc
|
|
|
|
# define wxFgetchar fgetchar
|
|
|
|
# define wxFgets fgets
|
|
|
|
# define wxFopen fopen
|
|
|
|
# define wxFputc fputc
|
|
|
|
# define wxFputchar fputchar
|
|
|
|
# define wxFprintf fprintf
|
|
|
|
# define wxFreopen freopen
|
|
|
|
# define wxFscanf fscanf
|
|
|
|
# define wxGetc getc
|
|
|
|
# define wxGetchar getchar
|
|
|
|
# define wxGets gets
|
|
|
|
# define wxPerror perror
|
|
|
|
# define wxPrintf printf
|
|
|
|
# define wxPutc putc
|
|
|
|
# define wxPutchar putchar
|
|
|
|
# define wxPuts puts
|
|
|
|
# define wxRemove remove
|
|
|
|
# define wxRename rename
|
|
|
|
# define wxScanf scanf
|
|
|
|
# define wxSprintf sprintf
|
|
|
|
# define wxSscanf sscanf
|
|
|
|
# define wxTmpnam tmpnam
|
|
|
|
# define wxUngetc ungetc
|
|
|
|
# define wxVfprint vfprintf
|
|
|
|
# define wxVprintf vprintf
|
|
|
|
# define wxVsscanf vsscanf
|
|
|
|
# define wxVsprintf vsprintf
|
|
|
|
# undef wxNEED_WX_STDIO_H
|
|
|
|
# endif
|
|
|
|
|
|
|
|
# ifdef wxNEED_WX_STDLIB_H
|
|
|
|
# define wxAtof atof
|
|
|
|
# define wxAtoi atoi
|
|
|
|
# define wxAtol atol
|
|
|
|
# define wxGetenv getenv
|
|
|
|
# define wxSystem system
|
|
|
|
# undef wxNEED_WX_STDLIB_H
|
|
|
|
# endif
|
|
|
|
|
|
|
|
# ifdef wxNEED_WX_TIME_H
|
|
|
|
# define wxAsctime asctime
|
|
|
|
# define wxCtime ctime
|
|
|
|
# define wxStrftime strftime
|
|
|
|
# undef wxNEED_WX_TIME_H
|
|
|
|
# endif
|
1999-04-19 12:07:51 -04:00
|
|
|
#endif //!Unicode
|
1999-01-27 05:00:02 -05:00
|
|
|
|
1999-12-13 10:51:01 -05:00
|
|
|
// checks whether the passed in pointer is NULL and if the string is empty
|
2001-04-26 12:38:11 -04:00
|
|
|
inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; }
|
1999-01-27 05:00:02 -05:00
|
|
|
|
1999-04-19 12:07:51 -04:00
|
|
|
#ifndef wxNEED_WX_STRING_H
|
1999-12-13 10:51:01 -05:00
|
|
|
// safe version of strlen() (returns 0 if passed NULL pointer)
|
2001-04-26 12:38:11 -04:00
|
|
|
inline size_t wxStrlen(const wxChar *psz)
|
1999-04-19 12:07:51 -04:00
|
|
|
{ return psz ? wxStrlen_(psz) : 0; }
|
1999-04-08 19:38:47 -04:00
|
|
|
#endif
|
1999-01-27 05:00:02 -05:00
|
|
|
|
1999-04-20 07:00:06 -04:00
|
|
|
#if wxUSE_WCHAR_T
|
1999-04-12 16:01:51 -04:00
|
|
|
// multibyte<->widechar conversion
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n);
|
|
|
|
WXDLLEXPORT size_t wxWC2MB(char *buf, const wchar_t *psz, size_t n);
|
1999-07-27 23:38:12 -04:00
|
|
|
# if wxUSE_UNICODE
|
|
|
|
# define wxMB2WX wxMB2WC
|
|
|
|
# define wxWX2MB wxWC2MB
|
|
|
|
# define wxWC2WX wxStrncpy
|
|
|
|
# define wxWX2WC wxStrncpy
|
|
|
|
# else
|
|
|
|
# define wxMB2WX wxStrncpy
|
|
|
|
# define wxWX2MB wxStrncpy
|
|
|
|
# define wxWC2WX wxWC2MB
|
|
|
|
# define wxWX2WC wxMB2WC
|
|
|
|
# endif
|
1999-05-09 10:49:40 -04:00
|
|
|
#else
|
|
|
|
// No wxUSE_WCHAR_T: we have to do something (JACS)
|
1999-07-27 23:38:12 -04:00
|
|
|
# define wxMB2WC wxStrncpy
|
|
|
|
# define wxWC2MB wxStrncpy
|
|
|
|
# define wxMB2WX wxStrncpy
|
|
|
|
# define wxWX2MB wxStrncpy
|
|
|
|
# define wxWC2WX wxWC2MB
|
|
|
|
# define wxWX2WC wxMB2WC
|
1999-04-20 07:00:06 -04:00
|
|
|
#endif
|
1999-05-09 10:49:40 -04:00
|
|
|
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT bool wxOKlibc(); // for internal use
|
1999-04-12 16:01:51 -04:00
|
|
|
|
|
|
|
// if libc versions are not available, use replacements defined in wxchar.cpp
|
|
|
|
#ifndef wxStrdup
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT wxChar * wxStrdup(const wxChar *psz);
|
1999-04-12 16:01:51 -04:00
|
|
|
#endif
|
|
|
|
|
1999-04-19 12:11:22 -04:00
|
|
|
#ifndef wxStricmp
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT int wxStricmp(const wxChar *psz1, const wxChar *psz2);
|
1999-04-19 12:11:22 -04:00
|
|
|
#endif
|
|
|
|
|
2001-07-04 16:11:26 -04:00
|
|
|
#ifndef wxStrnicmp
|
|
|
|
WXDLLEXPORT int wxStrnicmp(const wxChar *psz1, const wxChar *psz2, size_t len);
|
|
|
|
#endif
|
|
|
|
|
1999-04-12 16:01:51 -04:00
|
|
|
#ifndef wxStrtok
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_ptr);
|
1999-04-12 16:01:51 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef wxSetlocale
|
2000-01-02 21:19:07 -05:00
|
|
|
class wxWCharBuffer;
|
1999-12-13 10:51:01 -05:00
|
|
|
WXDLLEXPORT wxWCharBuffer wxSetlocale(int category, const wxChar *locale);
|
1999-04-12 16:01:51 -04:00
|
|
|
#endif
|
1999-04-19 12:07:51 -04:00
|
|
|
|
1999-05-07 14:36:06 -04:00
|
|
|
#ifdef wxNEED_WX_CTYPE_H
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT int wxIsalnum(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsalpha(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsctrl(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsdigit(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsgraph(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIslower(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsprint(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIspunct(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsspace(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsupper(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxIsxdigit(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxTolower(wxChar ch);
|
|
|
|
WXDLLEXPORT int wxToupper(wxChar ch);
|
1999-05-07 14:36:06 -04:00
|
|
|
#endif
|
|
|
|
|
1999-04-19 12:07:51 -04:00
|
|
|
#ifdef wxNEED_WX_STRING_H
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT wxChar * wxStrcat(wxChar *dest, const wxChar *src);
|
|
|
|
WXDLLEXPORT wxChar * wxStrchr(const wxChar *s, wxChar c);
|
|
|
|
WXDLLEXPORT int wxStrcmp(const wxChar *s1, const wxChar *s2);
|
|
|
|
WXDLLEXPORT int wxStrcoll(const wxChar *s1, const wxChar *s2);
|
|
|
|
WXDLLEXPORT wxChar * wxStrcpy(wxChar *dest, const wxChar *src);
|
|
|
|
WXDLLEXPORT size_t wxStrcspn(const wxChar *s, const wxChar *reject);
|
|
|
|
WXDLLEXPORT size_t wxStrlen(const wxChar *s);
|
|
|
|
WXDLLEXPORT wxChar * wxStrncat(wxChar *dest, const wxChar *src, size_t n);
|
|
|
|
WXDLLEXPORT int wxStrncmp(const wxChar *s1, const wxChar *s2, size_t n);
|
|
|
|
WXDLLEXPORT wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n);
|
|
|
|
WXDLLEXPORT wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept);
|
|
|
|
WXDLLEXPORT wxChar * wxStrrchr(const wxChar *s, wxChar c);
|
|
|
|
WXDLLEXPORT size_t wxStrspn(const wxChar *s, const wxChar *accept);
|
|
|
|
WXDLLEXPORT wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle);
|
|
|
|
WXDLLEXPORT double wxStrtod(const wxChar *nptr, wxChar **endptr);
|
|
|
|
WXDLLEXPORT long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base);
|
|
|
|
WXDLLEXPORT unsigned long int wxStrtoul(const wxChar *nptr, wxChar **endptr, int base);
|
|
|
|
WXDLLEXPORT size_t wxStrxfrm(wxChar *dest, const wxChar *src, size_t n);
|
1999-04-19 12:07:51 -04:00
|
|
|
#endif
|
|
|
|
|
1999-04-12 16:01:51 -04:00
|
|
|
#ifdef wxNEED_WX_STDIO_H
|
1999-07-27 23:38:12 -04:00
|
|
|
# include <stdio.h>
|
|
|
|
# include <stdarg.h>
|
1999-07-23 05:36:38 -04:00
|
|
|
WXDLLEXPORT FILE * wxFopen(const wxChar *path, const wxChar *mode);
|
|
|
|
WXDLLEXPORT FILE * wxFreopen(const wxChar *path, const wxChar *mode, FILE *stream);
|
2000-07-15 15:51:35 -04:00
|
|
|
WXDLLEXPORT int wxRemove(const wxChar *path);
|
|
|
|
WXDLLEXPORT int wxRename(const wxChar *oldpath, const wxChar *newpath);
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT int wxPrintf(const wxChar *fmt, ...);
|
|
|
|
WXDLLEXPORT int wxVprintf(const wxChar *fmt, va_list argptr);
|
|
|
|
WXDLLEXPORT int wxFprintf(FILE *stream, const wxChar *fmt, ...);
|
|
|
|
WXDLLEXPORT int wxVfprintf(FILE *stream, const wxChar *fmt, va_list argptr);
|
|
|
|
WXDLLEXPORT int wxSprintf(wxChar *buf, const wxChar *fmt, ...);
|
|
|
|
WXDLLEXPORT int wxVsprintf(wxChar *buf, const wxChar *fmt, va_list argptr);
|
|
|
|
WXDLLEXPORT int wxSscanf(const wxChar *buf, const wxChar *fmt, ...);
|
|
|
|
WXDLLEXPORT int wxVsscanf(const wxChar *buf, const wxChar *fmt, va_list argptr);
|
1999-04-12 16:01:51 -04:00
|
|
|
#endif
|
|
|
|
|
1999-04-13 02:53:41 -04:00
|
|
|
#ifndef wxAtof
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT double wxAtof(const wxChar *psz);
|
1999-04-13 02:53:41 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef wxNEED_WX_STDLIB_H
|
1999-05-17 13:10:11 -04:00
|
|
|
WXDLLEXPORT int wxAtoi(const wxChar *psz);
|
|
|
|
WXDLLEXPORT long wxAtol(const wxChar *psz);
|
|
|
|
WXDLLEXPORT wxChar * wxGetenv(const wxChar *name);
|
|
|
|
WXDLLEXPORT int wxSystem(const wxChar *psz);
|
1999-04-10 10:15:15 -04:00
|
|
|
#endif
|
|
|
|
|
1999-07-23 05:36:38 -04:00
|
|
|
#ifdef wxNEED_WX_TIME_H
|
|
|
|
WXDLLEXPORT size_t wxStrftime(wxChar *s, size_t max, const wxChar *fmt, const struct tm *tm);
|
|
|
|
#endif
|
|
|
|
|
2001-05-18 21:01:21 -04:00
|
|
|
// under VC++ 6.0 isspace() returns 1 for 8 bit chars which completely breaks
|
|
|
|
// the file parsing - this may be true for 5.0 as well, update #ifdef then
|
|
|
|
#if defined(__VISUALC__) && (__VISUALC__ >= 1200) && !wxUSE_UNICODE
|
|
|
|
#undef wxIsspace
|
|
|
|
#define wxIsspace(c) ((((unsigned)c) < 128) && isspace(c))
|
|
|
|
#endif // VC++
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// common macros which are always defined
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
1999-10-06 14:12:57 -04:00
|
|
|
// although global macros with such names are really bad, we want to have
|
|
|
|
// another name for _T() which should be used to avoid confusion between _T()
|
|
|
|
// and _() in wxWindows sources
|
1999-10-08 10:35:56 -04:00
|
|
|
#define wxT(x) _T(x)
|
1999-10-06 14:12:57 -04:00
|
|
|
|
2001-12-16 20:05:37 -05:00
|
|
|
// Unicode-friendly __FILE__, __DATE__ and __TIME__ analogs
|
1999-10-04 16:15:38 -04:00
|
|
|
#ifndef __TFILE__
|
1999-10-08 10:35:56 -04:00
|
|
|
#define __XFILE__(x) wxT(x)
|
1999-10-04 16:15:38 -04:00
|
|
|
#define __TFILE__ __XFILE__(__FILE__)
|
|
|
|
#endif
|
|
|
|
|
2001-12-16 20:05:37 -05:00
|
|
|
#ifndef __TDATE__
|
|
|
|
#define __XDATE__(x) wxT(x)
|
|
|
|
#define __TDATE__ __XDATE__(__DATE__)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef __TTIME__
|
|
|
|
#define __XTIME__(x) wxT(x)
|
|
|
|
#define __TTIME__ __XTIME__(__TIME__)
|
|
|
|
#endif
|
|
|
|
|
1999-01-27 05:00:02 -05:00
|
|
|
#endif
|
|
|
|
//_WX_WXCHAR_H_
|
1999-07-27 23:38:12 -04:00
|
|
|
|