<div dir="ltr">Hi Craig,<br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 9, 2015 at 3:36 AM, Craig Latta <span dir="ltr">&lt;<a href="mailto:craig@netjam.org" target="_blank">craig@netjam.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><br>
&gt; a) write a scratch primitive called e.g. primitiveFakeAForeignCallback<br>
&gt; which forks (at a higher priority?, or at least does a yield?), and<br>
&gt; calls the relevant machinery with faked up callback data (so you can<br>
&gt; avoid all the stuff in thinkProcess which is written in C)<br>
<br>
</span>     Which machinery is that? callbackEnter:? I have the simulator and<br>
reader image going.<br></blockquote><div><br></div><div>here&#39;s the edited-down guts of thunkEntry, which is what you wasn&#39;t to simulate:</div><div><br></div><div><div><font face="comic sans ms, sans-serif">long</font></div><div><font face="comic sans ms, sans-serif">thunkEntry(void *thunkp, long *stackp)</font></div><div><font face="comic sans ms, sans-serif">{</font></div><div><font face="comic sans ms, sans-serif">...</font></div><div><font face="comic sans ms, sans-serif"><br></font></div><div><font face="comic sans ms, sans-serif">    if ((flags = interpreterProxy-&gt;ownVM(0)) &lt; 0) {</font></div><div><font face="comic sans ms, sans-serif">        fprintf(stderr,&quot;Warning; callback failed to own the VM\n&quot;);</font></div><div><font face="comic sans ms, sans-serif">        return -1;</font></div><div><font face="comic sans ms, sans-serif">    }</font></div><div><font face="comic sans ms, sans-serif"><br></font></div><div><font face="comic sans ms, sans-serif">    if (!(returnType = setjmp(vmcc.trampoline))) {</font></div><div><font face="comic sans ms, sans-serif">        ...</font></div><div><font face="comic sans ms, sans-serif">        interpreterProxy-&gt;sendInvokeCallbackContext(&amp;vmcc);</font></div><div><font face="comic sans ms, sans-serif">        fprintf(stderr,&quot;Warning; callback failed to invoke\n&quot;);</font></div><div><font face="comic sans ms, sans-serif">        ...</font></div><div><font face="comic sans ms, sans-serif">        interpreterProxy-&gt;disownVM(flags);</font></div><div><font face="comic sans ms, sans-serif">        return -1;</font></div><div><font face="comic sans ms, sans-serif">    }</font></div><div><font face="comic sans ms, sans-serif">    ...</font></div><div><font face="comic sans ms, sans-serif">    interpreterProxy-&gt;disownVM(flags);</font></div><div><font face="comic sans ms, sans-serif"><br></font></div><div><font face="comic sans ms, sans-serif">    switch (returnType) {</font></div><div><font face="comic sans ms, sans-serif"><br></font></div><div><font face="comic sans ms, sans-serif">    case retword:   return vmcc.rvs.valword;</font></div></div><div><span style="font-family:&#39;comic sans ms&#39;,sans-serif">    ...</span><br></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">So I expect you want to do something like</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">    [self ownVM: 0.</font></div><div><font face="arial, helvetica, sans-serif">     self sendInvokeCallbackContext: fakeVMCallbackContextAddress] forkAt: Processor activePriority + 1</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">You could even create a CArray or some such to hold onto the data for the callback (fakeVMCallbackContextAddress above).</font></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class=""><br>
&gt; BTW, this is /monstrously/ cool of you!<br>
<br>
</span>     Sure thing!<br>
<div class=""><div class="h5"><br>
<br>
-C<br>
<br>
--<br>
Craig Latta<br>
<a href="http://netjam.org" rel="noreferrer" target="_blank">netjam.org</a><br>
<a href="tel:%2B31%20%20%206%202757%207177" value="+31627577177">+31   6 2757 7177</a> (SMS ok)<br>
<a href="tel:%2B%201%20415%20%20287%203547" value="+14152873547">+ 1 415  287 3547</a> (no SMS)<br>
<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div></div>