mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 13:34:53 +00:00
Changes in v1.8 (1/18/2003) (brianp)
- Added F8 options menu - Added custom Boot functionality - Moved all OS= settings from [FreeLoader] section to [Operating Systems] section. - Removed MessageLine= setting. MessageBox= now accepts "\n" as an escape character for newlines. - Added descriptions for disk error codes returned by the BIOS. - Device names like "fd0" and "hd0" and "hd1" as well as BIOS drive numbers can now be used as BootDrive= settings. svn path=/trunk/; revision=4030
This commit is contained in:
parent
47333299bc
commit
4fb2283421
|
@ -1,3 +1,12 @@
|
||||||
|
Changes in v1.8 (1/18/2003) (brianp)
|
||||||
|
|
||||||
|
- Added F8 options menu
|
||||||
|
- Added custom Boot functionality
|
||||||
|
- Moved all OS= settings from [FreeLoader] section to [Operating Systems] section.
|
||||||
|
- Removed MessageLine= setting. MessageBox= now accepts "\n" as an escape character for newlines.
|
||||||
|
- Added descriptions for disk error codes returned by the BIOS.
|
||||||
|
- Device names like "fd0" and "hd0" and "hd1" as well as BIOS drive numbers can now be used as BootDrive= settings.
|
||||||
|
|
||||||
Changes in v1.7.12 (12/05/2002) (brianp)
|
Changes in v1.7.12 (12/05/2002) (brianp)
|
||||||
|
|
||||||
- Minor tweak to UI code to allow description
|
- Minor tweak to UI code to allow description
|
||||||
|
|
|
@ -204,7 +204,8 @@ ARCH_OBJS = fathelp.o \
|
||||||
i386vid.o \
|
i386vid.o \
|
||||||
drvmap.o \
|
drvmap.o \
|
||||||
int386.o \
|
int386.o \
|
||||||
i386disk.o
|
i386disk.o \
|
||||||
|
portio.o
|
||||||
|
|
||||||
RTL_OBJS = print.o \
|
RTL_OBJS = print.o \
|
||||||
stdlib.o \
|
stdlib.o \
|
||||||
|
@ -230,8 +231,7 @@ REACTOS_OBJS= reactos.o \
|
||||||
reghive.o \
|
reghive.o \
|
||||||
registry.o
|
registry.o
|
||||||
|
|
||||||
COMM_OBJS = rs232.o \
|
COMM_OBJS = rs232.o
|
||||||
portio.o
|
|
||||||
|
|
||||||
DISK_OBJS = disk.o \
|
DISK_OBJS = disk.o \
|
||||||
geometry.o \
|
geometry.o \
|
||||||
|
@ -269,7 +269,8 @@ FREELDR_OBJS= bootmgr.o \
|
||||||
miscboot.o \
|
miscboot.o \
|
||||||
options.o \
|
options.o \
|
||||||
linuxboot.o \
|
linuxboot.o \
|
||||||
oslist.o
|
oslist.o \
|
||||||
|
custom.o
|
||||||
|
|
||||||
SETUPLDR_OBJS= setupldr.o
|
SETUPLDR_OBJS= setupldr.o
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
|
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -28,10 +28,12 @@
|
||||||
#include <mm.h>
|
#include <mm.h>
|
||||||
#include <inifile.h>
|
#include <inifile.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
#include <options.h>
|
||||||
#include <oslist.h>
|
#include <oslist.h>
|
||||||
#include <video.h>
|
#include <video.h>
|
||||||
#include <bootmgr.h>
|
#include <bootmgr.h>
|
||||||
#include <drivemap.h>
|
#include <drivemap.h>
|
||||||
|
#include <keycodes.h>
|
||||||
|
|
||||||
BOOL IsSetupLdr = FALSE;
|
BOOL IsSetupLdr = FALSE;
|
||||||
|
|
||||||
|
@ -94,7 +96,7 @@ VOID RunLoader(VOID)
|
||||||
UiDrawBackdrop();
|
UiDrawBackdrop();
|
||||||
|
|
||||||
// Show the operating system list menu
|
// Show the operating system list menu
|
||||||
if (!UiDisplayMenu(OperatingSystemDisplayNames, OperatingSystemCount, DefaultOperatingSystem, TimeOut, &SelectedOperatingSystem))
|
if (!UiDisplayMenu(OperatingSystemDisplayNames, OperatingSystemCount, DefaultOperatingSystem, TimeOut, &SelectedOperatingSystem, FALSE, MainBootMenuKeyPressFilter))
|
||||||
{
|
{
|
||||||
UiMessageBox("Press ENTER to reboot.\n");
|
UiMessageBox("Press ENTER to reboot.\n");
|
||||||
goto reboot;
|
goto reboot;
|
||||||
|
@ -127,7 +129,7 @@ VOID RunLoader(VOID)
|
||||||
}
|
}
|
||||||
else if (stricmp(SettingValue, "Linux") == 0)
|
else if (stricmp(SettingValue, "Linux") == 0)
|
||||||
{
|
{
|
||||||
LoadAndBootLinux(OperatingSystemSectionNames[SelectedOperatingSystem]);
|
LoadAndBootLinux(OperatingSystemSectionNames[SelectedOperatingSystem], OperatingSystemDisplayNames[SelectedOperatingSystem]);
|
||||||
}
|
}
|
||||||
else if (stricmp(SettingValue, "BootSector") == 0)
|
else if (stricmp(SettingValue, "BootSector") == 0)
|
||||||
{
|
{
|
||||||
|
@ -145,8 +147,7 @@ VOID RunLoader(VOID)
|
||||||
|
|
||||||
|
|
||||||
reboot:
|
reboot:
|
||||||
VideoClearScreen();
|
UiUnInitialize("Rebooting...");
|
||||||
VideoShowTextCursor();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,3 +200,16 @@ S32 GetTimeOut(VOID)
|
||||||
|
|
||||||
return TimeOut;
|
return TimeOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL MainBootMenuKeyPressFilter(U32 KeyPress)
|
||||||
|
{
|
||||||
|
if (KeyPress == KEY_F8)
|
||||||
|
{
|
||||||
|
DoOptionsMenu();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We didn't handle the key
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
400
freeldr/freeldr/custom.c
Normal file
400
freeldr/freeldr/custom.c
Normal file
|
@ -0,0 +1,400 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <freeldr.h>
|
||||||
|
#include <rtl.h>
|
||||||
|
#include <ui.h>
|
||||||
|
#include <options.h>
|
||||||
|
#include <miscboot.h>
|
||||||
|
#include <debug.h>
|
||||||
|
#include <disk.h>
|
||||||
|
#include <arch.h>
|
||||||
|
#include <inifile.h>
|
||||||
|
#include <linux.h>
|
||||||
|
#include <reactos.h>
|
||||||
|
#include <drivemap.h>
|
||||||
|
|
||||||
|
|
||||||
|
UCHAR 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";
|
||||||
|
UCHAR BootPartitionPrompt[] = "Enter the boot partition.\n\nEnter 0 for the active (bootable) partition.";
|
||||||
|
UCHAR BootSectorFilePrompt[] = "Enter the boot sector file path.\n\nExamples:\n\\BOOTSECT.DOS\n/boot/bootsect.dos";
|
||||||
|
UCHAR LinuxKernelPrompt[] = "Enter the Linux kernel image path.\n\nExamples:\n/vmlinuz\n/boot/vmlinuz-2.4.18";
|
||||||
|
UCHAR LinuxInitrdPrompt[] = "Enter the initrd image path.\n\nExamples:\n/initrd.gz\n/boot/root.img.gz\n\nLeave blank for no initial ram disk.";
|
||||||
|
UCHAR LinuxCommandLinePrompt[] = "Enter the Linux kernel command line.\n\nExamples:\nroot=/dev/hda1\nroot=/dev/fd0 read-only\nroot=/dev/sdb1 init=/sbin/init";
|
||||||
|
UCHAR ReactOSSystemPathPrompt[] = "Enter the path to your ReactOS system directory.\n\nExamples:\n\\REACTOS\n\\ROS";
|
||||||
|
UCHAR 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";
|
||||||
|
|
||||||
|
UCHAR CustomBootPrompt[] = "Press ENTER to boot your custom boot setup.";
|
||||||
|
|
||||||
|
VOID OptionMenuCustomBoot(VOID)
|
||||||
|
{
|
||||||
|
PUCHAR CustomBootMenuList[] = { "Disk", "Partition", "Boot Sector File", "ReactOS", "Linux" };
|
||||||
|
U32 CustomBootMenuCount = sizeof(CustomBootMenuList) / sizeof(CustomBootMenuList[0]);
|
||||||
|
U32 SelectedMenuItem;
|
||||||
|
|
||||||
|
if (!UiDisplayMenu(CustomBootMenuList, CustomBootMenuCount, 0, -1, &SelectedMenuItem, TRUE, NULL))
|
||||||
|
{
|
||||||
|
// The user pressed ESC
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (SelectedMenuItem)
|
||||||
|
{
|
||||||
|
case 0: // Disk
|
||||||
|
OptionMenuCustomBootDisk();
|
||||||
|
break;
|
||||||
|
case 1: // Partition
|
||||||
|
OptionMenuCustomBootPartition();
|
||||||
|
break;
|
||||||
|
case 2: // Boot Sector File
|
||||||
|
OptionMenuCustomBootBootSectorFile();
|
||||||
|
break;
|
||||||
|
case 3: // ReactOS
|
||||||
|
OptionMenuCustomBootReactOS();
|
||||||
|
break;
|
||||||
|
case 4: // Linux
|
||||||
|
OptionMenuCustomBootLinux();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID OptionMenuCustomBootDisk(VOID)
|
||||||
|
{
|
||||||
|
UCHAR SectionName[100];
|
||||||
|
UCHAR BootDriveString[20];
|
||||||
|
U32 SectionId;
|
||||||
|
|
||||||
|
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||||
|
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
|
||||||
|
|
||||||
|
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a unique section name
|
||||||
|
sprintf(SectionName, "CustomBootDisk%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
|
||||||
|
|
||||||
|
// Add the section
|
||||||
|
if (!IniAddSection(SectionName, &SectionId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootType
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootType", "Drive"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootDrive
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UiMessageBox(CustomBootPrompt);
|
||||||
|
|
||||||
|
LoadAndBootDrive(SectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID OptionMenuCustomBootPartition(VOID)
|
||||||
|
{
|
||||||
|
UCHAR SectionName[100];
|
||||||
|
UCHAR BootDriveString[20];
|
||||||
|
UCHAR BootPartitionString[20];
|
||||||
|
U32 SectionId;
|
||||||
|
|
||||||
|
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||||
|
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
|
||||||
|
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
|
||||||
|
|
||||||
|
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a unique section name
|
||||||
|
sprintf(SectionName, "CustomBootPartition%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
|
||||||
|
|
||||||
|
// Add the section
|
||||||
|
if (!IniAddSection(SectionName, &SectionId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootType
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootType", "Partition"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootDrive
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootPartition
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootPartitionString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UiMessageBox(CustomBootPrompt);
|
||||||
|
|
||||||
|
LoadAndBootPartition(SectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID OptionMenuCustomBootBootSectorFile(VOID)
|
||||||
|
{
|
||||||
|
UCHAR SectionName[100];
|
||||||
|
UCHAR BootDriveString[20];
|
||||||
|
UCHAR BootPartitionString[20];
|
||||||
|
UCHAR BootSectorFileString[200];
|
||||||
|
U32 SectionId;
|
||||||
|
|
||||||
|
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||||
|
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
|
||||||
|
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
|
||||||
|
RtlZeroMemory(BootSectorFileString, sizeof(BootSectorFileString));
|
||||||
|
|
||||||
|
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(BootSectorFilePrompt, BootSectorFileString, 200))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a unique section name
|
||||||
|
sprintf(SectionName, "CustomBootSectorFile%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
|
||||||
|
|
||||||
|
// Add the section
|
||||||
|
if (!IniAddSection(SectionName, &SectionId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootType
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootType", "BootSector"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootDrive
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootPartition
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootPartitionString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootSectorFile
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootSectorFile", BootSectorFileString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UiMessageBox(CustomBootPrompt);
|
||||||
|
|
||||||
|
LoadAndBootBootSector(SectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID OptionMenuCustomBootReactOS(VOID)
|
||||||
|
{
|
||||||
|
UCHAR SectionName[100];
|
||||||
|
UCHAR BootDriveString[20];
|
||||||
|
UCHAR BootPartitionString[20];
|
||||||
|
UCHAR ReactOSSystemPath[200];
|
||||||
|
UCHAR ReactOSARCPath[200];
|
||||||
|
UCHAR ReactOSOptions[200];
|
||||||
|
U32 SectionId;
|
||||||
|
|
||||||
|
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||||
|
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
|
||||||
|
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
|
||||||
|
RtlZeroMemory(ReactOSSystemPath, sizeof(ReactOSSystemPath));
|
||||||
|
RtlZeroMemory(ReactOSOptions, sizeof(ReactOSOptions));
|
||||||
|
|
||||||
|
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(ReactOSSystemPathPrompt, ReactOSSystemPath, 200))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(ReactOSOptionsPrompt, ReactOSOptions, 200))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a unique section name
|
||||||
|
sprintf(SectionName, "CustomReactOS%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
|
||||||
|
|
||||||
|
// Add the section
|
||||||
|
if (!IniAddSection(SectionName, &SectionId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootType
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootType", "ReactOS"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct the ReactOS ARC system path
|
||||||
|
ConstructArcPath(ReactOSARCPath, ReactOSSystemPath, DriveMapGetBiosDriveNumber(BootDriveString), atoi(BootPartitionString));
|
||||||
|
|
||||||
|
// Add the system path
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "SystemPath", ReactOSARCPath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the CommandLine
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "Options", ReactOSOptions))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UiMessageBox(CustomBootPrompt);
|
||||||
|
|
||||||
|
LoadAndBootReactOS(SectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID OptionMenuCustomBootLinux(VOID)
|
||||||
|
{
|
||||||
|
UCHAR SectionName[100];
|
||||||
|
UCHAR BootDriveString[20];
|
||||||
|
UCHAR BootPartitionString[20];
|
||||||
|
UCHAR LinuxKernelString[200];
|
||||||
|
UCHAR LinuxInitrdString[200];
|
||||||
|
UCHAR LinuxCommandLineString[200];
|
||||||
|
U32 SectionId;
|
||||||
|
|
||||||
|
RtlZeroMemory(SectionName, sizeof(SectionName));
|
||||||
|
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
|
||||||
|
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
|
||||||
|
RtlZeroMemory(LinuxKernelString, sizeof(LinuxKernelString));
|
||||||
|
RtlZeroMemory(LinuxInitrdString, sizeof(LinuxInitrdString));
|
||||||
|
RtlZeroMemory(LinuxCommandLineString, sizeof(LinuxCommandLineString));
|
||||||
|
|
||||||
|
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(LinuxKernelPrompt, LinuxKernelString, 200))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(LinuxInitrdPrompt, LinuxInitrdString, 200))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!UiEditBox(LinuxCommandLinePrompt, LinuxCommandLineString, 200))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a unique section name
|
||||||
|
sprintf(SectionName, "CustomLinux%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
|
||||||
|
|
||||||
|
// Add the section
|
||||||
|
if (!IniAddSection(SectionName, &SectionId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootType
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootType", "Linux"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootDrive
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the BootPartition
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootPartitionString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the Kernel
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "Kernel", LinuxKernelString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the Initrd
|
||||||
|
if (strlen(LinuxInitrdString) > 0)
|
||||||
|
{
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "Initrd", LinuxInitrdString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the CommandLine
|
||||||
|
if (!IniAddSettingValueToSection(SectionId, "CommandLine", LinuxCommandLineString))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UiMessageBox(CustomBootPrompt);
|
||||||
|
|
||||||
|
LoadAndBootLinux(SectionName, "Custom Linux Setup");
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
|
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,14 +21,15 @@
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
#include <rtl.h>
|
#include <rtl.h>
|
||||||
#include <comm.h>
|
#include <comm.h>
|
||||||
|
#include <portio.h>
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
#define DEBUG_ALL
|
//#define DEBUG_ALL
|
||||||
//#define DEBUG_INIFILE
|
#define DEBUG_INIFILE
|
||||||
//#define DEBUG_REACTOS
|
//#define DEBUG_REACTOS
|
||||||
//#define DEBUG_CUSTOM
|
//#define DEBUG_CUSTOM
|
||||||
#define DEBUG_NONE
|
//#define DEBUG_NONE
|
||||||
|
|
||||||
#if defined (DEBUG_ALL)
|
#if defined (DEBUG_ALL)
|
||||||
U32 DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM |
|
U32 DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM |
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
|
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -151,6 +151,13 @@ U32 DriveMapGetBiosDriveNumber(PUCHAR DeviceName)
|
||||||
{
|
{
|
||||||
U32 BiosDriveNumber = 0;
|
U32 BiosDriveNumber = 0;
|
||||||
|
|
||||||
|
// If they passed in a number string then just
|
||||||
|
// convert it to decimal and return it
|
||||||
|
if (DeviceName[0] >= '0' && DeviceName[0] <= '9')
|
||||||
|
{
|
||||||
|
return atoi(DeviceName);
|
||||||
|
}
|
||||||
|
|
||||||
// Convert the drive number string into a number
|
// Convert the drive number string into a number
|
||||||
// 'hd1' = 1
|
// 'hd1' = 1
|
||||||
BiosDriveNumber = atoi(&DeviceName[2]);
|
BiosDriveNumber = atoi(&DeviceName[2]);
|
||||||
|
|
Loading…
Reference in a new issue