On Thu, Jun 3, 2010 at 10:11 PM, Erik Winkels <span dir="ltr"><<a href="mailto:aerique@xs4all.nl">aerique@xs4all.nl</a>></span> wrote:<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">> Then, you are not showing the code of the functions you define and how<br>
> they return multiple values. Most likely you are just using a "return<br>
> only-value" statement<br>
<br>
</div>All my functions just return one value.<br>
<div class="im"><br>
> and do not set the counter for the returned values, which is needed by<br>
> ECL to know the number of returned values.<br>
<br>
</div>Thanks, this is what I needed to know and wasn't aware of.  This,<br>
together with an e-mail from Polos Ruetz has solved my issue.</blockquote><div><br></div><div>Great to read that. Wish I could get three months off to update that embedding manual. Normally I recommend using embedded code written with c-inline because there you just use @ magic to set the values. In pure C one has to do a bit more</div>

<div><br></div><div>0) Get the environment</div><div>cl_env_ptr env = ecl_process_env();</div><div>1) Save all the output values</div><div>cl_object v1 = ...;</div><div>cl_object v2 = ...;</div><div>2) Set the values counter</div>

<div>env->values[0] = v1;</div><div>env->values[1] = v2;</div><div>env->nvalues = 2;</div><div><br></div><div>For just one return value it suffices</div><div>cl_object v1 = ...;</div><div>env->nvalues = 1;</div>

<div>return value;</div><div><br></div><div>Note the order. If you just write</div><div><br></div><div>env->nvalues = 1;</div><div>return whatever-c-expression</div><div><br></div><div>then the C expression may overwrite the value of env->nvalues.</div>

<div><br></div><div>Juanjo</div><div><br></div></div>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://tream.dreamhosters.com">http://tream.dreamhosters.com</a><br>