          Text User Interface using comboot
          ---------------------------------

This is a menu system written by Murali Krishnan Ganapathy and ported
from OpenWatcom to gcc by HPA. It is currently being maintained by the
original author.

To configure the menus, you need to set up a menu configuration file
to have the menu items you desire, then build the menu system using
make.  You can use either simple.c or complex.c as a starting point
for your own menu configuration file; If your menu system is only going 
to have entries corresponding to things which can be executed directly, 
then you can create a file in ".menu" format instead of the C code.

NOTE: ".menu" files can only describe the very basic type of menus
See MENU_FORMAT for the syntax of .menu files

The resulting code is a 32-bit COMBOOT code, and hence can be executed
only under syslinux. You can use tools like bochs to help debug your
code. 

Menu Features currently supported are:
* menu items, 
* submenus, 
* disabled items,
* checkboxes,
* invisible items (useful for dynamic menus), and
* Radio menus,
* Context sensitive help
* Authenticated users 
* Editing commands associated with items

The keys used are:

* Arrow Keys, PgUp, PgDn, Home, End Keys
* Space to switch state of a checkbox
* Enter to choose the item
* Escape to exit from it
* Shortcut keys

Features
--------
This is a general purpose menu system implemented using only BIOS calls, 
so it can be executed in a COMBOOT environment as well. It is highly
customizable. Some features include:

* Status line
    Display any help information associated with each menu item.
* Window
    Specify a window within which the menu system draws all its menu's.
    It is upto the user to ensure that the menu's fit within the window.
* Positioning submenus
    By default, each submenu is positioned just below the corresponding 
    entry of the parent menu. However, the user may position each menu
    at a specific location of his choice. This is useful, when the menu's
    have lots of options.
* Registering handlers for each menu item 
    This is mainly used for checkboxes and radiomenu's, where a selection may
    result in disabling other menu items/checkboxes 
* Global Screen Handler
    This is called every time the menu is redrawn. The user can display
    additional information (usually outside the window where the menu is 
    being displayed). See the complex.c for an example, where the global
    handler is used to display the choices made so far.
* Global Keys Handler
    This is called every time the user presses a key which the menu
    system does not understand. This can be used to display context
    sensitive help. See complex.c for how to use this hook to implement
    a context sensitive help system as well as "On the fly" editing 
    of commands associated with menus. 
* Shortcut Keys
    With each item one can register a shortcut key from [A-Za-z0-9]. 
    Pressing a key within that range, will take you to the next item
    with that shortcut key (so you can have multiple items with the
    same shortcut key). The default shortcut key for each item, is 
    the lower case version of the first char of the item in the range 
    [A-Za-z0-9].
* Escape Keys
    Each item entry can have a substring enclosed in < and >. This part
    is highlighted. Can be used to highlight the shortcut keys. By default
    if an item has a <, then the first char inside < and > in the range
    [A-Za-z0-9] is converted to lower case and set as the shortcut key.
* Ontimeout handler
    The user can register an ontimeout handler, which gets called if 
    no key has been pressed for a user specific amount of time (default 5 min).
    For an example see the complex.c file.

Credits
-------
* The Watcom developers and Peter Anvin for figuring out an OS 
  independent startup code.
* Thomas for porting the crypt function and removing all C library 
  dependencies
* Peter Anvin for porting the code to GCC 

- Murali (gmurali+guicd@cs.uchicago.edu)

