windows-nt/Source/XPSP1/NT/com/ole32/stg/ref/h/tchar.h
2020-09-26 16:20:57 +08:00

179 lines
4.9 KiB
C

/*
*---------------------------------------------------------------------------
*
* Microsoft Windows
* Copyright (C) Microsoft Corporation, 1992 - 1996.
*
* File: tchar.h
*
* Contents: Mapping between wide characters and normal character types
* for functions used in the reference implementation
*----------------------------------------------------------------------------
*/
#ifndef __TCHAR_DEFINED
#define __TCHAR_DEFINED
#include "ref.hxx"
#include "wchar.h"
#ifdef _UNICODE
typedef WCHAR TCHAR;
#define OLESTR(str) L##str
#else /* _UNICODE */
typedef char TCHAR;
#define OLESTR(str) str
#endif /* _UNICODE */
typedef TCHAR * LPTSTR;
typedef TCHAR OLECHAR, *LPOLECHAR, *LPOLESTR;
/* Define some macros to handle declaration of strings with literals */
/* Since we stray from the default 4 byte wchar_t in UNIX, we have to
to something different than the usual L"ssd" literals */
/* #define DECLARE_OLESTR(ocsName, len, contents) \ */
/* LPOLESTR ocsName[len]=OLESTR(contents) */
/* #else */
#ifdef _UNICODE
#define DECLARE_OLESTR(ocsName, pchContents) \
OLECHAR ocsName[sizeof(pchContents)+1]; \
_tbstowcs(ocsName, pchContents, sizeof(pchContents)+1)
#define INIT_OLESTR(ocsName, pchContents) \
_tbstowcs(ocsName, pchContents, sizeof(pchContents)+1)
#define DECLARE_CONST_OLESTR(cocsName, pchContents) \
OLECHAR temp##cocsName[sizeof(pchContents)+1]; \
_tbstowcs(temp##cocsName, pchContents, sizeof(pchContents)+1); \
const LPOLESTR cocsName = temp##cocsName
#else /* non _UNICODE */
#define DECLARE_OLESTR(ocsName, pchContents) \
OLECHAR ocsName[]=pchContents
#define INIT_OLESTR(ocsName, pchContents) \
strcpy(ocsName, pchContents);
#define DECLARE_CONST_OLESTR(ocsName, pchContents) \
const LPOLESTR ocsName=pchContents
#endif /* _UNICODE */
#define DECLARE_WIDESTR(wcsName, pchContents) \
WCHAR wcsName[sizeof(pchContents)+1]; \
_tbstowcs(wcsName, pchContents, sizeof(pchContents)+1)
#ifndef _UNICODE /*---- non unicode ------ */
#define _tcscpy strcpy
#define _tcscmp strcmp
#define _tcslen strlen
#define _tcsnicmp _strnicmp
#define _tcscat strcat
#define _itot _itoa
#define _T(str) str
#ifdef _WIN32
/* Io functions */
#define _tfopen fopen
#define _tunlink _unlink
#define _tfullpath _fullpath
#define _tstat _stat
#else /* _WIN32 */
#define _tfopen fopen
#define _tunlink unlink /* T-types mapping */
#define _unlink unlink /* non-win32 mapping */
#define _stat stat
#define _tstat stat
#define _strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
/* note that we assume there is enough space in this case */
#define _tfullpath(longname, shortname, len) realpath(shortname, longname)
#define _fullpath(longname, shortname, len) realpath(shortname, longname)
#endif /* _MSC_VER */
/* copying wchar/char and TCHAR */
#ifdef _MSC_VER
#define WTOT(T, W, count) wcstombs(T, W, count)
#define TTOW(T, W, count) mbstowcs(W, T, count)
#else /* _MSC_VER */
#define WTOT(T, W, count) wcstosbs(T, W, count)
#define TTOW(T, W, count) sbstowcs(W, T, count)
#endif /* _MSC_VER */
#define STOT(S, T, count) strcpy(T, S)
#define TTOS(T, S, count) strcpy(S, T)
#else /* _UNICODE ---- unicode ------ */
/* NOTE: unicode APIs on non win32 systems are not tested or implemented */
#define _tcscpy wcscpy
#define _tcscmp wcscmp
#define _tcslen wcslen
#define _tcscat wcscat
#define _tcsnicmp wcsnicmp
#define _itot _itow
#define _T(str) L##str
/* Io functions */
#define _tfopen _wfopen
#define _tunlink _wunlink
#define _tfullpath _wfullpath
#define _tstat _wstat
#ifdef _UNIX /* map win32 I/O API's to other O.S. */
#define _unlink unlink
#define _fullpath(longname, shortname, len) realpath(shortname, longname)
#define _stat stat
#define _strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
#endif
/* converting between wchar and TCHAR */
#define WTOT(T, W, count) wcsncpy(T, W, count)
#define TTOW(T, W, count) wcsncpy(W, T, count)
/* converting between a char and TCHAR */
#define WTOT(T, W, count) wcsncpy(T, W, count)
#define TTOW(T, W, count) wcsncpy(W, T, count)
#define STOT(S, T, count) _tbstowcs(T, S, count)
#define TTOS(T, S, count) _wcstotbs(S, T, count)
#endif /* #ifndef _UNICODE, #else ... */
#ifndef _WIN32 /* others */
#define _tbstowcs sbstowcs
#define _wcstotbs wcstosbs
#else /* _WIN32 */
#define _tbstowcs mbstowcs
#define _wcstotbs wcstombs
#endif /* _WIN32 */
#ifndef _MSC_VER
#include <assert.h>
inline void _itoa(int v, char* string, int radix)
{
if (radix!=10) assert(FALSE); /* only handle base 10 */
sprintf(string, "%d", v);
}
#endif /* _MSC_VER */
#endif /* #ifndef __TCHAR_DEFINED */