[USETUP]
authorEric Kohl <eric.kohl@reactos.org>
Sat, 3 Jan 2015 15:33:22 +0000 (15:33 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sat, 3 Jan 2015 15:33:22 +0000 (15:33 +0000)
Implement pre-install 'select format' and 'format' pages. These enable the user to re-format an existing install partitition.

CORE-9005 #resolve

svn path=/trunk/; revision=65962

32 files changed:
reactos/base/setup/usetup/fslist.c
reactos/base/setup/usetup/fslist.h
reactos/base/setup/usetup/host.h
reactos/base/setup/usetup/interface/usetup.c
reactos/base/setup/usetup/lang/bg-BG.h
reactos/base/setup/usetup/lang/bn-BD.h
reactos/base/setup/usetup/lang/cs-CZ.h
reactos/base/setup/usetup/lang/de-DE.h
reactos/base/setup/usetup/lang/el-GR.h
reactos/base/setup/usetup/lang/en-US.h
reactos/base/setup/usetup/lang/es-ES.h
reactos/base/setup/usetup/lang/et-EE.h
reactos/base/setup/usetup/lang/fr-FR.h
reactos/base/setup/usetup/lang/he-IL.h
reactos/base/setup/usetup/lang/it-IT.h
reactos/base/setup/usetup/lang/ja-JP.h
reactos/base/setup/usetup/lang/lt-LT.h
reactos/base/setup/usetup/lang/nl-NL.h
reactos/base/setup/usetup/lang/pl-PL.h
reactos/base/setup/usetup/lang/pt-BR.h
reactos/base/setup/usetup/lang/ro-RO.h
reactos/base/setup/usetup/lang/ru-RU.h
reactos/base/setup/usetup/lang/sk-SK.h
reactos/base/setup/usetup/lang/sq-AL.h
reactos/base/setup/usetup/lang/sv-SE.h
reactos/base/setup/usetup/lang/tr-TR.h
reactos/base/setup/usetup/lang/uk-UA.h
reactos/base/setup/usetup/mui.h
reactos/base/setup/usetup/native/fslist.c
reactos/base/setup/usetup/partlist.c
reactos/base/setup/usetup/partlist.h
reactos/base/setup/usetup/usetup.h

index 1aa6609..0fe7ae1 100644 (file)
@@ -71,7 +71,8 @@ CreateFileSystemList(
     IN SHORT Left,
     IN SHORT Top,
     IN BOOLEAN ForceFormat,
-    IN LPCWSTR ForceFileSystem)
+    IN LPCWSTR ForceFileSystem,
+    IN UCHAR PartitionType)
 {
     PFILE_SYSTEM_LIST List;
     PFILE_SYSTEM_ITEM Item;
@@ -86,7 +87,7 @@ CreateFileSystemList(
     List->Selected = NULL;
     InitializeListHead(&List->ListHead);
 
-    HOST_CreateFileSystemList(List);
+    HOST_CreateFileSystemList(List, PartitionType);
 
     if (!ForceFormat)
     {
index 6b28e29..f0a2919 100644 (file)
@@ -57,7 +57,8 @@ CreateFileSystemList(
     IN SHORT Left,
     IN SHORT Top,
     IN BOOLEAN ForceFormat,
-    IN LPCWSTR ForceFileSystem);
+    IN LPCWSTR ForceFileSystem,
+    IN UCHAR PartitionType);
 
 VOID
 DestroyFileSystemList(
index 6d8a84b..6a2ead8 100644 (file)
@@ -22,7 +22,8 @@ HOST_InitMemory(VOID);
 
 BOOLEAN
 HOST_CreateFileSystemList(
-    IN PFILE_SYSTEM_LIST List);
+    IN PFILE_SYSTEM_LIST List,
+    IN UCHAR PartitionType);
 
 BOOLEAN
 HOST_FormatPartition(
index 656163a..2e5be07 100644 (file)
@@ -1606,7 +1606,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
             {
                 MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
                                 RequiredPartitionDiskSpace);
-                continue; //return SELECT_PARTITION_PAGE; /* let the user select another partition */
+                return SELECT_PARTITION_PAGE; /* let the user select another partition */
             }
 
             if (PartitionList->CurrentPartition == NULL ||
@@ -1622,7 +1622,7 @@ SelectPartitionPage(PINPUT_RECORD Ir)
 
             DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter;
 
-            return INSTALL_DIRECTORY_PAGE;
+            return PRE_INSTALL_SELECT_FORMAT_PAGE;
         }
         else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'P')  /* P */
         {
@@ -2281,7 +2281,7 @@ DeletePartitionPage(PINPUT_RECORD Ir)
     ULONGLONG DiskSize;
     ULONGLONG PartSize;
     PCHAR Unit;
-    PCHAR PartType;
+    PCHAR PartType = NULL;
     NTSTATUS Status;
 
     if (PartitionList == NULL ||
@@ -2298,37 +2298,29 @@ DeletePartitionPage(PINPUT_RECORD Ir)
     MUIDisplayPage(DELETE_PARTITION_PAGE);
 
     /* Determine partition type */
-    PartType = NULL;
-    if (PartEntry->New == TRUE)
+    if ((PartEntry->PartitionType == PARTITION_FAT_12) ||
+        (PartEntry->PartitionType == PARTITION_FAT_16) ||
+        (PartEntry->PartitionType == PARTITION_HUGE) ||
+        (PartEntry->PartitionType == PARTITION_XINT13))
     {
-        PartType = MUIGetString(STRING_UNFORMATTED);
+        PartType = "FAT";
     }
-    else if (PartEntry->IsPartitioned == TRUE)
+    else if ((PartEntry->PartitionType == PARTITION_FAT32) ||
+             (PartEntry->PartitionType == PARTITION_FAT32_XINT13))
     {
-        if ((PartEntry->PartitionType == PARTITION_FAT_12) ||
-            (PartEntry->PartitionType == PARTITION_FAT_16) ||
-            (PartEntry->PartitionType == PARTITION_HUGE) ||
-            (PartEntry->PartitionType == PARTITION_XINT13))
-        {
-            PartType = "FAT";
-        }
-        else if ((PartEntry->PartitionType == PARTITION_FAT32) ||
-                 (PartEntry->PartitionType == PARTITION_FAT32_XINT13))
-        {
-            PartType = "FAT32";
-        }
-        else if (PartEntry->PartitionType == PARTITION_EXT2)
-        {
-            PartType = "EXT2";
-        }
-        else if (PartEntry->PartitionType == PARTITION_IFS)
-        {
-            PartType = "NTFS"; /* FIXME: Not quite correct! */
-        }
-        else if (IsContainerPartition(PartEntry->PartitionType))
-        {
-            PartType = MUIGetString(STRING_EXTENDED_PARTITION);
-        }
+        PartType = "FAT32";
+    }
+    else if (PartEntry->PartitionType == PARTITION_EXT2)
+    {
+        PartType = "EXT2";
+    }
+    else if (PartEntry->PartitionType == PARTITION_IFS)
+    {
+        PartType = "NTFS"; /* FIXME: Not quite correct! */
+    }
+    else if (IsContainerPartition(PartEntry->PartitionType))
+    {
+        PartType = MUIGetString(STRING_EXTENDED_PARTITION);
     }
 
     PartSize = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
@@ -2617,14 +2609,16 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
 
         PartEntry->AutoCreate = FALSE;
     }
+#if 0
     else if (PartEntry->New == TRUE)
     {
         CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_NONFORMATTEDPART));
         CONSOLE_SetTextXY(6, 10, MUIGetString(STRING_PARTFORMAT));
     }
+#endif
     else
     {
-        CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_INSTALLONPART));
+        CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_FORMATPART));
 
         if (PartType == NULL)
         {
@@ -2661,14 +2655,12 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
 
     if (FileSystemList == NULL)
     {
-        FileSystemList = CreateFileSystemList(6, 26, PartEntry->New, L"FAT");
+        FileSystemList = CreateFileSystemList(6, 26, TRUE, L"FAT", PARTITION_ENTRY_UNUSED);
         if (FileSystemList == NULL)
         {
             /* FIXME: show an error dialog */
             return QUIT_PAGE;
         }
-
-        /* FIXME: Add file systems to list */
     }
 
     DrawFileSystemList(FileSystemList);
@@ -2691,6 +2683,8 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
             {
                 DPRINT1("WriteDirtyPartitions() failed (Status 0x%08lx)\n", Status);
                 MUIDisplayError(ERROR_WRITE_PTABLE, Ir, POPUP_WAIT_ENTER);
+                DestroyFileSystemList(FileSystemList);
+                FileSystemList = NULL;
                 return QUIT_PAGE;
             }
 
@@ -2709,6 +2703,8 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
         {
             if (ConfirmQuit(Ir) == TRUE)
             {
+                DestroyFileSystemList(FileSystemList);
+                FileSystemList = NULL;
                 return QUIT_PAGE;
             }
 
@@ -2717,6 +2713,8 @@ SelectFileSystemPage(PINPUT_RECORD Ir)
         else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
                  (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE))  /* ESC */
         {
+            DestroyFileSystemList(FileSystemList);
+            FileSystemList = NULL;
             return SELECT_PARTITION_PAGE;
         }
         else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
@@ -2780,6 +2778,8 @@ FormatPartitionPage(PINPUT_RECORD Ir)
         PartitionList->CurrentPartition == NULL)
     {
         /* FIXME: show an error dialog */
+        DestroyFileSystemList(FileSystemList);
+        FileSystemList = NULL;
         return QUIT_PAGE;
     }
 
@@ -2798,6 +2798,8 @@ FormatPartitionPage(PINPUT_RECORD Ir)
         {
             if (ConfirmQuit(Ir) == TRUE)
             {
+                DestroyFileSystemList(FileSystemList);
+                FileSystemList = NULL;
                 return QUIT_PAGE;
             }
 
@@ -2808,7 +2810,11 @@ FormatPartitionPage(PINPUT_RECORD Ir)
             CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));
 
             if (!FileSystemList->Selected->FormatFunc)
+            {
+                DestroyFileSystemList(FileSystemList);
+                FileSystemList = NULL;
                 return QUIT_PAGE;
+            }
 
 #ifndef NDEBUG
             CONSOLE_PrintTextXY(6, 12,
@@ -2864,11 +2870,12 @@ FormatPartitionPage(PINPUT_RECORD Ir)
                 {
                     DPRINT1("FormatPartition() failed with status 0x%08lx\n", Status);
                     /* FIXME: show an error dialog */
+                    DestroyFileSystemList(FileSystemList);
+                    FileSystemList = NULL;
                     return QUIT_PAGE;
                 }
 
-                PartEntry->New = FALSE;
-
+                PartEntry->FormatState = Formatted;
             }
 
 #ifndef NDEBUG
@@ -2967,6 +2974,347 @@ CheckFileSystemPage(PINPUT_RECORD Ir)
 }
 
 
+
+
+static PAGE_NUMBER
+PreInstallSelectFormatPage(PINPUT_RECORD Ir)
+{
+    PDISKENTRY DiskEntry;
+    PPARTENTRY PartEntry;
+    ULONGLONG DiskSize;
+    ULONGLONG PartSize;
+    PCHAR DiskUnit;
+    PCHAR PartUnit;
+    PCHAR PartType;
+
+    if (PartitionList == NULL ||
+        PartitionList->CurrentDisk == NULL ||
+        PartitionList->CurrentPartition == NULL)
+    {
+        /* FIXME: show an error dialog */
+        return QUIT_PAGE;
+    }
+
+    DiskEntry = PartitionList->CurrentDisk;
+    PartEntry = PartitionList->CurrentPartition;
+
+    if (PartEntry->FormatState == Formatted)
+        return INSTALL_DIRECTORY_PAGE;
+
+    /* adjust disk size */
+    DiskSize = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
+    if (DiskSize >= 10737418240) /* 10 GB */
+    {
+        DiskSize = DiskSize / 1073741824;
+        DiskUnit = MUIGetString(STRING_GB);
+    }
+    else
+    {
+        DiskSize = DiskSize / 1048576;
+        DiskUnit = MUIGetString(STRING_MB);
+    }
+
+    /* adjust partition size */
+    PartSize = PartEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
+    if (PartSize >= 10737418240) /* 10 GB */
+    {
+        PartSize = PartSize / 1073741824;
+        PartUnit = MUIGetString(STRING_GB);
+    }
+    else
+    {
+        PartSize = PartSize / 1048576;
+        PartUnit = MUIGetString(STRING_MB);
+    }
+
+    /* adjust partition type */
+    if ((PartEntry->PartitionType == PARTITION_FAT_12) ||
+        (PartEntry->PartitionType == PARTITION_FAT_16) ||
+        (PartEntry->PartitionType == PARTITION_HUGE) ||
+        (PartEntry->PartitionType == PARTITION_XINT13))
+    {
+        PartType = "FAT";
+    }
+    else if ((PartEntry->PartitionType == PARTITION_FAT32) ||
+             (PartEntry->PartitionType == PARTITION_FAT32_XINT13))
+    {
+        PartType = "FAT32";
+    }
+    else if (PartEntry->PartitionType == PARTITION_EXT2)
+    {
+        PartType = "EXT2";
+    }
+    else if (PartEntry->PartitionType == PARTITION_IFS)
+    {
+        PartType = "NTFS"; /* FIXME: Not quite correct! */
+    }
+    else if (PartEntry->PartitionType == PARTITION_ENTRY_UNUSED)
+    {
+        PartType = MUIGetString(STRING_FORMATUNUSED);
+    }
+    else
+    {
+        PartType = MUIGetString(STRING_FORMATUNKNOWN);
+    }
+
+    if (PartEntry->AutoCreate == TRUE)
+    {
+        CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_NEWPARTITION));
+
+#if 0
+        CONSOLE_PrintTextXY(8, 10, "Partition %lu (%I64u %s) %s of",
+                            PartEntry->PartitionNumber,
+                            PartSize,
+                            PartUnit,
+                            PartType);
+#endif
+
+        CONSOLE_PrintTextXY(8, 10, MUIGetString(STRING_HDINFOPARTZEROED),
+                            DiskEntry->DiskNumber,
+                            DiskSize,
+                            DiskUnit,
+                            DiskEntry->Port,
+                            DiskEntry->Bus,
+                            DiskEntry->Id,
+                            &DiskEntry->DriverName);
+
+        CONSOLE_SetTextXY(6, 12, MUIGetString(STRING_PARTFORMAT));
+
+
+        PartEntry->AutoCreate = FALSE;
+    }
+#if 0
+    else if (PartEntry->New == TRUE)
+    {
+        CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_NONFORMATTEDPART));
+        CONSOLE_SetTextXY(6, 10, MUIGetString(STRING_PARTFORMAT));
+    }
+#endif
+    else
+    {
+        CONSOLE_SetTextXY(6, 8, MUIGetString(STRING_INSTALLONPART));
+
+        if (PartType == NULL)
+        {
+            CONSOLE_PrintTextXY(8, 10,
+                                MUIGetString(STRING_HDDINFOUNK4),
+                                (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
+                                (PartEntry->DriveLetter == 0) ? '-' : ':',
+                                PartEntry->PartitionType,
+                                PartSize,
+                                PartUnit);
+        }
+        else
+        {
+            CONSOLE_PrintTextXY(8, 10,
+                                "%c%c  %s    %I64u %s",
+                                (PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
+                                (PartEntry->DriveLetter == 0) ? '-' : ':',
+                                PartType,
+                                PartSize,
+                                PartUnit);
+        }
+
+        CONSOLE_PrintTextXY(6, 12, MUIGetString(STRING_HDINFOPARTEXISTS),
+                            DiskEntry->DiskNumber,
+                            DiskSize,
+                            DiskUnit,
+                            DiskEntry->Port,
+                            DiskEntry->Bus,
+                            DiskEntry->Id,
+                            &DiskEntry->DriverName);
+    }
+
+    MUIDisplayPage(SELECT_FILE_SYSTEM_PAGE);
+
+    if (FileSystemList != NULL)
+    {
+        DestroyFileSystemList(FileSystemList);
+        FileSystemList = NULL;
+    }
+
+    FileSystemList = CreateFileSystemList(6, 26, FALSE, L"FAT",
+                                          PartEntry->PartitionType);
+    if (FileSystemList == NULL)
+    {
+        /* FIXME: show an error dialog */
+        return QUIT_PAGE;
+    }
+
+    DrawFileSystemList(FileSystemList);
+
+    while (TRUE)
+    {
+        CONSOLE_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 == 0x00) &&
+                 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE))  /* ESC */
+        {
+            return SELECT_PARTITION_PAGE;
+        }
+        else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
+                 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN))  /* DOWN */
+        {
+            ScrollDownFileSystemList(FileSystemList);
+        }
+        else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
+                 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP))  /* UP */
+        {
+            ScrollUpFileSystemList(FileSystemList);
+        }
+        else if (Ir->Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */
+        {
+            if (FileSystemList->Selected->FormatFunc)
+            {
+                return PRE_INSTALL_FORMAT_PAGE;
+            }
+        }
+    }
+
+    return PRE_INSTALL_SELECT_FORMAT_PAGE;
+}
+
+
+static ULONG
+PreInstallFormatPage(PINPUT_RECORD Ir)
+{
+    WCHAR PathBuffer[MAX_PATH];
+//    PDISKENTRY DiskEntry;
+    PPARTENTRY PartEntry;
+    NTSTATUS Status;
+
+#ifndef NDEBUG
+    ULONG Line;
+    ULONG i;
+    PLIST_ENTRY Entry;
+#endif
+
+    MUIDisplayPage(FORMAT_PARTITION_PAGE);
+
+    if (PartitionList == NULL ||
+        PartitionList->CurrentDisk == NULL ||
+        PartitionList->CurrentPartition == NULL)
+    {
+        /* FIXME: show an error dialog */
+        return QUIT_PAGE;
+    }
+
+//    DiskEntry = PartitionList->CurrentDisk;
+    PartEntry = PartitionList->CurrentPartition;
+
+    while (TRUE)
+    {
+        if (!IsUnattendedSetup)
+        {
+            CONSOLE_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.wVirtualKeyCode == VK_RETURN || IsUnattendedSetup) /* ENTER */
+        {
+            CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));
+
+            if (!FileSystemList->Selected->FormatFunc)
+                return QUIT_PAGE;
+
+#ifndef NDEBUG
+            CONSOLE_PrintTextXY(6, 12,
+                                "Disk: %I64u  Cylinder: %I64u  Track: %I64u",
+                                DiskEntry->DiskSize,
+                                DiskEntry->CylinderSize,
+                                DiskEntry->TrackSize);
+
+            Line = 13;
+            DiskEntry = PartitionList->CurrentDisk;
+            Entry = DiskEntry->PartListHead.Flink;
+
+            while (Entry != &DiskEntry->PrimaryPartListHead)
+            {
+                PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry);
+
+                if (PartEntry->IsPartitioned == TRUE)
+                {
+                    CONSOLE_PrintTextXY(6, Line,
+                                        "%2u:  %2u  %c  %12I64u  %12I64u  %2u  %c",
+                                        i,
+                                        PartEntry->PartitionNumber,
+                                        PartEntry->BootIndicator ? 'A' : '-',
+                                        PartEntry->StartSector.QuadPart,
+                                        PartEntry->SectorCount.QuadPart,
+                                        PartEntry->PartitionType,
+                                        PartEntry->Dirty ? '*' : ' ');
+                    Line++;
+                }
+
+                Entry = Entry->Flink;
+            }
+
+            /* Restore the old entry */
+            PartEntry = PartitionList->CurrentPartition;
+#endif
+
+            /* Set DestinationRootPath */
+            RtlFreeUnicodeString(&DestinationRootPath);
+            swprintf(PathBuffer,
+                     L"\\Device\\Harddisk%lu\\Partition%lu",
+                     PartitionList->CurrentDisk->DiskNumber,
+                     PartitionList->CurrentPartition->PartitionNumber);
+            RtlCreateUnicodeString(&DestinationRootPath,
+                                   PathBuffer);
+            DPRINT("DestinationRootPath: %wZ\n", &DestinationRootPath);
+
+            if (FileSystemList->Selected->FormatFunc)
+            {
+                Status = FormatPartition(&DestinationRootPath,
+                                         FileSystemList->Selected);
+                if (!NT_SUCCESS(Status))
+                {
+                    DPRINT1("FormatPartition() failed with status 0x%08lx\n", Status);
+                    /* FIXME: show an error dialog */
+                    return QUIT_PAGE;
+                }
+
+                PartEntry->FormatState = Formatted;
+            }
+
+#ifndef NDEBUG
+            CONSOLE_SetStatusText("   Done.  Press any key ...");
+            CONSOLE_ConInKey(Ir);
+#endif
+
+            DestroyFileSystemList(FileSystemList);
+            FileSystemList = NULL;
+
+            return INSTALL_DIRECTORY_PAGE;
+        }
+    }
+
+    return PRE_INSTALL_FORMAT_PAGE;
+}
+
+
+
+
+
 static PAGE_NUMBER
 InstallDirectoryPage1(PWCHAR InstallDir,
                       PDISKENTRY DiskEntry,
@@ -4278,11 +4626,19 @@ RunUSetup(VOID)
                 break;
 
             case FORMAT_PARTITION_PAGE:
-                Page = (PAGE_NUMBER) FormatPartitionPage(&Ir);
+                Page = FormatPartitionPage(&Ir);
                 break;
 
             case CHECK_FILE_SYSTEM_PAGE:
-                Page = (PAGE_NUMBER) CheckFileSystemPage(&Ir);
+                Page = CheckFileSystemPage(&Ir);
+                break;
+
+            case PRE_INSTALL_SELECT_FORMAT_PAGE:
+                Page = PreInstallSelectFormatPage(&Ir);
+                break;
+
+            case PRE_INSTALL_FORMAT_PAGE:
+                Page = PreInstallFormatPage(&Ir);
                 break;
 
             case INSTALL_DIRECTORY_PAGE:
index 23dc0bf..ac92feb 100644 (file)
@@ -1753,5 +1753,7 @@ MUI_STRING bgBGStrings[] =
     "\83\81"},
     {STRING_ADDKBLAYOUTS,
     "\84®¡ ¢ï­¥ ­  ª« ¢¨ âãà­¨ ¯®¤à¥¤¡¨"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 4218262..94e0974 100644 (file)
@@ -1737,5 +1737,7 @@ MUI_STRING bnBDStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Adding keyboard layouts"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index f9612b8..eec59fd 100644 (file)
@@ -1746,5 +1746,7 @@ MUI_STRING csCZStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Pýid v m rozlo§en¡ kl ves"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 7f1e3cc..c0eb41e 100644 (file)
@@ -1742,5 +1742,7 @@ MUI_STRING deDEStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Tastaturlayout hinzuf\81gen"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 52f6c3f..04c5ca9 100644 (file)
@@ -1763,5 +1763,7 @@ MUI_STRING elGRStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "\82å¤\9c«\98  §¨¦©\9fã¡\9e «à¤ \9b \98«á¥\9cठ§¢\9e¡«¨¦¢¦\9a妬"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 4cdbb45..96acd71 100644 (file)
@@ -1737,5 +1737,7 @@ MUI_STRING enUSStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Adding keyboard layouts"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index c0d0d15..76470d2 100644 (file)
@@ -1745,5 +1745,7 @@ MUI_STRING esESStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "A¤adiendo distribuci¢n de teclado"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 4104224..9a2cbaa 100644 (file)
@@ -1738,5 +1738,7 @@ MUI_STRING etEEStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Klaviatuuriasetuste lisamine"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index b83f658..93e95b2 100644 (file)
@@ -1751,5 +1751,7 @@ MUI_STRING frFRStrings[] =
     "Go"},
     {STRING_ADDKBLAYOUTS,
     "Ajout des dispositions clavier"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 8e779f8..fa6fee7 100644 (file)
@@ -1739,5 +1739,7 @@ MUI_STRING heILStrings[] =
     "\82\89\82\84\81\89\89\88"},
     {STRING_ADDKBLAYOUTS,
     "Adding keyboard layouts"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 185f91d..3d7a4c6 100644 (file)
@@ -1740,5 +1740,7 @@ MUI_STRING itITStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Aggiunta delle nazionalit\85 di tastiera"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 4d11d82..336ec63 100644 (file)
@@ -1741,5 +1741,7 @@ MUI_STRING jaJPStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "·°ÎÞ°ÄÞ Ú²±³Äɠ²¶ Á­³"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index f24c844..ae7da24 100644 (file)
@@ -1748,5 +1748,7 @@ MUI_STRING ltLTStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Adding keyboard layouts"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index e1e9d45..0e49b16 100644 (file)
@@ -1786,5 +1786,7 @@ MUI_STRING nlNLStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Toevoegen toetsenbordindelingen"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index c212ae5..629fee4 100644 (file)
@@ -1746,5 +1746,7 @@ MUI_STRING plPLStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Dodawanie uk\88ad¢w klawiatury"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 9b32c9a..06960e5 100644 (file)
@@ -1777,5 +1777,7 @@ MUI_STRING ptBRStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Adicionando leiautes de teclado"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index d8049e7..03f9e63 100644 (file)
@@ -1814,5 +1814,7 @@ MUI_STRING roROStrings[] =
     "Go"},
     {STRING_ADDKBLAYOUTS,
     "AdÇugare configuraîii de tastaturÇ"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 3c5e824..faf8554 100644 (file)
@@ -1742,5 +1742,7 @@ MUI_STRING ruRUStrings[] =
     "\83\81"},
     {STRING_ADDKBLAYOUTS,
     "Adding keyboard layouts"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index f030e28..470c1d5 100644 (file)
@@ -1752,5 +1752,7 @@ MUI_STRING skSKStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Prid vam rozlo§enia kl vesnice"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index e340841..be0b639 100644 (file)
@@ -1744,5 +1744,7 @@ MUI_STRING sqALStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "Shtim e p\89rzgjedhjes s\89 tastier\89s"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 6f1f2fe..20e0494 100644 (file)
@@ -1747,5 +1747,7 @@ MUI_STRING svSEStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "L\84gger till tangentbordslayouter"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index 7bb8f98..ac2293d 100644 (file)
@@ -1725,5 +1725,7 @@ MUI_STRING trTRStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "D\81§me tak\8dm\8d d\81zenleri ekleniyor..."},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index e83dd37..9b38a6b 100644 (file)
@@ -1747,5 +1747,7 @@ MUI_STRING ukUAStrings[] =
     "GB"},
     {STRING_ADDKBLAYOUTS,
     "\84®¤ ¢ ­­ï à®§ª« ¤®ª ª« ¢i âãà¨"},
+    {STRING_FORMATPART,
+    "Setup formats Partition"},
     {0, 0}
 };
index b950a0e..6dd6ca2 100644 (file)
@@ -156,3 +156,5 @@ MUIGetString(
 #define STRING_MB                        54
 #define STRING_GB                        55
 #define STRING_ADDKBLAYOUTS              56
+#define STRING_FORMATPART                     62
+
index d00a7c9..67cce11 100644 (file)
@@ -2,12 +2,36 @@
 
 BOOLEAN
 NATIVE_CreateFileSystemList(
-    IN PFILE_SYSTEM_LIST List)
+    IN PFILE_SYSTEM_LIST List,
+    IN UCHAR PartitionType)
 {
-    FS_AddProvider(List, L"FAT", VfatFormat, VfatChkdsk);
+    if (PartitionType == PARTITION_ENTRY_UNUSED ||
+        PartitionType == PARTITION_FAT_12 ||
+        PartitionType == PARTITION_FAT_16 ||
+        PartitionType == PARTITION_HUGE ||
+        PartitionType == PARTITION_XINT13 ||
+        PartitionType == PARTITION_FAT32 ||
+        PartitionType == PARTITION_FAT32_XINT13)
+    {
+        FS_AddProvider(List, L"FAT", VfatFormat, VfatChkdsk);
+    }
+
 #if 0
-    FS_AddProvider(List, L"EXT2", Ext2Format, Ext2Chkdsk);
+    if (PartitionType == PARTITION_ENTRY_UNUSED ||
+        PartitionType == PARTITION_EXT2)
+    {
+        FS_AddProvider(List, L"EXT2", Ext2Format, Ext2Chkdsk);
+    }
 #endif
+
+#if 0
+    if (PartitionType == PARTITION_ENTRY_UNUSED ||
+        PartitionType == PARTITION_IFS)
+    {
+        FS_AddProvider(List, L"NTFS", NtfsFormat, NtfsChkdsk);
+    }
+#endif
+
     return TRUE;
 }
 
index f111d8a..6eb8632 100644 (file)
@@ -558,7 +558,7 @@ AddPartitionToDisk(
 
     if (IsContainerPartition(PartEntry->PartitionType))
     {
-        PartEntry->FormatState = Unformatted;
+        PartEntry->FormatState = Formatted;
 
         if (LogicalPartition == FALSE && DiskEntry->ExtendedPartition == NULL)
             DiskEntry->ExtendedPartition = PartEntry;
@@ -1499,11 +1499,7 @@ PrintPartitionData(
     {
         /* Determine partition type */
         PartType = NULL;
-        if (PartEntry->New == TRUE)
-        {
-            PartType = MUIGetString(STRING_UNFORMATTED);
-        }
-        else if (PartEntry->IsPartitioned == TRUE)
+        if (PartEntry->IsPartitioned == TRUE)
         {
             if ((PartEntry->PartitionType == PARTITION_FAT_12) ||
                 (PartEntry->PartitionType == PARTITION_FAT_16) ||
@@ -2386,7 +2382,6 @@ DPRINT1("Convert existing partition entry\n");
         PartEntry->PartitionType = PARTITION_ENTRY_UNUSED;
         PartEntry->FormatState = Unformatted;
         PartEntry->AutoCreate = AutoCreate;
-        PartEntry->New = TRUE;
         PartEntry->BootIndicator = FALSE;
 
 DPRINT1("First Sector: %I64u\n", PartEntry->StartSector.QuadPart);
@@ -2420,7 +2415,6 @@ DPRINT1("First Sector: %I64u\n", NewPartEntry->StartSector.QuadPart);
 DPRINT1("Last Sector: %I64u\n", NewPartEntry->StartSector.QuadPart + NewPartEntry->SectorCount.QuadPart - 1);
 DPRINT1("Total Sectors: %I64u\n", NewPartEntry->SectorCount.QuadPart);
 
-        NewPartEntry->New = TRUE;
         NewPartEntry->FormatState = Unformatted;
         NewPartEntry->BootIndicator = FALSE;
 
@@ -2505,7 +2499,6 @@ DPRINT1("Convert existing partition entry\n");
         PartEntry->IsPartitioned = TRUE;
         PartEntry->FormatState = Formatted;
         PartEntry->AutoCreate = FALSE;
-        PartEntry->New = FALSE;
         PartEntry->BootIndicator = FALSE;
 
         if (PartEntry->StartSector.QuadPart < 1450560)
@@ -2547,7 +2540,6 @@ DPRINT1("Add new partition entry\n");
         NewPartEntry->SectorCount.QuadPart = Align(NewPartEntry->StartSector.QuadPart + SectorCount, DiskEntry->SectorAlignment) -
                                              NewPartEntry->StartSector.QuadPart;
 
-        NewPartEntry->New = FALSE;
         NewPartEntry->FormatState = Formatted;
         NewPartEntry->BootIndicator = FALSE;
 
index 9db6c8e..8b54a90 100644 (file)
@@ -63,7 +63,7 @@ typedef struct _PARTENTRY
     BOOLEAN IsPartitioned;
 
     /* Partition is new. Table does not exist on disk yet */
-    BOOLEAN New;
+//    BOOLEAN New;
 
     /* Partition was created automatically. */
     BOOLEAN AutoCreate;
index cc9019f..187d0f0 100644 (file)
@@ -138,8 +138,11 @@ typedef enum _PAGE_NUMBER
     FORMAT_PARTITION_PAGE,
     CHECK_FILE_SYSTEM_PAGE,
 
-    PREPARE_COPY_PAGE,
+    PRE_INSTALL_SELECT_FORMAT_PAGE,
+    PRE_INSTALL_FORMAT_PAGE,
+
     INSTALL_DIRECTORY_PAGE,
+    PREPARE_COPY_PAGE,
     FILE_COPY_PAGE,
     REGISTRY_PAGE,
     BOOT_LOADER_PAGE,