556 lines
21 KiB
C++
556 lines
21 KiB
C++
|
// 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
|