reactos/base/setup/usetup/fmtchk.c

160 lines
3.9 KiB
C
Raw Normal View History

/*
* PROJECT: ReactOS text-mode setup
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Filesystem Format and ChkDsk support functions
* COPYRIGHT: Copyright 2003 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Copyright 2006 Hervé Poussineau <hpoussin@reactos.org>
* Copyright 2024 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
/* INCLUDES ******************************************************************/
#include "usetup.h"
#define NDEBUG
#include <debug.h>
static PPROGRESSBAR ProgressBar = NULL;
/* FORMAT FUNCTIONS **********************************************************/
static
BOOLEAN
NTAPI
FormatCallback(
_In_ CALLBACKCOMMAND Command,
_In_ ULONG Modifier,
_In_ PVOID Argument)
{
switch (Command)
{
case PROGRESS:
{
PULONG Percent = (PULONG)Argument;
DPRINT("%lu percent completed\n", *Percent);
ProgressSetStep(ProgressBar, *Percent);
break;
}
#if 0
case OUTPUT:
{
PTEXTOUTPUT output = (PTEXTOUTPUT)Argument;
DPRINT("%s\n", output->Output);
break;
}
#endif
case DONE:
{
#if 0
PBOOLEAN Success = (PBOOLEAN)Argument;
if (*Success == FALSE)
{
DPRINT("FormatEx was unable to complete successfully.\n\n");
}
#endif
DPRINT("Done\n");
break;
}
default:
DPRINT("Unknown callback %lu\n", (ULONG)Command);
break;
}
return TRUE;
}
VOID
StartFormat(
_Inout_ PFORMAT_VOLUME_INFO FmtInfo,
_In_ PFILE_SYSTEM_ITEM SelectedFileSystem)
{
ASSERT(SelectedFileSystem && SelectedFileSystem->FileSystem);
// TODO: Think about which values could be defaulted...
FmtInfo->FileSystemName = SelectedFileSystem->FileSystem;
FmtInfo->MediaFlag = FMIFS_HARDDISK;
FmtInfo->Label = NULL;
FmtInfo->QuickFormat = SelectedFileSystem->QuickFormat;
FmtInfo->ClusterSize = 0;
FmtInfo->Callback = FormatCallback;
ProgressBar = CreateProgressBar(6,
yScreen - 14,
xScreen - 7,
yScreen - 10,
10,
24,
TRUE,
MUIGetString(STRING_FORMATTINGPART));
ProgressSetStepCount(ProgressBar, 100);
}
VOID
EndFormat(
_In_ NTSTATUS Status)
{
DestroyProgressBar(ProgressBar);
ProgressBar = NULL;
DPRINT("FormatPartition() finished with status 0x%08lx\n", Status);
}
/* CHKDSK FUNCTIONS **********************************************************/
static
BOOLEAN
NTAPI
ChkdskCallback(
_In_ CALLBACKCOMMAND Command,
_In_ ULONG Modifier,
_In_ PVOID Argument)
{
switch (Command)
{
default:
DPRINT("Unknown callback %lu\n", (ULONG)Command);
break;
}
return TRUE;
}
VOID
StartCheck(
_Inout_ PCHECK_VOLUME_INFO ChkInfo)
{
// TODO: Think about which values could be defaulted...
ChkInfo->FixErrors = TRUE;
ChkInfo->Verbose = FALSE;
ChkInfo->CheckOnlyIfDirty = TRUE;
ChkInfo->ScanDrive = FALSE;
ChkInfo->Callback = ChkdskCallback;
ProgressBar = CreateProgressBar(6,
yScreen - 14,
xScreen - 7,
yScreen - 10,
10,
24,
TRUE,
MUIGetString(STRING_CHECKINGDISK));
ProgressSetStepCount(ProgressBar, 100);
}
VOID
EndCheck(
_In_ NTSTATUS Status)
{
DestroyProgressBar(ProgressBar);
ProgressBar = NULL;
DPRINT("ChkdskPartition() finished with status 0x%08lx\n", Status);
}
/* EOF */