NT4/private/sdktools/winmeter/profile.c
2020-09-30 17:12:29 +02:00

513 lines
16 KiB
C

/***************************************************************************\
* profile.c
*
* Microsoft Confidential
* Copyright (c) 1991 Microsoft Corporation
*
* Routines for saving, loading, and resetting program settings
*
* History:
* Written by Ali Partovi (t-alip) summer 1991
*
* Re-written and adapted for NT by Fran Borda (v-franb) Nov.1991
* for Newman Consulting
* Took out all WIN-specific and bargraph code. Added 3 new
* linegraphs (Mem/Paging, Process/Threads/Handles, IO), and
* tailored info to that available under NT.
\***************************************************************************/
#include "winmeter.h"
// main global information structures
extern GLOBAL g;
extern int win_on_top;
// static variables with definitions of .INI file strings
static char szIniFile[] = "winmeter.ini";
static char szTrue[] = "TRUE";
static char szFalse[] = "FALSE";
static char szRefresh[] = "Refresh";
static char szInterval[] = "Interval";
static char szManualSampling[] = "ManualSampling";
static char szApplyChanges[] = "ApplyChanges";
static char szRightSideOfAxis[] = "RightSideOfAxis";
static char szValBottom[] = "BottomValue";
static char szDValAxisHeight[] = "AxisHeight";
static char szMaxValues[] = "MaxValues";
static char szWindowSize[] = "WindowSize";
static char szWindowLeft[] = "WindowLeft";
static char szWindowTop[] = "WindowTop";
static char szWindowWidth[] = "WindowWidth";
static char szWindowHeight[] = "WindowHeight";
static char szLGDisp[] = "LGDisp";
static char szDisplayLegend[] = "DisplayLegend";
static char szDisplayCalibration[] = "DisplayCalibration";
static char szDisplayState[] = "DisplayState";
static char szFLineGraph[] = "LineGraph";
static char szCurrentGraph[] = "CurrentGraph";
static char szWinPos[] = "WinPos";
// some functions to make things easier
BOOL LoadBoolean(LPSTR lpszSection, LPSTR lpszEntry, BOOL fDefault);
// loads a boolean value from .ini file
void SaveBoolean(LPSTR lpszSection, LPSTR lpszEntry, BOOL fValue);
// saves a boolean value to .ini file
void SaveDWORD(LPSTR lpszSection, LPSTR lpszEntry, DWORD dwValue);
// saves a DWORD value to .ini file
void SaveInt(LPSTR lpszSection, LPSTR lpszEntry, int nValue);
// saves a integer value to .ini file
/***************************************************************************\
* LoadBoolean()
*
* Entry: A section and entry name, as well as a default flag
* Exit: Returns the value for the boolean string (TRUE/FALSE) in the
* given entry/section in the .INI file (sets to default if none)
\***************************************************************************/
BOOL LoadBoolean(
LPSTR lpszSection, // the section name
LPSTR lpszEntry, // the entry name
BOOL fDefault) // the default value
{
static char szSmallBuf[SMALL_BUF_LEN];
GetPrivateProfileString(lpszSection, lpszEntry,
(fDefault) ? szTrue : szFalse, szSmallBuf, SMALL_BUF_LEN, szIniFile);
return !lstrcmp(szSmallBuf, szTrue);
}
/***************************************************************************\
* LoadDisplayState()
*
* Entry: None
* Exit: Loads initial display state from .INI file
* Initializes .INI files if none
\***************************************************************************/
void LoadDisplayState(void) // load [DisplayState] settings from .INI
{
char szBuf[TEMP_BUF_LEN]; // to hold current linegraph title
if (!GetPrivateProfileString(szDisplayState, NULL, "",
g.szBuf, TEMP_BUF_LEN, szIniFile)) {
// no .INI file, create default
ResetDisplayState();
SaveDisplayState();
return;
}
// load settings
g.LineGraph = LoadBoolean(szDisplayState, szFLineGraph,DO_CPU);
GetPrivateProfileString(szDisplayState, szCurrentGraph, NULL,
szBuf, TEMP_BUF_LEN, szIniFile);
// now find which lg structure is actually to be the current one
for (g.plg=g.plgList; (g.plg) && (lstrcmp(g.plg->lpszTitle, szBuf));
g.plg = g.plg->plgNext)
if (!g.plg)
// use default if no match
g.plg = DEFAULT_CURRENT_GRAPH;
else
if (g.LineGraph == DO_CPU)
CheckMenuItem(g.hMenu, IDM_CPU_USAGE, MF_CHECKED);
else
if (g.LineGraph == DO_PROCS)
CheckMenuItem(g.hMenu, IDM_PROCS, MF_CHECKED);
else
if (g.LineGraph == DO_MEM)
CheckMenuItem(g.hMenu, IDM_MEM_USAGE, MF_CHECKED);
else
if (g.LineGraph == DO_IO)
CheckMenuItem(g.hMenu, IDM_IO_USAGE, MF_CHECKED);
if (win_on_top)
CheckMenuItem(g.hMenu, IDM_SETTINGS, MF_CHECKED);
return;
}
/***************************************************************************\
* LoadLGDispSettings()
*
* Entry: None
* Exit: Loads line graph displaysettings from .INI file.
* Initializes .INI files if none
\***************************************************************************/
void LoadLGDispSettings(void) // load linegraph display settings from .INI
{
if (!GetPrivateProfileString(szLGDisp, NULL, "",
g.szBuf, TEMP_BUF_LEN, szIniFile)) {
// no .INI file, create default
ResetLGDispSettings();
SaveLGDispSettings();
return;
}
g.fDisplayLegend = LoadBoolean(szLGDisp,
szDisplayLegend, DEFAULT_F_DISPLAY_LEGEND);
g.fDisplayCalibration = LoadBoolean(szLGDisp,
szDisplayCalibration, DEFAULT_F_DISPLAY_CALIBRATION);
return;
}
/***************************************************************************\
* LoadLineGraphSettings()
*
* Entry: None
* Exit: Loads line graph settings from .INI file.
* Initializes .INI files if none
\***************************************************************************/
void LoadLineGraphSettings(void) // load line graph settings from .INI
{
if (!GetPrivateProfileString(g.plg->lpszTitle, NULL, "",
g.szBuf, TEMP_BUF_LEN, szIniFile)) {
// no .INI file, create default
ResetLineGraphSettings();
SaveLineGraphSettings();
return;
}
g.plg->valBottom = GetPrivateProfileInt(g.plg->lpszTitle,
szValBottom, DEFAULT_VAL_BOTTOM, szIniFile);
if (g.plg == g.plgCPU)
{
g.plg->dvalAxisHeight = DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = DEFAULT_MAX_VALUES;
}
else
if (g.plg == g.plgProcs)
{
g.plg->dvalAxisHeight = T_DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = T_DEFAULT_MAX_VALUES;
}
else
if (g.plg == g.plgMemory)
{
g.plg->dvalAxisHeight = M_DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = M_DEFAULT_MAX_VALUES;
}
else
if (g.plg == g.plgIO)
{
g.plg->dvalAxisHeight = I_DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = I_DEFAULT_MAX_VALUES;
}
return;
}
/***************************************************************************\
* LoadRefreshSettings()
*
* Entry: None
* Exit: Loads "Refresh" dialog settings from .INI file.
* Initializes .INI files if none
\***************************************************************************/
void LoadRefreshSettings(void) // load [Refresh] settings from .INI
{
if (!GetPrivateProfileString(szRefresh, NULL, "",
g.szBuf, TEMP_BUF_LEN, szIniFile)) {
// no .INI file, create default
ResetRefreshSettings();
SaveRefreshSettings();
return;
}
g.nTimerInterval=GetPrivateProfileInt(szRefresh,
szInterval, DEFAULT_TIMER_INTERVAL, szIniFile);
g.fManualSampling =
LoadBoolean(szRefresh, szManualSampling, DEFAULT_F_MANUAL);
return;
}
/***************************************************************************\
* LoadWindowSettings()
*
* Entry: None
* Exit: Loads [WindowSize] settings from .INI file.
* Initializes .INI files if none
\***************************************************************************/
void LoadWindowSettings(void) // load [WindowSize] settings from .INI
{
if (!GetPrivateProfileString(szWindowSize, NULL, "",
g.szBuf, TEMP_BUF_LEN, szIniFile)) {
// no .INI file, create default
ResetWindowSettings();
return;
}
g.xWindowLeft=GetPrivateProfileInt(szWindowSize,
szWindowLeft, CW_USEDEFAULT, szIniFile);
g.yWindowTop=GetPrivateProfileInt(szWindowSize,
szWindowTop, CW_USEDEFAULT, szIniFile);
g.cxClient=GetPrivateProfileInt(szWindowSize,
szWindowWidth, CW_USEDEFAULT, szIniFile);
g.cyClient=GetPrivateProfileInt(szWindowSize,
szWindowHeight, CW_USEDEFAULT, szIniFile);
return;
}
/***************************************************************************\
* ResetDisplayState()
*
* Entry: None
* Exit: Resets default initial display
\***************************************************************************/
void ResetDisplayState(void) // reset defaults for [DisplayState]
{
// start in CPU linegraph
g.LineGraph = DO_CPU;
g.plg = DEFAULT_CURRENT_GRAPH;
return;
}
/***************************************************************************\
* ResetLGDispSettings()
*
* Entry: None
* Exit: Resets default settings for line graph display
\***************************************************************************/
void ResetLGDispSettings(void) // reset defaults for line graph display
{
g.fDisplayLegend = DEFAULT_F_DISPLAY_LEGEND;
g.fDisplayCalibration = DEFAULT_F_DISPLAY_CALIBRATION;
return;
}
/***************************************************************************\
* ResetLineGraphSettings()
*
* Entry: None
* Exit: Resets default settings for a Line Graph
\***************************************************************************/
void ResetLineGraphSettings(void) // reset linegraph defaults
{
if (g.plg == g.plgProcs)
{
g.plg->dvalAxisHeight = T_DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = T_DEFAULT_MAX_VALUES;
}
else
if (g.plg == g.plgMemory)
{
g.plg->dvalAxisHeight = M_DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = M_DEFAULT_MAX_VALUES;
}
else
if (g.plg == g.plgIO)
{
g.plg->dvalAxisHeight = I_DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = I_DEFAULT_MAX_VALUES;
}
else
if (g.plg == g.plgCPU)
{
g.plg->dvalAxisHeight = DEFAULT_DVAL_AXISHEIGHT;
g.plg->nMaxValues = DEFAULT_MAX_VALUES;
}
g.plg->valBottom = DEFAULT_VAL_BOTTOM;
return;
}
/***************************************************************************\
* ResetRefreshSettings()
*
* Entry: None
* Exit: Resets default settings for "Refresh" dialog box
\***************************************************************************/
void ResetRefreshSettings(void) // reset defaults for [Refresh]
{
g.nTimerInterval = DEFAULT_TIMER_INTERVAL;
g.fManualSampling = DEFAULT_F_MANUAL;
return;
}
/***************************************************************************\
* ResetWindowSettings()
*
* Entry: None
* Exit: Resets default settings for [WindowSize]
\***************************************************************************/
void ResetWindowSettings(void) // reset defaults for [WindowSize]
{
g.xWindowLeft = g.yWindowTop = g.cxClient = g.cyClient =
CW_USEDEFAULT;
return;
}
/***************************************************************************\
* SaveBoolean()
*
* Entry: a section name and entry name, and a flag
* Exit: Writes the flags value to the entry within the section
\***************************************************************************/
void SaveBoolean(
LPSTR lpszSection, // the section name
LPSTR lpszEntry, // entry name
BOOL fValue) // the flags value
{
if (fValue)
WritePrivateProfileString(lpszSection, lpszEntry, szTrue, szIniFile);
else
WritePrivateProfileString(lpszSection, lpszEntry, szFalse, szIniFile);
return;
}
/***************************************************************************\
* SaveDisplayState()
*
* Entry: None
* Exit: Saves settings for display state to .INI file
\***************************************************************************/
void SaveDisplayState(void) // Saves [DisplayState] settings to .INI
{
SaveBoolean(szDisplayState, szFLineGraph, g.LineGraph);
SaveBoolean(szDisplayState, szWinPos, win_on_top);
WritePrivateProfileString(szDisplayState, szCurrentGraph,
g.plg->lpszTitle, szIniFile);
return;
}
/***************************************************************************\
* SaveDWORD()
*
* Entry: a section name and entry name, and a DWORD
* Exit: Writes the DWORD value to the entry within the section
\***************************************************************************/
void SaveDWORD(
LPSTR lpszSection, // the section name
LPSTR lpszEntry, // entry name
DWORD dwValue) // the DWORD
{
static char szSmallBuf[SMALL_BUF_LEN];
wsprintf(szSmallBuf, "%lu", dwValue);
WritePrivateProfileString(lpszSection, lpszEntry, szSmallBuf, szIniFile);
return;
}
/***************************************************************************\
* SaveInt()
*
* Entry: a section name and entry name, and a integer
* Exit: Writes the integer value to the entry within the section
\***************************************************************************/
void SaveInt(
LPSTR lpszSection, // the section name
LPSTR lpszEntry, // entry name
BOOL nValue) // the integer
{
static char szSmallBuf[SMALL_BUF_LEN];
wsprintf(szSmallBuf, "%d", nValue);
WritePrivateProfileString(lpszSection, lpszEntry, szSmallBuf, szIniFile);
return;
}
/***************************************************************************\
* SaveLGDispSettings()
*
* Entry: None
* Exit: Saves settings for line graph display to .INI file.
\***************************************************************************/
void SaveLGDispSettings(void) // Saves line graph display settings to .INI
{
SaveBoolean(szLGDisp, szDisplayLegend, g.fDisplayLegend);
SaveBoolean(szLGDisp, szDisplayCalibration, g.fDisplayCalibration);
return;
}
/***************************************************************************\
* SaveLineGraphSettings()
*
* Entry: None
* Exit: Saves line graph settings to .INI file.
\***************************************************************************/
void SaveLineGraphSettings(void) // Saves line graph settings to .INI
{
SaveDWORD(g.plg->lpszTitle, szValBottom, g.plg->valBottom);
SaveDWORD(g.plg->lpszTitle, szDValAxisHeight, g.plg->dvalAxisHeight);
SaveDWORD(g.plg->lpszTitle, szMaxValues, g.plg->nMaxValues);
return;
}
/***************************************************************************\
* SaveRefreshSettings()
*
* Entry: None
* Exit: Saves settings for "Refresh" dialog to .INI file.
\***************************************************************************/
void SaveRefreshSettings(void) // Saves [Refresh] settings to .INI
{
SaveInt(szRefresh, szInterval, g.nTimerInterval);
SaveBoolean(szRefresh, szManualSampling, g.fManualSampling);
return;
}
/***************************************************************************\
* SaveWindowSettings()
*
* Entry: None
* Exit: Saves settings for [WindowSize] to .INI file.
\***************************************************************************/
void SaveWindowSettings(void) // Saves [WindowSize] settings to .INI
{
RECT rcWindow; // boundaries of current window
// get window position
GetWindowRect(g.hwnd, &rcWindow);
// write values to INI file
SaveInt(szWindowSize, szWindowLeft, rcWindow.left);
SaveInt(szWindowSize, szWindowTop, rcWindow.top);
SaveInt(szWindowSize, szWindowWidth, rcWindow.right - rcWindow.left);
SaveInt(szWindowSize, szWindowHeight, rcWindow.bottom - rcWindow.top);
return;
}