/* * tchar.h * * Unicode mapping layer for the standard C library. By including this * file and using the 't' names for string functions * (eg. _tprintf) you can make code which can be easily adapted to both * Unicode and non-unicode environments. In a unicode enabled compile define * _UNICODE before including tchar.h, otherwise the standard non-unicode * library functions will be used. * * Note that you still need to include string.h or stdlib.h etc. to define * the appropriate functions. Also note that there are several defines * included for non-ANSI functions which are commonly available (but using * the convention of prepending an underscore to non-ANSI library function * names). * * This file is part of the Mingw32 package. * * Contributors: * Created by Colin Peters * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * $Revision$ * $Author$ * $Date$ * */ #ifndef _TCHAR_H_ #define _TCHAR_H_ /* All the headers include this file. */ #include <_mingw.h> /* * NOTE: This tests _UNICODE, which is different from the UNICODE define * used to differentiate Win32 API calls. */ #ifdef _UNICODE /* * Use TCHAR instead of char or wchar_t. It will be appropriately translated * if _UNICODE is correctly defined (or not). */ #ifndef _TCHAR_DEFINED #ifndef RC_INVOKED typedef wchar_t TCHAR; typedef wchar_t _TCHAR; #endif /* Not RC_INVOKED */ #define _TCHAR_DEFINED #endif /* * __TEXT is a private macro whose specific use is to force the expansion of a * macro passed as an argument to the macros _T or _TEXT. DO NOT use this * macro within your programs. It's name and function could change without * notice. */ #define __TEXT(q) L##q /* for porting from other Windows compilers */ #if 0 // no wide startup module #define _tmain wmain #define _tWinMain wWinMain #define _tenviron _wenviron #define __targv __wargv #endif /* * Unicode functions */ #define _tprintf wprintf #define _ftprintf fwprintf #define _stprintf swprintf #define _sntprintf _snwprintf #define _vtprintf vwprintf #define _vftprintf vfwprintf #define _vstprintf vswprintf #define _vsntprintf _vsnwprintf #define _tscanf wscanf #define _ftscanf fwscanf #define _stscanf swscanf #define _fgettc fgetwc #define _fgettchar _fgetwchar #define _fgetts fgetws #define _fputtc fputwc #define _fputtchar _fputwchar #define _fputts fputws #define _gettc getwc #define _getts _getws #define _puttc putwc #define _putts _putws #define _ungettc ungetwc #define _tcstod wcstod #define _tcstol wcstol #define _tcstoul wcstoul #define _itot _itow #define _ltot _ltow #define _ultot _ultow #define _ttoi _wtoi #define _ttol _wtol #define _tcscat wcscat #define _tcschr wcschr #define _tcscmp wcscmp #define _tcscpy wcscpy #define _tcscspn wcscspn #define _tcslen wcslen #define _tcsncat wcsncat #define _tcsncmp wcsncmp #define _tcsncpy wcsncpy #define _tcspbrk wcspbrk #define _tcsrchr wcsrchr #define _tcsspn wcsspn #define _tcsstr wcsstr #define _tcstok wcstok #define _tcsdup _wcsdup #define _tcsicmp _wcsicmp #define _tcsnicmp _wcsnicmp #define _tcsnset _wcsnset #define _tcsrev _wcsrev #define _tcsset _wcsset #define _tcslwr _wcslwr #define _tcsupr _wcsupr #define _tcsxfrm wcsxfrm #define _tcscoll wcscoll #define _tcsicoll _wcsicoll #define _istalpha iswalpha #define _istupper iswupper #define _istlower iswlower #define _istdigit iswdigit #define _istxdigit iswxdigit #define _istspace iswspace #define _istpunct iswpunct #define _istalnum iswalnum #define _istprint iswprint #define _istgraph iswgraph #define _istcntrl iswcntrl #define _istascii iswascii #define _totupper towupper #define _totlower towlower #define _tcsftime wcsftime /* Macro functions */ #define _tcsdec _wcsdec #define _tcsinc _wcsinc #define _tcsnbcnt _wcsncnt #define _tcsnccnt _wcsncnt #define _tcsnextc _wcsnextc #define _tcsninc _wcsninc #define _tcsspnp _wcsspnp #define _wcsdec(_wcs1, _wcs2) ((_wcs1)>=(_wcs2) ? NULL : (_wcs2)-1) #define _wcsinc(_wcs) ((_wcs)+1) #define _wcsnextc(_wcs) ((unsigned int) *(_wcs)) #define _wcsninc(_wcs, _inc) (((_wcs)+(_inc))) #define _wcsncnt(_wcs, _cnt) ((wcslen(_wcs)>_cnt) ? _count : wcslen(_wcs)) #define _wcsspnp(_wcs1, _wcs2) ((*((_wcs1)+wcsspn(_wcs1,_wcs2))) ? ((_wcs1)+wcsspn(_wcs1,_wcs2)) : NULL) #if 1 // defined __MSVCRT__ /* * These wide functions not in crtdll.dll. * Define macros anyway so that _wfoo rather than _tfoo is undefined */ #define _ttoi64 _wtoi64 #define _i64tot _i64tow #define _ui64tot _ui64tow #define _tasctime _wasctime #define _tctime _wctime #define _tstrdate _wstrdate #define _tstrtime _wstrtime #define _tutime _wutime #define _tcsnccoll _wcsncoll #define _tcsncoll _wcsncoll #define _tcsncicoll _wcsnicoll #define _tcsnicoll _wcsnicoll #define _taccess _waccess #define _tchmod _wchmod #define _tcreat _wcreat #define _tfindfirst _wfindfirst #define _tfindnext _wfindnext #define _tfopen _wfdopen #define _tfopen _wfopen #define _tgetenv _wgetenv #define _tputenv _wputenv #define _tsearchenv _wsearchenv #define _tmakepath _wmakepath #define _tsplitpath _wsplitpath #define _tfullpath _wfullpath #define _tmktemp _wmktemp #define _topen _wopen #define _tremove _wremove #define _trename _wrename #define _tsopen _wsopen #define _tsetlocale _wsetlocale #define _tunlink _wunlink #define _tfinddata_t _wfinddata_t #define _tfindfirsti64 _wfindfirsti64 #define _tfindnexti64 _wfindnexti64 #define _tfinddatai64_t _wfinddatai64_t #endif /* __MSVCRT__ */ /* dirent structures and functions */ #define _tdirent _wdirent #define _TDIR _WDIR #define _topendir _wopendir #define _tclosedir _wclosedir #define _treaddir _wreaddir #define _trewinddir _wrewinddir #define _ttelldir _wtelldir #define _tseekdir _wseekdir #else /* Not _UNICODE */ /* * TCHAR, the type you should use instead of char. */ #ifndef _TCHAR_DEFINED #ifndef RC_INVOKED typedef char TCHAR; typedef char _TCHAR; #endif #define _TCHAR_DEFINED #endif /* * __TEXT is a private macro whose specific use is to force the expansion of a * macro passed as an argument to the macros _T or _TEXT. DO NOT use this * macro within your programs. It's name and function could change without * notice. */ #define __TEXT(q) q /* for porting from other Windows compilers */ #define _tmain main #define _tWinMain WinMain #define _tenviron _environ #define __targv __argv /* * Non-unicode (standard) functions */ #define _tprintf printf #define _ftprintf fprintf #define _stprintf sprintf #define _sntprintf _snprintf #define _vtprintf vprintf #define _vftprintf vfprintf #define _vstprintf vsprintf #define _vsntprintf _vsnprintf #define _tscanf scanf #define _ftscanf fscanf #define _stscanf sscanf #define _fgettc fgetc #define _fgettchar _fgetchar #define _fgetts fgets #define _fputtc fputc #define _fputtchar _fputchar #define _fputts fputs #define _tfdopen _fdopen #define _tfopen fopen #define _tgetenv getenv #define _tputenv _putenv #define _tsearchenv _searchenv #define _tmakepath _makepath #define _tsplitpath _splitpath #define _tfullpath _fullpath #define _gettc getc #define _getts gets #define _puttc putc #define _putts puts #define _ungettc ungetc #define _tcstod strtod #define _tcstol strtol #define _tcstoul strtoul #define _itot _itoa #define _ltot _ltoa #define _ultot _ultoa #define _ttoi atoi #define _ttol atol #define _tcscat strcat #define _tcschr strchr #define _tcscmp strcmp #define _tcscpy strcpy #define _tcscspn strcspn #define _tcslen strlen #define _tcsncat strncat #define _tcsncmp strncmp #define _tcsncpy strncpy #define _tcspbrk strpbrk #define _tcsrchr strrchr #define _tcsspn strspn #define _tcsstr strstr #define _tcstok strtok #define _tcsdup _strdup #define _tcsicmp _stricmp #define _tcsnicmp _strnicmp #define _tcsnset _strnset #define _tcsrev _strrev #define _tcsset _strset #define _tcslwr _strlwr #define _tcsupr _strupr #define _tcsxfrm strxfrm #define _tcscoll strcoll #define _tcsicoll _stricoll #define _istalpha isalpha #define _istupper isupper #define _istlower islower #define _istdigit isdigit #define _istxdigit isxdigit #define _istspace isspace #define _istpunct ispunct #define _istalnum isalnum #define _istprint isprint #define _istgraph isgraph #define _istcntrl iscntrl #define _istascii isascii #define _totupper toupper #define _totlower tolower #define _tasctime asctime #define _tctime ctime #define _tstrdate _strdate #define _tstrtime _strtime #define _tutime _utime #define _tcsftime strftime /* Macro functions */ #define _tcsdec _strdec #define _tcsinc _strinc #define _tcsnbcnt _strncnt #define _tcsnccnt _strncnt #define _tcsnextc _strnextc #define _tcsninc _strninc #define _tcsspnp _strspnp #define _strdec(_str1, _str2) ((_str1)>=(_str2) ? NULL : (_str2)-1) #define _strinc(_str) ((_str)+1) #define _strnextc(_str) ((unsigned int) *(_str)) #define _strninc(_str, _inc) (((_str)+(_inc))) #define _strncnt(_str, _cnt) ((strlen(_str)>_cnt) ? _count : strlen(_str)) #define _strspnp(_str1, _str2) ((*((_str1)+strspn(_str1,_str2))) ? ((_str1)+strspn(_str1,_str2)) : NULL) #define _tchmod _chmod #define _tcreat _creat #define _tfindfirst _findfirst #define _tfindnext _findnext #define _tmktemp _mktemp #define _topen _open #define _taccess _access #define _tremove remove #define _trename rename #define _tsopen _sopen #define _tsetlocale setlocale #define _tunlink _unlink #define _tfinddata_t _finddata_t #if 1 // defined __MSVCRT__ /* Not in crtdll.dll. Define macros anyway? */ #define _ttoi64 _atoi64 #define _i64tot _i64toa #define _ui64tot _ui64toa #define _tcsnccoll _strncoll #define _tcsncoll _strncoll #define _tcsncicoll _strnicoll #define _tcsnicoll _strnicoll #define _tfindfirsti64 _findfirsti64 #define _tfindnexti64 _findnexti64 #define _tfinddatai64_t _finddatai64_t #endif /* __MSVCRT__ */ /* dirent structures and functions */ #define _tdirent dirent #define _TDIR DIR #define _topendir opendir #define _tclosedir closedir #define _treaddir readdir #define _trewinddir rewinddir #define _ttelldir telldir #define _tseekdir seekdir #endif /* Not _UNICODE */ /* * UNICODE a constant string when _UNICODE is defined else returns the string * unmodified. Also defined in w32api/winnt.h. */ #define _TEXT(x) __TEXT(x) #define _T(x) __TEXT(x) #endif /* Not _TCHAR_H_ */