diff options
Diffstat (limited to '')
-rw-r--r-- | private/os2/os2ses/nls.c | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/private/os2/os2ses/nls.c b/private/os2/os2ses/nls.c new file mode 100644 index 000000000..f3a4d3ef4 --- /dev/null +++ b/private/os2/os2ses/nls.c @@ -0,0 +1,349 @@ +/*++ + +Copyright (c) 1989 Microsoft Corporation + +Module Name: + + nls.c + +Abstract: + + This module contains the support for NLS + +Author: + + Michael Jarus (mjarus) 28-Jul-1992 + +Environment: + + User Mode Only + +Revision History: + +--*/ + +#include <stdio.h> +#include <string.h> +#define WIN32_ONLY +#include "os2ses.h" +#include "os2nls.h" +#include "trans.h" +#include "os2win.h" + + + +ULONG +NlsCountryToLoacle( + IN ULONG NlsCountryCode, + IN LCID *NlsLocaleID + ); + +#if DBG +BYTE NLSInitStr[] = "NLSInit"; +#endif + +DWORD +NLSInit() +{ + ULONG i, Win32LCID, CurrentVioCP, CurrentKbdCP; + USHORT LocaleLang; + + /* + * Get Current Console CP + */ + + CurrentVioCP = (ULONG)Or2WinGetConsoleOutputCP( + #if DBG + NLSInitStr + #endif + ); + + CurrentKbdCP = (ULONG)Or2WinGetConsoleCP( + #if DBG + NLSInitStr + #endif + ); + +#ifdef DBCS +// MSKK Jun.16.1993 V-AkihiS + SesGrp->DosCP = (ULONG)Or2WinGetConsoleCP( + #if DBG + NLSInitStr + #endif + ); +#endif + + Win32LCID = (ULONG)Or2WinGetThreadLocale( + #if DBG + NLSInitStr + #endif + ); + + if ((Win32LCID != SesGrp->Win32LCID) && + (SesGrp->Os2srvUseRegisterInfo || + (Win32LCID != SesGrp->Os2ssLCID))) + { + /* + * Inherit NLS definitions from Win32 + * We get here if the LOCALE inherit by Os2srv is different + * from the LOCALE inherit by the os2.exe + * We handle only COUNTRY and LOCALE parms. (not CP, which are equal) + */ + + //SesGrp->Win32OEMCP = GetOEMCP(); + //SesGrp->Win32ACP = GetACP(); + SesGrp->Win32LCID = Win32LCID; + SesGrp->Win32LANGID = (ULONG)Or2WinGetUserDefaultLangID( + #if DBG + NLSInitStr + #endif + ); + + Or2NlsGetCountryFromLocale((LCID)SesGrp->Win32LCID, &SesGrp->Win32CountryCode); + + //SesGrp->PrimaryCP = SesGrp->Win32OEMCP; + SesGrp->CountryCode = SesGrp->Win32CountryCode; + SesGrp->Os2ssLCID = SesGrp->Win32LCID; +#ifdef JAPAN +// MSKK Nov.04.1992 V-AkihiS + SesGrp->LanguageID = LANG_JAPANESE; +#else + SesGrp->LanguageID = LANG_ENGLISH; +#endif + + LocaleLang = PRIMARYLANGID(LANGIDFROMLCID(Win32LCID)); + for ( i = 0 ; Or2NlsLangIdTable[i] ; i++ ) + { + if (Or2NlsLangIdTable[i] == LocaleLang) + { + SesGrp->LanguageID = Or2NlsLangIdTable[i]; + break; + } + } + + /* + * Get CtryInfo, DBCSEv, CollateTable, CaseMapTable for the default + * (We don't have to update CP-depent parms since CP,s are equal) + */ + + Or2NlsGetCtryInfo( + (LCID)SesGrp->Os2ssLCID, + (UINT)SesGrp->PrimaryCP, + (PCOUNTRYINFO)&SesGrp->CountryInfo + ); + +#if DBG + /* + * Dump specail NLS info to the debugger + */ + + IF_OD2_DEBUG( NLS ) + { + KdPrint(("OS2SES(Os2-NLS): ")); + } +#endif + + //SesGrp->VioCP = SesGrp->KbdCP = SesGrp->DosCP = SesGrp->PrimaryCP; + } else + { + if (Win32LCID != SesGrp->Win32LCID) + { + Or2WinSetThreadLocale( + #if DBG + NLSInitStr, + #endif + (LCID)SesGrp->Win32LCID + ); + } +#if DBG + /* + * Dump specail NLS info to the debugger + */ + + IF_OD2_DEBUG( NLS ) + { + KdPrint(("OS2SES(Os2-NLS): using OS2SRV NLS definitions\n ")); + } +#endif + } + +#if DBG + /* + * Dump all NLS info to the debugger + */ + + IF_OD2_DEBUG( NLS ) + { + KdPrint(("CP %lu (%lu,%lu), Country %lu, LangID %lx ,LCID %lx\n", + SesGrp->DosCP, SesGrp->PrimaryCP, SesGrp->SecondaryCP, + SesGrp->CountryCode, SesGrp->LanguageID, SesGrp->Os2ssLCID)); + + KdPrint(("OS2SES(Win32-NLS): OEMCP %lu, ACP %lu, Country %lu, LangID %lx\n", + SesGrp->Win32OEMCP, SesGrp->Win32ACP, SesGrp->Win32CountryCode, + SesGrp->Win32LANGID)); + + KdPrint((" LCID %lx, ConCP %lu, ConOutCP %lu\n", + SesGrp->Win32LCID, CurrentKbdCP, CurrentVioCP)); + } +#endif + + /* + * Complete the NLS initialization for Vio and KBD + */ + + KbdInitForNLS(CurrentKbdCP); + VioInitForNLS(CurrentVioCP); + + return (NO_ERROR); +} + + +DWORD +Ow2NlsGetCtryInfo( + IN ULONG NlsCodePage, + IN ULONG NlsCountryCode, + OUT PVOID NlsCountryInfo + ) +{ + ULONG Rc; + LCID NlsLocaleID; + + Rc = NlsCountryToLoacle( + NlsCountryCode, + &NlsLocaleID + ); + + if (Rc) + { +#if DBG + IF_OD2_DEBUG2( NLS, OS2_EXE ) + KdPrint(("OS2SES(NlsRequest-GetCtryInfo): cannot find LocaleID Rc %lu\n", + Rc)); +#endif + return(Rc); + } + + return (Or2NlsGetCtryInfo( + NlsLocaleID, + (UINT)NlsCodePage, + (PCOUNTRYINFO)NlsCountryInfo + )); +} + + +DWORD +Ow2NlsGetCollateTable( + IN ULONG NlsCodePage, + IN ULONG NlsCountryCode, + OUT PVOID NlsColateTable + ) +{ + DWORD Rc; + LCID NlsLocaleID; + + Rc = NlsCountryToLoacle( + NlsCountryCode, + &NlsLocaleID + ); + + if (Rc) + { +#if DBG + IF_OD2_DEBUG2( NLS, OS2_EXE ) + KdPrint(("OS2SES(NlsRequest-GetCtryInfo): cannot find LocaleID Rc %lu\n", + Rc)); +#endif + return(Rc); + } + + Rc = Or2NlsGetMapTable( + NlsLocaleID, + (UINT)NlsCodePage, + LCMAP_SORTKEY, + (PUCHAR)NlsColateTable + ); + if (Rc) + { + Rc = GetLastError(); +#if DBG + IF_OD2_DEBUG2( NLS, OS2_EXE ) + KdPrint(("OS2SES(NlsRequest-GetColateTable): Rc %lu\n", + Rc)); +#endif + } + return(Rc); +} + + +DWORD +Ow2NlsGetCaseMapTable( + IN ULONG NlsCodePage, + IN ULONG NlsCountryCode, + OUT PVOID NlsColateTable + ) +{ + DWORD Rc; + LCID NlsLocaleID; + + Rc = NlsCountryToLoacle( + NlsCountryCode, + &NlsLocaleID + ); + + if (Rc) + { +#if DBG + IF_OD2_DEBUG2( NLS, OS2_EXE ) + KdPrint(("OS2SES(NlsRequest-GetCtryInfo): cannot find LocaleID Rc %lu\n", + Rc)); +#endif + return(Rc); + } + + Rc = Or2NlsGetMapTable( + NlsLocaleID, + (UINT)NlsCodePage, + LCMAP_UPPERCASE, + (PUCHAR)NlsColateTable + ); + if (Rc) + { + Rc = GetLastError(); +#if DBG + IF_OD2_DEBUG2( NLS, OS2_EXE ) + KdPrint(("OS2SES(NlsRequest-GetCaseMap): Rc %lu\n", + Rc)); +#endif + } + return(Rc); +} + + +DWORD +Ow2NlsGetDBCSEn( + IN ULONG NlsCodePage, + OUT PVOID NlsDBCSVec + ) +{ + POD2_DBCS_VECTOR_ENTRY DBCSVec = (POD2_DBCS_VECTOR_ENTRY) NlsDBCSVec; + + return(Or2NlsGetCPInfo( + (UINT)NlsCodePage, + (POD2_DBCS_VECTOR_ENTRY) NlsDBCSVec + )); +} + + +ULONG +NlsCountryToLoacle( + IN ULONG NlsCountryCode, + IN LCID *NlsLocaleID + ) +{ + // BUGBUG: find LocalId from CountryCode + + *NlsLocaleID = (LCID) -1; + + return (ERROR_NLS_NO_CTRY_CODE); +} + |