#ifndef __TMrbSystem_h__
#define __TMrbSystem_h__
namespace std {} using namespace std;
#if ROOT_VERSION_CODE <= ROOT_VERSION(4,01,00)
enum EFileModeMask {
kS_IFMT = 0170000,
kS_IFSOCK = 0140000,
kS_IFLNK = 0120000,
kS_IFREG = 0100000,
kS_IFBLK = 0060000,
kS_IFDIR = 0040000,
kS_IFCHR = 0020000,
kS_IFIFO = 0010000,
kS_ISUID = 0004000,
kS_ISGID = 0002000,
kS_ISVTX = 0001000,
kS_IRWXU = 00700,
kS_IRUSR = 00400,
kS_IWUSR = 00200,
kS_IXUSR = 00100,
kS_IRWXG = 00070,
kS_IRGRP = 00040,
kS_IWGRP = 00020,
kS_IXGRP = 00010,
kS_IRWXO = 00007,
kS_IROTH = 00004,
kS_IWOTH = 00002,
kS_IXOTH = 00001
};
inline Bool_t R_ISDIR(Int_t mode) { return ((mode & kS_IFMT) == kS_IFDIR); }
inline Bool_t R_ISCHR(Int_t mode) { return ((mode & kS_IFMT) == kS_IFCHR); }
inline Bool_t R_ISBLK(Int_t mode) { return ((mode & kS_IFMT) == kS_IFBLK); }
inline Bool_t R_ISREG(Int_t mode) { return ((mode & kS_IFMT) == kS_IFREG); }
inline Bool_t R_ISLNK(Int_t mode) { return ((mode & kS_IFMT) == kS_IFLNK); }
inline Bool_t R_ISFIFO(Int_t mode) { return ((mode & kS_IFMT) == kS_IFIFO); }
inline Bool_t R_ISSOCK(Int_t mode) { return ((mode & kS_IFMT) == kS_IFSOCK); }
struct FileStat_t {
Long_t fDev;
Long_t fIno;
Int_t fMode;
Int_t fUid;
Int_t fGid;
Long64_t fSize;
Long_t fMtime;
Bool_t fIsLink;
FileStat_t() : fDev(0), fIno(0), fMode(0), fUid(0), fGid(0), fSize(0),
fMtime(0), fIsLink(kFALSE) { }
};
#endif
#include "TSystem.h"
#include "TObjArray.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
class TMrbSystem: public TObject {
public:
enum EMrbFileType { kMrbRegularFile = kS_IFREG,
kMrbDirectory = kS_IFDIR,
kMrbSymbolicLink = kS_IFLNK,
kMrbCharDev = kS_IFCHR,
kMrbBlockDev = kS_IFBLK,
kMrbFifo = kS_IFIFO,
kMrbSocket = kS_IFSOCK,
kMrbExecutable = kS_IXUSR | kS_IXGRP | kS_IXOTH,
};
enum EMrbDirMode { kMrbDirAsIs = 0,
kMrbDirAppendSlash = BIT(0),
kMrbDirReturnDot = BIT(1),
kMrbDirExpandWdir = BIT(2)
};
public:
TMrbSystem();
~TMrbSystem() {};
Int_t FindFile(TObjArray & PathList,
const Char_t * FileName, const Char_t * SearchPath = "", Bool_t MultipleMatch = kFALSE) const;
const Char_t * GetDirName(TString & DirName, const Char_t * FilePath, EMrbDirMode Mode = kMrbDirAsIs) const;
const Char_t * GetBaseName(TString & FileName, const Char_t * FilePath) const;
const Char_t * GetExtension(TString & Extension, const Char_t * FileName) const;
Bool_t CheckExtension(const Char_t * FileName, const Char_t * Extension) const;
const Char_t * GetRelPath(TString & Path, const Char_t * BaseDir = NULL) const;
inline const Char_t * WorkingDirectory() const { return(gSystem->WorkingDirectory()); };
inline Bool_t ChangeDirectory(const Char_t * Path) const { return(gSystem->ChangeDirectory(Path)); };
Int_t GetType(const Char_t * Path) const;
inline Bool_t IsRegular(const Char_t * Path) const { return(this->CheckType(Path, TMrbSystem::kMrbRegularFile)); };
inline Bool_t IsExecutable(const Char_t * Path) const { return((this->GetType(Path) & TMrbSystem::kMrbExecutable) != 0); };
inline Bool_t IsDirectory(const Char_t * Path) const { return(this->CheckType(Path, TMrbSystem::kMrbDirectory)); };
inline Bool_t IsSymbolicLink(const Char_t * Path) const { return(this->CheckType(Path, TMrbSystem::kMrbSymbolicLink)); };
inline Bool_t Exists(const Char_t * Path) const { return(this->CheckAccess(Path, kFileExists)); };
inline Bool_t HasReadPermission(const Char_t * Path) const { return(this->CheckAccess(Path, kReadPermission)); };
inline Bool_t HasWritePermission(const Char_t * Path) const { return(this->CheckAccess(Path, kWritePermission)); };
inline Bool_t HasExecutePermission(const Char_t * Path) const { return(this->CheckAccess(Path, kExecutePermission)); };
const Char_t * GetSymbolicLink(TString & SymLink, const Char_t * Path);
const Char_t * GetHostName(TString & HostName);
const Char_t * GetDomainName(TString & DomainName);
const Char_t * Which(TString & Result, const Char_t * Search, const Char_t * File, EAccessMode Mode = kFileExists);
Bool_t GetStat(TMrbLofNamedX & StatBuf, const Char_t * Path);
Bool_t IsSameFile(const Char_t * Path1, const Char_t * Path2);
inline void SetIncludePath(const Char_t * IncludePath) { gSystem->SetIncludePath(IncludePath); };
inline const Char_t * GetIncludePath() { return(gSystem->GetIncludePath()); };
void AddIncludePath(const Char_t * IncludePath);
Int_t Load(const char * LofModules, Bool_t SystemFlag = kFALSE);
void PrintLoadPath(Int_t Status, const Char_t * Module, const Char_t * Path = "", const Char_t * Entry = "", Bool_t SystemFlag = kFALSE);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
inline Bool_t CheckType(const Char_t * Path, EMrbFileType Type) const { return((this->GetType(Path) & Type) == Type); };
Bool_t CheckAccess(const Char_t * Path, EAccessMode Mode) const;
ClassDef(TMrbSystem, 1)
};
#endif