Prettify usetup a bit, show a warranty page before continuing installation (not a license agreement, simply a message stating this is a beta foss product with no warranty), make progressbars have a double border and change the copy file dialog a bit. Also changed setupldr and ntoskrnl to have a more unified text-mode look/appearance when installing. The effect is really nice and the blue screen with gray status-bar appears as soon as the CD boots and takes you all the way to usetup without any breakages or black/blue/black/blue fades and confusing messages. Also, fixed ntoskrnl not to break into KDBG if /NODEBUG is set.

svn path=/trunk/; revision=15394
This commit is contained in:
Alex Ionescu 2005-05-18 19:08:00 +00:00
parent 474cd6a3e3
commit dfedb99675
10 changed files with 290 additions and 124 deletions

View file

@ -756,6 +756,16 @@ LoadAndBootReactOS(PCHAR OperatingSystemName)
if (!FrLdrLoadDriver(szHalName, 10)) if (!FrLdrLoadDriver(szHalName, 10))
return; return;
#if 0
/* Load bootvid */
strcpy(value, "INBV.DLL");
strcpy(szHalName, szBootPath);
strcat(szHalName, "SYSTEM32\\");
strcat(szHalName, value);
if (!FrLdrLoadDriver(szHalName, 10))
return;
#endif
/* /*
* Load the System hive from disk * Load the System hive from disk
*/ */

View file

@ -34,7 +34,7 @@
#include "registry.h" #include "registry.h"
//#define USE_UI #define USE_UI
static BOOL static BOOL
@ -88,7 +88,7 @@ LoadKernel(PCHAR szSourcePath, PCHAR szFileName)
* Update the status bar with the current file * Update the status bar with the current file
*/ */
#ifdef USE_UI #ifdef USE_UI
sprintf(szBuffer, "Reading %s", szShortName); sprintf(szBuffer, "Setup is loading files (%s)", szShortName);
UiDrawStatusText(szBuffer); UiDrawStatusText(szBuffer);
#else #else
printf("Reading %s\n", szShortName); printf("Reading %s\n", szShortName);
@ -155,7 +155,7 @@ LoadDriver(PCHAR szSourcePath, PCHAR szFileName)
* Update the status bar with the current file * Update the status bar with the current file
*/ */
#ifdef USE_UI #ifdef USE_UI
sprintf(szBuffer, "Reading %s", szShortName); sprintf(szBuffer, "Setup is loading files (%s)", szShortName);
UiDrawStatusText(szBuffer); UiDrawStatusText(szBuffer);
#else #else
printf("Reading %s\n", szShortName); printf("Reading %s\n", szShortName);
@ -220,7 +220,7 @@ LoadNlsFile(PCHAR szSourcePath, PCHAR szFileName, PCHAR szModuleName)
* Update the status bar with the current file * Update the status bar with the current file
*/ */
#ifdef USE_UI #ifdef USE_UI
sprintf(szBuffer, "Reading %s", szShortName); sprintf(szBuffer, "Setup is loading files (%s)", szShortName);
UiDrawStatusText(szBuffer); UiDrawStatusText(szBuffer);
#else #else
printf("Reading %s\n", szShortName); printf("Reading %s\n", szShortName);
@ -232,6 +232,7 @@ LoadNlsFile(PCHAR szSourcePath, PCHAR szFileName, PCHAR szModuleName)
return(TRUE); return(TRUE);
} }
BOOL SetupUiInitialize(VOID);
VOID RunLoader(VOID) VOID RunLoader(VOID)
{ {
@ -294,7 +295,7 @@ VOID RunLoader(VOID)
#endif #endif
#ifdef USE_UI #ifdef USE_UI
UiInitialize(); SetupUiInitialize();
UiDrawStatusText(""); UiDrawStatusText("");
#endif #endif

View file

@ -27,6 +27,7 @@
#include <inifile.h> #include <inifile.h>
#include <version.h> #include <version.h>
#include <video.h> #include <video.h>
#include <reactos/buildno.h>
ULONG UiScreenWidth = 80; // Screen Width ULONG UiScreenWidth = 80; // Screen Width
ULONG UiScreenHeight = 25; // Screen Height ULONG UiScreenHeight = 25; // Screen Height
@ -196,6 +197,39 @@ BOOL UiInitialize(BOOLEAN ShowGui)
UserInterfaceUp = TRUE; UserInterfaceUp = TRUE;
DbgPrint((DPRINT_UI, "UiInitialize() returning TRUE.\n"));
return TRUE;
}
BOOL SetupUiInitialize(VOID)
{
CHAR DisplayModeText[260];
ULONG Depth;
DisplayModeText[0] = '\0';
UiDisplayMode = MachVideoSetDisplayMode(DisplayModeText, TRUE);
MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth);
TuiInitialize();
// Draw the backdrop and fade it in if special effects are enabled
TuiFillArea(0,
0,
UiScreenWidth - 1,
UiScreenHeight - 2,
0,
ATTR(UiBackdropFgColor, UiBackdropBgColor));
UiStatusBarBgColor = 7;
UserInterfaceUp = TRUE;
TuiDrawText(4, 1, "ReactOS " KERNEL_VERSION_STR " Setup", ATTR(COLOR_GRAY, UiBackdropBgColor));
TuiDrawText(3, 2, "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD", ATTR(COLOR_GRAY, UiBackdropBgColor));
DbgPrint((DPRINT_UI, "UiInitialize() returning TRUE.\n")); DbgPrint((DPRINT_UI, "UiInitialize() returning TRUE.\n"));
return TRUE; return TRUE;

View file

@ -29,6 +29,7 @@ extern PRTL_MESSAGE_RESOURCE_DATA KiBugCodeMessages;
extern LIST_ENTRY KiProfileListHead; extern LIST_ENTRY KiProfileListHead;
extern LIST_ENTRY KiProfileSourceListHead; extern LIST_ENTRY KiProfileSourceListHead;
extern KSPIN_LOCK KiProfileLock; extern KSPIN_LOCK KiProfileLock;
BOOLEAN SetupMode = TRUE;
VOID PspPostInitSystemProcess(VOID); VOID PspPostInitSystemProcess(VOID);
@ -258,7 +259,7 @@ ExecuteRuntimeAsserts(VOID)
inline inline
VOID VOID
STDCALL STDCALL
ParseAndCacheLoadedModules(PBOOLEAN SetupBoot) ParseAndCacheLoadedModules(VOID)
{ {
ULONG i; ULONG i;
PCHAR Name; PCHAR Name;
@ -294,7 +295,7 @@ ParseAndCacheLoadedModules(PBOOLEAN SetupBoot)
} else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv")) { } else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv")) {
CachedModules[SystemRegistry] = &KeLoaderModules[i]; CachedModules[SystemRegistry] = &KeLoaderModules[i];
*SetupBoot = FALSE; SetupMode = FALSE;
} else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv")) { } else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv")) {
@ -369,20 +370,54 @@ ParseCommandLine(PULONG MaxMem,
p1 = p2; p1 = p2;
} }
} }
VOID
INIT_FUNCTION
ExpDisplayNotice(VOID)
{
CHAR str[50];
if (SetupMode)
{
HalDisplayString(
"\n\n\n ReactOS " KERNEL_VERSION_STR " Setup \n");
HalDisplayString(
" \xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD");
HalDisplayString(
"\xCD\xCD\n");
return;
}
HalDisplayString("Starting ReactOS "KERNEL_VERSION_STR" (Build "
KERNEL_VERSION_BUILD_STR")\n");
HalDisplayString(RES_STR_LEGAL_COPYRIGHT);
HalDisplayString("\n\nReactOS is free software, covered by the GNU General "
"Public License, and you\n");
HalDisplayString("are welcome to change it and/or distribute copies of it "
"under certain\n");
HalDisplayString("conditions. There is absolutely no warranty for "
"ReactOS.\n\n");
/* Display number of Processors */
sprintf(str,
"Found %x system processor(s). [%lu MB Memory]\n",
(int)KeNumberProcessors,
(KeLoaderBlock.MemHigher + 1088)/ 1024);
HalDisplayString(str);
}
VOID VOID
INIT_FUNCTION INIT_FUNCTION
STDCALL STDCALL
ExpInitializeExecutive(VOID) ExpInitializeExecutive(VOID)
{ {
CHAR str[50];
UNICODE_STRING EventName; UNICODE_STRING EventName;
HANDLE InitDoneEventHandle; HANDLE InitDoneEventHandle;
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
BOOLEAN NoGuiBoot = FALSE; BOOLEAN NoGuiBoot = FALSE;
BOOLEAN BootLog = FALSE; BOOLEAN BootLog = FALSE;
ULONG MaxMem = 0; ULONG MaxMem = 0;
BOOLEAN SetupBoot = TRUE;
BOOLEAN ForceAcpiDisable = FALSE; BOOLEAN ForceAcpiDisable = FALSE;
LARGE_INTEGER Timeout; LARGE_INTEGER Timeout;
HANDLE ProcessHandle; HANDLE ProcessHandle;
@ -413,7 +448,7 @@ ExpInitializeExecutive(VOID)
MaxMem > 8 ? MaxMem : 4096); MaxMem > 8 ? MaxMem : 4096);
/* Parse the Loaded Modules (by FreeLoader) and cache the ones we'll need */ /* Parse the Loaded Modules (by FreeLoader) and cache the ones we'll need */
ParseAndCacheLoadedModules(&SetupBoot); ParseAndCacheLoadedModules();
/* Initialize the kernel debugger parameters */ /* Initialize the kernel debugger parameters */
KdInitSystem(0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock); KdInitSystem(0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
@ -511,27 +546,12 @@ ExpInitializeExecutive(VOID)
/* Report all resources used by hal */ /* Report all resources used by hal */
HalReportResourceUsage(); HalReportResourceUsage();
/* Clear the screen to blue */ /* Clear the screen to blue */
HalInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock); HalInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
/* Display version number and copyright/warranty message */ /* Display version number and copyright/warranty message */
HalDisplayString("Starting ReactOS "KERNEL_VERSION_STR" (Build " ExpDisplayNotice();
KERNEL_VERSION_BUILD_STR")\n");
HalDisplayString(RES_STR_LEGAL_COPYRIGHT);
HalDisplayString("\n\nReactOS is free software, covered by the GNU General "
"Public License, and you\n");
HalDisplayString("are welcome to change it and/or distribute copies of it "
"under certain\n");
HalDisplayString("conditions. There is absolutely no warranty for "
"ReactOS.\n\n");
/* Display number of Processors */
sprintf(str,
"Found %d system processor(s). [%lu MB Memory]\n",
KeNumberProcessors,
(KeLoaderBlock.MemHigher + 1088)/ 1024);
HalDisplayString(str);
/* Call KD Providers at Phase 2 */ /* Call KD Providers at Phase 2 */
KdInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock); KdInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
@ -540,13 +560,13 @@ ExpInitializeExecutive(VOID)
RtlpInitNls(); RtlpInitNls();
/* Import and Load Registry Hives */ /* Import and Load Registry Hives */
CmInitHives(SetupBoot); CmInitHives(SetupMode);
/* Initialize the time zone information from the registry */ /* Initialize the time zone information from the registry */
ExpInitTimeZoneInfo(); ExpInitTimeZoneInfo();
/* Enter the kernel debugger before starting up the boot drivers */ /* Enter the kernel debugger before starting up the boot drivers */
KdbEnter(); if (KdDebuggerEnabled) KdbEnter();
/* Setup Drivers and Root Device Node */ /* Setup Drivers and Root Device Node */
IoInit2(BootLog); IoInit2(BootLog);

View file

@ -18,6 +18,7 @@
/* ke/main.c */ /* ke/main.c */
extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock; extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
extern ULONG KeTickCount; extern ULONG KeTickCount;
extern BOOLEAN SetupMode;
NTSTATUS NTSTATUS
LdrProcessModule(PVOID ModuleLoadBase, LdrProcessModule(PVOID ModuleLoadBase,
@ -272,12 +273,23 @@ IopCreateDriverObject(
* Display 'Loading XXX...' message. * Display 'Loading XXX...' message.
*/ */
VOID FASTCALL VOID
IopDisplayLoadingMessage(PWCHAR ServiceName) FASTCALL
INIT_FUNCTION
IopDisplayLoadingMessage(PVOID ServiceName,
BOOLEAN Unicode)
{ {
CHAR TextBuffer[256]; if (SetupMode) return;
sprintf(TextBuffer, "Loading %S...\n", ServiceName); CHAR TextBuffer[256];
HalDisplayString(TextBuffer); if (Unicode)
{
sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
}
else
{
sprintf(TextBuffer, "Loading %s...\n", (PCHAR)ServiceName);
}
HalDisplayString(TextBuffer);
} }
/* /*
@ -390,8 +402,8 @@ IopLoadServiceModule(
DPRINT("RtlQueryRegistryValues() failed (Status %x)\n", Status); DPRINT("RtlQueryRegistryValues() failed (Status %x)\n", Status);
return Status; return Status;
} }
IopDisplayLoadingMessage(ServiceName->Buffer); IopDisplayLoadingMessage(ServiceName->Buffer, TRUE);
/* /*
* Normalize the image path for all later processing. * Normalize the image path for all later processing.
@ -1122,7 +1134,6 @@ IopInitializeBuiltinDriver(
PDEVICE_NODE DeviceNode; PDEVICE_NODE DeviceNode;
PDRIVER_OBJECT DriverObject; PDRIVER_OBJECT DriverObject;
NTSTATUS Status; NTSTATUS Status;
CHAR TextBuffer[256];
PCHAR FileNameWithoutPath; PCHAR FileNameWithoutPath;
LPWSTR FileExtension; LPWSTR FileExtension;
@ -1130,11 +1141,9 @@ IopInitializeBuiltinDriver(
FileName, ModuleLoadBase, ModuleLength); FileName, ModuleLoadBase, ModuleLength);
/* /*
* Display 'Initializing XXX...' message * Display 'Loading XXX...' message
*/ */
IopDisplayLoadingMessage(FileName, FALSE);
sprintf(TextBuffer, "Initializing %s...\n", FileName);
HalDisplayString(TextBuffer);
/* /*
* Determine the right device object * Determine the right device object
@ -1307,7 +1316,7 @@ IopLoadDriver(PSERVICE Service)
{ {
NTSTATUS Status = STATUS_UNSUCCESSFUL; NTSTATUS Status = STATUS_UNSUCCESSFUL;
IopDisplayLoadingMessage(Service->ServiceName.Buffer); IopDisplayLoadingMessage(Service->ServiceName.Buffer, TRUE);
Status = ZwLoadDriver(&Service->RegistryPath); Status = ZwLoadDriver(&Service->RegistryPath);
IopBootLog(&Service->ImagePath, NT_SUCCESS(Status) ? TRUE : FALSE); IopBootLog(&Service->ImagePath, NT_SUCCESS(Status) ? TRUE : FALSE);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))

View file

@ -792,7 +792,7 @@ LdrPEProcessModule(
CPRINT("Failed to allocate a virtual section for driver\n"); CPRINT("Failed to allocate a virtual section for driver\n");
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
DbgPrint("DriverBase for %wZ: %x\n", FileName, DriverBase); DPRINT("DriverBase for %wZ: %x\n", FileName, DriverBase);
/* Copy headers over */ /* Copy headers over */
memcpy(DriverBase, ModuleLoadBase, PENtHeaders->OptionalHeader.SizeOfHeaders); memcpy(DriverBase, ModuleLoadBase, PENtHeaders->OptionalHeader.SizeOfHeaders);

View file

@ -107,7 +107,8 @@ FormatPartition (PUNICODE_STRING DriveRoot)
ProgressBar = CreateProgressBar (6, ProgressBar = CreateProgressBar (6,
yScreen - 14, yScreen - 14,
xScreen - 7, xScreen - 7,
yScreen - 10); yScreen - 10,
"Setup is formatting your disk");
ProgressSetStepCount (ProgressBar, 100); ProgressSetStepCount (ProgressBar, 100);

View file

@ -84,6 +84,78 @@ DrawBorder(PPROGRESSBAR Bar)
&Written); &Written);
} }
static VOID
DrawThickBorder(PPROGRESSBAR Bar)
{
COORD coPos;
ULONG Written;
SHORT i;
/* draw upper left corner */
coPos.X = Bar->Left;
coPos.Y = Bar->Top + 1;
FillConsoleOutputCharacter(0xC9, // '+',
1,
coPos,
&Written);
/* draw upper edge */
coPos.X = Bar->Left + 1;
coPos.Y = Bar->Top + 1;
FillConsoleOutputCharacter(0xCD, // '-',
Bar->Right - Bar->Left - 1,
coPos,
&Written);
/* draw upper right corner */
coPos.X = Bar->Right;
coPos.Y = Bar->Top + 1;
FillConsoleOutputCharacter(0xBB, // '+',
1,
coPos,
&Written);
/* draw left and right edge */
for (i = Bar->Top + 2; i < Bar->Bottom; i++)
{
coPos.X = Bar->Left;
coPos.Y = i;
FillConsoleOutputCharacter(0xBA, // '|',
1,
coPos,
&Written);
coPos.X = Bar->Right;
FillConsoleOutputCharacter(0xBA, //'|',
1,
coPos,
&Written);
}
/* draw lower left corner */
coPos.X = Bar->Left;
coPos.Y = Bar->Bottom;
FillConsoleOutputCharacter(0xC8, // '+',
1,
coPos,
&Written);
/* draw lower edge */
coPos.X = Bar->Left + 1;
coPos.Y = Bar->Bottom;
FillConsoleOutputCharacter(0xCD, // '-',
Bar->Right - Bar->Left - 1,
coPos,
&Written);
/* draw lower right corner */
coPos.X = Bar->Right;
coPos.Y = Bar->Bottom;
FillConsoleOutputCharacter(0xBC, // '+',
1,
coPos,
&Written);
}
static VOID static VOID
DrawProgressBar(PPROGRESSBAR Bar) DrawProgressBar(PPROGRESSBAR Bar)
@ -91,6 +163,7 @@ DrawProgressBar(PPROGRESSBAR Bar)
CHAR TextBuffer[8]; CHAR TextBuffer[8];
COORD coPos; COORD coPos;
ULONG Written; ULONG Written;
PROGRESSBAR BarBorder = *Bar;
/* Print percentage */ /* Print percentage */
sprintf(TextBuffer, "%-3lu%%", Bar->Percent); sprintf(TextBuffer, "%-3lu%%", Bar->Percent);
@ -101,7 +174,18 @@ DrawProgressBar(PPROGRESSBAR Bar)
4, 4,
coPos); coPos);
/* Draw the progress bar border */
DrawBorder(Bar); DrawBorder(Bar);
/* Write Text Associated with Bar */
SetTextXY(10, 24, Bar->Text);
/* Draw the progress bar "border" border */
BarBorder.Top -= 5;
BarBorder.Bottom += 2;
BarBorder.Right += 5;
BarBorder.Left -= 5;
DrawThickBorder(&BarBorder);
/* Draw the bar */ /* Draw the bar */
coPos.X = Bar->Left + 1; coPos.X = Bar->Left + 1;
@ -126,7 +210,8 @@ PPROGRESSBAR
CreateProgressBar(SHORT Left, CreateProgressBar(SHORT Left,
SHORT Top, SHORT Top,
SHORT Right, SHORT Right,
SHORT Bottom) SHORT Bottom,
char* Text)
{ {
PPROGRESSBAR Bar; PPROGRESSBAR Bar;
@ -140,6 +225,7 @@ CreateProgressBar(SHORT Left,
Bar->Top = Top; Bar->Top = Top;
Bar->Right = Right; Bar->Right = Right;
Bar->Bottom = Bottom; Bar->Bottom = Bottom;
Bar->Text = Text;
Bar->Width = Bar->Right - Bar->Left + 1; Bar->Width = Bar->Right - Bar->Left + 1;

View file

@ -42,6 +42,8 @@ typedef struct _PROGRESS
ULONG StepCount; ULONG StepCount;
ULONG CurrentStep; ULONG CurrentStep;
CHAR *Text;
} PROGRESSBAR, *PPROGRESSBAR; } PROGRESSBAR, *PPROGRESSBAR;
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
@ -50,7 +52,8 @@ PPROGRESSBAR
CreateProgressBar(SHORT Left, CreateProgressBar(SHORT Left,
SHORT Top, SHORT Top,
SHORT Right, SHORT Right,
SHORT Bottom); SHORT Bottom,
char* Text);
VOID VOID
DestroyProgressBar(PPROGRESSBAR Bar); DestroyProgressBar(PPROGRESSBAR Bar);

View file

@ -59,6 +59,7 @@ typedef enum _PAGE_NUMBER
START_PAGE, START_PAGE,
INTRO_PAGE, INTRO_PAGE,
LICENSE_PAGE, LICENSE_PAGE,
WARNING_PAGE,
INSTALL_INTRO_PAGE, INSTALL_INTRO_PAGE,
// SCSI_CONTROLLER_PAGE, // SCSI_CONTROLLER_PAGE,
@ -88,8 +89,6 @@ typedef enum _PAGE_NUMBER
REPAIR_INTRO_PAGE, REPAIR_INTRO_PAGE,
EMERGENCY_INTRO_PAGE,
SUCCESS_PAGE, SUCCESS_PAGE,
QUIT_PAGE, QUIT_PAGE,
FLUSH_PAGE, FLUSH_PAGE,
@ -710,12 +709,11 @@ IntroPage(PINPUT_RECORD Ir)
SetTextXY(6, 12, "computer and prepares the second part of the setup."); SetTextXY(6, 12, "computer and prepares the second part of the setup.");
SetTextXY(8, 15, "\x07 Press ENTER to install ReactOS."); SetTextXY(8, 15, "\x07 Press ENTER to install ReactOS.");
SetTextXY(8, 17, "\x07 Press L to view the licensing terms for ReactOS."); SetTextXY(8, 17, "\x07 Press R to repair ReactOS.");
SetTextXY(8, 19, "\x07 Press E to start the emergency console."); SetTextXY(8, 19, "\x07 Press L to view the ReactOS Licensing Terms and Conditions");
SetTextXY(8, 21, "\x07 Press R to repair ReactOS."); SetTextXY(8, 21, "\x07 Press F3 to quit without installing ReactOS.");
SetTextXY(8, 23, "\x07 Press F3 to quit without installing ReactOS.");
SetStatusText(" ENTER = Continue F3 = Quit"); SetStatusText(" ENTER = Continue R = Repair F3 = Quit");
if (IsUnattendedSetup) if (IsUnattendedSetup)
{ {
@ -735,20 +733,19 @@ IntroPage(PINPUT_RECORD Ir)
} }
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */ else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
{ {
return INSTALL_INTRO_PAGE; return WARNING_PAGE;
} break;
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* L */
{
return LICENSE_PAGE;
}
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'E') /* E */
{
return EMERGENCY_INTRO_PAGE;
} }
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'R') /* R */ else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'R') /* R */
{ {
return REPAIR_INTRO_PAGE; return REPAIR_INTRO_PAGE;
break;
} }
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* R */
{
return LICENSE_PAGE;
break;
}
} }
return INTRO_PAGE; return INTRO_PAGE;
@ -779,61 +776,62 @@ LicensePage(PINPUT_RECORD Ir)
SetTextXY(8, 23, "GNU General Public License with ReactOS please visit"); SetTextXY(8, 23, "GNU General Public License with ReactOS please visit");
SetHighlightedTextXY(8, 25, "http://www.gnu.org/licenses/licenses.html"); SetHighlightedTextXY(8, 25, "http://www.gnu.org/licenses/licenses.html");
SetStatusText("ENTER = Continue F3 = Quit"); SetStatusText(" ENTER = Return");
while (TRUE)
{
ConInKey(Ir);
if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
{
return INTRO_PAGE;
break;
}
}
return LICENSE_PAGE;
}
/*
* Warning Page
* RETURNS
* Continues to setup
*/
static PAGE_NUMBER
WarningPage(PINPUT_RECORD Ir)
{
SetUnderlinedTextXY(4, 3, " ReactOS " KERNEL_VERSION_STR " Warranty Statement");
SetHighlightedTextXY(6, 8, "Warranty:");
SetTextXY(8, 11, "This is free software; see the source for copying conditions.");
SetTextXY(8, 12, "There is NO warranty; not even for MERCHANTABILITY or");
SetTextXY(8, 13, "FITNESS FOR A PARTICULAR PURPOSE");
SetTextXY(8, 15, "For more information on ReactOS, please visit:");
SetHighlightedTextXY(8, 16, "http://www.reactos.org");
SetStatusText(" F8 = Continue ESC = Exit");
while (TRUE) while (TRUE)
{ {
ConInKey(Ir); ConInKey(Ir);
if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */ (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F8)) /* F8 */
{ {
if (ConfirmQuit(Ir) == TRUE) return INSTALL_INTRO_PAGE;
return QUIT_PAGE;
break; break;
} }
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */ else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
{ {
return INTRO_PAGE; return QUIT_PAGE;
} }
} }
return LICENSE_PAGE; return LICENSE_PAGE;
} }
static PAGE_NUMBER
EmergencyIntroPage(PINPUT_RECORD Ir)
{
SetTextXY(6, 8, "ReactOS Setup is in an early development phase. It does not yet");
SetTextXY(6, 9, "support all the functions of a fully usable setup application.");
SetTextXY(6, 12, "The emergency console is not implemented yet.");
SetTextXY(8, 15, "\x07 Press ESC to return to the main page.");
SetTextXY(8, 17, "\x07 Press ENTER to reboot your computer.");
SetStatusText(" ESC = Main page ENTER = Reboot");
while(TRUE)
{
ConInKey(Ir);
if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
{
return REBOOT_PAGE;
}
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
{
return INTRO_PAGE;
}
}
return REPAIR_INTRO_PAGE;
}
static PAGE_NUMBER static PAGE_NUMBER
RepairIntroPage(PINPUT_RECORD Ir) RepairIntroPage(PINPUT_RECORD Ir)
{ {
@ -842,9 +840,11 @@ RepairIntroPage(PINPUT_RECORD Ir)
SetTextXY(6, 12, "The repair functions are not implemented yet."); SetTextXY(6, 12, "The repair functions are not implemented yet.");
SetTextXY(8, 15, "\x07 Press ESC to return to the main page."); SetTextXY(8, 15, "\x07 Press R for the Recovery Console.");
SetTextXY(8, 17, "\x07 Press ESC to return to the main page.");
SetTextXY(8, 17, "\x07 Press ENTER to reboot your computer."); SetTextXY(8, 19, "\x07 Press ENTER to reboot your computer.");
SetStatusText(" ESC = Main page ENTER = Reboot"); SetStatusText(" ESC = Main page ENTER = Reboot");
@ -856,6 +856,10 @@ RepairIntroPage(PINPUT_RECORD Ir)
{ {
return REBOOT_PAGE; return REBOOT_PAGE;
} }
else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'R') /* R */
{
return INTRO_PAGE;
}
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */ (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
{ {
@ -870,6 +874,8 @@ RepairIntroPage(PINPUT_RECORD Ir)
static PAGE_NUMBER static PAGE_NUMBER
InstallIntroPage(PINPUT_RECORD Ir) InstallIntroPage(PINPUT_RECORD Ir)
{ {
SetUnderlinedTextXY(4, 3, " ReactOS " KERNEL_VERSION_STR " Setup ");
SetTextXY(6, 8, "ReactOS Setup is in an early development phase. It does not yet"); SetTextXY(6, 8, "ReactOS Setup is in an early development phase. It does not yet");
SetTextXY(6, 9, "support all the functions of a fully usable setup application."); SetTextXY(6, 9, "support all the functions of a fully usable setup application.");
@ -3140,11 +3146,7 @@ FileCopyCallback(PVOID Context,
case SPFILENOTIFY_STARTCOPY: case SPFILENOTIFY_STARTCOPY:
/* Display copy message */ /* Display copy message */
PrintTextXYN(6, 16, 60, "Copying file: %S", (PWSTR)Param1); SetStatusText(" \xB3 Copying file: %S", (PWSTR)Param1);
PrintTextXYN(6, 18, 60, "File %lu of %lu",
CopyContext->CompletedOperations + 1,
CopyContext->TotalOperations);
break; break;
case SPFILENOTIFY_ENDCOPY: case SPFILENOTIFY_ENDCOPY:
@ -3164,18 +3166,20 @@ FileCopyPage(PINPUT_RECORD Ir)
SHORT xScreen; SHORT xScreen;
SHORT yScreen; SHORT yScreen;
SetStatusText(" Please wait..."); SetStatusText(" \xB3 Please wait... ");
SetTextXY(6, 8, "Copying files"); SetTextXY(11, 12, "Please wait while ReactOS Setup copies files to your ReactOS");
SetTextXY(30, 13, "installation folder.");
GetScreenSize(&xScreen, &yScreen); SetTextXY(20, 14, "This may take several minutes to complete.");
GetScreenSize(&xScreen, &yScreen);
CopyContext.TotalOperations = 0; CopyContext.TotalOperations = 0;
CopyContext.CompletedOperations = 0; CopyContext.CompletedOperations = 0;
CopyContext.ProgressBar = CreateProgressBar(6, CopyContext.ProgressBar = CreateProgressBar(13,
yScreen - 14, 26,
xScreen - 7, xScreen - 13,
yScreen - 10); yScreen - 20,
"Setup is copying files...");
SetupCommitFileQueue(SetupFileQueue, SetupCommitFileQueue(SetupFileQueue,
DestinationRootPath.Buffer, DestinationRootPath.Buffer,
@ -3811,6 +3815,11 @@ NtProcessStartup(PPEB Peb)
case LICENSE_PAGE: case LICENSE_PAGE:
Page = LicensePage(&Ir); Page = LicensePage(&Ir);
break; break;
/* Warning page */
case WARNING_PAGE:
Page = WarningPage(&Ir);
break;
/* Intro page */ /* Intro page */
case INTRO_PAGE: case INTRO_PAGE:
@ -3916,13 +3925,6 @@ NtProcessStartup(PPEB Peb)
Page = RepairIntroPage(&Ir); Page = RepairIntroPage(&Ir);
break; break;
/* Emergency pages */
case EMERGENCY_INTRO_PAGE:
Page = EmergencyIntroPage(&Ir);
break;
case SUCCESS_PAGE: case SUCCESS_PAGE:
Page = SuccessPage(&Ir); Page = SuccessPage(&Ir);
break; break;