mirror of
https://github.com/reactos/reactos.git
synced 2025-02-28 11:25:13 +00:00
Merge branch 'gui_setup' into HEAD
This commit is contained in:
commit
0f7dfcaa55
27 changed files with 1742 additions and 1101 deletions
|
@ -503,8 +503,8 @@ int wmain(int argc, WCHAR* argv[])
|
|||
LogfListInitialize();
|
||||
InitEventSourceList();
|
||||
|
||||
__debugbreak();
|
||||
GetSystemWindowsDirectoryW(LogPath, ARRAYSIZE(LogPath));
|
||||
|
||||
if (GetDriveTypeW(LogPath) == DRIVE_CDROM)
|
||||
{
|
||||
DPRINT("LiveCD detected\n");
|
||||
|
|
|
@ -538,16 +538,8 @@ PrepareCopyInfFile(
|
|||
}
|
||||
|
||||
/* Add specific files depending of computer type */
|
||||
{
|
||||
PGENERIC_LIST_ENTRY Entry;
|
||||
Entry = GetCurrentListEntry(pSetupData->ComputerList);
|
||||
ASSERT(Entry);
|
||||
pSetupData->ComputerType = ((PGENENTRY)GetListEntryData(Entry))->Id;
|
||||
ASSERT(pSetupData->ComputerType);
|
||||
|
||||
if (!ProcessComputerFiles(InfFile, pSetupData->ComputerType, &AdditionalSectionName))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (AdditionalSectionName &&
|
||||
!AddSectionToCopyQueue(pSetupData, InfFile,
|
||||
|
@ -769,7 +761,7 @@ PrepareFileCopy(
|
|||
InfFileSize,
|
||||
NULL,
|
||||
INF_STYLE_WIN4,
|
||||
pSetupData->LanguageId,
|
||||
LANGIDFROMLCID(pSetupData->LocaleID),
|
||||
&ErrorLine);
|
||||
|
||||
CabinetCleanup(&CabinetContext);
|
||||
|
@ -792,7 +784,7 @@ PrepareFileCopy(
|
|||
InfHandle = SpInfOpenInfFile(PathBuffer,
|
||||
NULL,
|
||||
INF_STYLE_WIN4,
|
||||
pSetupData->LanguageId,
|
||||
LANGIDFROMLCID(pSetupData->LocaleID),
|
||||
&ErrorLine);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -42,25 +42,22 @@
|
|||
static
|
||||
ULONG
|
||||
FindLanguageIndex(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
if (LanguageId == NULL)
|
||||
if (LanguageId == 0)
|
||||
{
|
||||
/* Default to en-US */
|
||||
// return 0; // FIXME!!
|
||||
LanguageId = L"00000409";
|
||||
// return 0; // FIXME!!
|
||||
LanguageId = 0x0409;
|
||||
}
|
||||
|
||||
while (MUILanguageList[lngIndex].LanguageID != NULL)
|
||||
while (MUILanguageList[lngIndex].LanguageID != 0)
|
||||
{
|
||||
if (_wcsicmp(MUILanguageList[lngIndex].LanguageID, LanguageId) == 0)
|
||||
{
|
||||
if (MUILanguageList[lngIndex].LanguageID == LanguageId)
|
||||
return lngIndex;
|
||||
}
|
||||
|
||||
lngIndex++;
|
||||
++lngIndex;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -68,16 +65,15 @@ FindLanguageIndex(
|
|||
|
||||
BOOLEAN
|
||||
IsLanguageAvailable(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
while (MUILanguageList[lngIndex].LanguageID != NULL)
|
||||
while (MUILanguageList[lngIndex].LanguageID != 0)
|
||||
{
|
||||
if (_wcsicmp(MUILanguageList[lngIndex].LanguageID, LanguageId) == 0)
|
||||
if (MUILanguageList[lngIndex].LanguageID == LanguageId)
|
||||
return TRUE;
|
||||
|
||||
lngIndex++;
|
||||
++lngIndex;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
@ -86,7 +82,7 @@ IsLanguageAvailable(
|
|||
|
||||
KLID
|
||||
MUIDefaultKeyboardLayout(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = FindLanguageIndex(LanguageId);
|
||||
return MUILanguageList[lngIndex].MuiLayouts[0].LayoutID;
|
||||
|
@ -94,7 +90,7 @@ MUIDefaultKeyboardLayout(
|
|||
|
||||
UINT
|
||||
MUIGetOEMCodePage(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = FindLanguageIndex(LanguageId);
|
||||
return MUILanguageList[lngIndex].OEMCPage;
|
||||
|
@ -102,7 +98,7 @@ MUIGetOEMCodePage(
|
|||
|
||||
GEOID
|
||||
MUIGetGeoID(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = FindLanguageIndex(LanguageId);
|
||||
return MUILanguageList[lngIndex].GeoID;
|
||||
|
@ -110,7 +106,7 @@ MUIGetGeoID(
|
|||
|
||||
const MUI_LAYOUTS*
|
||||
MUIGetLayoutsList(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = FindLanguageIndex(LanguageId);
|
||||
return MUILanguageList[lngIndex].MuiLayouts;
|
||||
|
@ -125,16 +121,14 @@ AddHotkeySettings(
|
|||
IN PCWSTR LayoutHotkey)
|
||||
{
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
UNICODE_STRING KeyName;
|
||||
UNICODE_STRING ValueName;
|
||||
UNICODE_STRING Name;
|
||||
HANDLE KeyHandle;
|
||||
ULONG Disposition;
|
||||
NTSTATUS Status;
|
||||
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
L".DEFAULT\\Keyboard Layout\\Toggle");
|
||||
RtlInitUnicodeString(&Name, L".DEFAULT\\Keyboard Layout\\Toggle");
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&KeyName,
|
||||
&Name,
|
||||
OBJ_CASE_INSENSITIVE,
|
||||
GetRootKeyByPredefKey(HKEY_USERS, NULL),
|
||||
NULL);
|
||||
|
@ -152,11 +146,9 @@ AddHotkeySettings(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
RtlInitUnicodeString(&ValueName,
|
||||
L"Hotkey");
|
||||
|
||||
RtlInitUnicodeString(&Name, L"Hotkey");
|
||||
Status = NtSetValueKey(KeyHandle,
|
||||
&ValueName,
|
||||
&Name,
|
||||
0,
|
||||
REG_SZ,
|
||||
(PVOID)Hotkey,
|
||||
|
@ -168,11 +160,9 @@ AddHotkeySettings(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
RtlInitUnicodeString(&ValueName,
|
||||
L"Language Hotkey");
|
||||
|
||||
RtlInitUnicodeString(&Name, L"Language Hotkey");
|
||||
Status = NtSetValueKey(KeyHandle,
|
||||
&ValueName,
|
||||
&Name,
|
||||
0,
|
||||
REG_SZ,
|
||||
(PVOID)LangHotkey,
|
||||
|
@ -184,11 +174,9 @@ AddHotkeySettings(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
RtlInitUnicodeString(&ValueName,
|
||||
L"Layout Hotkey");
|
||||
|
||||
RtlInitUnicodeString(&Name, L"Layout Hotkey");
|
||||
Status = NtSetValueKey(KeyHandle,
|
||||
&ValueName,
|
||||
&Name,
|
||||
0,
|
||||
REG_SZ,
|
||||
(PVOID)LayoutHotkey,
|
||||
|
@ -289,7 +277,9 @@ AddKbLayoutsToRegistry(
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
|
||||
goto Quit;
|
||||
// goto Quit;
|
||||
NtClose(KeyHandle);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
uCount = 0;
|
||||
|
@ -360,18 +350,15 @@ Quit:
|
|||
|
||||
BOOLEAN
|
||||
AddKeyboardLayouts(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
while (MUILanguageList[lngIndex].LanguageID != NULL)
|
||||
while (MUILanguageList[lngIndex].LanguageID != 0)
|
||||
{
|
||||
if (_wcsicmp(MUILanguageList[lngIndex].LanguageID, LanguageId) == 0)
|
||||
{
|
||||
if (MUILanguageList[lngIndex].LanguageID == LanguageId)
|
||||
return AddKbLayoutsToRegistry(MUILanguageList[lngIndex].MuiLayouts);
|
||||
}
|
||||
|
||||
lngIndex++;
|
||||
++lngIndex;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
@ -407,7 +394,7 @@ AddCodepageToRegistry(
|
|||
&ObjectAttributes);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtOpenKey() failed (Status %lx)\n", Status);
|
||||
DPRINT1("NtOpenKey(\"%wZ\") failed (Status %lx)\n", &Name, Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -424,7 +411,7 @@ AddCodepageToRegistry(
|
|||
(wcslen(Value)+1) * sizeof(WCHAR));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
|
||||
DPRINT1("NtSetValueKey(\"%wZ\") failed (Status %lx)\n", &Name, Status);
|
||||
goto Quit;
|
||||
}
|
||||
|
||||
|
@ -441,7 +428,7 @@ AddCodepageToRegistry(
|
|||
(wcslen(Value)+1) * sizeof(WCHAR));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
|
||||
DPRINT1("NtSetValueKey(\"%wZ\") failed (Status %lx)\n", &Name, Status);
|
||||
goto Quit;
|
||||
}
|
||||
|
||||
|
@ -458,7 +445,7 @@ AddCodepageToRegistry(
|
|||
(wcslen(Value)+1) * sizeof(WCHAR));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
|
||||
DPRINT1("NtSetValueKey(\"%wZ\") failed (Status %lx)\n", &Name, Status);
|
||||
goto Quit;
|
||||
}
|
||||
|
||||
|
@ -508,7 +495,7 @@ AddFontsSettingsToRegistry(
|
|||
(wcslen(MuiSubFonts[uIndex].SubFontName)+1) * sizeof(WCHAR));
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("NtSetValueKey() failed (Status = %lx, uIndex = %d)\n", Status, uIndex);
|
||||
DPRINT1("NtSetValueKey() failed (Status = %lx, uIndex = %u)\n", Status, uIndex);
|
||||
NtClose(KeyHandle);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -532,13 +519,13 @@ AddFontsSettingsToRegistry(
|
|||
|
||||
BOOLEAN
|
||||
AddCodePage(
|
||||
IN PCWSTR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
while (MUILanguageList[lngIndex].LanguageID != NULL)
|
||||
while (MUILanguageList[lngIndex].LanguageID != 0)
|
||||
{
|
||||
if (_wcsicmp(MUILanguageList[lngIndex].LanguageID, LanguageId) == 0)
|
||||
if (MUILanguageList[lngIndex].LanguageID == LanguageId)
|
||||
{
|
||||
if (AddCodepageToRegistry(MUILanguageList[lngIndex].ACPage,
|
||||
MUILanguageList[lngIndex].OEMCPage,
|
||||
|
@ -553,7 +540,7 @@ AddCodePage(
|
|||
}
|
||||
}
|
||||
|
||||
lngIndex++;
|
||||
++lngIndex;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
/*
|
||||
* See the intl.inf file map:
|
||||
*
|
||||
* ; List of locales.
|
||||
* ; <LCID> = <Font>,<Font Substitute>
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
PCWSTR FontName;
|
||||
|
@ -7,6 +13,8 @@ typedef struct
|
|||
} MUI_SUBFONT;
|
||||
|
||||
typedef USHORT LANGID;
|
||||
// #define MAXUSHORT USHRT_MAX
|
||||
// typedef DWORD LCID;
|
||||
typedef ULONG KLID;
|
||||
|
||||
/*
|
||||
|
@ -29,7 +37,7 @@ typedef ULONG GEOID; // See winnls.h
|
|||
|
||||
typedef struct
|
||||
{
|
||||
PCWSTR LanguageID;
|
||||
LCID LanguageID; // LocaleID;
|
||||
UINT ACPage;
|
||||
UINT OEMCPage;
|
||||
UINT MACCPage;
|
||||
|
@ -42,23 +50,23 @@ typedef struct
|
|||
|
||||
BOOLEAN
|
||||
IsLanguageAvailable(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
KLID
|
||||
MUIDefaultKeyboardLayout(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
UINT
|
||||
MUIGetOEMCodePage(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
GEOID
|
||||
MUIGetGeoID(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
const MUI_LAYOUTS*
|
||||
MUIGetLayoutsList(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
BOOLEAN
|
||||
AddKbLayoutsToRegistry(
|
||||
|
@ -66,8 +74,8 @@ AddKbLayoutsToRegistry(
|
|||
|
||||
BOOLEAN
|
||||
AddKeyboardLayouts(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
BOOLEAN
|
||||
AddCodePage(
|
||||
IN PCWSTR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
|
|
|
@ -411,432 +411,432 @@
|
|||
|
||||
const MUI_LANGUAGE MUILanguageList[] =
|
||||
{
|
||||
/* Lang ID, ANSI CP, OEM CP, MAC CP, Language Name, GeoID, Fonts, KB Layouts */
|
||||
/* LangID, ANSI CP, OEM CP, MAC CP, Language Name, GeoID, Fonts, KB Layouts */
|
||||
#ifdef LANGUAGE_AF_ZA
|
||||
{L"00000436", 1252, 850, 10000, L"Afrikaans", 209, LatinFonts, afZALayouts},
|
||||
{0x00000436, 1252, 850, 10000, L"Afrikaans", 209, LatinFonts, afZALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SQ_AL
|
||||
{L"0000041C", 1250, 852, 10029, L"Albanian (Albania)", 6, LatinFonts, sqALLayouts},
|
||||
{0x0000041C, 1250, 852, 10029, L"Albanian (Albania)", 6, LatinFonts, sqALLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_SA
|
||||
{L"00000401", 1256, 720, 10004, L"Arabic (Saudi Arabia)", 205, UnicodeFonts, arSALayouts},
|
||||
{0x00000401, 1256, 720, 10004, L"Arabic (Saudi Arabia)", 205, UnicodeFonts, arSALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_IQ
|
||||
{L"00000801", 1256, 720, 10004, L"Arabic (Iraq)", 121, UnicodeFonts, arIQLayouts},
|
||||
{0x00000801, 1256, 720, 10004, L"Arabic (Iraq)", 121, UnicodeFonts, arIQLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_EG
|
||||
{L"00000C01", 1256, 720, 10004, L"Arabic (Egypt)", 67, UnicodeFonts, arEGLayouts},
|
||||
{0x00000C01, 1256, 720, 10004, L"Arabic (Egypt)", 67, UnicodeFonts, arEGLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_LY
|
||||
{L"00001001", 1256, 720, 10004, L"Arabic (Libya)", 148, UnicodeFonts, arLYLayouts},
|
||||
{0x00001001, 1256, 720, 10004, L"Arabic (Libya)", 148, UnicodeFonts, arLYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_DZ
|
||||
{L"00001401", 1256, 720, 10004, L"Arabic (Algeria)", 4, UnicodeFonts, arDZLayouts},
|
||||
{0x00001401, 1256, 720, 10004, L"Arabic (Algeria)", 4, UnicodeFonts, arDZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_MA
|
||||
{L"00001801", 1256, 720, 10004, L"Arabic (Morocco)", 149, UnicodeFonts, arMALayouts},
|
||||
{0x00001801, 1256, 720, 10004, L"Arabic (Morocco)", 149, UnicodeFonts, arMALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_TN
|
||||
{L"00001C01", 1256, 720, 10004, L"Arabic (Tunisia)", 234, UnicodeFonts, arTNLayouts},
|
||||
{0x00001C01, 1256, 720, 10004, L"Arabic (Tunisia)", 234, UnicodeFonts, arTNLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_OM
|
||||
{L"00002001", 1256, 720, 10004, L"Arabic (Oman)", 164, UnicodeFonts, arOMLayouts},
|
||||
{0x00002001, 1256, 720, 10004, L"Arabic (Oman)", 164, UnicodeFonts, arOMLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_YE
|
||||
{L"00002401", 1256, 720, 10004, L"Arabic (Yemen)", 261, UnicodeFonts, arYELayouts},
|
||||
{0x00002401, 1256, 720, 10004, L"Arabic (Yemen)", 261, UnicodeFonts, arYELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_SY
|
||||
{L"00002801", 1256, 720, 10004, L"Arabic (Syria)", 222, UnicodeFonts, arSYLayouts},
|
||||
{0x00002801, 1256, 720, 10004, L"Arabic (Syria)", 222, UnicodeFonts, arSYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_JO
|
||||
{L"00002C01", 1256, 720, 10004, L"Arabic (Jordan)", 126, UnicodeFonts, arJOLayouts},
|
||||
{0x00002C01, 1256, 720, 10004, L"Arabic (Jordan)", 126, UnicodeFonts, arJOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_LB
|
||||
{L"00003001", 1256, 720, 10004, L"Arabic (Lebanon)", 139, UnicodeFonts, arLBLayouts},
|
||||
{0x00003001, 1256, 720, 10004, L"Arabic (Lebanon)", 139, UnicodeFonts, arLBLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_KW
|
||||
{L"00003401", 1256, 720, 10004, L"Arabic (Kuwait)", 136, UnicodeFonts, arKWLayouts},
|
||||
{0x00003401, 1256, 720, 10004, L"Arabic (Kuwait)", 136, UnicodeFonts, arKWLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_AE
|
||||
{L"00003801", 1256, 720, 10004, L"Arabic (U.A.E.)", 224, UnicodeFonts, arAELayouts},
|
||||
{0x00003801, 1256, 720, 10004, L"Arabic (U.A.E.)", 224, UnicodeFonts, arAELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_BH
|
||||
{L"00003C01", 1256, 720, 10004, L"Arabic (Bahrain)", 17, UnicodeFonts, arBHLayouts},
|
||||
{0x00003C01, 1256, 720, 10004, L"Arabic (Bahrain)", 17, UnicodeFonts, arBHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_QA
|
||||
{L"00004001", 1256, 720, 10004, L"Arabic (Qatar)", 197, UnicodeFonts, arQALayouts},
|
||||
{0x00004001, 1256, 720, 10004, L"Arabic (Qatar)", 197, UnicodeFonts, arQALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HY_AM
|
||||
{L"0000042B", 0, 1, 2, L"Armenian", 7, UnicodeFonts, hyAMLayouts},
|
||||
{0x0000042B, 0, 1, 2, L"Armenian", 7, UnicodeFonts, hyAMLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AZ_AZ
|
||||
{L"0000082C", 1251, 866, 10007, L"Azeri (Cyrillic)", 5, CyrillicFonts, azAZLayouts},
|
||||
{0x0000082C, 1251, 866, 10007, L"Azeri (Cyrillic)", 5, CyrillicFonts, azAZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AZ_AZ
|
||||
{L"0000042C", 1254, 857, 10081, L"Azeri (Latin)", 5, LatinFonts, azAZLayouts},
|
||||
{0x0000042C, 1254, 857, 10081, L"Azeri (Latin)", 5, LatinFonts, azAZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EU_ES
|
||||
{L"0000042D", 1252, 850, 10000, L"Basque", 217, LatinFonts, euESLayouts},
|
||||
{0x0000042D, 1252, 850, 10000, L"Basque", 217, LatinFonts, euESLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BE_BY
|
||||
{L"00000423", 1251, 866, 10007, L"Belarusian", 29, CyrillicFonts, beBYLayouts},
|
||||
{0x00000423, 1251, 866, 10007, L"Belarusian", 29, CyrillicFonts, beBYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BN_BD
|
||||
{L"00000845", 0, 1, 2, L"Bengali (Bangladesh)", 23, UnicodeFonts, bnBDLayouts},
|
||||
{0x00000845, 0, 1, 2, L"Bengali (Bangladesh)", 23, UnicodeFonts, bnBDLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BN_IN
|
||||
{L"00000445", 0, 1, 2, L"Bengali (India)", 113, UnicodeFonts, bnINLayouts},
|
||||
{0x00000445, 0, 1, 2, L"Bengali (India)", 113, UnicodeFonts, bnINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BG_BG
|
||||
{L"00000402", 1251, 866, 10007, L"Bulgarian", 35, CyrillicFonts, bgBGLayouts},
|
||||
{0x00000402, 1251, 866, 10007, L"Bulgarian", 35, CyrillicFonts, bgBGLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MY_MM
|
||||
{L"00000455", 0, 1, 2, L"Burmese", 1, UnicodeFonts, myMMLayouts},
|
||||
{0x00000455, 0, 1, 2, L"Burmese", 1, UnicodeFonts, myMMLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_CA_ES
|
||||
{L"00000403", 1252, 850, 10000, L"Catalan", 217, LatinFonts, caESLayouts},
|
||||
{0x00000403, 1252, 850, 10000, L"Catalan", 217, LatinFonts, caESLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
{L"00000404", 950, 950, 10008, L"Chinese (Taiwan)", 237, ChineseTraditionalFonts, zhTWLayouts},
|
||||
{0x00000404, 950, 950, 10008, L"Chinese (Taiwan)", 237, ChineseTraditionalFonts, zhTWLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
{L"00000804", 936, 936, 10008, L"Chinese (PRC)", 45, ChineseSimplifiedFonts, zhCNLayouts},
|
||||
{0x00000804, 936, 936, 10008, L"Chinese (PRC)", 45, ChineseSimplifiedFonts, zhCNLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_HK
|
||||
{L"00000C04", 950, 950, 10008, L"Chinese (Hong Kong S.A.R.)", 104, ChineseTraditionalFonts, zhHKLayouts},
|
||||
{0x00000C04, 950, 950, 10008, L"Chinese (Hong Kong S.A.R.)", 104, ChineseTraditionalFonts, zhHKLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_SG
|
||||
{L"00001004", 936, 936, 10008, L"Chinese (Singapore)", 215, ChineseSimplifiedFonts, zhSGLayouts},
|
||||
{0x00001004, 936, 936, 10008, L"Chinese (Singapore)", 215, ChineseSimplifiedFonts, zhSGLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_MO
|
||||
{L"00001404", 950, 950, 10002, L"Chinese (Macau S.A.R.)", 151, ChineseTraditionalFonts, zhMOLayouts},
|
||||
{0x00001404, 950, 950, 10002, L"Chinese (Macau S.A.R.)", 151, ChineseTraditionalFonts, zhMOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HR_HR
|
||||
{L"0000041A", 1250, 852, 10029, L"Croatian", 108, LatinFonts, hrHRLayouts},
|
||||
{0x0000041A, 1250, 852, 10029, L"Croatian", 108, LatinFonts, hrHRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
{L"00000405", 1250, 852, 10029, L"Czech", 75, LatinFonts, csCZLayouts},
|
||||
{0x00000405, 1250, 852, 10029, L"Czech", 75, LatinFonts, csCZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DA_DK
|
||||
{L"00000406", 1252, 850, 10000, L"Danish", 61, LatinFonts, daDKLayouts},
|
||||
{0x00000406, 1252, 850, 10000, L"Danish", 61, LatinFonts, daDKLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DV_MV
|
||||
{L"00000465", 0, 1, 2, L"Dhivehi (Maldives)", 165, UnicodeFonts, dvMVLayouts},
|
||||
{0x00000465, 0, 1, 2, L"Dhivehi (Maldives)", 165, UnicodeFonts, dvMVLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NL_NL
|
||||
{L"00000413", 1252, 850, 10000, L"Dutch (Netherlands)", 176, LatinFonts, nlNLLayouts},
|
||||
{0x00000413, 1252, 850, 10000, L"Dutch (Netherlands)", 176, LatinFonts, nlNLLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NL_BE
|
||||
{L"00000813", 1252, 850, 10000, L"Dutch (Belgium)", 21, LatinFonts, nlBELayouts},
|
||||
{0x00000813, 1252, 850, 10000, L"Dutch (Belgium)", 21, LatinFonts, nlBELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
{L"00000409", 1252, 437, 10000, L"English (United States)", 244, LatinFonts, enUSLayouts},
|
||||
{0x00000409, 1252, 437, 10000, L"English (United States)", 244, LatinFonts, enUSLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_GB
|
||||
{L"00000809", 1252, 850, 10000, L"English (United Kingdom)", 242, LatinFonts, enGBLayouts},
|
||||
{0x00000809, 1252, 850, 10000, L"English (United Kingdom)", 242, LatinFonts, enGBLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_AU
|
||||
{L"00000C09", 1252, 850, 10000, L"English (Australia)", 12, LatinFonts, enAULayouts},
|
||||
{0x00000C09, 1252, 850, 10000, L"English (Australia)", 12, LatinFonts, enAULayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_CA
|
||||
{L"00001009", 1252, 850, 10000, L"English (Canada)", 39, LatinFonts, enCALayouts},
|
||||
{0x00001009, 1252, 850, 10000, L"English (Canada)", 39, LatinFonts, enCALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_NZ
|
||||
{L"00001409", 1252, 850, 10000, L"English (New Zealand)", 183, LatinFonts, enNZLayouts},
|
||||
{0x00001409, 1252, 850, 10000, L"English (New Zealand)", 183, LatinFonts, enNZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_IE
|
||||
{L"00001809", 1252, 850, 10000, L"English (Ireland)", 68, LatinFonts, enIELayouts},
|
||||
{0x00001809, 1252, 850, 10000, L"English (Ireland)", 68, LatinFonts, enIELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_ZA
|
||||
{L"00001C09", 1252, 437, 10000, L"English (South Africa)", 209, LatinFonts, enZALayouts},
|
||||
{0x00001C09, 1252, 437, 10000, L"English (South Africa)", 209, LatinFonts, enZALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_JM
|
||||
{L"00002009", 1252, 850, 10000, L"English (Jamaica)", 124, LatinFonts, enJMLayouts},
|
||||
{0x00002009, 1252, 850, 10000, L"English (Jamaica)", 124, LatinFonts, enJMLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_CB
|
||||
{L"00002409", 1252, 850, 10000, L"English (Caribbean)", 1, LatinFonts, enCBLayouts},
|
||||
{0x00002409, 1252, 850, 10000, L"English (Caribbean)", 1, LatinFonts, enCBLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_BZ
|
||||
{L"00002809", 1252, 850, 10000, L"English (Belize)", 24, LatinFonts, enBZLayouts},
|
||||
{0x00002809, 1252, 850, 10000, L"English (Belize)", 24, LatinFonts, enBZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_TT
|
||||
{L"00002C09", 1252, 850, 10000, L"English (Trinidad)", 225, LatinFonts, enTTLayouts},
|
||||
{0x00002C09, 1252, 850, 10000, L"English (Trinidad)", 225, LatinFonts, enTTLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_ZW
|
||||
{L"00003009", 1252, 437, 10000, L"English (Zimbabwe)", 264, LatinFonts, enZWLayouts},
|
||||
{0x00003009, 1252, 437, 10000, L"English (Zimbabwe)", 264, LatinFonts, enZWLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_PH
|
||||
{L"00003409", 1252, 437, 10000, L"English (Philippines)", 201, LatinFonts, enPHLayouts},
|
||||
{0x00003409, 1252, 437, 10000, L"English (Philippines)", 201, LatinFonts, enPHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EO_AA
|
||||
{L"0000048F", 1252, 437, 10000, L"Esperanto", 1, LatinFonts, eoAALayouts},
|
||||
{0x0000048F, 1252, 437, 10000, L"Esperanto", 1, LatinFonts, eoAALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ET_EE
|
||||
{L"00000425", 1252, 775, 10029, L"Estonian", 70, LatinFonts, etEELayouts},
|
||||
{0x00000425, 1252, 775, 10029, L"Estonian", 70, LatinFonts, etEELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FO_FO
|
||||
{L"00000438", 1252, 850, 10079, L"Faeroese", 81, LatinFonts, foFOLayouts},
|
||||
{0x00000438, 1252, 850, 10079, L"Faeroese", 81, LatinFonts, foFOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FA_IR
|
||||
{L"00000429", 1256, 720, 10004, L"Farsi", 116, UnicodeFonts, faIRLayouts},
|
||||
{0x00000429, 1256, 720, 10004, L"Farsi", 116, UnicodeFonts, faIRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FI_FI
|
||||
{L"0000040B", 1252, 850, 10000, L"Finnish", 77, LatinFonts, fiFILayouts},
|
||||
{0x0000040B, 1252, 850, 10000, L"Finnish", 77, LatinFonts, fiFILayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_CA
|
||||
{L"00000C0C", 1252, 850, 10000, L"French (Canada)", 39, LatinFonts, frCALayouts},
|
||||
{0x00000C0C, 1252, 850, 10000, L"French (Canada)", 39, LatinFonts, frCALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
{L"0000040C", 1252, 850, 10000, L"French (France)", 84, LatinFonts, frFRLayouts},
|
||||
{0x0000040C, 1252, 850, 10000, L"French (France)", 84, LatinFonts, frFRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_BE
|
||||
{L"0000080C", 1252, 850, 10000, L"French (Belgium)", 21, LatinFonts, frBELayouts},
|
||||
{0x0000080C, 1252, 850, 10000, L"French (Belgium)", 21, LatinFonts, frBELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_CH
|
||||
{L"0000100C", 1252, 850, 10000, L"French (Switzerland)", 223, LatinFonts, frCHLayouts},
|
||||
{0x0000100C, 1252, 850, 10000, L"French (Switzerland)", 223, LatinFonts, frCHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_LU
|
||||
{L"0000140C", 1252, 850, 10000, L"French (Luxembourg)", 147, LatinFonts, frLULayouts},
|
||||
{0x0000140C, 1252, 850, 10000, L"French (Luxembourg)", 147, LatinFonts, frLULayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_MC
|
||||
{L"0000180C", 1252, 850, 10000, L"French (Monaco)", 158, LatinFonts, frMCLayouts},
|
||||
{0x0000180C, 1252, 850, 10000, L"French (Monaco)", 158, LatinFonts, frMCLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_GL_ES
|
||||
{L"00000456", 1252, 850, 10000, L"Galician (Spain)", 217, LatinFonts, glESLayouts},
|
||||
{0x00000456, 1252, 850, 10000, L"Galician (Spain)", 217, LatinFonts, glESLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KA_GE
|
||||
{L"00000437", 0, 1, 2, L"Georgian", 88, UnicodeFonts, kaGELayouts},
|
||||
{0x00000437, 0, 1, 2, L"Georgian", 88, UnicodeFonts, kaGELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
{L"00000407", 1252, 850, 10000, L"German (Germany)", 94, LatinFonts, deDELayouts},
|
||||
{0x00000407, 1252, 850, 10000, L"German (Germany)", 94, LatinFonts, deDELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_CH
|
||||
{L"00000807", 1252, 850, 10000, L"German (Switzerland)", 223, LatinFonts, deCHLayouts},
|
||||
{0x00000807, 1252, 850, 10000, L"German (Switzerland)", 223, LatinFonts, deCHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_AT
|
||||
{L"00000C07", 1252, 850, 10000, L"German (Austria)", 14, LatinFonts, deATLayouts},
|
||||
{0x00000C07, 1252, 850, 10000, L"German (Austria)", 14, LatinFonts, deATLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_LU
|
||||
{L"00001007", 1252, 850, 10000, L"German (Luxembourg)", 147, LatinFonts, deLULayouts},
|
||||
{0x00001007, 1252, 850, 10000, L"German (Luxembourg)", 147, LatinFonts, deLULayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_LI
|
||||
{L"00001407", 1252, 850, 10000, L"German (Liechtenstein)", 145, LatinFonts, deLILayouts},
|
||||
{0x00001407, 1252, 850, 10000, L"German (Liechtenstein)", 145, LatinFonts, deLILayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EL_GR
|
||||
{L"00000408", 1253, 737, 10006, L"Greek", 98, GreekFonts, elGRLayouts},
|
||||
{0x00000408, 1253, 737, 10006, L"Greek", 98, GreekFonts, elGRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_GU_IN
|
||||
{L"00000447", 0, 1, 2, L"Gujarati (India)", 113, UnicodeFonts, guINLayouts},
|
||||
{0x00000447, 0, 1, 2, L"Gujarati (India)", 113, UnicodeFonts, guINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HE_IL
|
||||
{L"0000040D", 1255, 862, 10005, L"Hebrew", 117, HebrewFonts, heILLayouts},
|
||||
{0x0000040D, 1255, 862, 10005, L"Hebrew", 117, HebrewFonts, heILLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HI_IN
|
||||
{L"00000439", 1252, 437, 10000, L"Hindi", 113, HindiFonts, hiINLayouts },
|
||||
{0x00000439, 1252, 437, 10000, L"Hindi", 113, HindiFonts, hiINLayouts },
|
||||
#endif
|
||||
#ifdef LANGUAGE_HU_HU
|
||||
{L"0000040E", 1250, 852, 10029, L"Hungarian", 109, LatinFonts, huHULayouts},
|
||||
{0x0000040E, 1250, 852, 10029, L"Hungarian", 109, LatinFonts, huHULayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_IS_IS
|
||||
{L"0000040F", 1252, 850, 10079, L"Icelandic", 110, LatinFonts, isISLayouts},
|
||||
{0x0000040F, 1252, 850, 10079, L"Icelandic", 110, LatinFonts, isISLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ID_ID
|
||||
{L"00000421", 1252, 850, 10079, L"Indonesian", 111, LatinFonts, idIDLayouts},
|
||||
{0x00000421, 1252, 850, 10079, L"Indonesian", 111, LatinFonts, idIDLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_IT
|
||||
{L"00000410", 1252, 850, 10000, L"Italian (Italy)", 118, LatinFonts, itITLayouts},
|
||||
{0x00000410, 1252, 850, 10000, L"Italian (Italy)", 118, LatinFonts, itITLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_CH
|
||||
{L"00000810", 1252, 850, 10000, L"Italian (Switzerland)", 223, LatinFonts, itCHLayouts},
|
||||
{0x00000810, 1252, 850, 10000, L"Italian (Switzerland)", 223, LatinFonts, itCHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_JA_JP
|
||||
{L"00000411", 932, 932, 10001, L"Japanese", 122, JapaneseFonts, jaJPLayouts},
|
||||
{0x00000411, 932, 932, 10001, L"Japanese", 122, JapaneseFonts, jaJPLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KN_IN
|
||||
{L"0000044B", 1252, 437, 10079, L"Kannada (India)", 113, LatinFonts, knINLayouts},
|
||||
{0x0000044B, 1252, 437, 10079, L"Kannada (India)", 113, LatinFonts, knINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KK_KZ
|
||||
{L"0000043F", 1251, 866, 10007, L"Kazakh", 137, CyrillicFonts, kkKZLayouts},
|
||||
{0x0000043F, 1251, 866, 10007, L"Kazakh", 137, CyrillicFonts, kkKZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KOK_IN
|
||||
{L"00000457", 0, 437, 2, L"Konkani", 113, UnicodeFonts, kokINLayouts},
|
||||
{0x00000457, 0, 437, 2, L"Konkani", 113, UnicodeFonts, kokINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KO_KR
|
||||
{L"00000412", 949, 949, 10003, L"Korean", 134, KoreanFonts, koKRLayouts},
|
||||
{0x00000412, 949, 949, 10003, L"Korean", 134, KoreanFonts, koKRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KY_KG
|
||||
{L"00000440", 1251, 866, 10007, L"Kyrgyz (Kyrgyzstan)", 130, CyrillicFonts, kyKGLayouts},
|
||||
{0x00000440, 1251, 866, 10007, L"Kyrgyz (Kyrgyzstan)", 130, CyrillicFonts, kyKGLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_LV_LV
|
||||
{L"00000426", 1257, 775, 10029, L"Latvian", 140, LatinFonts, lvLVLayouts},
|
||||
{0x00000426, 1257, 775, 10029, L"Latvian", 140, LatinFonts, lvLVLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_LT_LT
|
||||
{L"00000427", 1257, 775, 10029, L"Lithuanian", 141, LatinFonts, ltLTLayouts},
|
||||
{0x00000427, 1257, 775, 10029, L"Lithuanian", 141, LatinFonts, ltLTLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MK_MK
|
||||
{L"0000042F", 1251, 866, 10007, L"FYRO Macedonian", 19618, CyrillicFonts, mkMKLayouts},
|
||||
{0x0000042F, 1251, 866, 10007, L"FYRO Macedonian", 19618, CyrillicFonts, mkMKLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MS_BN
|
||||
{L"0000083E", 1252, 850, 10000, L"Malay (Brunei Darussalam)", 37, LatinFonts, msBNLayouts},
|
||||
{0x0000083E, 1252, 850, 10000, L"Malay (Brunei Darussalam)", 37, LatinFonts, msBNLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MS_MY
|
||||
{L"0000043E", 1252, 850, 10000, L"Malay (Malaysia)", 167, LatinFonts, msMYLayouts},
|
||||
{0x0000043E, 1252, 850, 10000, L"Malay (Malaysia)", 167, LatinFonts, msMYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MR_IN
|
||||
{L"0000044E", 0, 1, 2, L"Marathi", 113, UnicodeFonts, mrINLayouts},
|
||||
{0x0000044E, 0, 1, 2, L"Marathi", 113, UnicodeFonts, mrINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MN_MN
|
||||
{L"00000450", 1251, 866, 10007, L"Mongolian (Mongolia)", 154, CyrillicFonts, mnMNLayouts},
|
||||
{0x00000450, 1251, 866, 10007, L"Mongolian (Mongolia)", 154, CyrillicFonts, mnMNLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NB_NO
|
||||
{L"00000414", 1252, 850, 10000, L"Norwegian (Bokmal)", 177, LatinFonts, nbNOLayouts},
|
||||
{0x00000414, 1252, 850, 10000, L"Norwegian (Bokmal)", 177, LatinFonts, nbNOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NN_NO
|
||||
{L"00000814", 1252, 850, 10000, L"Norwegian (Nynorsk)", 177, LatinFonts, nnNOLayouts},
|
||||
{0x00000814, 1252, 850, 10000, L"Norwegian (Nynorsk)", 177, LatinFonts, nnNOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PL_PL
|
||||
{L"00000415", 1250, 852, 10029, L"Polish", 191, LatinFonts, plPLLayouts},
|
||||
{0x00000415, 1250, 852, 10029, L"Polish", 191, LatinFonts, plPLLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PT_PT
|
||||
{L"00000816", 1252, 850, 10000, L"Portuguese (Portugal)", 193, LatinFonts, ptPTLayouts},
|
||||
{0x00000816, 1252, 850, 10000, L"Portuguese (Portugal)", 193, LatinFonts, ptPTLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PT_BR
|
||||
{L"00000416", 1252, 850, 10000, L"Portuguese (Brazil)", 32, LatinFonts, ptBRLayouts},
|
||||
{0x00000416, 1252, 850, 10000, L"Portuguese (Brazil)", 32, LatinFonts, ptBRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PA_IN
|
||||
{L"00000446", 0, 1, 2, L"Punjabi (India)", 113, UnicodeFonts, paINLayouts},
|
||||
{0x00000446, 0, 1, 2, L"Punjabi (India)", 113, UnicodeFonts, paINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
{L"00000418", 28606, 28606, 10029, L"Romanian", 200, LatinFonts, roROLayouts},
|
||||
{0x00000418, 28606, 28606, 10029, L"Romanian", 200, LatinFonts, roROLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_RM_CH
|
||||
{L"00000417", 1252, 850, 10000, L"Romansh", 223, LatinFonts, rmCHLayouts},
|
||||
{0x00000417, 1252, 850, 10000, L"Romansh", 223, LatinFonts, rmCHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
{L"00000419", 1251, 866, 10007, L"Russian", 203, CyrillicFonts, ruRULayouts},
|
||||
{0x00000419, 1251, 866, 10007, L"Russian", 203, CyrillicFonts, ruRULayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SA_IN
|
||||
{L"0000044F", 0, 1, 2, L"Sanskrit", 113, UnicodeFonts, saINLayouts},
|
||||
{0x0000044F, 0, 1, 2, L"Sanskrit", 113, UnicodeFonts, saINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SR_SP
|
||||
{L"00000C1A", 1251, 855, 10007, L"Serbian (Cyrillic)", 271, CyrillicFonts, srSPLayouts},
|
||||
{0x00000C1A, 1251, 855, 10007, L"Serbian (Cyrillic)", 271, CyrillicFonts, srSPLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SR_SP
|
||||
{L"0000081A", 1250, 852, 10029, L"Serbian (Latin)", 271, LatinFonts, srSPLayouts},
|
||||
{0x0000081A, 1250, 852, 10029, L"Serbian (Latin)", 271, LatinFonts, srSPLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SK_SK
|
||||
{L"0000041B", 1250, 852, 10029, L"Slovak", 143, LatinFonts, skSKLayouts},
|
||||
{0x0000041B, 1250, 852, 10029, L"Slovak", 143, LatinFonts, skSKLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SL_SI
|
||||
{L"00000424", 1250, 852, 10029, L"Slovenian", 212, LatinFonts, slSILayouts},
|
||||
{0x00000424, 1250, 852, 10029, L"Slovenian", 212, LatinFonts, slSILayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
{L"0000040A", 1252, 850, 10000, L"Spanish (Traditional Sort)", 217, LatinFonts, esESLayouts},
|
||||
{0x0000040A, 1252, 850, 10000, L"Spanish (Traditional Sort)", 217, LatinFonts, esESLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_MX
|
||||
{L"0000080A", 1252, 850, 10000, L"Spanish (Mexico)", 166, LatinFonts, esMXLayouts},
|
||||
{0x0000080A, 1252, 850, 10000, L"Spanish (Mexico)", 166, LatinFonts, esMXLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
{L"00000C0A", 1252, 850, 10000, L"Spanish (International Sort)", 217, LatinFonts, esESLayouts},
|
||||
{0x00000C0A, 1252, 850, 10000, L"Spanish (International Sort)", 217, LatinFonts, esESLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_GT
|
||||
{L"0000100A", 1252, 850, 10000, L"Spanish (Guatemala)", 99, LatinFonts, esGTLayouts},
|
||||
{0x0000100A, 1252, 850, 10000, L"Spanish (Guatemala)", 99, LatinFonts, esGTLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_CR
|
||||
{L"0000140A", 1252, 850, 10000, L"Spanish (Costa Rica)", 54, LatinFonts, esCRLayouts},
|
||||
{0x0000140A, 1252, 850, 10000, L"Spanish (Costa Rica)", 54, LatinFonts, esCRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PA
|
||||
{L"0000180A", 1252, 850, 10000, L"Spanish (Panama)", 192, LatinFonts, esPALayouts},
|
||||
{0x0000180A, 1252, 850, 10000, L"Spanish (Panama)", 192, LatinFonts, esPALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_DO
|
||||
{L"00001C0A", 1252, 850, 10000, L"Spanish (Dominican Republic)", 65, LatinFonts, esDOLayouts},
|
||||
{0x00001C0A, 1252, 850, 10000, L"Spanish (Dominican Republic)", 65, LatinFonts, esDOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_VE
|
||||
{L"0000200A", 1252, 850, 10000, L"Spanish (Venezuela)", 249, LatinFonts, esVELayouts},
|
||||
{0x0000200A, 1252, 850, 10000, L"Spanish (Venezuela)", 249, LatinFonts, esVELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_CO
|
||||
{L"0000240A", 1252, 850, 10000, L"Spanish (Colombia)", 51, LatinFonts, esCOLayouts},
|
||||
{0x0000240A, 1252, 850, 10000, L"Spanish (Colombia)", 51, LatinFonts, esCOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PE
|
||||
{L"0000280A", 1252, 850, 10000, L"Spanish (Peru)", 187, LatinFonts, esPELayouts},
|
||||
{0x0000280A, 1252, 850, 10000, L"Spanish (Peru)", 187, LatinFonts, esPELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_AR
|
||||
{L"00002C0A", 1252, 850, 10000, L"Spanish (Argentina)", 11, LatinFonts, esARLayouts},
|
||||
{0x00002C0A, 1252, 850, 10000, L"Spanish (Argentina)", 11, LatinFonts, esARLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_EC
|
||||
{L"0000300A", 1252, 850, 10000, L"Spanish (Ecuador)", 66, LatinFonts, esECLayouts},
|
||||
{0x0000300A, 1252, 850, 10000, L"Spanish (Ecuador)", 66, LatinFonts, esECLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_CL
|
||||
{L"0000340A", 1252, 850, 10000, L"Spanish (Chile)", 46, LatinFonts, esCLLayouts},
|
||||
{0x0000340A, 1252, 850, 10000, L"Spanish (Chile)", 46, LatinFonts, esCLLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_UY
|
||||
{L"0000380A", 1252, 850, 10000, L"Spanish (Uruguay)", 246, LatinFonts, esUYLayouts},
|
||||
{0x0000380A, 1252, 850, 10000, L"Spanish (Uruguay)", 246, LatinFonts, esUYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PY
|
||||
{L"00003C0A", 1252, 850, 10000, L"Spanish (Paraguay)", 185, LatinFonts, esPYLayouts},
|
||||
{0x00003C0A, 1252, 850, 10000, L"Spanish (Paraguay)", 185, LatinFonts, esPYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_BO
|
||||
{L"0000400A", 1252, 850, 10000, L"Spanish (Bolivia)", 26, LatinFonts, esBOLayouts},
|
||||
{0x0000400A, 1252, 850, 10000, L"Spanish (Bolivia)", 26, LatinFonts, esBOLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_SV
|
||||
{L"0000440A", 1252, 850, 10000, L"Spanish (El Salvador)", 72, LatinFonts, esSVLayouts},
|
||||
{0x0000440A, 1252, 850, 10000, L"Spanish (El Salvador)", 72, LatinFonts, esSVLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_HN
|
||||
{L"0000480A", 1252, 850, 10000, L"Spanish (Honduras)", 106, LatinFonts, esHNLayouts},
|
||||
{0x0000480A, 1252, 850, 10000, L"Spanish (Honduras)", 106, LatinFonts, esHNLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_NI
|
||||
{L"00004C0A", 1252, 850, 10000, L"Spanish (Nicaragua)", 182, LatinFonts, esNILayouts},
|
||||
{0x00004C0A, 1252, 850, 10000, L"Spanish (Nicaragua)", 182, LatinFonts, esNILayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PR
|
||||
{L"0000500A", 1252, 850, 10000, L"Spanish (Puerto Rico)", 202, LatinFonts, esPRLayouts},
|
||||
{0x0000500A, 1252, 850, 10000, L"Spanish (Puerto Rico)", 202, LatinFonts, esPRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SW_KE
|
||||
{L"00000441", 1252, 437, 10000, L"Swahili", 129, LatinFonts, swKELayouts},
|
||||
{0x00000441, 1252, 437, 10000, L"Swahili", 129, LatinFonts, swKELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_SE
|
||||
{L"0000041D", 1252, 850, 10000, L"Swedish", 221, LatinFonts, svSELayouts},
|
||||
{0x0000041D, 1252, 850, 10000, L"Swedish", 221, LatinFonts, svSELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_FI
|
||||
{L"0000081D", 1252, 850, 10000, L"Swedish (Finland)", 77, LatinFonts, svFILayouts},
|
||||
{0x0000081D, 1252, 850, 10000, L"Swedish (Finland)", 77, LatinFonts, svFILayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SYR_SY
|
||||
{L"0000045A", 0, 1, 2, L"Syriac (Syria)", 222, UnicodeFonts, syrSYLayouts},
|
||||
{0x0000045A, 0, 1, 2, L"Syriac (Syria)", 222, UnicodeFonts, syrSYLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TA_IN
|
||||
{L"00000449", 0, 1, 2, L"Tamil", 113, UnicodeFonts, taINLayouts},
|
||||
{0x00000449, 0, 1, 2, L"Tamil", 113, UnicodeFonts, taINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TT_TA
|
||||
{L"00000444", 1251, 866, 10007, L"Tatar", 1, CyrillicFonts, ttTALayouts},
|
||||
{0x00000444, 1251, 866, 10007, L"Tatar", 1, CyrillicFonts, ttTALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TE_IN
|
||||
{L"0000044A", 0, 1, 2, L"Telugu (India)", 113, UnicodeFonts, teINLayouts},
|
||||
{0x0000044A, 0, 1, 2, L"Telugu (India)", 113, UnicodeFonts, teINLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TH_TH
|
||||
{L"0000041E", 874, 874, 10021, L"Thai", 227, UnicodeFonts, thTHLayouts},
|
||||
{0x0000041E, 874, 874, 10021, L"Thai", 227, UnicodeFonts, thTHLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
{L"0000041F", 1254, 857, 10081, L"Turkish", 235, LatinFonts, trTRLayouts},
|
||||
{0x0000041F, 1254, 857, 10081, L"Turkish", 235, LatinFonts, trTRLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UK_UA
|
||||
{L"00000422", 1251, 866, 10017, L"Ukrainian", 241, CyrillicFonts, ukUALayouts},
|
||||
{0x00000422, 1251, 866, 10017, L"Ukrainian", 241, CyrillicFonts, ukUALayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UR_PK
|
||||
{L"00000420", 1256, 720, 10004, L"Urdu", 190, UnicodeFonts, urPKLayouts},
|
||||
{0x00000420, 1256, 720, 10004, L"Urdu", 190, UnicodeFonts, urPKLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UZ_UZ
|
||||
{L"00000443", 1254, 857, 10029, L"Uzbek (Latin)", 247, LatinFonts, uzUZLayouts},
|
||||
{0x00000443, 1254, 857, 10029, L"Uzbek (Latin)", 247, LatinFonts, uzUZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UZ_UZ
|
||||
{L"00000843", 1251, 866, 10007, L"Uzbek (Cyrillic)", 247, CyrillicFonts, uzUZLayouts},
|
||||
{0x00000843, 1251, 866, 10007, L"Uzbek (Cyrillic)", 247, CyrillicFonts, uzUZLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_VI_VN
|
||||
{L"0000042A", 1258, 1258, 10000, L"Vietnamese", 251, UnicodeFonts, viVNLayouts},
|
||||
{0x0000042A, 1258, 1258, 10000, L"Vietnamese", 251, UnicodeFonts, viVNLayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_WA_BE
|
||||
{L"00000490", 1252, 850, 10000, L"Walon", 21, LatinFonts, waBELayouts},
|
||||
{0x00000490, 1252, 850, 10000, L"Walon", 21, LatinFonts, waBELayouts},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZU_ZU
|
||||
{L"00000435", 1252, 850, 10000, L"Zulu", 1, LatinFonts, zuZULayouts},
|
||||
{0x00000435, 1252, 850, 10000, L"Zulu", 1, LatinFonts, zuZULayouts},
|
||||
#endif
|
||||
{NULL, 0, 0, 0, NULL, 0, NULL, NULL}
|
||||
{0, 0, 0, 0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -26,20 +26,105 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
/* Settings entries with simple 1:1 mapping */
|
||||
/* Setting entries with simple 1:1 mapping */
|
||||
typedef struct _GENENTRY
|
||||
{
|
||||
PCWSTR Id;
|
||||
union
|
||||
{
|
||||
PCWSTR Str;
|
||||
ULONG_PTR Ul;
|
||||
} Id;
|
||||
PCWSTR Value;
|
||||
} GENENTRY, *PGENENTRY;
|
||||
|
||||
#if 1
|
||||
PGENERIC_LIST
|
||||
CreateComputerTypeList(
|
||||
IN HINF InfFile);
|
||||
_In_ HINF InfFile);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateDisplayDriverList(
|
||||
IN HINF InfFile);
|
||||
_In_ HINF InfFile);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateKeyboardDriverList(
|
||||
_In_ HINF InfFile);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateLanguageList(
|
||||
_In_ HINF InfFile,
|
||||
_Inout_ LANGID* DefaultLanguage);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateKeyboardLayoutList(
|
||||
_In_ HINF InfFile,
|
||||
_In_ LANGID LanguageId,
|
||||
_Out_ KLID* DefaultKBLayout);
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Callback type for enumerating "Name=Value" entries from INF section.
|
||||
*
|
||||
* @param[in] KeyName
|
||||
* The name of the key.
|
||||
*
|
||||
* @param[in] KeyValue
|
||||
* The optional value of the key.
|
||||
*
|
||||
* @param[in] Parameter
|
||||
* Optional parameter context for the callback.
|
||||
*
|
||||
* @return
|
||||
* 0x00: Failure, stop the enumeration;
|
||||
* 0x01: Add the entry and continue the enumeration;
|
||||
* 0x02: Skip the entry but continue the enumeration.
|
||||
**/
|
||||
typedef UCHAR
|
||||
(NTAPI *PENUM_ENTRY_PROC)(
|
||||
_In_ PCWSTR KeyName,
|
||||
_In_opt_ PCWSTR KeyValue,
|
||||
/**/_In_ ULONG_PTR DefaultEntry,/**/ // PCWSTR DefaultKeyName
|
||||
_In_opt_ PVOID Parameter);
|
||||
|
||||
BOOLEAN
|
||||
EnumComputerTypeEntries(
|
||||
_In_ HINF InfFile,
|
||||
_In_ PENUM_ENTRY_PROC EnumEntryProc,
|
||||
_In_opt_ PVOID Parameter);
|
||||
|
||||
BOOLEAN
|
||||
EnumDisplayDriverEntries(
|
||||
_In_ HINF InfFile,
|
||||
_In_ PENUM_ENTRY_PROC EnumEntryProc,
|
||||
_In_opt_ PVOID Parameter);
|
||||
|
||||
BOOLEAN
|
||||
EnumKeyboardDriverEntries(
|
||||
_In_ HINF InfFile,
|
||||
_In_ PENUM_ENTRY_PROC EnumEntryProc,
|
||||
_In_opt_ PVOID Parameter);
|
||||
|
||||
BOOLEAN
|
||||
EnumLanguageEntries(
|
||||
_In_ HINF InfFile,
|
||||
_Out_ LANGID* DefaultLanguage,
|
||||
_In_ PENUM_ENTRY_PROC EnumEntryProc,
|
||||
_In_opt_ PVOID Parameter);
|
||||
|
||||
BOOLEAN
|
||||
EnumKeyboardLayoutEntries(
|
||||
_In_ HINF InfFile,
|
||||
_In_ LANGID LanguageId,
|
||||
_Out_ KLID* DefaultKBLayout,
|
||||
_In_ PENUM_ENTRY_PROC EnumEntryProc,
|
||||
_In_opt_ PVOID Parameter);
|
||||
|
||||
|
||||
ULONG
|
||||
GetDefaultLanguageIndex(VOID);
|
||||
|
||||
|
||||
BOOLEAN
|
||||
ProcessComputerFiles(
|
||||
|
@ -52,28 +137,10 @@ ProcessDisplayRegistry(
|
|||
_In_ HINF InfFile,
|
||||
_In_ PCWSTR DisplayType);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateKeyboardDriverList(
|
||||
IN HINF InfFile);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateKeyboardLayoutList(
|
||||
IN HINF InfFile,
|
||||
IN PCWSTR LanguageId,
|
||||
OUT PWSTR DefaultKBLayout);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateLanguageList(
|
||||
IN HINF InfFile,
|
||||
OUT PWSTR DefaultLanguage);
|
||||
|
||||
ULONG
|
||||
GetDefaultLanguageIndex(VOID);
|
||||
|
||||
BOOLEAN
|
||||
ProcessKeyboardLayoutRegistry(
|
||||
_In_ PCWSTR pszLayoutId,
|
||||
_In_ PCWSTR LanguageId);
|
||||
_In_ KLID LayoutId,
|
||||
_In_ LANGID LanguageId);
|
||||
|
||||
#if 0
|
||||
BOOLEAN
|
||||
|
@ -83,7 +150,7 @@ ProcessKeyboardLayoutFiles(
|
|||
|
||||
BOOLEAN
|
||||
ProcessLocaleRegistry(
|
||||
_In_ PCWSTR LanguageId);
|
||||
_In_ LCID LocaleId);
|
||||
|
||||
BOOLEAN
|
||||
SetGeoID(
|
||||
|
|
|
@ -50,7 +50,7 @@ CheckUnattendedSetup(
|
|||
UnattendInf = SpInfOpenInfFile(UnattendInfPath,
|
||||
NULL,
|
||||
INF_STYLE_OLDNT,
|
||||
pSetupData->LanguageId,
|
||||
LANGIDFROMLCID(pSetupData->LocaleID),
|
||||
&ErrorLine);
|
||||
if (UnattendInf == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -179,10 +179,7 @@ CheckUnattendedSetup(
|
|||
{
|
||||
if (INF_GetData(&Context, NULL, &Value))
|
||||
{
|
||||
LONG Id = wcstol(Value, NULL, 16);
|
||||
RtlStringCchPrintfW(pSetupData->LocaleID,
|
||||
ARRAYSIZE(pSetupData->LocaleID),
|
||||
L"%08lx", Id);
|
||||
pSetupData->LocaleID = (LCID)wcstoul(Value, NULL, 16);
|
||||
INF_FreeData(Value);
|
||||
}
|
||||
}
|
||||
|
@ -572,7 +569,7 @@ LoadSetupInf(
|
|||
SpInfOpenInfFile(FileNameBuffer,
|
||||
NULL,
|
||||
INF_STYLE_WIN4,
|
||||
pSetupData->LanguageId,
|
||||
LANGIDFROMLCID(pSetupData->LocaleID),
|
||||
&ErrorLine);
|
||||
if (pSetupData->SetupInf == INVALID_HANDLE_VALUE)
|
||||
return ERROR_LOAD_TXTSETUPSIF;
|
||||
|
@ -1096,41 +1093,6 @@ VOID
|
|||
FinishSetup(
|
||||
IN OUT PUSETUP_DATA pSetupData)
|
||||
{
|
||||
/* Destroy the computer settings list */
|
||||
if (pSetupData->ComputerList != NULL)
|
||||
{
|
||||
DestroyGenericList(pSetupData->ComputerList, TRUE);
|
||||
pSetupData->ComputerList = NULL;
|
||||
}
|
||||
|
||||
/* Destroy the display settings list */
|
||||
if (pSetupData->DisplayList != NULL)
|
||||
{
|
||||
DestroyGenericList(pSetupData->DisplayList, TRUE);
|
||||
pSetupData->DisplayList = NULL;
|
||||
}
|
||||
|
||||
/* Destroy the keyboard settings list */
|
||||
if (pSetupData->KeyboardList != NULL)
|
||||
{
|
||||
DestroyGenericList(pSetupData->KeyboardList, TRUE);
|
||||
pSetupData->KeyboardList = NULL;
|
||||
}
|
||||
|
||||
/* Destroy the keyboard layout list */
|
||||
if (pSetupData->LayoutList != NULL)
|
||||
{
|
||||
DestroyGenericList(pSetupData->LayoutList, TRUE);
|
||||
pSetupData->LayoutList = NULL;
|
||||
}
|
||||
|
||||
/* Destroy the languages list */
|
||||
if (pSetupData->LanguageList != NULL)
|
||||
{
|
||||
DestroyGenericList(pSetupData->LanguageList, FALSE);
|
||||
pSetupData->LanguageList = NULL;
|
||||
}
|
||||
|
||||
/* Close the Setup INF */
|
||||
SpInfCloseInfFile(pSetupData->SetupInf);
|
||||
}
|
||||
|
@ -1148,7 +1110,6 @@ UpdateRegistry(
|
|||
/**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */
|
||||
/**/IN PPARTLIST PartitionList, /* HACK HACK! */
|
||||
/**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */
|
||||
/**/IN PCWSTR SelectedLanguageId, /* HACK HACK! */
|
||||
IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL,
|
||||
IN PFONTSUBSTSETTINGS SubstSettings OPTIONAL)
|
||||
{
|
||||
|
@ -1161,6 +1122,11 @@ UpdateRegistry(
|
|||
BOOLEAN Success;
|
||||
BOOLEAN ShouldRepairRegistry = FALSE;
|
||||
BOOLEAN Delete;
|
||||
LANGID SelectedLanguageId = LANGIDFROMLCID(pSetupData->LocaleID);
|
||||
|
||||
__debugbreak();
|
||||
|
||||
__debugbreak();
|
||||
|
||||
if (RepairUpdateFlag)
|
||||
{
|
||||
|
@ -1274,7 +1240,7 @@ DoUpdate:
|
|||
|
||||
if (!ImportRegistryFile(pSetupData->SourcePath.Buffer,
|
||||
File, Section,
|
||||
pSetupData->LanguageId, Delete))
|
||||
LANGIDFROMLCID(pSetupData->LocaleID), Delete))
|
||||
{
|
||||
DPRINT1("Importing %S failed\n", File);
|
||||
INF_FreeData(File);
|
||||
|
@ -1288,14 +1254,6 @@ DoUpdate:
|
|||
{
|
||||
/* See the explanation for this test above */
|
||||
|
||||
PGENERIC_LIST_ENTRY Entry;
|
||||
PCWSTR LanguageId; // LocaleID;
|
||||
|
||||
Entry = GetCurrentListEntry(pSetupData->DisplayList);
|
||||
ASSERT(Entry);
|
||||
pSetupData->DisplayType = ((PGENENTRY)GetListEntryData(Entry))->Id;
|
||||
ASSERT(pSetupData->DisplayType);
|
||||
|
||||
/* Update display registry settings */
|
||||
if (StatusRoutine) StatusRoutine(DisplaySettingsUpdate);
|
||||
if (!ProcessDisplayRegistry(pSetupData->SetupInf, pSetupData->DisplayType))
|
||||
|
@ -1304,14 +1262,9 @@ DoUpdate:
|
|||
goto Cleanup;
|
||||
}
|
||||
|
||||
Entry = GetCurrentListEntry(pSetupData->LanguageList);
|
||||
ASSERT(Entry);
|
||||
LanguageId = ((PGENENTRY)GetListEntryData(Entry))->Id;
|
||||
ASSERT(LanguageId);
|
||||
|
||||
/* Set the locale */
|
||||
if (StatusRoutine) StatusRoutine(LocaleSettingsUpdate);
|
||||
if (!ProcessLocaleRegistry(/*pSetupData->*/LanguageId))
|
||||
if (!ProcessLocaleRegistry(pSetupData->LocaleID))
|
||||
{
|
||||
ErrorNumber = ERROR_UPDATE_LOCALESETTINGS;
|
||||
goto Cleanup;
|
||||
|
@ -1327,12 +1280,7 @@ DoUpdate:
|
|||
|
||||
if (!IsUnattendedSetup)
|
||||
{
|
||||
Entry = GetCurrentListEntry(pSetupData->LayoutList);
|
||||
ASSERT(Entry);
|
||||
pSetupData->LayoutId = ((PGENENTRY)GetListEntryData(Entry))->Id;
|
||||
ASSERT(pSetupData->LayoutId);
|
||||
|
||||
/* Update keyboard layout settings with user-overridden values */
|
||||
/* Update keyboard layout settings with user overriden values */
|
||||
// FIXME: Wouldn't it be better to do it all at once
|
||||
// with the AddKeyboardLayouts() step?
|
||||
if (StatusRoutine) StatusRoutine(KeybSettingsUpdate);
|
||||
|
@ -1370,7 +1318,7 @@ DoUpdate:
|
|||
if (SubstSettings)
|
||||
{
|
||||
/* HACK */
|
||||
DoRegistryFontFixup(SubstSettings, wcstoul(SelectedLanguageId, NULL, 16));
|
||||
DoRegistryFontFixup(SubstSettings, SelectedLanguageId);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -27,13 +27,13 @@ extern HANDLE ProcessHeap;
|
|||
#include "errorcode.h"
|
||||
#include "spapisup/fileqsup.h"
|
||||
#include "spapisup/infsupp.h"
|
||||
#include "utils/linklist.h"
|
||||
#include "utils/linklist.h" // FIXME: Is this still needed?
|
||||
#include "utils/ntverrsrc.h"
|
||||
// #include "utils/arcname.h"
|
||||
#include "utils/bldrsup.h"
|
||||
#include "utils/filesup.h"
|
||||
#include "utils/fsrec.h"
|
||||
#include "utils/genlist.h"
|
||||
#include "utils/genlist.h" // FIXME: May be moved to usetup only
|
||||
#include "utils/inicache.h"
|
||||
#include "utils/partinfo.h"
|
||||
#include "utils/partlist.h"
|
||||
|
@ -126,24 +126,14 @@ typedef struct _USETUP_DATA
|
|||
LONG AutoPartition;
|
||||
LONG FsType;
|
||||
|
||||
/* Settings lists *****/
|
||||
PGENERIC_LIST ComputerList;
|
||||
PGENERIC_LIST DisplayList;
|
||||
PGENERIC_LIST KeyboardList;
|
||||
PGENERIC_LIST LayoutList;
|
||||
PGENERIC_LIST LanguageList;
|
||||
|
||||
/* Settings *****/
|
||||
ARCHITECTURE_TYPE ArchType; //< Target architecture (MachineType)
|
||||
PCWSTR ComputerType;
|
||||
PCWSTR DisplayType;
|
||||
// PCWSTR KeyboardDriver;
|
||||
PCWSTR KeyboardDriver;
|
||||
// PCWSTR MouseDriver;
|
||||
PCWSTR LayoutId; // DefaultKBLayout
|
||||
|
||||
/* Other stuff *****/
|
||||
WCHAR LocaleID[9];
|
||||
LANGID LanguageId;
|
||||
LCID LocaleID; // Or just LANGID LanguageId == LANGIDFROMLCID(LocaleID) ?
|
||||
KLID LayoutId; // DefaultKBLayout
|
||||
|
||||
ULONG RequiredPartitionDiskSpace;
|
||||
WCHAR InstallationDirectory[MAX_PATH];
|
||||
|
@ -241,7 +231,6 @@ UpdateRegistry(
|
|||
/**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */
|
||||
/**/IN PPARTLIST PartitionList, /* HACK HACK! */
|
||||
/**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */
|
||||
/**/IN PCWSTR SelectedLanguageId, /* HACK HACK! */
|
||||
IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL,
|
||||
IN PFONTSUBSTSETTINGS SubstSettings OPTIONAL);
|
||||
|
||||
|
|
|
@ -926,16 +926,16 @@ DeviceDlgProc(
|
|||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData);
|
||||
|
||||
hList = GetDlgItem(hwndDlg, IDC_COMPUTER);
|
||||
InitGenericComboList(hList, pSetupData->USetupData.ComputerList, GetSettingDescription);
|
||||
InitGenericComboList(hList, pSetupData->ComputerList, GetSettingDescription);
|
||||
|
||||
hList = GetDlgItem(hwndDlg, IDC_DISPLAY);
|
||||
InitGenericComboList(hList, pSetupData->USetupData.DisplayList, GetSettingDescription);
|
||||
InitGenericComboList(hList, pSetupData->DisplayList, GetSettingDescription);
|
||||
|
||||
hList = GetDlgItem(hwndDlg, IDC_KEYBOARD);
|
||||
InitGenericComboList(hList, pSetupData->USetupData.KeyboardList, GetSettingDescription);
|
||||
InitGenericComboList(hList, pSetupData->KeyboardList, GetSettingDescription);
|
||||
|
||||
// hList = GetDlgItem(hwndDlg, IDC_KEYBOARD_LAYOUT);
|
||||
// InitGenericComboList(hList, pSetupData->USetupData.LayoutList, GetSettingDescription);
|
||||
// InitGenericComboList(hList, pSetupData->LayoutList, GetSettingDescription);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -976,19 +976,19 @@ DeviceDlgProc(
|
|||
case PSN_WIZNEXT: /* Set the selected data */
|
||||
{
|
||||
hList = GetDlgItem(hwndDlg, IDC_COMPUTER);
|
||||
SetCurrentListEntry(pSetupData->USetupData.ComputerList,
|
||||
SetCurrentListEntry(pSetupData->ComputerList,
|
||||
GetSelectedComboListItem(hList));
|
||||
|
||||
hList = GetDlgItem(hwndDlg, IDC_DISPLAY);
|
||||
SetCurrentListEntry(pSetupData->USetupData.DisplayList,
|
||||
SetCurrentListEntry(pSetupData->DisplayList,
|
||||
GetSelectedComboListItem(hList));
|
||||
|
||||
hList = GetDlgItem(hwndDlg, IDC_KEYBOARD);
|
||||
SetCurrentListEntry(pSetupData->USetupData.KeyboardList,
|
||||
SetCurrentListEntry(pSetupData->KeyboardList,
|
||||
GetSelectedComboListItem(hList));
|
||||
|
||||
// hList = GetDlgItem(hwndDlg, IDC_KEYBOARD_LAYOUT);
|
||||
// SetCurrentListEntry(pSetupData->USetupData.LayoutList,
|
||||
// SetCurrentListEntry(pSetupData->LayoutList,
|
||||
// GetSelectedComboListItem(hList));
|
||||
|
||||
return TRUE;
|
||||
|
@ -1075,17 +1075,17 @@ SummaryDlgProc(
|
|||
SetDlgItemTextW(hwndDlg, IDC_INSTALLSOURCE, L"n/a");
|
||||
SetDlgItemTextW(hwndDlg, IDC_ARCHITECTURE, L"n/a");
|
||||
|
||||
GetSettingDescription(GetCurrentListEntry(pSetupData->USetupData.ComputerList),
|
||||
GetSettingDescription(GetCurrentListEntry(pSetupData->ComputerList),
|
||||
CurrentItemText,
|
||||
ARRAYSIZE(CurrentItemText));
|
||||
SetDlgItemTextW(hwndDlg, IDC_COMPUTER, CurrentItemText);
|
||||
|
||||
GetSettingDescription(GetCurrentListEntry(pSetupData->USetupData.DisplayList),
|
||||
GetSettingDescription(GetCurrentListEntry(pSetupData->DisplayList),
|
||||
CurrentItemText,
|
||||
ARRAYSIZE(CurrentItemText));
|
||||
SetDlgItemTextW(hwndDlg, IDC_DISPLAY, CurrentItemText);
|
||||
|
||||
GetSettingDescription(GetCurrentListEntry(pSetupData->USetupData.KeyboardList),
|
||||
GetSettingDescription(GetCurrentListEntry(pSetupData->KeyboardList),
|
||||
CurrentItemText,
|
||||
ARRAYSIZE(CurrentItemText));
|
||||
SetDlgItemTextW(hwndDlg, IDC_KEYBOARD, CurrentItemText);
|
||||
|
@ -2006,7 +2006,6 @@ PrepareAndDoCopyThread(
|
|||
pSetupData->RepairUpdateFlag,
|
||||
pSetupData->PartitionList,
|
||||
InstallVolume->Info.DriveLetter,
|
||||
pSetupData->SelectedLanguageId,
|
||||
RegistryStatus,
|
||||
NULL /* SubstSettings */);
|
||||
DBG_UNREFERENCED_PARAMETER(ErrorNumber);
|
||||
|
@ -2370,11 +2369,11 @@ BOOL LoadSetupData(
|
|||
|
||||
/* Load the hardware, language and keyboard layout lists */
|
||||
|
||||
pSetupData->USetupData.ComputerList = CreateComputerTypeList(pSetupData->USetupData.SetupInf);
|
||||
pSetupData->USetupData.DisplayList = CreateDisplayDriverList(pSetupData->USetupData.SetupInf);
|
||||
pSetupData->USetupData.KeyboardList = CreateKeyboardDriverList(pSetupData->USetupData.SetupInf);
|
||||
pSetupData->ComputerList = CreateComputerTypeList(pSetupData->USetupData.SetupInf);
|
||||
pSetupData->DisplayList = CreateDisplayDriverList(pSetupData->USetupData.SetupInf);
|
||||
pSetupData->KeyboardList = CreateKeyboardDriverList(pSetupData->USetupData.SetupInf);
|
||||
|
||||
pSetupData->USetupData.LanguageList = CreateLanguageList(pSetupData->USetupData.SetupInf, pSetupData->DefaultLanguage);
|
||||
pSetupData->LanguageList = CreateLanguageList(pSetupData->USetupData.SetupInf, pSetupData->DefaultLanguage);
|
||||
|
||||
/* If not unattended, overwrite language and locale with
|
||||
* the current ones of the running ReactOS instance */
|
||||
|
@ -2396,9 +2395,9 @@ BOOL LoadSetupData(
|
|||
wcscpy(pSetupData->DefaultLanguage, pSetupData->USetupData.LocaleID); // FIXME: In principle, only when unattended.
|
||||
pSetupData->USetupData.LanguageId = (LANGID)(wcstol(pSetupData->SelectedLanguageId, NULL, 16) & 0xFFFF);
|
||||
|
||||
pSetupData->USetupData.LayoutList = CreateKeyboardLayoutList(pSetupData->USetupData.SetupInf,
|
||||
pSetupData->SelectedLanguageId,
|
||||
pSetupData->DefaultKBLayout);
|
||||
pSetupData->LayoutList = CreateKeyboardLayoutList(pSetupData->USetupData.SetupInf,
|
||||
pSetupData->SelectedLanguageId,
|
||||
pSetupData->DefaultKBLayout);
|
||||
|
||||
/* If not unattended, overwrite keyboard layout with
|
||||
* the current one of the running ReactOS instance */
|
||||
|
@ -2411,8 +2410,8 @@ BOOL LoadSetupData(
|
|||
|
||||
/* Change the default entries in the language and keyboard layout lists */
|
||||
{
|
||||
PGENERIC_LIST LanguageList = pSetupData->USetupData.LanguageList;
|
||||
PGENERIC_LIST LayoutList = pSetupData->USetupData.LayoutList;
|
||||
PGENERIC_LIST LanguageList = pSetupData->LanguageList;
|
||||
PGENERIC_LIST LayoutList = pSetupData->LayoutList;
|
||||
PGENERIC_LIST_ENTRY ListEntry;
|
||||
|
||||
/* Search for default language */
|
||||
|
@ -2420,7 +2419,7 @@ BOOL LoadSetupData(
|
|||
ListEntry = GetNextListEntry(ListEntry))
|
||||
{
|
||||
PCWSTR LocaleId = ((PGENENTRY)GetListEntryData(ListEntry))->Id;
|
||||
if (!_wcsicmp(pSetupData->DefaultLanguage, LocaleId))
|
||||
if (!wcsicmp(pSetupData->DefaultLanguage, LocaleId))
|
||||
{
|
||||
DPRINT("found %S in LanguageList\n", LocaleId);
|
||||
SetCurrentListEntry(LanguageList, ListEntry);
|
||||
|
@ -2433,7 +2432,7 @@ BOOL LoadSetupData(
|
|||
ListEntry = GetNextListEntry(ListEntry))
|
||||
{
|
||||
PCWSTR pszLayoutId = ((PGENENTRY)GetListEntryData(ListEntry))->Id;
|
||||
if (!_wcsicmp(pSetupData->DefaultKBLayout, pszLayoutId))
|
||||
if (!wcsicmp(pSetupData->DefaultKBLayout, pszLayoutId))
|
||||
{
|
||||
DPRINT("Found %S in LayoutList\n", pszLayoutId);
|
||||
SetCurrentListEntry(LayoutList, ListEntry);
|
||||
|
@ -3008,7 +3007,7 @@ Quit:
|
|||
/* Free the NT to Win32 path prefix mapping list */
|
||||
FreeNtToWin32PathMappingList(&SetupData.MappingList);
|
||||
|
||||
#if 0 // NOTE: Disabled for testing purposes only!
|
||||
#if 1 // NOTE 2: Reenabled for live-testing! // NOTE: Disabled for testing purposes only!
|
||||
EnablePrivilege(SE_SHUTDOWN_NAME, TRUE);
|
||||
ExitWindowsEx(EWX_REBOOT, 0);
|
||||
EnablePrivilege(SE_SHUTDOWN_NAME, FALSE);
|
||||
|
|
|
@ -149,17 +149,16 @@ typedef struct _SETUPDATA
|
|||
PNTOS_INSTALLATION CurrentInstallation;
|
||||
PGENERIC_LIST NtOsInstallsList;
|
||||
|
||||
/* Settings lists *****/ // FIXME: HACKHACK! Remove these!
|
||||
PGENERIC_LIST ComputerList;
|
||||
PGENERIC_LIST DisplayList;
|
||||
PGENERIC_LIST KeyboardList;
|
||||
PGENERIC_LIST LanguageList;
|
||||
PGENERIC_LIST LayoutList;
|
||||
|
||||
/* Settings */
|
||||
LONG DestPartSize; // if partition doesn't exist, size of partition
|
||||
|
||||
/* txtsetup.sif data */
|
||||
// LONG DefaultLang; // default language (table index)
|
||||
// LONG DefaultKBLayout; // default keyboard layout (table index)
|
||||
PCWSTR SelectedLanguageId;
|
||||
WCHAR DefaultLanguage[20]; // Copy of string inside LanguageList
|
||||
WCHAR DefaultKBLayout[20]; // Copy of string inside KeyboardList
|
||||
|
||||
} SETUPDATA, *PSETUPDATA;
|
||||
|
||||
extern HANDLE ProcessHeap;
|
||||
|
|
|
@ -16,7 +16,7 @@ IDI_MAIN ICON "res/setup.ico"
|
|||
IDI_ROSICON ICON "res/roslogo.ico"
|
||||
IDI_WINICON ICON "res/winlogo.ico"
|
||||
IDI_DISKDRIVE ICON "res/drive_disk.ico"
|
||||
IDI_PARTITION ICON "res/partition.ico"
|
||||
IDI_PARTITION ICON "res/partition.ico" // "res/statistics.ico" // "res/disk_space.ico"
|
||||
|
||||
/* Bitmaps */
|
||||
IDB_WATERMARK BITMAP "res/watermark.bmp"
|
||||
|
|
|
@ -51,53 +51,50 @@ CHAR CharDoubleUpperRightCorner = 0xBB; /* double upper right corner */
|
|||
CHAR CharDoubleLowerLeftCorner = 0xC8; /* double lower left corner */
|
||||
CHAR CharDoubleLowerRightCorner = 0xBC; /* double lower right corner */
|
||||
|
||||
|
||||
LANGID SelectedLanguageId;
|
||||
|
||||
static
|
||||
ULONG
|
||||
FindLanguageIndex(VOID)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
if (SelectedLanguageId == NULL)
|
||||
if (SelectedLanguageId == 0)
|
||||
{
|
||||
/* Default to en-US */
|
||||
return 0; // FIXME!!
|
||||
// SelectedLanguageId = L"00000409";
|
||||
return 0; // FIXME!!
|
||||
// SelectedLanguageId = 0x0409;
|
||||
}
|
||||
|
||||
while (ResourceList[lngIndex].MuiPages != NULL)
|
||||
{
|
||||
if (_wcsicmp(ResourceList[lngIndex].LanguageID, SelectedLanguageId) == 0)
|
||||
{
|
||||
if (ResourceList[lngIndex].LanguageID == SelectedLanguageId)
|
||||
return lngIndex;
|
||||
}
|
||||
|
||||
lngIndex++;
|
||||
++lngIndex;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
BOOLEAN
|
||||
IsLanguageAvailable(
|
||||
PWCHAR LanguageId)
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
while (ResourceList[lngIndex].MuiPages != NULL)
|
||||
{
|
||||
if (_wcsicmp(ResourceList[lngIndex].LanguageID, LanguageId) == 0)
|
||||
if (ResourceList[lngIndex].LanguageID == LanguageId)
|
||||
return TRUE;
|
||||
|
||||
lngIndex++;
|
||||
++lngIndex;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static
|
||||
const MUI_ENTRY *
|
||||
FindMUIEntriesOfPage(
|
||||
|
@ -105,9 +102,9 @@ FindMUIEntriesOfPage(
|
|||
{
|
||||
ULONG muiIndex = 0;
|
||||
ULONG lngIndex;
|
||||
const MUI_PAGE * Pages = NULL;
|
||||
const MUI_PAGE* Pages;
|
||||
|
||||
lngIndex = max(FindLanguageIndex(), 0);
|
||||
lngIndex = FindLanguageIndex();
|
||||
Pages = ResourceList[lngIndex].MuiPages;
|
||||
|
||||
while (Pages[muiIndex].MuiEntry != NULL)
|
||||
|
@ -125,7 +122,7 @@ static
|
|||
const MUI_ERROR *
|
||||
FindMUIErrorEntries(VOID)
|
||||
{
|
||||
ULONG lngIndex = max(FindLanguageIndex(), 0);
|
||||
ULONG lngIndex = FindLanguageIndex();
|
||||
return ResourceList[lngIndex].MuiErrors;
|
||||
}
|
||||
|
||||
|
@ -133,11 +130,20 @@ static
|
|||
const MUI_STRING *
|
||||
FindMUIStringEntries(VOID)
|
||||
{
|
||||
ULONG lngIndex = max(FindLanguageIndex(), 0);
|
||||
ULONG lngIndex = FindLanguageIndex();
|
||||
return ResourceList[lngIndex].MuiStrings;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
VOID
|
||||
MUISetCurrentLanguage(
|
||||
_In_ LANGID LanguageId)
|
||||
{
|
||||
SelectedLanguageId = LanguageId;
|
||||
}
|
||||
#endif
|
||||
|
||||
VOID
|
||||
MUIClearPage(
|
||||
IN ULONG page)
|
||||
|
@ -267,7 +273,8 @@ MUIGetString(
|
|||
}
|
||||
}
|
||||
|
||||
sprintf(szErr, "Error: failed find string id %lu for language index %lu\n", Number, FindLanguageIndex());
|
||||
sprintf(szErr, "Error: failed find string id %lu for language index %lu\n",
|
||||
Number, FindLanguageIndex());
|
||||
|
||||
PopupError(szErr,
|
||||
NULL,
|
||||
|
@ -540,10 +547,9 @@ SetConsoleCodePage(VOID)
|
|||
|
||||
#if 0
|
||||
ULONG lngIndex = 0;
|
||||
|
||||
while (ResourceList[lngIndex].MuiPages != NULL)
|
||||
{
|
||||
if (_wcsicmp(ResourceList[lngIndex].LanguageID, SelectedLanguageId) == 0)
|
||||
if (ResourceList[lngIndex].LanguageID == SelectedLanguageId)
|
||||
{
|
||||
wCodePage = ResourceList[lngIndex].OEMCPage;
|
||||
SetConsoleOutputCP(wCodePage);
|
||||
|
|
|
@ -29,7 +29,7 @@ typedef struct
|
|||
|
||||
typedef struct
|
||||
{
|
||||
PCWSTR LanguageID;
|
||||
LCID LanguageID; // LocaleID;
|
||||
PCWSTR LanguageDescriptor;
|
||||
const MUI_PAGE * MuiPages;
|
||||
const MUI_ERROR * MuiErrors;
|
||||
|
@ -39,7 +39,14 @@ typedef struct
|
|||
#if 0
|
||||
BOOLEAN
|
||||
IsLanguageAvailable(
|
||||
PWCHAR LanguageId);
|
||||
_In_ LANGID LanguageId);
|
||||
#endif
|
||||
|
||||
extern LANGID SelectedLanguageId;
|
||||
#if 0
|
||||
VOID
|
||||
MUISetCurrentLanguage(
|
||||
_In_ LANGID LanguageId);
|
||||
#endif
|
||||
|
||||
VOID
|
||||
|
|
|
@ -413,432 +413,432 @@
|
|||
|
||||
const MUI_LANGUAGE_RESOURCE ResourceList[] =
|
||||
{
|
||||
/* Lang ID, Language Name, Page strings, Error strings, Other strings */
|
||||
/* LangID, Language Name, Page strings, Error strings, Other strings */
|
||||
#ifdef LANGUAGE_AF_ZA
|
||||
{L"00000436", L"Afrikaans", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000436, L"Afrikaans", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SQ_AL
|
||||
{L"0000041C", L"Albanian (Albania)", sqALPages, sqALErrorEntries, sqALStrings},
|
||||
{0x0000041C, L"Albanian (Albania)", sqALPages, sqALErrorEntries, sqALStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_SA
|
||||
{L"00000401", L"Arabic (Saudi Arabia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000401, L"Arabic (Saudi Arabia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_IQ
|
||||
{L"00000801", L"Arabic (Iraq)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000801, L"Arabic (Iraq)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_EG
|
||||
{L"00000C01", L"Arabic (Egypt)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000C01, L"Arabic (Egypt)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_LY
|
||||
{L"00001001", L"Arabic (Libya)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001001, L"Arabic (Libya)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_DZ
|
||||
{L"00001401", L"Arabic (Algeria)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001401, L"Arabic (Algeria)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_MA
|
||||
{L"00001801", L"Arabic (Morocco)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001801, L"Arabic (Morocco)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_TN
|
||||
{L"00001C01", L"Arabic (Tunisia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001C01, L"Arabic (Tunisia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_OM
|
||||
{L"00002001", L"Arabic (Oman)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002001, L"Arabic (Oman)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_YE
|
||||
{L"00002401", L"Arabic (Yemen)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002401, L"Arabic (Yemen)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_SY
|
||||
{L"00002801", L"Arabic (Syria)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002801, L"Arabic (Syria)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_JO
|
||||
{L"00002C01", L"Arabic (Jordan)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002C01, L"Arabic (Jordan)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_LB
|
||||
{L"00003001", L"Arabic (Lebanon)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00003001, L"Arabic (Lebanon)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_KW
|
||||
{L"00003401", L"Arabic (Kuwait)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00003401, L"Arabic (Kuwait)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_AE
|
||||
{L"00003801", L"Arabic (U.A.E.)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00003801, L"Arabic (U.A.E.)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_BH
|
||||
{L"00003C01", L"Arabic (Bahrain)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00003C01, L"Arabic (Bahrain)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AR_QA
|
||||
{L"00004001", L"Arabic (Qatar)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00004001, L"Arabic (Qatar)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HY_AM
|
||||
{L"0000042B", L"Armenian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000042B, L"Armenian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AZ_AZ
|
||||
{L"0000082C", L"Azeri (Cyrillic)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000082C, L"Azeri (Cyrillic)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_AZ_AZ
|
||||
{L"0000042C", L"Azeri (Latin)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000042C, L"Azeri (Latin)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EU_ES
|
||||
{L"0000042D", L"Basque", euESPages, euESErrorEntries, euESStrings},
|
||||
{0x0000042D, L"Basque", euESPages, euESErrorEntries, euESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BE_BY
|
||||
{L"00000423", L"Belarusian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000423, L"Belarusian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BN_BD
|
||||
{L"00000845", L"Bengali (Bangladesh)", bnBDPages, bnBDErrorEntries, bnBDStrings},
|
||||
{0x00000845, L"Bengali (Bangladesh)", bnBDPages, bnBDErrorEntries, bnBDStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BN_IN
|
||||
{L"00000445", L"Bengali (India)", bnBDPages, bnBDErrorEntries, bnBDStrings},
|
||||
{0x00000445, L"Bengali (India)", bnBDPages, bnBDErrorEntries, bnBDStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_BG_BG
|
||||
{L"00000402", L"Bulgarian", bgBGPages, bgBGErrorEntries, bgBGStrings},
|
||||
{0x00000402, L"Bulgarian", bgBGPages, bgBGErrorEntries, bgBGStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MY_MM
|
||||
{L"00000455", L"Burmese", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000455, L"Burmese", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_CA_ES
|
||||
{L"00000403", L"Catalan", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000403, L"Catalan", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
{L"00000404", L"Chinese (Taiwan)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000404, L"Chinese (Taiwan)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
{L"00000804", L"Chinese (PRC)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000804, L"Chinese (PRC)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_HK
|
||||
{L"00000C04", L"Chinese (Hong Kong S.A.R.)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000C04, L"Chinese (Hong Kong S.A.R.)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_SG
|
||||
{L"00001004", L"Chinese (Singapore)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001004, L"Chinese (Singapore)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_MO
|
||||
{L"00001404", L"Chinese (Macau S.A.R.)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001404, L"Chinese (Macau S.A.R.)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HR_HR
|
||||
{L"0000041A", L"Croatian", hrHRPages, hrHRErrorEntries, hrHRStrings},
|
||||
{0x0000041A, L"Croatian", hrHRPages, hrHRErrorEntries, hrHRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
{L"00000405", L"Czech", csCZPages, csCZErrorEntries, csCZStrings},
|
||||
{0x00000405, L"Czech", csCZPages, csCZErrorEntries, csCZStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DA_DK
|
||||
{L"00000406", L"Danish", daDKPages, daDKErrorEntries, daDKStrings},
|
||||
{0x00000406, L"Danish", daDKPages, daDKErrorEntries, daDKStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DV_MV
|
||||
{L"00000465", L"Dhivehi (Maldives)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000465, L"Dhivehi (Maldives)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NL_NL
|
||||
{L"00000413", L"Dutch (Netherlands)", nlNLPages, nlNLErrorEntries, nlNLStrings},
|
||||
{0x00000413, L"Dutch (Netherlands)", nlNLPages, nlNLErrorEntries, nlNLStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NL_BE
|
||||
{L"00000813", L"Dutch (Belgium)", nlNLPages, nlNLErrorEntries, nlNLStrings},
|
||||
{0x00000813, L"Dutch (Belgium)", nlNLPages, nlNLErrorEntries, nlNLStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
{L"00000409", L"English (United States)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000409, L"English (United States)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_GB
|
||||
{L"00000809", L"English (United Kingdom)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000809, L"English (United Kingdom)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_AU
|
||||
{L"00000C09", L"English (Australia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000C09, L"English (Australia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_CA
|
||||
{L"00001009", L"English (Canada)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001009, L"English (Canada)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_NZ
|
||||
{L"00001409", L"English (New Zealand)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001409, L"English (New Zealand)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_IE
|
||||
{L"00001809", L"English (Ireland)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001809, L"English (Ireland)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_ZA
|
||||
{L"00001C09", L"English (South Africa)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00001C09, L"English (South Africa)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_JM
|
||||
{L"00002009", L"English (Jamaica)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002009, L"English (Jamaica)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_CB
|
||||
{L"00002409", L"English (Caribbean)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002409, L"English (Caribbean)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_BZ
|
||||
{L"00002809", L"English (Belize)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002809, L"English (Belize)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_TT
|
||||
{L"00002C09", L"English (Trinidad)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00002C09, L"English (Trinidad)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_ZW
|
||||
{L"00003009", L"English (Zimbabwe)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00003009, L"English (Zimbabwe)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_PH
|
||||
{L"00003409", L"English (Philippines)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00003409, L"English (Philippines)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EO_AA
|
||||
{L"0000048F", L"Esperanto", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000048F, L"Esperanto", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ET_EE
|
||||
{L"00000425", L"Estonian", etEEPages, etEEErrorEntries, etEEStrings},
|
||||
{0x00000425, L"Estonian", etEEPages, etEEErrorEntries, etEEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FO_FO
|
||||
{L"00000438", L"Faeroese", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000438, L"Faeroese", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FA_IR
|
||||
{L"00000429", L"Farsi", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000429, L"Farsi", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FI_FI
|
||||
{L"0000040B", L"Finnish", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000040B, L"Finnish", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_CA
|
||||
{L"00000C0C", L"French (Canada)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
{0x00000C0C, L"French (Canada)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
{L"0000040C", L"French (France)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
{0x0000040C, L"French (France)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_BE
|
||||
{L"0000080C", L"French (Belgium)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
{0x0000080C, L"French (Belgium)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_CH
|
||||
{L"0000100C", L"French (Switzerland)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
{0x0000100C, L"French (Switzerland)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_LU
|
||||
{L"0000140C", L"French (Luxembourg)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
{0x0000140C, L"French (Luxembourg)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_MC
|
||||
{L"0000180C", L"French (Monaco)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
{0x0000180C, L"French (Monaco)", frFRPages, frFRErrorEntries, frFRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_GL_ES
|
||||
{L"00000456", L"Galician (Spain)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000456, L"Galician (Spain)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KA_GE
|
||||
{L"00000437", L"Georgian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000437, L"Georgian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
{L"00000407", L"German (Germany)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
{0x00000407, L"German (Germany)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_CH
|
||||
{L"00000807", L"German (Switzerland)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
{0x00000807, L"German (Switzerland)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_AT
|
||||
{L"00000C07", L"German (Austria)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
{0x00000C07, L"German (Austria)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_LU
|
||||
{L"00001007", L"German (Luxembourg)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
{0x00001007, L"German (Luxembourg)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_DE_LI
|
||||
{L"00001407", L"German (Liechtenstein)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
{0x00001407, L"German (Liechtenstein)", deDEPages, deDEErrorEntries, deDEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_EL_GR
|
||||
{L"00000408", L"Greek", elGRPages, elGRErrorEntries, elGRStrings},
|
||||
{0x00000408, L"Greek", elGRPages, elGRErrorEntries, elGRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_GU_IN
|
||||
{L"00000447", L"Gujarati (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000447, L"Gujarati (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HE_IL
|
||||
{L"0000040D", L"Hebrew", heILPages, heILErrorEntries, heILStrings},
|
||||
{0x0000040D, L"Hebrew", heILPages, heILErrorEntries, heILStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HI_IN
|
||||
{L"00000439", L"Hindi", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000439, L"Hindi", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_HU_HU
|
||||
{L"0000040E", L"Hungarian", huHUPages, huHUErrorEntries, huHUStrings},
|
||||
{0x0000040E, L"Hungarian", huHUPages, huHUErrorEntries, huHUStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_IS_IS
|
||||
{L"0000040F", L"Icelandic", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000040F, L"Icelandic", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ID_ID
|
||||
{L"00000421", L"Indonesian", idIDPages, idIDErrorEntries, idIDStrings},
|
||||
{0x00000421, L"Indonesian", idIDPages, idIDErrorEntries, idIDStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_IT
|
||||
{L"00000410", L"Italian (Italy)", itITPages, itITErrorEntries, itITStrings},
|
||||
{0x00000410, L"Italian (Italy)", itITPages, itITErrorEntries, itITStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_CH
|
||||
{L"00000810", L"Italian (Switzerland)", itITPages, itITErrorEntries, itITStrings},
|
||||
{0x00000810, L"Italian (Switzerland)", itITPages, itITErrorEntries, itITStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_JA_JP
|
||||
{L"00000411", L"Japanese", jaJPPages, jaJPErrorEntries, jaJPStrings},
|
||||
{0x00000411, L"Japanese", jaJPPages, jaJPErrorEntries, jaJPStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KN_IN
|
||||
{L"0000044B", L"Kannada (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000044B, L"Kannada (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KK_KZ
|
||||
{L"0000043F", L"Kazakh", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000043F, L"Kazakh", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KOK_IN
|
||||
{L"00000457", L"Konkani", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000457, L"Konkani", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KO_KR
|
||||
{L"00000412", L"Korean", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000412, L"Korean", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_KY_KG
|
||||
{L"00000440", L"Kyrgyz (Kyrgyzstan)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000440, L"Kyrgyz (Kyrgyzstan)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_LV_LV
|
||||
{L"00000426", L"Latvian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000426, L"Latvian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_LT_LT
|
||||
{L"00000427", L"Lithuanian", ltLTPages, ltLTErrorEntries, ltLTStrings},
|
||||
{0x00000427, L"Lithuanian", ltLTPages, ltLTErrorEntries, ltLTStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MK_MK
|
||||
{L"0000042F", L"FYRO Macedonian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000042F, L"FYRO Macedonian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MS_BN
|
||||
{L"0000083E", L"Malay (Brunei Darussalam)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000083E, L"Malay (Brunei Darussalam)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MS_MY
|
||||
{L"0000043E", L"Malay (Malaysia)", msMYPages, msMYErrorEntries, msMYStrings},
|
||||
{0x0000043E, L"Malay (Malaysia)", msMYPages, msMYErrorEntries, msMYStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MR_IN
|
||||
{L"0000044E", L"Marathi", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000044E, L"Marathi", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_MN_MN
|
||||
{L"00000450", L"Mongolian (Mongolia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000450, L"Mongolian (Mongolia)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NB_NO
|
||||
{L"00000414", L"Norwegian (Bokmal)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000414, L"Norwegian (Bokmal)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_NN_NO
|
||||
{L"00000814", L"Norwegian (Nynorsk)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000814, L"Norwegian (Nynorsk)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PL_PL
|
||||
{L"00000415", L"Polish", plPLPages, plPLErrorEntries, plPLStrings},
|
||||
{0x00000415, L"Polish", plPLPages, plPLErrorEntries, plPLStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PT_BR
|
||||
{L"00000416", L"Portuguese (Brazil)", ptBRPages, ptBRErrorEntries, ptBRStrings},
|
||||
{0x00000416, L"Portuguese (Brazil)", ptBRPages, ptBRErrorEntries, ptBRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PT_PT
|
||||
{L"00000816", L"Portuguese (Portugal)", ptPTPages, ptPTErrorEntries, ptPTStrings},
|
||||
{0x00000816, L"Portuguese (Portugal)", ptPTPages, ptPTErrorEntries, ptPTStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_PA_IN
|
||||
{L"00000446", L"Punjabi (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000446, L"Punjabi (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
{L"00000418", L"Romanian", roROPages, roROErrorEntries, roROStrings},
|
||||
{0x00000418, L"Romanian", roROPages, roROErrorEntries, roROStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_RM_CH
|
||||
{L"00000417", L"Romansh", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000417, L"Romansh", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
{L"00000419", L"Russian", ruRUPages, ruRUErrorEntries, ruRUStrings},
|
||||
{0x00000419, L"Russian", ruRUPages, ruRUErrorEntries, ruRUStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SA_IN
|
||||
{L"0000044F", L"Sanskrit", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000044F, L"Sanskrit", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SR_SP
|
||||
{L"00000C1A", L"Serbian (Cyrillic)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000C1A, L"Serbian (Cyrillic)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SR_SP
|
||||
{L"0000081A", L"Serbian (Latin)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000081A, L"Serbian (Latin)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SK_SK
|
||||
{L"0000041B", L"Slovak", skSKPages, skSKErrorEntries, skSKStrings},
|
||||
{0x0000041B, L"Slovak", skSKPages, skSKErrorEntries, skSKStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SL_SI
|
||||
{L"00000424", L"Slovenian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000424, L"Slovenian", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
{L"0000040A", L"Spanish (Traditional Sort)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000040A, L"Spanish (Traditional Sort)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_MX
|
||||
{L"0000080A", L"Spanish (Mexico)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000080A, L"Spanish (Mexico)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_ES
|
||||
{L"00000C0A", L"Spanish (International Sort)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x00000C0A, L"Spanish (International Sort)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_GT
|
||||
{L"0000100A", L"Spanish (Guatemala)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000100A, L"Spanish (Guatemala)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_CR
|
||||
{L"0000140A", L"Spanish (Costa Rica)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000140A, L"Spanish (Costa Rica)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PA
|
||||
{L"0000180A", L"Spanish (Panama)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000180A, L"Spanish (Panama)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_DO
|
||||
{L"00001C0A", L"Spanish (Dominican Republic)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x00001C0A, L"Spanish (Dominican Republic)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_VE
|
||||
{L"0000200A", L"Spanish (Venezuela)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000200A, L"Spanish (Venezuela)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_CO
|
||||
{L"0000240A", L"Spanish (Colombia)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000240A, L"Spanish (Colombia)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PE
|
||||
{L"0000280A", L"Spanish (Peru)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000280A, L"Spanish (Peru)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_AR
|
||||
{L"00002C0A", L"Spanish (Argentina)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x00002C0A, L"Spanish (Argentina)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_EC
|
||||
{L"0000300A", L"Spanish (Ecuador)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000300A, L"Spanish (Ecuador)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_CL
|
||||
{L"0000340A", L"Spanish (Chile)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000340A, L"Spanish (Chile)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_UY
|
||||
{L"0000380A", L"Spanish (Uruguay)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000380A, L"Spanish (Uruguay)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PY
|
||||
{L"00003C0A", L"Spanish (Paraguay)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x00003C0A, L"Spanish (Paraguay)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_BO
|
||||
{L"0000400A", L"Spanish (Bolivia)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000400A, L"Spanish (Bolivia)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_SV
|
||||
{L"0000440A", L"Spanish (El Salvador)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000440A, L"Spanish (El Salvador)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_HN
|
||||
{L"0000480A", L"Spanish (Honduras)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000480A, L"Spanish (Honduras)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_NI
|
||||
{L"00004C0A", L"Spanish (Nicaragua)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x00004C0A, L"Spanish (Nicaragua)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ES_PR
|
||||
{L"0000500A", L"Spanish (Puerto Rico)", esESPages, esESErrorEntries, esESStrings},
|
||||
{0x0000500A, L"Spanish (Puerto Rico)", esESPages, esESErrorEntries, esESStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SW_KE
|
||||
{L"00000441", L"Swahili", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000441, L"Swahili", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_SE
|
||||
{L"0000041D", L"Swedish", svSEPages, svSEErrorEntries, svSEStrings},
|
||||
{0x0000041D, L"Swedish", svSEPages, svSEErrorEntries, svSEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SV_FI
|
||||
{L"0000081D", L"Swedish (Finland)", svSEPages, svSEErrorEntries, svSEStrings},
|
||||
{0x0000081D, L"Swedish (Finland)", svSEPages, svSEErrorEntries, svSEStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_SYR_SY
|
||||
{L"0000045A", L"Syriac (Syria)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000045A, L"Syriac (Syria)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TA_IN
|
||||
{L"00000449", L"Tamil", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000449, L"Tamil", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TT_TA
|
||||
{L"00000444", L"Tatar", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000444, L"Tatar", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TE_IN
|
||||
{L"0000044A", L"Telugu (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000044A, L"Telugu (India)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TH_TH
|
||||
{L"0000041E", L"Thai", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000041E, L"Thai", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
{L"0000041F", L"Turkish", trTRPages, trTRErrorEntries, trTRStrings},
|
||||
{0x0000041F, L"Turkish", trTRPages, trTRErrorEntries, trTRStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UK_UA
|
||||
{L"00000422", L"Ukrainian", ukUAPages, ukUAErrorEntries, ukUAStrings},
|
||||
{0x00000422, L"Ukrainian", ukUAPages, ukUAErrorEntries, ukUAStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UR_PK
|
||||
{L"00000420", L"Urdu", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000420, L"Urdu", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UZ_UZ
|
||||
{L"00000443", L"Uzbek (Latin)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000443, L"Uzbek (Latin)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_UZ_UZ
|
||||
{L"00000843", L"Uzbek (Cyrillic)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000843, L"Uzbek (Cyrillic)", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_VI_VN
|
||||
{L"0000042A", L"Vietnamese", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x0000042A, L"Vietnamese", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_WA_BE
|
||||
{L"00000490", L"Walon", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000490, L"Walon", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZU_ZU
|
||||
{L"00000435", L"Zulu", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
{0x00000435, L"Zulu", enUSPages, enUSErrorEntries, enUSStrings},
|
||||
#endif
|
||||
{NULL, NULL, NULL, NULL, NULL}
|
||||
{0, NULL, NULL, NULL, NULL}
|
||||
};
|
||||
|
|
|
@ -63,11 +63,16 @@ static PPARTENTRY SystemPartition = NULL;
|
|||
#define SystemVolume (SystemPartition->Volume)
|
||||
|
||||
|
||||
/* OTHER Stuff *****/
|
||||
/* Settings lists *****/
|
||||
PGENERIC_LIST ComputerList;
|
||||
PGENERIC_LIST DisplayList;
|
||||
PGENERIC_LIST KeyboardList;
|
||||
PGENERIC_LIST LanguageList;
|
||||
PGENERIC_LIST LayoutList;
|
||||
|
||||
PCWSTR SelectedLanguageId;
|
||||
static WCHAR DefaultLanguage[20]; // Copy of string inside LanguageList
|
||||
static WCHAR DefaultKBLayout[20]; // Copy of string inside KeyboardList
|
||||
|
||||
/* OTHER Stuff *****/
|
||||
static LANGID DefaultLanguage;
|
||||
|
||||
static BOOLEAN RepairUpdateFlag = FALSE;
|
||||
|
||||
|
@ -460,15 +465,16 @@ ConfirmQuit(PINPUT_RECORD Ir)
|
|||
static VOID
|
||||
UpdateKBLayout(VOID)
|
||||
{
|
||||
PGENERIC_LIST_ENTRY ListEntry;
|
||||
KLID newLayout;
|
||||
|
||||
newLayout = MUIDefaultKeyboardLayout(SelectedLanguageId);
|
||||
newLayout = MUIDefaultKeyboardLayout(LANGIDFROMLCID(USetupData.LocaleID));
|
||||
|
||||
if (!USetupData.LayoutList)
|
||||
if (!LayoutList)
|
||||
{
|
||||
USetupData.LayoutList = CreateKeyboardLayoutList(USetupData.SetupInf, SelectedLanguageId, DefaultKBLayout);
|
||||
if (!USetupData.LayoutList)
|
||||
LayoutList = CreateKeyboardLayoutList(USetupData.SetupInf,
|
||||
LANGIDFROMLCID(USetupData.LocaleID),
|
||||
&USetupData.LayoutId);
|
||||
if (!LayoutList)
|
||||
{
|
||||
/* FIXME: Handle error! */
|
||||
return;
|
||||
|
@ -478,14 +484,17 @@ UpdateKBLayout(VOID)
|
|||
/* Search for default layout (if provided) */
|
||||
if (newLayout != 0)
|
||||
{
|
||||
for (ListEntry = GetFirstListEntry(USetupData.LayoutList); ListEntry;
|
||||
PGENERIC_LIST_ENTRY ListEntry;
|
||||
KLID LayoutId;
|
||||
|
||||
for (ListEntry = GetFirstListEntry(LayoutList); ListEntry;
|
||||
ListEntry = GetNextListEntry(ListEntry))
|
||||
{
|
||||
PCWSTR pszLayoutId = ((PGENENTRY)GetListEntryData(ListEntry))->Id;
|
||||
KLID LayoutId = (KLID)(pszLayoutId ? wcstoul(pszLayoutId, NULL, 16) : 0);
|
||||
LayoutId = (KLID)(((PGENENTRY)GetListEntryData(ListEntry))->Id.Ul);
|
||||
if (newLayout == LayoutId)
|
||||
{
|
||||
SetCurrentListEntry(USetupData.LayoutList, ListEntry);
|
||||
DPRINT("Found 0x%08lx in LayoutList\n", newLayout);
|
||||
SetCurrentListEntry(LayoutList, ListEntry);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -555,16 +564,9 @@ GetNTOSInstallationName(
|
|||
* QuitPage
|
||||
*
|
||||
* SIDEEFFECTS
|
||||
* Init Sdi
|
||||
* Init USetupData.SourcePath
|
||||
* Init USetupData.SourceRootPath
|
||||
* Init USetupData.SourceRootDir
|
||||
* Init USetupData.SetupInf
|
||||
* Init USetupData.RequiredPartitionDiskSpace
|
||||
* Init PnpMgr
|
||||
* Init USetupData
|
||||
* Init IsUnattendedSetup
|
||||
* If unattended, init *List and sets the Codepage
|
||||
* If unattended, init SelectedLanguageId
|
||||
* If unattended, init USetupData.LanguageId
|
||||
*
|
||||
* RETURNS
|
||||
* Number of the next page.
|
||||
|
@ -573,8 +575,6 @@ static PAGE_NUMBER
|
|||
SetupStartPage(PINPUT_RECORD Ir)
|
||||
{
|
||||
ULONG Error;
|
||||
PGENERIC_LIST_ENTRY ListEntry;
|
||||
PCWSTR LocaleId;
|
||||
|
||||
MUIDisplayPage(SETUP_INIT_PAGE);
|
||||
|
||||
|
@ -594,57 +594,9 @@ SetupStartPage(PINPUT_RECORD Ir)
|
|||
if (WaitNoPendingInstallEvents(NULL) != STATUS_WAIT_0)
|
||||
DPRINT1("WaitNoPendingInstallEvents() failed to wait!\n");
|
||||
|
||||
/* Retrieve any supplemental options from the unattend file */
|
||||
CheckUnattendedSetup(&USetupData);
|
||||
|
||||
if (IsUnattendedSetup)
|
||||
{
|
||||
// TODO: Read options from inf
|
||||
/* Load the hardware, language and keyboard layout lists */
|
||||
|
||||
USetupData.ComputerList = CreateComputerTypeList(USetupData.SetupInf);
|
||||
USetupData.DisplayList = CreateDisplayDriverList(USetupData.SetupInf);
|
||||
USetupData.KeyboardList = CreateKeyboardDriverList(USetupData.SetupInf);
|
||||
|
||||
USetupData.LanguageList = CreateLanguageList(USetupData.SetupInf, DefaultLanguage);
|
||||
|
||||
/* new part */
|
||||
SelectedLanguageId = DefaultLanguage;
|
||||
wcscpy(DefaultLanguage, USetupData.LocaleID);
|
||||
USetupData.LanguageId = (LANGID)(wcstol(SelectedLanguageId, NULL, 16) & 0xFFFF);
|
||||
|
||||
USetupData.LayoutList = CreateKeyboardLayoutList(USetupData.SetupInf, SelectedLanguageId, DefaultKBLayout);
|
||||
|
||||
/* first we hack LanguageList */
|
||||
for (ListEntry = GetFirstListEntry(USetupData.LanguageList); ListEntry;
|
||||
ListEntry = GetNextListEntry(ListEntry))
|
||||
{
|
||||
LocaleId = ((PGENENTRY)GetListEntryData(ListEntry))->Id;
|
||||
if (!_wcsicmp(USetupData.LocaleID, LocaleId))
|
||||
{
|
||||
DPRINT("found %S in LanguageList\n", LocaleId);
|
||||
SetCurrentListEntry(USetupData.LanguageList, ListEntry);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* now LayoutList */
|
||||
for (ListEntry = GetFirstListEntry(USetupData.LayoutList); ListEntry;
|
||||
ListEntry = GetNextListEntry(ListEntry))
|
||||
{
|
||||
LocaleId = ((PGENENTRY)GetListEntryData(ListEntry))->Id;
|
||||
if (!_wcsicmp(USetupData.LocaleID, LocaleId))
|
||||
{
|
||||
DPRINT("found %S in LayoutList\n", LocaleId);
|
||||
SetCurrentListEntry(USetupData.LayoutList, ListEntry);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SetConsoleCodePage();
|
||||
|
||||
return INSTALL_INTRO_PAGE;
|
||||
}
|
||||
|
||||
return LANGUAGE_PAGE;
|
||||
}
|
||||
|
||||
|
@ -654,10 +606,6 @@ SetupStartPage(PINPUT_RECORD Ir)
|
|||
*
|
||||
* Next pages: WelcomePage, QuitPage
|
||||
*
|
||||
* SIDEEFFECTS
|
||||
* Init SelectedLanguageId
|
||||
* Init USetupData.LanguageId
|
||||
*
|
||||
* RETURNS
|
||||
* Number of the next page.
|
||||
*/
|
||||
|
@ -665,46 +613,49 @@ static PAGE_NUMBER
|
|||
LanguagePage(PINPUT_RECORD Ir)
|
||||
{
|
||||
GENERIC_LIST_UI ListUi;
|
||||
PCWSTR NewLanguageId;
|
||||
BOOL RefreshPage = FALSE;
|
||||
|
||||
/* Initialize the computer settings list */
|
||||
if (USetupData.LanguageList == NULL)
|
||||
/* Initialize the language settings list */
|
||||
LANGID NewLanguageId = USetupData.LocaleID;
|
||||
if (!LanguageList)
|
||||
{
|
||||
USetupData.LanguageList = CreateLanguageList(USetupData.SetupInf, DefaultLanguage);
|
||||
if (USetupData.LanguageList == NULL)
|
||||
LanguageList = CreateLanguageList(USetupData.SetupInf, &NewLanguageId);
|
||||
if (!LanguageList)
|
||||
{
|
||||
PopupError("Setup failed to initialize available translations", NULL, NULL, POPUP_WAIT_NONE);
|
||||
return WELCOME_PAGE;
|
||||
PopupError("Setup failed to initialize available translations", NULL, NULL, POPUP_WAIT_NONE);
|
||||
return WELCOME_PAGE;
|
||||
}
|
||||
}
|
||||
|
||||
SelectedLanguageId = DefaultLanguage;
|
||||
USetupData.LanguageId = 0;
|
||||
USetupData.LocaleID = (LCID)NewLanguageId;
|
||||
/******/DefaultLanguage = LANGIDFROMLCID(USetupData.LocaleID);/*****/ // FIXME: Deprecate DefaultLanguage
|
||||
SelectedLanguageId = LANGIDFROMLCID(USetupData.LocaleID); // FIXME: Should we keep SelectedLanguageId ?
|
||||
|
||||
/* Load the font */
|
||||
SetConsoleCodePage();
|
||||
UpdateKBLayout();
|
||||
|
||||
|
||||
if (IsUnattendedSetup)
|
||||
return INSTALL_INTRO_PAGE;
|
||||
|
||||
|
||||
/*
|
||||
* If there is no language or just a single one in the list,
|
||||
* skip the language selection process altogether.
|
||||
*/
|
||||
if (GetNumberOfListEntries(USetupData.LanguageList) <= 1)
|
||||
{
|
||||
USetupData.LanguageId = (LANGID)(wcstol(SelectedLanguageId, NULL, 16) & 0xFFFF);
|
||||
if (GetNumberOfListEntries(LanguageList) <= 1)
|
||||
return WELCOME_PAGE;
|
||||
}
|
||||
|
||||
InitGenericListUi(&ListUi, USetupData.LanguageList, GetSettingDescription);
|
||||
MUIDisplayPage(LANGUAGE_PAGE);
|
||||
|
||||
InitGenericListUi(&ListUi, LanguageList, GetSettingDescription);
|
||||
DrawGenericList(&ListUi,
|
||||
2, 18,
|
||||
xScreen - 3,
|
||||
yScreen - 3);
|
||||
|
||||
ScrollToPositionGenericList(&ListUi, GetDefaultLanguageIndex());
|
||||
|
||||
MUIDisplayPage(LANGUAGE_PAGE);
|
||||
// ScrollToPositionGenericList(&ListUi, GetDefaultLanguageIndex());
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
|
@ -744,17 +695,15 @@ LanguagePage(PINPUT_RECORD Ir)
|
|||
}
|
||||
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
|
||||
{
|
||||
ASSERT(GetNumberOfListEntries(USetupData.LanguageList) >= 1);
|
||||
ASSERT(GetNumberOfListEntries(LanguageList) >= 1);
|
||||
|
||||
SelectedLanguageId =
|
||||
((PGENENTRY)GetListEntryData(GetCurrentListEntry(USetupData.LanguageList)))->Id;
|
||||
(LCID)(((PGENENTRY)GetListEntryData(GetCurrentListEntry(LanguageList)))->Id.Ul);
|
||||
|
||||
USetupData.LanguageId = (LANGID)(wcstol(SelectedLanguageId, NULL, 16) & 0xFFFF);
|
||||
USetupData.LocaleID = SelectedLanguageId;
|
||||
|
||||
if (wcscmp(SelectedLanguageId, DefaultLanguage))
|
||||
{
|
||||
if (SelectedLanguageId != DefaultLanguage)
|
||||
UpdateKBLayout();
|
||||
}
|
||||
|
||||
/* Load the font */
|
||||
SetConsoleCodePage();
|
||||
|
@ -770,12 +719,12 @@ LanguagePage(PINPUT_RECORD Ir)
|
|||
|
||||
if (RefreshPage)
|
||||
{
|
||||
ASSERT(GetNumberOfListEntries(USetupData.LanguageList) >= 1);
|
||||
ASSERT(GetNumberOfListEntries(LanguageList) >= 1);
|
||||
|
||||
NewLanguageId =
|
||||
((PGENENTRY)GetListEntryData(GetCurrentListEntry(USetupData.LanguageList)))->Id;
|
||||
(LCID)(((PGENENTRY)GetListEntryData(GetCurrentListEntry(LanguageList)))->Id.Ul);
|
||||
|
||||
if (wcscmp(SelectedLanguageId, NewLanguageId))
|
||||
if (SelectedLanguageId != NewLanguageId)
|
||||
{
|
||||
/* Clear the language page */
|
||||
MUIClearPage(LANGUAGE_PAGE);
|
||||
|
@ -785,14 +734,14 @@ LanguagePage(PINPUT_RECORD Ir)
|
|||
/* Load the font */
|
||||
SetConsoleCodePage();
|
||||
|
||||
/* Redraw language selection page in native language */
|
||||
MUIDisplayPage(LANGUAGE_PAGE);
|
||||
|
||||
/* Redraw the list */
|
||||
DrawGenericList(&ListUi,
|
||||
2, 18,
|
||||
xScreen - 3,
|
||||
yScreen - 3);
|
||||
|
||||
/* Redraw language selection page in native language */
|
||||
MUIDisplayPage(LANGUAGE_PAGE);
|
||||
}
|
||||
|
||||
RefreshPage = FALSE;
|
||||
|
@ -1213,10 +1162,10 @@ OemDriverPage(PINPUT_RECORD Ir)
|
|||
* QuitPage
|
||||
*
|
||||
* SIDEEFFECTS
|
||||
* Init USetupData.ComputerList
|
||||
* Init USetupData.DisplayList
|
||||
* Init USetupData.KeyboardList
|
||||
* Init USetupData.LayoutList
|
||||
* Init ComputerList
|
||||
* Init DisplayList
|
||||
* Init KeyboardList
|
||||
* Init LayoutList
|
||||
*
|
||||
* RETURNS
|
||||
* Number of the next page.
|
||||
|
@ -1224,65 +1173,78 @@ OemDriverPage(PINPUT_RECORD Ir)
|
|||
static PAGE_NUMBER
|
||||
DeviceSettingsPage(PINPUT_RECORD Ir)
|
||||
{
|
||||
PGENERIC_LIST_ENTRY Entry;
|
||||
|
||||
static ULONG Line = 16;
|
||||
|
||||
/* Initialize the computer settings list */
|
||||
if (USetupData.ComputerList == NULL)
|
||||
if (!ComputerList)
|
||||
{
|
||||
USetupData.ComputerList = CreateComputerTypeList(USetupData.SetupInf);
|
||||
if (USetupData.ComputerList == NULL)
|
||||
ComputerList = CreateComputerTypeList(USetupData.SetupInf);
|
||||
if (!ComputerList)
|
||||
{
|
||||
MUIDisplayError(ERROR_LOAD_COMPUTER, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
}
|
||||
Entry = GetCurrentListEntry(ComputerList);
|
||||
ASSERT(Entry);
|
||||
USetupData.ComputerType = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
|
||||
/* Initialize the display settings list */
|
||||
if (USetupData.DisplayList == NULL)
|
||||
if (!DisplayList)
|
||||
{
|
||||
USetupData.DisplayList = CreateDisplayDriverList(USetupData.SetupInf);
|
||||
if (USetupData.DisplayList == NULL)
|
||||
DisplayList = CreateDisplayDriverList(USetupData.SetupInf);
|
||||
if (!DisplayList)
|
||||
{
|
||||
MUIDisplayError(ERROR_LOAD_DISPLAY, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
}
|
||||
Entry = GetCurrentListEntry(DisplayList);
|
||||
ASSERT(Entry);
|
||||
USetupData.DisplayType = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
|
||||
/* Initialize the keyboard settings list */
|
||||
if (USetupData.KeyboardList == NULL)
|
||||
if (!KeyboardList)
|
||||
{
|
||||
USetupData.KeyboardList = CreateKeyboardDriverList(USetupData.SetupInf);
|
||||
if (USetupData.KeyboardList == NULL)
|
||||
KeyboardList = CreateKeyboardDriverList(USetupData.SetupInf);
|
||||
if (!KeyboardList)
|
||||
{
|
||||
MUIDisplayError(ERROR_LOAD_KEYBOARD, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
}
|
||||
Entry = GetCurrentListEntry(KeyboardList);
|
||||
ASSERT(Entry);
|
||||
USetupData.KeyboardDriver = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
|
||||
/* Initialize the keyboard layout list */
|
||||
if (!USetupData.LayoutList)
|
||||
if (!LayoutList)
|
||||
{
|
||||
USetupData.LayoutList = CreateKeyboardLayoutList(USetupData.SetupInf, SelectedLanguageId, DefaultKBLayout);
|
||||
if (!USetupData.LayoutList)
|
||||
LayoutList = CreateKeyboardLayoutList(USetupData.SetupInf,
|
||||
LANGIDFROMLCID(USetupData.LocaleID),
|
||||
&USetupData.LayoutId);
|
||||
if (!LayoutList)
|
||||
{
|
||||
/* FIXME: report error */
|
||||
MUIDisplayError(ERROR_LOAD_KBLAYOUT, Ir, POPUP_WAIT_ENTER);
|
||||
return QUIT_PAGE;
|
||||
}
|
||||
}
|
||||
Entry = GetCurrentListEntry(LayoutList);
|
||||
ASSERT(Entry);
|
||||
USetupData.LayoutId = (KLID)(((PGENENTRY)GetListEntryData(Entry))->Id.Ul);
|
||||
|
||||
if (RepairUpdateFlag)
|
||||
if (RepairUpdateFlag || IsUnattendedSetup)
|
||||
return SELECT_PARTITION_PAGE;
|
||||
|
||||
// if (IsUnattendedSetup)
|
||||
// return SELECT_PARTITION_PAGE;
|
||||
|
||||
MUIDisplayPage(DEVICE_SETTINGS_PAGE);
|
||||
|
||||
DrawGenericListCurrentItem(USetupData.ComputerList, GetSettingDescription, 25, 11);
|
||||
DrawGenericListCurrentItem(USetupData.DisplayList , GetSettingDescription, 25, 12);
|
||||
DrawGenericListCurrentItem(USetupData.KeyboardList, GetSettingDescription, 25, 13);
|
||||
DrawGenericListCurrentItem(USetupData.LayoutList , GetSettingDescription, 25, 14);
|
||||
DrawGenericListCurrentItem(ComputerList, GetSettingDescription, 25, 11);
|
||||
DrawGenericListCurrentItem(DisplayList , GetSettingDescription, 25, 12);
|
||||
DrawGenericListCurrentItem(KeyboardList, GetSettingDescription, 25, 13);
|
||||
DrawGenericListCurrentItem(LayoutList , GetSettingDescription, 25, 14);
|
||||
|
||||
CONSOLE_InvertTextXY(24, Line, 48, 1);
|
||||
|
||||
|
@ -1337,7 +1299,30 @@ DeviceSettingsPage(PINPUT_RECORD Ir)
|
|||
else if (Line == 14)
|
||||
return LAYOUT_SETTINGS_PAGE;
|
||||
else if (Line == 16)
|
||||
{
|
||||
/* Retrieve the computer settings */
|
||||
Entry = GetCurrentListEntry(ComputerList);
|
||||
ASSERT(Entry);
|
||||
USetupData.ComputerType = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
|
||||
/* Retrieve the display settings */
|
||||
Entry = GetCurrentListEntry(DisplayList);
|
||||
ASSERT(Entry);
|
||||
USetupData.DisplayType = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
|
||||
/* Retrieve the keyboard settings */
|
||||
Entry = GetCurrentListEntry(KeyboardList);
|
||||
ASSERT(Entry);
|
||||
USetupData.KeyboardDriver = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
|
||||
/* Retrieve the keyboard layout */
|
||||
Entry = GetCurrentListEntry(LayoutList);
|
||||
ASSERT(Entry);
|
||||
USetupData.LayoutId = (KLID)(((PGENENTRY)GetListEntryData(Entry))->Id.Ul);
|
||||
|
||||
/* The user has accepted the settings; we continue installation */
|
||||
return SELECT_PARTITION_PAGE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1424,7 +1409,7 @@ ComputerSettingsPage(PINPUT_RECORD Ir)
|
|||
GENERIC_LIST_UI ListUi;
|
||||
MUIDisplayPage(COMPUTER_SETTINGS_PAGE);
|
||||
|
||||
InitGenericListUi(&ListUi, USetupData.ComputerList, GetSettingDescription);
|
||||
InitGenericListUi(&ListUi, ComputerList, GetSettingDescription);
|
||||
DrawGenericList(&ListUi,
|
||||
2, 18,
|
||||
xScreen - 3,
|
||||
|
@ -1450,7 +1435,7 @@ DisplaySettingsPage(PINPUT_RECORD Ir)
|
|||
GENERIC_LIST_UI ListUi;
|
||||
MUIDisplayPage(DISPLAY_SETTINGS_PAGE);
|
||||
|
||||
InitGenericListUi(&ListUi, USetupData.DisplayList, GetSettingDescription);
|
||||
InitGenericListUi(&ListUi, DisplayList, GetSettingDescription);
|
||||
DrawGenericList(&ListUi,
|
||||
2, 18,
|
||||
xScreen - 3,
|
||||
|
@ -1476,7 +1461,7 @@ KeyboardSettingsPage(PINPUT_RECORD Ir)
|
|||
GENERIC_LIST_UI ListUi;
|
||||
MUIDisplayPage(KEYBOARD_SETTINGS_PAGE);
|
||||
|
||||
InitGenericListUi(&ListUi, USetupData.KeyboardList, GetSettingDescription);
|
||||
InitGenericListUi(&ListUi, KeyboardList, GetSettingDescription);
|
||||
DrawGenericList(&ListUi,
|
||||
2, 18,
|
||||
xScreen - 3,
|
||||
|
@ -1502,7 +1487,7 @@ LayoutSettingsPage(PINPUT_RECORD Ir)
|
|||
GENERIC_LIST_UI ListUi;
|
||||
MUIDisplayPage(LAYOUT_SETTINGS_PAGE);
|
||||
|
||||
InitGenericListUi(&ListUi, USetupData.LayoutList, GetSettingDescription);
|
||||
InitGenericListUi(&ListUi, LayoutList, GetSettingDescription);
|
||||
DrawGenericList(&ListUi,
|
||||
2, 18,
|
||||
xScreen - 3,
|
||||
|
@ -3428,11 +3413,60 @@ RegistryPage(PINPUT_RECORD Ir)
|
|||
|
||||
MUIDisplayPage(REGISTRY_PAGE);
|
||||
|
||||
/******************/
|
||||
//
|
||||
// TEMPTEMP : Sanity checks for lists consistency
|
||||
//
|
||||
{
|
||||
PGENERIC_LIST_ENTRY Entry;
|
||||
|
||||
{
|
||||
PCWSTR ComputerType;
|
||||
Entry = GetCurrentListEntry(ComputerList);
|
||||
ASSERT(Entry);
|
||||
ComputerType = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
ASSERT(ComputerType);
|
||||
ASSERT(USetupData.ComputerType == ComputerType);
|
||||
}
|
||||
{
|
||||
PCWSTR DisplayType;
|
||||
Entry = GetCurrentListEntry(DisplayList);
|
||||
ASSERT(Entry);
|
||||
DisplayType = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
ASSERT(DisplayType);
|
||||
ASSERT(USetupData.DisplayType == DisplayType);
|
||||
}
|
||||
{
|
||||
PCWSTR KeyboardDriver;
|
||||
Entry = GetCurrentListEntry(KeyboardList);
|
||||
ASSERT(Entry);
|
||||
KeyboardDriver = ((PGENENTRY)GetListEntryData(Entry))->Id.Str;
|
||||
ASSERT(KeyboardDriver);
|
||||
ASSERT(USetupData.KeyboardDriver == KeyboardDriver);
|
||||
}
|
||||
{
|
||||
LCID LocaleId;
|
||||
Entry = GetCurrentListEntry(LanguageList);
|
||||
ASSERT(Entry);
|
||||
LocaleId = (LCID)(((PGENENTRY)GetListEntryData(Entry))->Id.Ul);
|
||||
ASSERT(LocaleId != 0);
|
||||
ASSERT(USetupData.LocaleID == LocaleId);
|
||||
}
|
||||
{
|
||||
KLID LayoutId;
|
||||
Entry = GetCurrentListEntry(LayoutList);
|
||||
ASSERT(Entry);
|
||||
LayoutId = (KLID)(((PGENENTRY)GetListEntryData(Entry))->Id.Ul);
|
||||
ASSERT(LayoutId != 0);
|
||||
ASSERT(USetupData.LayoutId == LayoutId);
|
||||
}
|
||||
}
|
||||
/******************/
|
||||
|
||||
Error = UpdateRegistry(&USetupData,
|
||||
RepairUpdateFlag,
|
||||
PartitionList,
|
||||
InstallVolume->Info.DriveLetter,
|
||||
SelectedLanguageId,
|
||||
RegistryStatus,
|
||||
&s_SubstSettings);
|
||||
if (Error != ERROR_SUCCESS)
|
||||
|
@ -4087,6 +4121,8 @@ RunUSetup(VOID)
|
|||
return STATUS_APP_INIT_FAILURE;
|
||||
}
|
||||
|
||||
__debugbreak();
|
||||
|
||||
/* Initialize Setup, phase 0 */
|
||||
InitializeSetup(&USetupData, 0);
|
||||
USetupData.ErrorRoutine = USetupErrorRoutine;
|
||||
|
@ -4246,6 +4282,33 @@ RunUSetup(VOID)
|
|||
/* Terminate the user-mode PnP manager */
|
||||
TerminateUserModePnpManager();
|
||||
|
||||
/* Destroy the settings lists */
|
||||
if (ComputerList)
|
||||
{
|
||||
DestroyGenericList(ComputerList, TRUE);
|
||||
ComputerList = NULL;
|
||||
}
|
||||
if (DisplayList)
|
||||
{
|
||||
DestroyGenericList(DisplayList, TRUE);
|
||||
DisplayList = NULL;
|
||||
}
|
||||
if (KeyboardList)
|
||||
{
|
||||
DestroyGenericList(KeyboardList, TRUE);
|
||||
KeyboardList = NULL;
|
||||
}
|
||||
if (LanguageList)
|
||||
{
|
||||
DestroyGenericList(LanguageList, FALSE);
|
||||
LanguageList = NULL;
|
||||
}
|
||||
if (LayoutList)
|
||||
{
|
||||
DestroyGenericList(LayoutList, TRUE);
|
||||
LayoutList = NULL;
|
||||
}
|
||||
|
||||
/* Setup has finished */
|
||||
FinishSetup(&USetupData);
|
||||
|
||||
|
|
|
@ -71,7 +71,13 @@
|
|||
|
||||
extern HANDLE ProcessHeap;
|
||||
extern BOOLEAN IsUnattendedSetup;
|
||||
extern PCWSTR SelectedLanguageId;
|
||||
|
||||
/* Settings lists *****/
|
||||
extern PGENERIC_LIST ComputerList;
|
||||
extern PGENERIC_LIST DisplayList;
|
||||
extern PGENERIC_LIST KeyboardList;
|
||||
extern PGENERIC_LIST LanguageList;
|
||||
extern PGENERIC_LIST LayoutList;
|
||||
|
||||
typedef enum _PAGE_NUMBER
|
||||
{
|
||||
|
|
|
@ -807,6 +807,7 @@ StartDlgProc(
|
|||
pState->NextPage = DONE;
|
||||
pState->Run = INSTALLER;
|
||||
EndDialog(hwndDlg, LOWORD(wParam));
|
||||
// TODO: Just hide the dialog, and show it again in case the child process (setup) dies?
|
||||
break;
|
||||
|
||||
case IDOK:
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include <mmsystem.h>
|
||||
#include <userenv.h>
|
||||
#include <ndk/setypes.h>
|
||||
#include <ndk/sefuncs.h>
|
||||
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
|
@ -1313,18 +1312,17 @@ SASWindowProc(
|
|||
}
|
||||
case WM_CREATE:
|
||||
{
|
||||
/* Get the session pointer from the create data */
|
||||
/* Get the session pointer from the create data and save it */
|
||||
Session = (PWLSESSION)((LPCREATESTRUCT)lParam)->lpCreateParams;
|
||||
|
||||
/* Save the Session pointer */
|
||||
SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR)Session);
|
||||
if (GetSetupType())
|
||||
|
||||
if (IsNonOOBESetup(g_setupType))
|
||||
return TRUE;
|
||||
return RegisterHotKeys(Session, hwndDlg);
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
if (!GetSetupType())
|
||||
if (!IsNonOOBESetup(g_setupType))
|
||||
UnregisterHotKeys(Session, hwndDlg);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -9,31 +9,32 @@
|
|||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#include "winlogon.h"
|
||||
#include <ndk/setypes.h>
|
||||
|
||||
SETUP_TYPE g_setupType = SetupType_None;
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
|
||||
DWORD
|
||||
SETUP_TYPE
|
||||
GetSetupType(VOID)
|
||||
{
|
||||
DWORD dwError;
|
||||
HKEY hKey;
|
||||
DWORD dwError;
|
||||
DWORD dwType;
|
||||
DWORD dwSize;
|
||||
DWORD dwSetupType;
|
||||
|
||||
TRACE("GetSetupType()\n");
|
||||
|
||||
/* Open key */
|
||||
dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"SYSTEM\\Setup",
|
||||
L"SYSTEM\\Setup", // REGSTR_KEY_SYSTEM REGSTR_KEY_SETUP
|
||||
0,
|
||||
KEY_QUERY_VALUE,
|
||||
&hKey);
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
return 0;
|
||||
|
||||
/* Read key */
|
||||
dwSize = sizeof(DWORD);
|
||||
/* Read value */
|
||||
dwSize = sizeof(dwSetupType);
|
||||
dwError = RegQueryValueExW(hKey,
|
||||
L"SetupType",
|
||||
NULL,
|
||||
|
@ -41,18 +42,108 @@ GetSetupType(VOID)
|
|||
(LPBYTE)&dwSetupType,
|
||||
&dwSize);
|
||||
|
||||
/* Close key, and check if returned values are correct */
|
||||
/* Close key and check if returned values are correct */
|
||||
RegCloseKey(hKey);
|
||||
if (dwError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD))
|
||||
return 0;
|
||||
|
||||
TRACE("GetSetupType() returns %lu\n", dwSetupType);
|
||||
return dwSetupType;
|
||||
return (SETUP_TYPE)dwSetupType;
|
||||
}
|
||||
|
||||
// Partially reverts commit c88c4b4ad (r28194)
|
||||
static BOOL
|
||||
SetSetupType(
|
||||
_In_ DWORD dwSetupType)
|
||||
{
|
||||
HKEY hKey;
|
||||
DWORD dwError;
|
||||
|
||||
/* Open key */
|
||||
dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"SYSTEM\\Setup",
|
||||
0,
|
||||
KEY_SET_VALUE,
|
||||
&hKey);
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
|
||||
/* Write value */
|
||||
dwError = RegSetValueExW(hKey,
|
||||
L"SetupType",
|
||||
0,
|
||||
REG_DWORD,
|
||||
(LPBYTE)&dwSetupType,
|
||||
sizeof(dwSetupType));
|
||||
|
||||
/* Close key and check for success */
|
||||
RegCloseKey(hKey);
|
||||
return (dwError == ERROR_SUCCESS);
|
||||
}
|
||||
|
||||
static BOOL
|
||||
IsSetupShutdownRequired(
|
||||
_Out_ SHUTDOWN_ACTION* pShutdownAction)
|
||||
{
|
||||
HKEY hKey;
|
||||
DWORD dwError;
|
||||
DWORD dwType;
|
||||
DWORD dwSize;
|
||||
DWORD dwValue;
|
||||
|
||||
/* Open key */
|
||||
dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"SYSTEM\\Setup", // REGSTR_KEY_SYSTEM REGSTR_KEY_SETUP
|
||||
0,
|
||||
KEY_QUERY_VALUE | KEY_SET_VALUE,
|
||||
&hKey);
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
|
||||
/* Read value */
|
||||
dwSize = sizeof(dwValue);
|
||||
dwError = RegQueryValueExW(hKey,
|
||||
L"SetupShutdownRequired",
|
||||
NULL,
|
||||
&dwType,
|
||||
(LPBYTE)&dwValue,
|
||||
&dwSize);
|
||||
|
||||
/* Close key and check if returned values are correct */
|
||||
RegCloseKey(hKey);
|
||||
if (dwError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD))
|
||||
return FALSE;
|
||||
|
||||
/* Delete the value */
|
||||
RegDeleteValueW(hKey, L"SetupShutdownRequired");
|
||||
|
||||
TRACE("IsSetupShutdownRequired() returns %lu\n", dwValue);
|
||||
*pShutdownAction = dwValue;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// FIXME: Make the function generic -- see sas.c!HandleShutdown()
|
||||
static VOID
|
||||
DoSetupShutdown(
|
||||
_In_ SHUTDOWN_ACTION Action)
|
||||
{
|
||||
BOOLEAN Old;
|
||||
|
||||
#if DBG
|
||||
static const PCSTR s_pszShutdownAction[] =
|
||||
{ "Shutting down", "Restarting", "Powering off"};
|
||||
|
||||
ERR("WL: %s NT...\n", s_pszShutdownAction[Action]);
|
||||
#endif
|
||||
|
||||
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, TRUE, FALSE, &Old);
|
||||
NtShutdownSystem(Action);
|
||||
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, Old, FALSE, &Old);
|
||||
ExitProcess(0);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
DWORD
|
||||
static DWORD
|
||||
WINAPI
|
||||
RunSetupThreadProc(
|
||||
IN LPVOID lpParameter)
|
||||
|
@ -104,7 +195,7 @@ RunSetupThreadProc(
|
|||
|
||||
TRACE("Should run '%s' now\n", debugstr_w(CommandLine));
|
||||
|
||||
SwitchDesktop(WLSession->ApplicationDesktop);
|
||||
// SwitchDesktop(WLSession->ApplicationDesktop);
|
||||
|
||||
/* Start process */
|
||||
StartupInfo.cb = sizeof(StartupInfo);
|
||||
|
@ -127,8 +218,8 @@ RunSetupThreadProc(
|
|||
&ProcessInformation);
|
||||
if (!Result)
|
||||
{
|
||||
TRACE("Failed to run setup process\n");
|
||||
SwitchDesktop(WLSession->WinlogonDesktop);
|
||||
ERR("Failed to run setup process '%s'\n", debugstr_w(CommandLine));
|
||||
// SwitchDesktop(WLSession->WinlogonDesktop);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -141,29 +232,111 @@ RunSetupThreadProc(
|
|||
CloseHandle(ProcessInformation.hThread);
|
||||
CloseHandle(ProcessInformation.hProcess);
|
||||
|
||||
// SwitchDesktop(WLSession->WinlogonDesktop);
|
||||
/* Reset the current setup type */
|
||||
if (dwExitCode == 0)
|
||||
SetSetupType(SetupType_None);
|
||||
|
||||
TRACE ("RunSetup() done\n");
|
||||
// // SwitchDesktop(WLSession->WinlogonDesktop);
|
||||
|
||||
TRACE("RunSetup() done\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
static BOOL
|
||||
RunSetup(VOID)
|
||||
{
|
||||
HANDLE hThread;
|
||||
// HANDLE hThread;
|
||||
|
||||
SwitchDesktop(WLSession->ApplicationDesktop);
|
||||
|
||||
#if 0
|
||||
hThread = CreateThread(NULL,
|
||||
0,
|
||||
RunSetupThreadProc,
|
||||
NULL,
|
||||
0,
|
||||
NULL);
|
||||
if (hThread != NULL)
|
||||
CloseHandle(hThread);
|
||||
if (hThread)
|
||||
#else
|
||||
if (RunSetupThreadProc(NULL))
|
||||
#endif
|
||||
{
|
||||
/* Message loop for the current thread */
|
||||
/* Pump and dispatch any input events */
|
||||
MSG msg;
|
||||
// while (MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, QS_ALLINPUT))
|
||||
// // if (dwRet == WAIT_OBJECT_0 + 1)
|
||||
{
|
||||
while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessageW(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
return hThread != NULL;
|
||||
// CloseHandle(hThread);
|
||||
}
|
||||
|
||||
SwitchDesktop(WLSession->WinlogonDesktop);
|
||||
|
||||
// return (hThread != NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
CheckForSetup(VOID)
|
||||
{
|
||||
TRACE("CheckForSetup() called\n");
|
||||
|
||||
/* Check for pending setup */
|
||||
switch (g_setupType)
|
||||
{
|
||||
case SetupType_None:
|
||||
/* Nothing to do */
|
||||
break;
|
||||
|
||||
case SetupType_Full: case SetupType_Upgrade:
|
||||
case SetupType_OOBE:
|
||||
{
|
||||
SHUTDOWN_ACTION shutdownAction = ShutdownReboot;
|
||||
|
||||
#if DBG
|
||||
static const PCSTR pszSetupType[] =
|
||||
{ "None", "", "OOBE", "Reserved", "Upgrade" };
|
||||
|
||||
TRACE("WL: %s%sSetup mode detected\n",
|
||||
pszSetupType[g_setupType], pszSetupType[g_setupType][0] ? " " : "");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We currently support three types of setup actions:
|
||||
*
|
||||
* - Full setup or upgrade: run it and reboot when done
|
||||
* or if the setup program crashed for whatever reason;
|
||||
*
|
||||
* - OOBE setup: run it, then check whether it requested
|
||||
* a power action and initiate it if so, otherwise
|
||||
* continue with regular logon.
|
||||
*/
|
||||
RunSetup();
|
||||
|
||||
/* Reboot only if needed */
|
||||
if ((g_setupType == SetupType_Full) || (g_setupType == SetupType_Upgrade) ||
|
||||
/*(g_setupType == SetupType_OOBE) &&*/IsSetupShutdownRequired(&shutdownAction))
|
||||
{
|
||||
DoSetupShutdown(shutdownAction);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SetupType_Reserved:
|
||||
default:
|
||||
/* Unknown setup type: ignore */
|
||||
WARN("WL: Unknown Setup type %lu, ignored\n", g_setupType);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -523,6 +523,11 @@ WinMain(
|
|||
/* Init Notifications */
|
||||
InitNotifications();
|
||||
|
||||
/* Check for pending setup: if so, run it and reboot when done */
|
||||
__debugbreak();
|
||||
g_setupType = GetSetupType();
|
||||
// CheckForSetup();
|
||||
|
||||
/* Load and initialize gina */
|
||||
if (!GinaInit(WLSession))
|
||||
{
|
||||
|
@ -586,17 +591,20 @@ WinMain(
|
|||
WLSession->LogonState = STATE_INIT;
|
||||
RemoveStatusMessage(WLSession);
|
||||
|
||||
/* Check for pending setup */
|
||||
if (GetSetupType() != 0)
|
||||
{
|
||||
/* Run setup and reboot when done */
|
||||
TRACE("WL: Setup mode detected\n");
|
||||
RunSetup();
|
||||
}
|
||||
else
|
||||
{
|
||||
PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_CTRL_ALT_DEL, 0);
|
||||
}
|
||||
|
||||
/* Check for pending setup: if so, run it and reboot when done */
|
||||
__debugbreak();
|
||||
// g_setupType = GetSetupType();
|
||||
/*****CheckForSetup();******/
|
||||
|
||||
|
||||
/*
|
||||
* Simulate an initial Ctrl-Alt-Del key press.
|
||||
* FIXME: This should quite probably be done only if some registry
|
||||
* setting is set. However, since our current Ctrl-Alt-Del hotkey
|
||||
* handling in Win32k is broken, we need to use this hack!
|
||||
*/
|
||||
// PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_CTRL_ALT_DEL, 0);
|
||||
|
||||
(void)LoadLibraryW(L"sfc_os.dll");
|
||||
|
||||
|
|
|
@ -361,11 +361,25 @@ AllowAccessOnSession(
|
|||
_In_ PWLSESSION Session);
|
||||
|
||||
/* setup.c */
|
||||
DWORD
|
||||
typedef enum _SETUP_TYPE
|
||||
{
|
||||
SetupType_None = 0,
|
||||
SetupType_Full,
|
||||
SetupType_OOBE,
|
||||
SetupType_Reserved,
|
||||
SetupType_Upgrade
|
||||
} SETUP_TYPE, *PSETUP_TYPE;
|
||||
|
||||
extern SETUP_TYPE g_setupType;
|
||||
|
||||
#define IsNonOOBESetup(setupType) \
|
||||
(((setupType) == SetupType_Full) || ((setupType) == SetupType_Upgrade))
|
||||
|
||||
SETUP_TYPE
|
||||
GetSetupType(VOID);
|
||||
|
||||
BOOL
|
||||
RunSetup(VOID);
|
||||
VOID
|
||||
CheckForSetup(VOID);
|
||||
|
||||
/* shutdown.h */
|
||||
DWORD
|
||||
|
|
|
@ -213,7 +213,8 @@ Cabinet=reactos.cab
|
|||
|
||||
[SetupData]
|
||||
DefaultPath = \ReactOS
|
||||
SetupDebugOptions = "/DEBUG /KDSERIAL /DEBUGPORT=COM1 /FIRSTCHANCE"
|
||||
;SetupDebugOptions = "/DEBUG /KDSERIAL /DEBUGPORT=COM1 /FIRSTCHANCE"
|
||||
SetupDebugOptions = "/DEBUG /DEBUGPORT=VBOX /FIRSTCHANCE"
|
||||
;SetupDebugOptions = "/DEBUG /SOS /DEBUGPORT=SCREEN"
|
||||
OsLoadOptions = "/FASTDETECT /NOGUIBOOT /NODEBUG"
|
||||
|
||||
|
@ -221,8 +222,10 @@ OsLoadOptions = "/FASTDETECT /NOGUIBOOT /NODEBUG"
|
|||
AnsiCodepage = c_1252.nls
|
||||
OemCodepage = c_437.nls
|
||||
UnicodeCasetable = l_intl.nls
|
||||
DefaultLayout = 00000409
|
||||
DefaultLanguage = 00000409
|
||||
;DefaultLayout = 00000409
|
||||
DefaultLayout = 0000041A
|
||||
;DefaultLanguage = 00000409
|
||||
DefaultLanguage = 0000040C
|
||||
|
||||
[Computer.NTx86]
|
||||
pci_up = "Standard PC Uniprocessor"
|
||||
|
|
|
@ -52,8 +52,12 @@ NtfsCleanupFile(PDEVICE_EXTENSION DeviceExt,
|
|||
if (!Fcb)
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
DPRINT1("DeviceExt->OpenHandleCount = 0x%lx\n", DeviceExt->OpenHandleCount);
|
||||
DPRINT1("Fcb->OpenHandleCount = 0x%lx\n", Fcb->OpenHandleCount);
|
||||
|
||||
if (Fcb->Flags & FCB_IS_VOLUME)
|
||||
{
|
||||
ASSERT(Fcb->OpenHandleCount > 0);
|
||||
Fcb->OpenHandleCount--;
|
||||
|
||||
if (Fcb->OpenHandleCount != 0)
|
||||
|
@ -68,6 +72,7 @@ NtfsCleanupFile(PDEVICE_EXTENSION DeviceExt,
|
|||
return STATUS_PENDING;
|
||||
}
|
||||
|
||||
ASSERT(Fcb->OpenHandleCount > 0);
|
||||
Fcb->OpenHandleCount--;
|
||||
|
||||
CcUninitializeCacheMap(FileObject, &Fcb->RFCB.FileSize, NULL);
|
||||
|
|
|
@ -59,12 +59,17 @@ NtfsCloseFile(PDEVICE_EXTENSION DeviceExt,
|
|||
FileObject->FsContext2 = NULL;
|
||||
FileObject->FsContext = NULL;
|
||||
FileObject->SectionObjectPointer = NULL;
|
||||
|
||||
DPRINT1("DeviceExt->OpenHandleCount = 0x%lx\n", DeviceExt->OpenHandleCount);
|
||||
DPRINT1("Fcb->OpenHandleCount = 0x%lx\n", Fcb->OpenHandleCount);
|
||||
|
||||
ASSERT(DeviceExt->OpenHandleCount > 0);
|
||||
DeviceExt->OpenHandleCount--;
|
||||
|
||||
if (FileObject->FileName.Buffer)
|
||||
{
|
||||
// This a FO, that was created outside from FSD.
|
||||
// Some FO's are created with IoCreateStreamFileObject() insid from FSD.
|
||||
// Some FO's are created with IoCreateStreamFileObject() inside from FSD.
|
||||
// This FO's don't have a FileName.
|
||||
NtfsReleaseFCB(DeviceExt, Fcb);
|
||||
}
|
||||
|
|
|
@ -606,6 +606,9 @@ NtfsCreateFile(PDEVICE_OBJECT DeviceObject,
|
|||
{
|
||||
Fcb->OpenHandleCount++;
|
||||
DeviceExt->OpenHandleCount++;
|
||||
|
||||
DPRINT1("DeviceExt->OpenHandleCount = 0x%lx\n", DeviceExt->OpenHandleCount);
|
||||
DPRINT1("Fcb->OpenHandleCount = 0x%lx\n", Fcb->OpenHandleCount);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -876,6 +876,8 @@ LockOrUnlockVolume(PDEVICE_EXTENSION DeviceExt,
|
|||
}
|
||||
|
||||
/* Deny locking if we're not alone */
|
||||
DPRINT1("DeviceExt->OpenHandleCount = 0x%lx\n", DeviceExt->OpenHandleCount);
|
||||
DPRINT1("Fcb->OpenHandleCount = 0x%lx\n", Fcb->OpenHandleCount);
|
||||
if (Lock && DeviceExt->OpenHandleCount != 1)
|
||||
{
|
||||
return STATUS_ACCESS_DENIED;
|
||||
|
|
Loading…
Reference in a new issue