Initial revision

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Karsten Ballüder
1998-05-20 14:01:55 +00:00
parent 1b66e7e5ab
commit c801d85f15
779 changed files with 172138 additions and 0 deletions

153
src/common/config.cpp Normal file
View File

@@ -0,0 +1,153 @@
///////////////////////////////////////////////////////////////////////////////
// Name: config.cpp
// Purpose: implementation of wxConfig class
// Author: Vadim Zeitlin
// Modified by:
// Created: 07.04.98
// RCS-ID: $Id$
// Copyright: (c) 1997 Karsten Ball<6C>der Ballueder@usa.net
// Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows license
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// headers
// ============================================================================
#ifdef __GNUG__
#pragma implementation "app.h"
#endif
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif //__BORLANDC__
#include <wx/string.h>
#include <wx/intl.h>
#include <wx/file.h>
#include <wx/log.h>
#include <wx/textfile.h>
#include <wx/config.h>
#include <stdlib.h>
#include <ctype.h>
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxConfig
// ----------------------------------------------------------------------------
wxConfig::~wxConfig()
{
}
// ----------------------------------------------------------------------------
// static & global functions
// ----------------------------------------------------------------------------
// understands both Unix and Windows (but only under Windows) environment
// variables expansion: i.e. $var, $(var) and ${var} are always understood
// and in addition under Windows %var% is also.
wxString ExpandEnvVars(const wxString& str)
{
wxString strResult;
// don't change the values the enum elements: they must be equal
// to the matching [closing] delimiter.
enum Bracket
{
Bracket_None,
Bracket_Normal = ')',
Bracket_Curly = '}',
#ifdef __WINDOWS__
Bracket_Windows = '%' // yeah, Windows people are a bit strange ;-)
#endif
};
uint m;
for ( uint n = 0; n < str.Len(); n++ ) {
switch ( str[n] ) {
#ifdef __WINDOWS__
case '%':
#endif //WINDOWS
case '$':
{
Bracket bracket;
#ifdef __WINDOWS__
if ( str[n] == '%' )
bracket = Bracket_Windows;
else
#endif //WINDOWS
if ( n == str.Len() - 1 ) {
bracket = Bracket_None;
}
else {
switch ( str[n + 1] ) {
case '(':
bracket = Bracket_Normal;
n++; // skip the bracket
break;
case '{':
bracket = Bracket_Curly;
n++; // skip the bracket
break;
default:
bracket = Bracket_None;
}
}
m = n + 1;
while ( m < str.Len() && (isalnum(str[m]) || str[m] == '_') )
m++;
wxString strVarName(str.c_str() + n + 1, m - n - 1);
const char *pszValue = getenv(strVarName);
if ( pszValue != NULL ) {
strResult += pszValue;
}
else {
// variable doesn't exist => don't change anything
#ifdef __WINDOWS__
if ( bracket != Bracket_Windows )
#endif
if ( bracket != Bracket_None )
strResult << str[n - 1];
strResult << str[n] << strVarName;
}
// check the closing bracket
if ( bracket != Bracket_None ) {
if ( m == str.Len() || str[m] != (char)bracket ) {
wxLogWarning("missing '%c' at position %d in '%s'.",
(char)bracket, m + 1, str.c_str());
}
else {
// skip closing bracket
if ( pszValue == NULL )
strResult << (char)bracket;
m++;
}
}
n = m - 1; // skip variable name
}
break;
case '\\':
n++;
// fall through
default:
strResult += str[n];
}
}
return strResult;
}