Original Source:
Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
All rights reserved.

Modifications:
Copyright (C) 2000-2006 W3Works, LLC
All Rights Reserved

This library and applications are FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
as long as the following conditions are adhered to.

Copyright remains with Systemics Ltd & W3Works LLC respectively, and as
such any Copyright notices in the code are not to be removed.  If this
code is used in a product, Systemics & W3Works should be given attribution
as the author of the parts used.  This can be in the form of a textual
message at program startup or in documentation (online or textual) provided
with the package.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
   must display the following acknowledgement:
   This product includes software developed by Systemics Ltd (http://www.systemics.com/) and W3Works, LLC 

   THIS SOFTWARE IS PROVIDED BY SYSTEMICS LTD ``AS IS'' AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   SUCH DAMAGE.

   The licence and distribution terms for any publically available version or
   derivative of this code cannot be changed.  i.e. this code cannot simply be
   copied and put under another distribution licence
   [including the GNU Public Licence.]

