ReactOS 0.4.16-dev-1025-gd3456f5
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,
99 sizeof(OptionsMenuList) / sizeof(OptionsMenuList[0]),
100 11, // Use "Start ReactOS normally" as default; see the switch below.
101 -1,
102 &SelectedMenuItem,
103 TRUE,
104 NULL, NULL))
105 {
106 /* The user pressed ESC */
107 return;
108 }
109
110 /* Clear the backdrop */
112
113 switch (SelectedMenuItem)
114 {
115 case 0: // Safe Mode
118 break;
119 case 1: // Safe Mode with Networking
122 break;
123 case 2: // Safe Mode with Command Prompt
126 break;
127 // case 3: // Separator
128 // break;
129 case 4: // Enable Boot Logging
131 break;
132 case 5: // Enable VGA Mode
133 VgaMode = TRUE;
134 break;
135 case 6: // Last Known Good Configuration
137 break;
138 case 7: // Directory Services Restore Mode
140 break;
141 case 8: // Debugging Mode
143 break;
144 case 9: // FreeLdr debugging
145 DebugChannelString[0] = 0;
147 DebugChannelString,
148 sizeof(DebugChannelString) / sizeof(DebugChannelString[0])))
149 {
150 DbgParseDebugChannels(DebugChannelString);
151 }
152 break;
153 // case 10: // Separator
154 // break;
155 case 11: // Start ReactOS normally
156 // Reset all the parameters to their default values.
159 VgaMode = FALSE;
161 break;
162#ifdef HAS_OPTION_MENU_EDIT_CMDLINE
163 case 12: // Edit command line
164 EditOperatingSystemEntry(OperatingSystem);
165 break;
166#endif
167#ifdef HAS_OPTION_MENU_CUSTOM_BOOT
168 case 13: // Custom Boot
170 break;
171#endif
172#ifdef HAS_OPTION_MENU_REBOOT
173 case 14: // Reboot
175 break;
176#endif
177 }
178}
179
181{
182 CHAR BootOptions[260];
183
184 switch (BootOptionChoice)
185 {
186 case SAFE_MODE:
188 break;
189
192 break;
193
196 break;
197
200 break;
201
204 break;
205
206 default:
208 break;
209 }
210
211 if (BootLogging)
212 {
213 if ( (BootOptionChoice != SAFE_MODE) &&
216 {
217 if (BootOptions[0] != ANSI_NULL)
218 strcat(BootOptions, ", ");
220 }
221 }
222
223 if (VgaMode)
224 {
225 if (BootOptions[0] != ANSI_NULL)
226 strcat(BootOptions, ", ");
228 }
229
230 if (DebuggingMode)
231 {
232 if (BootOptions[0] != ANSI_NULL)
233 strcat(BootOptions, ", ");
235 }
236
237 /* Display the chosen boot options */
238 UiDrawText(0,
239 UiGetScreenHeight() - 2,
242}
243
245{
246 switch (BootOptionChoice)
247 {
248 case SAFE_MODE:
249 strcat(BootOptions, " /SAFEBOOT:MINIMAL /SOS /NOGUIBOOT");
250 break;
251
253 strcat(BootOptions, " /SAFEBOOT:NETWORK /SOS /NOGUIBOOT");
254 break;
255
257 strcat(BootOptions, " /SAFEBOOT:MINIMAL(ALTERNATESHELL) /SOS /NOGUIBOOT");
258 break;
259
261 DbgPrint("Last known good configuration is not supported yet!\n");
262 break;
263
265 strcat(BootOptions, " /SAFEBOOT:DSREPAIR /SOS");
266 break;
267
268 default:
269 break;
270 }
271
272 if (BootLogging)
273 strcat(BootOptions, " /BOOTLOG");
274
275 if (VgaMode)
276 strcat(BootOptions, " /BASEVIDEO");
277
278 if (DebuggingMode)
279 strcat(BootOptions, " /DEBUG");
280}
unsigned char BOOLEAN
@ BootOptions
Definition: bl.h:898
#define DbgParseDebugChannels(val)
Definition: debug.h:124
BOOLEAN UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length)
Definition: ui.c:633
#define COLOR_LIGHTBLUE
Definition: ui.h:338
VOID UiDrawText(_In_ ULONG X, _In_ ULONG Y, _In_ PCSTR Text, _In_ UCHAR Attr)
Definition: ui.c:254
VOID UiDrawBackdrop(ULONG DrawHeight)
Definition: ui.c:233
#define ATTR(cFore, cBack)
Definition: ui.h:323
UCHAR UiGetMenuBgColor(VOID)
Definition: ui.c:661
ULONG UiGetScreenHeight(VOID)
Definition: ui.c:655
BOOLEAN UiDisplayMenu(IN PCSTR MenuHeader, IN PCSTR MenuFooter OPTIONAL, 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
static BOOLEAN DebuggingMode
Definition: options.c:88
VOID DoOptionsMenu(IN OperatingSystemItem *OperatingSystem)
Definition: options.c:92
VOID DisplayBootTimeOptions(VOID)
Definition: options.c:180
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:244
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
#define ANSI_NULL
strcat
Definition: string.h:92
strcpy
Definition: string.h:131
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