home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / perfmon / datasrc.c < prev    next >
C/C++ Source or Header  |  1994-10-13  |  11KB  |  347 lines

  1.  
  2. //==========================================================================//
  3. //                                  Includes                                //
  4. //==========================================================================//
  5.  
  6. #include "perfmon.h"
  7. #include "datasrc.h"       // External declarations for this file
  8.  
  9. #include "fileutil.h"      // for FileErrorMessageBox (whatever)
  10. #include "grafdata.h"      // for ResetGraph
  11. #include "alert.h"         // for ResetAlert
  12. #include "log.h"           // for ResetLog
  13. #include "report.h"        // for ResetReport
  14. #include "playback.h"
  15. #include "status.h"
  16. #include "utils.h"
  17. #include "pmhelpid.h"      // Help IDs
  18. #include "fileopen.h"      // FileOpneHookProc
  19. #include "pmemory.h"       // for MemoryAllocate & MemoryFree
  20. #include "perfmops.h"      // for ShowPerfmonWindowText
  21.  
  22. //==========================================================================//
  23. //                                Local Data                                //
  24. //==========================================================================//
  25.  
  26.  
  27. BOOL           bIgnoreFirstChange ;
  28. BOOL           bDataSourceNow ;
  29. BOOL           bDataSourcePrevious ;
  30. BOOL           bLogFileNameChanged ;
  31.  
  32. LPTSTR           pszLogFilePath ;
  33. LPTSTR           pszLogFileTitle ;
  34. //TCHAR          szLogFilePath [FilePathLen + 1] ;
  35. //TCHAR          szLogFileTitle [FilePathLen + 1] ;
  36.  
  37.  
  38. //==========================================================================//
  39. //                              Local Functions                             //
  40. //==========================================================================//
  41.  
  42.  
  43.  
  44. void static UpdateLogName (HDLG hDlg)
  45.    {
  46.    DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFilePath) ;
  47. //   DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFileTitle) ;
  48.    }
  49.  
  50.  
  51.  
  52. void OnChangeLog (HWND hWndParent)
  53.    {  // OnChangeLog
  54.    OPENFILENAME   ofn ;
  55.    TCHAR          szOpenLog [WindowCaptionLen + 1] ;
  56.    TCHAR          aszOpenFilter[LongTextLen] ;
  57.    TCHAR          szMyLogFilePath [FilePathLen + 1] ;
  58.    int            StringLength ;
  59.    DWORD          SaveCurrentDlgID = dwCurrentDlgID ;
  60.  
  61.    //=============================//
  62.    // Get Log File                //
  63.    //=============================//
  64.  
  65.    StringLoad (IDS_OPENLOG, szOpenLog) ;
  66.    StringLoad (IDS_SAVELOGFILEEXT, szMyLogFilePath) ;
  67.  
  68.    // load the log file extension
  69.    LoadString (hInstance, IDS_SAVELOGFILE, aszOpenFilter,
  70.       sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
  71.    StringLength = lstrlen (aszOpenFilter) + 1 ;
  72.    LoadString (hInstance, IDS_SAVELOGFILEEXT,
  73.       &aszOpenFilter[StringLength],
  74.       sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  75.    StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
  76.  
  77.    // setup the end strings
  78.    aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
  79.  
  80.  
  81.    ofn.lStructSize = sizeof (OPENFILENAME) ;
  82.    ofn.hwndOwner = hWndParent ;
  83.    ofn.hInstance = hInstance ;
  84.    ofn.lpstrFilter = aszOpenFilter ;
  85.    ofn.lpstrCustomFilter = NULL ;
  86.    ofn.nMaxCustFilter = 0 ;
  87.    ofn.nFilterIndex = 1;
  88.    ofn.lpstrFile = szMyLogFilePath ;
  89.    ofn.nMaxFile = FilePathLen * sizeof (TCHAR) ;   
  90.    ofn.lpstrFileTitle = pszLogFileTitle ;
  91.    ofn.nMaxFileTitle = FilePathLen * sizeof (TCHAR) ;
  92.    ofn.lpstrInitialDir = NULL ;
  93.    ofn.lpstrTitle = szOpenLog ;
  94.    ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | 
  95.                OFN_PATHMUSTEXIST | OFN_SHOWHELP  | OFN_ENABLEHOOK ;
  96.    ofn.lCustData = 0L ;
  97.    ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
  98.    ofn.lpstrDefExt = (LPTSTR)NULL;
  99.  
  100.    dwCurrentDlgID  = HC_PM_idDlgOptionOpenLogFile ;
  101.    if (GetOpenFileName (&ofn))
  102.       {
  103.       if (!strsame(pszLogFilePath, szMyLogFilePath))
  104.          {
  105.          int    FileNameOffset ;
  106.          LPTSTR pFileName ;
  107.  
  108.          bLogFileNameChanged |= TRUE ;
  109.          lstrcpy (pszLogFilePath, szMyLogFilePath) ;
  110.          lstrcpy (pszLogFileTitle, ofn.lpstrFileTitle) ;
  111.  
  112.          pFileName = ExtractFileName (szMyLogFilePath) ;
  113.          if (pFileName != szMyLogFilePath)
  114.             {
  115.             FileNameOffset = pFileName - szMyLogFilePath ;
  116.             szMyLogFilePath[FileNameOffset] = TEXT('\0') ;
  117.             SetCurrentDirectory (szMyLogFilePath) ;
  118.             }
  119.          UpdateLogName (hWndParent) ;
  120.          }
  121.       }
  122.  
  123.    // restore the global before exit
  124.    dwCurrentDlgID  = SaveCurrentDlgID ;
  125.    }  // OnChangeLog
  126.  
  127.  
  128. //==========================================================================//
  129. //                              Message Handlers                            //
  130. //==========================================================================//
  131.  
  132.  
  133. void static OnInitDialog (HDLG hDlg)
  134.    {
  135.    bLogFileNameChanged = FALSE ;
  136.  
  137.    bIgnoreFirstChange = TRUE ;
  138.  
  139.    bDataSourcePrevious = bDataSourceNow = !PlayingBackLog () ;
  140.  
  141.    CheckRadioButton (hDlg, IDD_DATASOURCENOW, IDD_DATASOURCEFILE,
  142.                      bDataSourceNow ? IDD_DATASOURCENOW : IDD_DATASOURCEFILE) ;
  143.    UpdateLogName (hDlg) ;
  144.  
  145.    EditSetLimit (GetDlgItem(hDlg, IDD_DATASOURCEFILENAME),
  146.       FilePathLen - 1) ;
  147.  
  148.    WindowCenter (hDlg) ;
  149.  
  150.    dwCurrentDlgID = HC_PM_idDlgOptionDataFrom ;
  151.    }
  152.  
  153.  
  154. void /*static*/ OnDataSourceOK (HDLG hDlg)
  155.    {  // OnOK
  156.    BOOL     bHaveResetPerfmon ;
  157.    INT      RetCode = 0 ;
  158.  
  159.    bHaveResetPerfmon = FALSE;
  160.    if (!BoolEqual (bDataSourceNow, bDataSourcePrevious) ||
  161.        (bLogFileNameChanged && !bDataSourceNow) )
  162.       {
  163.       if (PlayingBackLog () && bDataSourceNow | bLogFileNameChanged)
  164.          {
  165.          CloseInputLog (hWndMain) ;
  166.          bHaveResetPerfmon = TRUE ;
  167.          }
  168.  
  169.       if (!bDataSourceNow)
  170.          {
  171.          if (!bHaveResetPerfmon)
  172.             {
  173.             ResetGraphView (hWndGraph) ;
  174.             ResetAlertView (hWndAlert) ;
  175.             ResetLogView (hWndLog) ;
  176.             ResetReportView (hWndReport) ;
  177.  
  178.             if (pWorkSpaceFullFileName)
  179.                {
  180.                MemoryFree (pWorkSpaceFullFileName) ;
  181.                pWorkSpaceFileName = NULL ;
  182.                pWorkSpaceFullFileName = NULL ;
  183.                }
  184.             ShowPerfmonWindowText () ;
  185.             }
  186.  
  187.          GetDlgItemText (hDlg, IDD_DATASOURCEFILENAME,
  188.             pszLogFilePath, FilePathLen - 1) ;         
  189.          lstrcpy (pszLogFileTitle, pszLogFilePath);
  190.    
  191.          if (RetCode = OpenPlayback (pszLogFilePath, pszLogFileTitle))
  192.             {
  193.             DlgErrorBox (hDlg, RetCode, pszLogFileTitle) ;
  194.             }
  195.          }
  196.  
  197.       StatusLineReady (hWndStatus) ;
  198.       }
  199.  
  200.    if (!BoolEqual (bDataSourceNow, bDataSourcePrevious))
  201.       {
  202.       if (bDataSourceNow)
  203.          {
  204.          // Set Priority high           
  205.          SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS) ;
  206.          SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST) ;
  207.          }
  208.       else
  209.          {
  210.          // Use a lower priority for Playing back log   
  211.          SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS) ;
  212.          SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL) ;
  213.          }
  214.       }
  215.  
  216.    if (RetCode == 0)
  217.       {
  218.       EndDialog (hDlg, 1) ;
  219.       }
  220.    }  // OnOK      
  221.  
  222.  
  223.  
  224. //==========================================================================//
  225. //                             Exported Functions                           //
  226. //==========================================================================//
  227.  
  228.  
  229. int FAR WINAPI DataSourceDlgProc (HWND hDlg, 
  230.                                   unsigned iMessage, 
  231.                                   WPARAM wParam, 
  232.                                   LPARAM lParam)
  233.    {
  234.    BOOL           bHandled ;
  235.  
  236.    bHandled = TRUE ;
  237.    switch (iMessage)
  238.       {
  239.       case WM_INITDIALOG:
  240.          OnInitDialog (hDlg) ;
  241.          return  (TRUE) ;
  242.  
  243.       case WM_CLOSE:
  244.          dwCurrentDlgID = 0 ;
  245.          EndDialog (hDlg, 0) ;
  246.          break ;
  247.  
  248.       case WM_COMMAND:
  249.          switch(LOWORD(wParam))
  250.             {
  251.             case IDD_DATASOURCEFILENAME:
  252.                if (bIgnoreFirstChange)
  253.                   {
  254.                   bIgnoreFirstChange = FALSE;
  255.                   }
  256.  
  257.                else if (HIWORD(wParam) == EN_UPDATE && !bLogFileNameChanged) 
  258.                   {
  259.                   bLogFileNameChanged = TRUE;
  260.                   CheckRadioButton (hDlg,
  261.                                   IDD_DATASOURCENOW,
  262.                                   IDD_DATASOURCEFILE,
  263.                                   IDD_DATASOURCEFILE) ;
  264.                   bDataSourceNow = FALSE ;
  265.                   }
  266.                break ;
  267.  
  268.             case IDD_DATASOURCECHANGEFILE:
  269.                OnChangeLog (hDlg) ;
  270.                if (bLogFileNameChanged)
  271.                   {
  272.                   CheckRadioButton (hDlg,
  273.                                     IDD_DATASOURCENOW,
  274.                                     IDD_DATASOURCEFILE,
  275.                                     IDD_DATASOURCEFILE) ;
  276.                   bDataSourceNow = FALSE ;
  277.                   }
  278.                break ;
  279.  
  280.             case IDD_DATASOURCEFILE:
  281.                bDataSourceNow = FALSE ;
  282.                break ;
  283.  
  284.             case IDD_DATASOURCENOW:
  285.                bDataSourceNow = TRUE ;
  286.                break ;
  287.  
  288.             case IDD_OK:
  289.                dwCurrentDlgID = 0 ;
  290.                OnDataSourceOK (hDlg) ;
  291.                break ;
  292.  
  293.             case IDD_CANCEL:
  294.                dwCurrentDlgID = 0 ;
  295.                EndDialog (hDlg, 0) ;
  296.                break ;
  297.  
  298.             case IDD_DATASOURCEHELP:
  299.                CallWinHelp (dwCurrentDlgID) ;
  300.                break ;
  301.  
  302.             default:
  303.                bHandled = FALSE ;
  304.                break;
  305.             }
  306.          break;
  307.  
  308.  
  309.       default:
  310.             bHandled = FALSE ;
  311.          break ;            
  312.       }  // switch
  313.  
  314.    return (bHandled) ;
  315.    }  // DataSourceDlgProc
  316.  
  317.  
  318.  
  319. BOOL DisplayDataSourceOptions (HWND hWndParent)
  320. /*
  321.    Effect:        Put up Perfmon's Data Source Options Display dialog,
  322.                   which allows
  323.                   the user to select the source of data input: real
  324.                   time or log file.
  325. */
  326.    {  // DisplayDisplayOptions
  327.    BOOL     retCode ;
  328.  
  329.    pszLogFilePath  = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ;
  330.    pszLogFileTitle = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ;
  331.    
  332.    lstrcpy (pszLogFilePath, PlaybackLog.szFilePath) ;
  333.    lstrcpy (pszLogFileTitle, PlaybackLog.szFileTitle) ;
  334.  
  335.    retCode = DialogBox (hInstance, idDlgDataSource,
  336.                       hWndParent, (DLGPROC) DataSourceDlgProc) ;
  337.  
  338.    MemoryFree (pszLogFilePath) ;
  339.    MemoryFree (pszLogFileTitle) ;
  340.  
  341.    return (retCode) ;
  342.  
  343.    }  // DisplayDisplayOptions
  344.  
  345.  
  346. 
  347.