You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
3.3 KiB
159 lines
3.3 KiB
/*++
|
|
|
|
Copyright (c) 1996-1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dbcsutil.c
|
|
|
|
Abstract:
|
|
|
|
Double byte font/character handling functions (for CJK)
|
|
|
|
Environment:
|
|
|
|
Windows NT printer drivers
|
|
|
|
Revision History:
|
|
|
|
10/8/97 -eigos-
|
|
Removed BIsDBCSLeadByteXXX functions and Added TranslateCharSetInfo and
|
|
GetACP.
|
|
|
|
01/20/97 -eigos-
|
|
Created it.
|
|
|
|
--*/
|
|
|
|
#include "lib.h"
|
|
|
|
//
|
|
//
|
|
// This is a hack implementation (although very close to the real one)
|
|
// so that all the places in the code that need to know what the default
|
|
// charset and/or codepage is don't have duplicate code all over the place.
|
|
// This allows us to have a single binary for Japan/Korea/Chinese.
|
|
//
|
|
// This code copied from \\rastaman\ntwin!src\ntgdi\gre\mapfile.c
|
|
//
|
|
// We should not call GreTranslateCharsetInfo and GreXXXX.
|
|
// So, MyTranslateCharsetInfo is here.
|
|
//
|
|
//
|
|
|
|
#define NCHARSETS 14
|
|
|
|
//
|
|
// Globals
|
|
//
|
|
|
|
struct _CHARSETINFO {
|
|
UINT CharSet;
|
|
UINT CodePage;
|
|
} CharSetInfo[NCHARSETS] = {
|
|
{ ANSI_CHARSET, 1252},
|
|
{ SHIFTJIS_CHARSET, 932},
|
|
{ HANGEUL_CHARSET, 949},
|
|
{ JOHAB_CHARSET, 1361},
|
|
{ GB2312_CHARSET, 936},
|
|
{ CHINESEBIG5_CHARSET, 950},
|
|
{ HEBREW_CHARSET, 1255},
|
|
{ ARABIC_CHARSET, 1256},
|
|
{ GREEK_CHARSET, 1253},
|
|
{ TURKISH_CHARSET, 1254},
|
|
{ BALTIC_CHARSET, 1257},
|
|
{ EASTEUROPE_CHARSET, 1250},
|
|
{ RUSSIAN_CHARSET, 1251},
|
|
{ THAI_CHARSET, 874}
|
|
};
|
|
|
|
//
|
|
// Functions
|
|
// no font signature implemented
|
|
//
|
|
|
|
BOOL PrdTranslateCharsetInfo(
|
|
IN UINT dwSrc,
|
|
OUT LPCHARSETINFO lpCs,
|
|
IN DWORD dwType)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Translate Character set to Codepage and vise versa.
|
|
|
|
Arguments:
|
|
|
|
dwSrc - Character set if dwType is TCI_SRCCHARSET
|
|
Codepage if dwType is TCI_SRCCODEPAGE
|
|
|
|
lpCs - Pointer to the CHARSETINFO
|
|
dwType - a type of translation, TCI_SRCCHARSET and TCI_SRCCODEPAGE are
|
|
currently supported.
|
|
|
|
Return Value:
|
|
|
|
TRUE if successful, FALSE if there is an error
|
|
|
|
--*/
|
|
{
|
|
int i;
|
|
|
|
switch( dwType ) {
|
|
|
|
case TCI_SRCCHARSET:
|
|
|
|
for( i = 0; i < NCHARSETS; i++ )
|
|
if ( CharSetInfo[i].CharSet == dwSrc )
|
|
{
|
|
lpCs->ciACP = CharSetInfo[i].CodePage;
|
|
lpCs->ciCharset = CharSetInfo[i].CharSet;
|
|
//lpCs->fs.fsCsb[0] = fs[i];
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case TCI_SRCCODEPAGE:
|
|
|
|
for( i = 0; i < NCHARSETS; i++ )
|
|
if ( CharSetInfo[i].CodePage == dwSrc )
|
|
{
|
|
lpCs->ciACP = CharSetInfo[i].CodePage;
|
|
lpCs->ciCharset = CharSetInfo[i].CharSet;
|
|
//lpCs->fs.fsCsb[0] = fs[i];
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case TCI_SRCFONTSIG:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
UINT PrdGetACP(VOID)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Get a current CodePage.
|
|
|
|
Arguments:
|
|
|
|
None
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
{
|
|
USHORT OemCodePage, AnsiCodePage;
|
|
|
|
EngGetCurrentCodePage(&OemCodePage, &AnsiCodePage);
|
|
|
|
return (UINT)AnsiCodePage;
|
|
}
|
|
|