#ifndef __TMrbEnv_h__
#define __TMrbEnv_h__
#include "Rtypes.h"
#include "TObject.h"
#include "TString.h"
#include "TList.h"
#include "TEnv.h"
#include "TSystem.h"
#include "TRegexp.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbString.h"
class TMrbEnv : public TObject {
public:
TMrbEnv(const Char_t * ResourceFile = "", const Char_t * DefaultsFile = "");
~TMrbEnv() {
if (!fIsSystemEnv) delete fCurEnv;
delete fDefaultsEnv;
};
TMrbEnv(const TMrbEnv &) {};
Bool_t Open(const Char_t * ResourceFile);
Bool_t OpenDefaults(const Char_t * DefaultsFile);
void Save(Bool_t Verbose = kTRUE);
void SetPrefix(const Char_t * Prefix);
Bool_t Set(const Char_t * Resource, const Char_t * StrVal);
Bool_t Set(const Char_t * Resource, Int_t IntVal, Int_t Base = 10);
Bool_t Set(const Char_t * Resource, Double_t DblVal, Int_t Precision = 4);
Bool_t Set(const Char_t * Resource, TMrbNamedX * NamedVal, Int_t Base = 10);
Int_t Get(const Char_t * Resource, Int_t Default);
Double_t Get(const Char_t * Resource, Double_t Default);
const Char_t * Get(TString & Result, const Char_t * Resource, const Char_t * Default = "");
const Char_t * Get(TMrbNamedX & Result, const Char_t * Resource, const Char_t * Default = "");
Int_t Find(const Char_t * LofPrefixes, const Char_t * Resource, Int_t Default);
const Char_t * Find(TString & Result, const Char_t * LofPrefixes, const Char_t * Resource, const Char_t * Default = "");
const Char_t * Find(TMrbNamedX & Result, const Char_t * LofPrefixes, const Char_t * Resource, const Char_t * Default = "");
Int_t GetDefault(const Char_t * Resource, Int_t Default);
const Char_t * GetDefault(TString & Result, const Char_t * Resource, const Char_t * Default = "");
Int_t CopyDefaults(const Char_t * Resource, Bool_t ExactMatch = kTRUE, Bool_t OverWrite = kFALSE, TMrbLofNamedX * LofSubstitutions = NULL);
Int_t CopyDefaults(const TRegexp & Regexp, Bool_t OverWrite = kFALSE, TMrbLofNamedX * LofSubstitutions = NULL);
Int_t SetUndef(const Char_t * Resource, Bool_t ExactMatch = kTRUE);
Int_t SetUndef(const TRegexp & Regexp);
Int_t Remove(const Char_t * Resource, Bool_t ExactMatch = kTRUE);
Int_t Remove(const TRegexp & Regexp);
Int_t Purge(Bool_t Verbose = kFALSE);
void Print(Option_t * Option) const { TObject::Print(Option); }
inline void Print() const { fCurEnv->Print(); };
inline void PrintDefaults() const { if (this->HasDefaults()) fDefaultsEnv->Print(); };
void PrintInfo();
inline TEnv * GetEnv() { return(fCurEnv); };
const Char_t * Resource(TString & R, const Char_t * F1, Int_t X1 = -1,
const Char_t * F2 = "", Int_t X2 = -1,
const Char_t * F3 = "") const;
inline Bool_t HasDefaults() const { return(fDefaultsEnv != NULL); };
inline Bool_t IsModified() const { return(fIsModified); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TString fCurFile;
TEnv * fCurEnv;
Bool_t fIsModified;
Bool_t fIsSystemEnv;
TString fDefaultsFile;
TEnv * fDefaultsEnv;
TString fResourceName;
TString fPrefix;
ClassDef(TMrbEnv, 1)
};
#endif