The VIGRA Artistic License
==========================
(modeled after the Perl Artistic License)


Preamble
--------

The intent of this document is to state the conditions under which 
VIGRA may be copied, such that the author maintains some
semblance of artistic control over the development of the library,
while giving the users of the library the right to use and
distribute VIGRA in a more-or-less customary fashion, plus the
right to make reasonable modifications.


Definitions
-----------

"Copyright Holder" of the VIGRA library is 
Ullrich Koethe, Cognitive Systems Group, University of Hamburg, Germany.

"Library" refers to the collection of files distributed by the
Copyright Holder under the name "VIGRA" (including this 
LICENSE file and all accompanying documentation), and derivatives of that 
collection of files created through textual modification.

"Standard Version" refers to the Library if it has not been
modified, or has been modified in accordance with the wishes of the
Copyright Holder as specified below.

"You" is you, if you're thinking about using, copying, modifying or
distributing this Library.

"Freely Available" means that no fee is charged for the item.
It also means that recipients of the item may redistribute it 
under the same conditions they received it.

"Reasonable copying fee" is whatever you can justify on the basis
of media cost, duplication charges, time of people involved, and so
on. (You will not be required to justify it to the Copyright Holder,
but only to the computing community at large as a market that must
bear the fee.)


License terms
-------------

1. You may make and give away verbatim copies of the 
   Standard Version of this Library without restriction, provided that
   you duplicate all of the original copyright notices, this license,
   and associated disclaimers. 

2. The Standard Version of the Library may be distributed as part
   of a collection of software, provided no more than a reasonable
   copying fee is charged for the software collection.

3. You may apply bug fixes and portability fixes
   derived from the Public Domain or from the Copyright Holder. A
   Library modified in such a way shall still be considered the
   Standard Version.

4. You may otherwise modify your copy of this Library in any way,
   provided that you insert a prominent notice in each changed file
   stating how and when you changed that file, and provided that you do
   at least ONE of the following:

    a. place your modifications in the Public Domain or otherwise
       make them Freely Available, for example by allowing the Copyright 
       Holder to include your modifications in the Standard Version of 
       the Library.

    b. use the modified Library only within your corporation or
       organization. 

    c. make other distribution arrangements with the Copyright
       Holder.

5. You may distribute programs which use this Library
   in object code or executable form without restriction.

6. Any object code generated as a result of using this Library 
   does not fall under the copyright of this Library, but
   belongs to whomever generated it, and may be sold commercially.

7. The name of the Copyright Holder or the Library may not be used to 
   endorse or promote products derived from this software without 
   specific prior written permission.

8. THIS LIBRARY IS PROVIDED AS IS AND WITHOUT ANY EXPRESS OR
   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

   IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, 
   INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
   OR NOT ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR ON ANY
   THEORY OF LIABILITY ARISING OUT OF OR IN CONNECTION WITH THE USE
   OR PERFORMANCE OF THIS LIBRARY.
