mirror of
https://github.com/reactos/reactos.git
synced 2025-01-11 16:51:06 +00:00
- Recognize up to 4 partitions inside every primary partition table. However, installation will be performed to the first partition anyway.
svn path=/trunk/; revision=40428
This commit is contained in:
parent
8cd1519932
commit
fbd73e2e9e
2 changed files with 109 additions and 21 deletions
|
@ -928,6 +928,7 @@ CreatePartitionList (SHORT Left,
|
|||
|
||||
List->CurrentDisk = NULL;
|
||||
List->CurrentPartition = NULL;
|
||||
List->CurrentPartitionNumber = 0;
|
||||
|
||||
InitializeListHead (&List->DiskListHead);
|
||||
InitializeListHead (&List->BiosDiskListHead);
|
||||
|
@ -984,6 +985,7 @@ CreatePartitionList (SHORT Left,
|
|||
{
|
||||
List->CurrentDisk = NULL;
|
||||
List->CurrentPartition = NULL;
|
||||
List->CurrentPartitionNumber = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -995,6 +997,7 @@ CreatePartitionList (SHORT Left,
|
|||
if (IsListEmpty (&List->CurrentDisk->PartListHead))
|
||||
{
|
||||
List->CurrentPartition = 0;
|
||||
List->CurrentPartitionNumber = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1002,6 +1005,7 @@ CreatePartitionList (SHORT Left,
|
|||
CONTAINING_RECORD (List->CurrentDisk->PartListHead.Flink,
|
||||
PARTENTRY,
|
||||
ListEntry);
|
||||
List->CurrentPartitionNumber = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1091,7 +1095,8 @@ PrintEmptyLine (PPARTLIST List)
|
|||
static VOID
|
||||
PrintPartitionData (PPARTLIST List,
|
||||
PDISKENTRY DiskEntry,
|
||||
PPARTENTRY PartEntry)
|
||||
PPARTENTRY PartEntry,
|
||||
ULONG PartNumber)
|
||||
{
|
||||
CHAR LineBuffer[128];
|
||||
COORD coPos;
|
||||
|
@ -1147,44 +1152,44 @@ PrintPartitionData (PPARTLIST List,
|
|||
}
|
||||
else if (PartEntry->Unpartitioned == FALSE)
|
||||
{
|
||||
if ((PartEntry->PartInfo[0].PartitionType == PARTITION_FAT_12) ||
|
||||
(PartEntry->PartInfo[0].PartitionType == PARTITION_FAT_16) ||
|
||||
(PartEntry->PartInfo[0].PartitionType == PARTITION_HUGE) ||
|
||||
(PartEntry->PartInfo[0].PartitionType == PARTITION_XINT13))
|
||||
if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_12) ||
|
||||
(PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT_16) ||
|
||||
(PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_HUGE) ||
|
||||
(PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_XINT13))
|
||||
{
|
||||
PartType = "FAT";
|
||||
}
|
||||
else if ((PartEntry->PartInfo[0].PartitionType == PARTITION_FAT32) ||
|
||||
(PartEntry->PartInfo[0].PartitionType == PARTITION_FAT32_XINT13))
|
||||
else if ((PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32) ||
|
||||
(PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_FAT32_XINT13))
|
||||
{
|
||||
PartType = "FAT32";
|
||||
}
|
||||
else if (PartEntry->PartInfo[0].PartitionType == PARTITION_EXT2)
|
||||
else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_EXT2)
|
||||
{
|
||||
PartType = "EXT2";
|
||||
}
|
||||
else if (PartEntry->PartInfo[0].PartitionType == PARTITION_IFS)
|
||||
else if (PartEntry->PartInfo[PartNumber].PartitionType == PARTITION_IFS)
|
||||
{
|
||||
PartType = "NTFS"; /* FIXME: Not quite correct! */
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (PartEntry->PartInfo[0].PartitionLength.QuadPart >= 0x280000000LL) /* 10 GB */
|
||||
if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0x280000000LL) /* 10 GB */
|
||||
{
|
||||
PartSize.QuadPart = (PartEntry->PartInfo[0].PartitionLength.QuadPart + (1 << 29)) >> 30;
|
||||
PartSize.QuadPart = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 29)) >> 30;
|
||||
Unit = MUIGetString(STRING_GB);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (PartEntry->PartInfo[0].PartitionLength.QuadPart >= 0xA00000LL) /* 10 MB */
|
||||
if (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart >= 0xA00000LL) /* 10 MB */
|
||||
{
|
||||
PartSize.QuadPart = (PartEntry->PartInfo[0].PartitionLength.QuadPart + (1 << 19)) >> 20;
|
||||
PartSize.QuadPart = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 19)) >> 20;
|
||||
Unit = MUIGetString(STRING_MB);
|
||||
}
|
||||
else
|
||||
{
|
||||
PartSize.QuadPart = (PartEntry->PartInfo[0].PartitionLength.QuadPart + (1 << 9)) >> 10;
|
||||
PartSize.QuadPart = (PartEntry->PartInfo[PartNumber].PartitionLength.QuadPart + (1 << 9)) >> 10;
|
||||
Unit = MUIGetString(STRING_KB);
|
||||
}
|
||||
|
||||
|
@ -1194,7 +1199,7 @@ PrintPartitionData (PPARTLIST List,
|
|||
MUIGetString(STRING_HDDINFOUNK5),
|
||||
(PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
|
||||
(PartEntry->DriveLetter == 0) ? '-' : ':',
|
||||
PartEntry->PartInfo[0].PartitionType,
|
||||
PartEntry->PartInfo[PartNumber].PartitionType,
|
||||
PartSize.u.LowPart,
|
||||
Unit);
|
||||
}
|
||||
|
@ -1211,7 +1216,8 @@ PrintPartitionData (PPARTLIST List,
|
|||
}
|
||||
|
||||
Attribute = (List->CurrentDisk == DiskEntry &&
|
||||
List->CurrentPartition == PartEntry) ?
|
||||
List->CurrentPartition == PartEntry &&
|
||||
List->CurrentPartitionNumber == PartNumber) ?
|
||||
FOREGROUND_BLUE | BACKGROUND_WHITE :
|
||||
FOREGROUND_WHITE | BACKGROUND_BLUE;
|
||||
|
||||
|
@ -1259,6 +1265,7 @@ PrintDiskData (PPARTLIST List,
|
|||
USHORT Height;
|
||||
ULARGE_INTEGER DiskSize;
|
||||
PCHAR Unit;
|
||||
ULONG i;
|
||||
|
||||
Width = List->Right - List->Left - 1;
|
||||
Height = List->Bottom - List->Top - 2;
|
||||
|
@ -1338,9 +1345,16 @@ PrintDiskData (PPARTLIST List,
|
|||
LIST_FOR_EACH(PartEntry, &DiskEntry->PartListHead, PARTENTRY, ListEntry)
|
||||
{
|
||||
/* Print disk entry */
|
||||
for (i=0; i<4; i++)
|
||||
{
|
||||
if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED)
|
||||
{
|
||||
PrintPartitionData (List,
|
||||
DiskEntry,
|
||||
PartEntry);
|
||||
PartEntry,
|
||||
i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Print separator line */
|
||||
|
@ -1589,6 +1603,7 @@ SelectPartition(PPARTLIST List, ULONG DiskNumber, ULONG PartitionNumber)
|
|||
{
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
List->CurrentPartitionNumber = i;
|
||||
DrawPartitionList (List);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1610,6 +1625,7 @@ ScrollDownPartitionList (PPARTLIST List)
|
|||
PPARTENTRY PartEntry;
|
||||
PLIST_ENTRY Entry1;
|
||||
PLIST_ENTRY Entry2;
|
||||
UCHAR i;
|
||||
|
||||
/* Check for empty disks */
|
||||
if (IsListEmpty (&List->DiskListHead))
|
||||
|
@ -1618,7 +1634,30 @@ ScrollDownPartitionList (PPARTLIST List)
|
|||
/* Check for next usable entry on current disk */
|
||||
if (List->CurrentPartition != NULL)
|
||||
{
|
||||
Entry2 = List->CurrentPartition->ListEntry.Flink;
|
||||
Entry2 = &List->CurrentPartition->ListEntry;
|
||||
PartEntry = CONTAINING_RECORD (Entry2, PARTENTRY, ListEntry);
|
||||
|
||||
/* Check if we can move inside primary partitions */
|
||||
for (i = List->CurrentPartitionNumber + 1; i < 4; i++)
|
||||
{
|
||||
if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == 4)
|
||||
{
|
||||
/* We're out of partitions in the current partition table.
|
||||
Try to move to the next one if possible. */
|
||||
Entry2 = Entry2->Flink;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Just advance to the next partition */
|
||||
List->CurrentPartitionNumber = i;
|
||||
DrawPartitionList (List);
|
||||
return;
|
||||
}
|
||||
|
||||
while (Entry2 != &List->CurrentDisk->PartListHead)
|
||||
{
|
||||
PartEntry = CONTAINING_RECORD (Entry2, PARTENTRY, ListEntry);
|
||||
|
@ -1626,6 +1665,7 @@ ScrollDownPartitionList (PPARTLIST List)
|
|||
// if (PartEntry->HidePartEntry == FALSE)
|
||||
{
|
||||
List->CurrentPartition = PartEntry;
|
||||
List->CurrentPartitionNumber = 0;
|
||||
DrawPartitionList (List);
|
||||
return;
|
||||
}
|
||||
|
@ -1650,6 +1690,7 @@ ScrollDownPartitionList (PPARTLIST List)
|
|||
{
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
List->CurrentPartitionNumber = 0;
|
||||
DrawPartitionList (List);
|
||||
return;
|
||||
}
|
||||
|
@ -1670,6 +1711,7 @@ ScrollUpPartitionList (PPARTLIST List)
|
|||
PPARTENTRY PartEntry;
|
||||
PLIST_ENTRY Entry1;
|
||||
PLIST_ENTRY Entry2;
|
||||
UCHAR i;
|
||||
|
||||
/* Check for empty disks */
|
||||
if (IsListEmpty (&List->DiskListHead))
|
||||
|
@ -1678,7 +1720,28 @@ ScrollUpPartitionList (PPARTLIST List)
|
|||
/* check for previous usable entry on current disk */
|
||||
if (List->CurrentPartition != NULL)
|
||||
{
|
||||
Entry2 = List->CurrentPartition->ListEntry.Blink;
|
||||
Entry2 = &List->CurrentPartition->ListEntry;
|
||||
PartEntry = CONTAINING_RECORD (Entry2, PARTENTRY, ListEntry);
|
||||
|
||||
/* Check if we can move inside primary partitions */
|
||||
if (List->CurrentPartitionNumber > 0)
|
||||
{
|
||||
/* Find a previous partition */
|
||||
for (i = List->CurrentPartitionNumber - 1; i > 0; i--)
|
||||
{
|
||||
if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Move to it and return */
|
||||
List->CurrentPartitionNumber = i;
|
||||
DrawPartitionList (List);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Move to the previous entry */
|
||||
Entry2 = Entry2->Blink;
|
||||
|
||||
while (Entry2 != &List->CurrentDisk->PartListHead)
|
||||
{
|
||||
PartEntry = CONTAINING_RECORD (Entry2, PARTENTRY, ListEntry);
|
||||
|
@ -1686,6 +1749,18 @@ ScrollUpPartitionList (PPARTLIST List)
|
|||
// if (PartEntry->HidePartEntry == FALSE)
|
||||
{
|
||||
List->CurrentPartition = PartEntry;
|
||||
|
||||
/* Find last existing partition in the table */
|
||||
for (i = 3; i > 0; i--)
|
||||
{
|
||||
if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Move to it */
|
||||
List->CurrentPartitionNumber = i;
|
||||
|
||||
/* Draw partition list and return */
|
||||
DrawPartitionList (List);
|
||||
return;
|
||||
}
|
||||
|
@ -1711,6 +1786,18 @@ ScrollUpPartitionList (PPARTLIST List)
|
|||
{
|
||||
List->CurrentDisk = DiskEntry;
|
||||
List->CurrentPartition = PartEntry;
|
||||
|
||||
/* Find last existing partition in the table */
|
||||
for (i = 3; i > 0; i--)
|
||||
{
|
||||
if (PartEntry->PartInfo[i].PartitionType != PARTITION_ENTRY_UNUSED)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Move to it */
|
||||
List->CurrentPartitionNumber = i;
|
||||
|
||||
/* Draw partition list and return */
|
||||
DrawPartitionList (List);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -132,6 +132,7 @@ typedef struct _PARTLIST
|
|||
|
||||
PDISKENTRY CurrentDisk;
|
||||
PPARTENTRY CurrentPartition;
|
||||
UCHAR CurrentPartitionNumber;
|
||||
|
||||
PDISKENTRY ActiveBootDisk;
|
||||
PPARTENTRY ActiveBootPartition;
|
||||
|
|
Loading…
Reference in a new issue