Windows NT 4.0 source code leak
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

/**********************************************************************/
/** 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