#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}};