22 #include "RConfigure.h" 51 #if defined(R__MACOSX) && (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) 63 class TIdleTimer :
public TTimer {
72 Bool_t TIdleTimer::Notify()
93 gROOT->EndOfProcessCleanups();
101 fArgc(0), fArgv(0), fAppImp(0), fIsRunning(
kFALSE), fReturnFromRun(
kFALSE),
103 fFiles(0), fIdleTimer(0), fSigHandler(0), fExitOnException(kDontExit),
124 void * ,
Int_t numOptions) :
151 Error(
"TApplication",
"only one instance of TApplication allowed");
157 ::Fatal(
"TApplication::TApplication",
"ROOT system not initialized");
160 ::Fatal(
"TApplication::TApplication",
"gSystem not initialized");
163 if (!hasRegisterAtExit) {
166 hasRegisterAtExit =
kTRUE;
168 gROOT->SetName(appClassName);
171 if (argc && *argc > 0) {
176 for (
int i = 0; i <
fArgc; i++)
202 gROOT->SetLineHasBeenProcessed();
209 const char *ssystem =
gEnv->
GetValue(
"Root.TMemStat.system",
"gnubuiltin");
211 gROOT->ProcessLine(
Form(
"new TMemStat(\"%s\",%d,%d);",ssystem,buffersize,maxcalls));
217 gROOT->SetApplication(
this);
226 for (
int i = 0; i <
fArgc; i++)
244 gROOT->EndOfProcessCleanups();
273 #if defined(R__MACOSX) && (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) 274 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);
370 static char null[1] = {
"" };
382 for (i = 1; i < *argc; i++) {
383 if (!strcmp(argv[i],
"-?") || !strncmp(argv[i],
"-h", 2) ||
384 !strncmp(argv[i],
"--help", 6)) {
387 }
else if (!strcmp(argv[i],
"-config")) {
388 fprintf(stderr,
"ROOT ./configure options:\n%s\n",
gROOT->GetConfigOptions());
390 }
else if (!strcmp(argv[i],
"-memstat")) {
393 }
else if (!strcmp(argv[i],
"-b")) {
396 }
else if (!strcmp(argv[i],
"-n")) {
399 }
else if (!strcmp(argv[i],
"-t")) {
405 }
else if (!strcmp(argv[i],
"-q")) {
408 }
else if (!strcmp(argv[i],
"-l")) {
412 }
else if (!strcmp(argv[i],
"-x")) {
415 }
else if (!strcmp(argv[i],
"-splash")) {
419 }
else if (!strcmp(argv[i],
"--web")) {
426 if (
gROOT->IsBatch())
gROOT->SetWebDisplay(
"batch");
427 else gROOT->SetWebDisplay(
"");
433 }
else if (!strcmp(argv[i],
"-e")) {
444 Warning(
"GetOptions",
"-e must be followed by an expression.");
446 }
else if (!strcmp(argv[i],
"--")) {
448 bool warnShown =
false;
454 Error(
"GetOptions()",
"Inconsistent file entry (not a TObjString)!");
466 if (macro && !warnShown && (warnShown =
true))
467 Warning(
"GetOptions",
"-- is used with several macros. " 468 "The arguments will be passed to the last one.");
480 for (; i < *argc; i++) {
487 Warning(
"GetOptions",
"no macro to pass arguments to was provided. " 488 "Everything after the -- will be ignored.");
489 for (; i < *argc; i++)
492 }
else if (argv[i][0] !=
'-' && argv[i][0] !=
'+') {
495 char *arg = strchr(argv[i],
'(');
496 if (arg) *arg =
'\0';
518 }
else if (!strcmp(
gROOT->GetName(),
"Rint")) {
519 Warning(
"GetOptions",
"only one directory argument can be specified (%s)", dir);
521 }
else if (size > 0) {
527 Warning(
"GetOptions",
"file %s has size 0, skipping", dir);
534 if (!strcmp(
gROOT->GetName(),
"Rint"))
535 Warning(
"GetOptions",
"file %s not found", dir);
556 if (!strcmp(
gROOT->GetName(),
"Rint"))
557 Warning(
"GetOptions",
"macro %s not found", fname.
Data());
572 for (i = 0; i < *argc; i++) {
573 if (strcmp(argv[i],
"")) {
591 Emit(
"HandleIdleTimer()");
637 Printf(
"\nROOT special commands.");
638 Printf(
"===========================================================================");
639 Printf(
" pwd : show current directory, pad and style");
640 Printf(
" ls : list contents of current directory");
641 Printf(
" which [file] : shows path of macro file");
650 if (
gROOT->IsBatch())
return;
653 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TVirtualPad")))
658 TString title1 =
"ROOT interface to ";
663 nativex =
"win32gdk";
665 title = title1 +
"Win32gdk";
666 #elif defined(R__HAS_COCOA) 669 title = title1 +
"Quartz";
673 title = title1 +
"X11";
678 if (guiBackend ==
"native") {
679 guiBackend = nativex;
682 title = title1 + guiBackend;
686 if (guiFactory ==
"native")
687 guiFactory = nativeg;
689 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TVirtualX", guiBackend))) {
697 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TGuiFactory", guiFactory))) {
737 if (!ln || strlen(ln) <= 0)
749 while (line.
Tokenize(tkn, from,
" ")) {
753 }
else if (tkn ==
"-d") {
755 }
else if (tkn ==
"-close") {
758 ::Warning(
"TApplication::ParseRemoteLine",
"unknown option: %s", tkn.
Data());
766 }
else if (isHostDir) {
771 }
else if (isScript) {
803 if (!strncmp(line,
"-?", 2) || !strncmp(line,
"-h", 2) ||
804 !strncmp(line,
"--help", 6)) {
805 Info(
"ProcessRemote",
"remote session help:");
806 Printf(
".R [user@]host[:dir] [-l user] [-d dbg] [[<]script] | [host] -close");
807 Printf(
"Create a ROOT session on the specified remote host.");
808 Printf(
"The variable \"dir\" is the remote directory to be used as working dir.");
809 Printf(
"The username can be specified in two ways, \"-l\" having the priority");
810 Printf(
"(as in ssh). A \"dbg\" value > 0 gives increasing verbosity.");
811 Printf(
"The last argument \"script\" allows to specify an alternative script to");
812 Printf(
"be executed remotely to startup the session, \"roots\" being");
813 Printf(
"the default. If the script is preceded by a \"<\" the script will be");
814 Printf(
"sourced, after which \"roots\" is executed. The sourced script can be ");
815 Printf(
"used to change the PATH and other variables, allowing an alternative");
816 Printf(
"\"roots\" script to be found.");
817 Printf(
"To close down a session do \".R host -close\".");
818 Printf(
"To switch between sessions do \".R host\", to switch to the local");
819 Printf(
"session do \".R\".");
820 Printf(
"To list all open sessions do \"gApplication->GetApplications()->Print()\".");
827 if (hostdir.
Length() <= 0) {
837 }
else if (rc == 1) {
848 const char *sc = (script.
Length() > 0) ? script.
Data() : 0;
859 static int PrintFile(
const char* filename) {
863 Error(
"ProcessLine()",
"Cannot find file %s", filename);
866 std::ifstream instr(sFileName);
881 if (!line || !*line)
return 0;
884 if (!strncmp(line,
".R", 2)) {
886 while (*(line+n) ==
' ')
897 if (!strncasecmp(line,
".qqqqqqq", 7)) {
899 }
else if (!strncasecmp(line,
".qqqqq", 5)) {
900 Info(
"ProcessLine",
"Bye... (try '.qqqqqqq' if still running)");
902 }
else if (!strncasecmp(line,
".exit", 4) || !strncasecmp(line,
".quit", 2)) {
907 if (!strncmp(line,
"?", 1) || !strncmp(line,
".help", 5)) {
912 if (!strncmp(line,
".demo", 5)) {
913 if (
gROOT->IsBatch()) {
914 Error(
"ProcessLine",
"Cannot show demos in batch mode!");
921 if (!strncmp(line,
".license", 8)) {
925 if (!strncmp(line,
".credits", 8)) {
929 return PrintFile(credits);
932 if (!strncmp(line,
".pwd", 4)) {
942 if (!strncmp(line,
".ls", 3)) {
944 if (line[3]) opt = &line[3];
949 if (!strncmp(line,
".which", 6)) {
950 char *fn =
Strip(line+7);
951 char *
s = strtok(fn,
"+(");
962 if (!strncmp(line,
".L", 2) || !strncmp(line,
".U", 2)) {
970 Warning(
"ProcessLine",
"argument(s) \"%s\" ignored with .%c", arguments.
Data(),
975 Error(
"ProcessLine",
"macro %s not found in path %s", fname.
Data(),
980 if (posSpace == -1) cmd.
Remove(1);
981 else cmd.
Remove(posSpace);
1001 if (!strncmp(line,
".X", 2) || !strncmp(line,
".x", 2)) {
1005 if (!strcmp(line,
".reset")) {
1007 Printf(
"*** .reset not allowed, please use gROOT->Reset() ***");
1013 gROOT->GetListOfClasses()->Delete();
1038 static const Int_t kBufSize = 1024;
1040 if (!file || !*file)
return 0;
1049 ::Error(
"TApplication::ExecuteFile",
"macro %s not found in path %s", fname.
Data(),
1057 ::std::ifstream macro(exnam, std::ios::in);
1058 if (!macro.good()) {
1059 ::Error(
"TApplication::ExecuteFile",
"%s no such file", exnam);
1066 char currentline[kBufSize];
1067 char dummyline[kBufSize];
1077 bool res = (bool)macro.getline(currentline, kBufSize);
1078 if (macro.eof())
break;
1083 while (!macro.getline(dummyline, kBufSize) && !macro.eof()) {
1088 while (s && (*s ==
' ' || *s ==
'\t')) s++;
1095 if (strstr(cs,
"#ifndef__CINT__") ||
1096 strstr(cs,
"#if!defined(__CINT__)"))
1098 else if (ifndefc && (strstr(cs,
"#ifdef") || strstr(cs,
"#ifndef") ||
1099 strstr(cs,
"#ifdefined") || strstr(cs,
"#if!defined")))
1101 else if (ifndefc && strstr(cs,
"#endif")) {
1106 }
else if (ifndefc && !ifdef && strstr(cs,
"#else"))
1110 if (!*s || *s ==
'#' || ifndefc || !strncmp(s,
"//", 2))
continue;
1112 if (!comment && (!strncmp(s,
".X", 2) || !strncmp(s,
".x", 2))) {
1118 if (!strncmp(s,
"/*", 2)) comment = 1;
1122 s = strstr(s,
"*/");
1127 while (s && (*s ==
' ' || *s ==
'\t')) s++;
1129 if (!strncmp(s,
"//", 2))
continue;
1130 if (!strncmp(s,
"/*", 2)) {
1136 if (!comment && *s ==
'{') tempfile = 1;
1137 if (!comment)
break;
1146 exname += aclicMode;
1148 exname += arguments;
1153 tempbuf.
Form(
".x %s", exname.
Data());
1155 tempbuf.
Form(
".X%s %s", keep ?
"k" :
" ", exname.
Data());
1185 fIdleTimer =
new TIdleTimer(idleTimeInSec*1000);
1236 Emit(
"Terminate(Int_t)", status);
1256 Emit(
"LineProcessed(const char*)", line);
1264 Emit(
"KeyPressed(Int_t)", key);
1272 Emit(
"ReturnPressed(char*)", text);
1292 if (!gApplication) {
1301 Printf(
"<TApplication::CreateApplication>: " 1302 "created default TApplication");
1303 delete []
a;
delete []
b;
1313 Int_t debug,
const char *script)
1339 ::Error(
"TApplication::Open",
"list of applications undefined - protocol error");
1351 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TApplication",
"remote"))) {
1355 ::Error(
"TApplication::Open",
"failed to load plugin for TApplicationRemote");
1358 ::Error(
"TApplication::Open",
"failed to find plugin for TApplicationRemote");
1369 gROOT->RefreshBrowsers();
1373 "TApplicationRemote for %s could not be instantiated", url);
1388 gROOT->GetListOfBrowsables()->RecursiveRemove(app);
1392 b->RecursiveRemove(app);
1393 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.
static const TString & GetTTFFontDir()
Get the fonts directory in the installation. Static utility function.
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 const TString & GetTutorialDir()
Get the tutorials directory in the installation. Static utility function.
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.
const char * GetProtocol() const
virtual void MakeBatch()
Switch to batch mode.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
const char * GetFileAndOptions() const
Return the file and its options (the string specified behind the ?).
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) 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.
TString & Prepend(const char *cs)
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.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
static const char * GetMacroPath()
Get macro search path. Static utility function.
const char * GetFile() const
static constexpr const char kCommandLineOptionsHelp[]
Help for command line options.
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.
static const TString & GetDocDir()
Get the documentation directory in the installation. Static utility function.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
virtual void ExitLoop()
Exit from event loop.
static void CallEndOfProcessCleanups()
R__EXTERN TGuiFactory * gGuiFactory
virtual void GetOptions(Int_t *argc, char **argv)
Get and handle command line options.
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...
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 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 constexpr double ms
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.
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.
void EnableThreadSafety()
Enables the global mutex to make ROOT thread safe/aware.
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.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
static constexpr double s
#define R__LOCKGUARD(mutex)
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).
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
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 Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
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.