Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

176 lines
5.0 KiB

// FileIO.h
//
// Copyright (c) 1998-1999 Microsoft Corporation
#pragma once // MSINFO_FILEIO_H
#include <afx.h>
// Advanced declaration of this class so we can use the pointer.
class CDataSource;
/*
* CFileFormatException - Home-brew exception to reflect an error in a
* data file.
*
* History: a-jsari 10/20/97 Initial version.
*/
class CFileFormatException : public CException {
};
void ThrowFileFormatException();
/*
* CMSInfoFile - A file class which provides extended functions for
* reading from a file. Provides binary versions of the files.
*
* History: a-jsari 10/20/97 Initial version
*/
class CMSInfoFile {
friend void ThrowFileFormatException();
friend class CBufferDataSource;
friend class CBufferV500DataSource;
public:
CMSInfoFile(LPCTSTR szFileName, UINT wFlags = CFile::shareDenyWrite
| CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
virtual ~CMSInfoFile();
enum FileType { BINARY, REVERSE_ENDIAN, TEXT, MEMORY };
virtual FileType GetType() { return BINARY; }
const CString &GetFileName() { return m_strFileName; }
virtual void ReadLong(long &lValue);
virtual void ReadUnsignedInt(unsigned &uValue);
virtual void ReadString(CString &szValue);
virtual void ReadTchar(TCHAR &tcValue);
void ReadByte(BYTE &bValue) { ReadByteFromCFile(m_pFile, bValue); }
void ReadUnsignedLong(DWORD &dwValue);
virtual void WriteHeader(CDataSource *pDataSource);
virtual void WriteLong(long lValue);
virtual void WriteUnsignedInt(unsigned uValue);
virtual void WriteString(CString szValue);
void WriteByte(BYTE bValue);
void WriteUnsignedLong(DWORD dwValue);
virtual void WriteTitle(CString szName) { WriteString(szName); }
virtual void WriteChildMark();
virtual void WriteEndMark();
virtual void WriteNextMark();
virtual void WriteParentMark(unsigned cIterations);
static void ReadLongFromCFile(CFile *pFile, long &lValue);
static void ReadUnsignedFromCFile(CFile *pFile, unsigned &uValue);
static void ReadTcharFromCFile(CFile *pFile, TCHAR &tcValue);
static void ReadByteFromCFile(CFile *pFile, BYTE &bValue) { ASSERT(pFile);
if (pFile->Read(&bValue, sizeof(bValue)) != sizeof(bValue)) ThrowFileFormatException(); }
static void GetDefaultMSInfoDirectory(LPTSTR szDefaultDirectory, DWORD dwSize);
void SeekToBegin() { m_pFile->SeekToBegin(); }
int FileHandle() { return (int)m_pFile->m_hFile; }
void Close() { m_pFile->Close(); delete m_pFile; m_pFile = NULL; }
protected:
enum MagicNumber {
VERSION_500_MAGIC_NUMBER = 0x00011970,
VERSION_500_REVERSE_ENDIAN = 0x70190100,
VERSION_410_REVERSE_ENDIAN = 0x20000000, // FIX: Place holders.
VERSION_410_MAGIC_NUMBER = 0x20
};
CMSInfoFile(CFile *pFile = NULL);
static const unsigned DefaultReadBufferSize;
static CFileFormatException xptFileFormat;
void ReadSignedInt(int &wValue);
CFile *m_pFile;
CString m_strFileName;
};
/*
* CMSInfoTextFile - Write-methods version for text file. No read methods
* are required.
*
* History: a-jsari 10/23/97 Initial version.
*/
class CMSInfoTextFile : public CMSInfoFile {
public:
CMSInfoTextFile(LPCTSTR szName, UINT nFlags = CFile::shareDenyWrite
| CFile::modeWrite | CFile::modeCreate | CFile::typeText);
~CMSInfoTextFile() { }
FileType GetType() { return TEXT; }
void WriteTitle(CString szString);
void WriteHeader(CDataSource *pDataSource);
void WriteLong(long lValue);
void WriteUnsignedInt(unsigned uValue);
virtual void WriteString(CString szValue);
void WriteChildMark() { }
void WriteEndMark() { }
void WriteNextMark() { }
void WriteParentMark(unsigned) { }
protected:
CMSInfoTextFile(CFile *pFile = NULL);
};
/*
* CMSInfoMemoryFile - Just like a text report, but saved to a memory file.
* Inherits the text write functions.
*
* History: a-jsari 12/26/97 Initial version
*/
class CMSInfoMemoryFile : public CMSInfoTextFile {
public:
CMSInfoMemoryFile() :CMSInfoTextFile(new CMemFile) { }
~CMSInfoMemoryFile() { }
FileType GetType() { return MEMORY; }
void WriteTitle(CString szString) { CMSInfoTextFile::WriteTitle(szString); }
void WriteHeader(CDataSource *pDataSource) { CMSInfoTextFile::WriteHeader(pDataSource); }
void WriteLong(long lValue) { CMSInfoTextFile::WriteLong(lValue); }
void WriteUnsignedInt(unsigned uValue) { CMSInfoTextFile::WriteUnsignedInt(uValue); }
void WriteString(CString szString);
};
#if 0
/*
* CMSInfoReverseEndianFile - Read-methods version for opposite endian binary file.
*
* History: a-jsari 10/20/97 Initial version
*/
class CMSInfoReverseEndianFile : public CMSInfoFile {
public:
CMSInfoReverseEndianFile(CFile *pFile);
~CMSInfoReverseEndianFile() {}
FileType GetType() { return REVERSE_ENDIAN; }
void ReadLong(long &lValue);
void ReadUnsignedInt(unsigned &uValue);
void ReadString(CString &szValue);
static void ReadLongFromCFile(CFile *pFile, long &lValue);
static void ReadUnsignedFromCFile(CFile *pFile, unsigned &uValue);
};
#endif
/*
* ThrowFileFormatException -
*
* History: a-jsari 10/24/97
*/
inline void ThrowFileFormatException()
{
throw &CMSInfoFile::xptFileFormat;
}