mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
Remove format from rosapps, we already it in reactos/base/....
svn path=/trunk/; revision=23345
This commit is contained in:
parent
ae5ead0153
commit
3524699490
2 changed files with 0 additions and 655 deletions
|
@ -1,648 +0,0 @@
|
|||
//======================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// Formatx
|
||||
//
|
||||
// Copyright (c) 1998 Mark Russinovich
|
||||
// Systems Internals
|
||||
// http://www.sysinternals.com/
|
||||
//
|
||||
// This software is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Library General Public License as
|
||||
// published by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This software is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Library General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Library General Public
|
||||
// License along with this software; see the file COPYING.LIB. If
|
||||
// not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
// Cambridge, MA 02139, USA.
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
// Format clone that demonstrates the use of the FMIFS file system
|
||||
// utility library.
|
||||
//
|
||||
// 1999 February (Emanuele Aliberti)
|
||||
// Adapted for ReactOS and lcc-win32.
|
||||
//
|
||||
// 1999 April (Emanuele Aliberti)
|
||||
// Adapted for ReactOS and egcs.
|
||||
//
|
||||
//======================================================================
|
||||
#define UNICODE 1
|
||||
#define _UNICODE 1
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include "../../reactos/include/fmifs.h"
|
||||
//#include <tchar.h>
|
||||
#include "win32err.h"
|
||||
#include "config.h"
|
||||
|
||||
#define WBUFSIZE(b) (sizeof(b) / sizeof (wchar_t))
|
||||
|
||||
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
BOOL Error = FALSE;
|
||||
|
||||
// switches
|
||||
BOOL QuickFormat = FALSE;
|
||||
DWORD ClusterSize = 0;
|
||||
BOOL CompressDrive = FALSE;
|
||||
BOOL GotALabel = FALSE;
|
||||
PWCHAR Label = L"";
|
||||
PWCHAR Drive = NULL;
|
||||
PWCHAR Format = L"FAT";
|
||||
|
||||
WCHAR RootDirectory [MAX_PATH];
|
||||
WCHAR LabelString [12];
|
||||
|
||||
#ifndef FMIFS_IMPORT_DLL
|
||||
//
|
||||
// Functions in FMIFS.DLL
|
||||
//
|
||||
PFORMATEX FormatEx;
|
||||
PENABLEVOLUMECOMPRESSION EnableVolumeCompression;
|
||||
#endif /* ndef FMIFS_IMPORT_DLL */
|
||||
|
||||
//
|
||||
// Size array
|
||||
//
|
||||
typedef
|
||||
struct
|
||||
{
|
||||
WCHAR SizeString [16];
|
||||
DWORD ClusterSize;
|
||||
|
||||
} SIZEDEFINITION, *PSIZEDEFINITION;
|
||||
|
||||
|
||||
SIZEDEFINITION
|
||||
LegalSizes [] =
|
||||
{
|
||||
{ L"512", 512 },
|
||||
{ L"1024", 1024 },
|
||||
{ L"2048", 2048 },
|
||||
{ L"4096", 4096 },
|
||||
{ L"8192", 8192 },
|
||||
{ L"16K", 16384 },
|
||||
{ L"32K", 32768 },
|
||||
{ L"64K", 65536 },
|
||||
{ L"128K", 65536 * 2 },
|
||||
{ L"256K", 65536 * 4 },
|
||||
{ L"", 0 },
|
||||
};
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// Usage
|
||||
//
|
||||
// Tell the user how to use the program
|
||||
//
|
||||
// 1990218 EA ProgramName missing in wprintf arg list
|
||||
//
|
||||
//----------------------------------------------------------------------
|
||||
VOID
|
||||
Usage( PWCHAR ProgramName )
|
||||
{
|
||||
wprintf(
|
||||
L"\
|
||||
Usage: %s drive: [-FS:file-system] [-V:label] [-Q] [-A:size] [-C]\n\n\
|
||||
[drive:] Specifies the drive to format.\n\
|
||||
-FS:file-system Specifies the type of file system (e.g. FAT).\n\
|
||||
-V:label Specifies volume label.\n\
|
||||
-Q Performs a quick format.\n\
|
||||
-A:size Overrides the default allocation unit size. Default settings\n\
|
||||
are strongly recommended for general use\n\
|
||||
NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
|
||||
FAT supports 8192, 16K, 32K, 64K, 128K, 256K.\n\
|
||||
NTFS compression is not supported for allocation unit sizes\n\
|
||||
above 4096.\n\
|
||||
-C Files created on the new volume will be compressed by\n\
|
||||
default.\n\n",
|
||||
ProgramName
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// ParseCommandLine
|
||||
//
|
||||
// Get the switches.
|
||||
//
|
||||
// 19990218 EA switch characters '-' and '/' are wide
|
||||
//
|
||||
//----------------------------------------------------------------------
|
||||
int
|
||||
ParseCommandLine(
|
||||
int argc,
|
||||
WCHAR *argv []
|
||||
)
|
||||
{
|
||||
int i,
|
||||
j;
|
||||
BOOLEAN gotFormat = FALSE;
|
||||
BOOLEAN gotQuick = FALSE;
|
||||
BOOLEAN gotSize = FALSE;
|
||||
BOOLEAN gotLabel = FALSE;
|
||||
BOOLEAN gotCompressed = FALSE;
|
||||
|
||||
|
||||
for (
|
||||
i = 1;
|
||||
(i < argc);
|
||||
i++
|
||||
) {
|
||||
switch ( argv[i][0] )
|
||||
{
|
||||
|
||||
case L'-':
|
||||
case L'/':
|
||||
|
||||
if( !wcsnicmp( & argv[i][1], L"FS:", 3 ))
|
||||
{
|
||||
if( gotFormat) return -1;
|
||||
Format = & argv[i][4];
|
||||
gotFormat = TRUE;
|
||||
}
|
||||
else if( !wcsnicmp( & argv[i][1], L"A:", 2 ))
|
||||
{
|
||||
if ( gotSize ) return -1;
|
||||
j = 0;
|
||||
while ( LegalSizes[j].ClusterSize &&
|
||||
wcsicmp(
|
||||
LegalSizes[j].SizeString,
|
||||
& argv[i][3]
|
||||
)
|
||||
) {
|
||||
j++;
|
||||
}
|
||||
if( !LegalSizes[j].ClusterSize ) return i;
|
||||
ClusterSize = LegalSizes[j].ClusterSize;
|
||||
gotSize = TRUE;
|
||||
}
|
||||
else if( !wcsnicmp( & argv[i][1], L"V:", 2 ))
|
||||
{
|
||||
if( gotLabel ) return -1;
|
||||
Label = & argv[i][3];
|
||||
gotLabel = TRUE;
|
||||
GotALabel = TRUE;
|
||||
}
|
||||
else if ( !wcsicmp( & argv[i][1], L"Q" ))
|
||||
{
|
||||
if( gotQuick ) return -1;
|
||||
QuickFormat = TRUE;
|
||||
gotQuick = TRUE;
|
||||
}
|
||||
else if ( !wcsicmp( & argv[i][1], L"C" ))
|
||||
{
|
||||
if( gotCompressed ) return -1;
|
||||
CompressDrive = TRUE;
|
||||
gotCompressed = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return i;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
if ( Drive ) return i;
|
||||
if ( argv[i][1] != L':' ) return i;
|
||||
|
||||
Drive = argv[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// FormatExCallback
|
||||
//
|
||||
// The file system library will call us back with commands that we
|
||||
// can interpret. If we wanted to halt the chkdsk we could return FALSE.
|
||||
//
|
||||
//----------------------------------------------------------------------
|
||||
BOOLEAN
|
||||
__stdcall
|
||||
FormatExCallback(
|
||||
CALLBACKCOMMAND Command,
|
||||
DWORD Modifier,
|
||||
PVOID Argument
|
||||
)
|
||||
{
|
||||
PDWORD percent;
|
||||
PTEXTOUTPUT output;
|
||||
PBOOLEAN status;
|
||||
//static createStructures = FALSE;
|
||||
|
||||
//
|
||||
// We get other types of commands, but we don't have to pay attention to them
|
||||
//
|
||||
switch ( Command )
|
||||
{
|
||||
case PROGRESS:
|
||||
percent = (PDWORD) Argument;
|
||||
wprintf(L"%d percent completed.\r", *percent);
|
||||
break;
|
||||
|
||||
case OUTPUT:
|
||||
output = (PTEXTOUTPUT) Argument;
|
||||
fprintf(stdout, "%s", output->Output);
|
||||
break;
|
||||
|
||||
case DONE:
|
||||
status = (PBOOLEAN) Argument;
|
||||
if ( *status == FALSE )
|
||||
{
|
||||
wprintf(L"FormatEx was unable to complete successfully.\n\n");
|
||||
Error = TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
#ifndef FMIFS_IMPORT_DLL
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// LoadFMIFSEntryPoints
|
||||
//
|
||||
// Loads FMIFS.DLL and locates the entry point(s) we are going to use
|
||||
//
|
||||
// 19990216 EA ANSI strings in LoadFMIFSEntryPoints should be
|
||||
// wide strings
|
||||
//
|
||||
//----------------------------------------------------------------------
|
||||
BOOLEAN
|
||||
LoadFMIFSEntryPoints(VOID)
|
||||
{
|
||||
LoadLibraryW( L"fmifs.dll" );
|
||||
|
||||
if ( !(FormatEx =
|
||||
(void *) GetProcAddress(
|
||||
GetModuleHandleW( L"fmifs.dll"),
|
||||
"FormatEx"
|
||||
)
|
||||
)
|
||||
) {
|
||||
return FALSE;
|
||||
}
|
||||
if ( !(EnableVolumeCompression =
|
||||
(void *) GetProcAddress(
|
||||
GetModuleHandleW( L"fmifs.dll"),
|
||||
"EnableVolumeCompression"
|
||||
)
|
||||
)
|
||||
) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* ndef FMIFS_IMPORT_DLL */
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// WMain
|
||||
//
|
||||
// Engine. Just get command line switches and fire off a format. This
|
||||
// could also be done in a GUI like Explorer does when you select a
|
||||
// drive and run a check on it.
|
||||
//
|
||||
// We do this in UNICODE because the chkdsk command expects PWCHAR
|
||||
// arguments.
|
||||
//
|
||||
//----------------------------------------------------------------------
|
||||
int
|
||||
wmain( int argc, WCHAR *argv[] )
|
||||
{
|
||||
int badArg;
|
||||
|
||||
DWORD media = 0;
|
||||
DWORD driveType;
|
||||
|
||||
WCHAR fileSystem [1024];
|
||||
WCHAR volumeName [1024];
|
||||
WCHAR input [1024];
|
||||
|
||||
DWORD serialNumber;
|
||||
DWORD flags,
|
||||
maxComponent;
|
||||
|
||||
ULARGE_INTEGER freeBytesAvailableToCaller,
|
||||
totalNumberOfBytes,
|
||||
totalNumberOfFreeBytes;
|
||||
|
||||
|
||||
wprintf( L"\
|
||||
\nFormatx v1.0 by Mark Russinovich\n\
|
||||
Systems Internals - http://www.sysinternals.com\n\
|
||||
ReactOs adaptation 1999 by Emanuele Aliberti\n\n"
|
||||
);
|
||||
|
||||
#ifndef FMIFS_IMPORT_DLL
|
||||
//
|
||||
// Get function pointers
|
||||
//
|
||||
if( !LoadFMIFSEntryPoints())
|
||||
{
|
||||
wprintf(L"Could not located FMIFS entry points.\n\n");
|
||||
return -1;
|
||||
}
|
||||
#endif /* ndef FMIFS_IMPORT_DLL */
|
||||
//
|
||||
// Parse command line
|
||||
//
|
||||
if( (badArg = ParseCommandLine( argc, argv )))
|
||||
{
|
||||
wprintf(
|
||||
L"Unknown argument: %s\n",
|
||||
argv[badArg]
|
||||
);
|
||||
Usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
//
|
||||
// Get the drive's format
|
||||
//
|
||||
if( !Drive )
|
||||
{
|
||||
wprintf(L"Required drive parameter is missing.\n\n");
|
||||
Usage( argv[0] );
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
wcscpy( RootDirectory, Drive );
|
||||
}
|
||||
RootDirectory[2] = L'\\';
|
||||
RootDirectory[3] = L'\0';
|
||||
//
|
||||
// See if the drive is removable or not
|
||||
//
|
||||
driveType = GetDriveTypeW( RootDirectory );
|
||||
if ( driveType != DRIVE_FIXED )
|
||||
{
|
||||
wprintf(
|
||||
L"Insert a new floppy in drive %C:\nand press Enter when ready...",
|
||||
RootDirectory[0]
|
||||
);
|
||||
fgetws(
|
||||
input,
|
||||
WBUFSIZE(input),
|
||||
stdin
|
||||
);
|
||||
media = FMIFS_FLOPPY;
|
||||
}
|
||||
//
|
||||
// Determine the drive's file system format
|
||||
//
|
||||
if ( !GetVolumeInformationW(
|
||||
RootDirectory,
|
||||
volumeName,
|
||||
WBUFSIZE(volumeName),
|
||||
& serialNumber,
|
||||
& maxComponent,
|
||||
& flags,
|
||||
fileSystem,
|
||||
WBUFSIZE(fileSystem) )
|
||||
) {
|
||||
PrintWin32Error(
|
||||
L"Could not query volume",
|
||||
GetLastError()
|
||||
);
|
||||
return -1;
|
||||
}
|
||||
if( !GetDiskFreeSpaceExW(
|
||||
RootDirectory,
|
||||
& freeBytesAvailableToCaller,
|
||||
& totalNumberOfBytes,
|
||||
& totalNumberOfFreeBytes )
|
||||
)
|
||||
{
|
||||
PrintWin32Error(
|
||||
L"Could not query volume size",
|
||||
GetLastError()
|
||||
);
|
||||
return -1;
|
||||
}
|
||||
wprintf(
|
||||
L"The type of the file system is %s.\n",
|
||||
fileSystem
|
||||
);
|
||||
//
|
||||
// Make sure they want to do this
|
||||
//
|
||||
if ( driveType == DRIVE_FIXED )
|
||||
{
|
||||
if ( volumeName[0] )
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
wprintf(
|
||||
L"Enter current volume label for drive %C: ",
|
||||
RootDirectory[0]
|
||||
);
|
||||
fgetws(
|
||||
input,
|
||||
WBUFSIZE(input),
|
||||
stdin
|
||||
);
|
||||
input[ wcslen( input ) - 1 ] = 0;
|
||||
|
||||
if ( !wcsicmp( input, volumeName ))
|
||||
{
|
||||
break;
|
||||
}
|
||||
wprintf(L"An incorrect volume label was entered for this drive.\n");
|
||||
}
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
wprintf(L"\nWARNING, ALL DATA ON NON_REMOVABLE DISK\n");
|
||||
wprintf(L"DRIVE %C: WILL BE LOST!\n", RootDirectory[0] );
|
||||
wprintf(L"Proceed with Format (Y/N)? " );
|
||||
fgetws(
|
||||
input,
|
||||
WBUFSIZE(input),
|
||||
stdin
|
||||
);
|
||||
if ( (input[0] == L'Y') || (input[0] == L'y') ) break;
|
||||
|
||||
if ( (input[0] == L'N') || (input[0] == L'n') )
|
||||
{
|
||||
wprintf(L"\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
media = FMIFS_HARDDISK;
|
||||
}
|
||||
//
|
||||
// Tell the user we're doing a long format if appropriate
|
||||
//
|
||||
if ( !QuickFormat )
|
||||
{
|
||||
if ( totalNumberOfBytes.QuadPart > 1024*1024*10 )
|
||||
{
|
||||
|
||||
wprintf(
|
||||
L"Verifying %dM\n",
|
||||
(DWORD) (totalNumberOfBytes.QuadPart/(1024*1024))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
wprintf(
|
||||
L"Verifying %.1fM\n",
|
||||
((float)(LONGLONG)totalNumberOfBytes.QuadPart)/(float)(1024.0*1024.0)
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( totalNumberOfBytes.QuadPart > 1024*1024*10 )
|
||||
{
|
||||
wprintf(
|
||||
L"QuickFormatting %dM\n",
|
||||
(DWORD) (totalNumberOfBytes.QuadPart / (1024 * 1024))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
wprintf(
|
||||
L"QuickFormatting %.2fM\n",
|
||||
((float)(LONGLONG)totalNumberOfBytes.QuadPart) / (float)(1024.0*1024.0)
|
||||
);
|
||||
}
|
||||
wprintf(L"Creating file system structures.\n");
|
||||
}
|
||||
//
|
||||
// Format away!
|
||||
//
|
||||
FormatEx(
|
||||
RootDirectory,
|
||||
media,
|
||||
Format,
|
||||
Label,
|
||||
QuickFormat,
|
||||
ClusterSize,
|
||||
FormatExCallback
|
||||
);
|
||||
if ( Error ) return -1;
|
||||
wprintf(L"Format complete.\n");
|
||||
//
|
||||
// Enable compression if desired
|
||||
//
|
||||
if ( CompressDrive )
|
||||
{
|
||||
if( !EnableVolumeCompression( RootDirectory, TRUE ))
|
||||
{
|
||||
wprintf(L"Volume does not support compression.\n");
|
||||
}
|
||||
}
|
||||
//
|
||||
// Get the label if we don't have it
|
||||
//
|
||||
if( !GotALabel )
|
||||
{
|
||||
wprintf(L"Volume Label (11 characters, Enter for none)? " );
|
||||
fgetws(
|
||||
input,
|
||||
WBUFSIZE(LabelString),
|
||||
stdin
|
||||
);
|
||||
|
||||
input[ wcslen(input) - 1 ] = 0;
|
||||
if( !SetVolumeLabelW( RootDirectory, input ))
|
||||
{
|
||||
PrintWin32Error(
|
||||
L"Could not label volume",
|
||||
GetLastError()
|
||||
);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if ( !GetVolumeInformationW(
|
||||
RootDirectory,
|
||||
volumeName,
|
||||
WBUFSIZE(volumeName),
|
||||
& serialNumber,
|
||||
& maxComponent,
|
||||
& flags,
|
||||
fileSystem,
|
||||
WBUFSIZE(fileSystem) )
|
||||
) {
|
||||
PrintWin32Error(
|
||||
L"Could not query volume",
|
||||
GetLastError()
|
||||
);
|
||||
return -1;
|
||||
}
|
||||
//
|
||||
// Print out some stuff including the formatted size
|
||||
//
|
||||
if ( !GetDiskFreeSpaceExW(
|
||||
RootDirectory,
|
||||
& freeBytesAvailableToCaller,
|
||||
& totalNumberOfBytes,
|
||||
& totalNumberOfFreeBytes )
|
||||
) {
|
||||
PrintWin32Error(
|
||||
L"Could not query volume size",
|
||||
GetLastError()
|
||||
);
|
||||
return -1;
|
||||
}
|
||||
wprintf(
|
||||
L"\n%I64d bytes total disk space.\n",
|
||||
totalNumberOfBytes.QuadPart
|
||||
);
|
||||
wprintf(
|
||||
L"%I64d bytes available on disk.\n",
|
||||
totalNumberOfFreeBytes.QuadPart
|
||||
);
|
||||
//
|
||||
// Get the drive's serial number
|
||||
//
|
||||
if ( !GetVolumeInformationW(
|
||||
RootDirectory,
|
||||
volumeName,
|
||||
WBUFSIZE(volumeName),
|
||||
& serialNumber,
|
||||
& maxComponent,
|
||||
& flags,
|
||||
fileSystem,
|
||||
WBUFSIZE(fileSystem) )
|
||||
) {
|
||||
PrintWin32Error(
|
||||
L"Could not query volume",
|
||||
GetLastError()
|
||||
);
|
||||
return -1;
|
||||
}
|
||||
wprintf(
|
||||
L"\nVolume Serial Number is %04X-%04X\n",
|
||||
serialNumber >> 16,
|
||||
serialNumber & 0xFFFF
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* EOF */
|
|
@ -1,7 +0,0 @@
|
|||
/* $Id$ */
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Disk Formatting Tool\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "format\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "format.exe\0"
|
||||
#define REACTOS_STR_ORIGINAL_COPYRIGHT "1998 Mark Russinovich\0"
|
||||
#include <reactos/version.rc>
|
Loading…
Reference in a new issue