22 #include "RConfigure.h"    49 #if defined(R__MACOSX) && (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)    61 class TIdleTimer : 
public TTimer {
    70 Bool_t TIdleTimer::Notify()
    90    gROOT->EndOfProcessCleanups();
    97    fArgc(0), fArgv(0), fAppImp(0), fIsRunning(
kFALSE), fReturnFromRun(
kFALSE),
    99    fFiles(0), fIdleTimer(0), fSigHandler(0), fExitOnException(kDontExit),
   120                            void * , 
Int_t numOptions) :
   147       Error(
"TApplication", 
"only one instance of TApplication allowed");
   153       ::Fatal(
"TApplication::TApplication", 
"ROOT system not initialized");
   156       ::Fatal(
"TApplication::TApplication", 
"gSystem not initialized");
   159    if (!hasRegisterAtExit) {
   162       hasRegisterAtExit = 
kTRUE;
   164    gROOT->SetName(appClassName);
   167    if (argc && *argc > 0) {
   172    for (
int i = 0; i < 
fArgc; i++)
   198    gROOT->SetLineHasBeenProcessed();
   205       const char *ssystem = 
gEnv->
GetValue(
"Root.TMemStat.system",
"gnubuiltin");
   207          gROOT->ProcessLine(
Form(
"new TMemStat(\"%s\",%d,%d);",ssystem,buffersize,maxcalls));
   213    gROOT->SetApplication(
this);
   222    for (
int i = 0; i < 
fArgc; i++)
   240          gROOT->EndOfProcessCleanups();
   269 #if defined(R__MACOSX) && (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)   270    gVirtualX = 
new ROOT::iOS::TGIOS(
"TGIOS", 
"VirtualX for iOS");
   289 #if !defined(R__WIN32)   299          if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TVirtualX", 
"x11ttf")))
   301                Info(
"InitializeGraphics", 
"no TTF support");
   355       if (index >= 
fArgc) {
   356          Error(
"Argv", 
"index (%d) >= number of arguments (%d)", index, 
fArgc);
   404    static char null[1] = { 
"" };
   416    for (i = 1; i < *argc; i++) {
   417       if (!strcmp(argv[i], 
"-?") || !strncmp(argv[i], 
"-h", 2) ||
   418           !strncmp(argv[i], 
"--help", 6)) {
   419          fprintf(stderr, 
"Usage: %s [-l] [-b] [-n] [-q] [dir] [[file:]data.root] [file1.C ... fileN.C]\n", argv[0]);
   420          fprintf(stderr, 
"Options:\n");
   421          fprintf(stderr, 
"  -b : run in batch mode without graphics\n");
   422          fprintf(stderr, 
"  -x : exit on exception\n");
   423          fprintf(stderr, 
"  -e expression: request execution of the given C++ expression\n");
   424          fprintf(stderr, 
"  -n : do not execute logon and logoff macros as specified in .rootrc\n");
   425          fprintf(stderr, 
"  -q : exit after processing command line macro files\n");
   426          fprintf(stderr, 
"  -l : do not show splash screen\n");
   427          fprintf(stderr, 
" dir : if dir is a valid directory cd to it before executing\n");
   428          fprintf(stderr, 
"\n");
   429          fprintf(stderr, 
"  -?      : print usage\n");
   430          fprintf(stderr, 
"  -h      : print usage\n");
   431          fprintf(stderr, 
"  --help  : print usage\n");
   432          fprintf(stderr, 
"  -config : print ./configure options\n");
   433          fprintf(stderr, 
"  -memstat : run with memory usage monitoring\n");
   434          fprintf(stderr, 
"\n");
   436       } 
else if (!strcmp(argv[i], 
"-config")) {
   437          fprintf(stderr, 
"ROOT ./configure options:\n%s\n", 
gROOT->GetConfigOptions());
   439       } 
else if (!strcmp(argv[i], 
"-memstat")) {
   442       } 
else if (!strcmp(argv[i], 
"-b")) {
   445       } 
else if (!strcmp(argv[i], 
"-n")) {
   448       } 
else if (!strcmp(argv[i], 
"-q")) {
   451       } 
else if (!strcmp(argv[i], 
"-l")) {
   455       } 
else if (!strcmp(argv[i], 
"-x")) {
   458       } 
else if (!strcmp(argv[i], 
"-splash")) {
   462       } 
else if (!strcmp(argv[i], 
"-e")) {
   473             Warning(
"GetOptions", 
"-e must be followed by an expression.");
   476       } 
else if (argv[i][0] != 
'-' && argv[i][0] != 
'+') {
   479          char *arg = strchr(argv[i], 
'(');
   480          if (arg) *arg = 
'\0';
   492                } 
else if (!strcmp(
gROOT->GetName(), 
"Rint")) {
   493                   Warning(
"GetOptions", 
"only one directory argument can be specified (%s)", dir);
   495             } 
else if (size > 0) {
   501                Warning(
"GetOptions", 
"file %s has size 0, skipping", dir);
   508                   if (!strcmp(
gROOT->GetName(), 
"Rint"))
   509                      Warning(
"GetOptions", 
"file %s not found", dir);
   530                   if (!strcmp(
gROOT->GetName(), 
"Rint"))
   531                      Warning(
"GetOptions", 
"macro %s not found", fname.
Data());
   546    for (i = 0; i < *argc; i++) {
   547       if (strcmp(argv[i], 
"")) {
   565    Emit(
"HandleIdleTimer()");
   611    Printf(
"\nROOT special commands.");
   612    Printf(
"===========================================================================");
   613    Printf(
"             pwd          : show current directory, pad and style");
   614    Printf(
"             ls           : list contents of current directory");
   615    Printf(
"             which [file] : shows path of macro file");
   624    if (
gROOT->IsBatch()) 
return;
   627    if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TVirtualPad")))
   632    TString title1 = 
"ROOT interface to ";
   637    nativex = 
"win32gdk";
   639    title   = title1 + 
"Win32gdk";
   640 #elif defined(R__HAS_COCOA)   643    title   = title1 + 
"Quartz";
   647    title   = title1 + 
"X11";
   652    if (guiBackend == 
"native") {
   653       guiBackend = nativex;
   656       title = title1 + guiBackend;
   660    if (guiFactory == 
"native")
   661       guiFactory = nativeg;
   663    if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TVirtualX", guiBackend))) {
   671    if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TGuiFactory", guiFactory))) {
   711    if (!ln || strlen(ln) <= 0)
   723    while (line.
Tokenize(tkn, from, 
" ")) {
   727       } 
else if (tkn == 
"-d") {
   729       } 
else if (tkn == 
"-close") {
   732          ::Warning(
"TApplication::ParseRemoteLine",
"unknown option: %s", tkn.
Data());
   740          } 
else if (isHostDir) {
   745          } 
else if (isScript) {
   777    if (!strncmp(line, 
"-?", 2) || !strncmp(line, 
"-h", 2) ||
   778        !strncmp(line, 
"--help", 6)) {
   779       Info(
"ProcessRemote", 
"remote session help:");
   780       Printf(
".R [user@]host[:dir] [-l user] [-d dbg] [[<]script] | [host] -close");
   781       Printf(
"Create a ROOT session on the specified remote host.");
   782       Printf(
"The variable \"dir\" is the remote directory to be used as working dir.");
   783       Printf(
"The username can be specified in two ways, \"-l\" having the priority");
   784       Printf(
"(as in ssh). A \"dbg\" value > 0 gives increasing verbosity.");
   785       Printf(
"The last argument \"script\" allows to specify an alternative script to");
   786       Printf(
"be executed remotely to startup the session, \"roots\" being");
   787       Printf(
"the default. If the script is preceded by a \"<\" the script will be");
   788       Printf(
"sourced, after which \"roots\" is executed. The sourced script can be ");
   789       Printf(
"used to change the PATH and other variables, allowing an alternative");
   790       Printf(
"\"roots\" script to be found.");
   791       Printf(
"To close down a session do \".R host -close\".");
   792       Printf(
"To switch between sessions do \".R host\", to switch to the local");
   793       Printf(
"session do \".R\".");
   794       Printf(
"To list all open sessions do \"gApplication->GetApplications()->Print()\".");
   801    if (hostdir.
Length() <= 0) {
   811    } 
else if (rc == 1) {
   822    const char *sc = (script.
Length() > 0) ? script.
Data() : 0;
   833    static int PrintFile(
const char* filename) {
   837          Error(
"ProcessLine()", 
"Cannot find file %s", filename);
   840       std::ifstream instr(sFileName);
   855    if (!line || !*line) 
return 0;
   858    if (!strncmp(line, 
".R", 2)) {
   860       while (*(line+n) == 
' ')
   871    if (!strncasecmp(line, 
".qqqqqqq", 7)) {
   873    } 
else if (!strncasecmp(line, 
".qqqqq", 5)) {
   874       Info(
"ProcessLine", 
"Bye... (try '.qqqqqqq' if still running)");
   876    } 
else if (!strncasecmp(line, 
".exit", 4) || !strncasecmp(line, 
".quit", 2)) {
   881    if (!strncmp(line, 
"?", 1) || !strncmp(line, 
".help", 5)) {
   886    if (!strncmp(line, 
".demo", 5)) {
   887       if (
gROOT->IsBatch()) {
   888          Error(
"ProcessLine", 
"Cannot show demos in batch mode!");
   899    if (!strncmp(line, 
".license", 8)) {
   901       return PrintFile(ROOTDOCDIR 
"/LICENSE");
   903       return PrintFile(
"$(ROOTSYS)/LICENSE");
   907    if (!strncmp(line, 
".credits", 8)) {
   909       return PrintFile(ROOTDOCDIR 
"/CREDITS");
   911       return PrintFile(
"$(ROOTSYS)/README/CREDITS");
   916    if (!strncmp(line, 
".pwd", 4)) {
   926    if (!strncmp(line, 
".ls", 3)) {
   928       if (line[3]) opt = &line[3];
   933    if (!strncmp(line, 
".which", 6)) {
   934       char *fn  = 
Strip(line+7);
   935       char *s   = strtok(fn, 
"+(");
   946    if (!strncmp(line, 
".L", 2) || !strncmp(line, 
".U", 2)) {
   954          Warning(
"ProcessLine", 
"argument(s) \"%s\" ignored with .%c", arguments.
Data(),
   959          Error(
"ProcessLine", 
"macro %s not found in path %s", fname.
Data(),
   964          if (posSpace == -1) cmd.
Remove(1);
   965          else cmd.
Remove(posSpace);
   985    if (!strncmp(line, 
".X", 2) || !strncmp(line, 
".x", 2)) {
   989    if (!strcmp(line, 
".reset")) {
   991       Printf(
"*** .reset not allowed, please use gROOT->Reset() ***");
   997       gROOT->GetListOfClasses()->Delete();
  1022    static const Int_t kBufSize = 1024;
  1024    if (!file || !*file) 
return 0;
  1033       ::Error(
"TApplication::ExecuteFile", 
"macro %s not found in path %s", fname.
Data(),
  1041    ::std::ifstream macro(exnam, std::ios::in);
  1042    if (!macro.good()) {
  1043       ::Error(
"TApplication::ExecuteFile", 
"%s no such file", exnam);
  1050    char currentline[kBufSize];
  1051    char dummyline[kBufSize];
  1061       bool res = (bool)macro.getline(currentline, kBufSize);
  1062       if (macro.eof()) 
break;
  1067          while (!macro.getline(dummyline, kBufSize) && !macro.eof()) {
  1072       while (s && (*s == 
' ' || *s == 
'\t')) s++;   
  1079          if (strstr(cs, 
"#ifndef__CINT__") ||
  1080              strstr(cs, 
"#if!defined(__CINT__)"))
  1082          else if (ifndefc && (strstr(cs, 
"#ifdef") || strstr(cs, 
"#ifndef") ||
  1083                   strstr(cs, 
"#ifdefined") || strstr(cs, 
"#if!defined")))
  1085          else if (ifndefc && strstr(cs, 
"#endif")) {
  1090          } 
else if (ifndefc && !ifdef && strstr(cs, 
"#else"))
  1094       if (!*s || *s == 
'#' || ifndefc || !strncmp(s, 
"//", 2)) 
continue;
  1096       if (!comment && (!strncmp(s, 
".X", 2) || !strncmp(s, 
".x", 2))) {
  1102       if (!strncmp(s, 
"/*", 2)) comment = 1;
  1106          s = strstr(s, 
"*/");
  1111             while (s && (*s == 
' ' || *s == 
'\t')) s++; 
  1113             if (!strncmp(s, 
"//", 2)) 
continue;
  1114             if (!strncmp(s, 
"/*", 2)) {
  1120       if (!comment && *s == 
'{') tempfile = 1;
  1121       if (!comment) 
break;
  1130          exname += aclicMode;
  1132       exname += arguments;
  1137          tempbuf.
Form(
".x %s", exname.
Data());
  1139          tempbuf.
Form(
".X%s %s", keep ? 
"k" : 
" ", exname.
Data());
  1169    fIdleTimer = 
new TIdleTimer(idleTimeInSec*1000);
  1220    Emit(
"Terminate(Int_t)", status);
  1240    Emit(
"LineProcessed(const char*)", line);
  1248    Emit(
"KeyPressed(Int_t)", key);
  1256    Emit(
"ReturnPressed(char*)", text);
  1276    if (!gApplication) {
  1285          Printf(
"<TApplication::CreateApplication>: "  1286                 "created default TApplication");
  1287       delete [] 
a; 
delete [] 
b;
  1323       ::Error(
"TApplication::Open", 
"list of applications undefined - protocol error");
  1335    if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TApplication",
"remote"))) {
  1339          ::Error(
"TApplication::Open", 
"failed to load plugin for TApplicationRemote");
  1342       ::Error(
"TApplication::Open", 
"failed to find plugin for TApplicationRemote");
  1353       gROOT->RefreshBrowsers();
  1357               "TApplicationRemote for %s could not be instantiated", url);
  1372       gROOT->GetListOfBrowsables()->RecursiveRemove(app);
  1376          b->RecursiveRemove(app);
  1377       gROOT->RefreshBrowsers();
 
virtual const char * GetName() const
Returns name of object. 
 
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode. 
 
virtual void LoadGraphicsLibs()
Load shared libs necessary for graphics. 
 
std::istream & ReadFile(std::istream &str)
Replace string with the contents of strm, stopping at an EOF. 
 
R__EXTERN TGuiFactory * gBatchGuiFactory
 
virtual Long_t ProcessLine(const char *line, Bool_t sync=kFALSE, Int_t *error=0)
Process a single command line, either a C++ statement or an interpreter command starting with a "...
 
Semi-Abstract base class defining a generic interface to the underlying, low level, native graphics backend (X11, Win32, MacOS, OpenGL...). 
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message. 
 
virtual void ls(Option_t *option="") const
Show available sessions. 
 
static Bool_t fgGraphInit
 
virtual const char * WorkingDirectory()
Return working directory. 
 
char * Compress(const char *str)
Remove all blanks from the string str. 
 
void Reset()
Reset the timer. 
 
virtual void NotifyApplicationCreated()
Hook to tell TSystem that the TApplication object has been created. 
 
Collectable string class. 
 
R__EXTERN TClassTable * gClassTable
 
virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const
This method split a filename of the form: ~~~ {.cpp} [path/]macro.C[+|++[k|f|g|O|c|s|d|v|-]][(args)]...
 
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects. 
 
R__EXTERN TVirtualMutex * gInterpreterMutex
 
This class represents a WWW compatible URL. 
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
R__EXTERN TStyle * gStyle
 
int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime)
Get info about a file: id, size, flags, modification time. 
 
Bool_t TestBit(UInt_t f) const
 
const char * GetProtocol() const
 
virtual void MakeBatch()
Switch to batch mode. 
 
virtual Bool_t ChangeDirectory(const char *path)
Change directory. 
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
Int_t LoadPlugin()
Load the plugin library for this handler. 
 
TSignalHandler * fSigHandler
 
void ToLower()
Change string to lower-case. 
 
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers. 
 
static Bool_t fgGraphNeeded
 
R__EXTERN TVirtualMutex * gROOTMutex
 
EExitOnException fExitOnException
 
virtual void ReturnPressed(char *text)
Emit signal when return key was pressed. 
 
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path. 
 
virtual void Terminate(Int_t status=0)
Terminate the application by call TSystem::Exit() unless application has been told to return from Run...
 
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself. 
 
virtual Long_t ProcessRemote(const char *line, Int_t *error=0)
Process the content of a line starting with ".R" (already stripped-off) The format is [user@]host[:di...
 
TString & Insert(Ssiz_t pos, const char *s)
 
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f. 
 
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL. 
 
static const char * GetMacroPath()
Get macro search path. Static utility function. 
 
const char * GetFile() const
 
const char * GetHost() const
 
virtual TApplicationImp * CreateApplicationImp(const char *classname, int *argc, char **argv)
Create a batch version of TApplicationImp. 
 
virtual void SetIdleTimer(UInt_t idleTimeInSec, const char *command)
Set the command to be executed after the system has been idle for idleTimeInSec seconds. 
 
virtual void Run(Bool_t retrn=kFALSE)
Main application eventloop. Calls system dependent eventloop via gSystem. 
 
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized. 
 
static Int_t ParseRemoteLine(const char *ln, TString &hostdir, TString &user, Int_t &dbg, TString &script)
Parse the content of a line starting with ".R" (already stripped-off) The format is [user@]host[:dir]...
 
virtual ~TApplication()
TApplication dtor. 
 
virtual void ExitLoop()
Exit from event loop. 
 
static void CallEndOfProcessCleanups()
 
R__EXTERN TGuiFactory * gGuiFactory
 
void Emit(const char *signal)
Acitvate signal without args. 
 
virtual void GetOptions(Int_t *argc, char **argv)
Get and handle command line options. 
 
virtual Bool_t Notify()
Notify when timer times out. 
 
const char * GetUser() const
 
static TList * GetApplications()
Static method returning the list of available applications. 
 
Using a TBrowser one can browse all ROOT objects. 
 
R__EXTERN TVirtualX * gGXBatch
 
Bool_t fIsRunning
Window system specific application implementation. 
 
void ClearInputFiles()
Clear list containing macro files passed as program arguments. 
 
virtual const char * ApplicationName() const
 
virtual void RemoveIdleTimer()
Remove idle timer. Normally called via TROOT::Idle(0). 
 
static void NeedGraphicsLibs()
Static method. 
 
R__EXTERN TSystem * gSystem
 
if object ctor succeeded but object should not be used 
 
Long_t ExecPlugin(int nargs, const T &... params)
 
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource. 
 
virtual TObject * Remove(TObject *obj)
Remove object from the list. 
 
void SetScreenFactor(Float_t factor=1)
 
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
 
static Long_t ExecuteFile(const char *file, Int_t *error=0, Bool_t keep=kFALSE)
Execute a file containing a C++ macro (static method). 
 
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor. 
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message. 
 
char * Form(const char *fmt,...)
 
TApplicationImp * fAppImp
 
virtual void SetEchoMode(Bool_t mode)
Set console echo mode: 
 
Handles synchronous and a-synchronous timer events. 
 
virtual void StopIdleing()
Called when system stops idleing. 
 
char * Strip(const char *str, char c=' ')
Strip leading and trailing c (blanks by default) from a string. 
 
virtual void Abort(int code=0)
Abort the application. 
 
TApplication * fAppRemote
 
static void Close(TApplication *app)
Static function used to close a remote application. 
 
virtual TObjLink * FirstLink() const
 
virtual void Run()
System event loop. 
 
char * StrDup(const char *str)
Duplicate the string str. 
 
virtual void Help(const char *line)
Print help on interpreter. 
 
#define R__LOCKGUARD2(mutex)
 
static void CreateApplication()
Static function used to create a default application environment. 
 
void InitializeGraphics()
Initialize the graphics environment. 
 
TString & Remove(Ssiz_t pos)
 
R__EXTERN ExceptionContext_t * gException
 
virtual void StartIdleing()
Called when system starts idleing. 
 
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString. 
 
static DictFuncPtr_t GetDict(const char *cname)
Given the class name returns the Dictionary() function of a class (uses hash of name). 
 
virtual void KeyPressed(Int_t key)
Emit signal when console keyboard key was pressed. 
 
const char * GetIdleCommand() const
 
virtual void SetProgname(const char *name)
Set the application name (from command line, argv[0]) and copy it in gProgName. 
 
virtual void LineProcessed(const char *line)
Emit signal when a line has been processed. 
 
virtual Int_t TabCompletionHook(char *buf, int *pLoc, std::ostream &out)
What to do when tab is pressed. 
 
EExitOnException ExitOnException(EExitOnException opt=kExit)
Set the exit on exception option. 
 
void Throw(int code)
If an exception context has been set (using the TRY and RETRY macros) jump back to where it was set...
 
This ABC is a factory for GUI components. 
 
virtual void HandleIdleTimer()
Handle idle timeout. 
 
virtual void HandleException(Int_t sig)
Handle exceptions (kSigBus, kSigSegmentationViolation, kSigIllegalInstruction and kSigFloatingExcepti...
 
virtual void Add(TObject *obj)
 
virtual void AddTimer(TTimer *t)
Add timer to list of system timers. 
 
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application. 
 
void SetOptions(const char *opt)
 
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
 
TApplication * gApplication
 
Int_t Atoi() const
Return integer value of string. 
 
static void InitializeColors()
Initialize colors used by the TCanvas based graphics (via TColor objects). 
 
This class creates the ROOT Application Environment that interfaces to the windowing system eventloop...
 
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~. 
 
static TList * fgApplications
 
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message. 
 
void SetReturnFromRun(Bool_t ret)
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message. 
 
virtual Long_t ProcessFile(const char *file, Int_t *error=0, Bool_t keep=kFALSE)
Process a file containing a C++ macro. 
 
const char * Data() const
 
TApplication()
Default ctor. Can be used by classes deriving from TApplication.