1 /* 2 * tchar.h 3 * 4 * Unicode mapping layer for the standard C library. By including this 5 * file and using the 't' names for string functions 6 * (eg. _tprintf) you can make code which can be easily adapted to both 7 * Unicode and non-unicode environments. In a unicode enabled compile define 8 * _UNICODE before including tchar.h, otherwise the standard non-unicode 9 * library functions will be used. 10 * 11 * Note that you still need to include string.h or stdlib.h etc. to define 12 * the appropriate functions. Also note that there are several defines 13 * included for non-ANSI functions which are commonly available (but using 14 * the convention of prepending an underscore to non-ANSI library function 15 * names). 16 * 17 * This file is part of the Mingw32 package. 18 * 19 * Contributors: 20 * Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp> 21 * 22 * THIS SOFTWARE IS NOT COPYRIGHTED 23 * 24 * This source code is offered for use in the public domain. You may 25 * use, modify or distribute it freely. 26 * 27 * This code is distributed in the hope that it will be useful but 28 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 29 * DISCLAIMED. This includes but is not limited to warranties of 30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 31 * 32 * $Revision: 1.2 $ 33 * $Author: bellard $ 34 * $Date: 2005/04/17 13:14:29 $ 35 * 36 */ 37 38 #ifndef _TCHAR_H_ 39 #define _TCHAR_H_ 40 41 /* All the headers include this file. */ 42 #include <_mingw.h> 43 44 /* 45 * NOTE: This tests _UNICODE, which is different from the UNICODE define 46 * used to differentiate Win32 API calls. 47 */ 48 #ifdef _UNICODE 49 50 51 /* 52 * Use TCHAR instead of char or wchar_t. It will be appropriately translated 53 * if _UNICODE is correctly defined (or not). 54 */ 55 #ifndef _TCHAR_DEFINED 56 #ifndef RC_INVOKED 57 typedef wchar_t TCHAR; 58 typedef wchar_t _TCHAR; 59 #endif /* Not RC_INVOKED */ 60 #define _TCHAR_DEFINED 61 #endif 62 63 64 /* 65 * __TEXT is a private macro whose specific use is to force the expansion of a 66 * macro passed as an argument to the macros _T or _TEXT. DO NOT use this 67 * macro within your programs. It's name and function could change without 68 * notice. 69 */ 70 #define __TEXT(x) L##x 71 72 /* for porting from other Windows compilers */ 73 #if 0 // no wide startup module 74 #define _tmain wmain 75 #define _tWinMain wWinMain 76 #define _tenviron _wenviron 77 #define __targv __wargv 78 #endif 79 80 /* 81 * Unicode functions 82 */ 83 #define _tprintf wprintf 84 #define _ftprintf fwprintf 85 #define _stprintf swprintf 86 #define _sntprintf _snwprintf 87 #define _vtprintf vwprintf 88 #define _vftprintf vfwprintf 89 #define _vstprintf vswprintf 90 #define _vsntprintf _vsnwprintf 91 #define _tscanf wscanf 92 #define _ftscanf fwscanf 93 #define _stscanf swscanf 94 #define _fgettc fgetwc 95 #define _fgettchar _fgetwchar 96 #define _fgetts fgetws 97 #define _fputtc fputwc 98 #define _fputtchar _fputwchar 99 #define _fputts fputws 100 #define _gettc getwc 101 #define _getts getws 102 #define _puttc putwc 103 #define _putts putws 104 #define _ungettc ungetwc 105 #define _tcstod wcstod 106 #define _tcstol wcstol 107 #define _tcstoul wcstoul 108 #define _itot _itow 109 #define _ltot _ltow 110 #define _ultot _ultow 111 #define _ttoi _wtoi 112 #define _ttol _wtol 113 #define _tcscat wcscat 114 #define _tcschr wcschr 115 #define _tcscmp wcscmp 116 #define _tcscpy wcscpy 117 #define _tcscspn wcscspn 118 #define _tcslen wcslen 119 #define _tcsncat wcsncat 120 #define _tcsncmp wcsncmp 121 #define _tcsncpy wcsncpy 122 #define _tcspbrk wcspbrk 123 #define _tcsrchr wcsrchr 124 #define _tcsspn wcsspn 125 #define _tcsstr wcsstr 126 #define _tcstok wcstok 127 #define _tcsdup _wcsdup 128 #define _tcsicmp _wcsicmp 129 #define _tcsnicmp _wcsnicmp 130 #define _tcsnset _wcsnset 131 #define _tcsrev _wcsrev 132 #define _tcsset _wcsset 133 #define _tcslwr _wcslwr 134 #define _tcsupr _wcsupr 135 #define _tcsxfrm wcsxfrm 136 #define _tcscoll wcscoll 137 #define _tcsicoll _wcsicoll 138 #define _istalpha iswalpha 139 #define _istupper iswupper 140 #define _istlower iswlower 141 #define _istdigit iswdigit 142 #define _istxdigit iswxdigit 143 #define _istspace iswspace 144 #define _istpunct iswpunct 145 #define _istalnum iswalnum 146 #define _istprint iswprint 147 #define _istgraph iswgraph 148 #define _istcntrl iswcntrl 149 #define _istascii iswascii 150 #define _totupper towupper 151 #define _totlower towlower 152 #define _tcsftime wcsftime 153 /* Macro functions */ 154 #define _tcsdec _wcsdec 155 #define _tcsinc _wcsinc 156 #define _tcsnbcnt _wcsncnt 157 #define _tcsnccnt _wcsncnt 158 #define _tcsnextc _wcsnextc 159 #define _tcsninc _wcsninc 160 #define _tcsspnp _wcsspnp 161 #define _wcsdec(_wcs1, _wcs2) ((_wcs1)>=(_wcs2) ? NULL : (_wcs2)-1) 162 #define _wcsinc(_wcs) ((_wcs)+1) 163 #define _wcsnextc(_wcs) ((unsigned int) *(_wcs)) 164 #define _wcsninc(_wcs, _inc) (((_wcs)+(_inc))) 165 #define _wcsncnt(_wcs, _cnt) ((wcslen(_wcs)>_cnt) ? _count : wcslen(_wcs)) 166 #define _wcsspnp(_wcs1, _wcs2) ((*((_wcs1)+wcsspn(_wcs1,_wcs2))) ? ((_wcs1)+wcsspn(_wcs1,_wcs2)) : NULL) 167 168 #if 1 // defined __MSVCRT__ 169 /* 170 * These wide functions not in crtdll.dll. 171 * Define macros anyway so that _wfoo rather than _tfoo is undefined 172 */ 173 #define _ttoi64 _wtoi64 174 #define _i64tot _i64tow 175 #define _ui64tot _ui64tow 176 #define _tasctime _wasctime 177 #define _tctime _wctime 178 #define _tstrdate _wstrdate 179 #define _tstrtime _wstrtime 180 #define _tutime _wutime 181 #define _tcsnccoll _wcsncoll 182 #define _tcsncoll _wcsncoll 183 #define _tcsncicoll _wcsnicoll 184 #define _tcsnicoll _wcsnicoll 185 #define _taccess _waccess 186 #define _tchmod _wchmod 187 #define _tcreat _wcreat 188 #define _tfindfirst _wfindfirst 189 #define _tfindnext _wfindnext 190 #define _tfopen _wfopen 191 #define _tgetenv _wgetenv 192 #define _tmktemp _wmktemp 193 #define _topen _wopen 194 #define _tremove _wremove 195 #define _trename _wrename 196 #define _tsopen _wsopen 197 #define _tsetlocale _wsetlocale 198 #define _tunlink _wunlink 199 #define _tfinddata_t _wfinddata_t 200 #define _tfindfirsti64 _wfindfirsti64 201 #define _tfindnexti64 _wfindnexti64 202 #define _tfinddatai64_t _wfinddatai64_t 203 #endif /* __MSVCRT__ */ 204 205 #else /* Not _UNICODE */ 206 207 /* 208 * TCHAR, the type you should use instead of char. 209 */ 210 #ifndef _TCHAR_DEFINED 211 #ifndef RC_INVOKED 212 typedef char TCHAR; 213 typedef char _TCHAR; 214 #endif 215 #define _TCHAR_DEFINED 216 #endif 217 218 /* 219 * __TEXT is a private macro whose specific use is to force the expansion of a 220 * macro passed as an argument to the macros _T or _TEXT. DO NOT use this 221 * macro within your programs. It's name and function could change without 222 * notice. 223 */ 224 #define __TEXT(x) x 225 226 /* for porting from other Windows compilers */ 227 #define _tmain main 228 #define _tWinMain WinMain 229 #define _tenviron _environ 230 #define __targv __argv 231 232 /* 233 * Non-unicode (standard) functions 234 */ 235 236 #define _tprintf printf 237 #define _ftprintf fprintf 238 #define _stprintf sprintf 239 #define _sntprintf _snprintf 240 #define _vtprintf vprintf 241 #define _vftprintf vfprintf 242 #define _vstprintf vsprintf 243 #define _vsntprintf _vsnprintf 244 #define _tscanf scanf 245 #define _ftscanf fscanf 246 #define _stscanf sscanf 247 #define _fgettc fgetc 248 #define _fgettchar _fgetchar 249 #define _fgetts fgets 250 #define _fputtc fputc 251 #define _fputtchar _fputchar 252 #define _fputts fputs 253 #define _tfopen fopen 254 #define _tgetenv getenv 255 #define _gettc getc 256 #define _getts gets 257 #define _puttc putc 258 #define _putts puts 259 #define _ungettc ungetc 260 #define _tcstod strtod 261 #define _tcstol strtol 262 #define _tcstoul strtoul 263 #define _itot _itoa 264 #define _ltot _ltoa 265 #define _ultot _ultoa 266 #define _ttoi atoi 267 #define _ttol atol 268 #define _tcscat strcat 269 #define _tcschr strchr 270 #define _tcscmp strcmp 271 #define _tcscpy strcpy 272 #define _tcscspn strcspn 273 #define _tcslen strlen 274 #define _tcsncat strncat 275 #define _tcsncmp strncmp 276 #define _tcsncpy strncpy 277 #define _tcspbrk strpbrk 278 #define _tcsrchr strrchr 279 #define _tcsspn strspn 280 #define _tcsstr strstr 281 #define _tcstok strtok 282 #define _tcsdup _strdup 283 #define _tcsicmp _stricmp 284 #define _tcsnicmp _strnicmp 285 #define _tcsnset _strnset 286 #define _tcsrev _strrev 287 #define _tcsset _strset 288 #define _tcslwr _strlwr 289 #define _tcsupr _strupr 290 #define _tcsxfrm strxfrm 291 #define _tcscoll strcoll 292 #define _tcsicoll _stricoll 293 #define _istalpha isalpha 294 #define _istupper isupper 295 #define _istlower islower 296 #define _istdigit isdigit 297 #define _istxdigit isxdigit 298 #define _istspace isspace 299 #define _istpunct ispunct 300 #define _istalnum isalnum 301 #define _istprint isprint 302 #define _istgraph isgraph 303 #define _istcntrl iscntrl 304 #define _istascii isascii 305 #define _totupper toupper 306 #define _totlower tolower 307 #define _tasctime asctime 308 #define _tctime ctime 309 #define _tstrdate _strdate 310 #define _tstrtime _strtime 311 #define _tutime _utime 312 #define _tcsftime strftime 313 /* Macro functions */ 314 #define _tcsdec _strdec 315 #define _tcsinc _strinc 316 #define _tcsnbcnt _strncnt 317 #define _tcsnccnt _strncnt 318 #define _tcsnextc _strnextc 319 #define _tcsninc _strninc 320 #define _tcsspnp _strspnp 321 #define _strdec(_str1, _str2) ((_str1)>=(_str2) ? NULL : (_str2)-1) 322 #define _strinc(_str) ((_str)+1) 323 #define _strnextc(_str) ((unsigned int) *(_str)) 324 #define _strninc(_str, _inc) (((_str)+(_inc))) 325 #define _strncnt(_str, _cnt) ((strlen(_str)>_cnt) ? _count : strlen(_str)) 326 #define _strspnp(_str1, _str2) ((*((_str1)+strspn(_str1,_str2))) ? ((_str1)+strspn(_str1,_str2)) : NULL) 327 328 #define _tchmod _chmod 329 #define _tcreat _creat 330 #define _tfindfirst _findfirst 331 #define _tfindnext _findnext 332 #define _tmktemp _mktemp 333 #define _topen _open 334 #define _taccess _access 335 #define _tremove remove 336 #define _trename rename 337 #define _tsopen _sopen 338 #define _tsetlocale setlocale 339 #define _tunlink _unlink 340 #define _tfinddata_t _finddata_t 341 342 343 #if 1 // defined __MSVCRT__ 344 /* Not in crtdll.dll. Define macros anyway? */ 345 #define _ttoi64 _atoi64 346 #define _i64tot _i64toa 347 #define _ui64tot _ui64toa 348 #define _tcsnccoll _strncoll 349 #define _tcsncoll _strncoll 350 #define _tcsncicoll _strnicoll 351 #define _tcsnicoll _strnicoll 352 #define _tfindfirsti64 _findfirsti64 353 #define _tfindnexti64 _findnexti64 354 #define _tfinddatai64_t _finddatai64_t 355 #endif /* __MSVCRT__ */ 356 357 #endif /* Not _UNICODE */ 358 359 /* 360 * UNICODE a constant string when _UNICODE is defined else returns the string 361 * unmodified. Also defined in w32api/winnt.h. 362 */ 363 #define _TEXT(x) __TEXT(x) 364 #define _T(x) __TEXT(x) 365 366 #endif /* Not _TCHAR_H_ */ 367 368