THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.24)
BASSER LOUT VERSION 3 COPYRIGHT (C) 1994, 2000 Jeffrey H. Kingston

Jeffrey H. Kingston
Basser Department of Computer Science
The University of Sydney 2006
AUSTRALIA

Telephone (direct): 61 2 692 4216
Telephone (messages): 61 2 692 3423
Email: jeff@cs.usyd.edu.au
Fax: 61 2 692 3838

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
(file gnu.gpl in this directory); if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

This directory contains everything needed to install the Lout document
formatting system.  It contains the following directories:

    data            Lout databases (in Lout)
    doc             Lout documentation (in Lout)
    font            Adobe Systems font metrics files
    hyph            Lout hyphenation files (see hyph/README for info)
    include         Lout packages (in Lout)
    locale          Locale-specific error messages
    man             Lout and prg2lout manual entries
    maps            Lout Character Mapping (LCM) files
    setup           Lout setup files (in Lout)
    software        Information about Lout-related software from elsewhere

and the following files:

    READMEPDF       A description of the PDF back end
    blurb           A news blurb describing Lout
    blurb.short     A short news blurb describing Lout
    prg2lout.c      prg2lout source code (all in one file)
    externs.h z*.c  Lout source code
    gnu.gpl         A copy of the GNU General Public License
    makefile        A makefile for installing Lout
    maillist        Information about a public mailing list about Lout
    notes.dsc       Notes on the degree of Lout's conformance with the
                    PostScript Document Structuring Conventions
    whatsnew        A brief informal update on recent changes

See the makefile for installation instructions.
