ReactOS 0.4.16-dev-303-g11d5cb8
options.c
Go to the documentation of this file.
1/*
2 * FreeLoader
3 * Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20/* INCLUDES *******************************************************************/
21
22#include <freeldr.h>
23#include <debug.h>
24
25/* GLOBALS ********************************************************************/
26
28{
29 "Safe Mode",
30 "Safe Mode with Networking",
31 "Safe Mode with Command Prompt",
32
33 NULL,
34
35 "Enable Boot Logging",
36 "Enable VGA Mode",
37 "Last Known Good Configuration",
38 "Directory Services Restore Mode",
39 "Debugging Mode",
40 "FreeLdr debugging",
41
42 NULL,
43
44 "Start ReactOS normally",
45#ifdef HAS_OPTION_MENU_EDIT_CMDLINE
46 "Edit Boot Command Line (F10)",
47#endif
48#ifdef HAS_OPTION_MENU_CUSTOM_BOOT
49 "Custom Boot",
50#endif
51#ifdef HAS_OPTION_MENU_REBOOT
52 "Reboot",
53#endif
54};
55
56const
57PCSTR FrldrDbgMsg = "Enable FreeLdr debug channels\n"
58 "Acceptable syntax: [level1]#channel1[,[level2]#channel2]\n"
59 "level can be one of: trace,warn,fixme,err\n"
60 " if the level is omitted all levels\n"
61 " are enabled for the specified channel\n"
62 "# can be either + or -\n"
63 "channel can be one of the following:\n"
64 " all,warning,memory,filesystem,inifile,ui,disk,cache,registry,\n"
65 " reactos,linux,hwdetect,windows,peloader,scsiport,heap\n"
66 "Examples:\n"
67 " trace+windows,trace+reactos\n"
68 " +hwdetect,err-disk\n"
69 " +peloader\n"
70 "NOTE: all letters must be lowercase, no spaces allowed.";
71
72/* The boot options are mutually exclusive */
74{
76
80
83};
84
89
90/* FUNCTIONS ******************************************************************/
91
93{
94 ULONG SelectedMenuItem;
95 CHAR DebugChannelString[100];
96
97 if (!UiDisplayMenu("Select an option:", NULL,
98 TRUE,
100 sizeof(OptionsMenuList) / sizeof(OptionsMenuList[0]),
101 11, // Use "Start ReactOS normally" as default; see the switch below.
102 -1,
103 &SelectedMenuItem,
104 TRUE,
105 NULL, NULL))
106 {
107 /* The user pressed ESC */
108 return;
109 }
110
111 /* Clear the backdrop */
113
114 switch (SelectedMenuItem)
115 {
116 case 0: // Safe Mode
119 break;
120 case 1: // Safe Mode with Networking
123 break;
124 case 2: // Safe Mode with Command Prompt
127 break;
128 // case 3: // Separator
129 // break;
130 case 4: // Enable Boot Logging
132 break;
133 case 5: // Enable VGA Mode
134 VgaMode = TRUE;
135 break;
136 case 6: // Last Known Good Configuration
138 break;
139 case 7: // Directory Services Restore Mode
141 break;
142 case 8: // Debugging Mode
144 break;
145 case 9: // FreeLdr debugging
146 DebugChannelString[0] = 0;
148 DebugChannelString,
149 sizeof(DebugChannelString) / sizeof(DebugChannelString[0])))
150 {
151 DbgParseDebugChannels(DebugChannelString);
152 }
153 break;
154 // case 10: // Separator
155 // break;
156 case 11: // Start ReactOS normally
157 // Reset all the parameters to their default values.
160 VgaMode = FALSE;
162 break;
163#ifdef HAS_OPTION_MENU_EDIT_CMDLINE
164 case 12: // Edit command line
165 EditOperatingSystemEntry(OperatingSystem);
166 break;
167#endif
168#ifdef HAS_OPTION_MENU_CUSTOM_BOOT
169 case 13: // Custom Boot
171 break;
172#endif
173#ifdef HAS_OPTION_MENU_REBOOT
174 case 14: // Reboot
176 break;
177#endif
178 }
179}
180
182{
183 CHAR BootOptions[260] = "";
184
185 switch (BootOptionChoice)
186 {
187 case SAFE_MODE:
189 break;
190
193 break;
194
197 break;
198
201 break;
202
205 break;
206
207 default:
208 break;
209 }
210
211 if (BootLogging)
212 {
213 if ( (BootOptionChoice != SAFE_MODE) &&
216 {
218 {
219 strcat(BootOptions, ", ");
220 }
222 }
223 }
224
225 if (VgaMode)
226 {
227 if ((BootOptionChoice != NO_OPTION) ||
229 {
230 strcat(BootOptions, ", ");
231 }
233 }
234
235 if (DebuggingMode)
236 {
237 if ((BootOptionChoice != NO_OPTION) ||
239 {
240 strcat(BootOptions, ", ");
241 }
243 }
244
245 /* Display the chosen boot options */
246 UiDrawText(0,
247 UiScreenHeight - 2,
250}
251
253{
254 switch (BootOptionChoice)
255 {
256 case SAFE_MODE:
257 strcat(BootOptions, " /SAFEBOOT:MINIMAL /SOS /NOGUIBOOT");
258 break;
259
261 strcat(BootOptions, " /SAFEBOOT:NETWORK /SOS /NOGUIBOOT");
262 break;
263
265 strcat(BootOptions, " /SAFEBOOT:MINIMAL(ALTERNATESHELL) /SOS /NOGUIBOOT");
266 break;
267
269 DbgPrint("Last known good configuration is not supported yet!\n");
270 break;
271
273 strcat(BootOptions, " /SAFEBOOT:DSREPAIR /SOS");
274 break;
275
276 default:
277 break;
278 }
279
280 if (BootLogging)
281 strcat(BootOptions, " /BOOTLOG");
282
283 if (VgaMode)
284 strcat(BootOptions, " /BASEVIDEO");
285
286 if (DebuggingMode)
287 strcat(BootOptions, " /DEBUG");
288}
unsigned char BOOLEAN
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
@ BootOptions
Definition: bl.h:898
#define DbgParseDebugChannels(val)
Definition: debug.h:124
BOOLEAN UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length)
Definition: ui.c:634
#define COLOR_LIGHTBLUE
Definition: ui.h:332
BOOLEAN UiDisplayMenu(IN PCSTR MenuHeader, IN PCSTR MenuFooter OPTIONAL, IN BOOLEAN ShowBootOptions, IN PCSTR MenuItemList[], IN ULONG MenuItemCount, IN ULONG DefaultMenuItem, IN LONG MenuTimeOut, OUT PULONG SelectedMenuItem, IN BOOLEAN CanEscape, IN UiMenuKeyPressFilterCallback KeyPressFilter OPTIONAL, IN PVOID Context OPTIONAL)
Definition: ui.c:605
VOID UiDrawText(_In_ ULONG X, _In_ ULONG Y, _In_ PCSTR Text, _In_ UCHAR Attr)
Definition: ui.c:254
UCHAR UiMenuBgColor
Definition: ui.c:35
#define ATTR(cFore, cBack)
Definition: ui.h:317
ULONG UiScreenHeight
Definition: ui.c:55
VOID UiDrawBackdrop(VOID)
Definition: ui.c:233
static BOOLEAN DebuggingMode
Definition: options.c:88
VOID DoOptionsMenu(IN OperatingSystemItem *OperatingSystem)
Definition: options.c:92
VOID DisplayBootTimeOptions(VOID)
Definition: options.c:181
BootOption
Definition: options.c:74
@ SAFE_MODE
Definition: options.c:77
@ DIRECTORY_SERVICES_RESTORE_MODE
Definition: options.c:82
@ SAFE_MODE_WITH_COMMAND_PROMPT
Definition: options.c:79
@ LAST_KNOWN_GOOD_CONFIGURATION
Definition: options.c:81
@ NO_OPTION
Definition: options.c:75
@ SAFE_MODE_WITH_NETWORKING
Definition: options.c:78
const PCSTR FrldrDbgMsg
Definition: options.c:57
static BOOLEAN VgaMode
Definition: options.c:87
PCSTR OptionsMenuList[]
Definition: options.c:27
VOID AppendBootTimeOptions(PCHAR BootOptions)
Definition: options.c:252
static BOOLEAN BootLogging
Definition: options.c:86
static enum BootOption BootOptionChoice
Definition: options.c:85
VOID OptionMenuCustomBoot(VOID)
VOID OptionMenuReboot(VOID)
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define DbgPrint
Definition: hal.h:12
const char * PCSTR
Definition: typedefs.h:52
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
char CHAR
Definition: xmlstorage.h:175