The constituent files of this package listed below are copyright (C) 1991-1995
Angus J. C. Duggan.

LICENSE          Makefile.msc     Makefile.nt      Makefile.os2
Makefile.unix    README           config.h         descrip.mms
epsffit.c        epsffit.man      extractres.man   extractres.pl
fixdlsrps.man    fixdlsrps.pl     fixfmps.man      fixfmps.pl
fixmacps.man     fixmacps.pl      fixpsditps.man   fixpsditps.pl
fixpspps.man     fixpspps.pl      fixscribeps.man  fixscribeps.pl
fixtpps.man      fixtpps.pl       fixwfwps.man     fixwfwps.pl
fixwpps.man      fixwpps.pl       fixwwps.man      fixwwps.pl
getafm           getafm.man       includeres.man   includeres.pl
maketext         patchlev.h	  psbook.c         psbook.man
pserror.c        pserror.h        psmerge.man      psmerge.pl
psnup.c          psnup.man	  psresize.c       psresize.man
psselect.c       psselect.man	  psspec.c         psspec.h
pstops.c         pstops.man       psutil.c         psutil.h
showchar

They may be copied and used for any purpose (including distribution as part of
a for-profit product), provided:

1) The original attribution of the programs is clearly displayed in the product
   and/or documentation, even if the programs are modified and/or renamed as
   part of the product.

2) The original source code of the programs is provided free of charge (except
   for reasonable distribution costs). For a definition of reasonable
   distribution costs, see the Gnu General Public License or Larry Wall's
   Artistic License (provided with the Perl 4 kit). The GPL and Artistic
   License in NO WAY affect this license; they are merely used as examples of
   the spirit in which it is intended.

3) These programs are provided "as-is". No warranty or guarantee of their
   fitness for any particular task is provided. Use of these programs is
   completely at your own risk.

Basically, I don't mind how you use the programs so long as you acknowledge
the author, and give people the originals if they want them.
