5591b890e6b2ba6c556dc3e973f0a5dd0d8ebb67
[reactos.git] / reactos / base / setup / usetup / mui.c
1 #include "usetup.h"
2 #include "errorcode.h"
3 #include "mui.h"
4
5 #include "lang/en-US.h"
6 #include "lang/de-DE.h"
7 #include "lang/el-GR.h"
8 #include "lang/es-ES.h"
9 #include "lang/fr-FR.h"
10 #include "lang/it-IT.h"
11 #include "lang/ru-RU.h"
12 #include "lang/sv-SE.h"
13 #include "lang/uk-UA.h"
14
15 static MUI_LANGUAGE LanguageList[] =
16 {
17 {
18 "English",
19 enUSPages
20 },
21 {
22 "French",
23 frFRPages
24 },
25 {
26 "German",
27 deDEPages
28 },
29 {
30 "Greek",
31 elGRPages
32 },
33 {
34 "Italian",
35 itITPages
36 },
37 {
38 "Russian",
39 ruRUPages
40 },
41 {
42 "Spanish",
43 esESPages
44 },
45 {
46 "Swedish",
47 svSEPages
48 },
49 {
50 "Ukrainian",
51 ukUAPages
52 },
53 {
54 NULL,
55 NULL
56 }
57 };
58
59 static ULONG SelectedLanguage = 0;
60
61 extern
62 VOID
63 PopupError(PCHAR Text,
64 PCHAR Status,
65 PINPUT_RECORD Ir,
66 ULONG WaitEvent);
67
68
69 PGENERIC_LIST
70 MUICreateLanguageList()
71 {
72 PGENERIC_LIST List;
73 ULONG Index;
74
75 List = CreateGenericList();
76 if (List == NULL)
77 {
78 return NULL;
79 }
80
81 Index = 0;
82
83 do
84 {
85 AppendGenericListEntry(List, LanguageList[Index].LanguageDescriptor, (PVOID)Index, (Index == 0 ? TRUE : FALSE));
86 Index++;
87 }while(LanguageList[Index].MuiPages && LanguageList[Index].LanguageDescriptor);
88
89 return List;
90 }
91
92 BOOLEAN
93 MUISelectLanguage(ULONG LanguageIndex)
94 {
95 SelectedLanguage = LanguageIndex;
96 return TRUE;
97 }
98
99
100 static
101 MUI_ENTRY *
102 findMUIEntriesOfPage(ULONG PageNumber, MUI_PAGE * Pages)
103 {
104 ULONG Index = 0;
105 do
106 {
107 if (Pages[Index].Number == PageNumber)
108 {
109 return Pages[Index].MuiEntry;
110 }
111 Index++;
112 }while(Pages[Index].MuiEntry != NULL);
113 return NULL;
114 }
115
116 VOID
117 MUIDisplayPage(ULONG pg)
118 {
119 MUI_ENTRY * entry;
120 int index;
121 int flags;
122
123 entry = findMUIEntriesOfPage(pg, LanguageList[SelectedLanguage].MuiPages);
124 if (!entry)
125 {
126 PopupError("Error: Failed to find translated page",
127 NULL,
128 NULL,
129 POPUP_WAIT_NONE);
130 return;
131 }
132
133 index = 0;
134 do
135 {
136 flags = entry[index].Flags;
137 switch(flags)
138 {
139 case TEXT_NORMAL:
140 CONSOLE_SetTextXY(entry[index].X, entry[index].Y, entry[index].Buffer);
141 break;
142 case TEXT_HIGHLIGHT:
143 CONSOLE_SetHighlightedTextXY(entry[index].X, entry[index].Y, entry[index].Buffer);
144 break;
145 case TEXT_UNDERLINE:
146 CONSOLE_SetUnderlinedTextXY(entry[index].X, entry[index].Y, entry[index].Buffer);
147 break;
148 case TEXT_STATUS:
149 CONSOLE_SetStatusText(entry[index].Buffer);
150 break;
151 default:
152 break;
153 }
154 index++;
155 }while(entry[index].Buffer != NULL);
156 }
157
158 VOID
159 MUIDisplayError(ULONG ErrorNum, PINPUT_RECORD Ir, ULONG WaitEvent)
160 {
161 if (ErrorNum >= ERROR_LAST_ERROR_CODE)
162 {
163 PopupError("invalid error number provided",
164 "press enter to continue",
165 Ir,
166 POPUP_WAIT_ENTER);
167
168 return;
169 }
170
171 PopupError(enUSErrorEntries[ErrorNum].ErrorText,
172 enUSErrorEntries[ErrorNum].ErrorStatus,
173 Ir,
174 WaitEvent);
175 }