137 lines
3.5 KiB
C++
137 lines
3.5 KiB
C++
|
// moninf.cpp : Defines the class behaviors for the application.
|
||
|
//
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "moninf.h"
|
||
|
#include "moninfDlg.h"
|
||
|
#include "mon.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMoninfApp
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CMoninfApp, CWinApp)
|
||
|
//{{AFX_MSG_MAP(CMoninfApp)
|
||
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||
|
// DO NOT EDIT what you see in these blocks of generated code!
|
||
|
//}}AFX_MSG
|
||
|
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMoninfApp construction
|
||
|
|
||
|
CMoninfApp::CMoninfApp()
|
||
|
{
|
||
|
// TODO: add construction code here,
|
||
|
// Place all significant initialization in InitInstance
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// The one and only CMoninfApp object
|
||
|
|
||
|
CMoninfApp theApp;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Private Functions
|
||
|
|
||
|
void ReadMonitorInfs(LPCSTR);
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMoninfApp initialization
|
||
|
|
||
|
BOOL CMoninfApp::InitInstance()
|
||
|
{
|
||
|
gSumInf.Initialize(REPORT_FILE_NAME);
|
||
|
|
||
|
ReadMonitorInfs(SRC_INF_PATH);
|
||
|
|
||
|
gSumInf.CheckDupSections();
|
||
|
gSumInf.CheckDupMonIDs();
|
||
|
gSumInf.CheckDupAlias();
|
||
|
gSumInf.DumpMonitorInf(DEST_INF_PATH, FILE_BREAK_SIZE);
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void ReadMonitorInfs(LPCSTR srcDir)
|
||
|
{
|
||
|
CString fileName;
|
||
|
|
||
|
fileName = CString(srcDir) + "\\*.*";
|
||
|
|
||
|
CFileFind finder;
|
||
|
|
||
|
if (finder.FindFile(fileName))
|
||
|
{
|
||
|
BOOL bWorking = TRUE;
|
||
|
while (bWorking)
|
||
|
{
|
||
|
bWorking = finder.FindNextFile();
|
||
|
|
||
|
if (finder.IsDots())
|
||
|
continue;
|
||
|
|
||
|
if (finder.IsDirectory())
|
||
|
{
|
||
|
ReadMonitorInfs((LPCSTR)finder.GetFilePath());
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////
|
||
|
// Check if it's INF file
|
||
|
CString fName = finder.GetFileName();
|
||
|
if (stricmp(fName.Right(4), ".inf") != 0)
|
||
|
continue;
|
||
|
|
||
|
CMonitorInf *pMonitorInf = new(CMonitorInf);
|
||
|
if (pMonitorInf == NULL)
|
||
|
continue;
|
||
|
|
||
|
//////////////////////////////////////////////
|
||
|
// Check if it's INF file
|
||
|
ReadOneMonitorInf(finder.GetFilePath(), pMonitorInf);
|
||
|
|
||
|
for (int i = 0; i < pMonitorInf->ManufacturerArray.GetSize(); i++)
|
||
|
gSumInf.AddOneManufacturer((CManufacturer*)pMonitorInf->ManufacturerArray[i]);
|
||
|
|
||
|
pMonitorInf->ManufacturerArray.RemoveAll();
|
||
|
|
||
|
delete pMonitorInf;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID ReadOneMonitorInf(LPCSTR fileName, CMonitorInf *pMonitorInf)
|
||
|
{
|
||
|
lstrcpy(gszInputFileName, fileName);
|
||
|
fprintf(gSumInf.m_fpReport, "Handling %s\n", gszInputFileName);
|
||
|
|
||
|
CFile InfFile(fileName, CFile::modeRead);
|
||
|
|
||
|
DWORD len = InfFile.GetLength();
|
||
|
if (len > MAX_INFFILE_SIZE || len <= 20)
|
||
|
return;
|
||
|
pMonitorInf->pReadFileBuf = (LPSTR)malloc(len+1024);
|
||
|
if (pMonitorInf->pReadFileBuf == NULL)
|
||
|
return;
|
||
|
|
||
|
if (InfFile.Read(pMonitorInf->pReadFileBuf, len) < len)
|
||
|
{
|
||
|
free(pMonitorInf->pReadFileBuf);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
TokenizeInf((LPSTR)pMonitorInf->pReadFileBuf, pMonitorInf);
|
||
|
|
||
|
pMonitorInf->ParseInf();
|
||
|
|
||
|
free(pMonitorInf->pReadFileBuf);
|
||
|
pMonitorInf->pReadFileBuf = NULL;
|
||
|
}
|