windows-nt/Source/XPSP1/NT/drivers/video/ms/test/moninf/moninf.cpp
2020-09-26 16:20:57 +08:00

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;
}