513 lines
16 KiB
C
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;
|
|
}
|