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 / addlog.c < prev    next >
Text File  |  1994-10-13  |  10KB  |  335 lines

  1.  
  2. //==========================================================================//
  3. //                                  Includes                                //
  4. //==========================================================================//
  5.  
  6. #include "perfmon.h"
  7. #include "utils.h"
  8. #include "log.h"
  9. #include "pmemory.h"    // for MemoryXXX (malloc-like) routines
  10. #include "perfdata.h"
  11. #include "perfmops.h"
  12. #include "system.h"     // for SystemGet
  13. #include "playback.h"   // for PlayingBackLog & DataFromIndexPosition
  14. #include "pmhelpid.h"   // Help IDs
  15.  
  16. //==========================================================================//
  17. //                               External Data                                //
  18. //==========================================================================//
  19.  
  20. extern HWND          hWndLogEntries ;
  21.  
  22. BOOL                 ComputerChange ;
  23. static   PPERFDATA   pPerfData ;
  24.  
  25.  
  26. //==========================================================================//
  27. //                              Local Functions                             //
  28. //==========================================================================//
  29.  
  30.  
  31. BOOL /* static */ LogComputerChanged (HDLG hDlg)
  32.    {  // LogComputerChanged
  33.    PLOG           pLog ;
  34.    HWND           hWndObjects ;
  35.    PPERFSYSTEM    pSysInfo;
  36.    DWORD          iObjectType ;
  37.    DWORD          iObjectNum ;
  38.  
  39.    pLog = LogData (hDlg) ;
  40.    hWndObjects = DialogControl (hDlg, IDD_ADDLOGOBJECT) ;
  41.  
  42.    if (!pPerfData)
  43.       {
  44.       LBReset (hWndObjects) ;
  45.       return FALSE ;
  46.       }
  47.  
  48.    SetHourglassCursor() ;
  49.  
  50.    pSysInfo = GetComputer (hDlg,
  51.                            IDD_ADDLOGCOMPUTER,
  52.                            TRUE,
  53.                            &pPerfData,
  54.                            &pLog->pSystemFirst) ;
  55.  
  56.    if (!pPerfData || !pSysInfo)
  57.       {
  58.       LBReset (hWndObjects) ;
  59.       SetArrowCursor() ;
  60.       return FALSE ;
  61.       }
  62.    else
  63.       {
  64.       LBLoadObjects (hWndObjects,
  65.                      pPerfData, 
  66.                      pSysInfo, 
  67.                      pLog->dwDetailLevel, 
  68.                      NULL,
  69.                      FALSE) ;
  70.  
  71.       iObjectNum = (DWORD) LBNumItems (hWndObjects) ;
  72.       for (iObjectType = 0 ;
  73.            iObjectType < iObjectNum ;
  74.            iObjectType++)
  75.          {  // for
  76.          LBSetSelection (hWndObjects, iObjectType) ;
  77.          }  // for
  78.  
  79.       }
  80.  
  81.    ComputerChange = FALSE ;
  82.    
  83.    SetArrowCursor() ;
  84.  
  85.    return TRUE ;
  86.    }  // LogComputerChanged
  87.  
  88.  
  89. void /*static*/ OnLogDestroy (HDLG hDlg)
  90.    {  // OnLogDestroy
  91.  
  92.    dwCurrentDlgID = 0 ;
  93.  
  94.    if (!PlayingBackLog ())
  95.       MemoryFree (pPerfData) ;
  96.  
  97.    bAddLineInProgress = FALSE ;
  98.    }  // OnLogDestroy
  99.  
  100.  
  101. //==========================================================================//
  102. //                              Message Handlers                            //
  103. //==========================================================================//
  104.  
  105.  
  106. void /* static */ OnInitAddLogDialog (HDLG hDlg)
  107.    {  // OnInitAddLogDialog
  108.    TCHAR          szRemoteComputerName[MAX_COMPUTERNAME_LENGTH + 3] ;
  109.    int            iIndex ;
  110.    PLOGENTRY      pLogEntry ;
  111.    LPTSTR         pComputerName ;
  112.  
  113.    bAddLineInProgress = TRUE ;
  114.    if (PlayingBackLog())
  115.       {
  116.       pPerfData = DataFromIndexPosition (&(PlaybackLog.StartIndexPos), NULL) ;
  117.       GetPerfComputerName(pPerfData, szRemoteComputerName);
  118.       DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, szRemoteComputerName);
  119.       }
  120.    else
  121.       {
  122.       pPerfData = MemoryAllocate (STARTING_SYSINFO_SIZE) ;
  123.  
  124.         //Try to use computer specified on command line (if any), otherwise local computer
  125.       pComputerName = CmdLineComputerName[0] ?
  126.          CmdLineComputerName :
  127.          LocalComputerName ;
  128.  
  129.       iIndex = LBSelection (hWndLogEntries) ;
  130.       if (iIndex != LB_ERR)
  131.          {
  132.          pLogEntry = (PLOGENTRY) LBData(hWndLogEntries, iIndex) ;
  133.    
  134.          if (pLogEntry && pLogEntry != (PLOGENTRY)LB_ERR)
  135.             {
  136.             pComputerName = pLogEntry->szComputer ;
  137.             }
  138.          }
  139.       
  140.       DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, pComputerName) ;
  141.       }
  142.  
  143.    LogComputerChanged (hDlg) ;
  144.  
  145.    DialogEnable (hDlg, IDD_ADDLOGOBJECTTEXT, TRUE) ;
  146.    DialogEnable (hDlg, IDD_ADDLOGOBJECT, TRUE) ;
  147.  
  148.    WindowCenter (hDlg) ;
  149.  
  150.    dwCurrentDlgID = HC_PM_idDlgEditAddToLog ;
  151.  
  152.    }  // OnInitAddLogDialog
  153.  
  154.  
  155. void /* static */ OnLogComputer (HDLG hDlg)
  156. /*
  157.    Effect:        Put up the select Domain/Computer dialog. Allow the user
  158.                   to select the computer. Check for user entering a domain
  159.                   instead. Place the selected computer in the readonly 
  160.                   edit box.
  161. */
  162.    {  // OnLogComputer
  163.    TCHAR          szComputer [MAX_SYSTEM_NAME_LENGTH + 1] ;
  164.  
  165.    if (ChooseComputer (hDlg, szComputer))
  166.       {
  167.       DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
  168.       LogComputerChanged (hDlg) ;
  169.       }  // if
  170.    }  // OnLogComputer
  171.  
  172.  
  173.  
  174. void /* static */ OnAddToLog (HDLG hDlg)
  175. /*
  176.    Effect:        Perform all actions needed when the user clicks on
  177.                   the add button. In particular, determine if the required
  178.                   fields of the dialog have valid values. If so, go ahead
  179.                   and add a LOGENTRY record in the log. If the computer 
  180.                   being logged is not already logged, add a LOGSYSTEMENTRY 
  181.                   as well.
  182.  
  183.    Assert:        We have valid values for computer and object, since we
  184.                   always control these fields.
  185. */
  186.    {  // OnAddToLog
  187.    TCHAR          szComputer [MAX_SYSTEM_NAME_LENGTH + 1] ;
  188.    TCHAR          szObjectType [PerfObjectLen + 1] ;
  189.    DWORD          iObjectType ;
  190.    DWORD          iObjectNum ;
  191.    HWND           hWndObjectTypes ;
  192.    PPERF_OBJECT_TYPE    pObject ;
  193.    PLOG           pLog ;
  194.  
  195.    pLog = LogData (hWndLog) ;
  196.  
  197.    DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
  198.  
  199.    hWndObjectTypes = DialogControl(hDlg, IDD_ADDLOGOBJECT) ;
  200.  
  201.    iObjectNum = (DWORD) LBNumItems (hWndObjectTypes) ;
  202.  
  203.    LBSetRedraw (hWndLogEntries, FALSE) ;
  204.    
  205.    for (iObjectType = 0 ;
  206.         iObjectType < iObjectNum ;
  207.         iObjectType++)
  208.       {  // for
  209.       // NOTE: for now, we don't check for duplicate lines
  210.       if (LBSelected (hWndObjectTypes, iObjectType))
  211.          {  // if
  212.          LBString (hWndObjectTypes, iObjectType, szObjectType) ;
  213.          pObject = (PPERF_OBJECT_TYPE) LBData (hWndObjectTypes, iObjectType) ;
  214.  
  215.          // eliminate duplicates here
  216.          if (LogFindEntry(szComputer, pObject->ObjectNameTitleIndex) ==
  217.              LOG_ENTRY_NOT_FOUND)
  218.             {
  219.             LogAddEntry (hWndLogEntries,
  220.                          szComputer,
  221.                          szObjectType,
  222.                          pObject->ObjectNameTitleIndex,
  223.                          FALSE) ;
  224.             }
  225.          }  // if
  226.       }  // for
  227.  
  228.    LBSetRedraw (hWndLogEntries, TRUE) ;
  229.  
  230.    DialogSetText (hDlg, IDD_ADDLOGDONE, IDS_DONE) ;
  231.    
  232.    if (pLog->iStatus == iPMStatusCollecting)
  233.       {
  234.       LogWriteSystemCounterNames (hWndLog, pLog) ;
  235.       }
  236.    }  // OnAddToLog
  237.  
  238.  
  239.  
  240. int FAR WINAPI AddLogDlgProc (HWND hDlg, WORD msg, 
  241.                               WPARAM wParam, LONG lParam)
  242.    {  // AddLogDlg
  243.    switch(msg)
  244.       {
  245.       case WM_INITDIALOG:
  246.          OnInitAddLogDialog (hDlg) ;
  247.          SetFocus (DialogControl (hDlg, IDD_ADDLOGADD)) ;
  248.          return(FALSE);
  249.  
  250.       case WM_COMMAND:
  251.  
  252.          switch(LOWORD(wParam))
  253.             {
  254.             case IDD_CANCEL:
  255.                EndDialog(hDlg,0);
  256.                return(TRUE);
  257.  
  258.             case IDD_OK:
  259.             case IDD_ADDLOGADD:
  260.  
  261.                if (ComputerChange)
  262.                   {
  263.                   TCHAR    szComputer [MAX_SYSTEM_NAME_LENGTH + 3] ;
  264.  
  265.                   DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
  266.                   LogComputerChanged (hDlg) ;
  267.                   }
  268.                else
  269.                   {
  270.                   SetHourglassCursor() ;
  271.                   OnAddToLog (hDlg) ;
  272.                   SetArrowCursor() ;
  273.                   }
  274.                break ;
  275.  
  276.             case IDD_ADDLOGDONE:
  277.                EndDialog (hDlg, 0) ;
  278.                break ;
  279.  
  280.             case IDD_ADDLOGELLIPSES:
  281.                SetHourglassCursor() ;
  282.                OnLogComputer (hDlg) ;
  283.                SetArrowCursor() ;
  284.                break ;
  285.  
  286.  
  287.             case IDD_ADDLOGCOMPUTER:
  288.                if (HIWORD (wParam) == EN_UPDATE)
  289.                   {
  290.                   ComputerChange = TRUE ;
  291.                   }
  292.                break ;
  293.  
  294.             case IDD_ADDLOGHELP:
  295.                CallWinHelp (dwCurrentDlgID) ;
  296.                break ;
  297.  
  298.             case IDD_ADDLOGOBJECT:
  299.                if (ComputerChange)
  300.                   {
  301.                   TCHAR    szComputer [MAX_SYSTEM_NAME_LENGTH + 3] ;
  302.  
  303.                   DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
  304.                   LogComputerChanged (hDlg) ;
  305.                   }
  306.                break ;
  307.  
  308.             default:
  309.                break ;
  310.             }
  311.          break;
  312.  
  313.       case WM_DESTROY:
  314.          OnLogDestroy (hDlg) ;
  315.          break ;
  316.  
  317.       default:
  318.          break;
  319.       }
  320.  
  321.    return (FALSE);
  322.    }  // AddLogDlgProc
  323.  
  324.  
  325.  
  326. BOOL AddLog (HWND hWndParent)
  327.    {  // AddLog
  328.    if (DialogBox (hInstance, idDlgAddLog, 
  329.                   hWndParent, (DLGPROC) AddLogDlgProc))
  330.       {  // if
  331.       return (TRUE) ;
  332.       }  // if
  333.    return (FALSE) ;
  334.    }  // AddLog
  335.