Hi Christoph, CINT is the C++ interpreter used by the ROOT system. You can use CINT stand alone or use it in the Root context. I agree with your requirements that is is very important to be able to call interpreted code from the compiled code and vice-versa. Calling interpreted code, in turn, may have different meanings. - you can call a special API (eg in Root, do gROOT->ProcessLine(".x file.C") the string passed to ProcessLine will be interpreted by CINT. - You may also want to do something like: gROOT->ProcessLine(".L myCode.C"). This statement will instruct CINT to precompile some byte code that you want to use later (likely in a loop) in a very efficient way without having to do any string manipulation. - a variant of the second case is the use of the Root script compiler. gROOT->ProcessLine(".L myCode.C++") will compile the CINT macro myCode.C with the native C++ compiler and will link the generated object file with the current executable module. There are several examples in ROOT where we call interpreted code (in the two ways I have mentionned above) see for examples classes TF1 and TMinuit. I am currently working on extensions to the class TTree where there are many more examples of these combinations. You can find examples of API in the CINT class G__CallFunc (CallFunc.cxx) or in the Root meta classes TClass, TDictionary, TMethod, TMethodArg, etc. Rene Brun Christoph Bugel wrote: > > By mistake I submitted my mail as a reply to another thread. > I was basically asking if and how I can use CINT in my own code to > interpret a c++-like script. also, is it thread safe? (I guess not) > this was my mail: > > Hi, > I am looking at CINT to see if it can be useful for a system we are > building. We need to execute 'scripts' from within our code, and we like > those scripts to have C++ syntax. > so I compiled CINT on my slackware box (I commented out "CINTSYSDIR=." in > Makefile.Base to get it to compile, BTW), and now it runs perfectly, and I > think it is very cool :) > from what I have seen so far, the main use of CINT is as a standalone > executable which runs some script -- interactively or not. > but I need to execute the scripts from my own code, not from a standalone > executable. so I need some api function (such as G__loadfile I guess?), > that I can call to run an arbitrary script. (G__calc won't do as it is > limited to expressions) > > I didn't figure out exactly how the system works. I would appreciate if > someone could help to get me started with a hello world application: > how can I get something like this: > int main() > { > G__loadfile(argv[1]); //or whatever needed to run a given script > } > to compile with _my_ favorite compiler? (i.e. not with makecint) > which includes would I need and how would my makefile look? > > thanks, > Christoph
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:30 MET