Copyright:

 * COPYRIGHT NOTICE: 
 * Copyright (c) Tim Bray <tbray@textuality.com>, 1990.
 * Copyright (c) Russell Coker <russell@coker.com.au>, 1999.


Licensed under the GPL version 2 license.

 * DISCLAIMER:
 * This program is provided AS IS with no warranty of any kind, and
 * The author makes no representation with respect to the adequacy of this
 *  program for any particular purpose or with respect to its adequacy to
 *  produce any particular result, and
 * The author shall not be liable for loss or damage arising out of
 *  the use of this program regardless of how sustained, and
 * In no event shall the author be liable for special, direct, indirect
 *  or consequential damage, loss, costs or fees or expenses of any
 *  nature or kind.
