/*** *tchar.h - definitions for generic international text functions * * Copyright (c) 1991-2001, Microsoft Corporation. All rights reserved. * *Purpose: * Definitions for generic international functions, mostly defines * which map string/formatted-io/ctype functions to char, wchar_t, or * MBCS versions. To be used for compatibility between single-byte, * multi-byte and Unicode text models. * * [Public] * *Revision History: * 11-21-91 ETC Created. * 12-13-91 ETC Changed names of formatted i/o functions. * 04-02-92 KRS Renamed file tchar.h to match ISO's wchar.h. * 06-03-92 KRS Add full printf family of functions. Remove _tflag. * 06-16-92 KRS Add strtol/strtod functions. * 07-06-92 KRS Put TCHAR typedef under switches. * 08-18-92 KRS Added _tscanf and _tcstok under _UNICODE switches. * 01-26-93 KRS Rip out _TSTART macro. Added _TEXT() macro. * 03-03-93 KRS Added _TEXT macro and _MBCS support. * 03-23-93 KRS Added model-independent string functions. * 04-06-93 KRS Added MBCS-specific functions. * 04-29-93 CFW Add/correct a few macros. * 05-12-93 KRS Change type TCHAR to _TCHAR if not __STDC__ for ANSI. * Added _tclen, _tccpy, use __inline. * 05-29-93 CFW Add another layer of indirection to _TEXT macros. * 06-03-93 KRS Change definition of _strinc/dec and tccpy. * 06-15-93 KRS Merge 16- and 32-bit versions. * 07-14-93 KRS Make _tcslen, all _tcsnxxx functions use _TCHARS, not * "logical characters". Add _tcsclen, tcsncxxx versions * for "logical char" versions. * 07-28-93 KRS Improve macros to eliminate /W4 warnings. * 08-11-93 CFW Grabbed from Ikura - currently *identical* to Ikura. * 09-28-93 SRW Protect RC compiler from #pragma * 10-13-93 GJF Merged NT and Cuda versions. Deleted old 16-bit * support. Replaced defined(__STDC__) with __STDC__ in * preprocessor statements. * 10-19-93 CFW Add missing mappings. * 10-19-93 CFW Fix _tcscspn bug. * 10-22-93 CFW Missing mappings use new functions. * 11-08-93 CFW DBC istascii, istxdigit, istcntrl mapings fixed. * 11-09-93 SRW Add definition lf wchar_t if needed. * 11-15-93 GJF Propagated change immediately above from NT SDK tree * (crt32). * 11-19-93 CFW Add _TUCHAR and _tmain. * 11-29-93 CFW Add _tenviron. * 12-02-93 CFW Fix __STDC__ inlining checks. * 12-06-93 CFW MB _TCHAR is unsigned char, type safe MB mappings. * 12-07-93 CFW Add _TSCHAR. * 12-07-93 CFW Fix TCHAR def for MB, cleanup. * 12-08-93 CFW Add _fgetts, _fputts to ASCII, fix istlegal for non-MB. * 12-08-93 CFW Remove type-safe noise, add new wide mappings. * 12-17-93 CFW Fix inline parameter types. * 01-13-94 CFW Fix _tccmp for MBCS case. * 01-13-94 CFW Revert _TCHAR to char for MBCS, add type-safe thunks. * 01-17-94 CFW Change _USE_TXCHAR to _MB_MAP_DIRECT. * 01-19-94 CFW _TINT must be unsigned for _MBCS. * 01-31-94 CFW Add _getts. * 02-10-94 CFW Add _tcsftime, add _tWinMain, remove _tgvct. * 03-30-94 CFW Add _istlead, _istleadbyte. * 04-25-94 CFW Remove _tset[v]buf. * 05-23-94 CFW Add _mbs*coll, complete _tcs*cmp and _tcs*coll. * 05-23-94 CFW Add _CRTIMP definition. * 05-25-94 CFW Fix inline _MBCS _tcsnextc bug. * 05-26-94 CFW Make inlining the default for MBCS thunks. * 05-26-94 CFW Make inlining the default for everything. * 06-01-94 CFW *dec should all have const params. * 06-08-94 CFW Mac will ifstrip Unicode. * 08-12-94 GJF Disable warning 4514 instead of 4505. * 09-05-94 CFW Add __targv. * 10-17-94 BWT Fix POSIX definition of open/access. * 01-09-95 GJF Added macros for tfinddatai64_t, tfindfirsti64, * tfindnexti64 and tstati64. * 01-31-94 CFW Remove _CRTIMP from all _tcs funcitons. * 02-09-95 CFW _CRTIMP back in. * 02-14-95 CFW Clean up Mac merge. * 06-27-95 CFW NO_INLINING not supported for 68K. * 10-06-95 SKS Remove #define __far -- this is 32-bit code! * 12-14-95 JWM Add "#pragma once". * 01-19-96 BWT Add __int64 convert routines. * 03-03-97 RDK Return NULL if _strdec and _wcsdec decrements * past beginning of string. * 03-26-97 GJF Cleaned out obsolete support for _NTSDK. * 08-13-97 GJF Fixed mapping of _toi64, mapping of _tcslen, and * added a comment to mappings of _tcscat, _tcscpy and * _tcsdup. * 09-12-97 JWM Old mapping of _tcslen is restored; new mapping broke * the IDE and would probably break other existing apps. * 06-04-98 GJF Added defs for new variations of functions which use * __time64_t instead of time_t. * 05-17-99 PML Remove all Macintosh support. * 10-28-99 GB VS7#5418 fixed _tcsnextc() for handling MBCS. * 11-08-99 PML wctype_t is unsigned short, not wchar_t - it's a set * of bitflags, not a wide char. * 12-01-99 GB added a alias _tpgmptr * 02-11-00 GB Add _tcprintf, _cputts, _puttch, _tcstoi64 and * _tcstoui64. * 04-25-00 GB Add _tcscanf, _cgetts, _gettch, _ungettch, _gettche * 07-20-00 GB typedefed wint_t to unsigned short * 09-08-00 GB Added _snwscanf, _snscanf and their macro _sntscanf * 09-27-00 PML Missing _MBCS mapping for _tcserror (vs7#166192) * 12-10-00 PML Fix _strnextc for chars >= 0x80 (vs7#180102) * ****/ #if _MSC_VER > 1000 /*IFSTRIP=IGN*/ #pragma once #endif #ifndef _INC_TCHAR #define _INC_TCHAR #ifdef _MSC_VER #pragma warning(disable:4514) /* disable unwanted C++ /W4 warning */ /* #pragma warning(default:4514) */ /* use this to reenable, if necessary */ #endif /* _MSC_VER */ #ifdef __cplusplus extern "C" { #endif /* Define __cdecl for non-Microsoft compilers */ #if ( !defined(_MSC_VER) && !defined(__cdecl) ) #define __cdecl #endif /* Define _CRTIMP */ #ifndef _CRTIMP #ifdef CRTDLL #define _CRTIMP __declspec(dllexport) #else /* ndef CRTDLL */ #ifdef _DLL #define _CRTIMP __declspec(dllimport) #else /* ndef _DLL */ #define _CRTIMP #endif /* _DLL */ #endif /* CRTDLL */ #endif /* _CRTIMP */ #define _ftcscat _tcscat #define _ftcschr _tcschr #define _ftcscpy _tcscpy #define _ftcscspn _tcscspn #define _ftcslen _tcslen #define _ftcsncat _tcsncat #define _ftcsncpy _tcsncpy #define _ftcspbrk _tcspbrk #define _ftcsrchr _tcsrchr #define _ftcsspn _tcsspn #define _ftcsstr _tcsstr #define _ftcstok _tcstok #define _ftcsdup _tcsdup #define _ftcsnset _tcsnset #define _ftcsrev _tcsrev #define _ftcsset _tcsset #define _ftcscmp _tcscmp #define _ftcsicmp _tcsicmp #define _ftcsnccmp _tcsnccmp #define _ftcsncmp _tcsncmp #define _ftcsncicmp _tcsncicmp #define _ftcsnicmp _tcsnicmp #define _ftcscoll _tcscoll #define _ftcsicoll _tcsicoll #define _ftcsnccoll _tcsnccoll #define _ftcsncoll _tcsncoll #define _ftcsncicoll _tcsncicoll #define _ftcsnicoll _tcsnicoll /* Redundant "logical-character" mappings */ #define _ftcsclen _tcsclen #define _ftcsnccat _tcsnccat #define _ftcsnccpy _tcsnccpy #define _ftcsncset _tcsncset #define _ftcsdec _tcsdec #define _ftcsinc _tcsinc #define _ftcsnbcnt _tcsnbcnt #define _ftcsnccnt _tcsnccnt #define _ftcsnextc _tcsnextc #define _ftcsninc _tcsninc #define _ftcsspnp _tcsspnp #define _ftcslwr _tcslwr #define _ftcsupr _tcsupr #define _ftclen _tclen #define _ftccpy _tccpy #define _ftccmp _tccmp #ifdef _UNICODE #ifdef __cplusplus } /* ... extern "C" */ #endif /* ++++++++++++++++++++ UNICODE ++++++++++++++++++++ */ #include #ifdef __cplusplus extern "C" { #endif #ifndef _WCTYPE_T_DEFINED typedef unsigned short wint_t; typedef unsigned short wctype_t; #define _WCTYPE_T_DEFINED #endif #ifndef __TCHAR_DEFINED typedef wchar_t _TCHAR; typedef wchar_t _TSCHAR; typedef wchar_t _TUCHAR; typedef wchar_t _TXCHAR; typedef wint_t _TINT; #define __TCHAR_DEFINED #endif #ifndef _TCHAR_DEFINED #if !__STDC__ typedef wchar_t TCHAR; #endif #define _TCHAR_DEFINED #endif #define _TEOF WEOF #define __T(x) L ## x /* Program */ #define _tmain wmain #define _tWinMain wWinMain #define _tenviron _wenviron #define __targv __wargv /* Formatted i/o */ #define _tprintf wprintf #define _tcprintf _cwprintf #define _ftprintf fwprintf #define _stprintf swprintf #define _sctprintf _scwprintf #define _sntprintf _snwprintf #define _vtprintf vwprintf #define _vftprintf vfwprintf #define _vstprintf vswprintf #define _vsctprintf _vscwprintf #define _vsntprintf _vsnwprintf #define _tscanf wscanf #define _tcscanf _cwscanf #define _ftscanf fwscanf #define _stscanf swscanf #define _sntscanf _snwscanf /* Unformatted i/o */ #define _fgettc fgetwc #define _fgettchar _fgetwchar #define _fgetts fgetws #define _fputtc fputwc #define _fputtchar _fputwchar #define _fputts fputws #define _cputts _cputws #define _cgetts _cgetws #define _gettc getwc #define _gettch _getwch #define _gettche _getwche #define _gettchar getwchar #define _getts _getws #define _puttc putwc #define _puttchar putwchar #define _puttch _putwch #define _putts _putws #define _ungettc ungetwc #define _ungettch _ungetwch /* String conversion functions */ #define _tcstod wcstod #define _tcstol wcstol #define _tcstoul wcstoul #define _tcstoi64 _wcstoi64 #define _tcstoui64 _wcstoui64 #define _tstof _wtof #define _tstol _wtol #define _tstoi _wtoi #define _tstoi64 _wtoi64 #define _itot _itow #define _ltot _ltow #define _ultot _ultow #define _ttoi _wtoi #define _ttol _wtol #define _ttoi64 _wtoi64 #define _i64tot _i64tow #define _ui64tot _ui64tow /* String functions */ #define _tcscat wcscat #define _tcschr wcschr #define _tcscpy wcscpy #define _tcscspn wcscspn #define _tcslen wcslen #define _tcsncat wcsncat #define _tcsncpy wcsncpy #define _tcspbrk wcspbrk #define _tcsrchr wcsrchr #define _tcsspn wcsspn #define _tcsstr wcsstr #define _tcstok wcstok #define _tcserror _wcserror #define __tcserror __wcserror #define _tcsdup _wcsdup #define _tcsnset _wcsnset #define _tcsrev _wcsrev #define _tcsset _wcsset #define _tcscmp wcscmp #define _tcsicmp _wcsicmp #define _tcsnccmp wcsncmp #define _tcsncmp wcsncmp #define _tcsncicmp _wcsnicmp #define _tcsnicmp _wcsnicmp #define _tcscoll wcscoll #define _tcsicoll _wcsicoll #define _tcsnccoll _wcsncoll #define _tcsncoll _wcsncoll #define _tcsncicoll _wcsnicoll #define _tcsnicoll _wcsnicoll /* Execute functions */ #define _texecl _wexecl #define _texecle _wexecle #define _texeclp _wexeclp #define _texeclpe _wexeclpe #define _texecv _wexecv #define _texecve _wexecve #define _texecvp _wexecvp #define _texecvpe _wexecvpe #define _tspawnl _wspawnl #define _tspawnle _wspawnle #define _tspawnlp _wspawnlp #define _tspawnlpe _wspawnlpe #define _tspawnv _wspawnv #define _tspawnve _wspawnve #define _tspawnvp _wspawnvp #define _tspawnvp _wspawnvp #define _tspawnvpe _wspawnvpe #define _tsystem _wsystem /* Time functions */ #define _tasctime _wasctime #define _tctime _wctime #define _tctime64 _wctime64 #define _tstrdate _wstrdate #define _tstrtime _wstrtime #define _tutime _wutime #define _tutime64 _wutime64 #define _tcsftime wcsftime /* Directory functions */ #define _tchdir _wchdir #define _tgetcwd _wgetcwd #define _tgetdcwd _wgetdcwd #define _tmkdir _wmkdir #define _trmdir _wrmdir /* Environment/Path functions */ #define _tfullpath _wfullpath #define _tgetenv _wgetenv #define _tmakepath _wmakepath #define _tpgmptr _wpgmptr #define _tputenv _wputenv #define _tsearchenv _wsearchenv #define _tsplitpath _wsplitpath /* Stdio functions */ #define _tfdopen _wfdopen #define _tfsopen _wfsopen #define _tfopen _wfopen #define _tfreopen _wfreopen #define _tperror _wperror #define _tpopen _wpopen #define _ttempnam _wtempnam #define _ttmpnam _wtmpnam /* Io functions */ #define _taccess _waccess #define _tchmod _wchmod #define _tcreat _wcreat #define _tfindfirst _wfindfirst #define _tfindfirst64 _wfindfirst64 #define _tfindfirsti64 _wfindfirsti64 #define _tfindnext _wfindnext #define _tfindnext64 _wfindnext64 #define _tfindnexti64 _wfindnexti64 #define _tmktemp _wmktemp #define _topen _wopen #define _tremove _wremove #define _trename _wrename #define _tsopen _wsopen #define _tunlink _wunlink #define _tfinddata_t _wfinddata_t #define _tfinddata64_t __wfinddata64_t #define _tfinddatai64_t _wfinddatai64_t /* Stat functions */ #define _tstat _wstat #define _tstat64 _wstat64 #define _tstati64 _wstati64 /* Setlocale functions */ #define _tsetlocale _wsetlocale /* Redundant "logical-character" mappings */ #define _tcsclen wcslen #define _tcsnccat wcsncat #define _tcsnccpy wcsncpy #define _tcsncset _wcsnset #define _tcsdec _wcsdec #define _tcsinc _wcsinc #define _tcsnbcnt _wcsncnt #define _tcsnccnt _wcsncnt #define _tcsnextc _wcsnextc #define _tcsninc _wcsninc #define _tcsspnp _wcsspnp #define _tcslwr _wcslwr #define _tcsupr _wcsupr #define _tcsxfrm wcsxfrm #if __STDC__ || defined(_NO_INLINING) #define _tclen(_pc) (1) #define _tccpy(_pc1,_cpc2) ((*(_pc1) = *(_cpc2))) #define _tccmp(_cpc1,_cpc2) ((*(_cpc1))-(*(_cpc2))) #else /* __STDC__ */ __inline size_t __cdecl _tclen(const wchar_t *_cpc) { return (_cpc,1); } __inline void __cdecl _tccpy(wchar_t *_pc1, const wchar_t *_cpc2) { *_pc1 = (wchar_t)*_cpc2; } __inline int __cdecl _tccmp(const wchar_t *_cpc1, const wchar_t *_cpc2) { return (int) ((*_cpc1)-(*_cpc2)); } #endif /* __STDC__ */ /* ctype functions */ #define _istalnum iswalnum #define _istalpha iswalpha #define _istascii iswascii #define _istcntrl iswcntrl #define _istdigit iswdigit #define _istgraph iswgraph #define _istlower iswlower #define _istprint iswprint #define _istpunct iswpunct #define _istspace iswspace #define _istupper iswupper #define _istxdigit iswxdigit #define _totupper towupper #define _totlower towlower #define _istlegal(_c) (1) #define _istlead(_c) (0) #define _istleadbyte(_c) (0) #if __STDC__ || defined(_NO_INLINING) #define _wcsdec(_cpc1, _cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1) #define _wcsinc(_pc) ((_pc)+1) #define _wcsnextc(_cpc) ((unsigned int) *(_cpc)) #define _wcsninc(_pc, _sz) (((_pc)+(_sz))) #define _wcsncnt(_cpc, _sz) ((wcslen(_cpc)>_sz) ? _sz : wcslen(_cpc)) #define _wcsspnp(_cpc1, _cpc2) ((*((_cpc1)+wcsspn(_cpc1,_cpc2))) ? ((_cpc1)+wcsspn(_cpc1,_cpc2)) : NULL) #else /* __STDC__ */ __inline wchar_t * __cdecl _wcsdec(const wchar_t * _cpc1, const wchar_t * _cpc2) { return (wchar_t *)((_cpc1)>=(_cpc2) ? NULL : ((_cpc2)-1)); } __inline wchar_t * __cdecl _wcsinc(const wchar_t * _pc) { return (wchar_t *)(_pc+1); } __inline unsigned int __cdecl _wcsnextc(const wchar_t * _cpc) { return (unsigned int)*_cpc; } __inline wchar_t * __cdecl _wcsninc(const wchar_t * _pc, size_t _sz) { return (wchar_t *)(_pc+_sz); } __inline size_t __cdecl _wcsncnt( const wchar_t * _cpc, size_t _sz) { size_t len; len = wcslen(_cpc); return (len>_sz) ? _sz : len; } __inline wchar_t * __cdecl _wcsspnp( const wchar_t * _cpc1, const wchar_t * _cpc2) { return (*(_cpc1 += wcsspn(_cpc1,_cpc2))!='\0') ? (wchar_t*)_cpc1 : NULL; } #endif /* __STDC__ */ #else /* ndef _UNICODE */ /* ++++++++++++++++++++ SBCS and MBCS ++++++++++++++++++++ */ #ifdef __cplusplus } /* ... extern "C" */ #endif #include #ifdef __cplusplus extern "C" { #endif #define _TEOF EOF #define __T(x) x /* Program */ #define _tmain main #define _tWinMain WinMain #ifdef _POSIX_ #define _tenviron environ #else #define _tenviron _environ #endif #define __targv __argv /* Formatted i/o */ #define _tprintf printf #define _tcprintf _cprintf #define _ftprintf fprintf #define _stprintf sprintf #define _sctprintf _scprintf #define _sntprintf _snprintf #define _vtprintf vprintf #define _vftprintf vfprintf #define _vstprintf vsprintf #define _vsctprintf _vscprintf #define _vsntprintf _vsnprintf #define _tscanf scanf #define _tcscanf _cscanf #define _ftscanf fscanf #define _stscanf sscanf #define _sntscanf _snscanf /* Unformatted i/o */ #define _fgettc fgetc #define _fgettchar _fgetchar #define _fgetts fgets #define _fputtc fputc #define _fputtchar _fputchar #define _fputts fputs #define _cputts _cputs #define _gettc getc #define _gettch _getch #define _gettche _getche #define _gettchar getchar #define _getts gets #define _cgetts _cgets #define _puttc putc #define _puttchar putchar #define _puttch _putch #define _putts puts #define _ungettc ungetc #define _ungettch _ungetch /* String conversion functions */ #define _tcstod strtod #define _tcstol strtol #define _tcstoul strtoul #define _tstof atof #define _tstol atol #define _tstoi atoi #define _tstoi64 _atoi64 #define _itot _itoa #define _ltot _ltoa #define _ultot _ultoa #define _ttoi atoi #define _ttol atol #define _ttoi64 _atoi64 #define _tcstoi64 _strtoi64 #define _tcstoui64 _strtoui64 #define _i64tot _i64toa #define _ui64tot _ui64toa /* String functions */ /* Note that _mbscat, _mbscpy and _mbsdup are functionally equivalent to strcat, strcpy and strdup, respectively. */ #define _tcscat strcat #define _tcscpy strcpy #define _tcsdup _strdup #define _tcslen strlen #define _tcsxfrm strxfrm #define _tcserror strerror #define __tcserror _strerror /* Execute functions */ #define _texecl _execl #define _texecle _execle #define _texeclp _execlp #define _texeclpe _execlpe #define _texecv _execv #define _texecve _execve #define _texecvp _execvp #define _texecvpe _execvpe #define _tspawnl _spawnl #define _tspawnle _spawnle #define _tspawnlp _spawnlp #define _tspawnlpe _spawnlpe #define _tspawnv _spawnv #define _tspawnve _spawnve #define _tspawnvp _spawnvp #define _tspawnvpe _spawnvpe #define _tsystem system /* Time functions */ #define _tasctime asctime #define _tctime ctime #define _tctime64 _ctime64 #define _tstrdate _strdate #define _tstrtime _strtime #define _tutime _utime #define _tutime64 _utime64 #define _tcsftime strftime /* Directory functions */ #define _tchdir _chdir #define _tgetcwd _getcwd #define _tgetdcwd _getdcwd #define _tmkdir _mkdir #define _trmdir _rmdir /* Environment/Path functions */ #define _tfullpath _fullpath #define _tgetenv getenv #define _tmakepath _makepath #define _tpgmptr _pgmptr #define _tputenv _putenv #define _tsearchenv _searchenv #define _tsplitpath _splitpath /* Stdio functions */ #ifdef _POSIX_ #define _tfdopen fdopen #else #define _tfdopen _fdopen #endif #define _tfsopen _fsopen #define _tfopen fopen #define _tfreopen freopen #define _tperror perror #define _tpopen _popen #define _ttempnam _tempnam #define _ttmpnam tmpnam /* Io functions */ #define _tchmod _chmod #define _tcreat _creat #define _tfindfirst _findfirst #define _tfindfirst64 _findfirst64 #define _tfindfirsti64 _findfirsti64 #define _tfindnext _findnext #define _tfindnext64 _findnext64 #define _tfindnexti64 _findnexti64 #define _tmktemp _mktemp #ifdef _POSIX_ #define _topen open #define _taccess access #else #define _topen _open #define _taccess _access #endif #define _tremove remove #define _trename rename #define _tsopen _sopen #define _tunlink _unlink #define _tfinddata_t _finddata_t #define _tfinddata64_t __finddata64_t #define _tfinddatai64_t _finddatai64_t /* ctype functions */ #define _istascii isascii #define _istcntrl iscntrl #define _istxdigit isxdigit /* Stat functions */ #define _tstat _stat #define _tstat64 _stat64 #define _tstati64 _stati64 /* Setlocale functions */ #define _tsetlocale setlocale #ifdef _MBCS /* ++++++++++++++++++++ MBCS ++++++++++++++++++++ */ #ifdef __cplusplus } /* ... extern "C" */ #endif #include #ifdef __cplusplus extern "C" { #endif #ifndef __TCHAR_DEFINED typedef char _TCHAR; typedef signed char _TSCHAR; typedef unsigned char _TUCHAR; typedef unsigned char _TXCHAR; typedef unsigned int _TINT; #define __TCHAR_DEFINED #endif #ifndef _TCHAR_DEFINED #if !__STDC__ typedef char TCHAR; #endif #define _TCHAR_DEFINED #endif #ifdef _MB_MAP_DIRECT /* use mb functions directly - types must match */ /* String functions */ #define _tcschr _mbschr #define _tcscspn _mbscspn #define _tcsncat _mbsnbcat #define _tcsncpy _mbsnbcpy #define _tcspbrk _mbspbrk #define _tcsrchr _mbsrchr #define _tcsspn _mbsspn #define _tcsstr _mbsstr #define _tcstok _mbstok #define _tcsnset _mbsnbset #define _tcsrev _mbsrev #define _tcsset _mbsset #define _tcscmp _mbscmp #define _tcsicmp _mbsicmp #define _tcsnccmp _mbsncmp #define _tcsncmp _mbsnbcmp #define _tcsncicmp _mbsnicmp #define _tcsnicmp _mbsnbicmp #define _tcscoll _mbscoll #define _tcsicoll _mbsicoll #define _tcsnccoll _mbsncoll #define _tcsncoll _mbsnbcoll #define _tcsncicoll _mbsnicoll #define _tcsnicoll _mbsnbicoll /* "logical-character" mappings */ #define _tcsclen _mbslen #define _tcsnccat _mbsncat #define _tcsnccpy _mbsncpy #define _tcsncset _mbsnset /* MBCS-specific mappings */ #define _tcsdec _mbsdec #define _tcsinc _mbsinc #define _tcsnbcnt _mbsnbcnt #define _tcsnccnt _mbsnccnt #define _tcsnextc _mbsnextc #define _tcsninc _mbsninc #define _tcsspnp _mbsspnp #define _tcslwr _mbslwr #define _tcsupr _mbsupr #define _tclen _mbclen #define _tccpy _mbccpy #define _tccmp(_cpuc1,_cpuc2) _tcsnccmp(_cpuc1,_cpuc2,1) #else /* _MB_MAP_DIRECT */ #if __STDC__ || defined(_NO_INLINING) /* use type-safe linked-in function thunks */ /* String functions */ _CRTIMP char * __cdecl _tcschr(const char *, unsigned int); _CRTIMP size_t __cdecl _tcscspn(const char *, const char *); _CRTIMP char * __cdecl _tcsncat(char *, const char *, size_t); _CRTIMP char * __cdecl _tcsncpy(char *, const char *, size_t); _CRTIMP char * __cdecl _tcspbrk(const char *, const char *); _CRTIMP char * __cdecl _tcsrchr(const char *, int); _CRTIMP size_t __cdecl _tcsspn(const char *, const char *); _CRTIMP char * __cdecl _tcsstr(const char *, const char *); _CRTIMP char * __cdecl _tcstok(char *, const char *); _CRTIMP char * __cdecl _tcsnset(char *, unsigned int, size_t); _CRTIMP char * __cdecl _tcsrev(char *); _CRTIMP char * __cdecl _tcsset(char *, unsigned int); _CRTIMP int __cdecl _tcscmp(const char *, const char *); _CRTIMP int __cdecl _tcsicmp(const char *, const char *); _CRTIMP int __cdecl _tcsnccmp(const char *, const char *, size_t); _CRTIMP int __cdecl _tcsncmp(const char *, const char *, size_t); _CRTIMP int __cdecl _tcsncicmp(const char *, const char *, size_t); _CRTIMP int __cdecl _tcsnicmp(const char *, const char *, size_t); _CRTIMP int __cdecl _tcscoll(const char *, const char *); _CRTIMP int __cdecl _tcsicoll(const char *, const char *); _CRTIMP int __cdecl _tcsnccoll(const char *, const char *, size_t); _CRTIMP int __cdecl _tcsncoll(const char *, const char *, size_t); _CRTIMP int __cdecl _tcsncicoll(const char *, const char *, size_t); _CRTIMP int __cdecl _tcsnicoll(const char *, const char *, size_t); /* "logical-character" mappings */ _CRTIMP size_t __cdecl _tcsclen(const char *); _CRTIMP char * __cdecl _tcsnccat(char *, const char *, size_t); _CRTIMP char * __cdecl _tcsnccpy(char *, const char *, size_t); _CRTIMP char * __cdecl _tcsncset(char *, unsigned int, size_t); /* MBCS-specific mappings */ _CRTIMP char * __cdecl _tcsdec(const char *, const char *); _CRTIMP char * __cdecl _tcsinc(const char *); _CRTIMP size_t __cdecl _tcsnbcnt(const char *, size_t); _CRTIMP size_t __cdecl _tcsnccnt(const char *, size_t); _CRTIMP unsigned int __cdecl _tcsnextc (const char *); _CRTIMP char * __cdecl _tcsninc(const char *, size_t); _CRTIMP char * __cdecl _tcsspnp(const char *, const char *); _CRTIMP char * __cdecl _tcslwr(char *); _CRTIMP char * __cdecl _tcsupr(char *); _CRTIMP size_t __cdecl _tclen(const char *); _CRTIMP void __cdecl _tccpy(char *, const char *); #else /* __STDC__ */ /* the default: use type-safe inline function thunks */ #define _PUC unsigned char * #define _CPUC const unsigned char * #define _PC char * #define _CPC const char * #define _UI unsigned int /* String functions */ __inline _PC _tcschr(_CPC _s1,_UI _c) {return (_PC)_mbschr((_CPUC)_s1,_c);} __inline size_t _tcscspn(_CPC _s1,_CPC _s2) {return _mbscspn((_CPUC)_s1,(_CPUC)_s2);} __inline _PC _tcsncat(_PC _s1,_CPC _s2,size_t _n) {return (_PC)_mbsnbcat((_PUC)_s1,(_CPUC)_s2,_n);} __inline _PC _tcsncpy(_PC _s1,_CPC _s2,size_t _n) {return (_PC)_mbsnbcpy((_PUC)_s1,(_CPUC)_s2,_n);} __inline _PC _tcspbrk(_CPC _s1,_CPC _s2) {return (_PC)_mbspbrk((_CPUC)_s1,(_CPUC)_s2);} __inline _PC _tcsrchr(_CPC _s1,_UI _c) {return (_PC)_mbsrchr((_CPUC)_s1,_c);} __inline size_t _tcsspn(_CPC _s1,_CPC _s2) {return _mbsspn((_CPUC)_s1,(_CPUC)_s2);} __inline _PC _tcsstr(_CPC _s1,_CPC _s2) {return (_PC)_mbsstr((_CPUC)_s1,(_CPUC)_s2);} __inline _PC _tcstok(_PC _s1,_CPC _s2) {return (_PC)_mbstok((_PUC)_s1,(_CPUC)_s2);} __inline _PC _tcsnset(_PC _s1,_UI _c,size_t _n) {return (_PC)_mbsnbset((_PUC)_s1,_c,_n);} __inline _PC _tcsrev(_PC _s1) {return (_PC)_mbsrev((_PUC)_s1);} __inline _PC _tcsset(_PC _s1,_UI _c) {return (_PC)_mbsset((_PUC)_s1,_c);} __inline int _tcscmp(_CPC _s1,_CPC _s2) {return _mbscmp((_CPUC)_s1,(_CPUC)_s2);} __inline int _tcsicmp(_CPC _s1,_CPC _s2) {return _mbsicmp((_CPUC)_s1,(_CPUC)_s2);} __inline int _tcsnccmp(_CPC _s1,_CPC _s2,size_t _n) {return _mbsncmp((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcsncmp(_CPC _s1,_CPC _s2,size_t _n) {return _mbsnbcmp((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcsncicmp(_CPC _s1,_CPC _s2,size_t _n) {return _mbsnicmp((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcsnicmp(_CPC _s1,_CPC _s2,size_t _n) {return _mbsnbicmp((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcscoll(_CPC _s1,_CPC _s2) {return _mbscoll((_CPUC)_s1,(_CPUC)_s2);} __inline int _tcsicoll(_CPC _s1,_CPC _s2) {return _mbsicoll((_CPUC)_s1,(_CPUC)_s2);} __inline int _tcsnccoll(_CPC _s1,_CPC _s2,size_t _n) {return _mbsncoll((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcsncoll(_CPC _s1,_CPC _s2,size_t _n) {return _mbsnbcoll((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcsncicoll(_CPC _s1,_CPC _s2,size_t _n) {return _mbsnicoll((_CPUC)_s1,(_CPUC)_s2,_n);} __inline int _tcsnicoll(_CPC _s1,_CPC _s2,size_t _n) {return _mbsnbicoll((_CPUC)_s1,(_CPUC)_s2,_n);} /* "logical-character" mappings */ __inline size_t _tcsclen(_CPC _s1) {return _mbslen((_CPUC)_s1);} __inline _PC _tcsnccat(_PC _s1,_CPC _s2,size_t _n) {return (_PC)_mbsncat((_PUC)_s1,(_CPUC)_s2,_n);} __inline _PC _tcsnccpy(_PC _s1,_CPC _s2,size_t _n) {return (_PC)_mbsncpy((_PUC)_s1,(_CPUC)_s2,_n);} __inline _PC _tcsncset(_PC _s1,_UI _c,size_t _n) {return (_PC)_mbsnset((_PUC)_s1,_c,_n);} /* MBCS-specific mappings */ __inline _PC _tcsdec(_CPC _s1,_CPC _s2) {return (_PC)_mbsdec((_CPUC)_s1,(_CPUC)_s2);} __inline _PC _tcsinc(_CPC _s1) {return (_PC)_mbsinc((_CPUC)_s1);} __inline size_t _tcsnbcnt(_CPC _s1,size_t _n) {return _mbsnbcnt((_CPUC)_s1,_n);} __inline size_t _tcsnccnt(_CPC _s1,size_t _n) {return _mbsnccnt((_CPUC)_s1,_n);} __inline _PC _tcsninc(_CPC _s1,size_t _n) {return (_PC)_mbsninc((_CPUC)_s1,_n);} __inline _PC _tcsspnp(_CPC _s1,_CPC _s2) {return (_PC)_mbsspnp((_CPUC)_s1,(_CPUC)_s2);} __inline _PC _tcslwr(_PC _s1) {return (_PC)_mbslwr((_PUC)_s1);} __inline _PC _tcsupr(_PC _s1) {return (_PC)_mbsupr((_PUC)_s1);} __inline size_t _tclen(_CPC _s1) {return _mbclen((_CPUC)_s1);} __inline void _tccpy(_PC _s1,_CPC _s2) {_mbccpy((_PUC)_s1,(_CPUC)_s2); return;} /* inline helper */ __inline _UI _tcsnextc(_CPC _s1) {_UI _n=0; if (_ismbblead((_UI)*(_PUC)_s1)) {_n=((_UI)*(_PUC)_s1)<<8; _s1++;} _n+=(_UI)*(_PUC)_s1; return(_n);} #endif /* __STDC__ */ #endif /* _MB_MAP_DIRECT */ /* MBCS-specific mappings */ #define _tccmp(_cp1,_cp2) _tcsnccmp(_cp1,_cp2,1) /* ctype functions */ #define _istalnum _ismbcalnum #define _istalpha _ismbcalpha #define _istdigit _ismbcdigit #define _istgraph _ismbcgraph #define _istlegal _ismbclegal #define _istlower _ismbclower #define _istprint _ismbcprint #define _istpunct _ismbcpunct #define _istspace _ismbcspace #define _istupper _ismbcupper #define _totupper _mbctoupper #define _totlower _mbctolower #define _istlead _ismbblead #define _istleadbyte isleadbyte #else /* !_MBCS */ /* ++++++++++++++++++++ SBCS ++++++++++++++++++++ */ #ifndef __TCHAR_DEFINED typedef char _TCHAR; typedef signed char _TSCHAR; typedef unsigned char _TUCHAR; typedef char _TXCHAR; typedef int _TINT; #define __TCHAR_DEFINED #endif #ifndef _TCHAR_DEFINED #if !__STDC__ typedef char TCHAR; #endif #define _TCHAR_DEFINED #endif /* String functions */ #define _tcschr strchr #define _tcscspn strcspn #define _tcsncat strncat #define _tcsncpy strncpy #define _tcspbrk strpbrk #define _tcsrchr strrchr #define _tcsspn strspn #define _tcsstr strstr #define _tcstok strtok #define _tcsnset _strnset #define _tcsrev _strrev #define _tcsset _strset #define _tcscmp strcmp #define _tcsicmp _stricmp #define _tcsnccmp strncmp #define _tcsncmp strncmp #define _tcsncicmp _strnicmp #define _tcsnicmp _strnicmp #define _tcscoll strcoll #define _tcsicoll _stricoll #define _tcsnccoll _strncoll #define _tcsncoll _strncoll #define _tcsncicoll _strnicoll #define _tcsnicoll _strnicoll /* "logical-character" mappings */ #define _tcsclen strlen #define _tcsnccat strncat #define _tcsnccpy strncpy #define _tcsncset _strnset /* MBCS-specific functions */ #define _tcsdec _strdec #define _tcsinc _strinc #define _tcsnbcnt _strncnt #define _tcsnccnt _strncnt #define _tcsnextc _strnextc #define _tcsninc _strninc #define _tcsspnp _strspnp #define _tcslwr _strlwr #define _tcsupr _strupr #define _tcsxfrm strxfrm #define _istlead(_c) (0) #define _istleadbyte(_c) (0) #if __STDC__ || defined(_NO_INLINING) #define _tclen(_pc) (1) #define _tccpy(_pc1,_cpc2) (*(_pc1) = *(_cpc2)) #define _tccmp(_cpc1,_cpc2) (((unsigned char)*(_cpc1))-((unsigned char)*(_cpc2))) #else /* __STDC__ */ __inline size_t __cdecl _tclen(const char *_cpc) { return (_cpc,1); } __inline void __cdecl _tccpy(char *_pc1, const char *_cpc2) { *_pc1 = *_cpc2; } __inline int __cdecl _tccmp(const char *_cpc1, const char *_cpc2) { return (int) (((unsigned char)*_cpc1)-((unsigned char)*_cpc2)); } #endif /* __STDC__ */ /* ctype-functions */ #define _istalnum isalnum #define _istalpha isalpha #define _istdigit isdigit #define _istgraph isgraph #define _istlower islower #define _istprint isprint #define _istpunct ispunct #define _istspace isspace #define _istupper isupper #define _totupper toupper #define _totlower tolower #define _istlegal(_c) (1) /* the following is optional if functional versions are available */ /* define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif #if __STDC__ || defined(_NO_INLINING) #define _strdec(_cpc1, _cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1) #define _strinc(_pc) ((_pc)+1) #define _strnextc(_cpc) ((unsigned int) *(const unsigned char *)(_cpc)) #define _strninc(_pc, _sz) (((_pc)+(_sz))) #define _strncnt(_cpc, _sz) ((strlen(_cpc)>_sz) ? _sz : strlen(_cpc)) #define _strspnp(_cpc1, _cpc2) ((*((_cpc1)+strspn(_cpc1,_cpc2))) ? ((_cpc1)+strspn(_cpc1,_cpc2)) : NULL) #else /* __STDC__ */ __inline char * __cdecl _strdec(const char * _cpc1, const char * _cpc2) { return (char *)((_cpc1)>=(_cpc2) ? NULL : (_cpc2-1)); } __inline char * __cdecl _strinc(const char * _pc) { return (char *)(_pc+1); } __inline unsigned int __cdecl _strnextc(const char * _cpc) { return (unsigned int)*(const unsigned char *)_cpc; } __inline char * __cdecl _strninc(const char * _pc, size_t _sz) { return (char *)(_pc+_sz); } __inline size_t __cdecl _strncnt( const char * _cpc, size_t _sz) { size_t len; len = strlen(_cpc); return (len>_sz) ? _sz : len; } __inline char * __cdecl _strspnp( const char * _cpc1, const char * _cpc2) { return (*(_cpc1 += strspn(_cpc1,_cpc2))!='\0') ? (char*)_cpc1 : NULL; } #endif /* __STDC__ */ #endif /* _MBCS */ #endif /* _UNICODE */ /* Generic text macros to be used with string literals and character constants. Will also allow symbolic constants that resolve to same. */ #define _T(x) __T(x) #define _TEXT(x) __T(x) #ifdef __cplusplus } /* ... extern "C" */ #endif #endif /* _INC_TCHAR */