Sync with trunk r63270.
[reactos.git] / base / setup / usetup / mui.c
index 114ee8e..1ebcf4a 100644 (file)
@@ -25,9 +25,6 @@
  */
 
 #include "usetup.h"
-#include "interface/consup.h"
-#include "errorcode.h"
-#include "mui.h"
 #include "muifonts.h"
 #include "muilanguages.h"
 
@@ -41,9 +38,9 @@ PopupError(IN PCCH Text,
            IN PINPUT_RECORD Ir,
            IN ULONG WaitEvent);
 
-static 
+static
 ULONG
-FindLanguageIndex()
+FindLanguageIndex(VOID)
 {
     ULONG lngIndex = 0;
 
@@ -67,9 +64,28 @@ FindLanguageIndex()
 }
 
 
+BOOLEAN
+IsLanguageAvailable(
+    PWCHAR LanguageId)
+{
+    ULONG lngIndex = 0;
+
+    do
+    {
+        if (_wcsicmp(LanguageList[lngIndex].LanguageID , LanguageId) == 0)
+            return TRUE;
+
+        lngIndex++;
+    }while (LanguageList[lngIndex].MuiPages != NULL);
+
+    return FALSE;
+}
+
+
 static
 const MUI_ENTRY *
-FindMUIEntriesOfPage(IN ULONG PageNumber)
+FindMUIEntriesOfPage(
+    IN ULONG PageNumber)
 {
     ULONG muiIndex = 0;
     ULONG lngIndex;
@@ -89,6 +105,7 @@ FindMUIEntriesOfPage(IN ULONG PageNumber)
     return NULL;
 }
 
+
 static
 const MUI_ERROR *
 FindMUIErrorEntries(VOID)
@@ -97,6 +114,7 @@ FindMUIErrorEntries(VOID)
     return LanguageList[lngIndex].MuiErrors;
 }
 
+
 static
 const MUI_STRING *
 FindMUIStringEntries(VOID)
@@ -105,6 +123,7 @@ FindMUIStringEntries(VOID)
     return LanguageList[lngIndex].MuiStrings;
 }
 
+
 LPCWSTR
 MUIDefaultKeyboardLayout(VOID)
 {
@@ -112,6 +131,7 @@ MUIDefaultKeyboardLayout(VOID)
     return LanguageList[lngIndex].MuiLayouts[0].LayoutID;
 }
 
+
 PWCHAR
 MUIGetGeoID(VOID)
 {
@@ -119,6 +139,7 @@ MUIGetGeoID(VOID)
     return LanguageList[lngIndex].GeoID;
 }
 
+
 const MUI_LAYOUTS *
 MUIGetLayoutsList(VOID)
 {
@@ -126,8 +147,10 @@ MUIGetLayoutsList(VOID)
     return LanguageList[lngIndex].MuiLayouts;
 }
 
+
 VOID
-MUIDisplayPage(IN ULONG page)
+MUIClearPage(
+    IN ULONG page)
 {
     const MUI_ENTRY * entry;
     int index;
@@ -145,19 +168,52 @@ MUIDisplayPage(IN ULONG page)
     index = 0;
     do
     {
-        CONSOLE_SetStyledText (
-                   entry[index].X, 
-                   entry[index].Y, 
-                   entry[index].Flags,
-                   entry[index].Buffer);
+        CONSOLE_ClearStyledText(entry[index].X,
+                                entry[index].Y,
+                                entry[index].Flags,
+                                strlen(entry[index].Buffer));
+        index++;
+    }
+    while (entry[index].Buffer != NULL);
+}
+
+
+VOID
+MUIDisplayPage(
+    IN ULONG page)
+{
+    const MUI_ENTRY * entry;
+    int index;
+
+    entry = FindMUIEntriesOfPage(page);
+    if (!entry)
+    {
+        PopupError("Error: Failed to find translated page",
+                   NULL,
+                   NULL,
+                   POPUP_WAIT_NONE);
+        return;
+    }
+
+    index = 0;
+    do
+    {
+        CONSOLE_SetStyledText(entry[index].X,
+                              entry[index].Y,
+                              entry[index].Flags,
+                              entry[index].Buffer);
 
         index++;
     }
     while (entry[index].Buffer != NULL);
 }
 
+
 VOID
-MUIDisplayError(IN ULONG ErrorNum, OUT PINPUT_RECORD Ir, IN ULONG WaitEvent)
+MUIDisplayError(
+    IN ULONG ErrorNum,
+    OUT PINPUT_RECORD Ir,
+    IN ULONG WaitEvent)
 {
     const MUI_ERROR * entry;
 
@@ -187,8 +243,10 @@ MUIDisplayError(IN ULONG ErrorNum, OUT PINPUT_RECORD Ir, IN ULONG WaitEvent)
                WaitEvent);
 }
 
+
 LPSTR
-MUIGetString(ULONG Number)
+MUIGetString(
+    ULONG Number)
 {
     ULONG i;
     const MUI_STRING * entry;
@@ -209,15 +267,20 @@ MUIGetString(ULONG Number)
     sprintf(szErr, "Error: failed find string id %lu for language index %lu\n", Number, FindLanguageIndex());
 
     PopupError(szErr,
-                NULL,
-                NULL,
-                POPUP_WAIT_NONE);
+               NULL,
+               NULL,
+               POPUP_WAIT_NONE);
 
     return "<nostring>";
 }
 
-static BOOLEAN
-AddHotkeySettings(IN LPCWSTR Hotkey, IN LPCWSTR LangHotkey, IN LPCWSTR LayoutHotkey)
+
+static
+BOOLEAN
+AddHotkeySettings(
+    IN LPCWSTR Hotkey,
+    IN LPCWSTR LangHotkey,
+    IN LPCWSTR LayoutHotkey)
 {
     OBJECT_ATTRIBUTES ObjectAttributes;
     UNICODE_STRING KeyName;
@@ -300,8 +363,10 @@ AddHotkeySettings(IN LPCWSTR Hotkey, IN LPCWSTR LangHotkey, IN LPCWSTR LayoutHot
     return TRUE;
 }
 
+
 BOOLEAN
-AddKbLayoutsToRegistry(IN const MUI_LAYOUTS * MuiLayouts)
+AddKbLayoutsToRegistry(
+    IN const MUI_LAYOUTS *MuiLayouts)
 {
     OBJECT_ATTRIBUTES ObjectAttributes;
     UNICODE_STRING KeyName;
@@ -421,7 +486,7 @@ AddKbLayoutsToRegistry(IN const MUI_LAYOUTS * MuiLayouts)
         }
         else
         {
-            swprintf(szLangID, L"d%03u%s", uCount, MuiLayouts[uIndex].LangID);
+            swprintf(szLangID, L"d%03lu%s", uCount, MuiLayouts[uIndex].LangID);
             Status = NtSetValueKey(KeyHandle,
                                    &ValueName,
                                    0,
@@ -469,10 +534,12 @@ AddKbLayoutsToRegistry(IN const MUI_LAYOUTS * MuiLayouts)
     return TRUE;
 }
 
+
 BOOLEAN
 AddKeyboardLayouts(VOID)
 {
     ULONG lngIndex = 0;
+
     do
     {
         if (_wcsicmp(LanguageList[lngIndex].LanguageID , SelectedLanguageId) == 0)
@@ -487,8 +554,13 @@ AddKeyboardLayouts(VOID)
     return FALSE;
 }
 
-static BOOLEAN
-AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPage)
+
+static
+BOOLEAN
+AddCodepageToRegistry(
+    IN LPCWSTR ACPage,
+    IN LPCWSTR OEMCPage,
+    IN LPCWSTR MACCPage)
 {
     OBJECT_ATTRIBUTES ObjectAttributes;
     UNICODE_STRING KeyName;
@@ -520,7 +592,7 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
                            0,
                            REG_SZ,
                            (PVOID)ACPage,
-                           (wcslen(ACPage)+1) * sizeof(PWCHAR));
+                           (wcslen(ACPage)+1) * sizeof(WCHAR));
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
@@ -535,7 +607,7 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
                            0,
                            REG_SZ,
                            (PVOID)OEMCPage,
-                           (wcslen(OEMCPage)+1) * sizeof(PWCHAR));
+                           (wcslen(OEMCPage)+1) * sizeof(WCHAR));
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
@@ -550,7 +622,7 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
                            0,
                            REG_SZ,
                            (PVOID)MACCPage,
-                           (wcslen(MACCPage)+1) * sizeof(PWCHAR));
+                           (wcslen(MACCPage)+1) * sizeof(WCHAR));
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
@@ -563,8 +635,11 @@ AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPag
     return TRUE;
 }
 
-static BOOLEAN
-AddFontsSettingsToRegistry(IN const MUI_SUBFONT * MuiSubFonts)
+
+static
+BOOLEAN
+AddFontsSettingsToRegistry(
+    IN const MUI_SUBFONT * MuiSubFonts)
 {
     OBJECT_ATTRIBUTES ObjectAttributes;
     UNICODE_STRING KeyName;
@@ -574,7 +649,7 @@ AddFontsSettingsToRegistry(IN const MUI_SUBFONT * MuiSubFonts)
     ULONG uIndex = 0;
 
     RtlInitUnicodeString(&KeyName,
-                         L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SysFontSubstitutes");
+                         L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes");
     InitializeObjectAttributes(&ObjectAttributes,
                                &KeyName,
                                OBJ_CASE_INSENSITIVE,
@@ -614,6 +689,7 @@ AddFontsSettingsToRegistry(IN const MUI_SUBFONT * MuiSubFonts)
     return TRUE;
 }
 
+
 BOOLEAN
 AddCodePage(VOID)
 {
@@ -642,6 +718,7 @@ AddCodePage(VOID)
     return FALSE;
 }
 
+
 VOID
 SetConsoleCodePage(VOID)
 {