<div dir="ltr">Hi Fabio,<div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 16, 2018 at 3:51 AM, Fabio Niephaus <span dir="ltr"><<a href="mailto:lists@fniephaus.com" target="_blank">lists@fniephaus.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"> <br><div dir="ltr">Hi all,<div><br></div><div>In BalloonEnginePlugin>>#<wbr>primitiveSetBitBltPlugin, #stringOf: is sent to the interpreterProxy which does not understand the message.<br></div><div>Could someone please have a look at this?<br></div></div></blockquote><div><br></div><div>To be accurate, BalloonEngineSimulation sends stringOf: to interpreterProxy.   BalloonEngineBase>>#<wbr>primitiveSetBitBltPlugin (inherited by BalloonEnginePlugin) inlines the code:</div><div><br></div><div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>length := interpreterProxy byteSizeOf: pluginName.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>length >= 256 </div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>ifTrue:[^interpreterProxy primitiveFail].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>ptr := interpreterProxy firstIndexableField: pluginName.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>needReload := false.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>0 to: length-1 do:[:i|</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">         </span>"Compare and store the plugin to be used"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>(bbPluginName at: i) = (ptr at: i) ifFalse:[</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                   </span>bbPluginName at: i put: (ptr at: i).</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                   </span>needReload := true]].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>(bbPluginName at: length) = 0 ifFalse:[</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>bbPluginName at: length put: 0.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>needReload := true].</div></div><div><br></div><div>So it looks like stringOf: has never been implemented by InterpreterProxy because in the simulation work that Dan would have done to develop the plugin interpreterProxy would have been bound to an interpreter.</div><div><br></div><div>Something like this should work:</div><div><br></div><div><div>primitiveSetBitBltPlugin</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>"Primitive. Set the BitBlt plugin to use."</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>| pluginName |</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>pluginName := interpreterProxy stackValue: 0.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>"Must be string to work"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>(interpreterProxy isBytes: pluginName) </div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>ifFalse:[^interpreterProxy primitiveFail].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>(interpreterProxy cStringOrNilFor: pluginName) = bbPluginName</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">          </span>ifTrue: [interpreterProxy pop: 1. "Return receiver"]</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">         </span>ifFalse: [^interpreterProxy primitiveFail]</div></div><div><br></div><div>Please test it both in your VM and in the simulator on a simulated image.</div><div><br></div><div>But this primitive is funny/strange/dubious.  It doesn't actually allow one to change the name.  It fails if the name isn't what it was already, and it gets initialized to "BitBltPlugin" in BalloonEngineBase class>>#declareCVarsIn: and by BalloonEngineSimulation>>initialize.  So what it really does is force initialiseModule to be called.  It might be better if it was replaced by e.g. primitiveReinitialiseModule.</div><div></div></div><div class="gmail_extra"><br></div><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>