File indexing completed on 2025-09-16 09:10:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TSystem
0013 #define ROOT_TSystem
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #include <cstdio>
0026 #include <cctype>
0027 #include <fcntl.h>
0028 #ifndef _WIN32
0029 #include <unistd.h>
0030 #endif
0031
0032 #include "TNamed.h"
0033 #include "TInetAddress.h"
0034 #include "TTimer.h"
0035 #include <string>
0036
0037 class TSeqCollection;
0038 class TFdSet;
0039 class TVirtualMutex;
0040
0041
0042
0043
0044
0045
0046 enum ESocketBindOption {
0047 kInaddrAny = 0,
0048 kInaddrLoopback = 1,
0049 };
0050
0051 enum EAccessMode {
0052 kFileExists = 0,
0053 kExecutePermission = 1,
0054 kWritePermission = 2,
0055 kReadPermission = 4
0056 };
0057
0058 enum ELogOption {
0059 kLogPid = 0x01,
0060 kLogCons = 0x02
0061 };
0062
0063 enum ELogLevel {
0064 kLogEmerg = 0,
0065 kLogAlert = 1,
0066 kLogCrit = 2,
0067 kLogErr = 3,
0068 kLogWarning = 4,
0069 kLogNotice = 5,
0070 kLogInfo = 6,
0071 kLogDebug = 7
0072 };
0073
0074 enum ELogFacility {
0075 kLogLocal0,
0076 kLogLocal1,
0077 kLogLocal2,
0078 kLogLocal3,
0079 kLogLocal4,
0080 kLogLocal5,
0081 kLogLocal6,
0082 kLogLocal7
0083 };
0084
0085 enum EFpeMask {
0086 kNoneMask = 0x00,
0087 kInvalid = 0x01,
0088 kDivByZero = 0x02,
0089 kOverflow = 0x04,
0090 kUnderflow = 0x08,
0091 kInexact = 0x10,
0092 kDefaultMask = 0x07,
0093 kAllMask = 0x1F
0094 };
0095
0096 enum EFileModeMask {
0097 kS_IFMT = 0170000,
0098 kS_IFSOCK = 0140000,
0099 kS_IFLNK = 0120000,
0100 kS_IFOFF = 0110000,
0101 kS_IFREG = 0100000,
0102 kS_IFBLK = 0060000,
0103 kS_IFDIR = 0040000,
0104 kS_IFCHR = 0020000,
0105 kS_IFIFO = 0010000,
0106 kS_ISUID = 0004000,
0107 kS_ISGID = 0002000,
0108 kS_ISVTX = 0001000,
0109 kS_IRWXU = 00700,
0110 kS_IRUSR = 00400,
0111 kS_IWUSR = 00200,
0112 kS_IXUSR = 00100,
0113 kS_IRWXG = 00070,
0114 kS_IRGRP = 00040,
0115 kS_IWGRP = 00020,
0116 kS_IXGRP = 00010,
0117 kS_IRWXO = 00007,
0118 kS_IROTH = 00004,
0119 kS_IWOTH = 00002,
0120 kS_IXOTH = 00001
0121 };
0122
0123 inline Bool_t R_ISDIR(Int_t mode) { return ((mode & kS_IFMT) == kS_IFDIR); }
0124 inline Bool_t R_ISCHR(Int_t mode) { return ((mode & kS_IFMT) == kS_IFCHR); }
0125 inline Bool_t R_ISBLK(Int_t mode) { return ((mode & kS_IFMT) == kS_IFBLK); }
0126 inline Bool_t R_ISREG(Int_t mode) { return ((mode & kS_IFMT) == kS_IFREG); }
0127 inline Bool_t R_ISLNK(Int_t mode) { return ((mode & kS_IFMT) == kS_IFLNK); }
0128 inline Bool_t R_ISFIFO(Int_t mode) { return ((mode & kS_IFMT) == kS_IFIFO); }
0129 inline Bool_t R_ISSOCK(Int_t mode) { return ((mode & kS_IFMT) == kS_IFSOCK); }
0130 inline Bool_t R_ISOFF(Int_t mode) { return ((mode & kS_IFMT) == kS_IFOFF); }
0131
0132 struct FileStat_t {
0133 Long_t fDev;
0134 Long_t fIno;
0135 Int_t fMode;
0136 Int_t fUid;
0137 Int_t fGid;
0138 Long64_t fSize;
0139 Long_t fMtime;
0140 Bool_t fIsLink;
0141 TString fUrl;
0142 FileStat_t() : fDev(0), fIno(0), fMode(0), fUid(0), fGid(0), fSize(0),
0143 fMtime(0), fIsLink(kFALSE), fUrl("") { }
0144 };
0145
0146 struct UserGroup_t {
0147 Int_t fUid;
0148 Int_t fGid;
0149 TString fUser;
0150 TString fGroup;
0151 TString fPasswd;
0152 TString fRealName;
0153 TString fShell;
0154 UserGroup_t() : fUid(0), fGid(0), fUser(), fGroup(), fPasswd(),
0155 fRealName (), fShell() { }
0156 };
0157
0158 struct SysInfo_t {
0159 TString fOS;
0160 TString fModel;
0161 TString fCpuType;
0162 Int_t fCpus;
0163 Int_t fCpuSpeed;
0164 Int_t fBusSpeed;
0165 Int_t fL2Cache;
0166 Int_t fPhysRam;
0167 SysInfo_t() : fOS(), fModel(), fCpuType(), fCpus(0), fCpuSpeed(0),
0168 fBusSpeed(0), fL2Cache(0), fPhysRam(0) { }
0169 virtual ~SysInfo_t() { }
0170 ClassDef(SysInfo_t, 1);
0171 };
0172
0173 struct CpuInfo_t {
0174 Float_t fLoad1m;
0175 Float_t fLoad5m;
0176 Float_t fLoad15m;
0177 Float_t fUser;
0178 Float_t fSys;
0179 Float_t fTotal;
0180 Float_t fIdle;
0181 CpuInfo_t() : fLoad1m(0), fLoad5m(0), fLoad15m(0),
0182 fUser(0), fSys(0), fTotal(0), fIdle(0) { }
0183 virtual ~CpuInfo_t() { }
0184 ClassDef(CpuInfo_t, 1);
0185 };
0186
0187 struct MemInfo_t {
0188 Int_t fMemTotal;
0189 Int_t fMemUsed;
0190 Int_t fMemFree;
0191 Int_t fMemAvailable;
0192 Int_t fMemCached;
0193 Int_t fMemBuffer;
0194 Int_t fMemShared;
0195 Int_t fSwapTotal;
0196 Int_t fSwapUsed;
0197 Int_t fSwapFree;
0198 Int_t fSwapCached;
0199 Int_t fSReclaimable;
0200 MemInfo_t() : fMemTotal(0), fMemUsed(0), fMemFree(0), fMemAvailable(0), fMemCached(0), fMemBuffer(0), fMemShared(0),
0201 fSwapTotal(0), fSwapUsed(0), fSwapFree(0), fSwapCached(0), fSReclaimable(0){ }
0202 virtual ~MemInfo_t() { }
0203 ClassDef(MemInfo_t, 2);
0204 };
0205
0206 struct ProcInfo_t {
0207 Float_t fCpuUser;
0208 Float_t fCpuSys;
0209 Long_t fMemResident;
0210 Long_t fMemVirtual;
0211 ProcInfo_t() : fCpuUser(0), fCpuSys(0), fMemResident(0),
0212 fMemVirtual(0) { }
0213 virtual ~ProcInfo_t();
0214 ClassDef(ProcInfo_t, 1);
0215 };
0216
0217 struct RedirectHandle_t {
0218 TString fFile;
0219 TString fStdOutTty;
0220 TString fStdErrTty;
0221 Int_t fStdOutDup{-1};
0222 Int_t fStdErrDup{-1};
0223 Int_t fReadOffSet{-1};
0224 RedirectHandle_t(const char *n = nullptr) : fFile(n) { }
0225 void Reset() { fFile = ""; fStdOutTty = ""; fStdErrTty = "";
0226 fStdOutDup = -1; fStdErrDup = -1; fReadOffSet = -1; }
0227 };
0228
0229 enum ESockOptions {
0230 kSendBuffer,
0231 kRecvBuffer,
0232 kOobInline,
0233 kKeepAlive,
0234 kReuseAddr,
0235 kNoDelay,
0236 kNoBlock,
0237 kProcessGroup,
0238 kAtMark,
0239 kBytesToRead
0240 };
0241
0242 enum ESendRecvOptions {
0243 kDefault,
0244 kOob,
0245 kPeek,
0246 kDontBlock
0247 };
0248
0249 typedef void (*Func_t)();
0250
0251 R__EXTERN const char *gRootDir;
0252 R__EXTERN const char *gProgName;
0253 R__EXTERN const char *gProgPath;
0254 R__EXTERN TVirtualMutex *gSystemMutex;
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267 class TProcessEventTimer : public TTimer {
0268 public:
0269 TProcessEventTimer(Long_t delay);
0270 Bool_t Notify() override { return kTRUE; }
0271 Bool_t ProcessEvents();
0272 ClassDefOverride(TProcessEventTimer,0)
0273 };
0274
0275
0276 class TSystem : public TNamed {
0277
0278 public:
0279 enum EAclicMode { kDefault, kDebug, kOpt };
0280 enum EAclicProperties {
0281 kFlatBuildDir = BIT(0)
0282 };
0283
0284 protected:
0285 TFdSet *fReadmask{nullptr};
0286 TFdSet *fWritemask{nullptr};
0287 TFdSet *fReadready{nullptr};
0288 TFdSet *fWriteready{nullptr};
0289 TFdSet *fSignals{nullptr};
0290 Int_t fNfd{0};
0291 Int_t fMaxrfd{-1};
0292 Int_t fMaxwfd{-1};
0293 Int_t fSigcnt{0};
0294 TString fWdpath;
0295 TString fHostname;
0296 std::atomic<Bool_t> fInsideNotify{kFALSE};
0297 Int_t fBeepFreq{0};
0298 Int_t fBeepDuration{0};
0299
0300 Bool_t fInControl{kFALSE};
0301 Bool_t fDone{kFALSE};
0302 Int_t fLevel{0};
0303
0304 TList *fTimers{nullptr};
0305 TSeqCollection *fSignalHandler{nullptr};
0306 TSeqCollection *fFileHandler{nullptr};
0307 TSeqCollection *fStdExceptionHandler{nullptr};
0308 TSeqCollection *fOnExitList{nullptr};
0309
0310 TString fListLibs;
0311
0312 TString fBuildArch;
0313 TString fBuildCompiler;
0314 TString fBuildCompilerVersion;
0315 TString fBuildCompilerVersionStr;
0316 TString fBuildNode;
0317 TString fBuildDir;
0318 TString fFlagsDebug;
0319 TString fFlagsOpt;
0320 TString fListPaths;
0321 TString fIncludePath;
0322 TString fLinkedLibs;
0323 TString fSoExt;
0324 TString fObjExt;
0325 EAclicMode fAclicMode{kDefault};
0326 TString fMakeSharedLib;
0327 TString fMakeExe;
0328 TString fLinkdefSuffix;
0329 Int_t fAclicProperties{0};
0330 TSeqCollection *fCompiled{nullptr};
0331 TSeqCollection *fHelpers{nullptr};
0332
0333 TString &GetLastErrorString();
0334 const TString &GetLastErrorString() const;
0335
0336 TSystem *FindHelper(const char *path, void *dirptr = nullptr);
0337 virtual Bool_t ConsistentWith(const char *path, void *dirptr = nullptr);
0338 virtual const char *ExpandFileName(const char *fname);
0339 virtual Bool_t ExpandFileName(TString &fname);
0340 virtual void SigAlarmInterruptsSyscalls(Bool_t) { }
0341 virtual const char *GetLinkedLibraries();
0342 virtual void DoBeep(Int_t =-1, Int_t =-1) const { printf("\a"); fflush(stdout); }
0343
0344 static const char *StripOffProto(const char *path, const char *proto);
0345
0346 private:
0347 TSystem(const TSystem&) = delete;
0348 TSystem& operator=(const TSystem&) = delete;
0349 Bool_t ExpandFileName(const char *fname, char *xname, const int kBufSize);
0350
0351 public:
0352 TSystem(const char *name = "Generic", const char *title = "Generic System");
0353 virtual ~TSystem();
0354
0355
0356 virtual Bool_t Init();
0357 virtual void SetProgname(const char *name);
0358 virtual void SetDisplay();
0359 void SetErrorStr(const char *errstr);
0360 const char *GetErrorStr() const { return GetLastErrorString(); }
0361 virtual const char *GetError();
0362 virtual Int_t GetCryptoRandom(void *buf, Int_t len);
0363 void RemoveOnExit(TObject *obj);
0364 virtual const char *HostName();
0365 virtual void NotifyApplicationCreated();
0366
0367 static Int_t GetErrno();
0368 static void ResetErrno();
0369 void Beep(Int_t freq=-1, Int_t duration=-1, Bool_t setDefault=kFALSE);
0370 void GetBeepDefaults(Int_t &freq, Int_t &duration) const { freq = fBeepFreq; duration = fBeepDuration; }
0371
0372
0373 virtual void Run();
0374 virtual Bool_t ProcessEvents();
0375 virtual void DispatchOneEvent(Bool_t pendingOnly = kFALSE);
0376 virtual void ExitLoop();
0377 Bool_t InControl() const { return fInControl; }
0378 virtual void InnerLoop();
0379 virtual Int_t Select(TList *active, Long_t timeout);
0380 virtual Int_t Select(TFileHandler *fh, Long_t timeout);
0381
0382
0383 virtual void AddSignalHandler(TSignalHandler *sh);
0384 virtual TSignalHandler *RemoveSignalHandler(TSignalHandler *sh);
0385 virtual void ResetSignal(ESignals sig, Bool_t reset = kTRUE);
0386 virtual void ResetSignals();
0387 virtual void IgnoreSignal(ESignals sig, Bool_t ignore = kTRUE);
0388 virtual void IgnoreInterrupt(Bool_t ignore = kTRUE);
0389 virtual TSeqCollection *GetListOfSignalHandlers() const { return fSignalHandler; }
0390 virtual void AddFileHandler(TFileHandler *fh);
0391 virtual TFileHandler *RemoveFileHandler(TFileHandler *fh);
0392 virtual TSeqCollection *GetListOfFileHandlers() const { return fFileHandler; }
0393 virtual void AddStdExceptionHandler(TStdExceptionHandler *eh);
0394 virtual TStdExceptionHandler *RemoveStdExceptionHandler(TStdExceptionHandler *eh);
0395 virtual TSeqCollection *GetListOfStdExceptionHandlers() const { return fStdExceptionHandler; }
0396
0397
0398 virtual Int_t GetFPEMask();
0399 virtual Int_t SetFPEMask(Int_t mask = kDefaultMask);
0400
0401
0402 virtual TTime Now();
0403 virtual TList *GetListOfTimers() const { return fTimers; }
0404 virtual void AddTimer(TTimer *t);
0405 virtual TTimer *RemoveTimer(TTimer *t);
0406 virtual void ResetTimer(TTimer *) { }
0407 virtual Long_t NextTimeOut(Bool_t mode);
0408 virtual void Sleep(UInt_t milliSec);
0409
0410
0411 virtual Int_t Exec(const char *shellcmd);
0412 virtual FILE *OpenPipe(const char *command, const char *mode);
0413 virtual int ClosePipe(FILE *pipe);
0414 virtual TString GetFromPipe(const char *command, Int_t *ret = nullptr, Bool_t redirectStderr = kFALSE);
0415 virtual int GetPid();
0416 virtual void StackTrace();
0417
0418 [[ noreturn ]] virtual void Exit(int code, Bool_t mode = kTRUE);
0419 [[ noreturn ]] virtual void Abort(int code = 0);
0420
0421
0422 virtual int MakeDirectory(const char *name);
0423 virtual void *OpenDirectory(const char *name);
0424 virtual void FreeDirectory(void *dirp);
0425 virtual const char *GetDirEntry(void *dirp);
0426 virtual void *GetDirPtr() const { return nullptr; }
0427 virtual Bool_t ChangeDirectory(const char *path);
0428 virtual const char *WorkingDirectory();
0429 virtual std::string GetWorkingDirectory() const;
0430 virtual const char *HomeDirectory(const char *userName = nullptr);
0431 virtual std::string GetHomeDirectory(const char *userName = nullptr) const;
0432 virtual int mkdir(const char *name, Bool_t recursive = kFALSE);
0433 Bool_t cd(const char *path) { return ChangeDirectory(path); }
0434 const char *pwd() { return WorkingDirectory(); }
0435 virtual const char *TempDirectory() const;
0436 virtual FILE *TempFileName(TString &base, const char *dir = nullptr, const char *suffix = nullptr);
0437
0438
0439 virtual const char *BaseName(const char *pathname);
0440 virtual const char *DirName(const char *pathname);
0441 virtual TString GetDirName(const char *pathname);
0442 virtual char *ConcatFileName(const char *dir, const char *name);
0443 virtual Bool_t IsAbsoluteFileName(const char *dir);
0444 virtual Bool_t IsFileInIncludePath(const char *name, char **fullpath = nullptr);
0445 virtual const char *PrependPathName(const char *dir, TString& name);
0446 virtual Bool_t ExpandPathName(TString &path);
0447 virtual char *ExpandPathName(const char *path);
0448 virtual Bool_t AccessPathName(const char *path, EAccessMode mode = kFileExists);
0449 virtual Bool_t IsPathLocal(const char *path);
0450 virtual int CopyFile(const char *from, const char *to, Bool_t overwrite = kFALSE);
0451 virtual int Rename(const char *from, const char *to);
0452 virtual int Link(const char *from, const char *to);
0453 virtual int Symlink(const char *from, const char *to);
0454 virtual int Unlink(const char *name);
0455 int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime);
0456 int GetPathInfo(const char *path, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime);
0457 virtual int GetPathInfo(const char *path, FileStat_t &buf);
0458 virtual int GetFsInfo(const char *path, Long_t *id, Long_t *bsize, Long_t *blocks, Long_t *bfree);
0459 virtual int Chmod(const char *file, UInt_t mode);
0460 virtual int Umask(Int_t mask);
0461 virtual int Utime(const char *file, Long_t modtime, Long_t actime);
0462 virtual const char *UnixPathName(const char *unixpathname);
0463 virtual const char *FindFile(const char *search, TString& file, EAccessMode mode = kFileExists);
0464 virtual char *Which(const char *search, const char *file, EAccessMode mode = kFileExists);
0465 virtual TList *GetVolumes(Option_t *) const { return nullptr; }
0466
0467
0468 virtual Int_t GetUid(const char *user = nullptr);
0469 virtual Int_t GetGid(const char *group = nullptr);
0470 virtual Int_t GetEffectiveUid();
0471 virtual Int_t GetEffectiveGid();
0472 virtual UserGroup_t *GetUserInfo(Int_t uid);
0473 virtual UserGroup_t *GetUserInfo(const char *user = nullptr);
0474 virtual UserGroup_t *GetGroupInfo(Int_t gid);
0475 virtual UserGroup_t *GetGroupInfo(const char *group = nullptr);
0476
0477
0478 virtual void Setenv(const char *name, const char *value);
0479 virtual void Unsetenv(const char *name);
0480 virtual const char *Getenv(const char *env);
0481
0482
0483 virtual void Openlog(const char *name, Int_t options, ELogFacility facility);
0484 virtual void Syslog(ELogLevel level, const char *mess);
0485 virtual void Closelog();
0486
0487
0488 virtual Int_t RedirectOutput(const char *name, const char *mode = "a", RedirectHandle_t *h = nullptr);
0489 virtual void ShowOutput(RedirectHandle_t *h);
0490
0491
0492 virtual void AddDynamicPath(const char *pathname);
0493 virtual const char *GetDynamicPath();
0494 virtual void SetDynamicPath(const char *pathname);
0495 char *DynamicPathName(const char *lib, Bool_t quiet = kFALSE);
0496 virtual const char *FindDynamicLibrary(TString& lib, Bool_t quiet = kFALSE);
0497 virtual Func_t DynFindSymbol(const char *module, const char *entry);
0498 virtual int Load(const char *module, const char *entry = "", Bool_t system = kFALSE);
0499 virtual void Unload(const char *module);
0500 virtual UInt_t LoadAllLibraries();
0501 virtual void ListSymbols(const char *module, const char *re = "");
0502 virtual void ListLibraries(const char *regexp = "");
0503 virtual const char *GetLibraries(const char *regexp = "",
0504 const char *option = "",
0505 Bool_t isRegexp = kTRUE);
0506
0507
0508 virtual TInetAddress GetHostByName(const char *server);
0509 virtual TInetAddress GetPeerName(int sock);
0510 virtual TInetAddress GetSockName(int sock);
0511 virtual int GetServiceByName(const char *service);
0512 virtual char *GetServiceByPort(int port);
0513 virtual int OpenConnection(const char *server, int port, int tcpwindowsize = -1, const char *protocol = "tcp");
0514 virtual int AnnounceTcpService(int port, Bool_t reuse, int backlog, int tcpwindowsize = -1,
0515 ESocketBindOption socketBindOption = ESocketBindOption::kInaddrAny);
0516 virtual int AnnounceUdpService(int port, int backlog, ESocketBindOption socketBindOption = ESocketBindOption::kInaddrAny);
0517 virtual int AnnounceUnixService(int port, int backlog);
0518 virtual int AnnounceUnixService(const char *sockpath, int backlog);
0519 virtual int AcceptConnection(int sock);
0520 virtual void CloseConnection(int sock, Bool_t force = kFALSE);
0521 virtual int RecvRaw(int sock, void *buffer, int length, int flag);
0522 virtual int SendRaw(int sock, const void *buffer, int length, int flag);
0523 virtual int RecvBuf(int sock, void *buffer, int length);
0524 virtual int SendBuf(int sock, const void *buffer, int length);
0525 virtual int SetSockOpt(int sock, int kind, int val);
0526 virtual int GetSockOpt(int sock, int kind, int *val);
0527
0528
0529 virtual int GetSysInfo(SysInfo_t *info) const;
0530 virtual int GetCpuInfo(CpuInfo_t *info, Int_t sampleTime = 1000) const;
0531 virtual int GetMemInfo(MemInfo_t *info) const;
0532 virtual int GetProcInfo(ProcInfo_t *info) const;
0533
0534
0535 virtual void AddIncludePath(const char *includePath);
0536 virtual void AddLinkedLibs(const char *linkedLib);
0537 virtual int CompileMacro(const char *filename, Option_t *opt = "", const char *library_name = "", const char *build_dir = "", UInt_t dirmode = 0);
0538 virtual Int_t GetAclicProperties() const;
0539 virtual const char *GetBuildArch() const;
0540 virtual const char *GetBuildCompiler() const;
0541 virtual const char *GetBuildCompilerVersion() const;
0542 virtual const char *GetBuildCompilerVersionStr() const;
0543 virtual const char *GetBuildNode() const;
0544 virtual const char *GetBuildDir() const;
0545 virtual const char *GetFlagsDebug() const;
0546 virtual const char *GetFlagsOpt() const;
0547 virtual const char *GetIncludePath();
0548 virtual const char *GetLinkedLibs() const;
0549 virtual const char *GetLinkdefSuffix() const;
0550 virtual EAclicMode GetAclicMode() const;
0551 virtual const char *GetMakeExe() const;
0552 virtual const char *GetMakeSharedLib() const;
0553 virtual const char *GetSoExt() const;
0554 virtual const char *GetObjExt() const;
0555 virtual void SetBuildDir(const char* build_dir, Bool_t isflat = kFALSE);
0556 virtual void SetFlagsDebug(const char *);
0557 virtual void SetFlagsOpt(const char *);
0558 virtual void SetIncludePath(const char *includePath);
0559 virtual void SetMakeExe(const char *directives);
0560 virtual void SetAclicMode(EAclicMode mode);
0561 virtual void SetMakeSharedLib(const char *directives);
0562 virtual void SetLinkedLibs(const char *linkedLibs);
0563 virtual void SetLinkdefSuffix(const char *suffix);
0564 virtual void SetSoExt(const char *soExt);
0565 virtual void SetObjExt(const char *objExt);
0566 virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const;
0567 virtual void CleanCompiledMacros();
0568
0569 ClassDefOverride(TSystem,0)
0570 };
0571
0572 R__EXTERN TSystem *gSystem;
0573 R__EXTERN TFileHandler *gXDisplay;
0574
0575
0576 #endif