This will allow to reuse it for the 1st-stage GUI setup too, while using another UI representation.
Add also two partition iterator functions: GetNextPartition and GetPrevPartition.
svn path=/branches/setup_improvements/; revision=74554
-CreatePartitionList(
- SHORT Left,
- SHORT Top,
- SHORT Right,
- SHORT Bottom)
+CreatePartitionList(VOID)
{
PPARTLIST List;
OBJECT_ATTRIBUTES ObjectAttributes;
{
PPARTLIST List;
OBJECT_ATTRIBUTES ObjectAttributes;
if (List == NULL)
return NULL;
if (List == NULL)
return NULL;
- List->Left = Left;
- List->Top = Top;
- List->Right = Right;
- List->Bottom = Bottom;
-
- List->Line = 0;
- List->Offset = 0;
-
List->CurrentDisk = NULL;
List->CurrentPartition = NULL;
List->CurrentDisk = NULL;
List->CurrentPartition = NULL;
Status = NtQuerySystemInformation(SystemDeviceInformation,
&Sdi,
Status = NtQuerySystemInformation(SystemDeviceInformation,
&Sdi,
- sizeof(SYSTEM_DEVICE_INFORMATION),
&ReturnSize);
if (!NT_SUCCESS(Status))
{
&ReturnSize);
if (!NT_SUCCESS(Status))
{
+ DPRINT1("NtQuerySystemInformation() failed, Status 0x%08lx", Status);
RtlFreeHeap(ProcessHeap, 0, List);
return NULL;
}
RtlFreeHeap(ProcessHeap, 0, List);
return NULL;
}
+VOID
+InitPartitionListUi(
+ IN OUT PPARTLIST_UI ListUi,
+ IN PPARTLIST List,
+ IN SHORT Left,
+ IN SHORT Top,
+ IN SHORT Right,
+ IN SHORT Bottom)
+{
+ ListUi->List = List;
+ // ListUi->FirstShown = NULL;
+ // ListUi->LastShown = NULL;
+
+ ListUi->Left = Left;
+ ListUi->Top = Top;
+ ListUi->Right = Right;
+ ListUi->Bottom = Bottom;
+
+ ListUi->Line = 0;
+ ListUi->Offset = 0;
+
+ // ListUi->Redraw = TRUE;
+}
+
static
VOID
PrintEmptyLine(
static
VOID
PrintEmptyLine(
+ IN PPARTLIST_UI ListUi)
{
COORD coPos;
ULONG Written;
USHORT Width;
USHORT Height;
{
COORD coPos;
ULONG Written;
USHORT Width;
USHORT Height;
- Width = List->Right - List->Left - 1;
- Height = List->Bottom - List->Top - 2;
+ Width = ListUi->Right - ListUi->Left - 1;
+ Height = ListUi->Bottom - ListUi->Top - 2;
- coPos.X = List->Left + 1;
- coPos.Y = List->Top + 1 + List->Line;
+ coPos.X = ListUi->Left + 1;
+ coPos.Y = ListUi->Top + 1 + ListUi->Line;
- if (List->Line >= 0 && List->Line <= Height)
+ if (ListUi->Line >= 0 && ListUi->Line <= Height)
{
FillConsoleOutputAttribute(StdOutput,
FOREGROUND_WHITE | BACKGROUND_BLUE,
{
FillConsoleOutputAttribute(StdOutput,
FOREGROUND_WHITE | BACKGROUND_BLUE,
}
static
VOID
PrintPartitionData(
}
static
VOID
PrintPartitionData(
+ IN PPARTLIST_UI ListUi,
IN PDISKENTRY DiskEntry,
IN PPARTENTRY PartEntry)
{
IN PDISKENTRY DiskEntry,
IN PPARTENTRY PartEntry)
{
+ PPARTLIST List = ListUi->List;
CHAR LineBuffer[128];
COORD coPos;
ULONG Written;
CHAR LineBuffer[128];
COORD coPos;
ULONG Written;
PCHAR Unit;
UCHAR Attribute;
CHAR PartTypeString[32];
PCHAR Unit;
UCHAR Attribute;
CHAR PartTypeString[32];
- PCHAR PartType;
- PartType = PartTypeString;
+ PCHAR PartType = PartTypeString;
- Width = List->Right - List->Left - 1;
- Height = List->Bottom - List->Top - 2;
+ Width = ListUi->Right - ListUi->Left - 1;
+ Height = ListUi->Bottom - ListUi->Top - 2;
- coPos.X = List->Left + 1;
- coPos.Y = List->Top + 1 + List->Line;
+ coPos.X = ListUi->Left + 1;
+ coPos.Y = ListUi->Top + 1 + ListUi->Line;
if (PartEntry->IsPartitioned == FALSE)
{
if (PartEntry->IsPartitioned == FALSE)
{
FOREGROUND_BLUE | BACKGROUND_WHITE :
FOREGROUND_WHITE | BACKGROUND_BLUE;
FOREGROUND_BLUE | BACKGROUND_WHITE :
FOREGROUND_WHITE | BACKGROUND_BLUE;
- if (List->Line >= 0 && List->Line <= Height)
+ if (ListUi->Line >= 0 && ListUi->Line <= Height)
{
FillConsoleOutputCharacterA(StdOutput,
' ',
{
FillConsoleOutputCharacterA(StdOutput,
' ',
}
coPos.X += 4;
Width -= 8;
}
coPos.X += 4;
Width -= 8;
- if (List->Line >= 0 && List->Line <= Height)
+ if (ListUi->Line >= 0 && ListUi->Line <= Height)
{
FillConsoleOutputAttribute(StdOutput,
Attribute,
{
FillConsoleOutputAttribute(StdOutput,
Attribute,
- if (List->Line >= 0 && List->Line <= Height)
+ if (ListUi->Line >= 0 && ListUi->Line <= Height)
{
WriteConsoleOutputCharacterA(StdOutput,
LineBuffer,
{
WriteConsoleOutputCharacterA(StdOutput,
LineBuffer,
}
static
VOID
PrintDiskData(
}
static
VOID
PrintDiskData(
+ IN PPARTLIST_UI ListUi,
IN PDISKENTRY DiskEntry)
{
IN PDISKENTRY DiskEntry)
{
+ // PPARTLIST List = ListUi->List;
PPARTENTRY PrimaryPartEntry, LogicalPartEntry;
PLIST_ENTRY PrimaryEntry, LogicalEntry;
CHAR LineBuffer[128];
PPARTENTRY PrimaryPartEntry, LogicalPartEntry;
PLIST_ENTRY PrimaryEntry, LogicalEntry;
CHAR LineBuffer[128];
ULARGE_INTEGER DiskSize;
PCHAR Unit;
ULARGE_INTEGER DiskSize;
PCHAR Unit;
- Width = List->Right - List->Left - 1;
- Height = List->Bottom - List->Top - 2;
+ Width = ListUi->Right - ListUi->Left - 1;
+ Height = ListUi->Bottom - ListUi->Top - 2;
- coPos.X = List->Left + 1;
- coPos.Y = List->Top + 1 + List->Line;
+ coPos.X = ListUi->Left + 1;
+ coPos.Y = ListUi->Top + 1 + ListUi->Line;
DiskSize.QuadPart = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
if (DiskSize.QuadPart >= 10737418240) /* 10 GB */
DiskSize.QuadPart = DiskEntry->SectorCount.QuadPart * DiskEntry->BytesPerSector;
if (DiskSize.QuadPart >= 10737418240) /* 10 GB */
- if (List->Line >= 0 && List->Line <= Height)
+ if (ListUi->Line >= 0 && ListUi->Line <= Height)
{
FillConsoleOutputAttribute(StdOutput,
FOREGROUND_WHITE | BACKGROUND_BLUE,
{
FillConsoleOutputAttribute(StdOutput,
FOREGROUND_WHITE | BACKGROUND_BLUE,
- if (List->Line >= 0 && List->Line <= Height)
+ if (ListUi->Line >= 0 && ListUi->Line <= Height)
{
WriteConsoleOutputCharacterA(StdOutput,
LineBuffer,
{
WriteConsoleOutputCharacterA(StdOutput,
LineBuffer,
/* Print separator line */
/* Print separator line */
+ PrintEmptyLine(ListUi);
/* Print partition lines */
PrimaryEntry = DiskEntry->PrimaryPartListHead.Flink;
/* Print partition lines */
PrimaryEntry = DiskEntry->PrimaryPartListHead.Flink;
{
PrimaryPartEntry = CONTAINING_RECORD(PrimaryEntry, PARTENTRY, ListEntry);
{
PrimaryPartEntry = CONTAINING_RECORD(PrimaryEntry, PARTENTRY, ListEntry);
- PrintPartitionData(List,
+ PrintPartitionData(ListUi,
DiskEntry,
PrimaryPartEntry);
DiskEntry,
PrimaryPartEntry);
{
LogicalPartEntry = CONTAINING_RECORD(LogicalEntry, PARTENTRY, ListEntry);
{
LogicalPartEntry = CONTAINING_RECORD(LogicalEntry, PARTENTRY, ListEntry);
- PrintPartitionData(List,
+ PrintPartitionData(ListUi,
DiskEntry,
LogicalPartEntry);
DiskEntry,
LogicalPartEntry);
}
/* Print separator line */
}
/* Print separator line */
+ PrintEmptyLine(ListUi);
}
VOID
DrawPartitionList(
}
VOID
DrawPartitionList(
+ IN PPARTLIST_UI ListUi)
+ PPARTLIST List = ListUi->List;
PLIST_ENTRY Entry, Entry2;
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry = NULL;
PLIST_ENTRY Entry, Entry2;
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry = NULL;
}
/* If it possible, make the disk name visible */
}
/* If it possible, make the disk name visible */
- if (CurrentPartLine < List->Offset)
+ if (CurrentPartLine < ListUi->Offset)
- List->Offset = CurrentPartLine;
+ ListUi->Offset = CurrentPartLine;
- else if (CurrentPartLine - List->Offset > List->Bottom - List->Top - 2)
+ else if (CurrentPartLine - ListUi->Offset > ListUi->Bottom - ListUi->Top - 2)
- List->Offset = CurrentPartLine - (List->Bottom - List->Top - 2);
+ ListUi->Offset = CurrentPartLine - (ListUi->Bottom - ListUi->Top - 2);
- if (CurrentDiskLine < List->Offset && CurrentPartLine - CurrentDiskLine < List->Bottom - List->Top - 2)
+ if (CurrentDiskLine < ListUi->Offset && CurrentPartLine - CurrentDiskLine < ListUi->Bottom - ListUi->Top - 2)
- List->Offset = CurrentDiskLine;
+ ListUi->Offset = CurrentDiskLine;
- /* draw upper left corner */
- coPos.X = List->Left;
- coPos.Y = List->Top;
+ /* Draw upper left corner */
+ coPos.X = ListUi->Left;
+ coPos.Y = ListUi->Top;
FillConsoleOutputCharacterA(StdOutput,
0xDA, // '+',
1,
coPos,
&Written);
FillConsoleOutputCharacterA(StdOutput,
0xDA, // '+',
1,
coPos,
&Written);
- /* draw upper edge */
- coPos.X = List->Left + 1;
- coPos.Y = List->Top;
- if (List->Offset == 0)
+ /* Draw upper edge */
+ coPos.X = ListUi->Left + 1;
+ coPos.Y = ListUi->Top;
+ if (ListUi->Offset == 0)
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
- List->Right - List->Left - 1,
+ ListUi->Right - ListUi->Left - 1,
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
- List->Right - List->Left - 5,
+ ListUi->Right - ListUi->Left - 5,
- coPos.X = List->Right - 5;
+ coPos.X = ListUi->Right - 5;
WriteConsoleOutputCharacterA(StdOutput,
"(\x18)", // "(up)"
3,
coPos,
&Written);
WriteConsoleOutputCharacterA(StdOutput,
"(\x18)", // "(up)"
3,
coPos,
&Written);
- coPos.X = List->Right - 2;
+ coPos.X = ListUi->Right - 2;
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
2,
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
2,
- /* draw upper right corner */
- coPos.X = List->Right;
- coPos.Y = List->Top;
+ /* Draw upper right corner */
+ coPos.X = ListUi->Right;
+ coPos.Y = ListUi->Top;
FillConsoleOutputCharacterA(StdOutput,
0xBF, // '+',
1,
coPos,
&Written);
FillConsoleOutputCharacterA(StdOutput,
0xBF, // '+',
1,
coPos,
&Written);
- /* draw left and right edge */
- for (i = List->Top + 1; i < List->Bottom; i++)
+ /* Draw left and right edge */
+ for (i = ListUi->Top + 1; i < ListUi->Bottom; i++)
+ coPos.X = ListUi->Left;
coPos.Y = i;
FillConsoleOutputCharacterA(StdOutput,
0xB3, // '|',
coPos.Y = i;
FillConsoleOutputCharacterA(StdOutput,
0xB3, // '|',
+ coPos.X = ListUi->Right;
FillConsoleOutputCharacterA(StdOutput,
0xB3, //'|',
1,
FillConsoleOutputCharacterA(StdOutput,
0xB3, //'|',
1,
- /* draw lower left corner */
- coPos.X = List->Left;
- coPos.Y = List->Bottom;
+ /* Draw lower left corner */
+ coPos.X = ListUi->Left;
+ coPos.Y = ListUi->Bottom;
FillConsoleOutputCharacterA(StdOutput,
0xC0, // '+',
1,
coPos,
&Written);
FillConsoleOutputCharacterA(StdOutput,
0xC0, // '+',
1,
coPos,
&Written);
- /* draw lower edge */
- coPos.X = List->Left + 1;
- coPos.Y = List->Bottom;
- if (LastLine - List->Offset <= List->Bottom - List->Top - 2)
+ /* Draw lower edge */
+ coPos.X = ListUi->Left + 1;
+ coPos.Y = ListUi->Bottom;
+ if (LastLine - ListUi->Offset <= ListUi->Bottom - ListUi->Top - 2)
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
- List->Right - List->Left - 1,
+ ListUi->Right - ListUi->Left - 1,
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
{
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
- List->Right - List->Left - 5,
+ ListUi->Right - ListUi->Left - 5,
- coPos.X = List->Right - 5;
+ coPos.X = ListUi->Right - 5;
WriteConsoleOutputCharacterA(StdOutput,
"(\x19)", // "(down)"
3,
coPos,
&Written);
WriteConsoleOutputCharacterA(StdOutput,
"(\x19)", // "(down)"
3,
coPos,
&Written);
- coPos.X = List->Right - 2;
+ coPos.X = ListUi->Right - 2;
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
2,
FillConsoleOutputCharacterA(StdOutput,
0xC4, // '-',
2,
- /* draw lower right corner */
- coPos.X = List->Right;
- coPos.Y = List->Bottom;
+ /* Draw lower right corner */
+ coPos.X = ListUi->Right;
+ coPos.Y = ListUi->Bottom;
FillConsoleOutputCharacterA(StdOutput,
0xD9, // '+',
1,
FillConsoleOutputCharacterA(StdOutput,
0xD9, // '+',
1,
&Written);
/* print list entries */
&Written);
/* print list entries */
- List->Line = - List->Offset;
+ ListUi->Line = - ListUi->Offset;
Entry = List->DiskListHead.Flink;
while (Entry != &List->DiskListHead)
Entry = List->DiskListHead.Flink;
while (Entry != &List->DiskListHead)
DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
/* Print disk entry */
DiskEntry = CONTAINING_RECORD(Entry, DISKENTRY, ListEntry);
/* Print disk entry */
- PrintDiskData(List,
- DiskEntry);
+ PrintDiskData(ListUi, DiskEntry);
{
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
{
PDISKENTRY DiskEntry;
PPARTENTRY PartEntry;
- PLIST_ENTRY Entry1;
- PLIST_ENTRY Entry2;
+ PLIST_ENTRY Entry1, Entry2;
/* Check for empty disks */
if (IsListEmpty(&List->DiskListHead))
/* Check for empty disks */
if (IsListEmpty(&List->DiskListHead))
if (PartEntry->PartitionNumber == PartitionNumber)
{
if (PartEntry->PartitionNumber == PartitionNumber)
{
- List->CurrentDisk = DiskEntry;
- List->CurrentPartition = PartEntry;
- DrawPartitionList(List);
- return TRUE;
+ List->CurrentDisk = DiskEntry;
+ List->CurrentPartition = PartEntry;
+ return TRUE;
}
Entry2 = Entry2->Flink;
}
Entry2 = Entry2->Flink;
-BOOL
-ScrollDownPartitionList(
+PPARTENTRY
+GetNextPartition(
IN PPARTLIST List)
{
PLIST_ENTRY DiskListEntry;
IN PPARTLIST List)
{
PLIST_ENTRY DiskListEntry;
/* Fail, if no disks are available */
if (IsListEmpty(&List->DiskListHead))
/* Fail, if no disks are available */
if (IsListEmpty(&List->DiskListHead))
/* Check for next usable entry on current disk */
if (List->CurrentPartition != NULL)
/* Check for next usable entry on current disk */
if (List->CurrentPartition != NULL)
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
PartEntry = CONTAINING_RECORD(PartListEntry, PARTENTRY, ListEntry);
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
List->CurrentDisk = DiskEntry;
List->CurrentPartition = PartEntry;
List->CurrentDisk = DiskEntry;
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
}
DiskListEntry = DiskListEntry->Flink;
}
}
DiskListEntry = DiskListEntry->Flink;
}
-
-BOOL
-ScrollUpPartitionList(
+PPARTENTRY
+GetPrevPartition(
IN PPARTLIST List)
{
PLIST_ENTRY DiskListEntry;
IN PPARTLIST List)
{
PLIST_ENTRY DiskListEntry;
/* Fail, if no disks are available */
if (IsListEmpty(&List->DiskListHead))
/* Fail, if no disks are available */
if (IsListEmpty(&List->DiskListHead))
/* Check for previous usable entry on current disk */
if (List->CurrentPartition != NULL)
/* Check for previous usable entry on current disk */
if (List->CurrentPartition != NULL)
- /* Extended partition*/
+ /* Extended partition */
PartEntry = List->CurrentDisk->ExtendedPartition;
}
List->CurrentPartition = PartEntry;
PartEntry = List->CurrentDisk->ExtendedPartition;
}
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
}
List->CurrentPartition = PartEntry;
}
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
List->CurrentDisk = DiskEntry;
List->CurrentPartition = PartEntry;
List->CurrentDisk = DiskEntry;
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
}
}
else
{
List->CurrentDisk = DiskEntry;
List->CurrentPartition = PartEntry;
}
}
else
{
List->CurrentDisk = DiskEntry;
List->CurrentPartition = PartEntry;
+ return List->CurrentPartition;
}
}
DiskListEntry = DiskListEntry->Blink;
}
}
}
DiskListEntry = DiskListEntry->Blink;
}
+ return NULL;
+}
+
+
+
+VOID
+ScrollDownPartitionList(
+ IN PPARTLIST_UI ListUi)
+{
+ if (GetNextPartition(ListUi->List))
+ DrawPartitionList(ListUi);
+}
+
+VOID
+ScrollUpPartitionList(
+ IN PPARTLIST_UI ListUi)
+{
+ if (GetPrevPartition(ListUi->List))
+ DrawPartitionList(ListUi);
typedef struct _PARTLIST
{
typedef struct _PARTLIST
{
- /* UI stuff */
- SHORT Left;
- SHORT Top;
- SHORT Right;
- SHORT Bottom;
-
- SHORT Line;
- SHORT Offset;
-
+ * Disk & Partition iterators.
+ *
* NOTE that when CurrentPartition != NULL, then CurrentPartition->DiskEntry
* must be the same as CurrentDisk. We should however keep the two members
* separated as we can have a current (selected) disk without any current
* NOTE that when CurrentPartition != NULL, then CurrentPartition->DiskEntry
* must be the same as CurrentDisk. We should however keep the two members
* separated as we can have a current (selected) disk without any current
IN ULONG cchPartType);
PPARTLIST
IN ULONG cchPartType);
PPARTLIST
-CreatePartitionList(
- SHORT Left,
- SHORT Top,
- SHORT Right,
- SHORT Bottom);
+CreatePartitionList(VOID);
VOID
DestroyPartitionList(
IN PPARTLIST List);
VOID
DestroyPartitionList(
IN PPARTLIST List);
-VOID
-DrawPartitionList(
- IN PPARTLIST List);
-
ULONG
SelectPartition(
IN PPARTLIST List,
IN ULONG DiskNumber,
IN ULONG PartitionNumber);
ULONG
SelectPartition(
IN PPARTLIST List,
IN ULONG DiskNumber,
IN ULONG PartitionNumber);
-BOOL
-ScrollDownPartitionList(
+PPARTENTRY
+GetNextPartition(
-BOOL
-ScrollUpPartitionList(
+PPARTENTRY
+GetPrevPartition(
OUT PDISKENTRY *pDiskEntry OPTIONAL,
OUT PPARTENTRY *pPartEntry);
OUT PDISKENTRY *pDiskEntry OPTIONAL,
OUT PPARTENTRY *pPartEntry);
+
+
+
+
+typedef struct _PARTLIST_UI
+{
+ PPARTLIST List;
+
+ // PLIST_ENTRY FirstShown;
+ // PLIST_ENTRY LastShown;
+
+ SHORT Left;
+ SHORT Top;
+ SHORT Right;
+ SHORT Bottom;
+
+ SHORT Line;
+ SHORT Offset;
+
+ // BOOL Redraw;
+} PARTLIST_UI, *PPARTLIST_UI;
+
+VOID
+InitPartitionListUi(
+ IN OUT PPARTLIST_UI ListUi,
+ IN PPARTLIST List,
+ IN SHORT Left,
+ IN SHORT Top,
+ IN SHORT Right,
+ IN SHORT Bottom);
+
+VOID
+ScrollDownPartitionList(
+ IN PPARTLIST_UI ListUi);
+
+VOID
+ScrollUpPartitionList(
+ IN PPARTLIST_UI ListUi);
+
+VOID
+DrawPartitionList(
+ IN PPARTLIST_UI ListUi);
+
static PAGE_NUMBER
SetupStartPage(PINPUT_RECORD Ir)
{
static PAGE_NUMBER
SetupStartPage(PINPUT_RECORD Ir)
{
- //SYSTEM_DEVICE_INFORMATION Sdi;
NTSTATUS Status;
WCHAR FileNameBuffer[MAX_PATH];
INFCONTEXT Context;
PWCHAR Value;
UINT ErrorLine;
NTSTATUS Status;
WCHAR FileNameBuffer[MAX_PATH];
INFCONTEXT Context;
PWCHAR Value;
UINT ErrorLine;
PGENERIC_LIST_ENTRY ListEntry;
INT IntValue;
CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));
PGENERIC_LIST_ENTRY ListEntry;
INT IntValue;
CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));
-#if 0
- /* Check whether a harddisk is available */
- Status = NtQuerySystemInformation(SystemDeviceInformation,
- &Sdi,
- sizeof(SYSTEM_DEVICE_INFORMATION),
- &ReturnSize);
-
- if (!NT_SUCCESS(Status))
- {
- CONSOLE_PrintTextXY(6, 15, "NtQuerySystemInformation() failed (Status 0x%08lx)", Status);
- MUIDisplayError(ERROR_DRIVE_INFORMATION, Ir, POPUP_WAIT_ENTER);
- return QUIT_PAGE;
- }
-
- if (Sdi.NumberOfDisks == 0)
- {
- MUIDisplayError(ERROR_NO_HDD, Ir, POPUP_WAIT_ENTER);
- return QUIT_PAGE;
- }
-#endif
-
/* Get the source path and source root path */
Status = GetSourcePaths(&SourcePath,
&SourceRootPath,
/* Get the source path and source root path */
Status = GetSourcePaths(&SourcePath,
&SourceRootPath,
RequiredPartitionDiskSpace = (ULONG)IntValue;
RequiredPartitionDiskSpace = (ULONG)IntValue;
+ /* Start the PnP thread */
if (hPnpThread != INVALID_HANDLE_VALUE)
{
NtResumeThread(hPnpThread, NULL);
if (hPnpThread != INVALID_HANDLE_VALUE)
{
NtResumeThread(hPnpThread, NULL);
- //TODO
- //read options from inf
+ // TODO: Read options from inf
ComputerList = CreateComputerTypeList(SetupInf);
DisplayList = CreateDisplayDriverList(SetupInf);
KeyboardList = CreateKeyboardDriverList(SetupInf);
ComputerList = CreateComputerTypeList(SetupInf);
DisplayList = CreateDisplayDriverList(SetupInf);
KeyboardList = CreateKeyboardDriverList(SetupInf);
{
return REPAIR_INTRO_PAGE;
}
{
return REPAIR_INTRO_PAGE;
}
- else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* R */
+ else if (toupper(Ir->Event.KeyEvent.uChar.AsciiChar) == 'L') /* L */
static PAGE_NUMBER
SelectPartitionPage(PINPUT_RECORD Ir)
{
static PAGE_NUMBER
SelectPartitionPage(PINPUT_RECORD Ir)
{
ULONG Error;
MUIDisplayPage(SELECT_PARTITION_PAGE);
if (PartitionList == NULL)
{
ULONG Error;
MUIDisplayPage(SELECT_PARTITION_PAGE);
if (PartitionList == NULL)
{
- PartitionList = CreatePartitionList(2,
- 23,
- xScreen - 3,
- yScreen - 3);
+ PartitionList = CreatePartitionList();
if (PartitionList == NULL)
{
/* FIXME: show an error dialog */
if (PartitionList == NULL)
{
/* FIXME: show an error dialog */
+ MUIDisplayError(ERROR_DRIVE_INFORMATION, Ir, POPUP_WAIT_ENTER);
return QUIT_PAGE;
}
else if (IsListEmpty(&PartitionList->DiskListHead))
return QUIT_PAGE;
}
else if (IsListEmpty(&PartitionList->DiskListHead))
- DrawPartitionList(PartitionList);
+ InitPartitionListUi(&ListUi, PartitionList,
+ 2,
+ 23,
+ xScreen - 3,
+ yScreen - 3);
+ DrawPartitionList(&ListUi);
+// FIXME?? Aren't we going to enter an infinite loop, if this test fails??
if (!IsDiskSizeValid(PartitionList->CurrentPartition))
{
MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
if (!IsDiskSizeValid(PartitionList->CurrentPartition))
{
MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
+ DrawPartitionList(&ListUi);
+
+// FIXME?? Aren't we going to enter an infinite loop, if this test fails??
if (!IsDiskSizeValid(PartitionList->CurrentPartition))
{
MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
if (!IsDiskSizeValid(PartitionList->CurrentPartition))
{
MUIDisplayError(ERROR_INSUFFICIENT_PARTITION_SIZE, Ir, POPUP_WAIT_ANY_KEY,
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */
{
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */
{
- if (ScrollDownPartitionList(PartitionList))
- DrawPartitionList(PartitionList);
+ ScrollDownPartitionList(&ListUi);
}
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */
{
}
else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */
{
- if (ScrollUpPartitionList(PartitionList))
- DrawPartitionList(PartitionList);
+ ScrollUpPartitionList(&ListUi);
}
else if (Ir->Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */
{
}
else if (Ir->Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */
{