r2l with pluggable UI
=====================

----------------------------------------------------------------
Approach:

the approach taken was to write a smal framework, into which programmers
can plug implementations of different user interfaces. The UI programmer
needs to implement a set of functions (as described in 'ui_plugin.h'),
and can use the interface of the 'r2l_ctrl' object ('r2l_ctrl.h').

----------------------------------------------------------------
UI Plugin Interface:

the UI plugin is requierd to create (upon call to ui_init) a ui_plugin_t
object and return it to the caller. This type will serve (for r2l's framework)
as an opaque pointer to the ui plugin's state information, and will be passed
to all its functions.

The UI plugin may choose to either use the event loop supplied by r2l, or
supply an event loop of its own (probably of its GUI toolkit) - r2l will
poll the UI during initialization to see if it supplies its own main loop
or not.

r2l's main loop supports registration of a file descriptor to be listend for
by r2l, and when there's input on it, a plugin's callback will be invoked.

If the plugin prefers to supply its own main loop, it needs to allow
r2l to register a periodic timer. This timer is used by r2l to periodically
check if the '.rev' files status was changed. Since all GUI toolkits support
timers of this sort, then this requirement isn't too limiting.

----------------------------------------------------------------
Interfaces Implemented:

text mode, gnome panel applet, and window maker's dock application.

----------------------------------------------------------------
Future extentions:

1. change the plugins to be shared libraries, instead of just object files
   inside rhe binary, and have r2l load the proper plugin library based
   on a command line argument.

2. add pluggins for a kde panel applet, an enlightenment epplet, and a simple
   xlib-based application.

----------------------------------------------------------------

