Display drive letters in partition list.
authorEric Kohl <eric.kohl@reactos.org>
Sat, 2 Nov 2002 23:17:06 +0000 (23:17 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sat, 2 Nov 2002 23:17:06 +0000 (23:17 +0000)
svn path=/trunk/; revision=3691

reactos/subsys/system/usetup/console.c
reactos/subsys/system/usetup/drivesup.c
reactos/subsys/system/usetup/drivesup.h
reactos/subsys/system/usetup/partlist.c
reactos/subsys/system/usetup/partlist.h
reactos/subsys/system/usetup/usetup.c

index e9fbc2b..1655d4c 100644 (file)
@@ -1006,13 +1006,9 @@ PrintTextXY(SHORT x, SHORT y, char* fmt,...)
   va_list ap;
   COORD coPos;
 
-CHECKPOINT1;
   va_start(ap, fmt);
   vsprintf(buffer, fmt, ap);
   va_end(ap);
-CHECKPOINT1;
-DPRINT1("%s\n", buffer);
-CHECKPOINT1;
 
   coPos.X = x;
   coPos.Y = y;
index c87f74e..c736374 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/*
+/* $Id: drivesup.c,v 1.2 2002/11/02 23:17:06 ekohl Exp $
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
  * FILE:            subsys/system/usetup/drivesup.c
@@ -94,23 +94,22 @@ GetSourcePaths(PUNICODE_STRING SourcePath,
 }
 
 
-#if 0
 CHAR
-GetDriveLetter(IN ULONG DriveNumber,
-              IN ULONG PartitionNumber)
+GetDriveLetter(ULONG DriveNumber,
+              ULONG PartitionNumber)
 {
   OBJECT_ATTRIBUTES ObjectAttributes;
   UNICODE_STRING LinkName;
   WCHAR LinkBuffer[8];
-  WCHAR Letter;
+  CHAR Letter;
   HANDLE LinkHandle;
   UNICODE_STRING TargetName;
-  WCHAR TargetBuffer[MAX_PATH];
-//  WCHAR DeviceBuffer[MAX_PATH];
+  PWCHAR TargetBuffer;
+  PWCHAR DeviceBuffer;
   ULONG Length;
+  NTSTATUS Status;
 
-  wcscpy(LinkBuffer,
-        L"\\??\\A:");
+  wcscpy(LinkBuffer, L"\\??\\A:");
 
   RtlInitUnicodeString(&LinkName,
                       LinkBuffer);
@@ -121,13 +120,21 @@ GetDriveLetter(IN ULONG DriveNumber,
                             NULL,
                             NULL);
 
+  TargetBuffer = RtlAllocateHeap(ProcessHeap, 0, MAX_PATH * sizeof(WCHAR));
+  DeviceBuffer = RtlAllocateHeap(ProcessHeap, 0, MAX_PATH * sizeof(WCHAR));
+
   TargetName.Length = 0;
   TargetName.MaximumLength = MAX_PATH * sizeof(WCHAR);
   TargetName.Buffer = TargetBuffer;
 
-  for (Letter = L'C'; Letter <= L'Z'; Letter++)
+  swprintf(DeviceBuffer,
+          L"\\Device\\Harddisk%lu\\Partition%lu",
+          DriveNumber,
+          PartitionNumber);
+
+  for (Letter = 'C'; Letter <= 'Z'; Letter++)
     {
-      LinkBuffer[4] = Letter;
+      LinkBuffer[4] = (WCHAR)Letter;
       TargetName.Length = 0;
 
       Status = NtOpenSymbolicLinkObject(&LinkHandle,
@@ -138,26 +145,23 @@ GetDriveLetter(IN ULONG DriveNumber,
          Status = NtQuerySymbolicLinkObject(LinkHandle,
                                             &TargetName,
                                             &Length);
+         NtClose(LinkHandle);
          if (NT_SUCCESS(Status))
            {
-
-
-
+             if (_wcsicmp(DeviceBuffer, TargetBuffer) == 0)
+               {
+                 RtlFreeHeap(ProcessHeap, 0, DeviceBuffer);
+                 RtlFreeHeap(ProcessHeap, 0, TargetBuffer);
+                 return(Letter);
+               }
            }
-         NtClose(LinkHandle);
        }
     }
 
-  return((CHAR)0);
-}
-#endif
-
-#if 0
-STATUS
-GetFileSystem()
-{
+  RtlFreeHeap(ProcessHeap, 0, DeviceBuffer);
+  RtlFreeHeap(ProcessHeap, 0, TargetBuffer);
 
+  return((CHAR)0);
 }
-#endif
 
 /* EOF */
index f2ef4de..1d86fd5 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/*
+/* $Id: drivesup.h,v 1.2 2002/11/02 23:17:06 ekohl Exp $
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
  * FILE:            subsys/system/usetup/drivesup.h
@@ -31,6 +31,10 @@ NTSTATUS
 GetSourcePaths(PUNICODE_STRING SourcePath,
               PUNICODE_STRING SourceRootPath);
 
+CHAR
+GetDriveLetter(ULONG DriveNumber,
+              ULONG PartitionNumber);
+
 
 #endif /* __DRIVESUP_H__ */
 
index d00867f..17bf4f2 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/*
+/* $Id: partlist.c,v 1.3 2002/11/02 23:17:06 ekohl Exp $
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
  * FILE:            subsys/system/usetup/partlist.c
@@ -34,6 +34,7 @@
 #include "usetup.h"
 #include "console.h"
 #include "partlist.h"
+#include "drivesup.h"
 
 
 /* FUNCTIONS ****************************************************************/
@@ -184,6 +185,10 @@ CreatePartitionList(SHORT Left,
                              List->DiskArray[DiskCount].PartArray[i].PartSize = LayoutBuffer->PartitionEntry[i].PartitionLength.QuadPart;
                              List->DiskArray[DiskCount].PartArray[i].PartNumber = LayoutBuffer->PartitionEntry[i].PartitionNumber,
                              List->DiskArray[DiskCount].PartArray[i].PartType = LayoutBuffer->PartitionEntry[i].PartitionType;
+
+                             List->DiskArray[DiskCount].PartArray[i].DriveLetter = GetDriveLetter(DiskCount,
+                                                                                                  LayoutBuffer->PartitionEntry[i].PartitionNumber);
+
                              List->DiskArray[DiskCount].PartArray[i].Used = TRUE;
                            }
                          else
@@ -368,15 +373,29 @@ PrintPartitionData(PPARTLIST List,
       Unit = "kB";
     }
 
-  sprintf(LineBuffer,
-         "%d: nr: %d type: %x (%s)  %I64u %s",
-         PartIndex,
-         PartEntry->PartNumber,
-         PartEntry->PartType,
-         PartType,
-         PartSize,
-         Unit);
-
+  if (PartEntry->DriveLetter != (CHAR)0)
+    {
+      sprintf(LineBuffer,
+             "%c:  %d: nr: %d type: %x (%s)  %I64u %s",
+             PartEntry->DriveLetter,
+             PartIndex,
+             PartEntry->PartNumber,
+             PartEntry->PartType,
+             PartType,
+             PartSize,
+             Unit);
+    }
+  else
+    {
+      sprintf(LineBuffer,
+             "    %d: nr: %d type: %x (%s)  %I64u %s",
+             PartIndex,
+             PartEntry->PartNumber,
+             PartEntry->PartType,
+             PartType,
+             PartSize,
+             Unit);
+    }
 
   Attribute = (List->CurrentDisk == DiskIndex &&
               List->CurrentPartition == PartIndex) ? 0x71 : 0x17;
@@ -687,6 +706,8 @@ GetPartitionData(PPARTLIST List,
   Data->PartNumber = List->DiskArray[List->CurrentDisk].PartArray[List->CurrentPartition].PartNumber;
   Data->PartType = List->DiskArray[List->CurrentDisk].PartArray[List->CurrentPartition].PartType;
 
+  Data->DriveLetter = List->DiskArray[List->CurrentDisk].PartArray[List->CurrentPartition].DriveLetter;
+
   return(TRUE);
 }
 
index 28bf5c1..f20d8c8 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/*
+/* $Id: partlist.h,v 1.3 2002/11/02 23:17:06 ekohl Exp $
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
  * FILE:            subsys/system/usetup/partlist.h
@@ -34,9 +34,12 @@ typedef struct _PARTDATA
   USHORT Port;
   USHORT Bus;
   USHORT Id;
+
   ULONGLONG PartSize;
   ULONG PartNumber;
   ULONG PartType;
+
+  CHAR DriveLetter;
 } PARTDATA, *PPARTDATA;
 
 
@@ -45,6 +48,7 @@ typedef struct _PARTENTRY
   ULONGLONG PartSize;
   ULONG PartNumber;
   ULONG PartType;
+
   CHAR DriveLetter;
   BOOL Used;
 } PARTENTRY, *PPARTENTRY;
@@ -106,7 +110,8 @@ VOID
 ScrollUpPartitionList(PPARTLIST List);
 
 BOOL
-GetPartitionData(PPARTLIST List, PPARTDATA Data);
+GetPartitionData(PPARTLIST List,
+                PPARTDATA Data);
 
 #endif /* __PARTLIST_H__ */
 
index 1704d6e..87d28fa 100644 (file)
@@ -203,10 +203,9 @@ CHECKPOINT1;
 
 
 /*
- * First setup page
+ * Start page
  * RETURNS
- *     TRUE: setup/repair completed successfully
- *     FALSE: setup/repair terminated by user
+ *     Number of the next page.
  */
 static ULONG
 StartPage(PINPUT_RECORD Ir)
@@ -269,12 +268,12 @@ RepairIntroPage(PINPUT_RECORD Ir)
     {
       ConInKey(Ir);
 
-      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)          /* ENTER */
+      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 */
+              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
        {
          return(INTRO_PAGE);
        }
@@ -300,9 +299,11 @@ IntroPage(PINPUT_RECORD Ir)
 
   SetTextXY(8, 15, "\xf9  Press ENTER to install ReactOS.");
 
-  SetTextXY(8, 17, "\xf9  Press R to repair ReactOS.");
+  SetTextXY(8, 17, "\xf9  Press E to start the emergency repair console.");
+
+  SetTextXY(8, 19, "\xf9  Press R to repair ReactOS.");
 
-  SetTextXY(8, 19, "\xf9  Press F3 to quit without installing ReactOS.");
+  SetTextXY(8, 21, "\xf9  Press F3 to quit without installing ReactOS.");
 
 
   SetStatusText("   ENTER = Continue   F3 = Quit");
@@ -312,17 +313,23 @@ IntroPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))        /* F3 */
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            return(QUIT_PAGE);
          break;
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)     /* ENTER */
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(INSTALL_INTRO_PAGE);
        }
-      else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'R')     /* R */
+#if 0
+      else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'E') /* E */
+       {
+         return(RepairConsole());
+       }
+#endif
+      else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'R') /* R */
        {
          return(REPAIR_INTRO_PAGE);
        }
@@ -359,13 +366,13 @@ InstallIntroPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            return(QUIT_PAGE);
          break;
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(SELECT_PARTITION_PAGE);
        }
@@ -408,7 +415,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            {
@@ -418,16 +425,16 @@ SelectPartitionPage(PINPUT_RECORD Ir)
          break;
        }
       else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN))
+              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */
        {
          ScrollDownPartitionList(PartList);
        }
       else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP))
+              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */
        {
          ScrollUpPartitionList(PartList);
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          PartDataValid = GetPartitionData(PartList, &PartData);
          DestroyPartitionList(PartList);
@@ -538,18 +545,18 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            return(QUIT_PAGE);
          break;
        }
       else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE))       /* ESC */
+              (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)) /* ESC */
        {
          return(SELECT_PARTITION_PAGE);
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)     /* ENTER */
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(CHECK_FILE_SYSTEM_PAGE);
        }
@@ -576,7 +583,7 @@ CheckFileSystemPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            return(QUIT_PAGE);
@@ -617,7 +624,7 @@ InstallDirectoryPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            return(QUIT_PAGE);
@@ -818,7 +825,7 @@ PrepareCopyPage(PINPUT_RECORD Ir)
            return(QUIT_PAGE);
          break;
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(FILE_COPY_PAGE);
        }
@@ -848,7 +855,7 @@ FileCopyPage(PINPUT_RECORD Ir)
            return(QUIT_PAGE);
          break;
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(INIT_SYSTEM_PAGE);
        }
@@ -974,13 +981,13 @@ InitSystemPage(PINPUT_RECORD Ir)
       ConInKey(Ir);
 
       if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
-         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3))
+         (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
        {
          if (ConfirmQuit(Ir) == TRUE)
            return(QUIT_PAGE);
          break;
        }
-      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(SUCCESS_PAGE);
        }
@@ -1006,7 +1013,7 @@ QuitPage(PINPUT_RECORD Ir)
     {
       ConInKey(Ir);
 
-      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(REBOOT_PAGE);
        }
@@ -1030,7 +1037,7 @@ SuccessPage(PINPUT_RECORD Ir)
     {
       ConInKey(Ir);
 
-      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D)
+      if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
        {
          return(REBOOT_PAGE);
        }