reman3/Rayman_X/cpa/Appli/ChkData/Src/ChkDataDlg.cpp

1198 lines
36 KiB
C++

/*
=======================================================================================
Name : ChkDataDlg.cpp
Author : vincent lhullier Date :08/09/97
Description : implementation of main dialog of ChkData application
=======================================================================================
*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "stdafx.h"
#include "ChkData.h"
#include "ChkDataDlg.h"
#include "Tree_Fct.h"
#include "IniData.h"
#include "SCR_Fct.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
=======================================================================================
=======================================================================================
CAboutDlg
=======================================================================================
=======================================================================================
*/
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*
=======================================================================================
=======================================================================================
CChkDataDlg dialog
=======================================================================================
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : constructor
----------------------------------------------------------------------------------------
*/
CChkDataDlg::CChkDataDlg(CWnd* pParent /*=NULL*/) : CDialog(CChkDataDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CChkDataDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hBtRougeBmp.LoadBitmap( IDB_BITMAP_BTROUGE );
m_hBtVertBmp.LoadBitmap( IDB_BITMAP_BTVERT );
m_lNumberOfFiles = 0;
}
/*
----------------------------------------------------------------------------------------
Description : destructor
----------------------------------------------------------------------------------------
*/
CChkDataDlg::~CChkDataDlg()
{
m_hBtRougeBmp.DeleteObject();
m_hBtVertBmp.DeleteObject();
}
/*
----------------------------------------------------------------------------------------
Description : Message map
----------------------------------------------------------------------------------------
*/
BEGIN_MESSAGE_MAP(CChkDataDlg, CDialog)
//{{AFX_MSG_MAP(CChkDataDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_LBN_DBLCLK(IDC_LIST_FILETYPE, OnDblclkListFiletype)
ON_BN_CLICKED(IDC_BUTTON_PROCESS, OnButtonProcess)
ON_BN_CLICKED(IDC_BUTTON_BUILDFILELIST, OnButtonBuildfilelist)
ON_LBN_SELCHANGE(IDC_LIST_SECTIONS, OnSelchangeListSections)
ON_LBN_SELCHANGE(IDC_LIST_ENTRIES, OnSelchangeListEntries)
ON_BN_CLICKED(IDC_BUTTON_SAVE, OnButtonSave)
ON_BN_CLICKED(IDC_BUTTON_SECTIONANDREFS, OnButtonSectionandrefs)
ON_BN_CLICKED(IDC_BUTTON_STAT, OnButtonStat)
ON_LBN_SELCHANGE(IDC_LIST_BADREF, OnSelchangeListBadref)
ON_LBN_DBLCLK(IDC_LIST_SECTIONWITHBADREF, OnDblclkListSectionwithbadref)
ON_BN_CLICKED(IDC_BUTTON_MODSTAT, OnButtonModstat)
//}}AFX_MSG_MAP
ON_CONTROL_RANGE( BN_CLICKED, IDC_CHECK_PARAM0, IDC_CHECK_PARAM19, OnButtonParam )
END_MESSAGE_MAP()
/*
=======================================================================================
specific functions
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : init progress bar
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::m_fn_vInitProgessBar( int _iStart, int _iEnd )
{
m_oProgress.m_fn_vSetRange( _iStart, _iEnd );
m_oProgress.m_fn_vReinit();
m_oProgress.m_fn_vInitDrawing();
}
/*
----------------------------------------------------------------------------------------
Description : fill section type list box
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::m_fn_vFillSectionTypeList( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_DyAr_Description *p_stDyAr;
SCR_tdst_Link_Value *p_stValue;
unsigned int uiSection;
int iIndex;
char szText[512];
long lNumberOfSections = 0;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
m_p_oLBSectionType->ResetContent();
p_stDyAr = &g_stSectionTypeLinkTable.stLinkArray;
for (uiSection = 0; uiSection < p_stDyAr->uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionTypeLinkTable.stLinkArray );
sprintf( szText, "%s", p_stValue->p_szKey );
if (p_stValue->stInfos.ulLong1)
sprintf( szText + strlen( szText ), " (%d)", p_stValue->stInfos.ulLong1 );
iIndex = m_p_oLBSectionType->AddString( szText );
//m_p_oLBSectionType->SetItemData( iIndex, p_stValue->ulValue );
m_p_oLBSectionType->SetItemData( iIndex, (DWORD) p_stValue );
lNumberOfSections += p_stValue->stInfos.ulLong1;
}
sprintf( szText, " Section types : %d", p_stDyAr->uiNumValues );
if (lNumberOfSections)
sprintf(szText + strlen( szText ), " (%d)", lNumberOfSections );
GetDlgItem( IDC_STATIC_NUMBEROFSECTIONTYPES )->SetWindowText( szText );
if (p_stDyAr->uiNumValues)
{
m_p_oLBSectionType->SetCurSel( 0 );
OnSelchangeListSections();
}
}
/*
----------------------------------------------------------------------------------------
Description : fill section type list box
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::m_fn_vFillListEntry( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_DyAr_Description *p_stDyAr;
tdstEntry *p_stEntry;
unsigned int uiEntry;
int iIndex;
char szText[20];
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
m_p_oLBEntry->ResetContent();
if (m_p_stCurrentSectionType == NULL)
return;
p_stDyAr = (SCR_tdst_DyAr_Description *) m_p_stCurrentSectionType->ulValue;
for (uiEntry = 0; uiEntry < p_stDyAr->uiNumValues; uiEntry ++)
{
SCR_M_DyAr_GetElement( tdstEntry, uiEntry, p_stEntry, (*p_stDyAr) );
iIndex = m_p_oLBEntry->AddString( p_stEntry->szName );
m_p_oLBEntry->SetItemData( iIndex, (DWORD) p_stEntry );
}
sprintf( szText, " Entries : %d", p_stDyAr->uiNumValues );
GetDlgItem( IDC_STATIC_NUMBEROFENTRIES )->SetWindowText( szText );
if (p_stDyAr->uiNumValues)
{
m_p_oLBEntry->SetCurSel( 0 );
}
OnSelchangeListEntries();
}
/*
----------------------------------------------------------------------------------------
Description : fill section type list box
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::m_fn_vShowCurrentEntry( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
char szSample[1] = { 0 };
char *p_szSample;
char cParam, cNumberOfParams;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
if (m_p_stCurrentEntry == NULL)
{
p_szSample = szSample;
cNumberOfParams = 0;
}
else
{
p_szSample = m_p_stCurrentEntry->szSample;
cNumberOfParams = m_p_stCurrentEntry->cNumberOfParams;
}
GetDlgItem( IDC_STATIC_ENTRYSAMPLE )->SetWindowText( p_szSample );
for (cParam = 0; cParam < cNumberOfParams; cParam++)
{
m_a_poBtParam[ cParam ]->ShowWindow( TRUE );
m_a_poBtParam[ cParam ]->SetCheck( m_p_stCurrentEntry->a_cIsRef[ cParam ] );
}
for (; cParam < 20; cParam++)
m_a_poBtParam[ cParam ]->ShowWindow( FALSE );
}
/*
----------------------------------------------------------------------------------------
Description : fill section type list box
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::m_fn_vDumpSectionAndRefsListInFile( char *_szFileName )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
FILE *hpFile;
SCR_tdst_DyAr_Description *p_stDyAr;
SCR_tdst_DyAr_Description *p_stRefDyAr;
SCR_tdst_Link_Value *p_stValue;
unsigned int uiSection;
tdstReference *p_stRef;
unsigned int uiRef;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
if ((hpFile = fopen( _szFileName, "wt") ) == NULL)
return;
fprintf( hpFile, "\n********************\n* Sections & Refs *\n********************\n" );
p_stDyAr = &g_stSectionLinkTable.stLinkArray;
for (uiSection = 0; uiSection < p_stDyAr->uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, (*p_stDyAr) );
fprintf( hpFile, "(%4d) %s\n", p_stValue->stInfos.ulLong1, p_stValue->p_szKey );
/*
* dump references
*/
p_stRefDyAr = (SCR_tdst_DyAr_Description *) p_stValue->ulValue;
if (p_stRefDyAr)
{
for (uiRef = 0; uiRef < p_stRefDyAr->uiNumValues; uiRef ++)
{
SCR_M_DyAr_GetElement( tdstReference, uiRef, p_stRef, (*p_stRefDyAr) );
fprintf( hpFile, "\t(%04d) -> %s\n", p_stRef->uiLine, p_stRef->p_stRef->p_szKey );
}
}
}
fprintf( hpFile, "\n********************\n* References *\n********************\n" );
p_stDyAr = &g_stRefLinkTable.stLinkArray;
for (uiRef = 0; uiRef < p_stDyAr->uiNumValues; uiRef++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiRef, p_stValue, (*p_stDyAr) );
fprintf( hpFile, "%c [%6d] %s\n", p_stValue->stInfos.ulLong2 ? ' ' : 'X', p_stValue->stInfos.ulLong1, p_stValue->p_szKey );
}
fclose( hpFile );
}
/*
----------------------------------------------------------------------------------------
Description : fill list with bad references
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::fn_vFillBadReferenceList()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
unsigned int uiRef;
SCR_tdst_Link_Value *p_stValue;
int iIndex;
char szText[ SCR_CV_ui_Cfg_MaxLenName ];
long lBadRef = 0;
/*
unsigned long ulMaxRefBy = 0;
unsigned long ulNbRefs;
unsigned long ulMaxRef = 0;
*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
m_p_oLBBadRef->ResetContent();
for (uiRef = 0; uiRef < g_stRefLinkTable.stLinkArray.uiNumValues; uiRef++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiRef, p_stValue, g_stRefLinkTable.stLinkArray );
if (p_stValue->stInfos.ulLong2 == 0)
{
sprintf( szText, "[%4d] %s", p_stValue->stInfos.ulLong1, p_stValue->p_szKey );
iIndex = m_p_oLBBadRef->AddString( szText );
m_p_oLBBadRef->SetItemData( iIndex, (DWORD) p_stValue );
lBadRef += p_stValue->stInfos.ulLong1;
}
/*
if (p_stValue->stInfos.ulLong1 > ulMaxRefBy)
ulMaxRefBy = p_stValue->stInfos.ulLong1;
*/
}
// test
/*
for (uiRef = 0; uiRef < g_stSectionLinkTable.stLinkArray.uiNumValues; uiRef++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiRef, p_stValue, g_stSectionLinkTable.stLinkArray );
ulNbRefs = ((SCR_tdst_DyAr_Description *) p_stValue->ulValue == NULL) ? 0 : ((SCR_tdst_DyAr_Description *) p_stValue->ulValue)->uiNumValues;
if (ulNbRefs > ulMaxRef)
ulMaxRef = ulNbRefs;
}
*/
sprintf( szText, " Bad references : %d [%d]", m_p_oLBBadRef->GetCount(), lBadRef );
GetDlgItem( IDC_STATIC_BADREF )->SetWindowText( szText );
m_p_stCurrentBadRef = NULL;
fn_vFillSectionWithBadReferenceList();
}
/*
----------------------------------------------------------------------------------------
Description : fill list of section that own current selected references
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::fn_vFillSectionWithBadReferenceList()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_DyAr_Description *p_stDyAr;
SCR_tdst_Link_Value *p_stValue;
tdstReference *p_stRef;
int iIndex;
unsigned int uiSection, uiRef;
char szText[ SCR_CV_ui_Cfg_MaxLenName ];
unsigned int uiNbRef = 0;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
m_p_oLBSectionWithBadRef->ResetContent();
if (m_p_stCurrentBadRef == NULL)
return;
for (uiSection = 0; uiSection < g_stSectionLinkTable.stLinkArray.uiNumValues; uiSection++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionLinkTable.stLinkArray );
p_stDyAr = (SCR_tdst_DyAr_Description *) p_stValue->ulValue;
if (p_stDyAr)
{
for (uiRef = 0; uiRef < p_stDyAr->uiNumValues; uiRef++)
{
SCR_M_DyAr_GetElement( tdstReference, uiRef, p_stRef, (*p_stDyAr) );
if (p_stRef->p_stRef == m_p_stCurrentBadRef)
{
sprintf( szText, "[%04d] %s", p_stRef->uiLine, p_stValue->p_szKey );
iIndex = m_p_oLBSectionWithBadRef->AddString( szText );
m_p_oLBSectionWithBadRef->SetItemData( iIndex, (DWORD) p_stValue );
if (uiNbRef++ == m_p_stCurrentBadRef->stInfos.ulLong1)
return;
}
}
}
}
}
/*
----------------------------------------------------------------------------------------
Description : display last op time
_lTime -> elapse time
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::m_fn_vDisplayLastOperationTime( long _lTime )
{
div_t stDiv;
char szTime[50], *p_szTime;
p_szTime = szTime + sprintf( szTime, "Last op time ");
stDiv = div( _lTime, 3600 );
_lTime = stDiv.rem;
p_szTime += sprintf( p_szTime, "%02d:", stDiv.quot );
stDiv = div( _lTime, 60 );
sprintf( p_szTime, "%02d:%02d", stDiv.quot, stDiv.rem );
GetDlgItem( IDC_STATIC_LASTOPTIME )->SetWindowText( szTime );
}
/*
=======================================================================================
Message handlers
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : WM_INITDIALOG
----------------------------------------------------------------------------------------
*/
BOOL CChkDataDlg::OnInitDialog()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
long lType;
tdstFileType *p_stFT = g_d_stFileType;
UINT uiIndex;
char szText[50];
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CDialog::OnInitDialog();
/*
* Add "About..." menu item to system menu.
* IDM_ABOUTBOX must be in the system command range.
*/
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
/*
* init progression bar
*/
m_oProgress.SubclassDlgItem( IDC_PROGRESS, this );
m_oProgress.SetStep( 1 );
/*
* get pointer on dialog control
*/
static s_a_uiBtParam[20] =
{
IDC_CHECK_PARAM0, IDC_CHECK_PARAM1, IDC_CHECK_PARAM2, IDC_CHECK_PARAM3, IDC_CHECK_PARAM4,
IDC_CHECK_PARAM5, IDC_CHECK_PARAM6, IDC_CHECK_PARAM7, IDC_CHECK_PARAM8, IDC_CHECK_PARAM9,
IDC_CHECK_PARAM10,IDC_CHECK_PARAM11,IDC_CHECK_PARAM12,IDC_CHECK_PARAM13,IDC_CHECK_PARAM14,
IDC_CHECK_PARAM15,IDC_CHECK_PARAM16,IDC_CHECK_PARAM17,IDC_CHECK_PARAM18,IDC_CHECK_PARAM19
};
m_p_oLBFiles = (CListBox *) GetDlgItem( IDC_LIST_FILE );
m_p_oLBFileType = (CListBox *) GetDlgItem( IDC_LIST_FILETYPE );
m_p_oLBSectionType = (CListBox *) GetDlgItem( IDC_LIST_SECTIONS );
m_p_oLBEntry = (CListBox *) GetDlgItem( IDC_LIST_ENTRIES );
m_p_oLBBadRef = (CListBox *) GetDlgItem( IDC_LIST_BADREF );
m_p_oLBSectionWithBadRef = (CListBox *) GetDlgItem( IDC_LIST_SECTIONWITHBADREF );
for (uiIndex = 0; uiIndex < 20; uiIndex++ )
{
m_a_poBtParam[ uiIndex ] = (CButton *) GetDlgItem( s_a_uiBtParam[ uiIndex ] );
m_a_poBtParam[ uiIndex ]->ShowWindow( FALSE );
}
/*
* fill file type list
*/
m_p_oLBFileType->ResetContent();
for (lType = 0; lType < g_lNumberOfFileTypes; lType++, p_stFT++)
{
uiIndex = m_p_oLBFileType->AddString( p_stFT->szExt );
m_p_oLBFileType->SetItemData( uiIndex, (DWORD) p_stFT );
}
sprintf( szText, "File types : %d", g_lNumberOfFileTypes );
GetDlgItem( IDC_STATIC_FILETYPE )->SetWindowText( szText );
/*
* file section type list
*/
m_fn_vFillSectionTypeList();
return TRUE; // return TRUE unless you set the focus to a control
}
/*
----------------------------------------------------------------------------------------
Description : WM_SYSCOMMAND
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
/*
----------------------------------------------------------------------------------------
Description : WM_PAINT
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
/*
----------------------------------------------------------------------------------------
Description : WM_QUERYDRAGICON
----------------------------------------------------------------------------------------
*/
HCURSOR CChkDataDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/*
----------------------------------------------------------------------------------------
Description : WM_DRAWITEM
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS)
{
// TODO: Add your message handler code here and/or call default
if ( (lpDIS->itemID != LB_ERR) && (nIDCtl == IDC_LIST_FILETYPE) )
{
CDC *p_oDC = CDC::FromHandle(lpDIS->hDC);
CBrush oBrush;
COLORREF xTextColor;
BOOL bSelected = (lpDIS->itemState & ODS_SELECTED );
tdstFileType *p_stFT;
CPoint oPoint;
char szValue[10];
oBrush.CreateSolidBrush( GetSysColor( bSelected ? COLOR_HIGHLIGHT : COLOR_WINDOW) );
xTextColor = GetSysColor( bSelected ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT);
p_oDC->FillRect( &lpDIS->rcItem, &oBrush );
p_stFT = (tdstFileType *) m_p_oLBFileType->GetItemData( lpDIS->itemID );
p_oDC->SetBkMode( TRANSPARENT);
p_oDC->SetTextColor( xTextColor );
oPoint.x = lpDIS->rcItem.left;
oPoint.y = lpDIS->rcItem.top;
p_oDC->DrawState( oPoint, CSize(16,16), p_stFT->bConsider ? &m_hBtVertBmp : &m_hBtRougeBmp, DST_BITMAP );
lpDIS->rcItem.left += 20;
lpDIS->rcItem.right -= 5;
p_oDC->DrawText( p_stFT->szExt, &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );
p_oDC->DrawText( itoa(p_stFT->lUsed, szValue, 10) , &lpDIS->rcItem, DT_SINGLELINE | DT_RIGHT | DT_VCENTER );
oBrush.DeleteObject();
}
else
CDialog::OnDrawItem(nIDCtl, lpDIS);
}
/*
----------------------------------------------------------------------------------------
Description : WM_MEASUREITEM
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
//return 16;
CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
/*
----------------------------------------------------------------------------------------
Description : ON_LBN_DBLCLK on IDC_LIST_FILETYPE list box
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnDblclkListFiletype()
{
UINT nIndex;
tdstFileType *p_stFT;
nIndex = m_p_oLBFileType->GetCurSel();
if (nIndex != LB_ERR )
{
p_stFT = (tdstFileType *) m_p_oLBFileType->GetItemData( nIndex );
p_stFT->bConsider = !p_stFT->bConsider;
fn_IniD_vSetFileTypeConsiderStatus( p_stFT->szExt, p_stFT->bConsider );
m_p_oLBFileType->Invalidate();
}
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on IDC_BUTTON_PROCESS button
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonProcess()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
long lFile;
char szFileName[ MAX_PATH ];
char *p_szFileName;
time_t lStartTime, lEndTime;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* init progression and display for working
*/
m_fn_vInitProgessBar( 0, m_lNumberOfFiles );
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( FALSE );
m_oProgress.ShowWindow(TRUE);
/*
* get start time
*/
time( &lStartTime );
/*
* reset use counters
*/
fn_Scr_vResetUsedCounters();
/*
* parse each file
*/
strcpy( szFileName, g_stIniData.szRootForSection );
p_szFileName = szFileName + g_stIniData.lRootForSectionLength;
for (lFile = 0; lFile < m_lNumberOfFiles; lFile++)
{
m_p_oLBFiles->GetText( lFile, p_szFileName );
m_p_oLBFiles->SetCurSel( lFile );
fn_Scr_vParseFileToBuildListOfSectionTypes( szFileName );
m_oProgress.StepIt();
}
/*
* refresh list of section type
*/
m_fn_vFillSectionTypeList();
/*
* get end time and display elapse time
*/
time( &lEndTime );
m_oProgress.ShowWindow(FALSE);
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( TRUE );
m_fn_vDisplayLastOperationTime( lEndTime - lStartTime );
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on IDC_BUTTON_PROCESS button
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonBuildfilelist()
{
char szText[50];
long lFile;
long lNbFiles;
char **d_szFile;
/* build list of file */
fn_Tree_vRefreshWithFileList( g_p_stRootProject, &g_stIniData.stCheckConfig );
m_lNumberOfFiles = fn_Tree_lBuildListOfFilesToGet( g_p_stRootProject, &d_szFile );
SCR_fn_v_Link_CloseTable( &g_stFileLinkTable );
SCR_fn_v_Link_InitTable( &g_stFileLinkTable );
for (lNbFiles = 0, lFile = 0; lFile < m_lNumberOfFiles ; lFile++)
if ( fn_Tree_bConsiderFile( d_szFile[ lFile ] ) )
{
m_p_oLBFiles->AddString( d_szFile[ lFile ] );
lNbFiles++;
SCR_fnp_st_Link_AddEntry( &g_stFileLinkTable, d_szFile[ lFile ], 0, SCR_ELS_Link_Initialized );
}
sprintf( szText, " Number of files : %d", lNbFiles );
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->SetWindowText( szText );
fn_Tree_vFreeListOfFilesToGet( m_lNumberOfFiles, d_szFile );
m_lNumberOfFiles = lNbFiles;
}
/*
----------------------------------------------------------------------------------------
Description : LBN_SELCHANGE on IDC_LIST_SECTIONS
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnSelchangeListSections()
{
int iIndex = m_p_oLBSectionType->GetCurSel();
if (iIndex != LB_ERR )
m_p_stCurrentSectionType = (SCR_tdst_Link_Value *) m_p_oLBSectionType->GetItemData( iIndex );
else
m_p_stCurrentSectionType = NULL;
m_fn_vFillListEntry();
}
/*
----------------------------------------------------------------------------------------
Description : LBN_SELCHANGE on IDC_LIST_ENTRIES
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnSelchangeListEntries()
{
int iIndex = m_p_oLBEntry->GetCurSel();
if (iIndex != LB_ERR )
m_p_stCurrentEntry = (tdstEntry *) m_p_oLBEntry->GetItemData( iIndex );
else
m_p_stCurrentEntry = NULL;
m_fn_vShowCurrentEntry();
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on IDC_BUTTON_SAVE
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonSave()
{
fn_Scr_vSaveSectionTypes();
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on IDC_BUTTON_SECTIONANDREFS button
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonSectionandrefs()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
long lFile;
char szFileName[ MAX_PATH ];
char *p_szFileName;
time_t lStartTime, lEndTime;
SCR_tdst_Link_Value *p_stValue;
SCR_tdst_Link_Value *p_stRefValue;
unsigned int uiRef;
long lNbErrors = 0;
char szFullRef[ SCR_CV_ui_Cfg_MaxLenName ];
char cPath;
BOOL bFile;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* init progression and display for working
*/
m_fn_vInitProgessBar( 0, m_lNumberOfFiles );
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( FALSE );
m_oProgress.ShowWindow(TRUE);
fn_Scr_vFreeSectionList();
SCR_fn_v_Link_CloseTable( &g_stSectionLinkTable );
SCR_fn_v_Link_CloseTable( &g_stRefLinkTable );
SCR_fn_v_Link_InitTable( &g_stSectionLinkTable );
SCR_fn_v_Link_InitTable( &g_stRefLinkTable );
fn_Scr_vComputeSectionTypeHasRef( );
/*
* get start time
*/
time( &lStartTime );
/*
* reset use counters
*/
fn_Scr_vResetUsedCounters();
/*
* parse each file
*/
strcpy( szFileName, g_stIniData.szRootForSection );
p_szFileName = szFileName + g_stIniData.lRootForSectionLength;
for (lFile = 0; lFile < m_lNumberOfFiles; lFile++)
{
//m_p_oLBFiles->GetText( lFile, p_szFileName );
p_stValue = (SCR_tdst_Link_Value *) g_stFileLinkTable.stLinkArray.d_stDynArray[ lFile ].d_vElement;
strcpy( p_szFileName, p_stValue->p_szKey );
m_p_oLBFiles->SetCurSel( lFile );
fn_Scr_vParseFileToBuildListOfSectionsAndRefs( szFileName );
//fn_Scr_vNewParseFileToBuildListOfSectionsAndRefs( szFileName, p_stValue );
m_oProgress.StepIt();
}
/*
* dump list in a file
*/
//m_fn_vDumpSectionAndRefsListInFile( "SctRefs.txt" );
m_fn_vInitProgessBar( 0, g_stRefLinkTable.stLinkArray.uiNumValues );
/*
for (uiRef = 0; uiRef < g_stRefLinkTable.stLinkArray.uiNumValues; uiRef++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiRef, p_stRefValue, g_stRefLinkTable.stLinkArray );
// get referenced file
p_szEndFileName = strchr( p_stRefValue->p_szKey, '^');
if (p_szEndFileName != NULL)
*p_szEndFileName = 0;
p_stLVFile = SCR_fnp_st_Link_SearchKey( &g_stFileLinkTable, p_stRefValue->p_szKey );
if (p_stLVFile == NULL)
{
for (cPath = 0; cPath < g_stIniData.cNumberOfDataPaths; cPath++)
{
sprintf( szFullRef, "%s\\%s", g_stIniData.a_stDataPath[cPath].szPath, p_stRefValue->p_szKey );
p_stLVFile = SCR_fnp_st_Link_SearchKey( &g_stFileLinkTable, szFullRef );
if (p_stLVFile != 0)
break;
}
}
if (p_stLVFile != 0)
{
if (p_szEndFileName == NULL)
{
p_stRefValue->stInfos.ulLong2 = 1;
}
else
{
*p_szEndFileName++ = '^';
if (p_stLVFile->ulValue)
p_stLVSection = SCR_fnp_st_Link_SearchKey( (SCR_tdst_Link_Table *) p_stLVFile->ulValue, p_szEndFileName );
else
p_stRefValue->stInfos.ulLong2 = 0;
p_stRefValue->stInfos.ulLong2 = (unsigned long) p_stLVSection;
}
}
else
p_stRefValue->stInfos.ulLong2 = 0;
m_oProgress.StepIt();
}
*/
for (uiRef = 0; uiRef < g_stRefLinkTable.stLinkArray.uiNumValues; uiRef++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiRef, p_stRefValue, g_stRefLinkTable.stLinkArray );
p_stValue = SCR_fnp_st_Link_SearchKey( &g_stSectionLinkTable, p_stRefValue->p_szKey );
if (p_stValue == NULL)
{
/*
* test with all directory
*/
for (cPath = 0; cPath < g_stIniData.cNumberOfDataPaths; cPath++)
{
sprintf( szFullRef, "%s\\%s", g_stIniData.a_stDataPath[cPath].szPath, p_stRefValue->p_szKey );
p_stValue = SCR_fnp_st_Link_SearchKey( &g_stSectionLinkTable, szFullRef );
if (p_stValue != 0)
break;
}
}
p_stRefValue->stInfos.ulLong2 = (unsigned long) p_stValue;
m_oProgress.StepIt();
}
/*
* get end time and display elapse time
*/
time( &lEndTime );
m_oProgress.ShowWindow(FALSE);
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( TRUE );
m_fn_vDisplayLastOperationTime( lEndTime - lStartTime );
fn_vFillBadReferenceList();
}
/*
----------------------------------------------------------------------------------------
Description : LBN_SELCHANGE on IDC_LIST_BADREF
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnSelchangeListBadref()
{
int iIndex = m_p_oLBBadRef->GetCurSel();
if (iIndex != LB_ERR )
m_p_stCurrentBadRef = (SCR_tdst_Link_Value *) m_p_oLBBadRef->GetItemData( iIndex );
else
m_p_stCurrentBadRef = NULL;
fn_vFillSectionWithBadReferenceList();
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on a Param button
nID -> id of param button
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonParam( UINT nID )
{
char cParam = (char) (nID - IDC_CHECK_PARAM0 );
int iState;
iState = m_a_poBtParam[ cParam ]->GetCheck();
m_p_stCurrentEntry->a_cIsRef[ cParam ] = iState;
m_p_stCurrentEntry->cNumberOfRefs = 0;
for (cParam = 0; cParam < m_p_stCurrentEntry->cNumberOfParams; cParam++)
{
if (m_p_stCurrentEntry->a_cIsRef[ cParam ])
m_p_stCurrentEntry->cNumberOfRefs++;
}
}
/*
----------------------------------------------------------------------------------------
Description : BN_DBLCLK on IDC_LIST_SECTIONWITHBADREF
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnDblclkListSectionwithbadref()
{
int iIndex = m_p_oLBSectionWithBadRef->GetCurSel();
char szText[1024], *p_szText = szText;
char szCommand[1024];
if (iIndex == LB_ERR)
return;
m_p_oLBSectionWithBadRef->GetText( iIndex, szText );
if ( (p_szText = strchr( szText, '^')) != NULL)
*p_szText = 0;
p_szText = szText;
while (*p_szText++ != ']');
p_szText++;
sprintf( szCommand, "Notepad %s%s", g_stIniData.szRootForSection, p_szText );
WinExec(szCommand, SW_SHOWNORMAL);
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on IDC_BUTTON_STAT button
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonStat()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
long lFile;
char szFileName[ MAX_PATH ];
char *p_szFileName;
time_t lStartTime, lEndTime;
tdstScriptStat stStat;
char *d_szStatText, *p_szStatText;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* init progression and display for working
*/
m_fn_vInitProgessBar( 0, m_lNumberOfFiles );
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( FALSE );
m_oProgress.ShowWindow(TRUE);
/*
* get start time
*/
fn_Scr_vInitStat( &stStat );
time( &lStartTime );
/*
* parse each file
*/
strcpy( szFileName, g_stIniData.szRootForSection );
p_szFileName = szFileName + g_stIniData.lRootForSectionLength;
for (lFile = 0; lFile < m_lNumberOfFiles; lFile++)
{
m_p_oLBFiles->GetText( lFile, p_szFileName );
m_p_oLBFiles->SetCurSel( lFile );
fn_Scr_vParseFileForStat( szFileName, &stStat );
m_oProgress.StepIt();
}
/*
* build stat text
*/
p_szStatText = d_szStatText = (char *) malloc ( 10000 );
p_szStatText += sprintf( p_szStatText, "Number of files -> %d\r\n", stStat.ulNbFiles );
p_szStatText += sprintf( p_szStatText, "Number of characters -> %d\r\n", stStat.ulNbChars );
p_szStatText += sprintf( p_szStatText, "Biggest file -> (%d) %s\r\n", stStat.ulMaxSize, stStat.szBiggestFile );
p_szStatText += sprintf( p_szStatText, "Number of lines -> %d\r\n", stStat.ulNbLines );
p_szStatText += sprintf( p_szStatText, " Directives -> %d\r\n", stStat.ulNbDirectiveLines );
p_szStatText += sprintf( p_szStatText, " Begin section -> %d\r\n", stStat.ulNbBeginSectionLines );
p_szStatText += sprintf( p_szStatText, " End section -> %d\r\n", stStat.ulNbEndSectionLines );
p_szStatText += sprintf( p_szStatText, " Entries -> %d\r\n", stStat.ulNbEntryLines );
p_szStatText += sprintf( p_szStatText, "Max sections in a file -> %d (%s)\r\n", stStat.ulNbMaxSectionInAFile, stStat.szFileWithMaxSection);
p_szStatText += sprintf( p_szStatText, "Section name first part\r\n" );
p_szStatText += sprintf( p_szStatText, " Min -> (%d) %s\r\n", stStat.ulSectionNameMinLength, stStat.szSectionNameMin );
p_szStatText += sprintf( p_szStatText, " Max -> (%d) %s\r\n", stStat.ulSectionNameMaxLength, stStat.szSectionNameMax );
p_szStatText += sprintf( p_szStatText, "Section name second part\r\n" );
p_szStatText += sprintf( p_szStatText, " Max -> (%d) %s\r\n", stStat.ulSectionExtMaxLength, stStat.szSectionExtMax );
p_szStatText += sprintf( p_szStatText, " Average -> %f\r\n", stStat.fSectionExtAverageLength );
p_szStatText += sprintf( p_szStatText, "Entry name\r\n" );
p_szStatText += sprintf( p_szStatText, " Min -> (%d) %s\r\n", stStat.ulEntryMinLength, stStat.szEntryMin );
p_szStatText += sprintf( p_szStatText, " Max -> (%d) %s\r\n", stStat.ulEntryMaxLength, stStat.szEntryMax );
p_szStatText += sprintf( p_szStatText, "Format max length -> %d\r\n", stStat.ulFormatMaxLength );
p_szStatText += sprintf( p_szStatText, "Params max number -> %d\r\n", stStat.cMaxParams );
p_szStatText += sprintf( p_szStatText, "Params max length -> %d\r\n", stStat.ulParamsMaxLength );
GetDlgItem( IDC_EDIT_STAT )->SetWindowText( d_szStatText );
free ( d_szStatText );
/*
* get end time and display elapse time
*/
time( &lEndTime );
m_oProgress.ShowWindow(FALSE);
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( TRUE );
m_fn_vDisplayLastOperationTime( lEndTime - lStartTime );
}
/*
----------------------------------------------------------------------------------------
Description : BN_CLICKED on IDC_BUTTON_PROCESS button
----------------------------------------------------------------------------------------
*/
void CChkDataDlg::OnButtonModstat()
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
long lFile;
char szFileName[ MAX_PATH ];
char *p_szFileName;
time_t lStartTime, lEndTime;
tdstModStat stStat;
char *d_szStatText, *p_szStatText;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* init progression and display for working
*/
m_fn_vInitProgessBar( 0, m_lNumberOfFiles );
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( FALSE );
m_oProgress.ShowWindow(TRUE);
fn_Scr_vInitModStat( &stStat );
/*
* get start time
*/
time( &lStartTime );
/*
* parse each file
*/
strcpy( szFileName, g_stIniData.szRootForSection );
p_szFileName = szFileName + g_stIniData.lRootForSectionLength;
for (lFile = 0; lFile < m_lNumberOfFiles; lFile++)
{
m_p_oLBFiles->GetText( lFile, p_szFileName );
m_p_oLBFiles->SetCurSel( lFile );
if ( strstr( szFileName, ".mod") )
fn_Scr_vParseFileToCountModData( szFileName, &stStat );
m_oProgress.StepIt();
}
/*
* get end time and display elapse time
*/
time( &lEndTime );
m_oProgress.ShowWindow(FALSE);
GetDlgItem( IDC_STATIC_NUMBEROFFILES )->ShowWindow( TRUE );
m_fn_vDisplayLastOperationTime( lEndTime - lStartTime );
/*
* build stat text
*/
p_szStatText = d_szStatText = (char *) malloc ( 10000 );
p_szStatText += sprintf( p_szStatText, "Number of Object -> %d\r\n", stStat.ulNumber );
p_szStatText += sprintf( p_szStatText, "Number of Points -> %d - %d\r\n", stStat.ulMinPoints, stStat.ulMaxPoints );
p_szStatText += sprintf( p_szStatText, "Number of Edges -> %d - %d\r\n", stStat.ulMinEdges, stStat.ulMaxEdges );
p_szStatText += sprintf( p_szStatText, "Number of Element -> %d - %d\r\n", stStat.ulMinElement, stStat.ulMaxElement );
GetDlgItem( IDC_EDIT_STAT )->SetWindowText( d_szStatText );
free ( d_szStatText );
}