My and W3seek patch to make format ansi and unicode independen
it is first step to make a rc files for format
Modified: trunk/reactos/subsys/system/format/format.c
Modified: trunk/reactos/subsys/system/format/makefile
_____
Modified: trunk/reactos/subsys/system/format/format.c
--- trunk/reactos/subsys/system/format/format.c 2005-05-08 20:20:14 UTC
(rev 15151)
+++ trunk/reactos/subsys/system/format/format.c 2005-05-08 21:50:39 UTC
(rev 15152)
@@ -2,10 +2,13 @@
// Systems Internals
//
http://www.sysinternals.com
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+#include <windows.h>
#define NTOS_MODE_USER
#include <ntos.h>
#include <fmifs.h>
+#include <tchar.h>
// Globals
BOOL Error = FALSE;
@@ -15,33 +18,33 @@
DWORD ClusterSize = 0;
BOOL CompressDrive = FALSE;
BOOL GotALabel = FALSE;
-PWCHAR Label = L"";
-PWCHAR Drive = NULL;
-PWCHAR Format = L"FAT";
+LPTSTR Label = _T("");
+LPTSTR Drive = NULL;
+LPTSTR Format = _T("FAT");
-WCHAR RootDirectory[MAX_PATH];
-WCHAR LabelString[12];
+TCHAR RootDirectory[MAX_PATH];
+TCHAR LabelString[12];
//
// Size array
//
typedef struct {
- WCHAR SizeString[16];
+ TCHAR 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 },
+ { _T("512"), 512 },
+ { _T("1024"), 1024 },
+ { _T("2048"), 2048 },
+ { _T("4096"), 4096 },
+ { _T("8192"), 8192 },
+ { _T("16K"), 16384 },
+ { _T("32K"), 32768 },
+ { _T("64K"), 65536 },
+ { _T("128K"), 65536 * 2 },
+ { _T("256K"), 65536 * 4 },
+ { _T(""), 0 },
};
@@ -52,15 +55,16 @@
// Takes the win32 error code and prints the text version.
//
//----------------------------------------------------------------------
-void PrintWin32Error( PWCHAR Message, DWORD ErrorCode )
+static VOID PrintWin32Error( LPTSTR Message, DWORD ErrorCode )
{
- LPWSTR lpMsgBuf;
+ LPTSTR lpMsgBuf;
- FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, ErrorCode,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT),
- (PWCHAR) &lpMsgBuf, 0, NULL );
- printf("%S: %S\n", Message, lpMsgBuf );
+ (LPTSTR)&lpMsgBuf, 0, NULL );
+
+ _tprintf(_T("%S: %S\n"), Message, lpMsgBuf );
LocalFree( lpMsgBuf );
}
@@ -72,22 +76,22 @@
// Tell the user how to use the program
//
//----------------------------------------------------------------------
-VOID Usage( PWCHAR ProgramName )
+static VOID Usage( LPTSTR ProgramName )
{
- printf("Usage: %S drive: [-FS:file-system] [-V:label] [-Q]
[-A:size] [-C]\n\n", ProgramName);
- printf(" [drive:] Specifies the drive to format.\n");
- printf(" -FS:file-system Specifies the type of file system
(e.g. FAT).\n");
- printf(" -V:label Specifies volume label.\n");
- printf(" -Q Performs a quick format.\n");
- printf(" -A:size Overrides the default allocation unit
size. Default settings\n");
- printf(" are strongly recommended for general
use\n");
- printf(" NTFS supports 512, 1024, 2048, 4096,
8192, 16K, 32K, 64K.\n");
- printf(" FAT supports 8192, 16K, 32K, 64K,
128K, 256K.\n");
- printf(" NTFS compression is not supported for
allocation unit sizes\n");
- printf(" above 4096.\n");
- printf(" -C Files created on the new volume will
be compressed by\n");
- printf(" default.\n");
- printf("\n");
+ _tprintf(_T("Usage: %S drive: [-FS:file-system] [-V:label] [-Q]
[-A:size] [-C]\n\n"), ProgramName);
+ _tprintf(_T(" [drive:] Specifies the drive to
format.\n"));
+ _tprintf(_T(" -FS:file-system Specifies the type of file
system (e.g. FAT).\n"));
+ _tprintf(_T(" -V:label Specifies volume label.\n"));
+ _tprintf(_T(" -Q Performs a quick format.\n"));
+ _tprintf(_T(" -A:size Overrides the default allocation
unit size. Default settings\n"));
+ _tprintf(_T(" are strongly recommended for
general use\n"));
+ _tprintf(_T(" NTFS supports 512, 1024, 2048,
4096, 8192, 16K, 32K, 64K.\n"));
+ _tprintf(_T(" FAT supports 8192, 16K, 32K,
64K, 128K, 256K.\n"));
+ _tprintf(_T(" NTFS compression is not
supported for allocation unit sizes\n"));
+ _tprintf(_T(" above 4096.\n"));
+ _tprintf(_T(" -C Files created on the new volume
will be compressed by\n"));
+ _tprintf(_T(" default.\n"));
+ _tprintf(_T("\n"));
}
@@ -98,7 +102,7 @@
// Get the switches.
//
//----------------------------------------------------------------------
-int ParseCommandLine( int argc, WCHAR *argv[] )
+static int ParseCommandLine( int argc, TCHAR *argv[] )
{
int i, j;
BOOLEAN gotFormat = FALSE;
@@ -115,38 +119,38 @@
case '-':
case '/':
- if( !wcsnicmp( &argv[i][1], L"FS:", 3 )) {
+ if( !_tcsnicmp( &argv[i][1], _T("FS:"), 3 )) {
if( gotFormat) return -1;
Format = &argv[i][4];
gotFormat = TRUE;
- } else if( !wcsnicmp( &argv[i][1], L"A:", 2 )) {
+ } else if( !_tcsnicmp( &argv[i][1], _T("A:"), 2
)) {
if( gotSize ) return -1;
j = 0;
while( LegalSizes[j].ClusterSize &&
- wcsicmp(
LegalSizes[j].SizeString, &argv[i][3] )) j++;
+ _tcsicmp(
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 )) {
+ } else if( ! _tcsnicmp( &argv[i][1], _T("V:"), 2
)) {
if( gotLabel ) return -1;
Label = &argv[i][3];
gotLabel = TRUE;
GotALabel = TRUE;
- } else if( !wcsicmp( &argv[i][1], L"Q" )) {
+ } else if( !_tcsicmp( &argv[i][1], _T("Q") )) {
if( gotQuick ) return -1;
QuickFormat = TRUE;
gotQuick = TRUE;
- } else if( !wcsicmp( &argv[i][1], L"C" )) {
+ } else if( !_tcsicmp( &argv[i][1], _T("C") )) {
if( gotCompressed ) return -1;
CompressDrive = TRUE;
@@ -158,7 +162,7 @@
default:
if( Drive ) return i;
- if( argv[i][1] != L':' ) return i;
+ if( argv[i][1] != _T(':') ) return i;
Drive = argv[i];
break;
@@ -191,7 +195,7 @@
case PROGRESS:
percent = (PDWORD) Argument;
- printf("%lu percent completed.\r", *percent);
+ _tprintf(_T("%lu percent completed.\r"), *percent);
break;
case OUTPUT:
@@ -203,7 +207,7 @@
status = (PBOOLEAN) Argument;
if( *status == FALSE ) {
- printf("FormatEx was unable to complete
successfully.\n\n");
+ _tprintf(_T("FormatEx was unable to complete
successfully.\n\n"));
Error = TRUE;
}
break;
@@ -220,7 +224,7 @@
case UNKNOWNC:
case UNKNOWND:
case STRUCTUREPROGRESS:
- printf("Operation Not Supported");
+ _tprintf(_T("Operation Not Supported"));
return FALSE;
}
return TRUE;
@@ -236,13 +240,13 @@
//----------------------------------------------------------------------
BOOLEAN LoadFMIFSEntryPoints()
{
- LoadLibrary( "fmifs.dll" );
- if( !(void*) GetProcAddress( GetModuleHandle( "fmifs.dll"),
"FormatEx" ) ) {
+ HMODULE hFmifs = LoadLibrary( _T("fmifs.dll") );
+ if( !(void*) GetProcAddress( hFmifs, "FormatEx" ) ) {
return FALSE;
}
- if( !((void *) GetProcAddress( GetModuleHandle( "fmifs.dll"),
+ if( !((void *) GetProcAddress( hFmifs,
"EnableVolumeCompression" )) ) {
return FALSE;
@@ -262,24 +266,28 @@
// arguments.
//
//----------------------------------------------------------------------
-int wmain( int argc, WCHAR *argv[] )
+int
+_tmain(int argc, TCHAR *argv[])
{
int badArg;
DWORD media = FMIFS_HARDDISK;
DWORD driveType;
- WCHAR fileSystem[1024];
- WCHAR volumeName[1024];
- WCHAR input[1024];
+ TCHAR fileSystem[1024];
+ TCHAR volumeName[1024];
+ TCHAR input[1024];
DWORD serialNumber;
DWORD flags, maxComponent;
ULARGE_INTEGER freeBytesAvailableToCaller, totalNumberOfBytes,
totalNumberOfFreeBytes;
+#ifndef UNICODE
+ WCHAR RootDirectoryW[MAX_PATH], FormatW[MAX_PATH],
LabelW[MAX_PATH];
+#endif
//
// Get function pointers
//
if( !LoadFMIFSEntryPoints()) {
- printf("Could not located FMIFS entry points.\n\n");
+ _tprintf(_T("Could not located FMIFS entry
points.\n\n"));
return -1;
}
@@ -288,7 +296,7 @@
//
if( (badArg = ParseCommandLine( argc, argv ))) {
- printf("Unknown argument: %S\n", argv[badArg] );
+ _tprintf(_T("Unknown argument: %S\n"), argv[badArg] );
Usage(argv[0]);
return -1;
@@ -299,31 +307,31 @@
//
if( !Drive ) {
- printf("Required drive parameter is missing.\n\n");
+ _tprintf(_T("Required drive parameter is
missing.\n\n"));
Usage( argv[0] );
return -1;
} else {
- wcscpy( RootDirectory, Drive );
+ _tcscpy( RootDirectory, Drive );
}
- RootDirectory[2] = L'\\';
- RootDirectory[3] = (WCHAR) 0;
+ RootDirectory[2] = _T('\\');
+ RootDirectory[3] = _T('\0');
//
// See if the drive is removable or not
//
- driveType = GetDriveTypeW( RootDirectory );
+ driveType = GetDriveType( RootDirectory );
if( driveType == 0 ) {
- PrintWin32Error( L"Could not get drive type",
GetLastError());
+ PrintWin32Error( _T("Could not get drive type"),
GetLastError());
return -1;
}
if( driveType != DRIVE_FIXED ) {
- printf("Insert a new floppy in drive %C:\nand press
Enter when ready...",
+ _tprintf(_T("Insert a new floppy in drive %C:\nand press
Enter when ready..."),
RootDirectory[0] );
- fgetws( input, sizeof(input)/2, stdin );
+ _fgetts( input, sizeof(input)/2, stdin );
media = FMIFS_FLOPPY;
}
@@ -331,24 +339,24 @@
//
// Determine the drive's file system format
//
- if( !GetVolumeInformationW( RootDirectory,
+ if( !GetVolumeInformation( RootDirectory,
volumeName,
sizeof(volumeName)/2,
&serialNumber,
&maxComponent, &flags,
fileSystem,
sizeof(fileSystem)/2)) {
- PrintWin32Error( L"Could not query volume",
GetLastError());
+ PrintWin32Error( _T("Could not query volume"),
GetLastError());
return -1;
}
- if( !GetDiskFreeSpaceExW( RootDirectory,
+ if( !GetDiskFreeSpaceEx( RootDirectory,
&freeBytesAvailableToCaller,
&totalNumberOfBytes,
&totalNumberOfFreeBytes )) {
- PrintWin32Error( L"Could not query volume size",
GetLastError());
+ PrintWin32Error( _T("Could not query volume size"),
GetLastError());
return -1;
}
- printf("The type of the file system is %S.\n", fileSystem );
+ _tprintf(_T("The type of the file system is %S.\n"), fileSystem
);
//
// Make sure they want to do this
@@ -359,30 +367,30 @@
while(1 ) {
- printf("Enter current volume label for
drive %C: ", RootDirectory[0] );
- fgetws( input, sizeof(input)/2, stdin );
- input[ wcslen( input ) - 1] = 0;
+ _tprintf(_T("Enter current volume label
for drive %C: "), RootDirectory[0] );
+ _fgetts( input, sizeof(input)/2, stdin
);
+ input[ _tcslen( input ) - 1] = 0;
- if( !wcsicmp( input, volumeName )) {
+ if( !_tcsicmp( input, volumeName )) {
break;
}
- printf("An incorrect volume label was
entered for this drive.\n");
+ _tprintf(_T("An incorrect volume label
was entered for this drive.\n"));
}
}
while( 1 ) {
- printf("\nWARNING, ALL DATA ON NON_REMOVABLE
DISK\n");
- printf("DRIVE %C: WILL BE LOST!\n",
RootDirectory[0] );
- printf("Proceed with Format (Y/N)? " );
- fgetws( input, sizeof(input)/2, stdin );
+ _tprintf(_T("\nWARNING, ALL DATA ON
NON_REMOVABLE DISK\n"));
+ _tprintf(_T("DRIVE %C: WILL BE LOST!\n"),
RootDirectory[0] );
+ _tprintf(_T("Proceed with Format (Y/N)? " ));
+ _fgetts( input, sizeof(input)/2, stdin );
- if( input[0] == L'Y' || input[0] == L'y' )
break;
+ if( input[0] == _T('Y') || input[0] == _T('y') )
break;
- if( input[0] == L'N' || input[0] == L'n' ) {
+ if( input[0] == _T('N') || input[0] ==
_T('n') ) {
- printf("\n");
+ _tprintf(_T("\n"));
return 0;
}
}
@@ -396,43 +404,56 @@
if( totalNumberOfBytes.QuadPart > 1024*1024*10 ) {
- printf("Verifying %luM\n", (DWORD)
(totalNumberOfBytes.QuadPart/(1024*1024)));
+ _tprintf(_T("Verifying %luM\n"), (DWORD)
(totalNumberOfBytes.QuadPart/(1024*1024)));
} else {
- printf("Verifying %.1fM\n",
+ _tprintf(_T("Verifying %.1fM\n"),
((float)(LONGLONG)totalNumberOfBytes.QuadPart)/(float)(1024.0*1024.0));
}
} else {
if( totalNumberOfBytes.QuadPart > 1024*1024*10 ) {
- printf("QuickFormatting %luM\n", (DWORD)
(totalNumberOfBytes.QuadPart/(1024*1024)));
+ _tprintf(_T("QuickFormatting %luM\n"), (DWORD)
(totalNumberOfBytes.QuadPart/(1024*1024)));
} else {
- printf("QuickFormatting %.2fM\n",
+ _tprintf(_T("QuickFormatting %.2fM\n"),
((float)(LONGLONG)totalNumberOfBytes.QuadPart)/(float)(1024.0*1024.0));
}
- printf("Creating file system structures.\n");
+ _tprintf(_T("Creating file system structures.\n"));
}
//
// Format away!
//
+#ifndef UNICODE
+ MultiByteToWideChar(CP_ACP, 0, RootDirectory, -1,
RootDirectoryW, MAX_PATH);
+ MultiByteToWideChar(CP_ACP, 0, Format, -1, FormatW, MAX_PATH);
+ MultiByteToWideChar(CP_ACP, 0, Label, -1, LabelW, MAX_PATH);
+ FormatEx( RootDirectoryW, media, FormatW, LabelW, QuickFormat,
+ ClusterSize, FormatExCallback );
+#else
FormatEx( RootDirectory, media, Format, Label, QuickFormat,
ClusterSize, FormatExCallback );
+#endif
if( Error ) return -1;
- printf("Format complete.\n");
+ _tprintf(_T("Format complete.\n"));
//
// Enable compression if desired
//
if( CompressDrive ) {
+#ifndef UNICODE
+ MultiByteToWideChar(CP_ACP, 0, RootDirectory, -1,
RootDirectoryW, MAX_PATH);
+ if( !EnableVolumeCompression( RootDirectoryW, TRUE )) {
+#else
if( !EnableVolumeCompression( RootDirectory, TRUE )) {
+#endif
- printf("Volume does not support
compression.\n");
+ _tprintf(_T("Volume does not support
compression.\n"));
}
}
@@ -441,87 +462,55 @@
//
if( !GotALabel ) {
- printf("Volume Label (11 characters, Enter for none)? "
);
- fgetws( input, sizeof(LabelString)/2, stdin );
+ _tprintf(_T("Volume Label (11 characters, Enter for
none)? " ));
+ _fgetts( input, sizeof(LabelString)/2, stdin );
- input[ wcslen(input)-1] = 0;
- if( !SetVolumeLabelW( RootDirectory, input )) {
+ input[ _tcslen(input)-1] = 0;
+ if( !SetVolumeLabel( RootDirectory, input )) {
- PrintWin32Error(L"Could not label volume",
GetLastError());
+ PrintWin32Error(_T("Could not label volume"),
GetLastError());
return -1;
}
}
- if( !GetVolumeInformationW( RootDirectory,
+ if( !GetVolumeInformation( RootDirectory,
volumeName,
sizeof(volumeName)/2,
&serialNumber,
&maxComponent, &flags,
fileSystem,
sizeof(fileSystem)/2)) {
- PrintWin32Error( L"Could not query volume",
GetLastError());
+ PrintWin32Error( _T("Could not query volume"),
GetLastError());
return -1;
}
//
// Print out some stuff including the formatted size
//
- if( !GetDiskFreeSpaceExW( RootDirectory,
+ if( !GetDiskFreeSpaceEx( RootDirectory,
&freeBytesAvailableToCaller,
&totalNumberOfBytes,
&totalNumberOfFreeBytes )) {
- PrintWin32Error( L"Could not query volume size",
GetLastError());
+ PrintWin32Error( _T("Could not query volume size"),
GetLastError());
return -1;
}
- printf("\n%I64d bytes total disk space.\n",
totalNumberOfBytes.QuadPart );
- printf("%I64d bytes available on disk.\n",
totalNumberOfFreeBytes.QuadPart );
+ _tprintf(_T("\n%I64d bytes total disk space.\n"),
totalNumberOfBytes.QuadPart );
+ _tprintf(_T("%I64d bytes available on disk.\n"),
totalNumberOfFreeBytes.QuadPart );
//
// Get the drive's serial number
//
- if( !GetVolumeInformationW( RootDirectory,
+ if( !GetVolumeInformation( RootDirectory,
volumeName,
sizeof(volumeName)/2,
&serialNumber,
&maxComponent, &flags,
fileSystem,
sizeof(fileSystem)/2)) {
- PrintWin32Error( L"Could not query volume",
GetLastError());
+ PrintWin32Error( _T("Could not query volume"),
GetLastError());
return -1;
}
- printf("\nVolume Serial Number is %04X-%04X\n", (unsigned
int)(serialNumber >> 16),
+ _tprintf(_T("\nVolume Serial Number is %04X-%04X\n"), (unsigned
int)(serialNumber >> 16),
(unsigned int)(serialNumber &
0xFFFF) );
return 0;
}
-int main(int argc, char* argv[])
-{
- UNICODE_STRING warg;
- ANSI_STRING arg;
- NTSTATUS status;
- PWCHAR *wargv;
- int i;
-
- wargv = (PWCHAR *) RtlAllocateHeap(RtlGetProcessHeap(), 0, argc
* sizeof(PWCHAR));
-
- for (i = 0; i < argc; i++)
- {
- RtlInitAnsiString(&arg, argv[i]);
- status = RtlAnsiStringToUnicodeString(&warg, &arg,
TRUE);
- if (!NT_SUCCESS (status))
- {
- printf("Not enough free memory.\n");
- return 1;
- }
- wargv[i] = (PWCHAR) warg.Buffer;
- }
-
- wmain(argc, wargv);
-
- for (i = 0; i < argc; i++)
- {
- RtlFreeHeap(RtlGetProcessHeap(), 0, wargv[i]);
- }
- RtlFreeHeap(RtlGetProcessHeap(), 0, wargv);
-
- return 0;
-}
_____
Modified: trunk/reactos/subsys/system/format/makefile
--- trunk/reactos/subsys/system/format/makefile 2005-05-08 20:20:14 UTC
(rev 15151)
+++ trunk/reactos/subsys/system/format/makefile 2005-05-08 21:50:39 UTC
(rev 15152)
@@ -2,13 +2,11 @@
PATH_TO_TOP = ../../..
-TARGET_NORC = yes
-
TARGET_TYPE = program
TARGET_APPTYPE = console
-TARGET_SDKLIBS = ntdll.a fmifs.a
+TARGET_SDKLIBS = kernel32.a ntdll.a fmifs.a
TARGET_NAME = format