|
|
/*++
* * WOW v1.0 * * Copyright (c) 1994, Microsoft Corporation * * WWMMAN.C * WOW32 16-bit WifeMan API support (manually-coded thunks) * * History: * Created 17-May-1994 by hiroh * Rewrote 12-May-1995 by hideyukn * --*/ #include "precomp.h"
#pragma hdrstop
#ifdef FE_SB
#include "wowwife.h"
#include "wwmman.h"
MODNAME(wwmman.c);
STATIC LPSTR SkipSpaces(LPSTR lpch) { if (lpch == NULL) return(NULL);
for ( ; ; lpch++ ) { switch (*lpch) { case ' ': case '\t': case '\r': case '\n': break;
case '\0': // fall through...
default: return(lpch); } } }
#define EUDC_RANGE_KEY \
(LPSTR) "SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage\\EUDCCodeRange"
ULONG FASTCALL WWM32MiscGetEUDCLeadByteRange(PVDMFRAME pFrame) { unsigned short usEUDCRange = 0; unsigned char chEUDCStart = 0, chEUDCEnd = 0;
HKEY hKey; ULONG ulRet; CHAR achACP[10]; CHAR achRange[256];
DWORD dwType; DWORD dwRangeSize = sizeof(achRange);
UNREFERENCED_PARAMETER(pFrame);
//
// Get EUDC Range
//
// In Win32, We support multiple EUDC Range, but for
// Win16, we just return only first EUDC range to
// keep backward compatibility...
//
ulRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, EUDC_RANGE_KEY, (DWORD) 0, KEY_QUERY_VALUE, &hKey); if (ulRet != ERROR_SUCCESS) { #if DBG
LOGDEBUG(0,("WOW32:RegOpenKeyExA(EUDC_RANGE_KEY) fail\n")); #endif
return 0; }
//
// Convert ACP to string..
//
RtlIntegerToChar(GetACP(),10,sizeof(achACP),achACP);
ulRet = RegQueryValueExA(hKey, achACP, (LPDWORD)NULL, (LPDWORD)&dwType, (LPBYTE)achRange, &dwRangeSize);
if (ulRet != ERROR_SUCCESS) { #if DBG
LOGDEBUG(0,("WOW32:RegQueryValueExA(CP_ACP) fail\n")); #endif
RegCloseKey(hKey); return 0; }
RegCloseKey(hKey);
//
// Perse the data.
//
{ LPSTR pszData = achRange; USHORT usStart, usEnd;
pszData = SkipSpaces(pszData);
if ((*pszData) == '\0') { #if DBG
LOGDEBUG(0,("WOW32:Parse First Data fail\n")); #endif
return 0; }
usStart = (USHORT)strtoul(pszData,&pszData,16);
if ((pszData = WOW32_strchr(pszData,'-')) == NULL) { #if DBG
LOGDEBUG(0,("WOW32:Find End Data fail\n")); #endif
return 0; }
//
// Skip '-'..
//
pszData++;
pszData = SkipSpaces(pszData);
if ((*pszData) == '\0') { #if DBG
LOGDEBUG(0,("WOW32:Parse End Data fail\n")); #endif
return 0; }
usEnd = (USHORT)strtoul(pszData,&pszData,16);
//
// Confirm the data sort order is correct
//
if (usStart > usEnd) { #if DBG
LOGDEBUG(0,("WOW32:Invalid EUDC Range Order\n")); #endif
return 0; }
//
// Get EUDC Start, End LeadByte...
//
chEUDCStart = HIBYTE(usStart); chEUDCEnd = HIBYTE(usEnd); }
//
// Setup return value.
//
usEUDCRange = ((unsigned short)chEUDCEnd << 8) | ((unsigned short)chEUDCStart );
#if DBG
LOGDEBUG(10,("WOW32:EUDC Range = %x\n",usEUDCRange)); #endif
RETURN(usEUDCRange); } #endif // FE_SB
|