Ok, you have the following problems:<div><br></div><div>1) If you do not start a toplevel there will not be any active restarts. This is logical: it is your program's responsibility to set them up! So if you want a function to be able to use ABORT then define an evaluating function that sets the restart up.</div>

<div><br></div><div>2) You are using cl_eval(...) which does not set up those restarts. ECL ships with a function, si_safe_eval (ext:safe-eval) which performs evaluation in a safe way, with a handler for errors that returns a default value.</div>

<div><br></div><div>3) It is recommended generally to have a catch-all region around your C code. This sets up a point that protects from unwanted QUIT statements and sets up a point to jump to in case of stack overflows, memory exhaustion, etc See <a href="http://ecls.sourceforge.net/new-manual/re37.html">http://ecls.sourceforge.net/new-manual/re37.html</a></div>

<div><br clear="all">4) Instead of c_string_to_object() you might want to use ecl_read_from_string_safe(s,v) where "v" is the value returned in case of error condition.</div><div><br></div><div>The program, in one possible shape</div>

<div><br></div><div><div>#include <ecl/ecl.h></div><div><br></div><div>#define READCL(expr) (c_string_to_object(# expr))</div><div><br></div><div>int main(int argc, char **argv)</div><div>{</div><div>       cl_object x;</div>

<div><br></div><div>       cl_boot(1, &argv[0]);</div><div><br></div><div>       CL_CATCH_ALL_BEGIN(ecl_process_env()) {</div><div><br></div><div>       x = c_string_to_object("(format t \"Hello~%\")");</div>

<div>       cl_print(1,x);</div><div>       x = si_safe_eval(3, x, Cnil, Cnil);</div><div>       cl_print(1,x);</div><div><br></div><div>       // Forces program to halt, reading from stdin</div><div>       x = c_string_to_object("(vvvvformat t \"Hello~%\")");</div>

<div>       cl_print(1,x);</div><div>       x = si_safe_eval(3, x, Cnil, Cnil);</div><div>       cl_print(1,x);</div><div><br></div><div>       } CL_CATCH_ALL_END;</div><div><br></div><div>       cl_shutdown();</div><div>

}</div><div><br></div><div>The output is fine (notice lack of error messages!)</div><div><br></div><div><div>(FORMAT T "Hello~%") Hello</div><div><br></div><div>NIL </div><div>(VVVVFORMAT T "Hello~%") </div>

<div>VVVVFORMAT </div><div>NIL </div></div><div><br></div>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>


</div>