Added some cosmetical fixes.

Fixed size of trailing unused disk space.
Create partition page adds partition to internal list.
No on-disk changes yet.

svn path=/trunk/; revision=5425
This commit is contained in:
Eric Kohl 2003-08-05 20:39:24 +00:00
parent 0c3a60aa71
commit 5f3ceed713
4 changed files with 391 additions and 182 deletions

View 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.13 2003/08/04 15:54:05 ekohl Exp $
/* $Id: partlist.c,v 1.14 2003/08/05 20:39:24 ekohl Exp $
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS text-mode setup
* FILE: subsys/system/usetup/partlist.c
@ -47,6 +47,11 @@ GetDriverName(PDISKENTRY DiskEntry)
WCHAR KeyName[32];
NTSTATUS Status;
#if 0
RtlCreateUnicodeString (&DiskEntry->DriverName,
L"atapi");
#endif
RtlInitUnicodeString(&DiskEntry->DriverName,
NULL);
@ -203,8 +208,15 @@ ScanForUnpartitionedDiskSpace (PDISKENTRY DiskEntry)
/* Check for trailing unpartitioned disk space */
if (DiskEntry->DiskSize > (LastStartingOffset + LastPartitionLength))
{
#if 0
LastUnusedPartitionLength =
DiskEntry->DiskSize - (LastStartingOffset + LastPartitionLength);
#endif
/* FIXME: Round-down to cylinder size */
LastUnusedPartitionLength =
ROUND_DOWN (DiskEntry->DiskSize - (LastStartingOffset + LastPartitionLength),
DiskEntry->CylinderSize);
if (LastUnusedPartitionLength >= DiskEntry->CylinderSize)
{
@ -370,9 +382,11 @@ InitializePartitionList(VOID)
UNICODE_STRING Name;
HANDLE FileHandle;
List = (PPARTLIST)RtlAllocateHeap(ProcessHeap, 0, sizeof(PARTLIST));
List = (PPARTLIST)RtlAllocateHeap (ProcessHeap,
0,
sizeof (PARTLIST));
if (List == NULL)
return(NULL);
return NULL;
List->Left = 0;
List->Top = 0;
@ -440,7 +454,10 @@ InitializePartitionList(VOID)
}
else
{
List->CurrentDisk = CONTAINING_RECORD(List->DiskListHead.Flink, DISKENTRY, ListEntry);
List->CurrentDisk =
CONTAINING_RECORD (List->DiskListHead.Flink,
DISKENTRY,
ListEntry);
if (IsListEmpty (&List->CurrentDisk->PartListHead))
{
@ -448,11 +465,14 @@ InitializePartitionList(VOID)
}
else
{
List->CurrentPartition = CONTAINING_RECORD(List->CurrentDisk->PartListHead.Flink, PARTENTRY, ListEntry);
List->CurrentPartition =
CONTAINING_RECORD (List->CurrentDisk->PartListHead.Flink,
PARTENTRY,
ListEntry);
}
}
return(List);
return List;
}
@ -464,62 +484,18 @@ CreatePartitionList(SHORT Left,
{
PPARTLIST List;
List = InitializePartitionList();
List = InitializePartitionList ();
if (List == NULL)
return(NULL);
return NULL;
List->Left = Left;
List->Top = Top;
List->Right = Right;
List->Bottom = Bottom;
DrawPartitionList(List);
DrawPartitionList (List);
return(List);
}
PPARTENTRY
GetPartitionInformation(PPARTLIST List,
ULONG DiskNumber,
ULONG PartitionNumber,
PULONG PartEntryNumber)
{
PPARTENTRY PartEntry;
ULONG i;
if (IsListEmpty(&List->DiskListHead))
{
return NULL;
}
#if 0
if (DiskNumber >= List->DiskCount)
{
return NULL;
}
if (PartitionNumber >= List->DiskArray[DiskNumber].PartCount)
{
return NULL;
}
if (List->DiskArray[DiskNumber].FixedDisk != TRUE)
{
return NULL;
}
for (i = 0; i < List->DiskArray[DiskNumber].PartCount; i++)
{
PartEntry = &List->DiskArray[DiskNumber].PartArray[i];
if (PartEntry->PartNumber == PartitionNumber)
{
*PartEntryNumber = i;
return PartEntry;
}
}
#endif
return NULL;
return List;
}
@ -635,8 +611,6 @@ PrintPartitionData(PPARTLIST List,
coPos.X = List->Left + 1;
coPos.Y = List->Top + 1 + List->Line;
if (PartEntry->Unpartitioned == TRUE)
{
#if 0
@ -668,7 +642,11 @@ PrintPartitionData(PPARTLIST List,
/* Determine partition type */
PartType = NULL;
if (PartEntry->Unpartitioned == FALSE)
if (PartEntry->New == TRUE)
{
PartType = "New (Unformatted)";
}
else if (PartEntry->Unpartitioned == FALSE)
{
if ((PartEntry->PartInfo[0].PartitionType == PARTITION_FAT_12) ||
(PartEntry->PartInfo[0].PartitionType == PARTITION_FAT_16) ||
@ -707,35 +685,25 @@ PrintPartitionData(PPARTLIST List,
Unit = "KB";
}
if (PartEntry->DriveLetter != (CHAR)0)
if (PartType == NULL)
{
if (PartType == NULL)
{
sprintf(LineBuffer,
"%c: Type %-3lu %6I64u %s",
PartEntry->DriveLetter,
PartEntry->PartInfo[0].PartitionType,
PartSize,
Unit);
}
else
{
sprintf(LineBuffer,
"%c: %-8s %6I64u %s",
PartEntry->DriveLetter,
PartType,
PartSize,
Unit);
}
sprintf (LineBuffer,
"%c%c Type %-3lu %6I64u %s",
(PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
(PartEntry->DriveLetter == 0) ? '-' : ':',
PartEntry->PartInfo[0].PartitionType,
PartSize,
Unit);
}
else
{
sprintf(LineBuffer,
"-- %-8s Type %-3lu %6I64u %s",
PartEntry->FileSystemName,
PartEntry->PartInfo[0].PartitionType,
PartSize,
Unit);
sprintf (LineBuffer,
"%c%c %-24s %6I64u %s",
(PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
(PartEntry->DriveLetter == 0) ? '-' : ':',
PartType,
PartSize,
Unit);
}
}

View 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.13 2003/08/04 15:54:05 ekohl Exp $
/* $Id: partlist.h,v 1.14 2003/08/05 20:39:24 ekohl Exp $
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS text-mode setup
* FILE: subsys/system/usetup/partlist.h
@ -36,8 +36,12 @@ typedef struct _PARTENTRY
CHAR VolumeLabel[17];
CHAR FileSystemName[9];
/* Partition is unused disk space */
BOOLEAN Unpartitioned;
/* Partition is new. Table does not exist on disk yet */
BOOLEAN New;
/*
* Raw offset and length of the unpartitioned disk space.
* Includes the leading, not yet existing, partition table.

View file

@ -869,46 +869,41 @@ DrawInputField(ULONG FieldLength,
memset(buf, '_', sizeof(buf));
buf[FieldLength - strlen(FieldContent)] = 0;
strcat(buf, FieldContent);
WriteConsoleOutputCharacters(buf,
strlen(buf),
coPos);
WriteConsoleOutputCharacters (buf,
strlen (buf),
coPos);
}
#define PARTITION_SIZE_INPUT_FIELD_LENGTH 6
static VOID
ShowPartitionSizeInputBox(ULONG MaxSize,
PCHAR InputBuffer,
PBOOLEAN Quit,
PBOOLEAN Cancel)
ShowPartitionSizeInputBox(SHORT Left,
SHORT Top,
SHORT Right,
SHORT Bottom,
ULONG MaxSize,
PCHAR InputBuffer,
PBOOLEAN Quit,
PBOOLEAN Cancel)
{
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
INPUT_RECORD Ir;
COORD coPos;
ULONG Written;
SHORT i;
CHAR buf[100];
ULONG index;
CHAR Buffer[100];
ULONG Index;
CHAR ch;
SHORT iLeft;
SHORT iTop;
SHORT xScreen;
SHORT yScreen;
if (Quit != NULL)
*Quit = FALSE;
if (Cancel != NULL)
*Cancel = FALSE;
GetScreenSize(&xScreen, &yScreen);
Left = 12;
Top = 14;
Right = xScreen - 12;
Bottom = 17;
/* draw upper left corner */
coPos.X = Left;
coPos.Y = Top;
@ -977,75 +972,89 @@ ShowPartitionSizeInputBox(ULONG MaxSize,
/* Print message */
coPos.X = Left + 2;
coPos.Y = Top + 2;
strcpy(buf, "Size of new partition:");
iLeft = coPos.X + strlen(buf) + 1;
strcpy (Buffer, "Size of new partition:");
iLeft = coPos.X + strlen (Buffer) + 1;
iTop = coPos.Y;
WriteConsoleOutputCharacters(buf,
strlen(buf),
coPos);
WriteConsoleOutputCharacters (Buffer,
strlen (Buffer),
coPos);
sprintf(buf, "MB (max. %d MB)", MaxSize / (1024 * 1024));
sprintf (Buffer, "MB (max. %d MB)", MaxSize);
coPos.X = iLeft + PARTITION_SIZE_INPUT_FIELD_LENGTH + 1;
coPos.Y = iTop;
WriteConsoleOutputCharacters(buf,
strlen(buf),
coPos);
WriteConsoleOutputCharacters (Buffer,
strlen (Buffer),
coPos);
buf[0] = 0;
index = 0;
DrawInputField(PARTITION_SIZE_INPUT_FIELD_LENGTH, iLeft, iTop, buf);
Buffer[0] = 0;
Index = 0;
DrawInputField (PARTITION_SIZE_INPUT_FIELD_LENGTH,
iLeft,
iTop,
Buffer);
while(TRUE)
while (TRUE)
{
ConInKey(&Ir);
ConInKey (&Ir);
if ((Ir.Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir.Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
{
if (Quit != NULL)
*Quit = TRUE;
buf[0] = 0;
break;
}
(Ir.Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */
{
if (Quit != NULL)
*Quit = TRUE;
Buffer[0] = 0;
break;
}
else if (Ir.Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */
{
break;
}
{
break;
}
else if (Ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) /* ESCAPE */
{
if (Cancel != NULL)
*Cancel = FALSE;
buf[0] = 0;
break;
}
else if ((Ir.Event.KeyEvent.wVirtualKeyCode == VK_BACK) && (index > 0)) /* BACKSPACE */
{
index--;
buf[index] = 0;
DrawInputField(PARTITION_SIZE_INPUT_FIELD_LENGTH, iLeft, iTop, buf);
}
else if ((Ir.Event.KeyEvent.uChar.AsciiChar != 0x00)
&& (index < PARTITION_SIZE_INPUT_FIELD_LENGTH))
{
ch = Ir.Event.KeyEvent.uChar.AsciiChar;
if ((ch >= '0') && (ch <= '9'))
{
buf[index] = ch;
index++;
buf[index] = 0;
DrawInputField(PARTITION_SIZE_INPUT_FIELD_LENGTH, iLeft, iTop, buf);
}
}
{
if (Cancel != NULL)
*Cancel = TRUE;
Buffer[0] = 0;
break;
}
else if ((Ir.Event.KeyEvent.wVirtualKeyCode == VK_BACK) && /* BACKSPACE */
(Index > 0))
{
Index--;
Buffer[Index] = 0;
DrawInputField (PARTITION_SIZE_INPUT_FIELD_LENGTH,
iLeft,
iTop,
Buffer);
}
else if ((Ir.Event.KeyEvent.uChar.AsciiChar != 0x00) &&
(Index < PARTITION_SIZE_INPUT_FIELD_LENGTH))
{
ch = Ir.Event.KeyEvent.uChar.AsciiChar;
if ((ch >= '0') && (ch <= '9'))
{
Buffer[Index] = ch;
Index++;
Buffer[Index] = 0;
DrawInputField (PARTITION_SIZE_INPUT_FIELD_LENGTH,
iLeft,
iTop,
Buffer);
}
}
}
strcpy(InputBuffer, buf);
strcpy (InputBuffer,
Buffer);
}
static PAGE_NUMBER
CreatePartitionPage (PINPUT_RECORD Ir)
{
BOOLEAN Valid;
WCHAR PathBuffer[MAX_PATH];
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
BOOLEAN Valid;
SHORT xScreen;
SHORT yScreen;
BOOLEAN Quit;
@ -1054,35 +1063,92 @@ CreatePartitionPage (PINPUT_RECORD Ir)
ULONG MaxSize;
ULONGLONG PartSize;
SetTextXY(6, 8, "You have chosen to create a new partition in the unused disk space.");
SetTextXY(6, 9, "Please enter the size of the new partition in megabytes.");
ULONGLONG DiskSize;
PCHAR Unit;
if (PartitionList == NULL ||
PartitionList->CurrentDisk == NULL ||
PartitionList->CurrentPartition == NULL)
{
/* FIXME: show an error dialog */
return QUIT_PAGE;
}
DiskEntry = PartitionList->CurrentDisk;
PartEntry = PartitionList->CurrentPartition;
SetStatusText (" Please wait...");
GetScreenSize (&xScreen, &yScreen);
SetTextXY (6, 8, "You have chosen to create a new partition on");
#if 0
PrintTextXY(8, 10, "Maximum size of the new partition is %I64u MB",
PartitionList->CurrentPartition->UnpartitionedLength / (1024*1024));
if (DiskEntry->DiskSize >= 0x280000000ULL) /* 10 GB */
{
DiskSize = (DiskEntry->DiskSize + (1 << 29)) >> 30;
Unit = "GB";
}
else
#endif
{
DiskSize = (DiskEntry->DiskSize + (1 << 19)) >> 20;
if (DiskSize == 0)
DiskSize = 1;
Unit = "MB";
}
if (DiskEntry->DriverName.Length > 0)
{
PrintTextXY (6, 10,
"%I64u %s Harddisk %lu (Port=%hu, Bus=%hu, Id=%hu) on %wZ.",
DiskSize,
Unit,
DiskEntry->DiskNumber,
DiskEntry->Port,
DiskEntry->Bus,
DiskEntry->Id,
&DiskEntry->DriverName);
}
else
{
PrintTextXY (6, 10,
"%I64u %s Harddisk %lu (Port=%hu, Bus=%hu, Id=%hu).",
DiskSize,
Unit,
DiskEntry->DiskNumber,
DiskEntry->Port,
DiskEntry->Bus,
DiskEntry->Id);
}
SetTextXY (6, 12, "Please enter the size of the new partition in megabytes.");
#if 0
PrintTextXY (8, 10, "Maximum size of the new partition is %I64u MB",
PartitionList->CurrentPartition->UnpartitionedLength / (1024*1024));
#endif
SetStatusText(" Please wait...");
GetScreenSize(&xScreen, &yScreen);
SetStatusText(" ENTER = Continue ESC = Cancel F3 = Quit");
SetStatusText (" ENTER = Create Partition ESC = Cancel F3 = Quit");
PartEntry = PartitionList->CurrentPartition;
while (TRUE)
{
MaxSize = PartEntry->UnpartitionedLength;
ShowPartitionSizeInputBox (MaxSize, InputBuffer, &Quit, &Cancel);
// MaxSize = PartEntry->UnpartitionedLength / (1024 * 1024); /* in MBytes */
MaxSize = (PartEntry->UnpartitionedLength + (1 << 19)) >> 20; /* in MBytes (rounded) */
ShowPartitionSizeInputBox (12, 14, xScreen - 12, 17, /* left, top, right, bottom */
MaxSize, InputBuffer, &Quit, &Cancel);
if (Quit == TRUE)
{
if (ConfirmQuit(Ir) == TRUE)
if (ConfirmQuit (Ir) == TRUE)
{
return QUIT_PAGE;
}
}
else if (Cancel == TRUE)
{
break;
return SELECT_PARTITION_PAGE;
}
else
{
@ -1093,14 +1159,66 @@ CreatePartitionPage (PINPUT_RECORD Ir)
continue;
}
/* Convert to bytes */
PartSize *= 1024 * 1024;
if (PartSize > PartEntry->UnpartitionedLength)
if (PartSize > MaxSize)
{
/* Too large */
continue;
}
/* Convert to bytes */
if (PartSize == MaxSize)
{
/* Use all of the unpartitioned disk space */
PartSize = PartEntry->UnpartitionedLength;
}
else
{
/* Round-up by cylinder size */
PartSize = ROUND_UP (PartSize * 1024 * 1024,
DiskEntry->CylinderSize);
/* But never get larger than the unpartitioned disk space */
if (PartSize > PartEntry->UnpartitionedLength)
PartSize = PartEntry->UnpartitionedLength;
}
if (PartSize == PartEntry->UnpartitionedLength)
{
/* FIXME: Convert current entry to 'new (unformatted)' */
PartEntry->PartInfo[0].StartingOffset.QuadPart =
PartEntry->UnpartitionedOffset + DiskEntry->TrackSize;
PartEntry->PartInfo[0].PartitionLength.QuadPart =
PartEntry->UnpartitionedLength - DiskEntry->TrackSize;
PartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED;
PartEntry->PartInfo[0].BootIndicator = FALSE; /* FIXME */
PartEntry->PartInfo[0].RewritePartition = TRUE;
/* FIXME: Update extended partition entries */
PartEntry->New = TRUE;
PartEntry->Unpartitioned = FALSE;
PartEntry->UnpartitionedOffset = 0ULL;
PartEntry->UnpartitionedLength = 0ULL;
}
else
{
/*
* FIXME:
* Insert new 'new (unformatted)' entry before the
* current entry and adjust offsets and sizes.
*/
}
DPRINT1 ("Partition size: %I64u bytes\n", PartSize);
PopupError ("Entered valid partition size!\n"
"\n"
" * Press any key to continue.",
NULL);
ConInKey (Ir);
#if 0
PartEntry->PartType = PARTITION_ENTRY_UNUSED;
PartEntry->Used = TRUE;
@ -1118,7 +1236,7 @@ CreatePartitionPage (PINPUT_RECORD Ir)
RtlFreeUnicodeString(&DestinationRootPath);
swprintf(PathBuffer,
L"\\Device\\Harddisk%lu\\Partition%lu",
PartData.DiskNumber,
DiskEntry->DiskNumber,
PartData.PartNumber);
RtlCreateUnicodeString(&DestinationRootPath,
PathBuffer);
@ -1137,7 +1255,7 @@ CreatePartitionPage (PINPUT_RECORD Ir)
/* We mark the selected partition as bootable */
swprintf(PathBuffer,
L"\\Device\\Harddisk%lu\\Partition%lu",
PartData.DiskNumber,
DiskEntry->DiskNumber,
PartData.PartNumber);
}
RtlCreateUnicodeString(&SystemRootPath,
@ -1155,30 +1273,144 @@ CreatePartitionPage (PINPUT_RECORD Ir)
}
}
return SELECT_PARTITION_PAGE;
return CREATE_PARTITION_PAGE;
}
static PAGE_NUMBER
DeletePartitionPage (PINPUT_RECORD Ir)
{
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
ULONGLONG DiskSize;
ULONGLONG PartSize;
PCHAR Unit;
PCHAR PartType;
SetTextXY(6, 8, "You have chosen to delete the following partition:");
if (PartitionList == NULL ||
PartitionList->CurrentDisk == NULL ||
PartitionList->CurrentPartition == NULL)
{
/* FIXME: show an error dialog */
return QUIT_PAGE;
}
DiskEntry = PartitionList->CurrentDisk;
PartEntry = PartitionList->CurrentPartition;
SetTextXY(6, 8, "You have chosen to delete the partition");
/* Determine partition type */
PartType = NULL;
if (PartEntry->New == TRUE)
{
PartType = "New (Unformatted)";
}
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))
{
PartType = "FAT";
}
else if ((PartEntry->PartInfo[0].PartitionType == PARTITION_FAT32) ||
(PartEntry->PartInfo[0].PartitionType == PARTITION_FAT32_XINT13))
{
PartType = "FAT32";
}
else if (PartEntry->PartInfo[0].PartitionType == PARTITION_IFS)
{
PartType = "NTFS"; /* FIXME: Not quite correct! */
}
}
#if 0
SetTextXY(6, 9, "Please enter the size of the new partition in megabytes.");
PrintTextXY(8, 10, "Maximum size of the new partition is %I64u MB",
PartitionList->CurrentPartition->UnpartitionedLength / (1024*1024));
if (PartEntry->PartInfo[0].PartitionLength.QuadPart >= 0x280000000ULL) /* 10 GB */
{
PartSize = (PartEntry->PartInfo[0].PartitionLength.QuadPart + (1 << 29)) >> 30;
Unit = "GB";
}
else
#endif
if (PartEntry->PartInfo[0].PartitionLength.QuadPart >= 0xA00000ULL) /* 10 MB */
{
PartSize = (PartEntry->PartInfo[0].PartitionLength.QuadPart + (1 << 19)) >> 20;
Unit = "MB";
}
else
{
PartSize = (PartEntry->PartInfo[0].PartitionLength.QuadPart + (1 << 9)) >> 10;
Unit = "KB";
}
if (PartType == NULL)
{
PrintTextXY (6, 10,
// " %c%c Type %-3lu %6I64u %s",
" %c%c Type %lu %I64u %s",
(PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
(PartEntry->DriveLetter == 0) ? '-' : ':',
PartEntry->PartInfo[0].PartitionType,
PartSize,
Unit);
}
else
{
PrintTextXY (6, 10,
// " %c%c %-8s %6I64u %s",
" %c%c %s %I64u %s",
(PartEntry->DriveLetter == 0) ? '-' : PartEntry->DriveLetter,
(PartEntry->DriveLetter == 0) ? '-' : ':',
PartType,
PartSize,
Unit);
}
SetTextXY(8, 13, "\x07 Press D to delete the partition.");
SetTextXY(11, 14, "WARNING: All data on this partition will be lost!");
#if 0
if (DiskEntry->DiskSize >= 0x280000000ULL) /* 10 GB */
{
DiskSize = (DiskEntry->DiskSize + (1 << 29)) >> 30;
Unit = "GB";
}
else
#endif
{
DiskSize = (DiskEntry->DiskSize + (1 << 19)) >> 20;
if (DiskSize == 0)
DiskSize = 1;
Unit = "MB";
}
SetTextXY(8, 16, "\x07 Press ESC to cancel.");
if (DiskEntry->DriverName.Length > 0)
{
PrintTextXY (6, 12,
"on %I64u %s Harddisk %lu (Port=%hu, Bus=%hu, Id=%hu) on %wZ.",
DiskSize,
Unit,
DiskEntry->DiskNumber,
DiskEntry->Port,
DiskEntry->Bus,
DiskEntry->Id,
&DiskEntry->DriverName);
}
else
{
PrintTextXY (6, 12,
"on %I64u %s Harddisk %lu (Port=%hu, Bus=%hu, Id=%hu).",
DiskSize,
Unit,
DiskEntry->DiskNumber,
DiskEntry->Port,
DiskEntry->Bus,
DiskEntry->Id);
}
SetTextXY(8, 18, "\x07 Press D to delete the partition.");
SetTextXY(11, 19, "WARNING: All data on this partition will be lost!");
SetTextXY(8, 21, "\x07 Press ESC to cancel.");
SetStatusText(" D = Delete Partition ESC = Cancel F3 = Quit");

View file

@ -38,6 +38,11 @@
#define DPRINT(args...)
#define CHECKPOINT
#define ROUND_DOWN(N, S) (((N) / (S)) * (S))
#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
typedef enum
{
FsFat = 0,