Hello Jiri,
Thank you for your message.
After 'exit()' is called, Cint stops doing anything. It sets
a flag to block any statement as you observed. Because 'exit()'
is normally used when process is terminated, this is a good behavior
in most of the cases. However in ROOT, process is not terminated by
exit(). It simply stops doing anything.
Fons,
There are 2 options to change this behavior in ROOT.
- 'exit()' terminates ROOT process
After calling G__process_cmd() in ROOT's command input,
if G__return==G__RETURN_EXIT2 then ROOT terminates.
- 'exit()' exits from current macro. Next macro will be executed normally.
After calling G__process_cmd() in ROOT's command input,
reset G__return as G__RETURN_NON.
Both cases, the change has to be made in ROOT source code.
Fons, Will you take a look at this?
Thank you
Masaharu Goto
>Date: Thu, 8 Mar 2001 09:35:29 +0100 (CET)
>From: Jiri Chudoba <Jiri.Chudoba@cern.ch>
>To: roottalk@pcroot.cern.ch
>Subject: [ROOT] Exit from macro
>
>Hello,
>
>how can I properly exit from macro? I get a strange behaviour with the
>function exit: macro does not execute (I mean the new run of macro) after
>the first usage of exit. I have to quit root and only then the macro
>executes again:
>
>errorHandling.C:
>
>// Test macro for error handling
>
>#include <stdlib.h>
>
>Int_t errorHandling(Int_t error=0)
>{
> cerr<<"Error is "<<error<<endl;
> if (error) {
>// error occurred, exit macro
> cerr<<"Error in errorHandling macro: "<<error<<endl;
> exit (EXIT_FAILURE);
> }
> cerr<<"No error in the macro"<<endl;
> return 0;
>}
>
>
>[pcepaip16] ~/macros > root.exe
> *******************************************
> * *
> * W E L C O M E to R O O T *
> * *
> * Version 3.00/05 6 March 2001 *
> * *
> * You are welcome to visit our Web site *
> * http://root.cern.ch *
> * *
> *******************************************
>
>FreeType Engine v1.x used to render TrueType fonts.
>
>CINT/ROOT C/C++ Interpreter version 5.14.78, Feb 21 2001
>Type ? for help. Commands must be C++ statements.
>Enclose multiple statements between { }.
>root [0] .x errorHandling.C(0)
>Error is 0
>No error in the macro
>(Int_t)0
>root [1] .x errorHandling.C(0)
>Error is 0
>No error in the macro
>(Int_t)0
>root [2] .x errorHandling.C(1)
>Error is 1
>Error in error_handling macro: 1
>(Int_t)1
>root [3] .x errorHandling.C(1)
>root [4]
>
>-> no output after the command [3].
>
> Thanks, cheers,
> Jiri.
>
>*************************************************************************
>* E-mail address: Jiri.Chudoba@cern.ch *
>* WWW Homepage : http://delphiwww.troja.mff.cuni.cz/chudoba/ *
>* Telephone : +41 22 76 72288 *
>* Fax : +41 22 76 79480 *
>*************************************************************************
>
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:39 MET