477 lines
14 KiB
C
477 lines
14 KiB
C
|
#include "perfmon.h"
|
||
|
#include "cderr.h"
|
||
|
|
||
|
#include "alert.h" // for OpenAlert
|
||
|
#include "fileutil.h" // for FileOpen, FileRead
|
||
|
#include "grafdata.h" // for OpenChart
|
||
|
#include "log.h" // for OpenLog
|
||
|
#include "report.h" // for OpenReport
|
||
|
#include "utils.h" // for strempty
|
||
|
#include "perfmops.h" // for OpenWorkspace
|
||
|
#include "pmhelpid.h" // Help IDs
|
||
|
#include <dlgs.h> // for pshHelp
|
||
|
|
||
|
#define OptionsOFNStyle \
|
||
|
(OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK | OFN_EXPLORER)
|
||
|
// (OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK)
|
||
|
|
||
|
#define ExportOptionsOFNStyle \
|
||
|
(OFN_ENABLETEMPLATE | OFN_HIDEREADONLY | \
|
||
|
OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT | OFN_EXPLORER)
|
||
|
// OFN_SHOWHELP | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT)
|
||
|
|
||
|
extern BOOL APIENTRY ExportOptionsHookProc (HWND hDlg, UINT iMessage,
|
||
|
WPARAM wParam, LPARAM lParam) ;
|
||
|
|
||
|
BOOL APIENTRY FileOpenHookProc (HWND hDlg,
|
||
|
UINT iMessage,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
BOOL bHandled = FALSE ;
|
||
|
|
||
|
// only intercept the Help button and bring up our WinHelp data
|
||
|
if (iMessage == WM_COMMAND && wParam == pshHelp)
|
||
|
{
|
||
|
CallWinHelp (dwCurrentDlgID, hDlg) ;
|
||
|
bHandled = TRUE ;
|
||
|
}
|
||
|
else if (iMessage == WM_INITDIALOG)
|
||
|
{
|
||
|
WindowCenter (hDlg) ;
|
||
|
bHandled = TRUE ;
|
||
|
}
|
||
|
|
||
|
#if WINVER >= 0x0400
|
||
|
else if (iMessage == WM_NOTIFY)
|
||
|
{
|
||
|
LPOFNOTIFY pOfn;
|
||
|
pOfn = (LPOFNOTIFY)lParam;
|
||
|
|
||
|
switch (pOfn->hdr.code) {
|
||
|
case CDN_INITDONE:
|
||
|
WindowCenter (pOfn->hdr.hwndFrom) ;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
return (bHandled) ;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
BOOL FileOpen (HWND hWndParent, int nStringResourceID, LPTSTR lpInputFileName)
|
||
|
{
|
||
|
OPENFILENAME ofn ;
|
||
|
TCHAR szFileSpec [FilePathLen] ;
|
||
|
TCHAR szFileTitle [FilePathLen] ;
|
||
|
TCHAR szDialogTitle [FilePathLen] ;
|
||
|
HANDLE hFile ;
|
||
|
PERFFILEHEADER FileHeader ;
|
||
|
|
||
|
TCHAR aszOpenFilter[LongTextLen] ;
|
||
|
int StringLength ;
|
||
|
BOOL retCode ;
|
||
|
LPTSTR pFileName = NULL ;
|
||
|
BOOL bNoFile = FALSE;
|
||
|
|
||
|
if (lpInputFileName == NULL) {
|
||
|
bNoFile = TRUE;
|
||
|
}
|
||
|
else if (strempty(lpInputFileName)) {
|
||
|
bNoFile = TRUE;
|
||
|
}
|
||
|
|
||
|
aszOpenFilter[0] = 0;
|
||
|
if (bNoFile)
|
||
|
{
|
||
|
|
||
|
dwCurrentDlgID = HC_PM_idDlgFileOpen ;
|
||
|
|
||
|
// get the file extension strings
|
||
|
LoadString (hInstance, nStringResourceID, aszOpenFilter,
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
|
||
|
StringLength = lstrlen (aszOpenFilter) + 1 ;
|
||
|
LoadString (hInstance, nStringResourceID+1,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
|
||
|
#ifdef ADVANCED_PERFMON
|
||
|
// get workspace file extension strings
|
||
|
LoadString (hInstance, IDS_WORKSPACEFILE,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
LoadString (hInstance, IDS_WORKSPACEFILEEXT,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1;
|
||
|
#endif
|
||
|
|
||
|
// get all file extension strings
|
||
|
LoadString (hInstance, IDS_ALLFILES,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
LoadString (hInstance, IDS_ALLFILESEXT,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
|
||
|
|
||
|
// setup the end strings
|
||
|
aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
|
||
|
|
||
|
strclr (szFileSpec) ;
|
||
|
strclr (szFileTitle) ;
|
||
|
|
||
|
StringLoad (IDS_FILEOPEN_TITLE, szDialogTitle) ;
|
||
|
memset (&ofn, 0, sizeof(OPENFILENAME)) ;
|
||
|
ofn.lStructSize = sizeof(OPENFILENAME) ;
|
||
|
ofn.hwndOwner = hWndParent ;
|
||
|
ofn.hInstance = hInstance;
|
||
|
ofn.lpstrTitle = szDialogTitle ;
|
||
|
ofn.lpstrFilter = aszOpenFilter ;
|
||
|
ofn.nFilterIndex = 1L ;
|
||
|
|
||
|
ofn.lpstrFile = szFileSpec;
|
||
|
ofn.nMaxFile = sizeof(szFileSpec);
|
||
|
ofn.lpstrFileTitle = szFileTitle;
|
||
|
ofn.nMaxFileTitle = sizeof(szFileTitle);
|
||
|
// ofn.Flags = OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK ;
|
||
|
ofn.Flags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK | OFN_EXPLORER;
|
||
|
ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
|
||
|
|
||
|
if (!GetOpenFileName(&ofn))
|
||
|
{
|
||
|
dwCurrentDlgID = 0 ;
|
||
|
return (FALSE) ;
|
||
|
}
|
||
|
|
||
|
dwCurrentDlgID = 0 ;
|
||
|
|
||
|
hFile = FileHandleOpen (szFileSpec) ;
|
||
|
pFileName = szFileSpec ;
|
||
|
|
||
|
} // NULL lpFileName
|
||
|
|
||
|
else
|
||
|
{
|
||
|
// open the input file
|
||
|
hFile = FileHandleOpen (lpInputFileName) ;
|
||
|
if (hFile && hFile != INVALID_HANDLE_VALUE &&
|
||
|
SearchPath (NULL, lpInputFileName, NULL,
|
||
|
sizeof(szFileSpec)/sizeof(TCHAR) - 1,
|
||
|
szFileSpec, &pFileName))
|
||
|
{
|
||
|
pFileName = szFileSpec ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pFileName = NULL ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!hFile || hFile == INVALID_HANDLE_VALUE)
|
||
|
{
|
||
|
return (FALSE) ;
|
||
|
}
|
||
|
|
||
|
if (!FileRead (hFile, &FileHeader, sizeof (FileHeader)))
|
||
|
{
|
||
|
CloseHandle (hFile) ;
|
||
|
if (bNoFile)
|
||
|
{
|
||
|
DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
|
||
|
}
|
||
|
return (FALSE) ;
|
||
|
}
|
||
|
|
||
|
|
||
|
//=============================//
|
||
|
// Chart File? //
|
||
|
//=============================//
|
||
|
|
||
|
if (strsame (FileHeader.szSignature, szPerfChartSignature))
|
||
|
{
|
||
|
retCode = OpenChart (hWndGraph,
|
||
|
hFile,
|
||
|
FileHeader.dwMajorVersion,
|
||
|
FileHeader.dwMinorVersion,
|
||
|
TRUE) ;
|
||
|
if (retCode)
|
||
|
{
|
||
|
ChangeSaveFileName (pFileName, IDM_VIEWCHART) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
goto ErrExit ;
|
||
|
}
|
||
|
return (retCode) ;
|
||
|
}
|
||
|
|
||
|
#ifdef ADVANCED_PERFMON
|
||
|
//=============================//
|
||
|
// Alert File? //
|
||
|
//=============================//
|
||
|
|
||
|
if (strsame (FileHeader.szSignature, szPerfAlertSignature))
|
||
|
{
|
||
|
retCode = OpenAlert (hWndAlert,
|
||
|
hFile,
|
||
|
FileHeader.dwMajorVersion,
|
||
|
FileHeader.dwMinorVersion,
|
||
|
TRUE) ;
|
||
|
if (retCode)
|
||
|
{
|
||
|
ChangeSaveFileName (pFileName, IDM_VIEWALERT) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
goto ErrExit ;
|
||
|
}
|
||
|
|
||
|
return (retCode) ;
|
||
|
}
|
||
|
|
||
|
|
||
|
//=============================//
|
||
|
// Log File? //
|
||
|
//=============================//
|
||
|
|
||
|
if (strsame (FileHeader.szSignature, szPerfLogSignature))
|
||
|
{
|
||
|
retCode = OpenLog (hWndLog,
|
||
|
hFile,
|
||
|
FileHeader.dwMajorVersion,
|
||
|
FileHeader.dwMinorVersion,
|
||
|
TRUE) ;
|
||
|
if (retCode)
|
||
|
{
|
||
|
ChangeSaveFileName (pFileName, IDM_VIEWLOG) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
goto ErrExit ;
|
||
|
}
|
||
|
|
||
|
return (retCode) ;
|
||
|
}
|
||
|
|
||
|
//=============================//
|
||
|
// Report File? //
|
||
|
//=============================//
|
||
|
|
||
|
if (strsame (FileHeader.szSignature, szPerfReportSignature))
|
||
|
{
|
||
|
retCode = OpenReport (hWndReport,
|
||
|
hFile,
|
||
|
FileHeader.dwMajorVersion,
|
||
|
FileHeader.dwMinorVersion,
|
||
|
TRUE) ;
|
||
|
if (retCode)
|
||
|
{
|
||
|
ChangeSaveFileName (pFileName, IDM_VIEWREPORT) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
goto ErrExit ;
|
||
|
}
|
||
|
|
||
|
return (retCode) ;
|
||
|
}
|
||
|
|
||
|
//=============================//
|
||
|
// Workspace File? //
|
||
|
//=============================//
|
||
|
|
||
|
if (strsame (FileHeader.szSignature, szPerfWorkspaceSignature))
|
||
|
{
|
||
|
retCode = OpenWorkspace (hFile,
|
||
|
FileHeader.dwMajorVersion,
|
||
|
FileHeader.dwMinorVersion) ;
|
||
|
if (retCode)
|
||
|
{
|
||
|
ChangeSaveFileName (pFileName, IDM_WORKSPACE) ;
|
||
|
return (TRUE) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
goto ErrExit ;
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
//=============================//
|
||
|
// Unknown file type //
|
||
|
//=============================//
|
||
|
CloseHandle (hFile) ;
|
||
|
|
||
|
ErrExit:
|
||
|
|
||
|
DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
|
||
|
return (FALSE) ;
|
||
|
} // FileOpen
|
||
|
|
||
|
|
||
|
BOOL FileGetName (HWND hWndParent, int nStringResourceID, LPTSTR lpFileName)
|
||
|
{
|
||
|
OPENFILENAME ofn ;
|
||
|
TCHAR szFileSpec [FilePathLen] ;
|
||
|
TCHAR szFileTitle [FilePathLen] ;
|
||
|
TCHAR szDialogTitle [FilePathLen] ;
|
||
|
TCHAR aszOpenFilter[LongTextLen] ;
|
||
|
TCHAR aszDefaultExt[FileExtLen];
|
||
|
int StringLength ;
|
||
|
int nExportExtId = 0;
|
||
|
|
||
|
aszOpenFilter[0] = 0;
|
||
|
if (lpFileName)
|
||
|
{
|
||
|
|
||
|
if (nStringResourceID != IDS_EXPORTFILE)
|
||
|
{
|
||
|
// get the file extension strings
|
||
|
LoadString (hInstance, nStringResourceID,
|
||
|
aszOpenFilter,
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) ) ;
|
||
|
StringLength = lstrlen (aszOpenFilter) + 1 ;
|
||
|
LoadString (hInstance, nStringResourceID+1,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
// get all file extension strings
|
||
|
LoadString (hInstance, IDS_ALLFILES,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
LoadString (hInstance, IDS_ALLFILESEXT,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// get the Export file extension based on the current delimiter
|
||
|
int FirstExtensionID, SecondExtensionID ;
|
||
|
|
||
|
if (pDelimiter == TabStr)
|
||
|
{
|
||
|
FirstExtensionID = IDS_EXPORTFILETSV ;
|
||
|
SecondExtensionID = IDS_EXPORTFILE ;
|
||
|
nExportExtId = IDS_DEF_EXPORT_TSV;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
FirstExtensionID = IDS_EXPORTFILE ;
|
||
|
SecondExtensionID = IDS_EXPORTFILETSV ;
|
||
|
nExportExtId = IDS_DEF_EXPORT_CSV;
|
||
|
}
|
||
|
|
||
|
LoadString (hInstance, FirstExtensionID,
|
||
|
aszOpenFilter,
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) ) ;
|
||
|
StringLength = lstrlen (aszOpenFilter) + 1 ;
|
||
|
LoadString (hInstance, FirstExtensionID+1,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
// get all file extension strings
|
||
|
LoadString (hInstance, SecondExtensionID,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
|
||
|
LoadString (hInstance, SecondExtensionID+1,
|
||
|
&aszOpenFilter[StringLength],
|
||
|
sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
|
||
|
|
||
|
}
|
||
|
|
||
|
// setup the end strings
|
||
|
StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
|
||
|
aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
|
||
|
|
||
|
strclr (szFileSpec) ;
|
||
|
strclr (szFileTitle) ;
|
||
|
|
||
|
if (nStringResourceID == IDS_EXPORTFILE)
|
||
|
{
|
||
|
dwCurrentDlgID = HC_PM_idDlgFileExport ;
|
||
|
StringLoad (IDS_EXPORTAS_TITLE, szDialogTitle) ;
|
||
|
}
|
||
|
else if (nStringResourceID == IDS_WORKSPACEFILE)
|
||
|
{
|
||
|
dwCurrentDlgID = HC_PM_idDlgFileSaveWorkSpace ;
|
||
|
StringLoad (IDS_SAVEASW_TITLE, szDialogTitle) ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dwCurrentDlgID = HC_PM_idDlgFileSaveAs ;
|
||
|
StringLoad (IDS_SAVEAS_TITLE, szDialogTitle) ;
|
||
|
}
|
||
|
|
||
|
memset (&ofn, 0, sizeof(OPENFILENAME)) ;
|
||
|
ofn.lStructSize = sizeof(OPENFILENAME) ;
|
||
|
ofn.hwndOwner = hWndParent ;
|
||
|
ofn.hInstance = hInstance;
|
||
|
ofn.lpstrTitle = szDialogTitle ;
|
||
|
ofn.lpstrFilter = aszOpenFilter ;
|
||
|
ofn.nFilterIndex = 1L ;
|
||
|
|
||
|
ofn.lpstrFile = szFileSpec;
|
||
|
ofn.nMaxFile = sizeof(szFileSpec);
|
||
|
ofn.lpstrFileTitle = szFileTitle;
|
||
|
ofn.nMaxFileTitle = sizeof(szFileTitle);
|
||
|
|
||
|
if (nStringResourceID == IDS_EXPORTFILE)
|
||
|
{
|
||
|
// get default file extension
|
||
|
if (LoadString (hInstance, nExportExtId,
|
||
|
aszDefaultExt,
|
||
|
sizeof(aszDefaultExt) / sizeof(TCHAR)) > 0) {
|
||
|
ofn.lpstrDefExt = aszDefaultExt;
|
||
|
} else {
|
||
|
ofn.lpstrDefExt = NULL; // no default extenstion
|
||
|
}
|
||
|
ofn.Flags = ExportOptionsOFNStyle ;
|
||
|
ofn.lpfnHook = (LPOFNHOOKPROC) ExportOptionsHookProc ;
|
||
|
ofn.lpTemplateName = idDlgExportOptions ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// get default file extension
|
||
|
if (LoadString (hInstance, nStringResourceID+2,
|
||
|
aszDefaultExt,
|
||
|
sizeof(aszDefaultExt) / sizeof(TCHAR)) > 0) {
|
||
|
ofn.lpstrDefExt = aszDefaultExt;
|
||
|
} else {
|
||
|
ofn.lpstrDefExt = NULL; // no default extenstion
|
||
|
}
|
||
|
ofn.Flags = OptionsOFNStyle ;
|
||
|
ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
|
||
|
}
|
||
|
|
||
|
if (!GetSaveFileName(&ofn))
|
||
|
{
|
||
|
dwCurrentDlgID = 0 ;
|
||
|
return (FALSE) ;
|
||
|
}
|
||
|
dwCurrentDlgID = 0 ;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return (FALSE) ;
|
||
|
}
|
||
|
|
||
|
lstrcpy (lpFileName, ofn.lpstrFile) ;
|
||
|
|
||
|
return (TRUE) ;
|
||
|
} // FileGetName
|
||
|
|
||
|
|