|
|
// PageIni.cpp : Implementation of CPageIni
#include "stdafx.h"
#if FALSE
//#include "PageInternational.h"
//#include <windowsx.h>
/*
* Convert an object (X) to a count of bytes (cb). */ #define cbX(X) sizeof(X)
/*
* Convert an array name (A) to a generic count (c). */ #define cA(a) (cbX(a)/cbX(a[0]))
static const TCHAR REGSTR_VAL_DOSVMCP[] = TEXT("DOSCP"); static const TCHAR REGSTR_VAL_DOSCC[] = TEXT("DOSCC"); static const TCHAR REGSTR_VAL_DOSCFN[] = TEXT("DOSCFN"); static const TCHAR REGSTR_VAL_DOSCPFN[] = TEXT("DOSCPFN"); static const TCHAR REGSTR_VAL_DOSKFN[] = TEXT("DOSKFN"); static const TCHAR REGSTR_VAL_DOSKT[] = TEXT("DOSKT"); static const TCHAR REGSTR_VAL_DOSKL[] = TEXT("DOSKL"); static const TCHAR REGSTR_VAL_DOSLID[] = TEXT("DOSLID");
static const TCHAR c_CodepageKey[] = TEXT("System\\CurrentControlSet\\Control\\Nls\\Codepage");
// Language ID defines
#define NO_LANG_ID TEXT(" ")
#define LANG_ID_BE TEXT("be")
#define LANG_ID_BG TEXT("bg")
#define LANG_ID_BL TEXT("bl")
#define LANG_ID_BR TEXT("br")
#define LANG_ID_CA TEXT("ca")
#define LANG_ID_CF TEXT("cf")
#define LANG_ID_CZ TEXT("cz")
#define LANG_ID_DK TEXT("dk")
#define LANG_ID_ET TEXT("et")
#define LANG_ID_FR TEXT("fr")
#define LANG_ID_GK TEXT("gk")
#define LANG_ID_GR TEXT("gr")
#define LANG_ID_HE TEXT("he")
#define LANG_ID_HU TEXT("hu")
#define LANG_ID_IS TEXT("is")
#define LANG_ID_IT TEXT("it")
#define LANG_ID_LA TEXT("la")
#define LANG_ID_NL TEXT("nl")
#define LANG_ID_NO TEXT("no")
#define LANG_ID_PL TEXT("pl")
#define LANG_ID_PO TEXT("po")
#define LANG_ID_RO TEXT("ro")
#define LANG_ID_RU TEXT("ru")
#define LANG_ID_SF TEXT("sf")
#define LANG_ID_SG TEXT("sg")
#define LANG_ID_SL TEXT("sl")
#define LANG_ID_SP TEXT("sp")
#define LANG_ID_SU TEXT("su")
#define LANG_ID_SV TEXT("sv")
#define LANG_ID_TR TEXT("tr")
#define LANG_ID_UK TEXT("uk")
#define LANG_ID_UR TEXT("ur")
#define LANG_ID_YC TEXT("yc")
#define LANG_ID_YU TEXT("yu")
//----------------------------------------------------------------------
// International settings for all code pages
INTL_INFO cp_874[] = { {IDS_THAI, 0, 0, 0, 0, NO_LANG_ID, 0, 0, 0}, };
INTL_INFO cp_932[] = { {IDS_JAPANESE_101, 932, 81, 101, 0, NO_LANG_ID, IDS_COUNTRY_SYS, 0, IDS_JKEYBRD_SYS}, {IDS_JAPANESE_106, 932, 81, 106, 0, NO_LANG_ID, IDS_COUNTRY_SYS, 0, IDS_JKEYBRD_SYS}, };
INTL_INFO cp_936[] = { {IDS_CHINA, 936, 86, 0, 0, NO_LANG_ID, 0, 0, 0}, };
INTL_INFO cp_949[] = { {IDS_KOREAN, 949, 82, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, 0, 0}, };
INTL_INFO cp_950[] = { {IDS_TAIWAN, 950, 88, 0, 0, NO_LANG_ID, 0, 0, 0}, };
INTL_INFO cp_1250[] = { {IDS_ALBANIAN, 852, 355, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_CROATIAN, 852, 385, 0, 0, LANG_ID_YU, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, {IDS_CZECH, 852, 42, 0, 0, LANG_ID_CZ, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, {IDS_HUNGARIAN, 852, 36, 0, 0, LANG_ID_HU, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, {IDS_POLISH, 852, 48, 0, 0, LANG_ID_PL, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, {IDS_POLISH_Prgmers, 852, 48, 0, 0, LANG_ID_PL, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD4_SYS}, {IDS_ROMANIAN, 852, 40, 0, 0, LANG_ID_RO, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, {IDS_SLOVAK, 852, 421, 0, 0, LANG_ID_SL, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, {IDS_SLOVENIAN, 852, 386, 0, 0, LANG_ID_YU, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBRD2_SYS}, };
INTL_INFO cp_1251[] = { {IDS_BELARUSSIAN, 866, 375, 0, 0, LANG_ID_BL, IDS_COUNTRY_SYS, IDS_EGA3_CPI, IDS_KEYBRD3_SYS}, {IDS_BULGARIAN, 855, 359, 0, 0, LANG_ID_BG, IDS_COUNTRY_SYS, IDS_EGA3_CPI, IDS_KEYBRD2_SYS}, {IDS_RUSSIAN, 866, 7, 0, 0, LANG_ID_RU, IDS_COUNTRY_SYS, IDS_EGA3_CPI, IDS_KEYBRD3_SYS}, {IDS_SERBIAN, 855, 381, 0, 0, LANG_ID_YC, IDS_COUNTRY_SYS, IDS_EGA3_CPI, IDS_KEYBRD2_SYS}, {IDS_UKRANIAN, 866, 380, 0, 0, LANG_ID_UR, IDS_COUNTRY_SYS, IDS_EGA3_CPI, IDS_KEYBRD3_SYS}, };
INTL_INFO cp_1252[] = { {IDS_AFRICAN, 850, 27, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_BASQUE, 850, 34, 0, 0, LANG_ID_SP, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_CATALAN, 850, 34, 0, 0, LANG_ID_SP, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_DANISH, 850, 31, 0, 0, LANG_ID_DK, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_DUTCH_Belgian, 850, 32, 0, 0, LANG_ID_BE, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_DUTCH_Standard, 850, 31, 0, 0, LANG_ID_NL, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_ENGLISH_United_States, 0, 0, 0, 0, NO_LANG_ID, 0, 0, 0}, {IDS_ENGLISH_Australian, 437, 61, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_ENGLISH_British, 850, 44, 0, 0, LANG_ID_UK, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_ENGLISH_Canadian, 850, 4, 0, 0, LANG_ID_CA, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_ENGLISH_Ireland, 850, 353, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_ENGLISH_New_Zealand, 850, 64, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_FINISH, 850, 358, 0, 0, LANG_ID_SU, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_FRENCH_Belgian, 850, 32, 0, 0, LANG_ID_BE, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_FRENCH_Canadian, 850, 2, 0, 0, LANG_ID_CF, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_FRENCH_Luxembourg, 850, 33, 0, 0, LANG_ID_FR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_FRENCH_Standard, 850, 33, 0, 0, LANG_ID_FR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_FRENCH_Swiss, 850, 41, 0, 0, LANG_ID_SF, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_GERMAN_Austrian, 850, 43, 0, 0, LANG_ID_GR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_GERMAN_Liechtenstein, 850, 49, 0, 0, LANG_ID_GR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_GERMAN_Luxembourg, 850, 49, 0, 0, LANG_ID_GR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_GERMAN_Standard, 850, 49, 0, 0, LANG_ID_GR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_GERMAN_Swiss, 850, 41, 0, 0, LANG_ID_SG, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_ICELANDIC, 850, 354, 0, 0, LANG_ID_IS, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_INDONESIAN, 850, 785, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA_CPI, 0}, {IDS_ITALIAN_Standard, 850, 39, 0, 0, LANG_ID_IT, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_ITALIAN_142_Standard, 850, 39, 0, 142, LANG_ID_IT, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_ITALIAN_Swiss, 850, 41, 0, 0, LANG_ID_IT, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_NORWEGIAN, 850, 47, 0, 0, LANG_ID_NO, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_PORTUGUESE_Standard, 850, 351, 0, 0, LANG_ID_PO, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_PORTUGUESE_Brazilian, 850, 55, 0, 0, LANG_ID_BR, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Argentina, 850, 54, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Bolivia, 850, 591, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Chile, 850, 56, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Colombia, 850, 57, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Costa_Rica, 850, 3, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Ecuador, 850, 593, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_El_Salvador, 850, 503, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Honduras, 850, 504, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Mexico, 850, 52, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Modern_Sort, 850, 34, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Nicaragua, 850, 505, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SPANISH_Venezuela, 850, 58, 0, 0, LANG_ID_LA, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, {IDS_SWEDISH, 850, 46, 0, 0, LANG_ID_SV, IDS_COUNTRY_SYS, IDS_EGA_CPI, IDS_KEYBOARD_SYS}, };
INTL_INFO cp_1253[] = { {IDS_GREEK_737_LATIN, 737, 30, 0, 0, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_437_LATIN, 737, 30, 0, 0, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_LATIN, 869, 30, 0, 0, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_851_LATIN, 869, 30, 0, 0, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_IBM220, 737, 30, 0, 220, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_437_IBM220, 737, 30, 0, 220, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_IBM220, 869, 30, 0, 220, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_851_IBM220, 869, 30, 0, 220, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_IBM319, 737, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_437_IBM319, 737, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_IBM319, 869, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_851_IBM319, 869, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_LATIN_IBM319, 737, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_737_437_LATIN_IBM319, 737, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_LATIN_IBM319, 869, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, {IDS_GREEK_869_851_LATIN_IBM319, 869, 30, 0, 319, LANG_ID_GK, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD4_SYS}, };
INTL_INFO cp_1254[] = { {IDS_TURKISH_F_TYPE, 857, 90, 0, 440, LANG_ID_TR, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD2_SYS}, {IDS_TURKISH_Q_TYPE, 857, 90, 0, 179, LANG_ID_TR, IDS_COUNTRY_SYS, IDS_EGA2_CPI, IDS_KEYBRD2_SYS}, };
INTL_INFO cp_1255[] = { {IDS_HEBREW, 862, 972, 0, 400, LANG_ID_HE, IDS_COUNTRY_SYS, IDS_HEBEGA_CPI, 0}, };
INTL_INFO cp_1256[] = { {IDS_ARABIC_Algeria, 720, 213, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Bahrain, 720, 973, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Egypt, 720, 20, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Iraq, 720, 964, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Jordan, 720, 961, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Kuwait, 720, 965, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Lebanon, 720, 961, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Libya, 720, 218, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Morocco, 720, 212, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Oman, 720, 969, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Qatar, 720, 974, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Saudi_Arabia, 720, 966, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Syria, 720, 963, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Tunisia, 720, 216, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_U_A_E, 720, 971, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, {IDS_ARABIC_Yemen, 720, 969, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA4_CPI, 0}, };
INTL_INFO cp_1257[] = { {IDS_ESTONIAN, 775, 372, 0, 0, LANG_ID_ET, IDS_COUNTRY_SYS, IDS_EGA3_CPI, IDS_KEYBRD4_SYS}, {IDS_LATVIAN, 775, 371, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA3_CPI, 0}, {IDS_LITHUANIAN, 775, 370, 0, 0, NO_LANG_ID, IDS_COUNTRY_SYS, IDS_EGA3_CPI, 0}, };
INTL_INFO cp_1258[] = { {IDS_VIETNAMESE, 0, 0, 0, 0, NO_LANG_ID, 0, 0, 0}, }; //----------------------------------------------------------------------
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// Intl_SetEditText
//
// Sets an editbox text with a reg entry.
void CPageInternational::Intl_SetEditText(HKEY hKey, LPCTSTR ptszRegValue, int ids, LPTSTR ptszCur) { TCHAR tszData[MAX_PATH*2]; DWORD cbData = sizeof(tszData);
if (RegQueryValueEx(hKey, ptszRegValue, NULL, NULL, (LPBYTE)tszData, &cbData) == ERROR_SUCCESS) { ::SetWindowText(GetDlgItem(ids), tszData);
// saving appropriate initial setting
lstrcpy(ptszCur, tszData); } }
//----------------------------------------------------------------------
// Intl_SetRegValue
//
// Sets a reg entry with an editbox text (removes reg entry if text is empty).
void CPageInternational::Intl_SetRegValue(HKEY hKey, int ids, LPCTSTR ptszRegValue) { TCHAR tszData[MAX_PATH*2];
::GetWindowText(GetDlgItem(ids), tszData, MAX_PATH*2); if (tszData[0] != '\0') RegSetValueEx(hKey, ptszRegValue, 0, REG_SZ, (LPBYTE)tszData, lstrlen(tszData) + 1); else RegDeleteValue(hKey, ptszRegValue); }
void CPageInternational::Intl_GetTextFromNum(UINT nNum, LPTSTR ptszText) { if (nNum) _itoa(nNum, ptszText, 10); else lstrcpy(ptszText, ""); }
//----------------------------------------------------------------------
// Intl_GetTextFromIDS
//
// Helper for loading resource into string.
void CPageInternational::Intl_GetTextFromIDS(int ids, LPTSTR ptszText) { if (ids) { CString str;
str.LoadString(ids); ExpandEnvironmentStrings(str, ptszText, MAX_PATH); } else lstrcpy(ptszText, ""); }
//----------------------------------------------------------------------
// Intl_GetCPArray
//
// Returns proper array of intl settings for passed in code page.
UINT CPageInternational::Intl_GetCPArray(UINT nCodePage, INTL_INFO **ppIntlInfo) { UINT cElements;
switch(nCodePage) { case 874: *ppIntlInfo = cp_874; cElements = cA(cp_874); break;
case 932: *ppIntlInfo = cp_932; cElements = cA(cp_932); break;
case 936: *ppIntlInfo = cp_936; cElements = cA(cp_936); break;
case 949: *ppIntlInfo = cp_949; cElements = cA(cp_949); break;
case 950: *ppIntlInfo = cp_950; cElements = cA(cp_950); break;
case 1250: *ppIntlInfo = cp_1250; cElements = cA(cp_1250); break;
case 1251: *ppIntlInfo = cp_1251; cElements = cA(cp_1251); break;
case 1252: *ppIntlInfo = cp_1252; cElements = cA(cp_1252); break;
case 1253: *ppIntlInfo = cp_1253; cElements = cA(cp_1253); break;
case 1254: *ppIntlInfo = cp_1254; cElements = cA(cp_1254); break;
case 1255: *ppIntlInfo = cp_1255; cElements = cA(cp_1255); break;
case 1256: *ppIntlInfo = cp_1256; cElements = cA(cp_1256); break;
case 1257: *ppIntlInfo = cp_1257; cElements = cA(cp_1257); break;
case 1258: *ppIntlInfo = cp_1258; cElements = cA(cp_1258); break;
default: *ppIntlInfo = NULL; cElements = 0; } return cElements; }
CPageInternational::CPageInternational() { m_uiCaption = IDS_INTERNATIONAL_CAPTION; m_strName = _T("international");
// init flags
m_fInitializing = TRUE; m_fIntlDirty = FALSE;
// init initial settings
m_tszCurDOSCodePage[0] = '\0'; m_tszCurCountryCode[0] = '\0'; m_tszCurKeyboardType[0] = '\0'; m_tszCurKeyboardLayout[0] = '\0'; m_tszCurLanguageID[0] = '\0'; m_tszCurCountryFilename[0] = '\0'; m_tszCurCodePageFilename[0] = '\0'; m_tszCurKeyboardFilename[0] = '\0'; } /////////////////////////////////////////////////////////////////////////////
// CPageIni
LRESULT CPageInternational::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { HWND hLang; INTL_INFO *pIntlInfo = NULL; UINT cElements, i, nItem; CString szLanguage; HKEY hKey;
::EnableWindow(GetDlgItem(IDC_EDITCODEPAGE), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITCOUNTRYCODE), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITCOUNTRYDATAFILE), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITDISPLAYDATAFILE), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITKEYBOARDDATAFILE), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITKEYBOARDTYPE), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITKEYBOARDLAYOUT), TRUE); ::EnableWindow(GetDlgItem(IDC_EDITLANGUAGEID), TRUE); ::EnableWindow(GetDlgItem(IDC_COMBOLANGUAGES), TRUE);
hLang = GetDlgItem(IDC_COMBOLANGUAGES);
// set and select first Language combo box item
szLanguage.LoadString(IDS_NO_LANG); nItem = ComboBox_AddString(hLang, szLanguage); ComboBox_SetCurSel(hLang, nItem); //nItem = ComboBox_AddString(hLang, TEXT("ABC"));
// fill Language combo box based on active code page
cElements = Intl_GetCPArray(GetACP(), &pIntlInfo); for (i = 0; i < cElements; i++) { szLanguage.LoadString(pIntlInfo[i].idsName); nItem = ComboBox_AddString(hLang, szLanguage.GetBuffer(0)); ComboBox_SetItemData(hLang, nItem, &pIntlInfo[i]); }
// Open Codepage reg key
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_CodepageKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { // set all edit boxes
Intl_SetEditText(hKey, REGSTR_VAL_DOSVMCP, IDC_EDITCODEPAGE, m_tszCurDOSCodePage); Intl_SetEditText(hKey, REGSTR_VAL_DOSCC, IDC_EDITCOUNTRYCODE, m_tszCurCountryCode); Intl_SetEditText(hKey, REGSTR_VAL_DOSCFN, IDC_EDITCOUNTRYDATAFILE, m_tszCurCountryFilename); Intl_SetEditText(hKey, REGSTR_VAL_DOSCPFN, IDC_EDITDISPLAYDATAFILE, m_tszCurCodePageFilename); Intl_SetEditText(hKey, REGSTR_VAL_DOSKFN, IDC_EDITKEYBOARDDATAFILE, m_tszCurKeyboardFilename); Intl_SetEditText(hKey, REGSTR_VAL_DOSKT, IDC_EDITKEYBOARDTYPE, m_tszCurKeyboardType); Intl_SetEditText(hKey, REGSTR_VAL_DOSKL, IDC_EDITKEYBOARDLAYOUT, m_tszCurKeyboardLayout); Intl_SetEditText(hKey, REGSTR_VAL_DOSLID, IDC_EDITLANGUAGEID, m_tszCurLanguageID);
RegCloseKey(hKey); }
// limit appropriate edit boxes
Edit_LimitText(GetDlgItem(IDC_EDITCODEPAGE), 5); Edit_LimitText(GetDlgItem(IDC_EDITCOUNTRYCODE), 5); Edit_LimitText(GetDlgItem(IDC_EDITKEYBOARDTYPE), 5); Edit_LimitText(GetDlgItem(IDC_EDITKEYBOARDLAYOUT), 5); Edit_LimitText(GetDlgItem(IDC_EDITLANGUAGEID), 2);
// Done initializing
m_fInitializing = FALSE;
return TRUE; }
LRESULT CPageInternational::OnSelchangeCombolanguages(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { int nItem; TCHAR tszText[MAX_PATH]; INTL_INFO *pIntlInfo;
nItem = ComboBox_GetCurSel(hWndCtl); if (nItem != CB_ERR) { if (nItem == 0) { // set to initial settings
::SetWindowText(GetDlgItem(IDC_EDITCODEPAGE), m_tszCurDOSCodePage); ::SetWindowText(GetDlgItem(IDC_EDITCOUNTRYCODE), m_tszCurCountryCode); ::SetWindowText(GetDlgItem(IDC_EDITCOUNTRYDATAFILE), m_tszCurCountryFilename); ::SetWindowText(GetDlgItem(IDC_EDITDISPLAYDATAFILE), m_tszCurCodePageFilename); ::SetWindowText(GetDlgItem(IDC_EDITKEYBOARDDATAFILE), m_tszCurKeyboardFilename); ::SetWindowText(GetDlgItem(IDC_EDITKEYBOARDTYPE), m_tszCurKeyboardType); ::SetWindowText(GetDlgItem(IDC_EDITKEYBOARDLAYOUT), m_tszCurKeyboardLayout); ::SetWindowText(GetDlgItem(IDC_EDITLANGUAGEID), m_tszCurLanguageID); } else { pIntlInfo = (INTL_INFO*)ComboBox_GetItemData(hWndCtl, nItem); if (pIntlInfo) { // set DOS code page
Intl_GetTextFromNum(pIntlInfo->nDOSCodePage, tszText); ::SetWindowText(GetDlgItem(IDC_EDITCODEPAGE), tszText);
// set country code
Intl_GetTextFromNum(pIntlInfo->nCountryCode, tszText); ::SetWindowText(GetDlgItem(IDC_EDITCOUNTRYCODE), tszText);
// set country data file name
Intl_GetTextFromIDS(pIntlInfo->idsCountryFilename, tszText); ::SetWindowText(GetDlgItem(IDC_EDITCOUNTRYDATAFILE), tszText);
// set display data file name
Intl_GetTextFromIDS(pIntlInfo->idsCodePageFilename, tszText); ::SetWindowText(GetDlgItem(IDC_EDITDISPLAYDATAFILE), tszText);
// set keyboard data file name
Intl_GetTextFromIDS(pIntlInfo->idsKeyboardFilename, tszText); ::SetWindowText(GetDlgItem(IDC_EDITKEYBOARDDATAFILE), tszText);
// set keyboard type
Intl_GetTextFromNum(pIntlInfo->nKeyboardType, tszText); ::SetWindowText(GetDlgItem(IDC_EDITKEYBOARDTYPE), tszText);
// set keyboard layout
Intl_GetTextFromNum(pIntlInfo->nKeyboardLayout, tszText); ::SetWindowText(GetDlgItem(IDC_EDITKEYBOARDLAYOUT), tszText);
// set language id
if (lstrcmp(pIntlInfo->tszLanguageID, NO_LANG_ID) != 0) lstrcpyn(tszText, pIntlInfo->tszLanguageID, 3); else tszText[0] = '\0'; ::SetWindowText(GetDlgItem(IDC_EDITLANGUAGEID), tszText); } } } return 0; }
HRESULT CPageInternational::Notify(LPCTSTR szFromTab, LPCTSTR szToTab, TabNotify msg) { if (CPageBase::Notify(szFromTab, szToTab, msg) == S_FALSE) return S_FALSE;
HRESULT hrReturn = S_OK; HKEY hKey;
switch (msg) { case TAB_APPLY: if (!IsDirty()) return S_OK; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_CodepageKey, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS) { Intl_SetRegValue(hKey, IDC_EDITCODEPAGE, REGSTR_VAL_DOSVMCP); Intl_SetRegValue(hKey, IDC_EDITCOUNTRYCODE, REGSTR_VAL_DOSCC); Intl_SetRegValue(hKey, IDC_EDITCOUNTRYDATAFILE, REGSTR_VAL_DOSCFN); Intl_SetRegValue(hKey, IDC_EDITDISPLAYDATAFILE, REGSTR_VAL_DOSCPFN); Intl_SetRegValue(hKey, IDC_EDITKEYBOARDDATAFILE, REGSTR_VAL_DOSKFN); Intl_SetRegValue(hKey, IDC_EDITKEYBOARDTYPE, REGSTR_VAL_DOSKT); Intl_SetRegValue(hKey, IDC_EDITKEYBOARDLAYOUT, REGSTR_VAL_DOSKL); Intl_SetRegValue(hKey, IDC_EDITLANGUAGEID, REGSTR_VAL_DOSLID);
RegCloseKey(hKey); } break; case TAB_NORMAL: case TAB_DIAGNOSTIC: default: break; }
return hrReturn; } #endif
|