From: Matthew Flatt <>
Date: Wed, 25 Jul 2001 16:53:41 -0600 (MDT)
Subject: 199.18

The v200-tagged code in CVS for MzScheme and MrEd is now version 199.18.

The changes are mostly small ones from my long-term "to do" list:

 * Changed mouse-event% and key-event% positions (x and y) to be
   inexact integers. For a scrollable, scalable canvas, mouse clicks
   are now reported in client pixels (as the documentation has always
   claimed!) instead of DC coordinates (or some random combination of
   client and DC coordinates, depending on the platform).

 * Added `container-flow-modified’ method to area-container<%>, which
   notifies the geometry manager that the result of `place-children’,
   etc.  has changed.

 * Added ’size-n/s, ’size-e/w, ’size-ne/sw, and ’size-nw/se built-in

 * Added colors to `the-color-database’ so that all 140 "standard"
   HTML colors are in the database.

 * Added ’wheel-up and ’wheel-down "key" events.

 * X: Added Motif-style behavior for the middle button in scroll bars
   and sliders.

 * Windows: Implemented mouse-wheel scrolling in editor-canvas%.
   The canvas intercepts ’wheel-up and ’wheel-down events instead of
   passing them on to a displayed editor.

 * Quoted portions of a symbol (using | or \) preserve their case,
   even when symbols are read without case-sensitivity. (Quoting
   should have always worked this way, but I didn’t know better.)

 * Added an optional third argument to `tcp-listen’. A true value for
   the argument causes a listener to be created even when the port is
   still involved with a TIME_WAITed connection.

   This defeats certain guarantees of the TCP protocol, which is why I
   never implemented it before. (Also, most everything I read on the
   topic recommended not defeating the protocol.) But many
   applications --- notably web servers --- can live without the

 * In "" and "", changed
  `global-define-values/invoke-unit’ and
  `global-define-values/invoke-unit/sig’ to
  `namespace-variable-bind/invoke-unit’ and
  `namespace-variable-bind/invoke-unit/sig’, to match the new name for

 * Changed the default error value conversion handler to print values
   using the current global port print handler.

 * Attempting to write a bytecode that contains unmarshalable constants
   now raises an exception. (Effectively, the exception is moved from
   read time to write time, since reading such a bytecode would fail

 * Re-renamed "2k" to "3m" (for "moving memory manager").

   Why change again? Garbage collection is inherently imprecise, making
   "precise garbage collection" an awkward term. "Moving memory
   manager" more clearly explains the difference as it affects
   extension/embedding programmers. Also, the number--letter
   combination looks better. Finally, unlike "2k", we have another
   2,997,999 years to get the conversion right before the name goes out
   of date.

 * Added a -M <coll> flag to MzScheme and MrEd as a shorthand for
   -L <coll>.ss <coll>.

 * Fixed a bug in code that cooperates with the scheduler; the bug
   could trigger a crash in `tcp-accept’ because the needs_wakeup
   function was called without a preceding call to the check function.

The MzScheme, MzLib, MrEd, mzc, and Inside MzScheme doc bundles have
been updated, but many section names are mis-recorded in the Help Desk
index for MrEd; I’ll fix that tomorrow.