|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
unicode.h
Abstract:
Declares the interfaces for unicode/ansi conversion.
When specific conversion is needed, use:
unicode = ConvertAtoW (ansi) / FreeConvertedStr (unicode) ansi = ConvertWtoA (unicode) / FreeConvertedStr (ansi)
KnownSizeAtoW (unicode,ansi) KnownSizeWtoA (ansi,unicode)
When TCHAR conversion is needed, use:
ansi = CreateDbcs (tchar) / DestroyDbcs (ansi) unicode = CreateUnicode (tchar) / DestroyUnicode (unicode) tchar = ConvertAtoT (ansi) / FreeAtoT (tchar) tchar = ConvertWtoT (ansi) / FreeWtoT (tchar)
Author:
Jim Schmidt (jimschm) 02-Sep-1997
Revision History:
jimschm 15-Feb-1999 Eliminated AnsiFromUnicode and UnicodeFromAnsi calinn 07-Jul-1998 SetGlobalPage/GetGlobalPage mikeco 03-Nov-1997 AnsiFromUnicode/UnicodeFromAnsi
--*/
#pragma once
extern WORD g_GlobalCodePage;
#define OurGetACP() (g_GlobalCodePage)
VOID SetGlobalCodePage ( IN WORD CodePage, IN LCID Locale );
VOID GetGlobalCodePage ( OUT PWORD CodePage, OPTIONAL OUT PLCID Locale OPTIONAL );
#define INVALID_CHAR_COUNT 0xffffffff
//
// Explicit conversions, pool-based, unlimited size
//
PCSTR RealUnicodeToDbcsN ( IN POOLHANDLE Pool, OPTIONAL IN PCWSTR StrIn, IN DWORD Chars );
PCWSTR RealDbcsToUnicodeN ( IN POOLHANDLE Pool, OPTIONAL IN PCSTR StrIn, IN DWORD Chars );
#define UnicodeToDbcsN(p,s,c) SETTRACKCOMMENT(PCSTR,"UnicodeToDbcsN",__FILE__,__LINE__)\
RealUnicodeToDbcsN(p,s,c)\ CLRTRACKCOMMENT
#define DbcsToUnicodeN(p,s,c) SETTRACKCOMMENT(PCWSTR,"DbcsToUnicodeN",__FILE__,__LINE__)\
RealDbcsToUnicodeN(p,s,c)\ CLRTRACKCOMMENT
#define UnicodeToDbcs(pool,str) UnicodeToDbcsN(pool,str,wcslen(str))
#define DbcsToUnicode(pool,str) DbcsToUnicodeN(pool,str,CharCountA(str))
#define ConvertWtoA(unicode_str) UnicodeToDbcsN(NULL,unicode_str,wcslen(unicode_str))
#define ConvertAtoW(dbcs_str) DbcsToUnicodeN(NULL,dbcs_str,CharCountA(dbcs_str))
VOID FreeConvertedPoolStr ( IN POOLHANDLE Pool, OPTIONAL IN PVOID StrIn );
#define FreeConvertedStr(str) FreeConvertedPoolStr(NULL,(PVOID)(str))
//
// In-place explicit conversions, caller handles buffer sizing
//
PSTR KnownSizeUnicodeToDbcsN ( OUT PSTR StrOut, IN PCWSTR StrIn, IN DWORD CharCount );
PWSTR KnownSizeDbcsToUnicodeN ( OUT PWSTR StrOut, IN PCSTR StrIn, IN DWORD CharCount );
#define KnownSizeUnicodeToDbcs(out,in) KnownSizeUnicodeToDbcsN(out,in,INVALID_CHAR_COUNT)
#define KnownSizeDbcsToUnicode(out,in) KnownSizeDbcsToUnicodeN(out,in,INVALID_CHAR_COUNT)
#define KnownSizeWtoA KnownSizeUnicodeToDbcs
#define KnownSizeAtoW KnownSizeDbcsToUnicode
PSTR DirectUnicodeToDbcsN ( OUT PSTR StrOut, IN PCWSTR StrIn, IN DWORD Bytes );
PWSTR DirectDbcsToUnicodeN ( OUT PWSTR StrOut, IN PCSTR StrIn, IN DWORD Bytes );
#define DirectUnicodeToDbcs(out,in) DirectUnicodeToDbcsN(out,in,INVALID_CHAR_COUNT)
#define DirectDbcsToUnicode(out,in) DirectDbcsToUnicodeN(out,in,INVALID_CHAR_COUNT)
#define DirectWtoA DirectUnicodeToDbcs
#define DirectAtoW DirectDbcsToUnicode
//
// TCHAR conversions -- do not call A & W versions directly
//
#define CreateDbcsW(unicode_str) ConvertWtoA(unicode_str)
#define DestroyDbcsW(unicode_str) FreeConvertedStr(unicode_str)
#define CreateUnicodeW(unicode_str) (unicode_str)
#define DestroyUnicodeW(unicode_str)
#define CreateDbcsA(dbcs_str) (dbcs_str)
#define DestroyDbcsA(dbcs_str)
#define CreateUnicodeA(dbcs_str) ConvertAtoW(dbcs_str)
#define DestroyUnicodeA(dbcs_str) FreeConvertedStr(dbcs_str)
#ifdef UNICODE
#define CreateDbcs CreateDbcsW
#define CreateUnicode CreateUnicodeW
#define DestroyDbcs DestroyDbcsW
#define DestroyUnicode DestroyUnicodeW
#define ConvertAtoT ConvertAtoW
#define ConvertWtoT(x) (x)
#define FreeAtoT FreeConvertedStr
#define FreeWtoT(x)
#define KnownSizeAtoT KnownSizeAtoW
#define KnownSizeWtoT(out,in) (in)
#define DirectAtoT DirectAtoW
#define DirectWtoT(out,in) (in)
#else
#define CreateDbcs CreateDbcsA
#define CreateUnicode CreateUnicodeA
#define DestroyDbcs DestroyDbcsA
#define DestroyUnicode DestroyUnicodeA
#define ConvertAtoT(x) (x)
#define ConvertWtoT ConvertWtoA
#define FreeAtoT(x)
#define FreeWtoT FreeConvertedStr
#define KnownSizeAtoT(out,in) (in)
#define KnownSizeWtoT KnownSizeWtoA
#define DirectAtoT(out,in) (in)
#define DirectWtoT DirectWtoA
#endif
|