mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
435 lines
10 KiB
435 lines
10 KiB
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1995 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
config.c
|
|
|
|
This file contains routines for managing configuration information.
|
|
|
|
*/
|
|
|
|
|
|
#include "gopherp.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
//
|
|
// Private constants.
|
|
//
|
|
|
|
#define MULTI_STRING_BUFFER 4096
|
|
|
|
|
|
//
|
|
// Private types.
|
|
//
|
|
|
|
|
|
//
|
|
// Private globals.
|
|
//
|
|
|
|
CHAR * _pszIniFileName = "gopher.ini";
|
|
CHAR * _pszSaveSettingsKey = "SaveSettings";
|
|
CHAR * _pszShowStatusBarKey = "ShowStatusBar";
|
|
CHAR * _pszWindowKey = "Window";
|
|
CHAR * _pszMruSection = "Server MRU List";
|
|
|
|
|
|
//
|
|
// Private prototypes.
|
|
//
|
|
|
|
VOID
|
|
SetupDefaults(
|
|
VOID
|
|
);
|
|
|
|
INT
|
|
LoadConfigInt(
|
|
CHAR * pszKeyName,
|
|
INT nDefault
|
|
);
|
|
|
|
VOID
|
|
SaveConfigInt(
|
|
CHAR * pszKeyName,
|
|
INT nValue
|
|
);
|
|
|
|
CHAR *
|
|
LoadConfigStr(
|
|
CHAR * pszSection,
|
|
CHAR * pszKeyName
|
|
);
|
|
|
|
VOID
|
|
SaveConfigStr(
|
|
CHAR * pszKeyName,
|
|
CHAR * pszValue
|
|
);
|
|
|
|
|
|
//
|
|
// Public functions.
|
|
//
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: LoadConfiguration
|
|
|
|
SYNOPSIS: Loads the application configuration from the private
|
|
.INI file.
|
|
|
|
********************************************************************/
|
|
VOID
|
|
LoadConfiguration(
|
|
VOID
|
|
)
|
|
{
|
|
CHAR * pszBuffer;
|
|
CHAR * pszScan;
|
|
CHAR * pszValue;
|
|
|
|
//
|
|
// Setup our default values in case we cannot access the .INI file.
|
|
//
|
|
|
|
SetupDefaults();
|
|
|
|
//
|
|
// Load the configuration.
|
|
//
|
|
|
|
_fSaveSettings = !!LoadConfigInt( _pszSaveSettingsKey,
|
|
_fSaveSettings );
|
|
|
|
_fShowStatusBar = !!LoadConfigInt( _pszShowStatusBarKey,
|
|
_fShowStatusBar );
|
|
|
|
pszValue = LoadConfigStr( _pszAppName, _pszWindowKey );
|
|
|
|
if( pszValue != NULL )
|
|
{
|
|
LONG anValues[10];
|
|
|
|
if( ParseStringIntoLongs( pszValue, 10, anValues ) )
|
|
{
|
|
_wpFrame.length = sizeof(_wpFrame);
|
|
_wpFrame.flags = (UINT)anValues[0];
|
|
_wpFrame.showCmd = (UINT)anValues[1];
|
|
_wpFrame.ptMinPosition.x = anValues[2];
|
|
_wpFrame.ptMinPosition.y = anValues[3];
|
|
_wpFrame.ptMaxPosition.x = anValues[4];
|
|
_wpFrame.ptMaxPosition.y = anValues[5];
|
|
_wpFrame.rcNormalPosition.left = anValues[6];
|
|
_wpFrame.rcNormalPosition.top = anValues[7];
|
|
_wpFrame.rcNormalPosition.right = anValues[8];
|
|
_wpFrame.rcNormalPosition.bottom = anValues[9];
|
|
}
|
|
}
|
|
|
|
//
|
|
// Allocate a 4K buffer for the multi-strings.
|
|
//
|
|
|
|
pszBuffer = M_ALLOC( MULTI_STRING_BUFFER );
|
|
|
|
if( pszBuffer == NULL )
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Load the MRU list.
|
|
//
|
|
|
|
GetPrivateProfileString( _pszMruSection,
|
|
NULL,
|
|
"",
|
|
pszBuffer,
|
|
MULTI_STRING_BUFFER,
|
|
_pszIniFileName );
|
|
|
|
pszScan = pszBuffer;
|
|
|
|
while( *pszScan )
|
|
{
|
|
CHAR * pszValue;
|
|
|
|
pszValue = LoadConfigStr( _pszMruSection, pszScan );
|
|
|
|
if( pszValue != NULL )
|
|
{
|
|
CHAR * pszTmp;
|
|
|
|
pszTmp = M_ALLOC( STRLEN( pszValue ) + 1 );
|
|
|
|
if( pszTmp == NULL )
|
|
{
|
|
break;
|
|
}
|
|
|
|
STRCPY( pszTmp, pszValue );
|
|
|
|
_apszServerMru[_nServerMruItems++] = pszTmp;
|
|
|
|
if( _nServerMruItems >= MAX_SERVER_MRU )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
pszScan += STRLEN( pszScan ) + 1;
|
|
}
|
|
|
|
M_FREE( pszBuffer );
|
|
|
|
} // LoadConfiguration
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: SaveConfiguration
|
|
|
|
SYNOPSIS: Saves the application configuration to the private
|
|
.INI file.
|
|
|
|
ENTRY: fForcedSave - If TRUE, then the configuration is saved
|
|
regardless of the _fSaveSettings flag. Otherwise,
|
|
the configuration is only saved if _fSaveSettings
|
|
is TRUE.
|
|
|
|
********************************************************************/
|
|
VOID
|
|
SaveConfiguration(
|
|
BOOL fForcedSave
|
|
)
|
|
{
|
|
INT i;
|
|
|
|
//
|
|
// Always save the state of the _fSaveSettings flag.
|
|
//
|
|
|
|
SaveSaveSettingsFlag();
|
|
|
|
//
|
|
// Only save the real configuration if either _fSaveSettings
|
|
// is TRUE or if this is a "forced" save.
|
|
//
|
|
|
|
if( _fSaveSettings || fForcedSave )
|
|
{
|
|
CHAR szValue[128];
|
|
|
|
SaveConfigInt( _pszShowStatusBarKey,
|
|
_fShowStatusBar );
|
|
|
|
wsprintf( szValue,
|
|
"%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu",
|
|
(DWORD)_wpFrame.flags,
|
|
(DWORD)_wpFrame.showCmd,
|
|
(DWORD)_wpFrame.ptMinPosition.x,
|
|
(DWORD)_wpFrame.ptMinPosition.y,
|
|
(DWORD)_wpFrame.ptMaxPosition.x,
|
|
(DWORD)_wpFrame.ptMaxPosition.y,
|
|
(DWORD)_wpFrame.rcNormalPosition.left,
|
|
(DWORD)_wpFrame.rcNormalPosition.top,
|
|
(DWORD)_wpFrame.rcNormalPosition.right,
|
|
(DWORD)_wpFrame.rcNormalPosition.bottom );
|
|
|
|
SaveConfigStr( _pszWindowKey,
|
|
szValue );
|
|
|
|
WritePrivateProfileString( _pszMruSection,
|
|
NULL,
|
|
NULL,
|
|
_pszIniFileName );
|
|
|
|
for( i = 0 ; i < _nServerMruItems ; i++ )
|
|
{
|
|
wsprintf( szValue, "Item%d", i );
|
|
WritePrivateProfileString( _pszMruSection,
|
|
szValue,
|
|
_apszServerMru[i],
|
|
_pszIniFileName );
|
|
}
|
|
}
|
|
|
|
for( i = 0 ; i < _nServerMruItems ; i++ )
|
|
{
|
|
M_FREE( _apszServerMru[i] );
|
|
_apszServerMru[i] = NULL;
|
|
}
|
|
|
|
} // SaveConfiguration
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: SaveSaveSettingsFlag
|
|
|
|
SYNOPSIS: Saves the state of the _fSaveSettings flag in the
|
|
private .INI file.
|
|
|
|
********************************************************************/
|
|
VOID
|
|
SaveSaveSettingsFlag(
|
|
VOID
|
|
)
|
|
{
|
|
SaveConfigInt( _pszSaveSettingsKey,
|
|
_fSaveSettings );
|
|
|
|
} // SaveSaveSettings
|
|
|
|
|
|
//
|
|
// Private functions.
|
|
//
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: SetupDefaults
|
|
|
|
SYNOPSIS: Puts the configuration data into a reasonable default
|
|
state. This is important if the .INI file cannot
|
|
be accessed.
|
|
|
|
********************************************************************/
|
|
VOID
|
|
SetupDefaults(
|
|
VOID
|
|
)
|
|
{
|
|
INT i;
|
|
|
|
_fSaveSettings = TRUE;
|
|
_fShowStatusBar = TRUE;
|
|
_wpFrame.length = 0; // NOTE! Intentionally invalid length!!
|
|
_nServerMruItems = 0;
|
|
|
|
for( i = 0 ; i < MAX_SERVER_MRU ; i++ )
|
|
{
|
|
_apszServerMru[i] = NULL;
|
|
}
|
|
|
|
} // SetupDefaults
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: LoadConfigInt
|
|
|
|
SYNOPSIS: Reads an INT value from the configuration file.
|
|
|
|
ENTRY: pszKeyName - The name of the configuration key.
|
|
|
|
nDefault - A default value to use if the value
|
|
cannot be found.
|
|
|
|
RETURNS: INT - The value from the configuration file.
|
|
|
|
********************************************************************/
|
|
INT
|
|
LoadConfigInt(
|
|
CHAR * pszKeyName,
|
|
INT nDefault
|
|
)
|
|
{
|
|
CHAR * pszValue;
|
|
|
|
pszValue = LoadConfigStr( _pszAppName, pszKeyName );
|
|
|
|
if( pszValue == NULL )
|
|
{
|
|
return nDefault;
|
|
}
|
|
|
|
return (INT)STRTOL( pszValue, NULL, 0 );
|
|
|
|
} // LoadConfigInt
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: SaveConfigInt
|
|
|
|
SYNOPSIS: Saves an INT value to the configuration file.
|
|
|
|
ENTRY: pszKeyName - The name of the configuration key.
|
|
|
|
nValue - The value to save.
|
|
|
|
********************************************************************/
|
|
VOID
|
|
SaveConfigInt(
|
|
CHAR * pszKeyName,
|
|
INT nValue
|
|
)
|
|
{
|
|
CHAR szValue[20];
|
|
|
|
wsprintf( szValue, "%d", nValue );
|
|
SaveConfigStr( pszKeyName, szValue );
|
|
|
|
} // SaveConfigInt
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: LoadConfigString
|
|
|
|
SYNOPSIS: Reads a string value from the configuration file.
|
|
|
|
ENTRY: pszSection - The name of the configuration section.
|
|
|
|
pszKeyName - The name of the configuration key.
|
|
|
|
RETURNS: CHAR * - The value from the configuration file.
|
|
Will be NULL if the value cannot be found.
|
|
|
|
********************************************************************/
|
|
CHAR *
|
|
LoadConfigStr(
|
|
CHAR * pszSection,
|
|
CHAR * pszKeyName
|
|
)
|
|
{
|
|
static CHAR szValue[512];
|
|
|
|
if( GetPrivateProfileString( pszSection,
|
|
pszKeyName,
|
|
"",
|
|
szValue,
|
|
sizeof(szValue),
|
|
_pszIniFileName ) > 0 )
|
|
{
|
|
return szValue;
|
|
}
|
|
|
|
return NULL;
|
|
|
|
} // LoadConfigStr
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: SaveConfigString
|
|
|
|
SYNOPSIS: Saves a string value to the configuration file.
|
|
|
|
ENTRY: pszKeyName - The name of the configuration key.
|
|
|
|
pszValue - The value to save.
|
|
|
|
********************************************************************/
|
|
VOID
|
|
SaveConfigStr(
|
|
CHAR * pszKeyName,
|
|
CHAR * pszValue
|
|
)
|
|
{
|
|
WritePrivateProfileString( _pszAppName,
|
|
pszKeyName,
|
|
pszValue,
|
|
_pszIniFileName );
|
|
} // SaveConfigStr
|
|
|