<div dir="ltr">Yes, you most likely right. <div>I did some preliminary hacking and got it to partly work, but I don't know the real issues the image segment loading and converting entails.<div><br></div><div>Best,</div></div><div>Karl</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 2, 2018 at 7:00 PM, Eliot Miranda <span dir="ltr"><<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Karl,<div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Mon, Apr 30, 2018 at 11:17 AM, karl ramberg <span dir="ltr"><<a href="mailto:karlramberg@gmail.com" target="_blank">karlramberg@gmail.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"><div dir="ltr">This change set make the project ALMOST load in a 32 bit 6.0 Squeak image.<div>But there are some conversion issues I have not figured out.</div></div></blockquote><div><br></div></span><div>Looking at this change:</div><div><br></div><div>ObjectScanner>>scanFrom: aByteStream</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>"Sieze control of the fileIn.  Put myself in as the context.  If any UniClasses (for just one instance) are defined, they will do it through me, and I will look for conflicting class names.  If so, install the old name as a class var of me, so the compile will work.  Tell my SmartRefStream about renaming the class."</div><div><br></div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>| valWithOddName47 scannerNamed53 chunkNamed117 |</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>pvt3SmartRefStrm := SmartRefStream on: aByteStream.</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>aByteStream ascii.</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>[aByteStream atEnd] whileFalse:</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">              </span>[aByteStream skipSeparators.</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">         </span>valWithOddName47 := (aByteStream peekFor: $!)</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                        </span>ifTrue: [chunkNamed117 := aByteStream nextChunk.<span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>"debug"</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                    </span>chunkNamed117 = 'ImageSegment new' </div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                                 </span>ifTrue:[ chunkNamed117 := 'NativeImageSegment new'].</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                 </span>scannerNamed53 := Compiler evaluate: chunkNamed117</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                                   </span>for: self logged: false.</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                     </span>scannerNamed53 class == self class </div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                         </span>ifTrue: ["I already am the scanner for this file"]</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                         </span>ifFalse: [scannerNamed53 scanFrom: aByteStream]]</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                     </span>ifFalse: [chunkNamed117 := aByteStream nextChunk.</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                    </span>chunkNamed117 := self lookAhead: chunkNamed117.</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                      </span>Compiler evaluate: chunkNamed117 for: self logged: true].</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">            </span>aByteStream skipStyleChunk].</div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>^ valWithOddName47</div><div> </div><div><br></div><div>you introduced the lines:</div><div><br></div><div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                     </span>chunkNamed117 = 'ImageSegment new' </div><div><span class="m_4059188833059930342gmail-Apple-tab-span" style="white-space:pre-wrap">                                                 </span>ifTrue:[ chunkNamed117 := 'NativeImageSegment new'].</div></div><div><br></div><div>I think this is not going to work.  The issue being at this point we won't know whether we have a legacy image segment or a native image segment.  If you look at the hierarchy, there is</div><div>    ImageSegment</div><div>        NativeImageSegment</div><div>        LegacyImageSegment</div><div>and intentionally all the list vars are in ImageSegment so that when the scan of the actual binary data, embedded in the .pr file occurs, we can use something like (legacy ifTrue: [LegacyImageSegment] ifFalse: [NativeImageSegment]) adoptInstance: themageSegment to become the right kind of image segment.  So the way to proceed is to make ImageSegment intelligent enough to get you as far as the point where the kind of image segment, V3 or Spur, is apparent, and then make the switch.</div><div><br></div><div>HTH</div><div><div class="h5"><div> </div><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"><div dir="ltr"><div><br></div><div>NOTE: Image will probably crash. USE WITH CARE</div><div><br></div><div><br></div><div>Best,</div><div>Karl</div></div><div class="m_4059188833059930342gmail-HOEnZb"><div class="m_4059188833059930342gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 30, 2018 at 3:37 PM, H. Hirzel <span dir="ltr"><<a href="mailto:hannes.hirzel@gmail.com" target="_blank">hannes.hirzel@gmail.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">Unfortunately the dynamic essay <a href="http://MorphLayoutArticle.019.pr" rel="noreferrer" target="_blank">MorphLayoutArticle.019.pr</a> did not load<br>
in a fairly recent Squeak 6.0a trunk image.<br>
<br>
an OrderedCollection(ImageSegment<wbr>(Object)>>doesNotUnderstand:<br>
#scanFrom: ObjectScanner>>scanFrom: [] in [] in<br>
MultiByteBinaryOrTextStream(Po<wbr>sitionableStream)>>fileInAnnou<wbr>ncing:<br>
BlockClosure>>on:do: [] in<br>
MultiByteBinaryOrTextStream(Po<wbr>sitionableStream)>>fileInAnnou<wbr>ncing: []<br>
in [] in MorphicUIManager>>displayProgr<wbr>ess:at:from:to:during:<br>
BlockClosure>>on:do: [] in<br>
MorphicUIManager>>displayProgr<wbr>ess:at:from:to:during:<br>
BlockClosure>>ensure:<br>
MorphicUIManager>>displayProgr<wbr>ess:at:from:to:during:<br>
ProgressInitiationException>>d<wbr>efaultResumeValue<br>
ProgressInitiationException(Ex<wbr>ception)>>resume<br>
ProgressInitiationException>>d<wbr>efaultAction<br>
UndefinedObject>>handleSignal: Context>>handleSignal:<br>
Context>>handleSignal: Context>>handleSignal:<br>
ProgressInitiationException(Ex<wbr>ception)>>signal<br>
ProgressInitiationException>>d<wbr>isplay:at:from:to:during:<br>
ProgressInitiationException class>>display:at:from:to:duri<wbr>ng:<br>
ByteString(String)>>displayPro<wbr>gressAt:from:to:during:<br>
ByteString(String)>>displayPro<wbr>gressFrom:to:during:<br>
MultiByteBinaryOrTextStream(Po<wbr>sitionableStream)>>fileInAnnou<wbr>ncing:<br>
MultiByteBinaryOrTextStream(Po<wbr>sitionableStream)>>fileIn<br>
MultiByteBinaryOrTextStream>>f<wbr>ileInProject<br>
MultiByteBinaryOrTextStream>>f<wbr>ileInObjectAndCodeForProject [] in [] in<br>
ProjectLoading class>>fileInName:archive:morp<wbr>hOrList:<br>
BlockClosure>>on:do: [] in ProjectLoading<br>
class>>fileInName:archive:morp<wbr>hOrList: BlockClosure>>ensure:<br>
ProjectLoading class>>fileInName:archive:morp<wbr>hOrList: ProjectLoading<br>
class>>openName:stream:fromDir<wbr>ectory:withProjectView:clearOr<wbr>iginFlag:<br>
ProjectLoading class>>openName:stream:fromDir<wbr>ectory:withProjectView:<br>
[] in ProjectLoading class>>openOn: BlockClosure>>on:do: [] in<br>
ByteString(String)>>displaySeq<wbr>uentialProgress: [] in [] in<br>
MorphicUIManager>>displayProgr<wbr>ess:at:from:to:during:<br>
BlockClosure>>on:do: [] in<br>
MorphicUIManager>>displayProgr<wbr>ess:at:from:to:during:<br>
BlockClosure>>ensure:<br>
MorphicUIManager>>displayProgr<wbr>ess:at:from:to:during:<br>
ProgressInitiationException>>d<wbr>efaultResumeValue<br>
ProgressInitiationException(Ex<wbr>ception)>>resume<br>
ProgressInitiationException>>d<wbr>efaultAction<br>
UndefinedObject>>handleSignal:<br>
ProgressInitiationException(Ex<wbr>ception)>>signal<br>
ProgressInitiationException>>d<wbr>isplay:at:from:to:during:<br>
ProgressInitiationException class>>display:at:from:to:duri<wbr>ng:<br>
ProgressInitiationException class>>display:from:to:during:<br>
ByteString(String)>>displaySeq<wbr>uentialProgress: ProjectLoading<br>
class>>openOn: [] in ExternalDropHandler class>>defaultProjectHandler<br>
ExternalDropHandler>>handle:in<wbr>:dropEvent:<br>
PasteUpMorph>>handleDroppedIte<wbr>m:event: [] in PasteUpMorph>>dropFiles:<br>
BlockClosure>>ensure: PasteUpMorph>>dropFiles:<br>
PasteUpMorph(Morph)>>handleDro<wbr>pFiles: DropFilesEvent>>sentTo:<br>
PasteUpMorph(Morph)>>handleEve<wbr>nt:<br>
MorphicEventDispatcher>>dispat<wbr>chEvent:withHandler:withMorph:<br>
MorphicEventDispatcher>>dispat<wbr>chDefault:with:<br>
MorphicEventDispatcher>>dispat<wbr>chEvent:with:<br>
PasteUpMorph(Morph)>>processEv<wbr>ent:using: [] in<br>
PasteUpMorph>>processEvent:usi<wbr>ng: BlockClosure>>ensure:<br>
PasteUpMorph>>processEvent:usi<wbr>ng: PasteUpMorph(Morph)>>processEv<wbr>ent:<br>
[] in [] in [] in HandMorph>>sendEvent:focus:cle<wbr>ar:<br>
BlockClosure>>ensure:<br>
DropFilesEvent(MorphicEvent)>><wbr>becomeActiveDuring: [] in [] in<br>
HandMorph>>sendEvent:focus:cle<wbr>ar: BlockClosure>>ensure:<br>
HandMorph>>becomeActiveDuring: [] in HandMorph>>sendEvent:focus:cle<wbr>ar:<br>
BlockClosure>>ensure: PasteUpMorph>>becomeActiveDuri<wbr>ng:<br>
HandMorph>>sendEvent:focus:cle<wbr>ar: HandMorph>>sendEvent:focus:<br>
HandMorph>>handleEvent: HandMorph>>processEvents [] in<br>
WorldState>>doOneCycleNowFor: Array(SequenceableCollection)><wbr>>do:<br>
WorldState>>handsDo: WorldState>>doOneCycleNowFor:<br>
WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in<br>
MorphicProject>>spawnNewProces<wbr>s [] in BlockClosure>>newProcess)<br>
<span class="m_4059188833059930342gmail-m_1762894953816623448im m_4059188833059930342gmail-m_1762894953816623448HOEnZb"><br>
On 4/30/18, H. Hirzel <<a href="mailto:hannes.hirzel@gmail.com" target="_blank">hannes.hirzel@gmail.com</a>> wrote:<br>
</span><div class="m_4059188833059930342gmail-m_1762894953816623448HOEnZb"><div class="m_4059188833059930342gmail-m_1762894953816623448h5">> Hi Tim<br>
><br>
> Implementing your suggestion [1] worked to make<br>
> <a href="http://MorphLayoutArticle.019.pr" rel="noreferrer" target="_blank">MorphLayoutArticle.019.pr</a> load into<br>
> Squeak 3.8.1, see screen shot.<br>
><br>
> What I aiming at next  at is to load it into Squeak 6.0a trunk. I<br>
> assume this should be possible quite easily because of the<br>
> enhancements done last year [2][3].<br>
><br>
> Regards<br>
> Hannes<br>
><br>
><br>
><br>
><br>
><br>
> [1] Extend #initKnownRenames<br>
><br>
> SmartRefStream>>initKnownRenam<wbr>es<br>
>       renamed<br>
>           at: #AlansTextPlusMorph put: #TextPlusMorph;<br>
>               at: #FlasherMorph put: #Flasher;<br>
>               yourself<br>
><br>
> made <a href="http://MorphLayoutArticle.019.pr" rel="noreferrer" target="_blank">MorphLayoutArticle.019.pr</a> to load.<br>
><br>
><br>
> [2] 6502 format<br>
> <a href="http://wiki.squeak.org/squeak/6502" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/<wbr>6502</a><br>
><br>
> ImageFormat of the interpreter Virtual Machine.<br>
> May be loaded transparently into Squeak 6.0a through the help of<br>
> LegacyImageSegment.<br>
><br>
> [3]<br>
> <a href="http://wiki.squeak.org/squeak/6579" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/<wbr>6579</a><br>
> LegacyImageSegment<br>
> A new class introduced in March 2017 in Squeak 6.0a to enable the<br>
> loading of the older 6502 image segment format type .<br>
><br>
> More see Smalltalk imageFormatVersion  <a href="http://wiki.squeak.org/squeak/873" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/<wbr>873</a><br>
><br>
><br>
> On 4/30/18, Tm Jhnsn <<a href="mailto:digit@sonic.net" target="_blank">digit@sonic.net</a>> wrote:<br>
>> Hi Hannes,<br>
>><br>
>> In 5.1 there is SmartRefStream>>#initKnownRena<wbr>mes which includes:<br>
>><br>
>> at: #AlansTextPlusMorph put: #TextPlusMorph;<br>
>><br>
>> HTH,<br>
>> Tim<br>
>><br>
>><br>
>> On 4/30/2018 7:33 AM, H. Hirzel wrote:<br>
>>> Hi Bob<br>
>>><br>
>>> It still loads fine in Squeak 3.2. Thank you.<br>
>>><br>
>>> In Squeak 3.8.1 the SmartRefStream needs a new class for<br>
>>><br>
>>>       AlansTextPlusMorph<br>
>>><br>
>>><br>
>>> SmartRefStream>><br>
>>> alansTextPlusMorphbosfcebbmsop<wbr>ssrsggshtt0<br>
>>><br>
>>>     ^ PutNewClassHere<br>
>>><br>
>>><br>
>>> Any suggestions what I should put as a new class?<br>
>>><br>
>>> Regards<br>
>>> Hannes<br>
>>><br>
>>><br>
>>><br>
>>><br>
>>> On 4/30/18, Bob Arning <<a href="mailto:arning315@comcast.net" target="_blank">arning315@comcast.net</a>> wrote:<br>
>>>> Here is the latest one I have. It loaded fine in 3.2.<br>
>>>><br>
>>>><br>
>>>> On 4/29/18 10:20 PM, H. Hirzel wrote:<br>
>>>>> Hello<br>
>>>>><br>
>>>>> Is there a backup-copy/mirror available of the<br>
>>>>><br>
>>>>>                   MorphLayoutArticle<br>
>>>>><br>
>>>>> project which was on Bob's SuperSwiki? [1]<br>
>>>>><br>
>>>>> Regards<br>
>>>>> Hannes<br>
>>>>><br>
>>>>><br>
>>>>><br>
>>>>> ------------------------------<wbr>----<br>
>>>>> [1]<br>
>>>>> <a href="http://wiki.squeak.org/squeak/2141" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/<wbr>2141</a><br>
>>>>><br>
>>>>> How to lay out submorphs<br>
>>>>><br>
>>>>> Please read the excellent dynamic essay project MorphLayoutArticle<br>
>>>>> (broken link) on Bob's SuperSwiki.<br>
>>>>><br>
>>>>> Every Morph now has the capability to layout it's submorphs.<br>
>>>>> (Previously, only the AlignmentMorph could implement layout policies.<br>
>>>>> AlignmentMorph is still available because of compatibility reasons and<br>
>>>>> some utility methods it implements.<br>
>>>>><br>
>>>><br>
>>>><br>
>>>><br>
>><br>
>><br>
><br>
<br>
</div></div></blockquote></div><br></div>
</div></div><br><br>
<br></blockquote></div></div></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="m_4059188833059930342gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</font></span></div></div>
<br><br>
<br></blockquote></div><br></div>