
MGUI Release history

************** Release 1.4.0

* First distributed release (only Windows)


************** Release 1.4.1

* Porting done to DJGPP 2.0 with GRX 2.0
* Porting started to Linux GRX 2.0/svgalib
* Added support to SVGA BGI 5.5 (up to 64K colors)
* Operative environment switch macros changed. The old values WINDOWS,
  BORLANDC are set but could not be supported in future releases:

  - DJGGP       ->      DJGPP_MGUI
  - WINDOWS     ->      WIN_MGUI, WINDOWS
  - BORLANDC    ->      BC_MGUI, BORLANDC
  - UNIX        ->      X11_MGUI

* Fixed a bug in reading some 24 planes bitmaps.
* Fixed a bug in opening the subpulldown of the first pulldown item.


*************** Release 1.4.2

* Window resize feature implemented (with Alt-Drag) in BGI/GRX.
* Fixed a bug in the pixmap data allocation function (X-Window only)


*************** Release 1.4.3

* Fixed another bug in reading some bitmaps (all platforms).


*************** Release 1.4.4

* Macro name changes (due to a mistake):
	WS_HATCHED_IN	-> WS_ETCHED_IN
	WS_HATCHED_OUT	-> WS_ETCHED_OUT
  Old names are also present for backwards compatibility
* Added function: MObjectGetSensitivity()


*************** Release 1.4.5

* Fixed a bug in the Text Cut & Paste feature (BGI & GRX only)
* Environment variable GRXFONT is now defaulted to MGUIDIR (GRX only)
* Added in 'mgui/sys' the static font files for GRX


**************** Release 1.5.0

* First registerable release
* Added push buttons for closing and maximizing/restoring windows (BGI/GRX)
* Added function MObjectGetFont()
* Added function:
	MPullDownSetItemAccel()
  It overrides the old:
	MPullDownSetItemAcc()
  which does not set the acceleration text. A macro is present in mgui.h for
  backwards compatibility.
* Fixed some bugs in function:
	MEditChangeText()
  Now correctly redraws the Object and resets the scrollbars (Multi Line Edit).
* File Selection Dialog no longer changes the program's current directory
  (DOS and Windows).
* Menu bar and title bar should no longer move down when resizing.
* Added macro MGUI_RELEASE in file 'mgui.h' (value 150 for 1.5.0).
* Fixed some bugs in the Cut, Copy and Paste features using
  <Ctrl+X>, <Ctrl+C> and <Ctrl+V> keystrokes.
* Added the system call 'signal(SIGINT, SIG_IGN);' in the GRX implementation to
  prevent program termination due to a <Ctrl+C> (DJGPP and Linux console).



**************** Release 1.5.1

* Changes in the mouse event report
  Macros for the 'button' member:
  - Button1	-> Left   Button
  - Button2	-> Middle Button (3-buttons mouse)
		-> Right  Button (2-buttons mouse) in X-Window
  - Button3	-> Right  Button
  BitMasks for mouse buttons and key modifiers in the 'state' member:
  - ShiftMask
  - ControlMask
  - AltMask
  - Button1Mask
  - Button2Mask
  - Button3Mask

* SCROLLBAR mouse action changes:
  - A page scrolling is achived by pressing the left mouse button outside the
    slider.
  - Dragging the slider with the left mouse button no longer centers the slider
    to the mouse cursor position.
  - By pressing the right or the middle mouse button, the slider is centered to
    the mouse cursor position.


**************** Release 1.5.2

* Fixed a bug in function MEditGetSubString()
* MFileSelection() no longer operates floppy disk seek in Win32 version
* Edit cursor should no longer overwrite the '_' character.
* Changes in Windows static fonts:
  - SMALL_FONT	from 'Courier New' height 15 to 'Courier New' height 16
  - LARGE_FONT	from 'Courier New' height 22 bold to 'Courier' height 20
* Added function:
	void MEditSetAutoIndent(OBJECT *edit, int on_off);
  It sets/resets the auto-indent option for the multi-line EDIT
* Modal windows are now realized, by default, centered on the window
  that loses the input focus. (All platforms)
* Modal windows are realized 'transient for' the window that loses
  the input focus, rather than the last created one. (X-Window only)
* Macro MGUI_RELEASE is moved in file 'mguidefs.h' and is now in hex (0x152).


**************** Release 1.5.3

* Default line spacing changes from 1 to 0 in the EDIT Object.
* Edit cursor blinking no longer causes mouse pointer to blink (Windows with
  no hardware cursor support)
* Fixed a bug in file printing within a Windows 16 bit application running
  under Win 95.
* Printing is now possible under the Borland Win32 version
* First Win 95 version (Visual C 4.0)


**************** Release 1.6.0

* Word selection via a double click on the EDIT Object now only includes
  digits, alpha and '_'.
* EDIT Object now accepts characters in the range 1-254 via the
  <Alt + 3-digits> input sequence. For example <Alt+0+2+7>
  (decimal 27) inserts the Escape character code in the EDIT.
* Second and third mouse button press acts as a shortcut for the Paste function
  in the EDIT Object
* Menu item acceleration text is now left-aligned
* Centering Modal windows no longer puts them outside the screen (when
  possible)
* Bug Fix in MObjectSetBackgroundRGB() and MObjectSetForegroundRGB()
* Bug Fix in the EDIT Object resize method
* Bug Fix in the cursor drawing method for the EDIT Object
* Bug Fix in MShellConfigure() method (DOS BGI and DJGPP only)
* Bug Fix in text drawing alignment (DOS GRX and DJGPP only)
* Bug Fix in Pulldown positioning (Win32 only)
* Added functions MEditSetTabSize() and MEditSetClipWindow()
* Long and case sensitive filename support in the file selection dialog box
  in the DJGPP version
* MCreatePixmapFromFile() returns an empty Pixmap Object rather than a NULL
  if it fails to load the specified file.
* Added function MPixmapSetImageFile()


**************** Release 1.6.1

* RS232 experimental support removed
* The space bar now activates the selected button
* Directory separator macro changes:
	SLASH	->	DIR_SEP
* mguidefs.h no longer includes windows.h when compiling under Windows.
  This dramatically boosts the compiling process for Win32 target.
  Compiling mguitest on a 133 MHz AMD 486 PC with Borland C 4.52 now requires:
  - 56,741 lines compiled in 16 sec
    in previous release:
  - 4,913,000 lines compiled in 213 sec


**************** Release 1.6.2

* Fixed a bug in the EDIT text drawing when text is changed within the validate
  callback
* Fixed a bug in the MENU item activation callback calling:
  the second argument (the calling item) is now correct even if the
  callback is called due to the accelerator key pressing.
* MSListGetElement() and MSListGetSelected() now return (LIST_ACT *) rather
  than (char *)
* Added function MSListAddElement()



**************** Release 1.6.3

* Mouse events catched with the EventNotify callback now correctly report
  x and y members as relative to the Object, when it's a SHELL.
* Added function MSListSetSelectionCallback() which sets a
  callback invoked when:
	- a mouse button press occurs in the list
	- the focused item changes due to a Arrow/Page/Home/End
	  key press.
	- the Ins key toggles the selection status of an item
	  in the MultiSelection List
	- deleting an item from the list the focused item
	  changes (position or content)
	- the focused item is changed via MSListChangeElement()
	  and MSListChangeItem().
   The structure reported as second argument by the callback is 
   type (LIST_SEL *), which includes all fields in LIST_ACT and adds the
   field 'pe'. This field points to the Event that causes the callback
   calling. When the callback is called due to item deletion or
   modification, the 'pe' field is NULL. Both KeyEvent and MouseEvent
   include the 'state' field which contains a bit mask of the modifier
   keys state: (AltMask, ShiftMask, ControlMask).
   For MouseEvent only, the 'state' field includes mouse button mask
   (Button1Mask, Button2Mask and Button3Mask). The 'pos' field is -1
   when the list becomes empty.
* Added function MGetKeyboardState() which returns a bitmask
  containing the possible OR-ed values: AltMask, ShiftMask, ControlMask.
* Fixed a bug occurring when children are added to an Unmapped parent.
* Fixed a bug occurring when children are deleted from an Unmapped parent.
* Unsensitive buttons and menu items now look like in Windows 95
* Push Buttons now accept a null shadow.


**************** Release 1.7.0

* Porting to Watcom DOS 4G started.
* Fixed a bug in MCharWidth() (DOS BGI only)
* Optimized the AutoSize/Resize/Position methods of the FORM Object
* Optimized the Default Object Color setting
* Added automatic menu titles and items mnemonics. For example:
	<Alt+F> opens the 'File' pulldown
	<o>	selects the 'Open' item


**************** Release 1.7.1

* Some functions and type name regarding pixamp are changed to eliminate
  confusion between the PIXMAP as an Object and the PIXMAP as an image:

   MPIXMAP			-> MIMAGE
   MInstallPixmap()		-> MInstallImage()
   MUninstallPixmap()		-> MUninstallImage()
   MDrawPixmap()		-> MDrawImage()
   MReadPixmapFile()		-> MReadBMPFile()
   MFreePixmap()		-> MFreeImage()
   MCreatePixmapPButton()	-> MCreateImagePButton()
   MPButtonSetPixmap()		-> MPButtonSetImage()
   MCreatePixmapRButton()	-> MCreateImageRButton()
   MRButtonSetPixmap()		-> MRButtonSetImage()
   MCreatePixmapTButton()	-> MCreateImageTButton()
   MTButtonSetPixmap()		-> MTButtonSetImage()

  Macros are however activated in mgui.h (under #ifdef OLD_MGUI) for
  backwards compatibility.

* Added support for 24 bit TIFF files in Linux (requires libtiff by Sam Leffler
  downloadable from sunsite)
* New functions:
   MIMAGE MAllocImage(int img_w, int img_h, int nplanes);
   	Allocates memory for an image 'img_w'*'img_h' with 'nplanes'
   	valid 'nplanes' values: 1, 4, 8, 24 (2, 16, 256, 16M colors).
   MIMAGE MReadTIFFFile(char *fname);
   	Reads a tiff image file as a 24 planes image.
   void MImageGetInfo(MIMAGE pm, int *pw, int *ph, int *pnplanes);
   	Returns image width, height and number of planes.
   void MImageGetPixelRGB(MIMAGE pm, int x, int y, int *pr, int *pg, int *pb);
   	Returns R-G-B values for the pixel at position x,y in the image.
   void MImageSetPixelRGB(MIMAGE pm, int x, int y, int r, int g, int b);
   	Sets R-G-B values for the pixel at position x,y in the image.
   	Inefficient for 1/4/8 planes images.


**************** Release 1.7.2

* Fixed a bug in computing the bytes/row in 2 and 16 color Bitmaps.
* TIFF support now includes: black & white, 256 gray scale, colormapped
  16 and 256 colors (with 16 bit palette)
* TIFF support is extended to DJGPP and Win32.
* New functions:
   void MImageGetCMapEntry(MIMAGE pmi, int i, int *pr, int *pg, int *pb);
   	Returns the R-G-B values for the colormap entry 'i'.
   	For 1/4/8 planes images only.
   void MImageSetCMapEntry(MIMAGE pmi, int i, int r, int g, int b);
   	Sets the R-G-B values for the colormap entry 'i'.
   	For 1/4/8 planes images only.
   int  MImageGetPixelIndex(MIMAGE pmi, int x, int y);
   	Returns the index in the colormap corresponding to the image pixel
   	at position x,y.
   	For 1/4/8 planes images only.
   void MImageSetPixelIndex(MIMAGE pmi, int x, int y, int i);
   	Sets the image pixel at position x,y the index 'i' in the colormap.
   	For 1/4/8 planes images only.


**************** Release 1.7.3

* Support for GIF images added for all platforms (no additional lib required).
* Support for JPEG images added for Linux, DJGPP and Win32.
  The JPEG support requires the free library libjpeg 6a by IJG
  (downloadable from sunsite)
* New functions:
   MIMAGE MReadJPEGFile(char *fname);
   MIMAGE MReadGIFFile(char *fname);
* File Selection Dialog now supports multiple file filtering specification
  (example: "*.bmp,*.gif;*.tif *.jpg"). Valid separators are characters: ',' ';'
  and ' '
* If the filter argument in the call to MFileSelection() is a NULL pointer
  or a null string, then the last user selected filter is used.
* The mnemonic character in a menu item or a menu title can now be forced
  by placing '&' before the desired character in the item or title text.
  For example, "E&xit" will activate the 'x' character as mnemonic.
* Character insertion in the EDIT Object via <Alt + 3-digits> input sequence
  now works also under Linux.
* Changes made to mgui.h for C++ compatibility
* Fixed a bug in getting extended ASCII characters (Unix only).
* Numeric Keypad characters now are correctly handled (Unix only).


**************** Release 1.8.0

* Added support for mouse cursor assigning to Objects
    MTCursor MCreateCursor(MIMAGE bits, int xs, int ys);
	bits is the image (colormapped) describing the cursor.
	black will be used as color for index 0 and white
	for index 1. All pixels in the image with color index
	other than 0 and 1 will not be part of the cursor.
	mask is a 1 plane image used to mask the image bits.
	BEWARE: currently does'nt work in Windows.
    void MObjectSetCursor(MOBJECT obj, MTCursor cursor);
* Added support for popup or label help when the mouse enters the Object
  window
    void MObjectSetPopupHelp(MOBJECT obj, char *str, int delay, int duration);
          The text in the string 'str' will appear in a popup window
        when the mouse pointer enters the Object 'obj'.
          'delay' specifies the time in millisecond to wait before opening
        the popup window when the cursor stops into the Object. Valid range
        is 0 - 32000. Default (delay < 0) is 500.
          'duration' specifies the maximun time the popup stays open (in msec).
        Valid range is 1000 - 32000. Default (delay < 1000) is 5000.
    void MObjectSetLabelHelp(MOBJECT obj, char *str, MOBJECT label);
        The text in the string 'str' will appear in the Object 'label'
        when the mouse pointer enters the Object 'obj'.
    void MObjectChangePopupHelpText(MOBJECT obj, char *str);
    void MObjectChangeLabelHelpText(MOBJECT obj, char *str);
    MIMAGE MPixmapGetImage(MOBJECT pixmap)
* Added support for popup menu handling.
  New functions:
    MOBJECT MCreatePopupPullDown(MTFont font);
    	Creates a pulldown menu not linked to a menu bar. Items or subpulldowns
    	can be added with MPullDownAddItem() and MCreateSubPullDown().
    	Item accelerators are not permitted.
    void MPopupPullDown(MOBJECT pm, int x, int y);
    	Pops up a pulldown menu created with MCreatePopupPullDown() or
    	a pulldown already linked to a menu bar at screen position (x,y).

* The E_MOTION, E_WINDOW_ENTER, E_WINDOW_LEAVE events are now despatched
  even if the destination Object hasn't grabbed the mouse.
  E_WINDOW_ENTER and E_WINDOW_EXIT are not despatched to the SHELL
  Object in Windows.
* Mouse position report is now in the range 0 - (ObjectWidth-1)
  previuosly: 1 - ObjectWidth
* Now it's possible to set multiple user callbacks to get notification
  of Object events.
  The functions:
     MObjectSetEventNotifyCallback()
     MObjectSetDestroyCallback()
  are replaced by
     MObjectAddEventNotifyCallback()
     MObjectAddDestroyCallback()
  Macros are however activated in mgui.h (under #ifdef OLD_MGUI) for
  backwards compatibility.
  New functions to remove the above callbacks:
  void MObjectRemoveEventNotifyCallback(MOBJECT obj, OBJ_EVENT_CB cb, void *ad);
  void MObjectRemoveDestroyCallback(MOBJECT obj, MGUI_CB cb, void *ad);
* Fixed a bug in scrolling areas under Windows (when the scrolling window is
  partially obscured by another window)
* Fixed a bug in navigating with the mouse in menu items when pulldown and
  subpulldown are open in locations other than the natural ones
* Fixed a bug in Timeout setting. Values greater than 36 minutes now work.
* Fixed a bug in restoring the window area obscured by a popup window.
  Present only in console versions (BGI, DJGPP, SVGALIB)


**************** Release 1.8.1

* Corrected event masks for codes higher than 'E_PARENT_UNMAP'
* Fixed a bug occurring when a new window is open within a timeout callback
  if the mouse is grabbed (for example by an open menu).
* Fixed a bug occurring when a new window is open within a timeout callback
  if another window is being moved (BGI, DJGPP and Linux SVGAlib versions).
* A new event (E_GRAB_LOSE) is added to notify the Object owning the mouse
  (and keyboard) grab, that it is about to lose it, due to a new window
  opening.
  This event is notified to the InputCallback for a DRAWAREA Object.
* The '\r' character is now filtered by the EDIT Object when followed by
  '\n'. This makes it possible to correctly handle DOS text in EDIT
  Objects under Unix.


**************** Release 1.8.2

* MObjectShell(obj) now returns NULL if the ancestor of obj is not a SHELL.
  This happens if the object (or a parent of it in the hierarchy) has been
  deleted from the hierarchy (with MDeleteObject()) or it has been created
  with a NULL parent.

* MObjectResize() now only forces needed resize.


**************** Release 1.8.3

* New macros for static fonts:
	- FIXED_SMALL	(replaces SMALL_FONT)
	- FIXED_MEDIUM	(replaces MEDIUM_FONT)
	- FIXED_LARGE	(replaces LARGE_FONT)
	- TIMES_SMALL	(replaces TIMES_N_FONT)
	- TIMES_MEDIUM	(replaces TIMES_L_FONT)
	- TIMES_LARGE	(new)
	- HELV_SMALL	(replaces HELV_N_FONT)
	- HELV_MEDIUM	(replaces HELV_L_FONT)
	- HELV_LARGE	(new)

* Automatic font size selection with regard to the screen resolution.


**************** Release 1.9.0

* Object and system resources handling (Windows and X11 only)
* New functions:

  - char *MGetStringOption(char *name, char *opt_name);
  - char *MGetTextOption(char *name);
  - int MGetIntOption(char *name, char *opt_name, int *ret);
  - int MGetFontOption(char *name, MTFont *ret);
  - int MGetBGColorOption(char *name, int *pr, int *pg, int *pb);
  - int MGetFGColorOption(char *name, int *pr, int *pg, int *pb);
  - int MGetShadowOption(char *name, int *shadow, int *i_t, int *o_t);

  - void MSetTextOption(char *name, char *text);
  - void MSetIntOption(char *name, char *rname, int val);
  - void MSetFGColorOption(char *name, int r, int g, int b);
  - void MSetBGColorOption(char *name, int r, int g, int b);
  - void MSetShadowOption(char *name, int shadow, int in_t, int out_t);
  - void MSetFontOption(char *name, MTFont font);
  - void MSaveOptions(void);
  - void MObjectEnableOptions(MOBJECT obj, char *name, CARD32 mask);
  - void MObjectSaveOptions(MOBJECT obj);


**************** Release 1.9.1

* Run time Object options setting with store in the application resource
  file
* New functions:

  - void MEnableCustomizing(void);
  - void MObjectGetShadow(MOBJECT obj, int *shadow, int *i_t, int *o_t);


**************** Release 1.9.2

* Object and system resources handling now works for DOS too.
* MFileSelection() now uses the dir parameter to set the starting directory
  (with optional drive for DOS & Windows).
* <Control+Tab> & <Shift+Tab> now work in GRX version of MGUI.


**************** Release 1.9.3

* Fixed a bug in the SCROLLBAR drawing when the slider size grows.
* Fixed a bug in functions:
	- MImageGetCMapEntry()
	- MImageSetPixelIndex()
	- MImageSetPixelRGB()
	- MImageGetPixelRGB()
* New function (useful for password entry):
	MOBJECT MCreateHiddenEdit(MOBJECT, char *, int, MTFont, char);
* arcs in MDrawArc() and MDrawFilledArc() are now expressed in tenth of
  degrees (range 0-3600).
* New function for deactivating the activated radio button:
	void MRButtonDeactivate(OBJECT *o)


**************** Release 1.9.4

* Fixed a bug in the MFileSelection() multiple filter. Now files are
  inserted in the list only once.
* Fixed a bug occurring when drawing in xor mode (GRX only)
* Desktop background and active window title font/color can now be
  specified in the resource files (DOS versions only)
  
  
**************** Release 1.9.5

* Porting to Watcom Windows, Win32 and DOS/4GW done.
* Fixed a bug occurring when the OPTIONEDIT popup list is closed via
  the ESC key press.
* The Return and Enter keys now generates same effects in all objects.
* Iconifying a window under Windows no longer resizes it to null.
  This is related to a bug in MGUI Designer for Windows, fixed in release
  2.1.1, occurring when a project session with iconified shell windows
  was saved.
* MEditGetSelection(MOBJECT ed, int *start, int *end) now correctly
  returns *start < *end.
* Fixed a bug in retrieving resources (DOS only).
* Fixed a bug in MFormAddKeyCallback() when applied to a SHELL (DOS only).


**************** Release 1.9.6

* Automatic Push buttons mnemonic support.
  By setting the '&' character in the button text, the next character is
  automatically used as an accelerator (using <Ctrl+char>).
  For example, if you set the text "&Quit" as the button text, then
  the string "Quit" is displayed and <Ctrl+Q> is set as accelerator.
  Otherwise, if you set the accelerator key via MPButtonSetAccelerator()
  using <Alt+letter> or <Ctrl+letter> (A_? or C_?) or the letter itself
  (case unsensitive), then the proper character in the button text (if any)
  will be displayed underlined.


**************** Release 1.9.7

* Added support for CGA/EGA/VGA fonts under DOS BGI and 4GW.
  new font file names: pc8x8.mfn, pc8x14.mfn, pc8x16.mfn
* Support for Linux GRX22/svgalib added.
* The LABEL text is now correctly centered even if the label shadow is
  increased.
* Drawing in Xor mode now is correctly handled in Unix X-Window when the
  display works in high or true color mode.
* The OptionEdit list now changes its color according to that set in
  the main edit object (by using MObjectSetColor().
* The list head font now changes when the list font is changed.
* The behaviour of EDIT, LIST and OPTION EDIT objects is slightly changed
  to better conform to other standard GUIs.
* New function:
  void MSListSetPickCallback(MOBJECT obj, LIST_ACT_CB cb, void *value);
  The callback 'cb' is called by the object when a single mouse button
  press/release event occurs.
  This function sets a new callback, so it's possible to set both the
  pick (single mouse click) and the activation (double mouse click or
  Enter key) callbacks.
* The text of Radio and Toggle buttons is now correctly displayed when
  the object is unsensitive and activated.
* The cursor position in the HiddenEdit is no longer locked at x=0,
  unless the hidden char is the null character.
* Fixed a bug in loading large BMP files under Borland BGI DPMI16


**************** Release 2.0.0

* New function:
	void MShellRaise(MOBJECT shell);
	Puts a realized shell on top, deiconifying it if necessary, and
	tansfers the input focus to it.

* MShellRealize() now calls MShellRaise() if the SHELL has been realized
  previously.

* New flags for SHELL creation
	SF_NO_CLOSE             No close button in the title bar
	SF_NO_MAXIMIZE          No maximize button in the title bar
	SF_NO_MINIMIZE          No minimize button in the title bar
	SF_NO_RESIZE            Resize disabled
* Added resource support handling for MENU text (titles and items).
* New scrollbar functions:
	void MScrollBarSetValues(MOBJECT p, long max, long n, long pos);
* Fixed a bug in the MultiLine EDIT under Unix occurring when dealing
  with DOS style text files ('\r' + '\n' as line separator).
* New EDIT functions (work on both single and multi-line):
    void MEditHide(MOBJECT edit, char shown_char);
    void MEditUnhide(MOBJECT edit);
* Added mguisys and ..\mguisys in the searching path for MGUIDIR. They
  are checked for immediately after the MGUIDIR environment variable.
* The return path of MGetCurrentDirectory() now includes the ending
  directory separator in Win32 too.
* Slight changes in the MFileSelection() utility function:
  - the filename is now keeped when changing drive and/or directory
  - a single mouse click now stores the picked name in the filename field
* MGetSelectedObject() now works with the SHELL Object too.
* New functions for getting the object's position relative to parent.
  Shell's position is returned relative to the screen display.
	int MObjectX(MOBJECT obj);
	int MObjectY(MOBJECT obj);
* Fixed a bug occurring when trying to scroll images outside the screen
  (all DOS and Linux/GRX versions).
* New look provided for radio and toggle buttons.
* Revision of the menu API:
  - Support added for displaying a separation line between menu items
  - Toggle and Radio items are introduced
  - Item checking is now automatic (including Radio behaviour)
  - A new prototype is introduced for the item callback to notify
    the item's checking status.
  - The old menu API is fully supported if the OLD_MGUI macro is defined.
  - Naming convention changes:

  PULLDOWN_ITEM	->	MENU_ITEM
  OT_MENU	->	OT_MENUBAR
  OT_PULLDOWN	->	OT_MENU

  MCreatePullDown(menubar, text) -> MCreateMenu(menubar, text)
  MCreateSubPullDown(pd, item)   -> MCreateSubMenu(item)
  MCreatePopupPullDown(font)     -> MCreatePopupMenu(font)
  MPullDownAddItem(pm, t, c, d)  -> MMenuAddItemObsolete(pm, t, c, d)
  MPopupPullDown(pm, x, y)       -> MPopupMenu(pm, x, y)
  MPullDownSetTitleText(pd, text)-> MMenuSetTitleText(pd, text)
  MPullDownSetItemText(pd, item, text) -> MMenuItemSetText(item, text)
  MPullDownSetItemAccel(pd, it, acc, at)->MMenuItemSetAccel(it, acc, at)
  MPullDownSetItemSensitive(pd, item) -> MMenuItemSetSensitive(item)
  MPullDownSetItemUnsensitive(pd, it)-> MMenuItemSetUnsensitive(it)
  MPullDownSetItemSelectCB(p, cb, ad)-> MMenuSetItemSelectCB(p, cb, ad)
  MMenuSetAcc(menu, acc)	     -> MMenuBarSetAcc(menu, acc)
  MPullDownSetItemCallback(pdm, id, cb, ad) -> MMenuItemSetCallback(id, cb, ad)
  MPullDownGetItemText(pd, item) -> MMenuItemGetText(item)
  MPullDownGetTitleText(obj) -> MMenuGetTitleText(obj)
  MSetItemCheckStatus(pd, it, status) -> MMenuItemSetCheckStatus(it, status)
  MGetItemCheckStatus(pd, item) -> MMenuItemGetCheckStatus(item)
  MToggleItemCheckStatus(pd, item) -> MMenuItemToggleCheckStatus(item)
  MDestroyPullDown(pd) -> MDestroyMenu(pd)

  New functions:

  MOBJECT MMenuItemGetMenu(MENU_ITEM item);
  MENU_ITEM MMenuAddItemObsolete(MOBJECT pd, char *it, MGUI_CB cb, void *ad);
  MENU_ITEM MMenuAddRadioItem(MOBJECT pd, char *it, MENU_ITEM_CB cb, void *ad);
  MENU_ITEM MMenuAddToggleItem(MOBJECT pd, char *it, MENU_ITEM_CB cb, void *ad);
  MENU_ITEM MMenuAddSeparator(MOBJECT pd);


**************** Release 2.0.1

* Fixed a bug in Sub-menu positioning.
* Fixed a bug in function MNextEvent() under Windows.
* Added missing function MProcessEvent() under Unix.
* Added function prototype in mgui.h:
	void MShellConfigure(MOBJECT obj, int x, int y, int w, int h);


**************** Release 2.0.2

* Significant bug fixes in MGUI Designer (now release 2.3.1)
* New Functions:
	int MEditListAddItemFromEdits(MOBJECT p, void *u_data);
		Adds an item in the EditList using the values in its
		EditField objects.
	void MEditListGetEditText(MOBJECT p, int n, char *buff);
		Gets the text currently stored in the n-th EditField and
		stores it in the buffer pointed to by 'buff'
	void MEditListSetEditText(MOBJECT p, int n, char *buff);
		Sets the text in the buffer 'buff' in the n-th EditField 
* The 'const' keyword has been added in many 'char *' argument types for
  functions' prototype.
* Fixed a bug in functions MFormGetFirstChild() and MFormGetNextChild().
  Now composite objects are correctly handled.
* Added methods:
	CmObject *getFirstObject(void);
	CmObject *getNextObject(void);
	int	  getNChildren(void);
  in the CmContainer class of the C++ MGUI API
* Added function MSBLGetHead() which retrieves the head text of a SList
  The method getHead() is added to the CmAbsList class.
* Fixed a bug in changing an item's text: now a redrawing occurs.


**************** Release 2.1.0

* Added new object TableForm
* MObjectSetCursor() now works with SHELL objects too.
* Fixed a bug in MSetDefaultBackgroundRGB(). Now the dark shadow is
  60% the brightness of the base color.
* Added functions:
	void MObjectSetWidth(MOBJECT obj, int w);
	void MObjectSetHeight(MOBJECT obj, int h);
	void MTableFormSetRowHeight(MOBJECT form, int row, int h);
	void MTableFormSetColWidth(MOBJECT form, int col, int w);
* Added graphics print support (Windows ONLY) with the following API:
	DOC_ID MOpenPrintDoc(char *doc_name, int open_dialog, int orientation, MPAGE_OPTIONS *pages);
	void MClosePrintDoc(DOC_ID id);
	void MPrintDocNextPage(DOC_ID id);
	void MPrintObject(MOBJECT obj, DOC_ID id, MPRINT_OPTIONS *po);
	void MPrintImage(MIMAGE mpm, int full);
	int MPrintSetup(int orientation, int *xres, int *yres, int *pwidth, int *pheight, int *nplanes);


**************** Release 2.1.1

* Fixed a bug in the TableForm's destroy function.
* Added new function:
  - MObjectAlign(MOBJECT obj, int h_align, int v_align);
	It sets the preferred alignment for non resizable objects when the
	container's size grows. By default the container centers the object in
	a virtual resizeable box.
	If the container is a TableForm then the object is aligned inside
	its cell's boundaries.
	Valid values for h_align (horizontal alignment) are:
	- LEFT_ALIGN
	- RIGHT_ALIGN
	- CENTER_ALIGN
	Valid values for v_align (vertical alignment) are:
	- CENTER_ALIGN
	- TOP_ALIGN
	- BOTTOM_ALIGN
* Fixed a bug in handling popup menus under Windows
* Improved MODAL dialog windows handling under Windows
* Fixed a bug in handling russian bios fonts under BGI.


**************** Release 2.1.2

* Activating a menu item with the accelerator key now closes the menu
  window if was open.
* Fixed a bug in FileSelection dialog due to compatibility problem among
  different glibc versions (LINUX ONLY).
* Menu windows opening no longer add blank buttons in the Windows 95
  taskbar (only Visual C++, RSXNTDJ and LCC-Win32).


**************** Release 2.1.3

* Fixed a memory leak occurring when a SHELL object is destroyed. This
  problem caused system windows (under Windows and X11) to stay allocated!

* Fixed a bug (C++ only) in attaching objects to brother objects.

* Fixed a bug in attaching objects to composite objects (eg. a label
  to an option edit).


**************** Release 2.2.0

* New behaviour in the EDIT's focus leaving:
  The up and down arrows no longer cause the EDIT to loose the input focus.
  The TAB (and shift+TAB) key passes the focus to next (previuos) brother
  and no longer to next (prevoius) cousin.

* The unsensitive state is now displayed  for LABEL (as for buttons).

* The SCROLLBAR  object, if used out of ScrolledForm and Lists, now
  handles key events (arrow keys, home, end) to change its value.



**************** Release 2.2.1

* Added a new composite EditField object: SpinEdit. It consists of an
  ordinary EditField object with two additional spin buttons. A callback
  is supplied to the object at creation time to handle user's request
  to increase/decrease the edit value.

	MOBJECT MCreateSpinEdit(MOBJECT parent,
				const char *text,
				short len,
				short clip_len,
				short font,
				OBJ_VALUE_CB cb, void *cd);


* 30 Mar 1999
  Fixed a bug in the PushButton's callback calling method due to the
  Return/Spacebar or Accelerator key press.
  (A second call was possible after object destruction made in the first
  call).

* 1 Apr 1999
  Fixed a bug in the TableForm's child resize method.

* 6 Apr 1999
  Fixed a bug in the MultiLineEdit object (appeared after the addition of
  the SpinEdit object).


**************** Release 2.3.0

* 4 June 1999
  Table Form has been improved with scrolling feature.
  Also, a number of rows and/or columns can be scroll locked.
  New function:
    MOBJECT MCreateTableFormExt(MOBJECT parent, int n_cols,
    	int clip_w, int clip_h, int head_cols, int head_rows);

* 1 Jul 1999
  Fixed a bug in printing images under Windows using MPrintObject()


**************** Release 2.3.1

* A new container object is now available: TabbedForm
  This container acts as a PagedForm with a look and feel similar
  to the Windows' Tab object.
  Tab text labels can be set for each page by calling MObjectSetText() for
  the TabbedForm object, after selecting the desired page via
  MPagedFormSetActivePage().
  New functions:
   MOBJECT MCreateTabbedForm(MOBJECT parent, int npage, MTFont f);
   MOBJECT MCreateTabbedRowForm(MOBJECT parent, int npage, MTFont f);
   MOBJECT MCreateTabbedColForm(MOBJECT parent, int npage, MTFont f);

* Focus switching policy has been revised to better conform to standard
  GUI environments. A new resource is available for getting the old
  behavior. Add the following in you mgui or application resource file
  if you want to use the old policy:

   [Focus]
   UseOldSwitchPolicy = 1


**************** Release 2.3.2

* 29 Sep 1999 
  Added support for RLE compression format in MReadBMPFile().
  In 16 bit compilers these feature works only with small bitmaps (< 64KB).


**************** Release 2.3.4

* 06 Nov 1999
  Added support to handle masked images.
  New functions:
  
    MIMAGE MImageClone(MIMAGE img);
    MIMAGE MCreateImageMaskByCMapIndex(MIMAGE img, int index);
    MIMAGE MCreateImageMaskByRGB(MIMAGE img, int r, int g, int b);

    void   MImageMerge(MIMAGE dst, MIMAGE src, MIMAGE mask, int xo, int yo);
    void   MImageSetMask(MIMAGE dst, MIMAGE mask);

* 10 Nov 1999
  MObjectSetResize() to disable enlarging now works on FORM objects too.
  


**************** Release 2.6.0

* Scrollbar look change: smaller shadow and focus highlighting box

* Push Buttons now capable of displaying both image and text.

* By pressing <Ctrl+Shift+F10> on an EDIT object a dialog window is open
  allowing the user select any character available in the character set.

* Macro INT and FLOAT defined in mguidef.h are renamed respectively
  S_INT and A_FLOAT to avoid conflict with system typedefs or defines.


**************** Release 2.6.1

* 10 Feb 2000: Japanese support started

* The AltGr key now works properly under Windows

* Now making a SpinEdit object unsensitive also disables spin buttons
  and arrow keys input.



**************** Release 2.6.2

* New functions for PagedForm objects to disable/enable handling
  Page keys (PageUp, PageDown, Home, End).
	void	MPagedFormDisablePageKeys(OBJECT *form);
	void	MPagedFormEnablePageKeys(OBJECT *form);


**************** Release 2.6.3


* 09 Mar 2000
  Fixed a bug in the CmStatusBar object's setWidth() method inherithed
  from CmObject class.
  MStatusBarSetWidth() is obsoleted by MObjectSetWidth() which now
  works correctly on StatusBar object too. For backward compatibility
  purpose, MStatusBarSetWidth is still supported as a #define redirecting
  the call to MObjectSetWidth().

* 09 Mar 2000
  The limit to 25,600 lines allowed in the ScrolledFile object has been
  removed. Very large files can now be viewed correctly.


**************** Release 2.7.0

* MBSC support completed for Japanese Shift-JIS.
  Input mode is controlled by the following keystrokes (on EDIT objects):
  - Ctrl+F1	Roman half width (default)
  - Ctrl+F2	Roman full width
  - Ctrl+F3	Katakana half width
  - Ctrl+F4	Katakana full width
  - Ctrl+F5	Hiragana (full width)

* Fixed a bug in the OptionEdit object occurring when items inserted
  in the list are clipped due to a different clip lenght between the
  EditField and the items in the list.
  Text picked from the item list was one byte longer than the text
  actually put in the EditField. This caused the wrong condition
  that an item picked from the list could be NOT FOUND in the list!


**************** Release 2.7.1

* Improved the character browser dialog (Ctrl+Shift+F10 on edit objects):
	- Esc now closes the dialog
	- Arrow keys now allow character selection
	- The Return key sends the selected character to the edit object
	- Keyboard input is redirected to the edit object

* Improved Roman to Kana conversions in Japanese input modes.
  A unique conversion file rom2kana.tbl is located in the MGUI sys
  directory.


**************** Release 2.7.2

* The MImageMerge function now works and has new prototype:
  void	MImageMerge(MIMAGE dst, MIMAGE src, int xo, int yo, int transparent);
	Image 'src' is copied over image 'dst' starting at offset 'xo','yo'.
	Pixels in 'src' having a color index equal to 'transparent' are
	not copied.
	This function only works with colormapped images having the same
	depth (2, 16 or 256 colors).

* Fixed a bug in the C++ method CmImage::allocImage() affecting methods:
	void CmImage::clone(void);
	CmImage::CmImage(int imgw, int imgh, int np);


**************** Release 2.8.0

* New object FormattedText

	MOBJECT MCreateFormattedText(MOBJECT par, const char *text,
		int clip_w, MTFont f);
	MOBJECT MCreateScrolledFormattedText(MOBJECT par, const char *text,
				int clip_w, int clip_h, MTFont f);


**************** Release 2.8.1

* Fixed a bug in mouse button handling for PushButton. A program crash
  was possible when pressing two mouse buttons before releasing.

* Fixed a bug in function MCallAllTimeoutCallbacks(). An infinite
  program loop was caused when a new Timeout was set within a called
  Timeout callback.


**************** Release 2.8.2

* Fixed a bug in drawing EDIT's focus highlight when the focus is
  put back to an EDIT object having some selected text.

* Fixed a bug occurring when a window is destroyed via a push button
  callback activated via a key event while the left mouse button is pressed
  over the button.


**************** Release 3.0.0

* New Container Object: PosForm
  This new container does NOT automatically arrange the position and
  size of its children. You have to attach each child object using the
  new function: 
  	void MObjectSetPosition(MOBJECT obj, int x, int y);
  or:
	void MObjectSetX(MOBJECT obj, int x);
	void MObjectSetY(MOBJECT obj, int y);

  New PosForm creation functions available:
  
   MOBJECT MCreatePosForm(MOBJECT parent);
   MOBJECT MCreatePagedPosForm(MOBJECT parent, int npage);
   MOBJECT MCreateTabbedPosForm(MOBJECT parent, int npage, MTFont f);
   MOBJECT MCreateScrolledPosForm(MOBJECT parent, int clip_w, int clip_h);
   MOBJECT MCreateClippedPosForm(MOBJECT parent, int clip_w, int clip_h);
   
  The following functions:

   MOBJECT MCreateScrolledForm(MOBJECT parent, int clip_w, int clip_h);
   MOBJECT MCreateClippedForm(MOBJECT parent, int clip_w, int clip_h);

  are obsoleted by the following:
 
   MOBJECT MCreateScrolledRowForm(MOBJECT parent, int clip_w, int clip_h);
   MOBJECT MCreateScrolledColForm(MOBJECT parent, int clip_w, int clip_h);
   MOBJECT MCreateClippedRowForm(MOBJECT parent, int clip_w, int clip_h);
   MOBJECT MCreateClippedColForm(MOBJECT parent, int clip_w, int clip_h);
 
  Obsolete function prototypes are available via the macro switch "OLD_MGUI"

* Support added for transparent background in MGUI objects.
  By default, LABEL and RADIO&TOGGLE buttons are now transparent.
  The transparency level is an unsigned 8 bit value between 0 and 255.
  A value of 0 means no transparency, while a value of 255 means completely
  transparent.
  WARNING:
    Transparency levels other than 0 and 255 are currently not supported.
    They are reserved for future use as 'alpha channel' transparency.
  New functions:
	void MObjectSetTransparency(MOBJECT obj, CARD8 level);
	CARD8 MObjectGetTransparency(MOBJECT obj);

  Using MObjectSetColor() or MObjectSetBackgroundRGB() on a transparent
  object will make solid (transparency level = 0).

* Support added for background image on MGUI objects.
  Background images are also supported in the Desktop of console mode
  MGUI programs (DOS and Linux svgalib/GRX).
  New funcrions:
    void MObjectSetBackgroundImage(MOBJECT obj, MIMAGE img, int mode);
    void MObjectSetBackgroundImageFile(MOBJECT obj, const char *fname,
    					int mode);
    MIMAGE MObjectGetBackgroundImage(MOBJECT obj);
  The value of 'mode' specifies the way the image is drawn. It can be one
  of the following values:
  
	BI_TILED
	BI_CENTERED
	BI_SIZE_FORCING

  Last setting will cause the object to acquire the image size.

* A new utility function allows creating a mask for an image by using
  the color of the pixel at ('x','y') as the mask color.
  This function works well on both colormapped and TrueColor images.

	MIMAGE MCreateImageMaskByPixel(MIMAGE img, int x, int y);

* Support for handling object geometry has been improved:
  Old functions:

	int  MObjectX(MOBJECT obj);
	int  MObjectY(MOBJECT obj);
	int  MObjectWidth(MOBJECT obj);
	int  MObjectHeight(MOBJECT obj);

  are obsoleted by:
 
	int  MObjectGetX(MOBJECT obj);
	int  MObjectGetY(MOBJECT obj);
	int  MObjectGetWidth(MOBJECT obj);
	int  MObjectGetHeight(MOBJECT obj);

  Obsolete function prototypes are available via the macro switch "OLD_MGUI"

  New functions:

	void MObjectSetSize(MOBJECT obj, int w, int h);
	int  MObjectGetCompositeWidth(MOBJECT obj);
	int  MObjectGetCompositeHeight(MOBJECT obj);
	void MObjectSetCompositeSize(MOBJECT obj, int w, int h);
	void MObjectSetCompositeWidth(MOBJECT obj, int w);
	void MObjectSetCompositeHeight(MOBJECT obj, int h);

	void MSBLHeadSetBackgroundImage(MOBJECT obj, MIMAGE img, int mode);

* Button improvements:
	- Additional image support for 'mouse over' state (Push/Toggle/Radio).
	- Image & Text for Push/Toggle/Radio buttons with text vs image aligning
	  option.
	- Key acceleration support added to Radio & Toggle buttons.

   Obsoleted functions:

	MIMAGE  MPButtonChangeNormalImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MPButtonChangeArmedImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MPButtonChangeUnsensitiveImage(MOBJECT button, MIMAGE new_img);

   New generic Button functions:

	void MButtonSetTextVsImageAlignment(MOBJECT button, CARD8 align);
	void MButtonSetFGColorOnMouseOver(MOBJECT button, MTColor cc);

	MIMAGE  MDrawnButtonChangeNormalImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MDrawnButtonChangeArmedImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MDrawnButtonChangeUnsensitiveImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MDrawnButtonChangeNormalOnImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MDrawnButtonChangeArmedOnImage(MOBJECT button, MIMAGE new_img);
	MIMAGE  MDrawnButtonChangeUnsensitiveOnImage(MOBJECT button, MIMAGE new_img);
	void MButtonChangeImageFiles(MOBJECT obj, char *npf, char *apf, char *upf,
				char *npfo, char *apfo, char *upfo);

   New Button creation functions.
   To get the effective function name substitute '???' with:
   PButton, TButton and RButton

  
	MOBJECT MCreateDrawn???Ext(
				MOBJECT parent,
				MIMAGE pn, MIMAGE pa, MIMAGE pu,
				MIMAGE pn_on, MIMAGE pa_on, MIMAGE pu_on);
	MOBJECT MCreateImage???(
				MOBJECT parent,
				const char *npf, const char *apf, const char *upf);
	MOBJECT MCreateImage???Ext(
				MOBJECT parent,
				const char *npf, const char *apf, const char *upf,
				const char *non, const char *aon, const char *uon);
	MOBJECT MCreateDrawnText???(
				MOBJECT parent, const char *text, MTFont font,
				MIMAGE np, MIMAGE ap, MIMAGE up);
	MOBJECT MCreateDrawnText???Ext(
				MOBJECT parent, const char *text, MTFont font,
				MIMAGE pn, MIMAGE pa, MIMAGE pu,
				MIMAGE pn_on, MIMAGE pa_on, MIMAGE pu_on);
	MOBJECT MCreateImageText???(
				MOBJECT parent, const char *text, MTFont font,
				const char *npf, const char *apf, const char *upf);
	MOBJECT MCreateImageText???Ext(MOBJECT parent, const char *text, MTFont font,
				const char *npf, const char *apf, const char *upf,
				const char *non, const char *aon, const char *uon);

**************** Release 3.0.1

* A new macro named DEF_POSITION allows to specify a default value in X or Y coordinate
  when realizing a SHELL using MShellRealizeXY() and MShellRealizeXYWH().
  The dafault value causes the window to be centered in the corresponding direction.
  Another macro named DEF_SIZE allows to specify a default size for the width or height
  when realizing a SHELL using MShellRealizeXYWH().
  Of course, calling
	MShellRealizeXYWH(shell, DEF_POSITION, DEF_POSITION, DEF_SIZE, DEF_SIZE);
  has the same effect as calling:
	MShellRealize(shell);

* Fixed a bug occurring when a SrcolledFormattedText object is made
  transparent.

* New functions for the FormattedTextObject:
	void MFormattedTextSetMargin(MOBJECT obj, int w_m, int h_m);
	void MFormattedTextSetHSpacing(MOBJECT obj, int h_s);


**************** Release 3.1.0

* C++ Library archive is now more fragmented to minimize unuseful code linking.
  This allows you to get smaller exe if your program uses a small portion of
  the MGUI API.

* The Character Browser dialog now must be enabled via a function call at
  program startup:
		void MEnableCharBrowser(void);


**************** Release 3.2.0

* Font loading support is now extended to ALL DOS platforms (including DOS
  BGI).

* Font definition in the resource file for ALL DOS platforms is now
  identical to Windows (for a subset of supported font families).
  So the MGUI configuration file under ALL DOS platforms is the same used
  for Windows: mgui.ini
  The program's resource file name also moves the extension to .ini

* A new environment variable MFONTDIR selects the directory containing MFN
  font files for DOS versions of MGUI. By default this directory is located
  in: \mgui\sys\fonts\cp1252 (for western language PCs).

* Font enumerating is now supported under ALL platforms via the new
  functions:

        const char *MGetFirstFontFamily(void);
        const char *MGetNextFontFamily(void);

  Call the first function to get the first available font family, then
  iteratively call the second one to get successive font families.
  MGetNextFontFamily() will return a NULL pointer when no more font
  families are available.

* Fixed a bug in the C++ method:
	CmShell::setWMCloseCallback(CmCallback *pp, VOID_CB ff);
	It only worked when the 'pp' argument was a pointer to an object of
	a class derived from CmShell.

* Fixed a bug in drawing the horizontal scrollbar in the ScrolledEdit
  object. This bug was introduced in release 3.0.0.



**************** Release 3.2.1

* Fixed a bug regarding the unwanted foreground color reset to Black for
  transparent objects (as Labels) when the background color of the container
  object is changed. This bug was introduced in release 3.0.0.

* Fixed a bug regarding the lack of focus setting when the OptionEdit
  list is open.

* Making an object transparent no longer resets its foreground color to
  the parent's foreground color.

* Fixed a bug in drawing the scrollbar shadow (introduced in release 3.2.0)



**************** Release 3.2.2

* Fixed crash problem occurring when an ImageRButton object is created using
  an unavailable image file as the image to be drawn in the normal state.

* Added a new option in the resource file for console based MGUI programs
  (that is DOS or Linux SVGA/GRX).
  The option name is 'centeredBitmap' and it can be defined in the 'Desktop'
  section to specify whether the desktop image should be drawn center or
  tiled (default). Allowed values are boolean '0' and '1'.
  Example:
  
  [Desktop]

  background = 110, 130, 100
  bitmap = tile9.bmp
  centerBitmap = 1
