eXene-0.4 (released ???)
------------------------

GLOBAL CHANGES
  - changed type naming convention to remove "_t" suffix.
    [02/09/93]

  - modified source to use SML/NJ Library (v. 0.1).  A couple of the interfaces
    are different from the util-lib versions.
    [02/03/93]

LIBRARY CHANGES
  - modified XDebug structure to use the trace modules provided by TraceCML.
    Also modified various clients of XDebug.
    [02/10/93]

  - exposed WindowNotFound exception in EXeneBase.
    [02/10/93]

  - changed lib-level hashing functions to use SML/NJ Library hash tables.
    [02/09/93] 

  - added encodeSendEvent to XRequest, and send_evt_to_t type to XProtTypes.
    Created the XSendEvent structure, which contains routines for encoding
    SendEvent requests (currently only encodeSendSelectionNotify).
    [11/20/92]

  - modified lib/protocol/xdisplay.sml to retry connection upto 5 times.
    [11/17/92]

  - open EXene structure using explicit structure assignments, so as not to
    confuse source groups.

  - Always create GC server for depth 1 pixmaps (patch for IBM X bug) (display.sml)

  - Fixed parity error in internAtom and lookupAtom (xatoms.sml)

  - Added black and white color_spec_t to EXeneBase (abstract.sml,exene-base.sml)
  - Added createImageFromTile function to EXeneBase (exene-base.sml,image.sml)

  - Removed alloc-type window creation routines (window.sml,exene-win.sml)

  - Added function createTransientWin (window.sml,exene-win.sml,xprops.sml)

  - Added function setWMProtocols (window.sml,exene-win.sml,xprops.sml)

(2 November 1992)

  - split lib/window/window.sml into window-sig.sml and window.sml.

  - added background and border color fields to representation of windows.
    This is necessary to avoid premature deallocation of those color
    cells, once color finalization is implemented.

  - changed "Drawing.autoflush" to "Drawing.feedback"

  - Implemented a new, more abstract, color model.  Each screen has a color
    server that maps abstract color specifications (color_spec_t) to
    an abstract representation of colors (color_t).  The pixel type is no
    longer visible to the user level.

  - Added number of buffered messages count to mapped state of draw-master.

  - Added Font.charPositions to return per character positions of a string.

  - Fixed race condition by adding buffering to the top-level
    window server.

  - XDisplay structure now contains a field for the X server's
    maximum request size.

  - Image can now be more than 1 plane deep, using XY format.
    Images and their ascii representations now require a list of
    lists instead of a list.
    bm2mlx-template.c modified to reflect the new format.

  - Function createImageFromPixmap added.

  - Bounding box function bbox added to Geometry.

  - Bugs in intersection and union in Geometry fixed.

  - Race condition between drawing on a pixmap and destroying the
    pixmap eliminated.

  - Bug in createTileFromPixmap fixed.

  - MOUSE_Enter/MOUSE_Leave events now generated.

  - FirstDown & LastUp messages added to mouse_msg_t.

  - fixed bug in HashUtil.remove

  - added checks to guarantee that values constructed using concrete
    datatypes lie in allowed ranges for the X protocol.  Added related
    exceptions BadRGB, BadDrawParameter, BadPenParameter, BadWindowGeometry
    and BadPixmapParameter.

  - NoColorCell exception added to EXeneBase (and Color), for attempts to
    allocate a new color cell when the color map is full.

  - Immutable tiles are now used where pixmaps used to be allowed.

GRAPHICS UTILITIES
  - Added routine for generating general ellipses.
    [10/05/92]

  - Fixed bug in spline code concerning when line is flat enough.
    [10/03/92]

  - Spline code has been moved into the graphics utility directory
    (lib/graph_util).
    [10/03/92]

  - Added routines for drawing/filling rounded rectangles.
    [09/03/92]

WIDGET CHANGES
  - The BadArgument exceptions in Box, Pile and WidgetSet are 
    changed to BadIndex (box.sml, pile.sml, widget-set.sml).
    [02/12/93]

  - The AlreadyRealized exception from Widget is now exposed (widget.sml).
    [02/12/93]

  - The getChildEnv function in Router now raises a NotFound
    exception if the environment is not in the table (router.sml).
    [02/12/93]

  - A shell widget now deletes its own window and becomes a zombie
    when it receives a KillReq from its child (shell.sml).
    [02/12/93]

  - The bounds function for str_edit is more correctly and efficiently
    handled. It is also no flexible in the x dimension (str-edit.sml).
    [02/12/93]

  - Unnecessary case "013" removed from echo server (vtty.sml)
    [02/12/93]

  - Field name "rad" changed to "radius" in mkToggleCircle (toggle.sml)
    [02/12/93]

  - Many widget exceptions replaced by LibBase.BadArg (slider.sml,
    scrollbar.sml, divider.sml, button-view.sml, str-edit.sml,
    widget.sml, frame.sml, viewport-sig.sml, viewport.sml
    [02/12/93]

  - Exceptions BadWidth and MultipleChoices exposed in text-list.sml
    [02/11/93]

  - Unused exception BadWidth removed from color-rect.sml
    [02/11/93]

  - setWMHints function added to Shell

  - type generators added for types defined by type abbreviation:
    wm_args_t, hints_t (shell.sml), bounds_t (widget.sml),
    list_item_t (text-list.sml), set_item_t (widget-set.sml),
    whereFn_t (simple-menu.sml)

  - Added code to prevent possible deadlock dealing with child CO
    events (widget.sml, shell.sml, box.sml, shape.sml, field-edit.sml)

(11 November 1992)

  - Fixed bugs in vtty.sml, toggle-ctrl.sml

(10 November 1992)

  - Added WidgetSet structure (widget-set.sml); new version of
    TextList using WidgetSet

(5 November 1992)
  - The widget library assumes util-lib library loaded

  - Added mkTransientShell and removed setWMHints from Shell

  - Added wstate_t type to Widget; replaces button_state_t

  - Added sameRoot function to Widget

  - Made widgets abstract, with equality function. 

  - Removed window attributes for widgets. The wrapCreate function 
    was changed accordingly. Also, removed setBackground function 
    from Widget; use new background widget instead

  - Added several utility functions to Widget: okaySize, compatibleDim, 
    compatibleSize

  - Added ignoreMouse, ignoreKey functions for widgets

  - Toggles now take an initial state; in addition, a toggle now 
    fires its action routine if its state is changed under program control

  - Sliders now take an initial state; in addition, there are now functions for
    setting the state, plus querying the state and scale

  - The function mkSBLayout has been moved to its own structure ScrollLayout

  - TextList replaces the ListWidget structure. The user can now 
    specify an initial state for the items.

  - mkColorRect has been added to implement simple colored rectangular regions.

  - A background_t widget has been added to implement backgrounds for widgets

  - Where possible, composite widgets no longer need a root 
    argument (structures Frame, ScrollPort, Shape)

  - The Box structure now produces a box_layout_t, rather than a widget_t.
    (There is the usual widgetOf function.) In addition, one can now
    insert, delete, map, and unmap "boxes" in the top level of the box
    hierarchy

  - A Pile structure has been added. This implements a pile_t type, which
    maintains a collection of widgets, only one of which is visible at
    a time. Widgets can be inserted and deleted from piles.

(2 November 1992)

  - modified str-edit.sml to allow character values in the range
    [0xa0-0xff].

  - Color type introduced to allow multiple representations; currently
    supports RGB and pixel.  [NOTE: this has been moved to the library
    level]

  - New widgets : Divider, MenuButton, ViewPort, ScrollPort

  - Label views, text button views and list items 
    reimplemented to use common text glyph.

  - Frames provide dynamic control of frame color.

  - Labels provide a font option, and dynamic control of colors.

  - Bugs fixed in scrollbar widges.

  - Signature of Shape module changed, and two new functions mkRigid
    and mkFlex added.

  - Character insertion and deletion added to TextWidget

  - The Widget module now provides filter functions for the input streams,
    and a function to alter the background of a widget.

  - Toggle and button protocol has changed. Command and toggle buttons
    register a change on button up, not on button down. If button up
    occurs off the widget, no change is registered. Event streams for
    general buttons now terminate with either button up or exit, the latter
    indicating the mouse has left the widget. Buttons and toggles also now
    provide active/inactive state.


eXene-0.3 (released 12/03/91)
-----------------------------

GLOBAL CHANGES:
  - eXene is now based on CML-0.9.4; this very required minor changes to
    eXene (now using 0.9.6).

  - ported to SML/NJ 0.71.  Most changes were a result of the Array structure
    not being open by default, and by Array.sub no longer being an infix operator.
    Changed the representation of pen_t values to use immutable vectors.

LIBRARY CHANGES
  - fixed typechecking problem in protocol/xdisplay.sml that was exposed
    by SML/NJ 0.70.

  - replaced draw_dst_t datatype with abstract drawable_t type.  This is
    part of the support for rubber-banding.

  - fixed xio.sml bug caused by a faulty understanding of the sequencing
    semantics of the protocol.

  - fixed bugs in gc-server.sml and draw-master.sml reported by Huimin Lin
    (huimin@@cogs.susx.ac.uk).

  - fixed bug in HashUtil.mapList

  - changed remove function for hash tables to return the removed item.  This
    affected the hash tables defined in util/{hash-util.sml,hash-xid.sml},
    window/hash-window.sml and user/eXene-base.sml.

  - added window-tree locking mechanism to the window registry.

  - modified asynchronous blt operations to use a promise-style implementation.

  - added updatePen operation for functional updates of pens.

  - added createOverlay to support rubber-banding.

  - new Spline module providing functions to compute Bezier cubic sections,
    and open and closed B-splines.

  - added copyBlt and copyBltEvt.

  - fixed bug in decoding font info in xreply.sml (wrong offset)

WIDGET CHANGES
  - fixed possible deadlock arising from parent not always servicing a child's
    CO event. This affected box.sml and field-edit.sml.

  - added new text list widget. The widget provides a vertical or horizontal
    display of text items, and events associated with the user choosing items.

  - the ButtonView structure now provides a new view mkTextBtn, which
    generalizes mkLabelBtn (rectangular buttons with string labels) by
    allowing the programmer to specify the border width and text alignment
    within the button.

  - fixed bug in Frame widget that was causing deadlock.

  - the SimpleMenu module has seen various bug fixes and style
    changes, as well as the addition of a low-level menu routine
    for providing pop-up menus within widgets.

  - there is now a working vtty widget (thanks to Thomas Yan for finishing
    our code)

  - the Canvas widget now provides a drawable, so that the library drawing
    routines can be used.


eXene-0.2 (released 4/27/91)
-----------------------------

LIBRARY CHANGES
  - added absolute screen coordinates to mouse event messages

  - added tileBlt operation to Drawing

  - fixed GraphicsExpose/NoExpose problem.  Drawing.bitblt and Drawing.tileBlt
    will raise the exception Exposures, if part of the source is unavailable.
    Also, the PV_Exposures field for pens has been eliminated.

  - destroyWindow is now handled by the draw-master, which avoids a race
    with any pending drawing requests on the window.  This was a problem
    with popup windows.

  - added Geometry.inside; test if a rectangle is inside another

  - fixed bug in encodePolyRects, etc.

  - changed DrawMaster to group adjacent drawing requests that use the same pen.

  - fixed the shutdown deadlock that was causing the "eXene-shutdown timeout"
    message.

WIDGET CHANGES
  - fixed deadlock in widgets/router.sml

  - added tileBlt operation to Canvas widget

  - the menu widget is fixed

  - there is now a text widget

  - there is a text-field edit widget

  - the bounds_t type has been redefined; see the manual for details.

  - the box/glue layouts have been re-implemented.  Also, the layout semantics
    have changed; see the manual for details.

  - the type of Widget.wrapCreate has changed; point_t and size_t arguments were
    bundled into a rect_t argument.

  - additional button views have been added.

  - the shell widget now provides application access to window manager
    hints. In addition, the shell automatically registers size hints
    with the window manager.

EXAMPLES
  - the examples have been updated to use some of the new library features

  - a simple example of the menu widget has been added

  - a calculator has been implemented using the widget set.


eXene-0.1 (released 3/19/91)
-----------------------------
  This was the first release
