This library is still very rudimentary.  It handles the basic
filesystem operations, but still lacks most higher-level
functionality.  The basic classes are:

Filesystem	A whole filesystem, consisting of a collection
		of Inodes. This class is passed a block of data
		repesenting a request and decodes it.  There is a
		method for each userfs protocol operation.  For
		operations involving inodes it finds the appropriate
		inode (if any) and dispatches it.

Inode		A generic inode base class, with methods for
		each operation.

SimpleInode	A simple class derived from Inode which implements
		a simple constructor, and default behaviour for
		upp_permission, upp_iread, upp_open, upp_close
		and so on.

DirInode	Derived from SimpleInode: this implements most of the
		functionality needed for a directory.  For
		simple cases all a class derived from this
		needs is a special constructor: see homer.cc

Comm		This performs the comms between the kernel
		streams and the filesystem itself.

DeferComm	This is like Comm, except it allows some replies
		to be deferred - that is, the filesystem goes on
		to process more input while a separate process
		handles the outstanding requests.

ThreadComm	This creates a new light-weight process for each
		request (using the library in ../lwp), and
		terminates the thread when the request is done.
		The LWP library is not pre-emptive, so care
		must be taken with blocking system calls.
		The filedescriptor dispatch service in CommBase
		is useful for this.

CommBase	The base comms class.  This is not useful by itself,
		but it does provide some useful services to derived
		classes, through the DispatchFD table.  Its main
		method is Run(), which does a select() syscall on
		the set of fds in the dispatch table, and calls the
		dispatch() method of each class in the table when its
		filedescriptor event arrives.  This is used for waiting
		for kernel input, but arbitary fds can be selected on,
		for reads, writes or exceptions.  FD dispatch table
		entries can be added and removed with addDispatch()
		and delDispatch().


				Jeremy Fitzhardinge <jeremy@sw.oz.au>
