MUIbase V1.6
------------

MUIbase is a relational programmable database that uses MUI as
user interface.

MUIbase is not public domain or free software.  If you use MUIbase
then you have to register your copy after a short while.  You are
allowed to install and run MUIbase without registration for a period
of 4 weeks.  After that time you have to register your copy of MUIbase
or delete it from your system.  Reinstalling MUIbase does not extend
the license.

After registration you receive your personal MUIbase key-file which
enables all crippled features of MUIbase.

For more information about registering MUIbase, see the documentation
in the Docs directory.  The documentation is available in three formats:
AmigaGuide, dvi, and html.


Features
========

MUIbase is a fast and very flexible database for the Amiga.  It is
for users who want to manage data in a comfortable and easy way.
MUIbase is able to manage any kind of data, e.g. addresses, CD series,
movies, or your income and expense.  The power of MUIbase lies in its
clear and powerful graphical user interface and its programming
capabilities.  The latter makes it possible to automatically calculate
and maintain nearly everything, starting from automatically summing
up values, e.g. for calculating the total amount of income or the
total amount of recorded time of a CD, up to automatically creating
and printing letters for any purpose.

MUIbase is the successor of AmigaBase, a hierarchical programmable
database which is still available but considered obsolete with the
appearance of MUIbase.  All registered users of AmigaBase can get a
free upgrade to MUIbase by sending their AmigaBase registration number
and return address to me (Email preferred).

MUIbase offers the following features:

* Handling of multiple projects at the same time.

* Attributes can be of type string, memo (multi line text), integer,
  real, date, time, bool, choice (one item out of many items), reference
  (easy way to reference a record of another table), button (for
  starting MUIbase programs), and virtual (compute value on the fly).

* The string type can also manage lists of strings, files, and fonts.
  An OS 3.x datatype gadget allows displaying external images.

* Unlimited number of records.

* Dynamic loading of records.  Records which are not needed may be
  flushed from memory (e.g. when memory is low).

* Programmability.  With the easy and powerful MUIbase programming
  language complex tasks can be implemented.  The language also
  includes a SELECT-FROM-WHERE query for easy and fast data retrieval.

* Ordering of records by any combinations of attributes.

* Flexible and powerful search and filter facility.

* Query editor which allows entering and managing of SELECT-FROM-WHERE
  queries.  The queries can be saved and the results can be printed.

* Import and export facility.

* Powerful ARexx interface for accessing MUIbase from other programs. 
  The ARexx interface offers a transaction mechanism similar to other 
  relational databases. 

* Uses MUI as user interface.  The interface is highly customizable.
  External images can be included in the user interface.

* Full documentation including user and programming manual in 
  AmigaGuide, HTML, DVI and Postscript.

* Portability.  MUIbase development has been done under the idea of 
  easy portability.  The system/gui part has been separated from the 
  ANSI/C part such that porting MUIbase will result in only porting 
  the system/gui part.  The author is currently investigating a Java
  or Fltk implementation of the user gui.  This would make the database 
  available for nearly all computer systems, including Linux, Windows, 
  and MacOS.

The unregistered version of MUIbase is crippled in several ways.
See the MUIbase documentation for a list of limitations in the
unregistered version.


New since V1.5
--------------

o ARexx port.  The port name is 'MUIbase.n' where n is a number starting
  from 1 for the first invocation of MUIbase.  Besides the usual MUI
  ARexx commands, the following commands are implemented:

  - connect <project>        - loads project and returns unique handle 
                               for future reference.
  - disconnect <handle>      - closes project and releases handle.
  - connections              - returns the list of current connections.
  - eval <handle> <cmd-str>  - Evaluates <cmd-str> which can be any MUIbase 
	                       lisp command and returns result as a string.  
  - transaction <handle>     - starts a transaction.
  - commit <handle>          - saves project to disk.
  - rollback <handle>        - reloads project from last saved copy.

  Each command sets the variable rc and if successful, that is rc = 0,
  also sets the variable result.  E.g. connect sets rc to 0 and result
  to the connection handle, if successful.  You can use the following 
  code fragment to display the result of a MUIbase ARexx command.

    if (rc == 0) then
	say result
    else if (rc <= -10) then
	say lasterror
    else if (rc == -1) then
	say "Implementation error"	
    else if (rc == -2) then
	say "Out of memory"	
    else if (rc == -3) then
	say "Unknown command"	
    else if (rc == -4) then
	say "Command syntax error"	
    else
	say "Error: " rc

   The usual way to use the MUIbase ARexx port is
   1) check if MUIbase.1 exists.  If not, start MUIbase with the -n
      option to avoid opening the empty window display.
   2) Do <connect 'project-pathname'> and store result in a variable 
      called handle.
   3) If you just want to do a simple query, call <eval handle 'cmd'>
      where cmd is any lisp expression which is interpreted and executed
      by MUIbase.  Use single quotes around cmd.  This way you can still
      use double quotes if you need to use strings inside cmd.
      The result of the cmd expression will be returned as a string,
      where integers, real numbers, date numbers and time numbers are
      represented in the usual format, strings and memos are surrounded 
      by double quotes and lists are represented by a starting and closing
      parenthesis with spaces and newlines around list elements. 
      If your query did changes to the database, these are automatically
      saved after eval returns (auto commit).
   4) If you need a transaction of more than one eval cmd, use
      <transation handle> to start one, then one or more <eval handle 'cmd'>
      and finally a <commit handle> to save or <rollback handle> to undo
      the changes in the transaction.
   5) Last but no least, do <disconnect handle> to free the project.
      If you were in a transaction do not forget a <commit handle>
      or <rollback handle> first, otherwise the disconnect call will 
      come back with an error and you stay connected.  
       
o Auto show feature to automatically display referenced records
  whenever the user switches to another record in a table containing
  a reference attribute.

o Small enhancement for printing queries by offering specification
  of a custom delimiter string.

o Installing a new MUIbase version allows for another 4 weeks
  of testing for unregistered users.

o Improved html documentation thanks to texi2html 1.64.

o Some bug fixes.

