ROOT logo
// @(#)root/eve:$Id: TEveMacro.cxx 25394 2008-09-12 16:13:47Z matevz $
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TEveMacro.h"

#include "TPRegexp.h"
#include "TSystem.h"
#include "TROOT.h"

//______________________________________________________________________________
//
// Sub-class of TMacro, overriding Exec to unload the previous verison
// and cleanup after the execution.

ClassImp(TEveMacro);

//______________________________________________________________________________
TEveMacro::TEveMacro() : TMacro()
{
   // Default constructor.
}

TEveMacro::TEveMacro(const TEveMacro& m) : TMacro(m)
{
   // Copy constructor.
}

TEveMacro::TEveMacro(const char* name) :
   TMacro()
{
   // Constructor with file name.

   if (!name) return;

   fTitle = name;

   TPMERegexp re("([^/]+?)(?:\\.\\w*)?$");
   Int_t nm = re.Match(fTitle);
   if (nm >= 2) {
      fName = re[1];
   } else {
      fName = "<unknown>";
   }
   ReadFile(fTitle);
}

/******************************************************************************/

#include "TTimer.h"

//______________________________________________________________________________
Long_t TEveMacro::Exec(const char* params, Int_t* error)
{
   // Execute the macro.

   Long_t retval = -1;

   if (gROOT->GetGlobalFunction(fName, 0, kTRUE) != 0)
   {
      gROOT->SetExecutingMacro(kTRUE);
      gROOT->SetExecutingMacro(kFALSE);
      retval = gROOT->ProcessLine(Form("%s()", fName.Data()), error);
   }
   else
   {
      // Copy from TMacro::Exec. Difference is that the file is really placed
      // into the /tmp.
      TString fname = "/tmp/";
      {
         //the current implementation uses a file in the current directory.
         //should be replaced by a direct execution from memory by CINT
         fname += GetName();
         fname += ".C";
         SaveSource(fname);
         //disable a possible call to gROOT->Reset from the executed script
         gROOT->SetExecutingMacro(kTRUE);
         //execute script in /tmp
         TString exec = ".x " + fname;
         TString p = params;
         if (p == "") p = fParams;
         if (p != "")
            exec += "(" + p + ")";
         retval = gROOT->ProcessLine(exec, error);
         //enable gROOT->Reset
         gROOT->SetExecutingMacro(kFALSE);
         //delete the temporary file
         gSystem->Unlink(fname);
      }
   }

   //G__unloadfile(fname);

   // In case an exception was thrown (which i do not know how to detect
   // the execution of next macros does not succeed.
   // However strange this might seem, this solves the problem.
   // TTimer::SingleShot(100, "TEveMacro", this, "ResetRoot()");
   //
   // 27.8.07 - ok, this does not work any more. Seems I'll have to fix
   // this real soon now.
   //
   // !!!! FIX MACRO HANDLING !!!!
   //

   return retval;
}

#include "TApplication.h"

//______________________________________________________________________________
void TEveMacro::ResetRoot()
{
   // Call gROOT->Reset() via interpreter.

   // printf ("TEveMacro::ResetRoot doing 'gROOT->Reset()'.\n");
   gROOT->GetApplication()->ProcessLine("gROOT->Reset()");
}
 TEveMacro.cxx:1
 TEveMacro.cxx:2
 TEveMacro.cxx:3
 TEveMacro.cxx:4
 TEveMacro.cxx:5
 TEveMacro.cxx:6
 TEveMacro.cxx:7
 TEveMacro.cxx:8
 TEveMacro.cxx:9
 TEveMacro.cxx:10
 TEveMacro.cxx:11
 TEveMacro.cxx:12
 TEveMacro.cxx:13
 TEveMacro.cxx:14
 TEveMacro.cxx:15
 TEveMacro.cxx:16
 TEveMacro.cxx:17
 TEveMacro.cxx:18
 TEveMacro.cxx:19
 TEveMacro.cxx:20
 TEveMacro.cxx:21
 TEveMacro.cxx:22
 TEveMacro.cxx:23
 TEveMacro.cxx:24
 TEveMacro.cxx:25
 TEveMacro.cxx:26
 TEveMacro.cxx:27
 TEveMacro.cxx:28
 TEveMacro.cxx:29
 TEveMacro.cxx:30
 TEveMacro.cxx:31
 TEveMacro.cxx:32
 TEveMacro.cxx:33
 TEveMacro.cxx:34
 TEveMacro.cxx:35
 TEveMacro.cxx:36
 TEveMacro.cxx:37
 TEveMacro.cxx:38
 TEveMacro.cxx:39
 TEveMacro.cxx:40
 TEveMacro.cxx:41
 TEveMacro.cxx:42
 TEveMacro.cxx:43
 TEveMacro.cxx:44
 TEveMacro.cxx:45
 TEveMacro.cxx:46
 TEveMacro.cxx:47
 TEveMacro.cxx:48
 TEveMacro.cxx:49
 TEveMacro.cxx:50
 TEveMacro.cxx:51
 TEveMacro.cxx:52
 TEveMacro.cxx:53
 TEveMacro.cxx:54
 TEveMacro.cxx:55
 TEveMacro.cxx:56
 TEveMacro.cxx:57
 TEveMacro.cxx:58
 TEveMacro.cxx:59
 TEveMacro.cxx:60
 TEveMacro.cxx:61
 TEveMacro.cxx:62
 TEveMacro.cxx:63
 TEveMacro.cxx:64
 TEveMacro.cxx:65
 TEveMacro.cxx:66
 TEveMacro.cxx:67
 TEveMacro.cxx:68
 TEveMacro.cxx:69
 TEveMacro.cxx:70
 TEveMacro.cxx:71
 TEveMacro.cxx:72
 TEveMacro.cxx:73
 TEveMacro.cxx:74
 TEveMacro.cxx:75
 TEveMacro.cxx:76
 TEveMacro.cxx:77
 TEveMacro.cxx:78
 TEveMacro.cxx:79
 TEveMacro.cxx:80
 TEveMacro.cxx:81
 TEveMacro.cxx:82
 TEveMacro.cxx:83
 TEveMacro.cxx:84
 TEveMacro.cxx:85
 TEveMacro.cxx:86
 TEveMacro.cxx:87
 TEveMacro.cxx:88
 TEveMacro.cxx:89
 TEveMacro.cxx:90
 TEveMacro.cxx:91
 TEveMacro.cxx:92
 TEveMacro.cxx:93
 TEveMacro.cxx:94
 TEveMacro.cxx:95
 TEveMacro.cxx:96
 TEveMacro.cxx:97
 TEveMacro.cxx:98
 TEveMacro.cxx:99
 TEveMacro.cxx:100
 TEveMacro.cxx:101
 TEveMacro.cxx:102
 TEveMacro.cxx:103
 TEveMacro.cxx:104
 TEveMacro.cxx:105
 TEveMacro.cxx:106
 TEveMacro.cxx:107
 TEveMacro.cxx:108
 TEveMacro.cxx:109
 TEveMacro.cxx:110
 TEveMacro.cxx:111
 TEveMacro.cxx:112
 TEveMacro.cxx:113
 TEveMacro.cxx:114
 TEveMacro.cxx:115
 TEveMacro.cxx:116
 TEveMacro.cxx:117
 TEveMacro.cxx:118
 TEveMacro.cxx:119
 TEveMacro.cxx:120
 TEveMacro.cxx:121
 TEveMacro.cxx:122
 TEveMacro.cxx:123
 TEveMacro.cxx:124