Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

290 lines
11 KiB

#define BYTES_PER_SECTOR 512
#define SECTORS_PER_TRACK 18
#define TRACK_SIZE (SECTORS_PER_TRACK * BYTES_PER_SECTOR)
#define TRACKS_ON_DISK (80 * 2) // * 2 because it is double-sided
#define CPCLASS_DEFAULT 99
#define CPCLASS_EGA 0
#define CPCLASS_EGA2 1
#define CPCLASS_EGA3 2
#define CPCLASS_EGA4 3
#define CPCLASS_HEBEGA 4
typedef struct {
UINT iCP;
UINT iClass;
} CLASSFROMCP;
const CLASSFROMCP rgCPtoClassMap[] =
{{1258, CPCLASS_DEFAULT},
{874, CPCLASS_DEFAULT},
{932, CPCLASS_DEFAULT},
{936, CPCLASS_DEFAULT},
{949, CPCLASS_DEFAULT},
{950, CPCLASS_DEFAULT},
{708, CPCLASS_DEFAULT},
{709, CPCLASS_DEFAULT},
{710, CPCLASS_DEFAULT},
{860, CPCLASS_DEFAULT},
{861, CPCLASS_DEFAULT},
{863, CPCLASS_DEFAULT},
{864, CPCLASS_DEFAULT},
{865, CPCLASS_DEFAULT},
{850, CPCLASS_EGA},
{852, CPCLASS_EGA},
{437, CPCLASS_EGA},
{869, CPCLASS_EGA2},
{737, CPCLASS_EGA2},
{857, CPCLASS_EGA2},
{866, CPCLASS_EGA3},
{775, CPCLASS_EGA3},
{855, CPCLASS_EGA3},
{720, CPCLASS_EGA4},
{862, CPCLASS_HEBEGA}};
#define KEYBOARD_US 0
#define KEYBOARD_GR 1
#define KEYBOARD_HE 2
#define KEYBOARD_FR 3
#define KEYBOARD_SP 4
#define KEYBOARD_IT 5
#define KEYBOARD_SV 6
#define KEYBOARD_NL 7
#define KEYBOARD_BR 8
#define KEYBOARD_NO 9
#define KEYBOARD_DK 10
#define KEYBOARD_SU 11
#define KEYBOARD_RU 12
#define KEYBOARD_CZ 13
#define KEYBOARD_PL 14
#define KEYBOARD_HU 15
#define KEYBOARD_PO 16
#define KEYBOARD_TR 17
#define KEYBOARD_GK 18
#define KEYBOARD_BL 19
#define KEYBOARD_BG 20
#define KEYBOARD_YU 21
#define KEYBOARD_BE 22
#define KEYBOARD_CF 23
#define KEYBOARD_UK 24
#define KEYBOARD_ET 25
#define KEYBOARD_SF 26
#define KEYBOARD_SG 27
#define KEYBOARD_IS 28
#define KEYBOARD_IME 29
#define KEYBOARD_RO 30
#define KEYBOARD_YC 31
#define KEYBOARD_LA 32
#define KEYBOARD_UR 33
#define KEYBOARD_SL 34
typedef struct {
WORD wLangId;
UINT iKB;
} KBFROMLANGID;
const KBFROMLANGID rgLangIdtoKBMap[] =
{{MAKELANGID(LANG_AFRIKAANS,0), KEYBOARD_US},
{MAKELANGID(LANG_ALBANIAN,0), KEYBOARD_US},
{0x45e, KEYBOARD_US}, // AMHARIC
{MAKELANGID(LANG_ARABIC,0), KEYBOARD_US},
{MAKELANGID(LANG_ARMENIAN,0), KEYBOARD_US},
{MAKELANGID(LANG_ASSAMESE,0), KEYBOARD_US},
{MAKELANGID(LANG_AZERI,0), KEYBOARD_US},
{MAKELANGID(LANG_BASQUE,0), KEYBOARD_SP},
{MAKELANGID(LANG_BELARUSIAN,0), KEYBOARD_BL},
{MAKELANGID(LANG_BENGALI,0), KEYBOARD_US},
{0x101a, KEYBOARD_US}, // BOSNIA/HERZEGOVINA
{MAKELANGID(LANG_BULGARIAN,0), KEYBOARD_BG},
{0x455, KEYBOARD_US}, // BURMESE
{MAKELANGID(LANG_CATALAN,0), KEYBOARD_SP},
{0x45c, KEYBOARD_US}, // CHEROKEE
{MAKELANGID(LANG_CHINESE,0), KEYBOARD_US},
{MAKELANGID(LANG_CROATIAN,0), KEYBOARD_YU},
{0x450, KEYBOARD_US}, // CYRILLIC
{MAKELANGID(LANG_CZECH,0), KEYBOARD_CZ},
{MAKELANGID(LANG_DANISH,0), KEYBOARD_DK},
{MAKELANGID(LANG_DUTCH,0), KEYBOARD_NL},
{MAKELANGID(LANG_DUTCH,SUBLANG_DUTCH_BELGIAN), KEYBOARD_BE},
{MAKELANGID(LANG_ENGLISH,0), KEYBOARD_US},
{0x4409, KEYBOARD_US}, // ENGLISH / MALAYSIA
{MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_UK), KEYBOARD_UK},
{MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_CAN), KEYBOARD_CF},
{MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_EIRE), KEYBOARD_UK},
{0x1809, KEYBOARD_UK}, // ENGLISH / IRELAND
{MAKELANGID(LANG_ESTONIAN,0), KEYBOARD_ET},
{MAKELANGID(LANG_FAEROESE,0), KEYBOARD_DK},
{MAKELANGID(LANG_FARSI,0), KEYBOARD_US},
{MAKELANGID(LANG_FINNISH,0), KEYBOARD_SU},
{MAKELANGID(LANG_FRENCH,0), KEYBOARD_FR},
{MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_BELGIAN), KEYBOARD_BE},
{MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_CANADIAN), KEYBOARD_CF},
{MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_SWISS), KEYBOARD_SF},
{0x462, KEYBOARD_US}, // FRISIAN
{0x83c, KEYBOARD_UK}, // GAELIC / IRELAND
{0x43c, KEYBOARD_UK}, // GAELIC / SCOTLAND
{0x456, KEYBOARD_SP}, // GALICIAN
{MAKELANGID(LANG_GEORGIAN,0), KEYBOARD_US},
{MAKELANGID(LANG_GERMAN,0), KEYBOARD_GR},
{MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN_SWISS), KEYBOARD_SG},
{MAKELANGID(LANG_GREEK,0), KEYBOARD_GK},
{MAKELANGID(LANG_GUJARATI,0), KEYBOARD_US},
{MAKELANGID(LANG_HEBREW,0), KEYBOARD_HE},
{MAKELANGID(LANG_HINDI,0), KEYBOARD_US},
{MAKELANGID(LANG_HUNGARIAN,0), KEYBOARD_HU},
{MAKELANGID(LANG_ICELANDIC,0), KEYBOARD_IS},
{MAKELANGID(LANG_INDONESIAN,0), KEYBOARD_US},
{0x45e, KEYBOARD_US}, // INUKITUT
{MAKELANGID(LANG_ITALIAN,0), KEYBOARD_IT},
{MAKELANGID(LANG_JAPANESE,0), KEYBOARD_IME},
{MAKELANGID(LANG_KANNADA,0), KEYBOARD_US},
{MAKELANGID(LANG_KASHMIRI,0), KEYBOARD_US},
{MAKELANGID(LANG_KAZAK,0), KEYBOARD_US},
{0x453, KEYBOARD_US}, // KHMER
{0x440, KEYBOARD_US}, // KIRGHIZ
{MAKELANGID(LANG_KONKANI,0), KEYBOARD_US},
{MAKELANGID(LANG_KOREAN,0), KEYBOARD_IME},
{0x454, KEYBOARD_US}, // LAO
{0x464, KEYBOARD_US}, // LATIN (VATICAN)
{MAKELANGID(LANG_LATVIAN,0), KEYBOARD_US},
{MAKELANGID(LANG_LITHUANIAN,0), KEYBOARD_US},
{MAKELANGID(LANG_MACEDONIAN,0), KEYBOARD_US},
{MAKELANGID(LANG_MALAY,0), KEYBOARD_US},
{MAKELANGID(LANG_MALAYALAM,0), KEYBOARD_US},
{0x43e, KEYBOARD_US}, // MALAYSIAN
{0x43a, KEYBOARD_US}, // MALTESE
{MAKELANGID(LANG_MANIPURI,0), KEYBOARD_US},
{MAKELANGID(LANG_MARATHI,0), KEYBOARD_US},
{0x850, KEYBOARD_US}, // MONGOLIAN
{MAKELANGID(LANG_NEPALI,0), KEYBOARD_US},
{MAKELANGID(LANG_NEUTRAL,0), KEYBOARD_US},
{MAKELANGID(LANG_NORWEGIAN,0), KEYBOARD_NO},
{MAKELANGID(LANG_ORIYA,0), KEYBOARD_US},
{0x463, KEYBOARD_US}, // PASHTO
{MAKELANGID(LANG_POLISH,0), KEYBOARD_PL},
{MAKELANGID(LANG_PORTUGUESE,0), KEYBOARD_PO},
{MAKELANGID(LANG_PORTUGUESE,SUBLANG_PORTUGUESE_BRAZILIAN), KEYBOARD_BR},
{MAKELANGID(LANG_PUNJABI,0), KEYBOARD_US},
{0x417, KEYBOARD_US}, // RHAETO-ROMANIC
{MAKELANGID(LANG_ROMANIAN,0), KEYBOARD_RO},
{MAKELANGID(LANG_RUSSIAN,0), KEYBOARD_RU},
{0x43b, KEYBOARD_US}, // SAMI (LAPPISH)
{MAKELANGID(LANG_SANSKRIT,0), KEYBOARD_US},
{MAKELANGID(LANG_SERBIAN,0), KEYBOARD_YC},
{MAKELANGID(LANG_SERBIAN,SUBLANG_SERBIAN_CYRILLIC), KEYBOARD_YC},
{MAKELANGID(LANG_SERBIAN,SUBLANG_SERBIAN_LATIN), KEYBOARD_YU},
{MAKELANGID(LANG_SINDHI,0), KEYBOARD_US},
{0x45b, KEYBOARD_US}, // SINHALESE
{MAKELANGID(LANG_SLOVAK,0), KEYBOARD_SL},
{MAKELANGID(LANG_SLOVENIAN,0), KEYBOARD_YU},
{0x42e, KEYBOARD_US}, // SORBIAN
{MAKELANGID(LANG_SPANISH,0), KEYBOARD_SP},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_ARGENTINA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_BOLIVIA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_CHILE), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_COLOMBIA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_COSTA_RICA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_DOMINICAN_REPUBLIC), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_ECUADOR), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_EL_SALVADOR), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_GUATEMALA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_HONDURAS), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_MEXICAN), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_NICARAGUA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PANAMA), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PARAGUAY), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PERU), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_PUERTO_RICO), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_MODERN), KEYBOARD_SP},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_URUGUAY), KEYBOARD_LA},
{MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_VENEZUELA), KEYBOARD_LA},
{0x430, KEYBOARD_US}, // SUTU
{MAKELANGID(LANG_SWAHILI,0), KEYBOARD_US},
{MAKELANGID(LANG_SWEDISH,0), KEYBOARD_SV},
{0x45a, KEYBOARD_US}, // SYRIAC
{0x428, KEYBOARD_US}, // TAJIK
{MAKELANGID(LANG_TAMIL,0), KEYBOARD_US},
{MAKELANGID(LANG_TATAR,0), KEYBOARD_US},
{MAKELANGID(LANG_TELUGU,0), KEYBOARD_US},
{MAKELANGID(LANG_THAI,0), KEYBOARD_US},
{0x451, KEYBOARD_US}, // TIBETAN
{0x431, KEYBOARD_US}, // TSONGA
{0x432, KEYBOARD_US}, // TSWANA
{MAKELANGID(LANG_TURKISH,0), KEYBOARD_TR},
{0x442, KEYBOARD_US}, // TURKMEN
{MAKELANGID(LANG_UKRAINIAN,0), KEYBOARD_UR},
{MAKELANGID(LANG_URDU,0), KEYBOARD_US},
{MAKELANGID(LANG_UZBEK,0), KEYBOARD_US},
{0x433, KEYBOARD_US}, // VENDA
{MAKELANGID(LANG_VIETNAMESE,0), KEYBOARD_US},
{0x452, KEYBOARD_US}, // WELSH
{0x434, KEYBOARD_US}, // XHOSA
{0x43d, KEYBOARD_US}, // YIDDISH
{0x435, KEYBOARD_US}};// ZULU
#define KBCLASS_BLANK 0
#define KBCLASS_1 1
#define KBCLASS_2 2
#define KBCLASS_3 3
#define KBCLASS_4 4
typedef struct {
UINT iKB;
UINT iClass;
} CLASSFROMKB;
const CLASSFROMKB rgKBtoClassMap[] =
{{KEYBOARD_US, KBCLASS_BLANK},
{KEYBOARD_GR, KBCLASS_1},
{KEYBOARD_HE, KBCLASS_4},
{KEYBOARD_FR, KBCLASS_1},
{KEYBOARD_SP, KBCLASS_1},
{KEYBOARD_IT, KBCLASS_1},
{KEYBOARD_SV, KBCLASS_1},
{KEYBOARD_NL, KBCLASS_1},
{KEYBOARD_BR, KBCLASS_1},
{KEYBOARD_NO, KBCLASS_1},
{KEYBOARD_DK, KBCLASS_1},
{KEYBOARD_SU, KBCLASS_1},
{KEYBOARD_RU, KBCLASS_3},
{KEYBOARD_CZ, KBCLASS_2},
{KEYBOARD_PL, KBCLASS_4},
{KEYBOARD_HU, KBCLASS_2},
{KEYBOARD_PO, KBCLASS_1},
{KEYBOARD_TR, KBCLASS_2},
{KEYBOARD_GK, KBCLASS_4},
{KEYBOARD_BL, KBCLASS_3},
{KEYBOARD_BG, KBCLASS_2},
{KEYBOARD_YU, KBCLASS_2},
{KEYBOARD_BE, KBCLASS_1},
{KEYBOARD_CF, KBCLASS_2},
{KEYBOARD_UK, KBCLASS_1},
{KEYBOARD_ET, KBCLASS_4},
{KEYBOARD_SF, KBCLASS_1},
{KEYBOARD_SG, KBCLASS_1},
{KEYBOARD_IS, KBCLASS_2},
{KEYBOARD_IME,KBCLASS_1},
{KEYBOARD_RO, KBCLASS_2},
{KEYBOARD_YC, KBCLASS_2},
{KEYBOARD_LA, KBCLASS_1},
{KEYBOARD_UR, KBCLASS_3},
{KEYBOARD_SL, KBCLASS_2}};