3 * Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
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.
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.
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.
23 const CHAR BootDrivePrompt
[] = "Enter the boot drive.\n\nExamples:\nfd0 - first floppy drive\nhd0 - first hard drive\nhd1 - second hard drive\ncd0 - first CD-ROM drive.\n\nBIOS drive numbers may also be used:\n0 - first floppy drive\n0x80 - first hard drive\n0x81 - second hard drive";
24 const CHAR BootPartitionPrompt
[] = "Enter the boot partition.\n\nEnter 0 for the active (bootable) partition.";
25 const CHAR BootSectorFilePrompt
[] = "Enter the boot sector file path.\n\nExamples:\n\\BOOTSECT.DOS\n/boot/bootsect.dos";
26 const CHAR LinuxKernelPrompt
[] = "Enter the Linux kernel image path.\n\nExamples:\n/vmlinuz\n/boot/vmlinuz-2.4.18";
27 const CHAR LinuxInitrdPrompt
[] = "Enter the initrd image path.\n\nExamples:\n/initrd.gz\n/boot/root.img.gz\n\nLeave blank for no initial ram disk.";
28 const CHAR LinuxCommandLinePrompt
[] = "Enter the Linux kernel command line.\n\nExamples:\nroot=/dev/hda1\nroot=/dev/fd0 read-only\nroot=/dev/sdb1 init=/sbin/init";
29 const CHAR ReactOSSystemPathPrompt
[] = "Enter the path to your ReactOS system directory.\n\nExamples:\n\\REACTOS\n\\ROS";
30 const CHAR ReactOSOptionsPrompt
[] = "Enter the options you want passed to the kernel.\n\nExamples:\n/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200\n/FASTDETECT /SOS /NOGUIBOOT\n/BASEVIDEO /MAXMEM=64\n/KERNEL=NTKRNLMP.EXE /HAL=HALMPS.DLL";
32 const CHAR CustomBootPrompt
[] = "Press ENTER to boot your custom boot setup.";
34 VOID
OptionMenuCustomBoot(VOID
)
36 PCSTR CustomBootMenuList
[] = {
45 ULONG CustomBootMenuCount
= sizeof(CustomBootMenuList
) / sizeof(CustomBootMenuList
[0]);
46 ULONG SelectedMenuItem
;
48 if (!UiDisplayMenu(CustomBootMenuList
, CustomBootMenuCount
, 0, -1, &SelectedMenuItem
, TRUE
, NULL
))
50 // The user pressed ESC
54 switch (SelectedMenuItem
)
58 OptionMenuCustomBootDisk();
61 OptionMenuCustomBootPartition();
63 case 2: // Boot Sector File
64 OptionMenuCustomBootBootSectorFile();
67 OptionMenuCustomBootReactOS();
70 OptionMenuCustomBootLinux();
77 VOID
OptionMenuCustomBootDisk(VOID
)
79 CHAR SectionName
[100];
80 CHAR BootDriveString
[20];
84 RtlZeroMemory(SectionName
, sizeof(SectionName
));
85 RtlZeroMemory(BootDriveString
, sizeof(BootDriveString
));
87 if (!UiEditBox(BootDrivePrompt
, BootDriveString
, 20))
92 // Generate a unique section name
93 TimeInfo
= ArcGetTime();
94 sprintf(SectionName
, "CustomBootDisk%u%u%u%u%u%u", TimeInfo
->Year
, TimeInfo
->Day
, TimeInfo
->Month
, TimeInfo
->Hour
, TimeInfo
->Minute
, TimeInfo
->Second
);
97 if (!IniAddSection(SectionName
, &SectionId
))
103 if (!IniAddSettingValueToSection(SectionId
, "BootType", "Drive"))
109 if (!IniAddSettingValueToSection(SectionId
, "BootDrive", BootDriveString
))
114 UiMessageBox(CustomBootPrompt
);
116 LoadAndBootDrive(SectionName
);
119 VOID
OptionMenuCustomBootPartition(VOID
)
121 CHAR SectionName
[100];
122 CHAR BootDriveString
[20];
123 CHAR BootPartitionString
[20];
127 RtlZeroMemory(SectionName
, sizeof(SectionName
));
128 RtlZeroMemory(BootDriveString
, sizeof(BootDriveString
));
129 RtlZeroMemory(BootPartitionString
, sizeof(BootPartitionString
));
131 if (!UiEditBox(BootDrivePrompt
, BootDriveString
, 20))
136 if (!UiEditBox(BootPartitionPrompt
, BootPartitionString
, 20))
141 // Generate a unique section name
142 TimeInfo
= ArcGetTime();
143 sprintf(SectionName
, "CustomBootPartition%u%u%u%u%u%u", TimeInfo
->Year
, TimeInfo
->Day
, TimeInfo
->Month
, TimeInfo
->Hour
, TimeInfo
->Minute
, TimeInfo
->Second
);
146 if (!IniAddSection(SectionName
, &SectionId
))
152 if (!IniAddSettingValueToSection(SectionId
, "BootType", "Partition"))
158 if (!IniAddSettingValueToSection(SectionId
, "BootDrive", BootDriveString
))
163 // Add the BootPartition
164 if (!IniAddSettingValueToSection(SectionId
, "BootPartition", BootPartitionString
))
169 UiMessageBox(CustomBootPrompt
);
171 LoadAndBootPartition(SectionName
);
174 VOID
OptionMenuCustomBootBootSectorFile(VOID
)
176 CHAR SectionName
[100];
177 CHAR BootDriveString
[20];
178 CHAR BootPartitionString
[20];
179 CHAR BootSectorFileString
[200];
183 RtlZeroMemory(SectionName
, sizeof(SectionName
));
184 RtlZeroMemory(BootDriveString
, sizeof(BootDriveString
));
185 RtlZeroMemory(BootPartitionString
, sizeof(BootPartitionString
));
186 RtlZeroMemory(BootSectorFileString
, sizeof(BootSectorFileString
));
188 if (!UiEditBox(BootDrivePrompt
, BootDriveString
, 20))
193 if (!UiEditBox(BootPartitionPrompt
, BootPartitionString
, 20))
198 if (!UiEditBox(BootSectorFilePrompt
, BootSectorFileString
, 200))
203 // Generate a unique section name
204 TimeInfo
= ArcGetTime();
205 sprintf(SectionName
, "CustomBootSectorFile%u%u%u%u%u%u", TimeInfo
->Year
, TimeInfo
->Day
, TimeInfo
->Month
, TimeInfo
->Hour
, TimeInfo
->Minute
, TimeInfo
->Second
);
208 if (!IniAddSection(SectionName
, &SectionId
))
214 if (!IniAddSettingValueToSection(SectionId
, "BootType", "BootSector"))
220 if (!IniAddSettingValueToSection(SectionId
, "BootDrive", BootDriveString
))
225 // Add the BootPartition
226 if (!IniAddSettingValueToSection(SectionId
, "BootPartition", BootPartitionString
))
231 // Add the BootSectorFile
232 if (!IniAddSettingValueToSection(SectionId
, "BootSectorFile", BootSectorFileString
))
237 UiMessageBox(CustomBootPrompt
);
239 LoadAndBootBootSector(SectionName
);
242 VOID
OptionMenuCustomBootReactOS(VOID
)
244 CHAR SectionName
[100];
245 CHAR BootDriveString
[20];
246 CHAR BootPartitionString
[20];
247 CHAR ReactOSSystemPath
[200];
248 CHAR ReactOSARCPath
[200];
249 CHAR ReactOSOptions
[200];
253 RtlZeroMemory(SectionName
, sizeof(SectionName
));
254 RtlZeroMemory(BootDriveString
, sizeof(BootDriveString
));
255 RtlZeroMemory(BootPartitionString
, sizeof(BootPartitionString
));
256 RtlZeroMemory(ReactOSSystemPath
, sizeof(ReactOSSystemPath
));
257 RtlZeroMemory(ReactOSOptions
, sizeof(ReactOSOptions
));
259 if (!UiEditBox(BootDrivePrompt
, BootDriveString
, 20))
264 if (!UiEditBox(BootPartitionPrompt
, BootPartitionString
, 20))
269 if (!UiEditBox(ReactOSSystemPathPrompt
, ReactOSSystemPath
, 200))
274 if (!UiEditBox(ReactOSOptionsPrompt
, ReactOSOptions
, 200))
279 // Generate a unique section name
280 TimeInfo
= ArcGetTime();
281 sprintf(SectionName
, "CustomReactOS%u%u%u%u%u%u", TimeInfo
->Year
, TimeInfo
->Day
, TimeInfo
->Month
, TimeInfo
->Hour
, TimeInfo
->Minute
, TimeInfo
->Second
);
284 if (!IniAddSection(SectionName
, &SectionId
))
290 if (!IniAddSettingValueToSection(SectionId
, "BootType", "ReactOS"))
295 // Construct the ReactOS ARC system path
296 ConstructArcPath(ReactOSARCPath
, ReactOSSystemPath
, DriveMapGetBiosDriveNumber(BootDriveString
), atoi(BootPartitionString
));
298 // Add the system path
299 if (!IniAddSettingValueToSection(SectionId
, "SystemPath", ReactOSARCPath
))
304 // Add the CommandLine
305 if (!IniAddSettingValueToSection(SectionId
, "Options", ReactOSOptions
))
310 UiMessageBox(CustomBootPrompt
);
312 LoadAndBootReactOS(SectionName
);
315 VOID
OptionMenuCustomBootLinux(VOID
)
317 CHAR SectionName
[100];
318 CHAR BootDriveString
[20];
319 CHAR BootPartitionString
[20];
320 CHAR LinuxKernelString
[200];
321 CHAR LinuxInitrdString
[200];
322 CHAR LinuxCommandLineString
[200];
326 RtlZeroMemory(SectionName
, sizeof(SectionName
));
327 RtlZeroMemory(BootDriveString
, sizeof(BootDriveString
));
328 RtlZeroMemory(BootPartitionString
, sizeof(BootPartitionString
));
329 RtlZeroMemory(LinuxKernelString
, sizeof(LinuxKernelString
));
330 RtlZeroMemory(LinuxInitrdString
, sizeof(LinuxInitrdString
));
331 RtlZeroMemory(LinuxCommandLineString
, sizeof(LinuxCommandLineString
));
333 if (!UiEditBox(BootDrivePrompt
, BootDriveString
, 20))
338 if (!UiEditBox(BootPartitionPrompt
, BootPartitionString
, 20))
343 if (!UiEditBox(LinuxKernelPrompt
, LinuxKernelString
, 200))
348 if (!UiEditBox(LinuxInitrdPrompt
, LinuxInitrdString
, 200))
353 if (!UiEditBox(LinuxCommandLinePrompt
, LinuxCommandLineString
, 200))
358 // Generate a unique section name
359 TimeInfo
= ArcGetTime();
360 sprintf(SectionName
, "CustomLinux%u%u%u%u%u%u", TimeInfo
->Year
, TimeInfo
->Day
, TimeInfo
->Month
, TimeInfo
->Hour
, TimeInfo
->Minute
, TimeInfo
->Second
);
363 if (!IniAddSection(SectionName
, &SectionId
))
369 if (!IniAddSettingValueToSection(SectionId
, "BootType", "Linux"))
375 if (!IniAddSettingValueToSection(SectionId
, "BootDrive", BootDriveString
))
380 // Add the BootPartition
381 if (!IniAddSettingValueToSection(SectionId
, "BootPartition", BootPartitionString
))
387 if (!IniAddSettingValueToSection(SectionId
, "Kernel", LinuxKernelString
))
393 if (strlen(LinuxInitrdString
) > 0)
395 if (!IniAddSettingValueToSection(SectionId
, "Initrd", LinuxInitrdString
))
401 // Add the CommandLine
402 if (!IniAddSettingValueToSection(SectionId
, "CommandLine", LinuxCommandLineString
))
407 UiMessageBox(CustomBootPrompt
);
409 LoadAndBootLinux(SectionName
, "Custom Linux Setup");
411 #endif /* __i386__ */