Added Joel's wxchar.h for future Unicode adventures
[wxWidgets.git] / include / wx / wxchar.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wxchar.h
3 // Purpose: Declarations common to wx char/wchar_t usage (wide chars)
4 // Author: Joel Farley
5 // Modified by:
6 // Created: 1998/06/12
7 // RCS-ID: $Id$
8 // Copyright: (c) wxWindows copyright
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_WXCHAR_H_
13 #define _WX_WXCHAR_H_
14
15 #ifdef __GNUG__
16 #pragma interface "wxchar.h"
17 #endif
18
19 // only do SBCS or _UNICODE
20 #if defined (_MBCS )
21 #error "MBCS is not supported by wxChar"
22 #endif
23
24 // only do Unicode for Windows (VC++), for now
25 #if defined(_MSC_VER) && defined(__WIN32__)
26
27 #include <tchar.h>
28 typedef _TCHAR wxChar;
29 typedef _TSCHAR wxSChar;
30 typedef _TUCHAR wxUChar;
31
32 // ctype.h functions
33 #define wxIsalnum _istalnum
34 #define wxIsalpha _istalpha
35 #define wxIsctrl _istctrl
36 #define wxIsdigit _istdigit
37 #define wxIsgraph _istgraph
38 #define wxIslower _istlower
39 #define wxIsprint _istprint
40 #define wxIspunct _istpunct
41 #define wxIsspace _istspace
42 #define wxIsupper _istupper
43 #define wxIsxdigit _istxdigit
44 #define wxTolower _totlower
45 #define wxToupper _totupper
46
47 // locale.h functons
48 #define wxSetlocale _tsetlocale
49
50 // string.h functions
51 #define wxStrcat _tcscat
52 #define wxStrchr _tcschr
53 #define wxStrcmp _tcscmp
54 #define wxStrcoll _tcscoll
55 #define wxStrcpy _tcscpy
56 #define wxStrcspn _tcscspn
57 #define wxStrftime _tcsftime
58 #define wxStrncat _tcsncat
59 #define wxStrncmp _tcsncmp
60 #define wxStrncpy _tcsncpy
61 #define wxStrpbrk _tcspbrk
62 #define wxStrrchr _tcsrchr
63 #define wxStrspn _tcsspn
64 #define wxStrstr _tcsstr
65 #define wxStrtod _tcstod
66 #define wxStrtok _tcstok
67 #define wxStrtol _tcstol
68 #define wxStrtoul _tcstoul
69 #define wxStrxfrm _tcsxfrm
70
71 // stdio.h functions
72 #define wxFgetc _fgettc
73 #define wxFgetchar _fgettchar
74 #define wxFgets _fgetts
75 #define wxFopen _tfopen
76 #define wxFputc _fputtc
77 #define wxFputchar _fputtchar
78 #define wxFprintf _ftprintf
79 #define wxFreopen _tfreopen
80 #define wxFscanf _ftscanf
81 #define wxGetc _gettc
82 #define wxGetchar _gettchar
83 #define wxGets _getts
84 #define wxPerror _tperror
85 #define wxPrintf _tprintf
86 #define wxPutc _puttc
87 #define wxPutchar _puttchar
88 #define wxPuts _putts
89 #define wxRemove _tremove
90 #define wxRename _trename
91 #define wxScanf _tscanf
92 #define wxSprintf _stprintf
93 #define wxSscanf _stscanf
94 #define wxTmpnam _ttmpnam
95 #define wxUngetc _tungetc
96 #define wxVfprint _vftprintf
97 #define wxVprintf _vtprintf
98 #define wxVsprintf _vstprintf
99
100 // stdlib.h functions
101 #define wxAtoi _ttoi
102 #define wxAtol _ttol
103 #define wxGetenv _tgetenv
104 #define wxSystem _tsystem
105
106 // time.h functions
107 #define wxAsctime _tasctime
108 #define wxCtime _tctime
109
110 // #elif defined(XXX)
111 // #include XXX-specific files here
112 // typeddef YYY wxChar;
113
114 // translate wxZZZ names
115
116 #else//!Unicode
117
118 // make sure we aren't doing Unicode
119 #if defined ( __WXUNICODE__ ) || defined ( _UNICODE )
120 #error "Please define your compiler's Unicode conventions in wxChar.h"
121 #endif
122
123 typedef char wxChar;
124 typedef signed char wxSChar;
125 typedef unsigned char wxUChar;
126
127 #define _T(x) x
128
129 // ctype.h functions
130 #define wxIsalnum isalnum
131 #define wxIsalpha isalpha
132 #define wxIsctrl isctrl
133 #define wxIsdigit isdigit
134 #define wxIsgraph isgraph
135 #define wxIslower islower
136 #define wxIsprint isprint
137 #define wxIspunct ispunct
138 #define wxIsspace isspace
139 #define wxIsupper isupper
140 #define wxIsxdigit isxdigit
141 #define wxTolower tolower
142 #define wxToupper toupper
143
144 // locale.h functons
145 #define wxSetlocale setlocale
146
147 // string.h functions
148 #define wxStrcat strcat
149 #define wxStrchr strchr
150 #define wxStrcmp strcmp
151 #define wxStrcoll strcoll
152 #define wxStrcpy strcpy
153 #define wxStrcspn strcspn
154 #define wxStrftime strftime
155 #define wxStrncat strncat
156 #define wxStrncmp strncmp
157 #define wxStrncpy strncpy
158 #define wxStrpbrk strpbrk
159 #define wxStrrchr strrchr
160 #define wxStrspn strspn
161 #define wxStrstr strstr
162 #define wxStrtod strtod
163 #define wxStrtok strtok
164 #define wxStrtol strtol
165 #define wxStrtoul strtoul
166 #define wxStrxfrm strxfrm
167
168 // stdio.h functions
169 #define wxFgetc fgetc
170 #define wxFgetchar fgetchar
171 #define wxFgets fgets
172 #define wxFopen fopen
173 #define wxFputc fputc
174 #define wxFputchar fputchar
175 #define wxFprintf fprintf
176 #define wxFreopen freopen
177 #define wxFscanf fscanf
178 #define wxGetc getc
179 #define wxGetchar getchar
180 #define wxGets gets
181 #define wxPerror perror
182 #define wxPrintf printf
183 #define wxPutc putc
184 #define wxPutchar putchar
185 #define wxPuts puts
186 #define wxRemove remove
187 #define wxRename rename
188 #define wxScanf scanf
189 #define wxSprintf sprintf
190 #define wxSscanf sscanf
191 #define wxTmpnam tmpnam
192 #define wxUngetc ungetc
193 #define wxVfprint vfprintf
194 #define wxVprintf vprintf
195 #define wxVsprintf vsprintf
196
197 // stdlib.h functions
198 #define wxAtoi atoi
199 #define wxAtol atol
200 #define wxGetenv getenv
201 #define wxSystem system
202
203 // time.h functions
204 #define wxAsctime asctime
205 #define wxCtime ctime
206
207 #endif//Unicode
208
209
210 /// checks whether the passed in pointer is NULL and if the string is empty
211 inline bool WXDLLEXPORT wxIsEmpty(const wxChar *p) { return !p || !*p; }
212
213 /// safe version of strlen() (returns 0 if passed NULL pointer)
214 inline size_t WXDLLEXPORT wxStrlen(const wxChar *psz)
215 #if defined(_MSC_VER)
216 { return psz ? _tcslen(psz) : 0; }
217 #else
218 { return psz ? strlen(psz) : 0; }
219 #endif
220
221 /// portable strcasecmp/_stricmp
222 inline int WXDLLEXPORT wxStricmp(const wxChar *, const wxChar *)
223 #if defined(_MSC_VER)
224 { return _tcsicmp(psz1, psz2); }
225 #elif defined(__BORLANDC__)
226 { return stricmp(psz1, psz2); }
227 #elif defined(__UNIX__) || defined(__GNUWIN32__)
228 { return strcasecmp(psz1, psz2); }
229 #else
230 // almost all compilers/libraries provide this function (unfortunately under
231 // different names), that's why we don't implement our own which will surely
232 // be more efficient than this code (uncomment to use):
233 /*
234 register char c1, c2;
235 do {
236 c1 = tolower(*psz1++);
237 c2 = tolower(*psz2++);
238 } while ( c1 && (c1 == c2) );
239
240 return c1 - c2;
241 */
242
243 #error "Please define string case-insensitive compare for your OS/compiler"
244 #endif // OS/compiler
245
246 #endif
247 //_WX_WXCHAR_H_