//#include <string.h>
//#include <tchar.h>
#include <stdio.h>
#include "perfmon.h"
#include "fileutil.h"
#include "utils.h"
#include <string.h> // for strncpy
#ifdef UNICODE
#define _tcsrchrwcsrchr
#else
#define _tcsrchrstrrchr
#endif
#define DRIVE_DELIMITER TEXT(':')
#define DIRECTORY_DELIMITER TEXT('\\')
#define EXTENSION_DELIMITER TEXT('.')
#if 0
VOID FileErrorMessageBox(HWND hWnd, LPTSTR lpszFileName, DWORD ErrorCode)
{
TCHAR szErrorMessage[FILE_ERROR_MESSAGE_SIZE] ;
TCHAR szErrorMessageTemplate[FILE_ERROR_MESSAGE_SIZE] ;
StringLoad (IDS_FILE_ERROR, szErrorMessageTemplate) ;
TSPRINTF((LPTSTR)szErrorMessage,
(LPTSTR)szErrorMessageTemplate,
lpszFileName,
ErrorCode) ;
MessageBox (hWnd, (LPTSTR)szErrorMessage, NULL,
MB_OK | MB_ICONSTOP | MB_TASKMODAL);
return ;
}
#endif
BOOL FileRead (HANDLE hFile,
LPMEMORY lpMemory,
DWORD nAmtToRead)
{ // FileRead
BOOL bSuccess ;
DWORD nAmtRead ;
bSuccess = ReadFile (hFile, lpMemory, nAmtToRead, &nAmtRead, NULL) ;
return (bSuccess && (nAmtRead == nAmtToRead)) ;
} // FileRead
BOOL FileWrite (HANDLE hFile,
LPMEMORY lpMemory,
DWORD nAmtToWrite)
{ // FileWrite
BOOL bSuccess ;
DWORD nAmtWritten ;
bSuccess = WriteFile (hFile, lpMemory, nAmtToWrite, &nAmtWritten, NULL) ;
return (bSuccess && (nAmtWritten == nAmtToWrite)) ;
} // FileWrite
#if 0
HANDLE FileHandleOpen (LPTSTR lpszFilePath)
{ // FileHandleOpen
return ((HANDLE) CreateFile (lpszFilePath,
GENERIC_READ |
GENERIC_WRITE,
FILE_SHARE_READ |
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL)) ;
} // FileHandleOpen
HANDLE FileHandleCreate (LPTSTR lpszFilePath)
{ // FileHandleCreate
return ((HANDLE) CreateFile (lpszFilePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL)) ;
} // FileHandleCreate
long FileSeekEnd (HANDLE hFile,
long lAmtToMove)
{ // FileSeekEnd
return (SetFilePointer (hFile, lAmtToMove, NULL, FILE_END)) ;
} // FileSeekEnd
long FileSeekBegin (HANDLE hFile,
long lAmtToMove)
{ // FileSeekBegin
return (SetFilePointer (hFile, lAmtToMove, NULL, FILE_BEGIN)) ;
} // FileSeekBegin
long FileSeekCurrent (HANDLE hFile,
long lAmtToMove)
{ // FileSeekCurrent
return (SetFilePointer (hFile, lAmtToMove, NULL, FILE_CURRENT)) ;
} // FileSeekCurrent
long FileTell (HANDLE hFile)
{ // FileTell
return (SetFilePointer (hFile, 0, NULL, FILE_CURRENT)) ;
} // FileTell
#endif
LPMEMORY FileMap (HANDLE hFile, HANDLE *phMapHandle)
/*
To Do: Error reporting!!
*/
{ // FileMap
HANDLE hMapping ;
*phMapHandle = 0 ;
hMapping = CreateFileMapping (hFile, NULL, PAGE_READONLY,
0, 0, NULL) ;
if (!hMapping)
return (NULL) ;
*phMapHandle = hMapping ;
return (MapViewOfFile (hMapping, FILE_MAP_READ, 0, 0, 0)) ;
} // FileMap
BOOL FileUnMap (LPVOID pBase, HANDLE hMapping)
/*
To Do: Error reporting!!
*/
{ // FileUnMap
UnmapViewOfFile(pBase) ;
CloseHandle (hMapping) ;
return (TRUE) ;
} // FileUnMap
void FileNameExtension (LPTSTR lpszSpec,
LPTSTR lpszFileNameExtension)
/*
Effect: Return the name and extension portion only of lpszSpec
int lpszFileNameExtension.
Assert: lpszFileNameExtension is large enough to hold a name,
delimiter, extension, and terminating null character.
*/
{ // FileNameExtension
LPTSTR lpszDelimiter ;
lpszDelimiter = _tcsrchr ((LPCTSTR)lpszSpec, (TCHAR)DIRECTORY_DELIMITER) ;
if (!lpszDelimiter)
lpszDelimiter = _tcsrchr ((LPCTSTR)lpszSpec, (TCHAR)DRIVE_DELIMITER) ;
lstrcpy (lpszFileNameExtension,
lpszDelimiter ? ++lpszDelimiter : lpszSpec) ;
} // FileNameExtension
void FileDriveDirectory (LPTSTR lpszFileSpec,
LPTSTR lpszDirectory)
/*
Effect: Extract the drive and directory from the file
specification lpszFileSpec, and return the it in
lpszDirectory.
Internals: Copy the the whole spec to lpszDirectory. Use lstrrchr
to find the *last* directory delimiter ('\') and
truncate the string right after that.
Note: This function assumes that the specification lpszFileSpec
is fairly complete, in that it contains both a directory
and a file name.
*/
{ // FileDriveDirectory
LPTSTR lpszDelimiter ;
lstrcpy (lpszDirectory, lpszFileSpec) ;
lpszDelimiter = _tcsrchr ((LPCTSTR)lpszDirectory, (TCHAR)DIRECTORY_DELIMITER) ;
if (lpszDelimiter)
*(++lpszDelimiter) = TEXT('\0') ;
} // FileDriveDirectory