|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
Vdmperf.c
Abstract:
Win32 application to display VDM performance statictics.
Author:
Mark Lucovsky (stolen from Mark Enstrom (marke) winperf)
Environment:
Win32
Revision History:
11-05-92 Initial version
--*/
//
// set variable to define global variables
//
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <errno.h>
#include "vdmperf.h"
//
// global handles
//
HANDLE hInst;
//
// Selected Display Mode (read from wp2.ini), default set here.
//
DISPLAY_ITEM PerfDataList[SAVE_SUBJECTS]; VDMPERF_INFO VdmperfInfo;
//
// Window names
//
PUCHAR PerfNames[] = { "PUSHF", "POPF", "IRET", "HLT", "CLI", "STI", "BOP", "SEG_NOT_P", "VDMOPCODEF", "INTNN", "INTO", "INB", "INW", "OUTB", "OUTW", "INSB", "INSW", "OUTSB", "OUTSW" };
int __cdecl main(USHORT argc, CHAR **argv) /*++
Routine Description:
Windows entry point routine
Arguments:
Return Value:
status of operation
Revision History:
03-21-91 Initial code
--*/ {
//
//
//
HANDLE hInstance = MGetInstHandle(); HANDLE hPrevInstance = (HANDLE)NULL; LPSTR lpCmdLine = MGetCmdLine(); INT nCmdShow = SW_SHOWDEFAULT; USHORT _argc = argc; CHAR **_argv = argv; MSG msg; HBRUSH BackBrush;
//
// check for other instances of this program
//
BackBrush = CreateSolidBrush(RGB(192,192,192));
if (!InitApplication(hInstance,BackBrush)) { DbgPrint("Init Application fails\n"); return (FALSE); }
//
// Perform initializations that apply to a specific instance
//
if (!InitInstance(hInstance, nCmdShow)){ DbgPrint("Init Instance failed\n"); return (FALSE); }
//
// Acquire and dispatch messages until a WM_QUIT message is received.
//
while (GetMessage(&msg, // message structure
(HWND)NULL, // handle of window receiving the message
0, // lowest message to examine
0)) // highest message to examine
{ TranslateMessage(&msg); // Translates virtual key codes
DispatchMessage(&msg); // Dispatches message to window
}
DeleteObject(BackBrush);
return ((INT)msg.wParam); // Returns the value from PostQuitMessage
}
BOOL InitApplication( HANDLE hInstance, HBRUSH hBackground)
/*++
Routine Description:
Initializes window data and registers window class.
Arguments:
hInstance - current instance hBackground - background fill brush
Return Value:
status of operation
Revision History:
02-17-91 Initial code
--*/
{ WNDCLASS wc; BOOL ReturnStatus;
//
// Fill in window class structure with parameters that describe the
// main window.
//
wc.style = CS_DBLCLKS; // Class style(s).
wc.lpfnWndProc = (WNDPROC)MainWndProc; // Function to retrieve messages for
// windows of this class.
wc.cbClsExtra = 0; // No per-class extra data.
wc.cbWndExtra = 0; // No per-window extra data.
wc.hInstance = hInstance; // Application that owns the class.
wc.hIcon = LoadIcon(hInstance, //
MAKEINTRESOURCE(WINPERF_ICON)); // Load Winperf icon
wc.hCursor = LoadCursor((HANDLE)NULL, IDC_ARROW); // Load default cursor
wc.hbrBackground = hBackground;; // Use background passed to routine
wc.lpszMenuName = "vdmperfMenu"; // Name of menu resource in .RC file.
wc.lpszClassName = "VdmPerfClass"; // Name used in call to CreateWindow.
ReturnStatus = RegisterClass(&wc);
return(ReturnStatus);
}
BOOL InitInstance( HANDLE hInstance, int nCmdShow )
/*++
Routine Description:
Save instance handle and create main window. This function performs initialization tasks that cannot be shared by multiple instances.
Arguments:
hInstance - Current instance identifier. nCmdShow - Param for first ShowWindow() call.
Return Value:
status of operation
Revision History:
02-17-91 Initial code
--*/
{
DWORD WindowStyle;
//
// Save the instance handle in a static variable, which will be used in
// many subsequent calls from this application to Windows.
//
hInst = hInstance;
//
// init the window position and size to be in the upper corner of
// the screen, 200x100
//
//
// What I want here is a way to get the WINDOW dimensions
//
VdmperfInfo.WindowPositionX = 640 - 200; VdmperfInfo.WindowPositionY = 0; VdmperfInfo.WindowSizeX = 200; VdmperfInfo.WindowSizeY = 100;
//
// read profile data from .ini file
//
InitProfileData(&VdmperfInfo);
VdmperfInfo.hMenu = LoadMenu(hInstance,"vdmperfMenu");
//
// Create a main window for this application instance.
//
VdmperfInfo.hWndMain = CreateWindow( "VdmPerfClass", // See RegisterClass() call.
"VDM Perf", // Text for window title bar.
WS_OVERLAPPEDWINDOW, // window style
VdmperfInfo.WindowPositionX, // Default horizontal position.
VdmperfInfo.WindowPositionY, // Default vertical position.
VdmperfInfo.WindowSizeX, // Default width.
VdmperfInfo.WindowSizeY, // Default height.
(HWND)NULL, // Overlapped windows have no parent.
(HMENU)NULL, // Use the window class menu.
hInstance, // This instance owns this window.
(LPVOID)NULL // Pointer not needed.
);
//
// Decide on whether or not to display the menu and caption
// based on the window class read from the .ini file
//
if (VdmperfInfo.DisplayMode==STYLE_ENABLE_MENU) { VdmperfInfo.DisplayMenu = TRUE; } else { VdmperfInfo.DisplayMenu = FALSE; WindowStyle = GetWindowLong(VdmperfInfo.hWndMain,GWL_STYLE); WindowStyle = (WindowStyle & (~STYLE_ENABLE_MENU)) | STYLE_DISABLE_MENU; SetWindowPos(VdmperfInfo.hWndMain, (HWND)NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME); SetWindowLong(VdmperfInfo.hWndMain,GWL_STYLE,WindowStyle); SetMenu(VdmperfInfo.hWndMain,NULL); }
//
// If window could not be created, return "failure"
//
if (!VdmperfInfo.hWndMain) { return (FALSE); }
//
// Make the window visible; update its client area; and return "success"
//
SetFocus(VdmperfInfo.hWndMain); ShowWindow(VdmperfInfo.hWndMain, SW_SHOWNORMAL); UpdateWindow(VdmperfInfo.hWndMain);
return (TRUE);
}
LRESULT APIENTRY MainWndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
/*++
Routine Description:
Process messages.
Arguments:
hWnd - window hande message - type of message wParam - additional information lParam - additional information
Return Value:
status of operation
Revision History:
02-17-91 Initial code
--*/
{ PAINTSTRUCT ps;
//
// process each message
//
switch (message) {
//
// create window
//
case WM_CREATE: { HDC hDC = GetDC(hWnd); BOOLEAN Fit; UINT Index;
//
// make brushes and pens
//
VdmperfInfo.hBluePen = CreatePen(PS_SOLID,1,RGB(0,0,128)); VdmperfInfo.hRedPen = CreatePen(PS_SOLID,1,RGB(255,0,0)); VdmperfInfo.hGreenPen = CreatePen(PS_SOLID,1,RGB(0,255,0)); VdmperfInfo.hDotPen = CreatePen(PS_DOT,1,RGB(0,0,0));
VdmperfInfo.hBackground = CreateSolidBrush(RGB(192,192,192)); VdmperfInfo.hLightBrush = CreateSolidBrush(RGB(255,255,255)); VdmperfInfo.hDarkBrush = CreateSolidBrush(RGB(128,128,128)); VdmperfInfo.hRedBrush = CreateSolidBrush(RGB(255,000,000)); VdmperfInfo.hGreenBrush = CreateSolidBrush(RGB(000,255,000)); VdmperfInfo.hBlueBrush = CreateSolidBrush(RGB(000,000,255));
//
// create thee fonts using NT default font families
//
VdmperfInfo.SmallFont = CreateFont(8, 0, 0, 0, 400, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, "Small Fonts");
VdmperfInfo.MediumFont = CreateFont(10, 0, 0, 0, 400, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, "Times New Roman");
VdmperfInfo.LargeFont = CreateFont(14, 0, 0, 0, 400, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, "Times New Roman");
//
// create a system timer event to call performance gathering routines by.
//
VdmperfInfo.TimerId = SetTimer(hWnd,(UINT)TIMER_ID,(UINT)1000 * DELAY_SECONDS,(TIMERPROC)NULL);
//
// init display variables
//
InitPerfWindowDisplay(hWnd,hDC,PerfDataList,SAVE_SUBJECTS);
//
// Fit the perf windows into the main window
//
Fit = FitPerfWindows(hWnd,hDC,PerfDataList,SAVE_SUBJECTS);
if (!Fit) { DbgPrint("FitPerfWindows Fails !\n"); }
for (Index=0;Index<SAVE_SUBJECTS;Index++) { CalcDrawFrame(&PerfDataList[Index]);
if (!CreateMemoryContext(hDC,&PerfDataList[Index])) { MessageBox(hWnd,"Error Allocating Memory","Vdmperf",MB_OK); DestroyWindow(hWnd); break; }
}
//
// init performance routines
//
InitPerfInfo();
//
// release the DC handle
//
ReleaseDC(hWnd,hDC);
} break;
//
// re-size
//
case WM_SIZE:
{ int i; HDC hDC = GetDC(hWnd); RECT ClientRect; BOOLEAN Fit;
//
// get size of cleint area
//
GetWindowRect(hWnd,&ClientRect);
VdmperfInfo.WindowPositionX = ClientRect.left; VdmperfInfo.WindowPositionY = ClientRect.top; VdmperfInfo.WindowSizeX = ClientRect.right - ClientRect.left; VdmperfInfo.WindowSizeY = ClientRect.bottom - ClientRect.top;
Fit = FitPerfWindows(hWnd,hDC,PerfDataList,SAVE_SUBJECTS);
if (!Fit) { DbgPrint("WM_SIZE error, FitPerf returns FALSE\n"); }
for (i=0;i<SAVE_SUBJECTS;i++) { DeleteMemoryContext(&PerfDataList[i]); CalcDrawFrame(&PerfDataList[i]);
if (!CreateMemoryContext(hDC,&PerfDataList[i])) { MessageBox(hWnd,"Error Allocating Memory","Vdmperf",MB_OK); DestroyWindow(hWnd); break; } }
//
// force window to be re-painted
//
InvalidateRect(hWnd,(LPRECT)NULL,TRUE);
//
// release the DC handle
//
ReleaseDC(hWnd,hDC);
} break;
case WM_MOVE: { HDC hDC = GetDC(hWnd); RECT ClientRect;
//
// get size of cleint area
//
GetWindowRect(hWnd,&ClientRect);
VdmperfInfo.WindowPositionX = ClientRect.left; VdmperfInfo.WindowPositionY = ClientRect.top; VdmperfInfo.WindowSizeX = ClientRect.right - ClientRect.left; VdmperfInfo.WindowSizeY = ClientRect.bottom - ClientRect.top;
ReleaseDC(hWnd,hDC); }
break;
//
// command from application menu
//
case WM_COMMAND:
switch (wParam){
//
// exit window
//
case IDM_EXIT:
DestroyWindow(hWnd); break;
//
// about command
//
case IDM_SELECT: { HDC hDC = GetDC(hWnd); int Index; BOOLEAN fit;
if (DialogBox(hInst,MAKEINTRESOURCE(IDM_SEL_DLG),hWnd,SelectDlgProc) == DIALOG_SUCCESS) {
fit = FitPerfWindows(hWnd,hDC,PerfDataList,SAVE_SUBJECTS);
if (!fit) { DbgPrint("Fit Fails\n"); }
for (Index=0;Index<SAVE_SUBJECTS;Index++) { DeleteMemoryContext(&PerfDataList[Index]); CalcDrawFrame(&PerfDataList[Index]);
if (!CreateMemoryContext(hDC,&PerfDataList[Index])) { MessageBox(hWnd,"Error Allocating Memory","Vdmperf",MB_OK); DestroyWindow(hWnd); break; }
} InvalidateRect(hWnd,(LPRECT)NULL,TRUE); }
ReleaseDC(hWnd,hDC);
} break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam)); }
break;
case WM_PAINT:
//
// repaint the window
//
{ int i; HDC hDC = BeginPaint(hWnd,&ps);
SelectObject(hDC,GetStockObject(NULL_BRUSH));
for (i=0;i<SAVE_SUBJECTS;i++) {
if (PerfDataList[i].Display == TRUE) {
DrawFrame(hDC,&PerfDataList[i]);
DrawPerfText(hDC,&PerfDataList[i],i); DrawPerfGraph(hDC,&PerfDataList[i]);
} }
EndPaint(hWnd,&ps); } break;
case WM_TIMER: { int i; HDC hDC = GetDC(hWnd);
CalcCpuTime(PerfDataList);
//
// update all performance information
//
for (i=0;i<SAVE_SUBJECTS;i++) {
if (PerfDataList[i].Display == TRUE) {
DrawPerfText(hDC,&PerfDataList[i],i);
if (PerfDataList[i].ChangeScale) { DrawPerfGraph(hDC,&PerfDataList[i]); } else { ShiftPerfGraph(hDC,&PerfDataList[i]); }
} }
ReleaseDC(hWnd,hDC);
} break;
//
// handle a double click
//
case WM_NCLBUTTONDBLCLK: case WM_LBUTTONDBLCLK: { DWORD WindowStyle;
//
// get old window style, take out caption and menu
//
if (!IsIconic(hWnd)) {
if (VdmperfInfo.DisplayMenu) { WindowStyle = GetWindowLong(hWnd,GWL_STYLE); WindowStyle = (WindowStyle & (~STYLE_ENABLE_MENU)) | STYLE_DISABLE_MENU; SetMenu(hWnd,NULL); SetWindowLong(hWnd,GWL_STYLE,WindowStyle); SetWindowPos(hWnd, (HWND)NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME); ShowWindow(hWnd,SW_SHOW); VdmperfInfo.DisplayMode=STYLE_DISABLE_MENU; VdmperfInfo.DisplayMenu = FALSE;
} else { WindowStyle = GetWindowLong(hWnd,GWL_STYLE); WindowStyle = (WindowStyle & (~STYLE_DISABLE_MENU)) | STYLE_ENABLE_MENU; SetMenu(hWnd,VdmperfInfo.hMenu); SetWindowLong(hWnd,GWL_STYLE,WindowStyle); SetWindowPos(hWnd, (HWND)NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME); ShowWindow(hWnd,SW_SHOW); VdmperfInfo.DisplayMode=STYLE_ENABLE_MENU; VdmperfInfo.DisplayMenu = TRUE; } } else { DefWindowProc(hWnd, message, wParam, lParam); }
} break;
//
// enable dragging with mouse in non-client
//
case WM_NCHITTEST: {
lParam = DefWindowProc(hWnd, message, wParam, lParam); if ((VdmperfInfo.DisplayMenu==FALSE) && (lParam == HTCLIENT)) { return(HTCAPTION); } else { return(lParam); }
} break;
case WM_DESTROY: { UINT Index;
//
// Save profile info
//
SaveProfileData(&VdmperfInfo);
//
// Delete Windows Objects
//
KillTimer(hWnd,TIMER_ID);
DeleteObject(VdmperfInfo.hBluePen); DeleteObject(VdmperfInfo.hRedPen); DeleteObject(VdmperfInfo.hGreenPen); DeleteObject(VdmperfInfo.hBackground); DeleteObject(VdmperfInfo.hLightBrush); DeleteObject(VdmperfInfo.hDarkBrush);
for (Index=0;Index<SAVE_SUBJECTS;Index++ ) { DeleteMemoryContext(&PerfDataList[Index]); }
//
// Destroy window
//
PostQuitMessage(0); } break;
default:
//
// Passes message on if unproccessed
//
return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); }
INT_PTR APIENTRY SelectDlgProc( HWND hDlg, unsigned message, WPARAM wParam, LPARAM lParam )
/*++
Routine Description:
Process message for select dialog box.
Arguments:
hDlg - window handle of the dialog box message - type of message wParam - message-specific information lParam - message-specific information
Return Value:
status of operation
Revision History:
03-21-91 Initial code
--*/
{ UINT ButtonState; UINT Index;
switch (message) {
case WM_INITDIALOG:
//
// Init Buttons with PerfDataList Structure
//
for (Index=0;Index<SAVE_SUBJECTS;Index++) { int Idm; switch ( Index ) { case IX_PUSHF : Idm = IDM_PUSHF ; break; case IX_POPF : Idm = IDM_POPF ; break; case IX_IRET : Idm = IDM_IRET ; break; case IX_HLT : Idm = IDM_HLT ; break; case IX_CLI : Idm = IDM_CLI ; break; case IX_STI : Idm = IDM_STI ; break; case IX_BOP : Idm = IDM_BOP ; break; case IX_SEGNOTP : Idm = IDM_SEGNOTP ; break; case IX_VDMOPCODEF : Idm = IDM_VDMOPCODEF; break; case IX_INTNN : Idm = IDM_INTNN ; break; case IX_INTO : Idm = IDM_INTO ; break; case IX_INB : Idm = IDM_INB ; break; case IX_INW : Idm = IDM_INW ; break; case IX_OUTB : Idm = IDM_OUTB ; break; case IX_OUTW : Idm = IDM_OUTW ; break; case IX_INSB : Idm = IDM_INSB ; break; case IX_INSW : Idm = IDM_INSW ; break; case IX_OUTSB : Idm = IDM_OUTSB ; break; case IX_OUTSW : Idm = IDM_OUTSW ; break; }
//
// Set or clear radio button based on display variable
//
if (PerfDataList[Index].Display == TRUE) { CheckDlgButton(hDlg,Idm,1); } else { CheckDlgButton(hDlg,Idm,0); }
}
return (TRUE);
case WM_COMMAND:
switch(wParam) {
//
// end function
//
case IDOK:
//DbgPrint("IDOK: Check button states\n");
for (Index=0;Index<SAVE_SUBJECTS;Index++) { int Idm; switch ( Index ) { case IX_PUSHF : Idm = IDM_PUSHF ; break; case IX_POPF : Idm = IDM_POPF ; break; case IX_IRET : Idm = IDM_IRET ; break; case IX_HLT : Idm = IDM_HLT ; break; case IX_CLI : Idm = IDM_CLI ; break; case IX_STI : Idm = IDM_STI ; break; case IX_BOP : Idm = IDM_BOP ; break; case IX_SEGNOTP : Idm = IDM_SEGNOTP ; break; case IX_VDMOPCODEF : Idm = IDM_VDMOPCODEF; break; case IX_INTNN : Idm = IDM_INTNN ; break; case IX_INTO : Idm = IDM_INTO ; break; case IX_INB : Idm = IDM_INB ; break; case IX_INW : Idm = IDM_INW ; break; case IX_OUTB : Idm = IDM_OUTB ; break; case IX_OUTW : Idm = IDM_OUTW ; break; case IX_INSB : Idm = IDM_INSB ; break; case IX_INSW : Idm = IDM_INSW ; break; case IX_OUTSB : Idm = IDM_OUTSB ; break; case IX_OUTSW : Idm = IDM_OUTSW ; break; } ButtonState = IsDlgButtonChecked(hDlg,Idm); if (ButtonState == 1) { PerfDataList[Index].Display = TRUE; VdmperfInfo.DisplayElement[Index] = 1; } else { PerfDataList[Index].Display = FALSE; VdmperfInfo.DisplayElement[Index] = 0; }
}
EndDialog(hDlg, DIALOG_SUCCESS); return (TRUE);
case IDCANCEL:
EndDialog(hDlg, DIALOG_CANCEL ); return (TRUE);
case IDM_PUSHF : case IDM_POPF : case IDM_IRET : case IDM_HLT : case IDM_CLI : case IDM_STI : case IDM_SEGNOTP : case IDM_BOP : case IDM_VDMOPCODEF: case IDM_INTNN : case IDM_INTO : case IDM_INB : case IDM_INW : case IDM_OUTB : case IDM_OUTW : case IDM_INSB : case IDM_INSW : case IDM_OUTSB : case IDM_OUTSW :
//
// Turn on or off button
//
ButtonState = IsDlgButtonChecked(hDlg,(UINT)wParam);
//DbgPrint("ButtonState = %i\n",ButtonState);
if (ButtonState == 0) {
//
// Set Button
//
ButtonState = 1;
} else if (ButtonState == 1) {
//
// Clear Button
//
ButtonState = 0;
} else {
ButtonState = 0; }
CheckDlgButton(hDlg,(UINT)wParam,ButtonState); return(TRUE); }
} return (FALSE); }
VOID InitProfileData(PVDMPERF_INFO pVdmperfInfo)
/*++
Routine Description:
Attempt tp read the following fields from the vdmperf.ini file
Arguments:
WindowPositionX - Window initial x position WindowPositionY - Window initial y position WindowSizeX - Window initial width WindowSizey - Window Initial height DisplayMode - Window initial display mode
Return Value:
None, values are set to default before a call to this operation. If there is a problem then default:values are left unchanged.
Revision History:
02-17-91 Initial code
--*/
{ DWORD PositionX,PositionY,SizeX,SizeY,Mode,Index,Element[SAVE_SUBJECTS]; UCHAR TempStr[256];
PositionX = GetPrivateProfileInt("vdmperf","PositionX" ,pVdmperfInfo->WindowPositionX,"vdmperf.ini"); PositionY = GetPrivateProfileInt("vdmperf","PositionY" ,pVdmperfInfo->WindowPositionY,"vdmperf.ini"); SizeX = GetPrivateProfileInt("vdmperf","SizeX" ,pVdmperfInfo->WindowSizeX ,"vdmperf.ini"); SizeY = GetPrivateProfileInt("vdmperf","SizeY" ,pVdmperfInfo->WindowSizeY ,"vdmperf.ini");
//
// read the first deiplay element with default 1
//
Element[0] = GetPrivateProfileInt("vdmperf","DisplayElement0",1,"vdmperf.ini");
//
// read the rest of the display elements with default 0
//
for (Index=1;Index<SAVE_SUBJECTS;Index++) { wsprintf(TempStr,"DisplayElement%i",Index); Element[Index] = GetPrivateProfileInt("vdmperf",TempStr,0,"vdmperf.ini"); }
Mode = GetPrivateProfileInt("vdmperf","DisplayMode",pVdmperfInfo->DisplayMode ,"vdmperf.ini");
pVdmperfInfo->WindowPositionX = PositionX; pVdmperfInfo->WindowPositionY = PositionY; pVdmperfInfo->WindowSizeX = SizeX; pVdmperfInfo->WindowSizeY = SizeY;
for (Index=0;Index<SAVE_SUBJECTS;Index++) { pVdmperfInfo->DisplayElement[Index] = Element[Index]; } pVdmperfInfo->DisplayMode = Mode; }
VOID SaveProfileData(PVDMPERF_INFO pVdmperfInfo)
/*++
Routine Description:
Save profile data
Arguments:
WindowPositionX - Window initial x position WindowPositionY - Window initial y position WindowSizeX - Window initial width WindowSizey - Window Initial height DisplayMode - Window initial display mode
Return Value:
None.
Revision History:
02-17-91 Initial code
--*/
{ UCHAR TempStr[50],TempName[50]; UINT Index;
wsprintf(TempStr,"%i",pVdmperfInfo->WindowPositionX); WritePrivateProfileString("vdmperf","PositionX",TempStr,"vdmperf.ini");
wsprintf(TempStr,"%i",pVdmperfInfo->WindowPositionY); WritePrivateProfileString("vdmperf","PositionY",TempStr,"vdmperf.ini");
wsprintf(TempStr,"%i",pVdmperfInfo->WindowSizeX); WritePrivateProfileString("vdmperf","SizeX",TempStr,"vdmperf.ini");
wsprintf(TempStr,"%i",pVdmperfInfo->WindowSizeY); WritePrivateProfileString("vdmperf","SizeY",TempStr,"vdmperf.ini");
for (Index=0;Index<SAVE_SUBJECTS;Index++) { wsprintf(TempStr,"%li",pVdmperfInfo->DisplayElement[Index]); wsprintf(TempName,"DisplayElement%li",Index); WritePrivateProfileString("vdmperf",TempName,TempStr,"vdmperf.ini");
}
wsprintf(TempStr,"%li",pVdmperfInfo->DisplayMode); WritePrivateProfileString("vdmperf","DisplayMode",TempStr,"vdmperf.ini");
}
BOOLEAN InitPerfWindowDisplay( IN HWND hWnd, IN HDC hDC, IN PDISPLAY_ITEM DisplayItems, IN ULONG NumberOfWindows )
/*++
Routine Description:
Init All perf windows to active, init data
Arguments:
hDC - Screen context DisplayItems - List of display structures NumberOfWindows - Number of sub-windows
Return Value:
Status
Revision History:
02-17-91 Initial code
--*/ { int Index1; UINT Index;
for (Index=0;Index<NumberOfWindows;Index++) {
if (VdmperfInfo.DisplayElement[Index] == 0) { DisplayItems[Index].Display = FALSE; } else { DisplayItems[Index].Display = TRUE; }
DisplayItems[Index].CurrentDrawingPos = 0;
DisplayItems[Index].NumberOfElements = 1;
for (Index1=0;Index1<DATA_LIST_LENGTH;Index1++) { DisplayItems[Index].KernelTime[Index1] = 0; DisplayItems[Index].UserTime[Index1] = 0; DisplayItems[Index].TotalTime[Index1] = 0; } }
return(TRUE);
}
|