CODEPAGE.CXX

//+--------------------------------------------------------------------------- 
//
// Copyright (C) Microsoft Corporation, 1991 - 1996
//
// File: codepage.hxx
//
// Contents: Locale to codepage
//
//-----------------------------------------------------------------------------

#include <pch.cxx>
#pragma hdrstop

#include <osv.hxx>
#include <codepage.hxx>

//+---------------------------------------------------------------------------
//
// Function: LocaleToCodepage
//
// Purpose: Returns a codepage from a locale
//
// Arguments: [lcid] -- Locale
//
// History: 08-Jul-96 SitaramR Created
//
//----------------------------------------------------------------------------

ULONG LocaleToCodepage( LCID lcid )
{
const BUFFER_LENGTH = 10;
WCHAR wcsCodePage[BUFFER_LENGTH];
int cwc;

if ( GetOSVersion() == VER_PLATFORM_WIN32_NT )
{
cwc = GetLocaleInfoW( lcid, LOCALE_IDEFAULTANSICODEPAGE, wcsCodePage, BUFFER_LENGTH );
}
else // win95
{
char *pszCodePage = new char[BUFFER_LENGTH*2];

if ( pszCodePage == NULL )
{
cwc = 0;
SetLastErrorEx( ERROR_INVALID_PARAMETER, SLE_ERROR );
}
else
{
cwc = GetLocaleInfoA( lcid,
LOCALE_IDEFAULTANSICODEPAGE,
pszCodePage,
BUFFER_LENGTH );

if ( cwc && mbstowcs( wcsCodePage, pszCodePage, cwc ) == -1 )
{
cwc = 0;
SetLastErrorEx( ERROR_INVALID_PARAMETER, SLE_ERROR );
}

delete [] pszCodePage;
pszCodePage = NULL;
}
}

//
// If error, return Ansi code page
//
if ( cwc == 0 )
{
htmlDebugOut(( DEB_ERROR, "GetLocaleInfoW for lcid %d returned %d\n", lcid, GetLastError() ));

return CP_ACP;
}

return wcstoul( wcsCodePage, 0 , 10 );
}