Latest updates released [long trailer]

Dan Ingalls DanI at
Sun Oct 18 18:37:32 UTC 1998

Folks -

I have just put out 45 new updates on the Squeak servers.  We are planning to make a new release shortly after OOPSLA with all of these updates and more, so casual users need not bother with updating.  However, those who are keenly interested or otherwise just in the mood, can get the updates now and start to play around with them.

Included in these updates are...
Numerous fixes to morphic rotation, scaling and drop shadows.
A number of fixes to morphic text and windows.
A number of Wiki and Mail Reader improvements.
A number of scripting fixes and enhancements.
An improved interface to preferences.
Significant improvments to MIDI input.
A MAJOR new facility from Andreas Raab: Weak Arrays and Finalization
    You need to build a new VM after updating, for this to work, and then execute
    "WeakArray initialize" to start using it for finalization.
Another MAJOR new facility from Andreas: Pluggable Primitives
    1.  Provide flexible access to native functionality.
    2.  To make such modules loaded only on demand.
    3.  To get free of the fixed numbering scheme of primitive access.
    4.  To define a reasonable set of VM utility routines for facilitating
          interface with host-native modules.
    Andreas tried to learn from the work that has already been done in this area,
    and also to do things in the most flexible, general, and portable manner.
    It is our hope that, by including this facility in the baseline release, a number
    of the native API experiments now in progress may be converted to this standard,
    and then be brought forward more easily from release to release in the future.
    Use of pluggable primitives also requires building a new VM.
As an enticing demonstration of Pluggable Primitives, Andreas has included an implementation of FloatArrays, and an FFT primitive that uses them to achieve 150 times the bandwidth of Squeak's modest FFT!

We look forward to seeing many of you at OOPSLA next week.  We will be demonstrating most of the above improvements in addition to a brand-new Squeak implementation of the Flash graphics standard.  We will have more to say about this after OOPSLA.

As I said before, we will issue a release with all of these updates and more, shortly after OOPSLA.

	- Dan

[Incidentally, as a side-effect of the preferences changes, calling for updates will result in a dozen or so of the update files being copied to your disk (recognizable by names like NNNchangesName.cs).  These may be deleted, and it will not happen again when you next ask for updates].

Here follows a summary of all the updates, produced essentially by printing the following expression...
    (String streamContents:
        [:s | ChangeSorter gatherChangeSets do:
            [:cs | s nextPutAll: cs summaryString; cr]])

615scaleFix-sw -- Scott Wallace -- 	26 September 1998
Fixes the bug that could drop you into a debugger if you set the scale of an unflexed morph from a Viewer."

616paintingTweaks-sw -- Scott Wallace -- 	29 September 1998
When user chooses 'make new drawing' from the New Morph menu, she now gets an about-to-paint icon attached to the house; the first click lets her choose the receptor for the putative painting.
Adds a preference, #unlimitedPaintArea -- if true, no limits are put on the onion-skin area for painting; if false, a nominal limit (given by whatever is returned by Preferences defaultPaintingExtent) is used, in an effort to reduce the likelihood of running out of memory.
Also, exclude SketchMorph from the textual New Morph menu"

617dropSysWindow-sw -- Scott Wallace -- 	29 September 1998
Keeps system windows from being annoyingly repelled by parts bins, etc, and from being annoyingly embedded in playfields/pages when dropped;  System windows, unless you set a preference to the contrary, generally all live on the world desktop and do not ever wish to be embedded in other morphs.
Adds preference 'allowSysWindowEmbedding' -- if true, then SystemWindows will be readily droppable within pasteups, but if not true, system windows will generally be kept at the desktop level, at least when manipulating them via the drag-and-drop UI"


619TweaksFor2-2-di -- Dan Ingalls -- 	29 September 1998
Several minor tweaks for the 2.2 release...
Make lowSpaceWatcher work when Morphic has been removed.
Amend the set of messages retained by majorShrink.
Allow invalidRect: to propagate in an inactive WorldMorph.
Allow quitting a system with a mail reader that has been moved away from its files.
Make prettyPrinting work in ChangeSorters.
Better (?) choice of colors for shift-prettyPrinting.

620unscriptedFix-sw -- Scott Wallace -- 	30 September 1998
Fixes the bug that had added inst vars and methods to vanilla UnscriptedPlayer class (the metaclass) when executing the Try button associated with a method that had a player reference in it, such as 'car move toward dot'.  This update removes the bug and also patches up the instance structure of UnscriptedPlayer class and its method dictionary to get rid of whichever undesired inst vars and methods may have accumulated in the host image because of the bug."

621MorphicFixes-di -- Dan Ingalls -- 	30 September 1998
Makes the default color for DropShadows be black.
Makes HandMorph>>grabMorph: work properly when grabbing from a flexed context.
Makes implementors of wantsDroppedMorph:event: transform global coordinates.
Makes black and brown-handled moves work properly in flexed contexts.
Makes command-drag work properly in flexed contexts.
Makes colorUnder work properly in flexed contexts, 
	at least to the extent that fullDrawOn has not been overridden.
Improves accuracy of flexMorph bounds and responsiveness during flexing.
Makes color:sees: and touchesColor: work correctly in flexes.

622MorphicFixes2-di -- Dan Ingalls -- 	2 October 1998
Changed the TransformMorph #invertRect: to #invertBoundsRect:
	to clarify that it returns the resulting outer bounds.
Aggregated submorph display in TransformMorph (much faster).
Passed depth to subCanvas in TransformMorph>>fullDispOn:without..

623MorphicFixes3-di -- Dan Ingalls -- 	2 October 1998
Makes halo bounds work better inside flexes.
Makes grow, scale and rotate work better inside flexes.

624BWMorphic-di -- Dan Ingalls -- 	3 October 1998
A number of fixes that make Morphic work reasonably in B&W, to wit...
Made handMorph>>restoreSavedPatch use opaque white in B&W.
Made flexes do a prefatory erasure of the (warped) shape of the submorphs.

625FlexBoundsFix-di -- Dan Ingalls -- 	3 October 1998
Flexed bounds required an extra pixel on the right and bottom to cover subsequent truncation of floats.

626loadFromDisk-sw -- Scott Wallace -- 	5 October 1998
Adds a single menu item to the New Morph menu which will present you with a list of all files loadable as morphs from disk, whether they be .morph files or .gif files or .jpg files, etc."

627RoundTwo-di -- Dan Ingalls -- 	5 October 1998
Adds a method canvasForSubmorphs: that allows three formerly idiosyncratic implementations of fullDrawOn: to be replaced by simple inheritance of the general method in Morph.
Failure to click in a morphic menu should now result in dismissal as expected.
Drop shadows are no longer incorrectly affected by text color emphasis.
MVC inspect no longer offered in a morphic world (duh).
Numerous fixes for flexed SystemWindows, including
	Coming to the top when clicked
	Only getting control when cursor is over flexed shape
	Retaining control when scrollbar flops out of window bounds
	Making reshape handles work properly.
Introduces a mechanism for retaining ParagraphEditor state across reinstantiation such as happens when an edit causes recomposition due to line break.  This corrects the multiple selections and erroneous screen artifacts.
Makes repeated edits and undos work right in morphic, even when line breaks are involved.
Makes the find command defeat substitution from a prior change command.
Makes text deletion set typing emphasis according to the first character deleted.

628RoundTwoTweaks-di -- Your Name -- 	6 October 1998
Fixes three problems with the Round Two update:
Dismissal of a mouse-up menu by clicking outside
will not invoke other mouseDown activity.
Erroneous return of a non-boolean is fixed
in TransformMorph>>fullDrawOn:without:.
Typing across the boundary of linked textMorphs
now works properly again.


630sortedProjectList-sw -- Scott Wallace -- 	6 October 1998
Makes the presentation of the full list of project names in the bottom part of the jump-to-project  menu be in case-blind alphabetical order"

631diskLoadTweaks-sw -- Scott Wallace -- 	6 October 1998
Adds two variant spellings of the .jpg suffix to the list of suffixes being looked for in the new-morph-from-file command, and splits out the acceptable-graphics-suffix list into a separate method."

632projChangeSet-sw -- Scott Wallace -- 	6 October 1998
Fixes the long-standing bug whereby you often weren't allowed to delete a change set because you were told that it belonged to a project when in fact it no longer did.  (The old workaround was to exit and reenter the project!)  The fix consists of eagerly updating the project's change set whenever Smalltalk newChanges: is called, rather than only upon project exit."

633TwoFixes-ar -- Andreas Raab -- 	7 October 1998
Fix1: Clear all RootBits when the image is loaded.
Fix2: Correct a 32bit shift in BBSimulation>>alphaBlendConst:with:paint:"

634Finalization-RoundOne-ar -- Andreas Raab -- 	7 October 1998
This is the first round of Finalization updates.
It introduces weak classes having a special class format (=4) and all 
the associated changes in ObjectMemory/Interpreter/DynamicInterpreter. 
For a comment see ObjectMemory>>aFinalizationComment. In addition,
a finalization semaphore is added to the special objects array.
Weak classes have both fixed and variable fields of which *only* the
variable fields are weak. Thus, you can mix weak and non-weak field
in a weak class."

635Finalization-RoundTwo-ar -- Andreas Raab -- 	7 October 1998
Round two of the Finalization updates installs all the necessary 
modifications in Behavior/ClassDescription/Class/Metaclass for defining
weakSubclasses. Note that a number of methods have become
obsolete (they're flagged with #obsolete) but not yet removed
to avoid inconsistencies."

636Finalization-RoundThree-ar -- Andreas Raab -- 	7 October 1998
Round three adds weak collections to the system
e.g., WeakArray, WeakKeyDictionary,
WeakValueDictionary, and WeakRegistry."
SystemOrganization addCategory: 'Collections-Weak' before: 'Collections-Support' asSymbol.

637Finalization-RoundFour-ar -- Andreas Raab -- 	7 October 1998
Round four of the Finalization updates installs weak registries
in class Socket and StandardFileStream, but does not activate them.
(this has to do with the fileIn order of certain methods)"

638Finalization-RoundFive-ar -- Andreas Raab -- 	7 October 1998
Round five of the Finalization updates activates
the weak registries in class Socket and StandardFileStream"

639RoundThree-di -- Dan Ingalls -- 	6 October 1998
This ChangeSet includes Bob Arning's fix for indent/outdent in morphic [thanks!].
ZoomMorphs have been removed from the 'new morph' menu.
A CursorWithMask class has been added.  You can try it out by executing...
		Cursor initNormalWithMask.  Cursor normal show.
	and you can revert by executing...
		Cursor initNormal.  Cursor normal show.
There is a general method that will derive all the cursors automatically from their unmasked counterparts.  However the above method simply installs a hand-tweaked masked version of the normal cursor.
TextMorphs with drop-shadows can now fill their owner's shape.
TextMorphs with drop-shadows can be embedded in Project links.
Embedded text now remembers its fill properties when duplicated.


641RoundFour-di -- Dan Ingalls -- 	9 October 1998
A few more fixes to curves and text...
* Polygons and curves no longer offer fill mode choice if not closed.
* Curve editing handles appear in front of embedded text, if any.
* Text on curves now shows when dragging.
* Brown handle drag and cmd-drag now flow text around occlusions.
....and a number of items from the Squeak Bug List...
* Proceeding from a syntax error in MVC now works again.
* If you have a syntax error in a do-it in a fileIn, you can proceed after correction.  this never worked before.
* In morphic browsers, after you do a spawn, the spawned text is cleared from the original browser.
* In the morphic debugger's code pane, 'cancel' now discards unaccepted edits properly.
* Similarly, after a cancel (e.g. cmd-l) the old text is cleared from the browser.

642CCodeGenerator-Extensions-ar -- Andreas Raab -- 	11 October 1998
The change set contains three additional translation rules for
	#/ 			- being translated like #// for float computations
	#asFloat		- translated into '((double) rcvr)'
	#asInteger	- translated into '((int) rcvr)'

643Pluggable-Primitives-ar -- Andreas Raab -- 	11 October 1998
This change set provides the framework for pluggable primitives by:
* extending Parser to handle named primitives
* adding primitiveExternalCall in the Interpreter
* Changing TMethod to handle the #export: directive
* Changing TSendNode for plugin code generation
* Adding class PluggableCodeGenerator
* Adding the following classes for simulating plugins
* Adding methods in ObjectMemory/Interpreter for plugin support.

644PluggablePrims-Support-ar -- Andreas Raab -- 	11 October 1998
This change set includes the necessary modifications
in the VM support code by
* Adding the files sqVirtualMachine.h and sqVirtualMachine.c
  for the InterpreterProxy
* Changing the sq.h file by
	* Adding the EXPORT() macro
	* Adding the function declaration for sqGetInterpreterProxy()
	* Adding the function declaration for platform-dependent
	  loading of named functions from external libraries
* Changing the sqPlatformSpecific.h file to include the necessary
  Win32 definitions
* Providing a stub for the Mac implementation of loading 
   named primitives
* Changing the writeMacSourceFiles function to reflect the above changes

645PluggablePrims-Examples-ar -- Andreas Raab -- 	11 October 1998
The change set includes two examples for pluggable primitives.
FloatArrays - Arrays storing 32bit IEEE floating point number
for numerically heavy computations.
FFT - Using FloatArrays to speed up the FFT computation by
about a factor of 150 (yes, really!). The FFTPlugin is also an
example how entire plugins can be simulated from Smalltalk
code and how to deal with instance specific data in a primitive.
Finally, the translation methods of Interpreter DynamicInterpreter
have been modified to translate the two plugins in the source code."


647TR-VM-Fixes -- Andreas Raab -- 	13 October 1998
Two fixes suggested by Tim Rowledge:
#1 fixes a possibly fatal bug in argumentCountOf:
#2 fixes a problem from using #normalSend in bytecodePrimAt and bytecodePrimAtPut"

648isUnderMouse-sw -- Scott Wallace -- 	13 October 1998
Adds an #isUnderMouse slot to the Viewer, for use in scripting.  isUnderMouse returns true if any part of the player's current costume is under the current mouse location, whether the object is occluded at that point or not.  The implementation is 'flex-aware'.
Also, moves initialization of the scripting help-dictionary to the instance side of StandardScriptingSystem, remedying an anomaly attributable to historical accident."

649watcherFormat-sw -- Scott Wallace -- 	13 October 1998
Adds menu items allowing specification of number of decimal places, font size, and font family to the UpdatingStringMorph, used in watchers and viewers.
Also, removes the 'tear-off-value-tile' feature I added in August 1998 -- turns out I had misunderstood Alan's request.  The watchers turned out to be the solution to his wishes, but I never until now got around to ripping out the falsely-interpreted path"

650dropThumbnail-sw -- Scott Wallace -- 	13 October 1998
When a MorphThumbnail is dropped on a pasteup that is not showing thumbnails, what gets dropped will be the original representee, if all is well"

651timeStamp-sw -- Scott Wallace -- 	13 October 1998
Makes the extracting of the time-stamp for a method from a source file (finally) a much less heavy-weight operation, by just retrieving the current source, not all historical versions."

652preferencesPanel-sw -- Scott Wallace -- 	13 October 1998
Provides a live panel for dealing with all the boolean preferences; the user can see all of them at once, get balloon help for any of them, and can toggle any value by clicking on it.
Also, a number of simplifications to the protocols and methods relating to absorbing updates, including clearing out some old disused cruft, and also providing a protocol whereby updates can be downloaded to the local hard disk without their being absorbed into the image."

653dropThumbnailFix-sw -- Scott Wallace -- 	13 October 1998
Some methods inadvertently omitted from the dropThumbnail update"

654jhmCelesteTweaks -- John Maloney -- 	12 October 1998
Various improvements and bug fixes to Celeste. Fixes the bug
resulting in 'Block cannot return' notifier when server
is unavailable. This was caused by having a return in
an ifError: block, which left the old error handler
block installed, even though the block could not be used
since it had already returned.
Fixes all other methods containing returns in error blocks.
Includes Lex's fix of indexOfAscii:inString:startingAt: primitive
to handle characters > 127."

655jhmNetInitFix -- John Maloney -- 	14 October 1998
Fixes a problem introduced by fixing the Socket double-initialization
bug. Namely, the socket creation code was doing a network initialize,
but is no longer doing so. This fix makes sure that clients are doing
their own network initialization, rather than expecting it to be done
as a side-effect of socket creation."

656jhmMIDIInput -- John Maloney -- 	14 October 1998
Improves the MIDI facilities in a number of ways, including the ability
to parse, filter, and process incoming MIDI commands. Includes the beginning
of a simple MIDI-controlled synthesizer. One can also create sliders
to control for various MIDI parameters, can play an external MIDI device
via an on-screen keyboard, can select MIDI ports by name, and more."


658miscTweaks-sw -- Scott Wallace -- 	15 October 1998
A variety of minor tweaks, including:
* Restore the feature of presenting the core-sample list upon 'inspect' request from morph meta-menu.
* Take down scrollbar in mvc-variant of SelectorBrowser before going off to new window.
* Fix-up change-set-list after submerge-into-other-side command.
* Wording change from 'scripting' to 'authoring tools' in world menu.
* More morphic things work properly when requested in morphic worlds embedded in mvc projects. 
* If inactive SystemWindow gets dropped, activate it.
* Several obsolete methods deleted.

659SqTConstruct-di -- Dan Ingalls -- 	18 October 1998
Makes ScorePlayerMorphs and MoviePlayerMorphs able to be instantiated without an open file.  You can then open a file via menu command.
A movie player can be created from the new morphs...Demo menu, but the ScorePlayer is not currently available from any of these menus.  However, both can be instantiated by executing...
	MoviePlayerMorph new openInWorld.
	ScorePlayerMorph new openInWorld.

More information about the Squeak-dev mailing list