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.
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c
Modified: trunk/reactos/boot/freeldr/freeldr/ui/ui.c
Modified: trunk/reactos/ntoskrnl/ex/init.c
Modified: trunk/reactos/ntoskrnl/io/driver.c
Modified: trunk/reactos/ntoskrnl/ldr/loader.c
Modified: trunk/reactos/subsys/system/usetup/format.c
Modified: trunk/reactos/subsys/system/usetup/progress.c
Modified: trunk/reactos/subsys/system/usetup/progress.h
Modified: trunk/reactos/subsys/system/usetup/usetup.c

Modified: trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
--- trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -756,6 +756,16 @@
 	if (!FrLdrLoadDriver(szHalName, 10))
 		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
 	 */

Modified: trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c
--- trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -34,7 +34,7 @@
 #include "registry.h"
 
 
-//#define USE_UI
+#define USE_UI
 
 
 static BOOL
@@ -88,7 +88,7 @@
    * Update the status bar with the current file
    */
 #ifdef USE_UI
-  sprintf(szBuffer, "Reading %s", szShortName);
+  sprintf(szBuffer, "Setup is loading files (%s)", szShortName);
   UiDrawStatusText(szBuffer);
 #else
   printf("Reading %s\n", szShortName);
@@ -155,7 +155,7 @@
    * Update the status bar with the current file
    */
 #ifdef USE_UI
-  sprintf(szBuffer, "Reading %s", szShortName);
+  sprintf(szBuffer, "Setup is loading files (%s)", szShortName);
   UiDrawStatusText(szBuffer);
 #else
   printf("Reading %s\n", szShortName);
@@ -220,7 +220,7 @@
    * Update the status bar with the current file
    */
 #ifdef USE_UI
-  sprintf(szBuffer, "Reading %s", szShortName);
+  sprintf(szBuffer, "Setup is loading files (%s)", szShortName);
   UiDrawStatusText(szBuffer);
 #else
   printf("Reading %s\n", szShortName);
@@ -232,6 +232,7 @@
   return(TRUE);
 }
 
+BOOL SetupUiInitialize(VOID);
 
 VOID RunLoader(VOID)
 {
@@ -294,7 +295,7 @@
 #endif
 
 #ifdef USE_UI
-  UiInitialize();
+  SetupUiInitialize();
   UiDrawStatusText("");
 #endif
 

Modified: trunk/reactos/boot/freeldr/freeldr/ui/ui.c
--- trunk/reactos/boot/freeldr/freeldr/ui/ui.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/boot/freeldr/freeldr/ui/ui.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -27,6 +27,7 @@
 #include <inifile.h>
 #include <version.h>
 #include <video.h>
+#include <reactos/buildno.h>
 
 ULONG	UiScreenWidth = 80;							// Screen Width
 ULONG	UiScreenHeight = 25;							// Screen Height
@@ -197,7 +198,40 @@
 	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"));
+
 	return TRUE;
 }
 

Modified: trunk/reactos/ntoskrnl/ex/init.c
--- trunk/reactos/ntoskrnl/ex/init.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/ntoskrnl/ex/init.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -29,6 +29,7 @@
 extern LIST_ENTRY KiProfileListHead;
 extern LIST_ENTRY KiProfileSourceListHead;
 extern KSPIN_LOCK KiProfileLock;
+BOOLEAN SetupMode = TRUE;
 
 VOID PspPostInitSystemProcess(VOID);
 
@@ -258,7 +259,7 @@
 inline
 VOID
 STDCALL
-ParseAndCacheLoadedModules(PBOOLEAN SetupBoot)
+ParseAndCacheLoadedModules(VOID)
 {
     ULONG i;
     PCHAR Name;
@@ -294,7 +295,7 @@
         } else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv")) {
 
             CachedModules[SystemRegistry] = &KeLoaderModules[i];
-            *SetupBoot = FALSE;
+            SetupMode = FALSE;
 
         } else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv")) {
 
@@ -369,20 +370,54 @@
         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
 INIT_FUNCTION
 STDCALL
 ExpInitializeExecutive(VOID)
 {
-    CHAR str[50];
     UNICODE_STRING EventName;
     HANDLE InitDoneEventHandle;
     OBJECT_ATTRIBUTES ObjectAttributes;
     BOOLEAN NoGuiBoot = FALSE;
     BOOLEAN BootLog = FALSE;
     ULONG MaxMem = 0;
-    BOOLEAN SetupBoot = TRUE;
     BOOLEAN ForceAcpiDisable = FALSE;
     LARGE_INTEGER Timeout;
     HANDLE ProcessHandle;
@@ -413,7 +448,7 @@
             MaxMem > 8 ? MaxMem : 4096);
 
     /* Parse the Loaded Modules (by FreeLoader) and cache the ones we'll need */
-    ParseAndCacheLoadedModules(&SetupBoot);
+    ParseAndCacheLoadedModules();
 
     /* Initialize the kernel debugger parameters */
     KdInitSystem(0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
@@ -511,28 +546,13 @@
 
     /* Report all resources used by hal */
     HalReportResourceUsage();
-
+    
     /* Clear the screen to blue */
     HalInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
 
     /* Display version number and copyright/warranty message */
-    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");
+    ExpDisplayNotice();
 
-    /* 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 */
     KdInitSystem(2, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
 
@@ -540,13 +560,13 @@
     RtlpInitNls();
 
     /* Import and Load Registry Hives */
-    CmInitHives(SetupBoot);
+    CmInitHives(SetupMode);
 
     /* Initialize the time zone information from the registry */
     ExpInitTimeZoneInfo();
 
-   /* Enter the kernel debugger before starting up the boot drivers */
-    KdbEnter();
+    /* Enter the kernel debugger before starting up the boot drivers */
+    if (KdDebuggerEnabled) KdbEnter();
 
     /* Setup Drivers and Root Device Node */
     IoInit2(BootLog);

Modified: trunk/reactos/ntoskrnl/io/driver.c
--- trunk/reactos/ntoskrnl/io/driver.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/ntoskrnl/io/driver.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -18,6 +18,7 @@
 /* ke/main.c */
 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
 extern ULONG KeTickCount;
+extern BOOLEAN SetupMode;
 
 NTSTATUS
 LdrProcessModule(PVOID ModuleLoadBase,
@@ -272,12 +273,23 @@
  * Display 'Loading XXX...' message.
  */
 
-VOID FASTCALL
-IopDisplayLoadingMessage(PWCHAR ServiceName)
+VOID 
+FASTCALL
+INIT_FUNCTION
+IopDisplayLoadingMessage(PVOID ServiceName, 
+                         BOOLEAN Unicode)
 {
-   CHAR TextBuffer[256];
-   sprintf(TextBuffer, "Loading %S...\n", ServiceName);
-   HalDisplayString(TextBuffer);
+    if (SetupMode) return;
+    CHAR TextBuffer[256];
+    if (Unicode) 
+    {
+        sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
+    }
+    else
+    {
+        sprintf(TextBuffer, "Loading %s...\n", (PCHAR)ServiceName);
+    }
+    HalDisplayString(TextBuffer);
 }
 
 /*
@@ -390,9 +402,9 @@
       DPRINT("RtlQueryRegistryValues() failed (Status %x)\n", Status);
       return Status;
    }
+   
+   IopDisplayLoadingMessage(ServiceName->Buffer, TRUE);
 
-   IopDisplayLoadingMessage(ServiceName->Buffer);
-
    /*
     * Normalize the image path for all later processing.
     */
@@ -1122,7 +1134,6 @@
    PDEVICE_NODE DeviceNode;
    PDRIVER_OBJECT DriverObject;
    NTSTATUS Status;
-   CHAR TextBuffer[256];
    PCHAR FileNameWithoutPath;
    LPWSTR FileExtension;
 
@@ -1130,12 +1141,10 @@
       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
     */
@@ -1307,7 +1316,7 @@
 {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
 
-   IopDisplayLoadingMessage(Service->ServiceName.Buffer);
+   IopDisplayLoadingMessage(Service->ServiceName.Buffer, TRUE);
    Status = ZwLoadDriver(&Service->RegistryPath);
    IopBootLog(&Service->ImagePath, NT_SUCCESS(Status) ? TRUE : FALSE);
    if (!NT_SUCCESS(Status))

Modified: trunk/reactos/ntoskrnl/ldr/loader.c
--- trunk/reactos/ntoskrnl/ldr/loader.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/ntoskrnl/ldr/loader.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -792,7 +792,7 @@
         CPRINT("Failed to allocate a virtual section for driver\n");
         return STATUS_UNSUCCESSFUL;
     }
-    DbgPrint("DriverBase for %wZ: %x\n", FileName, DriverBase);
+    DPRINT("DriverBase for %wZ: %x\n", FileName, DriverBase);
 
     /*  Copy headers over */
     memcpy(DriverBase, ModuleLoadBase, PENtHeaders->OptionalHeader.SizeOfHeaders);

Modified: trunk/reactos/subsys/system/usetup/format.c
--- trunk/reactos/subsys/system/usetup/format.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/subsys/system/usetup/format.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -107,7 +107,8 @@
   ProgressBar = CreateProgressBar (6,
 				   yScreen - 14,
 				   xScreen - 7,
-				   yScreen - 10);
+				   yScreen - 10,
+                   "Setup is formatting your disk");
 
   ProgressSetStepCount (ProgressBar, 100);
 

Modified: trunk/reactos/subsys/system/usetup/progress.c
--- trunk/reactos/subsys/system/usetup/progress.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/subsys/system/usetup/progress.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -84,13 +84,86 @@
 			     &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
 DrawProgressBar(PPROGRESSBAR Bar)
 {
   CHAR TextBuffer[8];
   COORD coPos;
   ULONG Written;
+  PROGRESSBAR BarBorder = *Bar;
 
   /* Print percentage */
   sprintf(TextBuffer, "%-3lu%%", Bar->Percent);
@@ -101,7 +174,18 @@
 			       4,
 			       coPos);
 
+  /* Draw the progress bar border */
   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 */
   coPos.X = Bar->Left + 1;
@@ -126,7 +210,8 @@
 CreateProgressBar(SHORT Left,
 		  SHORT Top,
 		  SHORT Right,
-		  SHORT Bottom)
+		  SHORT Bottom,
+          char* Text)
 {
   PPROGRESSBAR Bar;
 
@@ -140,6 +225,7 @@
   Bar->Top = Top;
   Bar->Right = Right;
   Bar->Bottom = Bottom;
+  Bar->Text = Text;
 
   Bar->Width = Bar->Right - Bar->Left + 1;
 

Modified: trunk/reactos/subsys/system/usetup/progress.h
--- trunk/reactos/subsys/system/usetup/progress.h	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/subsys/system/usetup/progress.h	2005-05-18 19:08:00 UTC (rev 15394)
@@ -42,6 +42,8 @@
 
   ULONG StepCount;
   ULONG CurrentStep;
+  
+  CHAR *Text;
 } PROGRESSBAR, *PPROGRESSBAR;
 
 /* FUNCTIONS ****************************************************************/
@@ -50,7 +52,8 @@
 CreateProgressBar(SHORT Left,
 		  SHORT Top,
 		  SHORT Right,
-		  SHORT Bottom);
+		  SHORT Bottom,
+          char* Text);
 
 VOID
 DestroyProgressBar(PPROGRESSBAR Bar);

Modified: trunk/reactos/subsys/system/usetup/usetup.c
--- trunk/reactos/subsys/system/usetup/usetup.c	2005-05-18 17:54:16 UTC (rev 15393)
+++ trunk/reactos/subsys/system/usetup/usetup.c	2005-05-18 19:08:00 UTC (rev 15394)
@@ -59,6 +59,7 @@
   START_PAGE,
   INTRO_PAGE,
   LICENSE_PAGE,
+  WARNING_PAGE,
   INSTALL_INTRO_PAGE,
 
 //  SCSI_CONTROLLER_PAGE,
@@ -88,8 +89,6 @@
 
   REPAIR_INTRO_PAGE,
 
-  EMERGENCY_INTRO_PAGE,
-
   SUCCESS_PAGE,
   QUIT_PAGE,
   FLUSH_PAGE,
@@ -710,12 +709,11 @@
   SetTextXY(6, 12, "computer and prepares the second part of the setup.");
 
   SetTextXY(8, 15, "\x07  Press ENTER to install ReactOS.");
-  SetTextXY(8, 17, "\x07  Press L to view the licensing terms for ReactOS.");
-  SetTextXY(8, 19, "\x07  Press E to start the emergency console.");
-  SetTextXY(8, 21, "\x07  Press R to repair ReactOS.");
-  SetTextXY(8, 23, "\x07  Press F3 to quit without installing ReactOS.");
+  SetTextXY(8, 17, "\x07  Press R to repair ReactOS.");
+  SetTextXY(8, 19, "\x07  Press L to view the ReactOS Licensing Terms and Conditions");
+  SetTextXY(8, 21, "\x07  Press F3 to quit without installing ReactOS.");
 
-  SetStatusText("   ENTER = Continue   F3 = Quit");
+  SetStatusText("   ENTER = Continue  R = Repair F3 = Quit");
 
   if (IsUnattendedSetup)
     {
@@ -735,20 +733,19 @@
 	}
       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 */
 	{
 	  return REPAIR_INTRO_PAGE;
+      break;
 	}
+      else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* R */
+	{
+	  return LICENSE_PAGE;
+      break;
+	}   
     }
 
   return INTRO_PAGE;
@@ -779,61 +776,62 @@
   SetTextXY(8, 23, "GNU General Public License with ReactOS please visit");
   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 == 0x00) &&
-	  (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
-	{
-	  if (ConfirmQuit(Ir) == TRUE)
-	    return QUIT_PAGE;
-	  break;
-	}
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
-	{
-	  return INTRO_PAGE;
-	}
+      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
+      {
+          return INTRO_PAGE;
+          break;
+      }
     }
 
   return LICENSE_PAGE;
 }
 
+/*
+ * Warning Page
+ * RETURNS
+ *	Continues to setup
+ */
 static PAGE_NUMBER
-EmergencyIntroPage(PINPUT_RECORD Ir)
+WarningPage(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.");
+  SetUnderlinedTextXY(4, 3, " ReactOS " KERNEL_VERSION_STR " Warranty Statement");
+  SetHighlightedTextXY(6, 8, "Warranty:");
 
-  SetTextXY(6, 12, "The emergency console is not implemented yet.");
+  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, "\x07  Press ESC to return to the main page.");
+  SetTextXY(8, 15, "For more information on ReactOS, please visit:");
+  SetHighlightedTextXY(8, 16, "http://www.reactos.org");
 
-  SetTextXY(8, 17, "\x07  Press ENTER to reboot your computer.");
+  SetStatusText("   F8 = Continue   ESC = Exit");
 
-  SetStatusText("   ESC = Main page  ENTER = Reboot");
-
-  while(TRUE)
+  while (TRUE)
     {
       ConInKey(Ir);
 
-      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
+      if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
+	  (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F8)) /* F8 */
 	{
-	  return REBOOT_PAGE;
+	    return INSTALL_INTRO_PAGE;
+	  break;
 	}
       else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
 	       (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
 	{
-	  return INTRO_PAGE;
+	  return QUIT_PAGE;
 	}
     }
 
-  return REPAIR_INTRO_PAGE;
+  return LICENSE_PAGE;
 }
 
-
 static PAGE_NUMBER
 RepairIntroPage(PINPUT_RECORD Ir)
 {
@@ -842,9 +840,11 @@
 
   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");
 
@@ -856,6 +856,10 @@
 	{
 	  return REBOOT_PAGE;
 	}
+    else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'R') /* R */
+	{
+	  return INTRO_PAGE;
+	}
       else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
 	       (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
 	{
@@ -870,6 +874,8 @@
 static PAGE_NUMBER
 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, 9, "support all the functions of a fully usable setup application.");
 
@@ -3140,11 +3146,7 @@
 
       case SPFILENOTIFY_STARTCOPY:
 	/* Display copy message */
-	PrintTextXYN(6, 16, 60, "Copying file: %S", (PWSTR)Param1);
-
-	PrintTextXYN(6, 18, 60, "File %lu of %lu",
-		     CopyContext->CompletedOperations + 1,
-		     CopyContext->TotalOperations);
+    SetStatusText("                                                   \xB3 Copying file: %S", (PWSTR)Param1);
 	break;
 
       case SPFILENOTIFY_ENDCOPY:
@@ -3164,18 +3166,20 @@
   SHORT xScreen;
   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.");
+  SetTextXY(20, 14, "This may take several minutes to complete.");
 
-  GetScreenSize(&xScreen, &yScreen);
-
+  GetScreenSize(&xScreen, &yScreen);  
   CopyContext.TotalOperations = 0;
   CopyContext.CompletedOperations = 0;
-  CopyContext.ProgressBar = CreateProgressBar(6,
-					      yScreen - 14,
-					      xScreen - 7,
-					      yScreen - 10);
+  CopyContext.ProgressBar = CreateProgressBar(13,
+					      26,
+					      xScreen - 13,
+					      yScreen - 20,
+                          "Setup is copying files...");
 
   SetupCommitFileQueue(SetupFileQueue,
 		       DestinationRootPath.Buffer,
@@ -3811,6 +3815,11 @@
 	  case LICENSE_PAGE:
 	    Page = LicensePage(&Ir);
 	    break;
+        
+	  /* Warning page */
+	  case WARNING_PAGE:
+	    Page = WarningPage(&Ir);
+	    break;
 
 	  /* Intro page */
 	  case INTRO_PAGE:
@@ -3916,13 +3925,6 @@
 	    Page = RepairIntroPage(&Ir);
 	    break;
 
-
-	  /* Emergency pages */
-	  case EMERGENCY_INTRO_PAGE:
-	    Page = EmergencyIntroPage(&Ir);
-	    break;
-
-
 	  case SUCCESS_PAGE:
 	    Page = SuccessPage(&Ir);
 	    break;