|
|
#include "stdafx.h"
#define MAX_INFFILE_SIZE 0x60000
#define MAX_LINE_NUMBER 5000
#define MAX_SECTION_NUMBER 1000
const char REPORT_FILE_NAME[] = "d:\\outinf\\report.txt"; const char SRC_INF_PATH[] = "d:\\temp"; const char DEST_INF_PATH[] = "d:\\outinf"; const int FILE_BREAK_SIZE = 0xFFFFFFFF; // 0xFFFFFFFF means dump to only one inf
typedef struct tagCommonAlias { DWORD refCount; LPSTR lpAlias; LPSTR lpContents; } COMMON_ALIAS, *PCOMMON_ALIAS, *LPCOMMON_ALIAS;
class CCommonAlias { public: CCommonAlias(); ~CCommonAlias(); VOID ClearAll(VOID); int GetSize() const { return m_Alias.GetSize(); } LPCOMMON_ALIAS GetAt(int i) { return (LPCOMMON_ALIAS)m_Alias[i]; } LPCOMMON_ALIAS AddOneAlias(LPSTR, LPSTR);
private: CPtrArray m_Alias; };
typedef struct tagCommonSection { DWORD refCount; TCHAR sectName[32]; TCHAR contents[128]; } COMMON_SECTION, *PCOMMON_SECTION, *LPCOMMON_SECTION;
class CCommonSection { public: CCommonSection(); ~CCommonSection(); VOID ClearAll(VOID); int GetSize() const { return m_sections.GetSize(); } LPCOMMON_SECTION GetAt(int i) const { return (LPCOMMON_SECTION)m_sections[i]; } LPCOMMON_SECTION AddOneSection(LPSTR, LPSTR);
private: CPtrArray m_sections; };
typedef struct _SECTION { TCHAR name[256]; UINT startLine, endLine; } SECTION, *PSECTION, *LPSECTION;
class CMonitor { public: CMonitor() { bDupInstSection = FALSE; pAlias = NULL; AddRegSectionBuf = NULL; numCommonSects = 0; } ~CMonitor() { if (AddRegSectionBuf) free(AddRegSectionBuf); }
public: BOOL bDupInstSection; TCHAR AliasName[48]; LPCOMMON_ALIAS pAlias; TCHAR InstallSectionName[64]; TCHAR AddRegSectionName[64]; TCHAR ID[16];
int numCommonSects; LPCOMMON_SECTION CommonSects[8];
LPSTR AddRegSectionBuf; };
class CManufacturer { public: CManufacturer() { pAlias = NULL; } ~CManufacturer();
public: TCHAR name[64]; TCHAR AliasName[64]; LPCOMMON_ALIAS pAlias;
CPtrArray MonitorArray; CPtrArray m_MonitorIDArray; };
class CMonitorInf { public: CMonitorInf() { pReadFileBuf = NULL; }
public: LPSTR pReadFileBuf; UINT numLines; LPSTR lines[MAX_LINE_NUMBER]; UINT numSections; SECTION sections[MAX_SECTION_NUMBER];
CPtrArray ManufacturerArray;
private: CHAR m_lineBuf[256]; LPSTR m_tokens[10];
public: ~CMonitorInf(); LPSECTION SeekSection(LPCSTR); BOOL ParseInf(VOID);
private: BOOL ParseOneManufacturer(CManufacturer *); BOOL ParseOneMonitor(CMonitor *); VOID Pack(VOID); BOOL FillupAlias(VOID); LPCOMMON_ALIAS LookupCommonAlias(LPCSTR, LPCOMMON_ALIAS, UINT); };
class CSumInf { public: CSumInf(); ~CSumInf(); VOID Initialize(LPCSTR); VOID AddOneManufacturer(CManufacturer*); VOID CheckDupSections(VOID); VOID CheckDupMonIDs(VOID); VOID CheckDupAlias(VOID); VOID DumpMonitorInf(LPCSTR, int);
private: VOID MergeOneManufacturer(CManufacturer *, CManufacturer *);
int DumpManufacturers(LPCSTR, int, int, int); VOID DumpManufactureSection(FILE *, CManufacturer *); VOID DumpInstallSection(FILE *, CManufacturer *); VOID DumpCommonAddRegSection(FILE *, int, int); VOID DumpAddRegSection(FILE *, CManufacturer *); VOID DumpCommonStringSection(FILE *, int, int); VOID DumpCommonHeader(FILE *, int);
private: CPtrArray m_ManufacturerArray; CPtrArray m_SectionNameArray; public: FILE *m_fpReport; };
///////////////////////////////////////////////////////////
// Global variables
extern CCommonSection gCommonSections; extern CCommonAlias gCommonAlias; extern CSumInf gSumInf; extern TCHAR gszMsg[]; extern TCHAR gszInputFileName[];
///////////////////////////////////////////////////////////
// Global Functions
extern VOID TokenizeInf(LPSTR, CMonitorInf *); extern UINT TokenOneLine(LPSTR, CHAR, LPSTR);
extern VOID ReadOneMonitorInf(LPCSTR, CMonitorInf *);
|