summaryrefslogtreecommitdiffstats
path: root/private/sdktools/perfmon/datasrc.c
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/sdktools/perfmon/datasrc.c
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/sdktools/perfmon/datasrc.c')
-rw-r--r--private/sdktools/perfmon/datasrc.c349
1 files changed, 349 insertions, 0 deletions
diff --git a/private/sdktools/perfmon/datasrc.c b/private/sdktools/perfmon/datasrc.c
new file mode 100644
index 000000000..c99a4a9e1
--- /dev/null
+++ b/private/sdktools/perfmon/datasrc.c
@@ -0,0 +1,349 @@
+
+//==========================================================================//
+// Includes //
+//==========================================================================//
+
+#include "perfmon.h"
+#include "datasrc.h" // External declarations for this file
+
+#include "fileutil.h" // for FileErrorMessageBox (whatever)
+#include "grafdata.h" // for ResetGraph
+#include "alert.h" // for ResetAlert
+#include "log.h" // for ResetLog
+#include "report.h" // for ResetReport
+#include "playback.h"
+#include "status.h"
+#include "utils.h"
+#include "pmhelpid.h" // Help IDs
+#include "fileopen.h" // FileOpneHookProc
+#include "pmemory.h" // for MemoryAllocate & MemoryFree
+#include "perfmops.h" // for ShowPerfmonWindowText
+
+//==========================================================================//
+// Local Data //
+//==========================================================================//
+
+
+BOOL bIgnoreFirstChange ;
+BOOL bDataSourceNow ;
+BOOL bDataSourcePrevious ;
+BOOL bLogFileNameChanged ;
+
+LPTSTR pszLogFilePath ;
+LPTSTR pszLogFileTitle ;
+//TCHAR szLogFilePath [FilePathLen + 1] ;
+//TCHAR szLogFileTitle [FilePathLen + 1] ;
+
+
+//==========================================================================//
+// Local Functions //
+//==========================================================================//
+
+
+
+void static UpdateLogName (HDLG hDlg)
+ {
+ DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFilePath) ;
+// DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFileTitle) ;
+ }
+
+
+
+void OnChangeLog (HWND hWndParent)
+ { // OnChangeLog
+ OPENFILENAME ofn ;
+ TCHAR szOpenLog [WindowCaptionLen + 1] ;
+ TCHAR aszOpenFilter[LongTextLen] ;
+ TCHAR szMyLogFilePath [FilePathLen + 1] ;
+ int StringLength ;
+ DWORD SaveCurrentDlgID = dwCurrentDlgID ;
+
+ //=============================//
+ // Get Log File //
+ //=============================//
+
+ StringLoad (IDS_OPENLOG, szOpenLog) ;
+ StringLoad (IDS_SAVELOGFILEEXT, szMyLogFilePath) ;
+
+ // load the log file extension
+ LoadString (hInstance, IDS_SAVELOGFILE, aszOpenFilter,
+ sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
+ StringLength = lstrlen (aszOpenFilter) + 1 ;
+ LoadString (hInstance, IDS_SAVELOGFILEEXT,
+ &aszOpenFilter[StringLength],
+ sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
+ StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
+
+ // setup the end strings
+ aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
+
+
+ ofn.lStructSize = sizeof (OPENFILENAME) ;
+ ofn.hwndOwner = hWndParent ;
+ ofn.hInstance = hInstance ;
+ ofn.lpstrFilter = aszOpenFilter ;
+ ofn.lpstrCustomFilter = NULL ;
+ ofn.nMaxCustFilter = 0 ;
+ ofn.nFilterIndex = 1;
+ ofn.lpstrFile = szMyLogFilePath ;
+ ofn.nMaxFile = FilePathLen * sizeof (TCHAR) ;
+ ofn.lpstrFileTitle = pszLogFileTitle ;
+ ofn.nMaxFileTitle = FilePathLen * sizeof (TCHAR) ;
+ ofn.lpstrInitialDir = NULL ;
+ ofn.lpstrTitle = szOpenLog ;
+ ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
+// OFN_PATHMUSTEXIST | OFN_SHOWHELP | OFN_ENABLEHOOK ;
+ OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_EXPLORER;
+ ofn.lCustData = 0L ;
+ ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
+ ofn.lpstrDefExt = (LPTSTR)NULL;
+
+ dwCurrentDlgID = HC_PM_idDlgOptionOpenLogFile ;
+ if (GetOpenFileName (&ofn))
+ {
+ if (!strsame(pszLogFilePath, szMyLogFilePath))
+ {
+ int FileNameOffset ;
+ LPTSTR pFileName ;
+
+ bLogFileNameChanged |= TRUE ;
+ lstrcpy (pszLogFilePath, szMyLogFilePath) ;
+ lstrcpy (pszLogFileTitle, ofn.lpstrFileTitle) ;
+
+ pFileName = ExtractFileName (szMyLogFilePath) ;
+ if (pFileName != szMyLogFilePath)
+ {
+ FileNameOffset = pFileName - szMyLogFilePath ;
+ szMyLogFilePath[FileNameOffset] = TEXT('\0') ;
+ SetCurrentDirectory (szMyLogFilePath) ;
+ }
+ UpdateLogName (hWndParent) ;
+ }
+ }
+
+ // restore the global before exit
+ dwCurrentDlgID = SaveCurrentDlgID ;
+ } // OnChangeLog
+
+
+//==========================================================================//
+// Message Handlers //
+//==========================================================================//
+
+
+void static OnInitDialog (HDLG hDlg)
+ {
+ bLogFileNameChanged = FALSE ;
+
+ bIgnoreFirstChange = TRUE ;
+
+ bDataSourcePrevious = bDataSourceNow = !PlayingBackLog () ;
+
+ CheckRadioButton (hDlg, IDD_DATASOURCENOW, IDD_DATASOURCEFILE,
+ bDataSourceNow ? IDD_DATASOURCENOW : IDD_DATASOURCEFILE) ;
+ UpdateLogName (hDlg) ;
+
+ EditSetLimit (GetDlgItem(hDlg, IDD_DATASOURCEFILENAME),
+ FilePathLen - 1) ;
+
+ WindowCenter (hDlg) ;
+
+ dwCurrentDlgID = HC_PM_idDlgOptionDataFrom ;
+ }
+
+
+void /*static*/ OnDataSourceOK (HDLG hDlg)
+ { // OnOK
+ BOOL bHaveResetPerfmon ;
+ INT RetCode = 0 ;
+
+ bHaveResetPerfmon = FALSE;
+ if (!BoolEqual (bDataSourceNow, bDataSourcePrevious) ||
+ (bLogFileNameChanged && !bDataSourceNow) )
+ {
+ if (PlayingBackLog () && bDataSourceNow | bLogFileNameChanged)
+ {
+ CloseInputLog (hWndMain) ;
+ bHaveResetPerfmon = TRUE ;
+ }
+
+ if (!bDataSourceNow)
+ {
+ if (!bHaveResetPerfmon)
+ {
+ ResetGraphView (hWndGraph) ;
+ ResetAlertView (hWndAlert) ;
+ ResetLogView (hWndLog) ;
+ ResetReportView (hWndReport) ;
+
+ if (pWorkSpaceFullFileName)
+ {
+ MemoryFree (pWorkSpaceFullFileName) ;
+ pWorkSpaceFileName = NULL ;
+ pWorkSpaceFullFileName = NULL ;
+ }
+ ShowPerfmonWindowText () ;
+ }
+
+ GetDlgItemText (hDlg, IDD_DATASOURCEFILENAME,
+ pszLogFilePath, FilePathLen - 1) ;
+ lstrcpy (pszLogFileTitle, pszLogFilePath);
+
+ if (RetCode = OpenPlayback (pszLogFilePath, pszLogFileTitle))
+ {
+ DlgErrorBox (hDlg, RetCode, pszLogFileTitle) ;
+ }
+ }
+
+ StatusLineReady (hWndStatus) ;
+ }
+
+ if (!BoolEqual (bDataSourceNow, bDataSourcePrevious))
+ {
+ if (bDataSourceNow)
+ {
+ // Set Priority high
+ SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS) ;
+ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST) ;
+ }
+ else
+ {
+ // Use a lower priority for Playing back log
+ SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS) ;
+ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL) ;
+ }
+ }
+
+ if (RetCode == 0)
+ {
+ EndDialog (hDlg, 1) ;
+ }
+ } // OnOK
+
+
+
+//==========================================================================//
+// Exported Functions //
+//==========================================================================//
+
+
+int FAR WINAPI DataSourceDlgProc (HWND hDlg,
+ unsigned iMessage,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ BOOL bHandled ;
+
+ bHandled = TRUE ;
+ switch (iMessage)
+ {
+ case WM_INITDIALOG:
+ OnInitDialog (hDlg) ;
+ return (TRUE) ;
+
+ case WM_CLOSE:
+ EndDialog (hDlg, 0) ;
+ break ;
+
+ case WM_DESTROY:
+ dwCurrentDlgID = 0 ;
+ break;
+
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDD_DATASOURCEFILENAME:
+ if (bIgnoreFirstChange)
+ {
+ bIgnoreFirstChange = FALSE;
+ }
+
+ else if (HIWORD(wParam) == EN_UPDATE && !bLogFileNameChanged)
+ {
+ bLogFileNameChanged = TRUE;
+ CheckRadioButton (hDlg,
+ IDD_DATASOURCENOW,
+ IDD_DATASOURCEFILE,
+ IDD_DATASOURCEFILE) ;
+ bDataSourceNow = FALSE ;
+ }
+ break ;
+
+ case IDD_DATASOURCECHANGEFILE:
+ OnChangeLog (hDlg) ;
+ if (bLogFileNameChanged)
+ {
+ CheckRadioButton (hDlg,
+ IDD_DATASOURCENOW,
+ IDD_DATASOURCEFILE,
+ IDD_DATASOURCEFILE) ;
+ bDataSourceNow = FALSE ;
+ }
+ break ;
+
+ case IDD_DATASOURCEFILE:
+ bDataSourceNow = FALSE ;
+ break ;
+
+ case IDD_DATASOURCENOW:
+ bDataSourceNow = TRUE ;
+ break ;
+
+ case IDD_OK:
+ OnDataSourceOK (hDlg) ;
+ break ;
+
+ case IDD_CANCEL:
+ EndDialog (hDlg, 0) ;
+ break ;
+
+ case IDD_DATASOURCEHELP:
+ CallWinHelp (dwCurrentDlgID) ;
+ break ;
+
+ default:
+ bHandled = FALSE ;
+ break;
+ }
+ break;
+
+
+ default:
+ bHandled = FALSE ;
+ break ;
+ } // switch
+
+ return (bHandled) ;
+ } // DataSourceDlgProc
+
+
+
+BOOL DisplayDataSourceOptions (HWND hWndParent)
+/*
+ Effect: Put up Perfmon's Data Source Options Display dialog,
+ which allows
+ the user to select the source of data input: real
+ time or log file.
+*/
+ { // DisplayDisplayOptions
+ BOOL retCode ;
+
+ pszLogFilePath = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ;
+ pszLogFileTitle = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ;
+
+ lstrcpy (pszLogFilePath, PlaybackLog.szFilePath) ;
+ lstrcpy (pszLogFileTitle, PlaybackLog.szFileTitle) ;
+
+ retCode = DialogBox (hInstance, idDlgDataSource,
+ hWndParent, (DLGPROC) DataSourceDlgProc) ;
+
+ MemoryFree (pszLogFilePath) ;
+ MemoryFree (pszLogFileTitle) ;
+
+ return (retCode) ;
+
+ } // DisplayDisplayOptions
+
+
+
+