23 #include "TClassEdit.h" 74 Getlinem(kCleanUp, 0);
90 Bool_t TInterruptHandler::Notify()
101 Break(
"TInterruptHandler::Notify",
"keyboard interrupt");
102 Getlinem(kInit,
"Root > ");
123 Bool_t ReadNotify() {
return Notify(); }
129 Bool_t TTermInputHandler::Notify()
145 TApplication(appClassName, argc, argv, options, numOptions),
149 fDefaultPrompt =
"root [%d] ";
154 if (!noLogo && !NoLogoOpt()) {
179 code =
"#include <iostream>\n" 180 "#include <string>\n" 181 "#include <DllImport.h>\n";
183 code +=
"#include <vector>\n" 184 "#include <utility>";
186 ProcessLine(code,
kTRUE);
207 TInterruptHandler *ih =
new TInterruptHandler();
209 SetSignalHandler(ih);
212 fInputHandler =
new TTermInputHandler(0);
213 fInputHandler->Add();
223 int hist_size =
gEnv->
GetValue(
"Rint.HistorySize", 500);
224 if (hist_size == 500)
226 int hist_save =
gEnv->
GetValue(
"Rint.HistorySave", 400);
227 if (hist_save == 400)
231 hist_size = atoi(envHist);
232 envHist = strchr(envHist,
':');
234 hist_save = atoi(envHist+1);
236 Gl_histsize(hist_size, hist_save);
237 Gl_histinit((
char *)logon);
240 static const char* defaultColorsBW[] = {
241 "bold blue",
"magenta",
"bold green",
"bold red underlined",
"default" 243 static const char* defaultColorsWB[] = {
244 "yellow",
"magenta",
"bold green",
"bold red underlined",
"default" 247 const char** defaultColors = defaultColorsBW;
250 defaultColors = defaultColorsWB;
257 Gl_setColors(colorType, colorTabCom, colorBracket, colorBadBracket, colorPrompt);
281 fInputHandler->Remove();
282 delete fInputHandler;
302 if (NoLogOpt())
return;
324 const char *logon =
gEnv->
GetValue(
"Rint.Logon", (
char*)0);
347 Getlinem(kInit, GetPrompt());
354 if (strlen(WorkingDirectory())) {
358 TObject *w =
gROOT->GetListOfBrowsables()->FindObject(
"workdir");
375 fInputHandler->DeActivate();
376 TIter next(InputFiles());
378 retval = 0; error = 0;
387 if (file->
TestBit(kExpression)) {
400 const char *rfile = (
const char*)file->
String();
401 Printf(
"Attaching file %s as _file%d...", rfile, nfile);
404 Printf(
"Processing %s...", (
const char*)file->
String());
408 Getlinem(kCleanUp, 0);
415 needGetlinemInit =
kFALSE;
416 retval = ProcessLineNr(
"ROOT_cli_", cmd, &error);
421 needGetlinemInit =
kTRUE;
423 if (error != 0 || fCaughtSignal)
break;
431 }
else if (fCaughtSignal) {
432 retval = fCaughtSignal + 128;
435 if (retval < 0 || retval > 255)
442 fInputHandler->Activate();
446 if (needGetlinemInit) Getlinem(kInit, GetPrompt());
452 Terminate(fCaughtSignal ? fCaughtSignal + 128 : 0);
460 Getlinem(kCleanUp, 0);
471 std::vector<TString> lines;
473 lines.emplace_back(
TString::Format(
"Welcome to ROOT %s%%shttp://root.cern.ch",
474 gROOT->GetVersion()));
475 lines.emplace_back(
TString::Format(
"%%s(c) 1995-2017, The ROOT Team"));
477 if (!strcmp(
gROOT->GetGitBranch(),
gROOT->GetGitCommit())) {
478 static const char *months[] = {
"January",
"February",
"March",
"April",
"May",
479 "June",
"July",
"August",
"September",
"October",
480 "November",
"December"};
482 Int_t iday = idatqq%100;
483 Int_t imonth = (idatqq/100)%100;
484 Int_t iyear = (idatqq/10000);
487 gROOT->GetGitBranch(),
488 iday,months[imonth-1],iyear));
493 gROOT->GetGitBranch(),
496 lines.emplace_back(
TString(
"Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'%s"));
499 auto itLongest = std::max_element(lines.begin(), lines.end(),
501 return left.
Length() < right.Length(); });
502 Ssiz_t lenLongest = itLongest->Length();
506 for (
const auto&
line: lines) {
518 for (
int i = 0; i < Argc(); i++)
519 if (!strcmp(Argv(i),
"-splash"))
520 kill(getppid(), SIGUSR1);
531 strlcpy(fPrompt, s,
sizeof(fPrompt));
533 snprintf(fPrompt,
sizeof(fPrompt), fDefaultPrompt.Data(), fNcmd);
552 if (newPrompt && strlen(newPrompt) <= 55)
553 fDefaultPrompt = newPrompt;
555 Error(
"SetPrompt",
"newPrompt too long (> 55 characters)");
568 if ((line = Getlinem(kOneChar, 0))) {
569 if (line[0] == 0 && Gl_eof())
579 sline = sline.
Chop();
581 ReturnPressed((
char*)sline.
Data());
588 fInputHandler->DeActivate();
592 TTHREAD_TLS(
Bool_t) added;
596 SetBit(kProcessRemotely);
601 LineProcessed(sline);
602 ProcessLineNr(
"ROOT_prompt_", sline);
605 fInputHandler->Activate();
611 catch (std::exception&
e) {
613 if (!added) fInputHandler->Activate();
616 char *demangledType_c = TClassEdit::DemangleTypeIdName(
typeid(e), err);
617 const char* demangledType = demangledType_c;
619 demangledType_c =
nullptr;
620 demangledType =
"<UNKNOWN>";
622 Error(
"HandleTermInput()",
"%s caught: %s", demangledType, e.what());
623 free(demangledType_c);
627 if (!added) fInputHandler->Activate();
628 Error(
"HandleTermInput()",
"Exception caught!");
634 fInputHandler->Activate();
640 Getlinem(kInit, GetPrompt());
655 Getlinem(kCleanUp, 0);
656 Getlinem(kInit,
"Root > ");
668 Getlinem(kCleanUp, 0);
670 if (ReturnFromRun()) {
679 if (logoff && !NoLogOpt()) {
698 Gl_config(
"noecho", mode ? 0 : 1);
718 TString prompt; prompt.
Form(
"%s:root [%%d] ", fAppRemote->ApplicationName());
721 SetPrompt(
"root [%d] ");
739 if (line && line[0] !=
'.') {
741 int res = ProcessLine(lineWithNr + line,
kFALSE, error);
743 if (!fNonContinuePrompt.Length())
744 fNonContinuePrompt = fDefaultPrompt;
745 SetPrompt(
"root (cont'ed, cancel with .@) [%d]");
746 }
else if (fNonContinuePrompt.Length()) {
747 SetPrompt(fNonContinuePrompt);
748 fNonContinuePrompt.Clear();
752 if (line && line[0] ==
'.' && line[1] ==
'@') {
753 ProcessLine(line,
kFALSE, error);
754 SetPrompt(
"root [%d] ");
756 return ProcessLine(line,
kFALSE, error);
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual Int_t GetMore() const =0
void Print(Option_t *option="") const
Print the real and cpu time passed between the start and stop events.
virtual void Terminate(int status)
Terminate the application.
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
virtual const char * WorkingDirectory()
Return working directory.
Collectable string class.
R__EXTERN TClassTable * gClassTable
virtual const char * GetBuildArch() const
Return the build architecture.
TString & ReplaceAll(const TString &s1, const TString &s2)
virtual Bool_t HandleTermInput()
Handle input coming from terminal.
virtual const char * HomeDirectory(const char *userName=0)
Return the user's home directory.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
Long_t ProcessLineNr(const char *filestem, const char *line, Int_t *error=0)
Calls ProcessLine() possibly prepending a line directive for better diagnostics.
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
void Break(const char *location, const char *msgfmt,...)
virtual void Terminate(Int_t status=0)
Terminate the application by call TSystem::Exit() unless application has been told to return from Run...
TString & Prepend(const char *cs)
R__EXTERN TApplication * gApplication
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...
virtual void SetGetline(const char *(*getlineFunc)(const char *prompt), void(*histaddFunc)(const char *line))=0
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
virtual Bool_t HandleTermInput()
static const char * GetMacroPath()
Get macro search path. Static utility function.
const char * Data() const
virtual void EndOfLineAction()=0
virtual void SetOption(Option_t *)
virtual Bool_t Notify()
Notify when signal occurs.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
void ExecLogon()
Execute logon macro's.
virtual void Run(Bool_t retrn=kFALSE)
Main application eventloop. Calls system dependent eventloop via gSystem.
virtual void SetEchoMode(Bool_t mode)
Set console mode:
R__EXTERN void * gMmallocDesc
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
Int_t Hook(char *buf, int *pLoc, std::ostream &out)
[private]
virtual const char * Getenv(const char *env)
Get environment variable.
std::vector< std::vector< double > > Data
static void ResetTermAtExit()
Restore terminal to non-raw mode.
virtual void ExitLoop()
Exit from event loop.
void Error(const char *location, const char *msgfmt,...)
void ClearAll()
clears all lists except for user names and system include files.
virtual const char * SetPrompt(const char *newPrompt)
Set a new default prompt.
Describes an Operating System directory for the browser.
virtual Int_t TabCompletionHook(char *buf, int *pLoc, std::ostream &out)
Forward tab completion request to our TTabCom::Hook().
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
R__EXTERN TSystem * gSystem
R__EXTERN TBenchmark * gBenchmark
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
virtual void HandleException(Int_t sig)
Handle signals (kSigBus, kSigSegmentationViolation, kSigIllegalInstruction and kSigFloatingException)...
TObject * GetObject() const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t TestBit(UInt_t f) const
char * Form(const char *fmt,...)
TSubString Strip(EStripType s=kTrailing, char c= ' ') const
Return a substring of self stripped at beginning and/or end.
virtual void SaveContext()=0
This class is a ROOT utility to help benchmarking applications.
virtual void Run(Bool_t retrn=kFALSE)
Main application eventloop.
virtual void PrintLogo(Bool_t lite=kFALSE)
Print the ROOT logo on standard output.
R__EXTERN ExceptionContext_t * gException
virtual char * GetPrompt()=0
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...
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.
Wrapper around a TObject so it can be stored in a TList.
static Int_t Key_Pressed(Int_t key)
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
void Beep(Int_t freq=-1, Int_t duration=-1, Bool_t setDefault=kFALSE)
Beep for duration milliseconds with a tone of frequency freq.
virtual void SaveGlobalsContext()=0
void Throw(int code)
If an exception context has been set (using the TRY and RETRY macros) jump back to where it was set...
Mother of all ROOT objects.
virtual void HandleException(Int_t sig)
Handle exceptions (kSigBus, kSigSegmentationViolation, kSigIllegalInstruction and kSigFloatingExcepti...
virtual char * GetPrompt()
Get prompt from interpreter. Either "root [n]" or "end with '}'".
virtual ~TRint()
Destructor.
ESignals GetSignal() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
This class creates the ROOT Application Environment that interfaces to the windowing system eventloop...
R__EXTERN TInterpreter * gCling
R__EXTERN TTabCom * gTabCom
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
void SetObject(TObject *obj)