eXene-2.0a
------------------------

Fixed bug in creation of color_spec's (widgets/util/attrs.sml)
    [Apr 2006]

Included small bug fixes to widgets/composite/pipe.sml (by David Benson) and
  widgets/composite/viewport.sml (by Dominic Gelinas).
    [Apr 2006]

GRAPHICS UTILITIES
  - modifications to xauth.sml to unpack IP addresses from Xauth file 
     to strings for comparison; if a local connection is to be created, 
     search Xauth file by the full system name of the local host, or if 
     an Internet connection is to be created, search by the IP address 
     of the remote host.
    [Feb/Sept 2005/Apr 2006]

LIBRARY CHANGES
  - modified createSimpleTopWin to return channel on which X window
     managers may notify the window of deletion events:
       val createSimpleTopWin : Display.screen -> {
          geom : Geometry.win_geom,
          border : ColorServer.color,
          backgrnd : ColorServer.color
       } -> (window * WindowEnv.in_env * WindowEnv.client_msg CML.chan)
    [Jan 2005]

  - added ICCC.xrdbOfScr, whereby an application may retrieve the strings
     stored in the RESOURCE_MANAGER property of the root window by xrdb.
       val xrdbOfScr    : EXB.screen -> string list
    [May 2004]

WIDGET CHANGES
  - routers in composite widgets now have buffered output channels;
     this is an attempt at deadlock avoidance. (More to come on this...)
    [Nov 2004]

  - added the following to Widget Root, which widgets can use to obtain
     resource specifications from xrdb, merge resource styles, and parse
     command line arguments more easily.

    Insert all of the resource specifications of the first style into
    the second style, effectively giving priority to the specifications
    of the first style.
     val mergeStyles : style * style -> style

    Create a style from the stings stored by xrdb in the RESOURCE_MANAGER
    property of the root window.
     val styleFromXRDB : root -> style

    The following provide support for command line argument "parsing":
     datatype optName 
        = OPT_NAMED of string   (* custom options: retrieve by name *)
        | OPT_RESSPEC of string (* resource options: convert to a style *)
     type argName = string (* option spec string in argv *)
     datatype optKind
        = OPT_NOARG of string (* as XrmoptionNoArg. optname will assume this 
                                value if argName is specified in argv *)
        | OPT_ISARG     (* as XrmoptionIsArg:     value is option string itself *)
        | OPT_STICKYARG (* as XrmoptionStickyArg: value is chars immediately
                           following option *)
        | OPT_SEPARG    (* as XrmoptionSepArg:    value is next argument in argv *)
        | OPT_RESARG    (* as XrmoptionResArg:    resource and value in next 
                           argument in argv *)
        | OPT_SKIPARG   (* as XrmSkipArg:         ignore this option and next 
                           argument in argv *)
        | OPT_SKIPLINE  (* as XrmSkipLine:        ignore this option and the 
                           rest of argv *)
     datatype optVal
        = OPT_ATTRVAL of (string * AV.attr_type)
        | OPT_STRING of string
     (* option specification table: name for searching, name in argv, 
        kind of option, and type of option *)
     type optSpec = (optName * argName * optKind * AV.attr_type) list
     type optDb
     type attr_value
     val parseCommand : optSpec -> string list -> optDb * string list
     val findNamedOpt : optDb -> optName -> root -> attr_value list
     val findNamedOptStrings : optDb -> optName -> string list
     val styleFromOptDb : root * optDb -> style

    [May 2004]

eXene-1.0
------------------------

GLOBAL CHANGES
  - accounted for changed type of inputLine (now returns an option)
    [2003-09-12]

  - added a dummy implementation of UnixSock to kick when a native
     implementation is unavailable (on non-Unix systems);
    replaced reference to Posix.ProcEnv by reference to generic OS.Process;
    eXene now compiles under Win32
    [2003-09-09]

  - fixed code that broke because of Basis API changes (slices)
    [2003-09-03]

  - compiles again under 110.33+ (library name is $/eXene.cm)
    [2001-06-20]

  - changed uses of System.Unsafe.
    [07/11/97]

  - various minor changes to track basis clean-up in SML/NJ.
    [06/11/97]

  - various minor changes to conform with SML'97 type sharing rules.
    [05/22/97]

  - various minor changes to use Real.== instead of polymorphic equality
    (which doesn't work anymore).
    [12/10/96]

  - modified sources to compile against SML'96 and the latest version of CML.
    [08/01/96]

STYLES
  - fixed bug in parsing code (space between resource name and ":" was not
    accepted.
    [06/14/99]

  - fixed bug in parsing code.
    [04/07/97]

GRAPHICS UTILITIES
  - created the GetDpy structure to provide support for getting the
    display and authentication information for an application.  This
    code was taken from the RunEXene structure in the widget utilities.
    [01/27/98]

  - fixed alignment bug in X authorization code.
    [04/07/97]

LIBRARY CHANGES
  - Fixed bug in XTime.toReal; it did not handle large time values.
    [2001-10-24]

  - Added code to make the leycode to keysym translation bulletproof (some
    X servers seem to generate bogus keycodes in some situations).
    [09/14/99]

  - Fixed some bugs in the implementation of selections and modified the
    interface to support interaction with applications that use CurrentTime
    in their selection requests (this goes against the ICCC spec).
    [07/12/99]

  - Fixed bug in ICCC signature, where the wrong type name was being used
    for windows in some places.
    [05/19/99]

  - Fixed a bug introduced in SML/NJ 109.30, where the open connection
    request had bogus data in it.
    [08/11/97]

  - Fixed a bug in the encoding of PolyText8 requests.
    [04/08/97]

  - One can now use symbolic host names when connecting to servers.
    [08/01/96]

WIDGET CHANGES
  - New Scrollbar implementation from Allen Stoughton that fixes various
    problems.
    [2002-03-12]

  - Removed old-style imperative type variables from signatures in 2D structured
    graphics library.
    [07/15/98]

  - Added 2D structured graphics canvas widget (widgets/fancy/2d-graphics).
    [05/22/98]

  - Added RunEXene.parseDisplay.
    [04/07/97]

  - RunEXene.run and RunEXene.runWArgs now look for the DISPLAY shell variable
    instead of EXENE_DISPLAY.
    [08/01/96]


eXene-0.5
------------------------

GLOBAL CHANGES
  - modified sources to use the Char and String interfaces from the
    new standard basis.
    [11/15/94]

LIBRARY CHANGES
  - added partial fix to handle sequence numbers > 2^16; still need to synchronize
    with server when # of requests greatly exceeds replies.
    [02/01/95]

  - add clause to catch Fail exceptions in the wrapper code for XDebug.xspawn.
    [12/06/94]

  - added charWidth to the Font structure, and cleaned up the various
    width computing functions in lib/window/font-base.sml.
    [11/26/94]

  - added withdrawWin to eXeneWin for ICCC-compliant unmapping of top-level
    windows.
    [11/09/94]

  - added rgbOfColor to eXeneBase for extracting the RGB of a color so that
    the shading colors (for 3D) can be computed.
    [09/21/94]

  - fixed a bug in protocol/xdisplay.sml, where the connection file descriptor
    was not being closed when the server refuses the connection.
    [08/26/94]

  - added the authentication datatype to EXeneBase and added an authentication
    parameter to the openDisplay operation.
    [06/08/94]

  - added position and time information to MOUSE_Enter and MOUSE_Leave
    events.  We may want to make mouse events carry more uniform information.
    [06/03/94]

  - made a bunch of changes to better support properties.  Renamed the type
    XProtTypes.property to prop_val, and removed the name field.  Added
    a property server to monitor property changes.
    [03/29/94]

  - added maxReqLen to allow applications to find out the maximum
    request length supported by a display.
    [03/29/94]

  - renamed Drawing.tileBlt to Drawing.textureBlt, and added a new function,
    called tileBlt, which does a pixelBlt using the tile as a source.
    [03/18/94]

  - created a per display connection server for managing communications
    related to selections.  This also required a couple of minor changes
    to the protocol implementation.
    [03/11/94]

  - created a per display connection atom table, for caching interned atoms.
    The standard atom definitions moved from xatom.sml to std-atoms.sml.
    [10/26/93]

  - fixed bug in Geometry.clipPt.
    [07/12/93]

  - fixed bug in XDebug.xspawn that caused the trace-server's ID to be reported
    instead of the spawned thread.
    [04/12/93]

  - modified XDebug.xspawn to report thread exiting on the xspawn trace module,
    and to unwatch normally exiting threads.  Also, turn on the XDebug.errorTM
    trace module.
    [03/28/93]

  - added Font.substrWidth for computing the width of a substring.
    [03/27/93]

  - added general function to change window attributes (EXeneWin.changeAttrs)
    [03/26/93]

  - added EXeneWin.setBackground
    [03/25/93]

GRAPHICS UTILITIES
  - added XAuth structure to provide support for getting authentication
    data needed when opening a display.
    [06/08/94]

  - added BitmapIO functor that supports reading and writing depth-1 images
    in the X11 format.
    [02/18/93]

WIDGET CHANGES
  - added openFont to the Widget structure.
    [11/27/94]

  - created the EXeneRun utility structure for a higher-level way to invoke
    eXene applications.
    [07/16/94]

  - added an authentication parameter to the mkRoot operation.
    [06/08/94]

  - added setCursor and setBackground to Canvas structure to allow those window
    attributes of a canvas to be changed.
    [03/28/94]

  - fixed a race condition in the canvas widget.
    [04/12/93]

  - modified box_item datatype declaration in BoxLayout to allow use of
    newconreps.
    [03/28/93]

  - modified Background widget to use EXeneWin.setBackground.
    [03/26/93]

  - added colorOf function to Widget structure; shorthand for
    colorOfScr (screenOf root) colorspec (widget.sml).
    [02/19/93]

  - changed default scrollbar cursor color to gray; correctly handles
    monochrome displays (scrollbar.sml, scroll-view.sml).
    [02/19/93]


eXene-0.4 (released 02/17/93)
-----------------------------

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
