mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
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:
parent
474cd6a3e3
commit
dfedb99675
10 changed files with 290 additions and 124 deletions
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue