16170971 Move enscript from the Desktop consolidation to Userland
authorRich Burridge <rich.burridge@oracle.com>
Wed, 23 Jan 2013 12:17:32 -0800
changeset 1132 a62391631ea1
parent 1131 4c414ada49de
child 1133 d8e2284538ee
16170971 Move enscript from the Desktop consolidation to Userland
components/enscript/Makefile
components/enscript/enscript.license
components/enscript/enscript.p5m
components/enscript/patches/enscript-1.6.1-CAN-2004-1185.patch
components/enscript/patches/enscript-1.6.1-CAN-2004-1186.patch
components/enscript/patches/enscript-1.6.1-config.patch
components/enscript/patches/enscript-1.6.1-locale.patch
components/enscript/patches/enscript-1.6.4-hilight.patch
components/enscript/patches/enscript-1.6.4-rh457719.patch
components/enscript/patches/enscript-1.6.4-rh457720.patch
components/enscript/patches/enscript-CVE-2008-3863+CVE-2008-4306.patch
components/enscript/patches/enscript-doublefree.patch
components/enscript/patches/enscript-solaris-build.patch
components/enscript/patches/enscript-wrap_header.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/Makefile	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,85 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		enscript
+COMPONENT_VERSION=	1.6.4
+COMPONENT_PROJECT_URL=	http://www.gnu.org/software/enscript
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:45299a4db47c9c08c3649d4f62b211ae79ef5143360c264a40371a728f6ad99b
+COMPONENT_ARCHIVE_URL=  http://ftp.gnu.org/gnu/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
+COMPONENT_BUGDB=	utility/enscript
+
+# Ruby enscript support
+COMPONENT_ARCHIVE_1=    ruby-enscript.tar.gz
+COMPONENT_ARCHIVE_HASH_1=       \
+    sha256:29c87c4cd5d36b221fd50ad0b2e35a2cc0e1422519bb7f41d400c61db117cff7
+COMPONENT_ARCHIVE_URL_1= http://neugierig.org/software/ruby/ruby-enscript.tar.gz
+
+# PHP enscript support
+COMPONENT_ARCHIVE_2=    php.st
+COMPONENT_ARCHIVE_HASH_2=	\
+    sha256:64d5b1ed1044202cda1ddcd591a966d1faff58d60156c4368d485f0405d7a9ee
+COMPONENT_ARCHIVE_URL_2= http://home.raxnet.net/downloads/viewcvs/php.st
+
+include ../../make-rules/prep.mk
+include ../../make-rules/configure.mk
+include ../../make-rules/ips.mk
+
+PATCH_LEVEL = 1
+
+# Get just the ruby enscript support file out of the downloaded tarball, and
+# move ruby.st and php.st into the correct directory for "gmake install".
+COMPONENT_PREP_ACTION = \
+	/usr/bin/tar xvf $(COMPONENT_ARCHIVE_1) ruby.st ; \
+	$(MV) php.st ruby.st $(SOURCE_DIR)/states/hl ;
+
+# There are patches that change a Makefile.am and configure.in
+COMPONENT_PREP_ACTION +=(cd $(@D); autoreconf -fiv);
+
+# Needed so that enscript can find the enscript.cfg file.
+CONFIGURE_OPTIONS +=    --sysconfdir=/etc
+
+CONFIGURE_OPTIONS +=	--with-media=Letter
+CONFIGURE_OPTIONS +=	CFLAGS="$(CFLAGS)"
+CONFIGURE_OPTIONS +=	LDFLAGS="$(LDFLAGS)"
+
+COMPONENT_POST_INSTALL_ACTION = \
+	$(LN) $(PROTOUSRBINDIR)/$(MACH64)/enscript \
+		$(PROTOUSRBINDIR)/$(MACH64)/nenscript
+
+# common targets
+build:          $(BUILD_64)
+
+install:        $(INSTALL_64)
+
+test:           $(TEST_64)
+
+BUILD_PKG_DEPENDENCIES =        $(BUILD_TOOLS)
+
+include ../../make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/enscript.license	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,343 @@
+------------------
+- enscript 1.6.4 -
+------------------
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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 2 of the License, 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
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/enscript.p5m	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,262 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+#
+
+<transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
+set name=pkg.fmri \
+    value=pkg:/print/filter/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="A plain ASCII to PostScript converter"
+set name=pkg.description \
+    value="GNU enscript is a free replacement for Adobe's Enscript program. Enscript converts ASCII files to PostScript(TM) and spools generated PostScript output to the specified printer or saves it to a file. Enscript can be extended to handle different output media and includes many options for customizing printouts"
+set name=info.classification value=org.opensolaris.category.2008:System/Printing
+set name=info.upstream-url value=http://www.gnu.org/software/enscript
+set name=org.opensolaris.arc-caseid value=PSARC/2010/337
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+dir  path=etc
+file path=etc/enscript.cfg
+dir  path=usr
+dir  path=usr/bin
+file usr/bin/$(MACH64)/diffpp path=usr/bin/diffpp
+file usr/bin/$(MACH64)/enscript path=usr/bin/enscript
+file usr/bin/$(MACH64)/mkafmmap path=usr/bin/mkafmmap
+file usr/bin/$(MACH64)/nenscript path=usr/bin/nenscript
+file usr/bin/$(MACH64)/over path=usr/bin/over
+file usr/bin/$(MACH64)/sliceprint path=usr/bin/sliceprint
+file usr/bin/$(MACH64)/states path=usr/bin/states
+dir  path=usr/share
+dir  path=usr/share/doc
+dir  path=usr/share/doc/enscript
+dir  path=usr/share/doc/enscript/docs
+file docs/FAQ.html path=usr/share/doc/enscript/docs/FAQ.html facet.doc.html=true
+dir  path=usr/share/enscript
+file path=usr/share/enscript/88591.enc
+file path=usr/share/enscript/885910.enc
+file path=usr/share/enscript/88592.enc
+file path=usr/share/enscript/88593.enc
+file path=usr/share/enscript/88594.enc
+file path=usr/share/enscript/88595.enc
+file path=usr/share/enscript/88597.enc
+file path=usr/share/enscript/88599.enc
+file path=usr/share/enscript/a2ps.hdr
+dir  path=usr/share/enscript/afm
+file path=usr/share/enscript/afm/agd.afm
+file path=usr/share/enscript/afm/agdo.afm
+file path=usr/share/enscript/afm/agw.afm
+file path=usr/share/enscript/afm/agwo.afm
+file path=usr/share/enscript/afm/bkd.afm
+file path=usr/share/enscript/afm/bkdi.afm
+file path=usr/share/enscript/afm/bkl.afm
+file path=usr/share/enscript/afm/bkli.afm
+file path=usr/share/enscript/afm/cob.afm
+file path=usr/share/enscript/afm/cobo.afm
+file path=usr/share/enscript/afm/com.afm
+file path=usr/share/enscript/afm/coo.afm
+file path=usr/share/enscript/afm/font.map
+file path=usr/share/enscript/afm/hv.afm
+file path=usr/share/enscript/afm/hvb.afm
+file path=usr/share/enscript/afm/hvbo.afm
+file path=usr/share/enscript/afm/hvc.afm
+file path=usr/share/enscript/afm/hvcb.afm
+file path=usr/share/enscript/afm/hvcbo.afm
+file path=usr/share/enscript/afm/hvcdo.afm
+file path=usr/share/enscript/afm/hvn.afm
+file path=usr/share/enscript/afm/hvnb.afm
+file path=usr/share/enscript/afm/hvnbo.afm
+file path=usr/share/enscript/afm/hvno.afm
+file path=usr/share/enscript/afm/hvo.afm
+file path=usr/share/enscript/afm/matrix.afm
+file path=usr/share/enscript/afm/matrix.pfa
+file path=usr/share/enscript/afm/ncb.afm
+file path=usr/share/enscript/afm/ncbi.afm
+file path=usr/share/enscript/afm/nci.afm
+file path=usr/share/enscript/afm/ncr.afm
+file path=usr/share/enscript/afm/pob.afm
+file path=usr/share/enscript/afm/pobi.afm
+file path=usr/share/enscript/afm/poi.afm
+file path=usr/share/enscript/afm/por.afm
+file path=usr/share/enscript/afm/sy.afm
+file path=usr/share/enscript/afm/tib.afm
+file path=usr/share/enscript/afm/tibi.afm
+file path=usr/share/enscript/afm/tii.afm
+file path=usr/share/enscript/afm/tir.afm
+file path=usr/share/enscript/afm/zcmi.afm
+file path=usr/share/enscript/afm/zd.afm
+file path=usr/share/enscript/ascii.enc
+file path=usr/share/enscript/asciidkno.enc
+file path=usr/share/enscript/asciifise.enc
+file path=usr/share/enscript/edd.hdr
+file path=usr/share/enscript/emacs.hdr
+file path=usr/share/enscript/enscript-color.hdr
+file path=usr/share/enscript/enscript.hdr
+file path=usr/share/enscript/enscript.pro
+file path=usr/share/enscript/frame.hdr
+dir  path=usr/share/enscript/hl
+file path=usr/share/enscript/hl/ada.st
+file path=usr/share/enscript/hl/asm.st
+file path=usr/share/enscript/hl/awk.st
+file path=usr/share/enscript/hl/bash.st
+file path=usr/share/enscript/hl/c.st
+file path=usr/share/enscript/hl/c_comment.st
+file path=usr/share/enscript/hl/c_ppline.st
+file path=usr/share/enscript/hl/c_string.st
+file path=usr/share/enscript/hl/changelog.st
+file path=usr/share/enscript/hl/cpp.st
+file path=usr/share/enscript/hl/csh.st
+file path=usr/share/enscript/hl/default_faces.st
+file path=usr/share/enscript/hl/delphi.st
+file path=usr/share/enscript/hl/describe_languages.st
+file path=usr/share/enscript/hl/diff.st
+file path=usr/share/enscript/hl/diffs.st
+file path=usr/share/enscript/hl/diffu.st
+file path=usr/share/enscript/hl/dylan.st
+file path=usr/share/enscript/hl/eiffel.st
+file path=usr/share/enscript/hl/elisp.st
+file path=usr/share/enscript/hl/enscript.st
+file path=usr/share/enscript/hl/erlang.st
+file path=usr/share/enscript/hl/forth.st
+file path=usr/share/enscript/hl/fortran.st
+file path=usr/share/enscript/hl/fortran_pp.st
+file path=usr/share/enscript/hl/haskell.st
+file path=usr/share/enscript/hl/html.st
+file path=usr/share/enscript/hl/icon.st
+file path=usr/share/enscript/hl/idl.st
+file path=usr/share/enscript/hl/inf.st
+file path=usr/share/enscript/hl/java.st
+file path=usr/share/enscript/hl/javascript.st
+file path=usr/share/enscript/hl/ksh.st
+file path=usr/share/enscript/hl/lang_ansi.st
+file path=usr/share/enscript/hl/lang_enscript.st
+file path=usr/share/enscript/hl/lang_html.st
+file path=usr/share/enscript/hl/lang_overstrike.st
+file path=usr/share/enscript/hl/lang_rtf.st
+file path=usr/share/enscript/hl/lang_texinfo.st
+file path=usr/share/enscript/hl/lua.st
+file path=usr/share/enscript/hl/m4.st
+file path=usr/share/enscript/hl/mail.st
+file path=usr/share/enscript/hl/makefile.st
+file path=usr/share/enscript/hl/matlab.st
+file path=usr/share/enscript/hl/nroff.st
+file path=usr/share/enscript/hl/oberon2.st
+file path=usr/share/enscript/hl/objc.st
+file path=usr/share/enscript/hl/outline.st
+file path=usr/share/enscript/hl/oz.st
+file path=usr/share/enscript/hl/pascal.st
+file path=usr/share/enscript/hl/passthrough.st
+file path=usr/share/enscript/hl/perl.st
+file path=usr/share/enscript/hl/php.st
+file path=usr/share/enscript/hl/postscript.st
+file path=usr/share/enscript/hl/pyrex.st
+file path=usr/share/enscript/hl/python.st
+file path=usr/share/enscript/hl/rfc.st
+file path=usr/share/enscript/hl/ruby.st
+file path=usr/share/enscript/hl/scheme.st
+file path=usr/share/enscript/hl/sh.st
+file path=usr/share/enscript/hl/skill.st
+file path=usr/share/enscript/hl/smalltalk.st
+file path=usr/share/enscript/hl/sml.st
+file path=usr/share/enscript/hl/sql.st
+file path=usr/share/enscript/hl/states.st
+file path=usr/share/enscript/hl/style_a2ps.st
+file path=usr/share/enscript/hl/style_emacs.st
+file path=usr/share/enscript/hl/style_emacs_verbose.st
+file path=usr/share/enscript/hl/style_ifh.st
+file path=usr/share/enscript/hl/style_msvc.st
+file path=usr/share/enscript/hl/synopsys.st
+file path=usr/share/enscript/hl/tcl.st
+file path=usr/share/enscript/hl/tcsh.st
+file path=usr/share/enscript/hl/tex.st
+file path=usr/share/enscript/hl/vba.st
+file path=usr/share/enscript/hl/verilog.st
+file path=usr/share/enscript/hl/vhdl.st
+file path=usr/share/enscript/hl/vrml.st
+file path=usr/share/enscript/hl/wmlscript.st
+file path=usr/share/enscript/hl/zsh.st
+file path=usr/share/enscript/hp8.enc
+file path=usr/share/enscript/ibmpc.enc
+file path=usr/share/enscript/koi8.enc
+file path=usr/share/enscript/mac.enc
+file path=usr/share/enscript/mp.hdr
+file path=usr/share/enscript/ps.enc
+file path=usr/share/enscript/pslatin1.enc
+file path=usr/share/enscript/simple.hdr
+file path=usr/share/enscript/squeeze.hdr
+file path=usr/share/enscript/vms.enc
+dir  path=usr/share/info
+file path=usr/share/info/enscript.info
+dir  path=usr/share/locale
+dir  path=usr/share/locale/ca
+dir  path=usr/share/locale/ca/LC_MESSAGES
+file path=usr/share/locale/ca/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/da
+dir  path=usr/share/locale/da/LC_MESSAGES
+file path=usr/share/locale/da/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/de
+dir  path=usr/share/locale/de/LC_MESSAGES
+file path=usr/share/locale/de/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/en_GB
+dir  path=usr/share/locale/en_GB/LC_MESSAGES
+file path=usr/share/locale/en_GB/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/es
+dir  path=usr/share/locale/es/LC_MESSAGES
+file path=usr/share/locale/es/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/fi
+dir  path=usr/share/locale/fi/LC_MESSAGES
+dir  path=usr/share/locale/fr
+dir  path=usr/share/locale/fr/LC_MESSAGES
+file path=usr/share/locale/fr/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/hr
+dir  path=usr/share/locale/hr/LC_MESSAGES
+file path=usr/share/locale/hr/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/nl
+dir  path=usr/share/locale/nl/LC_MESSAGES
+file path=usr/share/locale/nl/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/pt_BR
+dir  path=usr/share/locale/pt_BR/LC_MESSAGES
+file path=usr/share/locale/pt_BR/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/ru
+dir  path=usr/share/locale/ru/LC_MESSAGES
+file path=usr/share/locale/ru/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/sl
+dir  path=usr/share/locale/sl/LC_MESSAGES
+file path=usr/share/locale/sl/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/sv
+dir  path=usr/share/locale/sv/LC_MESSAGES
+file path=usr/share/locale/sv/LC_MESSAGES/enscript.mo
+dir  path=usr/share/locale/tr
+dir  path=usr/share/locale/tr/LC_MESSAGES
+file path=usr/share/locale/tr/LC_MESSAGES/enscript.mo
+dir  path=usr/share/man
+dir  path=usr/share/man/man1
+file path=usr/share/man/man1/diffpp.1
+file path=usr/share/man/man1/enscript.1
+file path=usr/share/man/man1/sliceprint.1
+file path=usr/share/man/man1/states.1
+license enscript.license license=GPLv2
+
+# enscript was previously in the 'desktop' consolidation. This optional
+# dependency is here to facilitate the safe transfer of the package to the
+# 'userland' consolidation.
+depend type=optional \
+    fmri=consolidation/desktop/[email protected]
+depend type=require fmri=developer/base-developer-utilities
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.1-CAN-2004-1185.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,24 @@
+diff -up enscript-1.6.4/src/psgen.c.CAN-2004-1185 enscript-1.6.4/src/psgen.c
+--- enscript-1.6.4/src/psgen.c.CAN-2004-1185	2008-08-08 11:18:06.000000000 +0200
++++ enscript-1.6.4/src/psgen.c	2008-08-08 11:17:57.000000000 +0200
[email protected]@ -2386,9 +2386,11 @@ recognize_eps_file (Token *token)
+   MESSAGE (2, (stderr, "^@epsf=\"%s\"\n", token->u.epsf.filename));
+ 
+   i = strlen (token->u.epsf.filename);
++
++  /*
+   if (i > 0 && token->u.epsf.filename[i - 1] == '|')
+     {
+-      /* Read EPS data from pipe. */
++      / * Read EPS data from pipe. * /
+       token->u.epsf.pipe = 1;
+       token->u.epsf.filename[i - 1] = '\0';
+       token->u.epsf.fp = popen (token->u.epsf.filename, "r");
[email protected]@ -2401,6 +2403,7 @@ recognize_eps_file (Token *token)
+ 	}
+     }
+   else
++  */
+     {
+       char *filename;
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.1-CAN-2004-1186.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,14 @@
+--- enscript-1.6.1/src/psgen.c.CAN-2004-1186	2005-01-10 15:57:07.432740602 +0000
++++ enscript-1.6.1/src/psgen.c	2005-01-10 15:58:24.606016206 +0000
[email protected]@ -1914,8 +1914,9 @@
+   else
+     {
+       ftail++;
+-      strncpy (buf, fname, ftail - fname);
+-      buf[ftail - fname] = '\0';
++      i = ftail - fname >= sizeof (buf)-1 ? sizeof (buf)-1 : ftail - fname;
++      strncpy (buf, fname, i);
++      buf[i] = '\0';
+     }
+ 
+   if (nup > 1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.1-config.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,56 @@
+diff -up enscript-1.6.4/afm/Makefile.am.config enscript-1.6.4/afm/Makefile.am
+--- enscript-1.6.4/afm/Makefile.am.config	2003-03-05 08:26:16.000000000 +0100
++++ enscript-1.6.4/afm/Makefile.am	2009-11-30 14:38:34.410478926 +0100
[email protected]@ -36,11 +36,11 @@ public_fonts = matrix.afm matrix.pfa
+ EXTRA_DIST = font.map $(default_afm) $(public_fonts)
+ 
+ install-data-local:
+-	$(top_srcdir)/mkinstalldirs $(datadir)/enscript
+-	$(top_srcdir)/mkinstalldirs $(datadir)/enscript/afm
++	$(top_srcdir)/mkinstalldirs $(DESTDIR)/$(datadir)/enscript
++	$(top_srcdir)/mkinstalldirs $(DESTDIR)/$(datadir)/enscript/afm
+ 	for f in $(EXTRA_DIST); do \
+-	  $(INSTALL_DATA) $(srcdir)/$$f $(datadir)/enscript/afm/$$f; \
++	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)/$(datadir)/enscript/afm/$$f; \
+ 	done
+ 
+ uninstall-local:
+-	rm -rf $(datadir)/enscript/afm
++	rm -rf $(DESTDIR)/$(datadir)/enscript/afm
+diff -up enscript-1.6.4/lib/Makefile.am.config enscript-1.6.4/lib/Makefile.am
+--- enscript-1.6.4/lib/Makefile.am.config	2009-11-30 14:39:38.377977061 +0100
++++ enscript-1.6.4/lib/Makefile.am	2009-11-30 14:40:13.887977573 +0100
[email protected]@ -38,12 +38,12 @@ CLEANFILES = enscript.cfg
+ all-local: enscript.cfg
+ 
+ install-data-local: enscript.cfg
+-	$(top_srcdir)/mkinstalldirs $(sysconfdir)
+-	if test -r $(sysconfdir)/enscript.cfg; then \
+-	  cp $(sysconfdir)/enscript.cfg $(sysconfdir)/enscript.cfg.old; \
++	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir)
++	if test -r $(DESTDIR)$(sysconfdir)/enscript.cfg; then \
++	  cp $(DESTDIR)$(sysconfdir)/enscript.cfg $(DESTDIR)$(sysconfdir)/enscript.cfg.old; \
+ 	else :; \
+ 	fi
+-	$(INSTALL_DATA) enscript.cfg $(sysconfdir)/enscript.cfg
++	$(INSTALL_DATA) enscript.cfg $(DESTDIR)$(sysconfdir)/enscript.cfg
+ 
+ uninstall-local:
+ 	rm -f $(sysconfdir)/enscript.cfg
+diff -up enscript-1.6.4/states/hl/Makefile.am.config enscript-1.6.4/states/hl/Makefile.am
+--- enscript-1.6.4/states/hl/Makefile.am.config	2003-03-05 08:26:33.000000000 +0100
++++ enscript-1.6.4/states/hl/Makefile.am	2009-11-30 14:38:34.410478926 +0100
[email protected]@ -45,10 +45,10 @@ states = $(misc) $(styles) $(languages) 
+ EXTRA_DIST = $(states)
+ 
+ install-data-local:
+-	$(top_srcdir)/mkinstalldirs $(datadir)/enscript
+-	$(top_srcdir)/mkinstalldirs $(datadir)/enscript/hl
++	$(top_srcdir)/mkinstalldirs $(DESTDIR)/$(datadir)/enscript
++	$(top_srcdir)/mkinstalldirs $(DESTDIR)/$(datadir)/enscript/hl
+ 	for f in $(states); do \
+-	  $(INSTALL_DATA) $(srcdir)/$$f $(datadir)/enscript/hl/$$f; \
++	  $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)/$(datadir)/enscript/hl/$$f; \
+ 	done
+ 
+ uninstall-local:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.1-locale.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,26 @@
+--- enscript-1.6.1/src/main.c.locale	Mon Mar 18 11:23:14 2002
++++ enscript-1.6.1/src/main.c	Mon Mar 18 11:24:08 2002
[email protected]@ -912,9 +912,8 @@
+    * We want to change only messages (gs do not like decimals in 0,1
+    * format ;)
+    */
+-#if HAVE_LC_MESSAGES
+-  setlocale (LC_MESSAGES, "");
+-#endif
++  setlocale (LC_ALL, "");
++  setlocale (LC_NUMERIC, "C");
+ #endif
+ #if ENABLE_NLS
+   bindtextdomain (PACKAGE, LOCALEDIR);
+--- enscript-1.6.1/src/psgen.c.locale	Mon Mar 18 11:23:14 2002
++++ enscript-1.6.1/src/psgen.c	Mon Mar 18 11:23:14 2002
[email protected]@ -1103,7 +1103,8 @@
+   /* Get escape name. */
+   for (i = 0; i < sizeof (escname) - 1 && (ch = is_getc (is)) != EOF; i++)
+     {
+-      if (!isalnum (ch))
++      if (!((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') ||
++	    (ch >= 'a' && ch <= 'z')))
+ 	{
+ 	  is_ungetc (ch, is);
+ 	  break;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.4-hilight.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,1255 @@
+04_hilight.dpatch from Debian's 1.6.4-7 patchset, with a few changes:
+o hilight *.xhtml as html
+o install php.st and ruby.st bits
+o patch Makefile.am too
+
+diff -Nru enscript-1.6.4.orig/states/hl/changelog.st enscript-1.6.4/states/hl/changelog.st
+--- enscript-1.6.4.orig/states/hl/changelog.st	2003-03-05 09:26:33.000000000 +0200
++++ enscript-1.6.4/states/hl/changelog.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -43,7 +43,7 @@
+   }
+ 
+   /* File descriptions without function names. */
+-  /(^\t\* )([^ :]+)(:)/ {
++  /(^\t\* )([^:]+)(:)/ {
+     language_print ($1);
+ 
+     function_name_face (true);
+diff -Nru enscript-1.6.4.orig/states/hl/dylan.st enscript-1.6.4/states/hl/dylan.st
+--- enscript-1.6.4.orig/states/hl/dylan.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/dylan.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,124 @@
++/**
++ * Name: dylan
++ * Description: Dylan Programming Language template for Enscript.
++ * Author: Brent Fulgham <[email protected]>
++ * (based on the Scheme version by Markku Rossi <[email protected]>)
++ */
++
++dylan_mod_re =
++/* Definition Modifiers
++  (build-re '(abstract block concrete constant class domain exception exclude
++  export function functional generic handler import inherited inline
++  instance interface library macro method open primary sealed sideways
++  singleton slot subclass variable virtual))
++  */
++  /\b(subclass|abstract|block|c(on(crete|stant)|lass)|domain\
++|ex(c(eption|lude)|port)|f(unction(|al))|generic|handler\
++|i(n(herited|line|stance|terface)|mport)|library|m(acro|ethod)\
++|open|primary|sealed|si(deways|ngleton)|slot\
++|v(ariable|irtual))\b/;
++
++state dylan extends HighlightEntry
++{
++  BEGIN {
++    /*
++     * Modify regexp character syntax so that we can distinguish all
++     * dylan symbols.
++     */
++    extras = list ('!', '$', '%', '&', '*', '/', ':', 
++		   '=', '?', '~', '^', '.', '+', '-');
++    for (i = 0; i < length (extras); i = i + 1)
++      regexp_syntax (extras[i], 'w');
++  }
++
++  /* Modifiers */
++  dylan_mod_re {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /* Types */
++  /<\w+>/ {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* Symbols */
++  /#\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Comments. */
++  /\/\// {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++  /\/\*/ {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.*'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++    
++  /* Keywords.
++     "=>" +
++     (build-re '(above afterwards begin below by case cleanup create
++     define end else elseif finally for from if in let local otherwise rename
++     select signal then to unless until use variable virtual when while
++   */
++  /=>|\b(a(bove|fterwards)|b(e(gin|low)|y)|c(ase|leanup|reate)\
++|define|else(|if)|end|f(inally|or|rom)|i[fn]|l(et|ocal)|otherwise\
++|rename|s(elect|ignal)|t(hen|o)|u(n(less|til)|se)|wh(en|ile))\b/ {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* ':'-names, Emacs highlights these, so do we. */
++  /([ \t])([!\$%&\*\/:<=>\?~_^a-zA-Z0-9.+\-]*:)/ {
++    language_print ($1);
++    reference_face (true);
++    language_print ($2);
++    reference_face (false);
++  }
++
++  /* Function faces */
++  /([ \t]*)(\w+[^:])([ \t]*\([ \t]*)/ {
++    language_print ($1);
++    function_name_face(true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face(false);
++    language_print ($3);
++  }
++}
++
++
++/*
++Local variables:
++mode: c
++End:
++*/
+diff -Nru enscript-1.6.4.orig/states/hl/eiffel.st enscript-1.6.4/states/hl/eiffel.st
+--- enscript-1.6.4.orig/states/hl/eiffel.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/eiffel.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,132 @@
++/**
++ * Name: eiffel
++ * Description: Eiffel programming language.
++ * Author: Julien Lemoine <[email protected]>
++ *         Brent Fulgham <[email protected]>
++ */
++
++eiffel_types =
++/* Types */
++  /\b(ABSTRACT_(FRACTION|INTEGER)|ANY|AR(GUMENTS|RAY(|2|3|ED_COLLECTION))\
++|BASIC_(DIRECTORY|TIME)|BINARY_FILE_(READ|WRITE)|BIT_(N|STRING)|BOOLEAN\
++|CHARACTER(|_CONSTANTS)|CLOCK|COLLECTION(|2|3|_SORTER)|COMPARABLE\
++|COUNTER|DICTIONARY(|_NODE)|D(IRECTORY|OUBLE)|EXCEPTIONS|FILE(|_TOOLS)\
++|FIXED_ARRAY(|2|3)|GE(NERAL|N_RAND)|HASH(ABLE|_TABLE_SIZE)|INPUT_STREAM\
++|INTEGER(|_8|_16|_32|_64|_FRACTION|_GENERAL)\
++|ITERATOR(|_ON_(COLLECTION|DICTIONARY(_ITEMS|_KEYS)|LINKED_LIST|SET\
++|STRING|TWO_WAY_LINKED_LIST|UNICODE_STRING))\
++|LARGE(|_NEGATIVE|_POSITIVE)_INTEGER|LINK(|2|ED(_COLLECTION|_LIST))\
++|MATH_CONSTANTS|MEMO(|RY)|MICROSECOND_TIME|MINI_PARSER_BUFFER\
++|MIN_STAND|MUTABLE_BIG_INTEGER|NATIVE_ARRAY|NULL_(INPUT|OUTPUT)\
++|NUMBER(|_FRACTION|_TOOLS)|NUMERIC|OUTPUT_STREAM|PLATFORM|POINTER\
++|REAL|REVERSE_COLLECTION_SORTER|SAFE_EQUAL|SCOOP_UTILITIES|SET(|_NODE)\
++|SMALL_INTEGER|STD_(ERROR|FILE_(READ|READ_WRITE|WRITE)|INPUT(|_OUTPUT)\
++|OUTPUT|RAND)|STRING(|_HANDLER)|SYSTEM|TIME(|_IN_(ENGLISH|FRENCH|GERMAN\
++|ITALIAN|SOME_LANGUAGE|SPANISH))|TWO_WAY_LINKED_LIST\
++|UNICODE_STRING(|_HANDLER)|UTF8_PARSER)\b/;
++
++eiffel_keywords =
++/* Keywords */
++  /\b(agent|a(ll|lias)|and|as(|sign)|check|class|convert|create|Current|debug\
++|deferred|do|else(|if)|en(d|sure)|ex(panded|port|ternal)|False\
++|feature|fro(m|zen)|if|implies|in(dexing|fix|herit|spect|variant)\
++|is|like|local|loop|not|o(r|bsolete|ld|nce)|prefix|Precursor|pure\
++|re(define|ference|name|quire|scue|try)|Result|separate|then|True\
++|TUPLE|un(define|til)|creation)\b/;
++
++state eiffel extends HighlightEntry
++{
++
++  /* One line comments. */
++  /\-\-/ {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  eiffel_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  eiffel_types {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* Symbols, etc. */
++  /:=|==|<=|>=|=|!=|\/=|!|!!/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /* Type declarations */
++  /([ \t])*([a-zA-Z]+[, \ta-zA-Z0-9_]*):[^=]/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++  
++
++  /*
++   * Function definitions, with args
++   * fct_name (args...) is
++   */
++  /^([ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*)(\([ \t]*[ \ta-z,A-Z_0-9]+)(:[ \ta-zA-Z0-9_\[\]]+)?(\)[ \t]*)(:[ \ta-zA-Z0-9_\[\]]+)?([ \t]+is)[ \t]*$/ {
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($1);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($2);
++    type_face (true);
++    language_print ($3);
++    type_face (false);
++    language_print ($4);
++    type_face (true);
++    language_print ($5);
++    type_face (false);
++    keyword_face (true);
++    language_print ($6);
++    keyword_face (false);
++    language_print ($7);
++  }
++
++  /*
++   * Function definitions, without args
++   * fct_name is
++   */
++  /^([ \t]*[a-zA-Z_][a-zA-Z_0-9]*)([ \t]*)(is)[ \t]*$/ {
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($1);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print(" ");
++    keyword_face (true);
++    language_print ($3);
++    keyword_face (false);
++  }
++
++}
+diff -Nru enscript-1.6.4.orig/states/hl/enscript.st enscript-1.6.4/states/hl/enscript.st
+--- enscript-1.6.4.orig/states/hl/enscript.st	2003-03-05 10:31:31.000000000 +0200
++++ enscript-1.6.4/states/hl/enscript.st	2006-01-09 22:04:22.000000000 +0200
[email protected]@ -474,24 +474,31 @@
+   /\.m$/					matlab;
+   /\.(mpl|mp|maple)$/				maple;
+   /\.(scm|scheme)$/				scheme;
++  /\.e$/					eiffel;
++  /\.erl$/					erlang;
+   /\b\.emacs$|\.el$/				elisp;
+   /\.ad(s|b|a)$/				ada;
+   /\.[Ss]$/					asm;
++  /\.sml$/					sml;
+   /\.st$/					states;
++  /\.lua$/					lua;
+   /(M|m)akefile.*/				makefile;
+   /\.(MOD|DEF|mi|md)$/				modula_2;
++  /\.oz$/					oz;
+   /\.tcl$/					tcl;
+   /\.(v|vh)$/					verilog;
+-  /\.html?$/					html;
++  /\.x?html?$/					html;
+   /\bChangeLog$/				changelog;
+   /\.(vhd|vhdl)$/				vhdl;
+   /\.(scr|.syn|.synth)$/			synopsys;
+   /\.idl$/					idl;
+   /\.(hs|lhs|gs|lgs)$/				haskell;
+   /\.(pm|pl)$/					perl;
++  /\.php[34]?$/					php;
+   /\.(eps|EPS|ps|PS)$/				postscript;
+   /\.py$/					python;
+   /\.pyx$/					pyrex;
++  /\.rbw?$/					ruby;
+   /\.js$/					javascript;
+   /\.java$/					java;
+   /\.([Pp][Aa][Ss]|[Pp][Pp]|[Pp])$/		pascal;
[email protected]@ -530,6 +537,10 @@
+   /-\*- [Ii][Dd][Ll] -\*-/				idl;
+   /-\*- [Pp][Ee][Rr][Ll] -\*-/				perl;
+   /^#![ \t]*\/.*\/perl/					perl;
++  /-\*- [Pp][Hh][Pp] -\*-/				php;
++  /^<\?php/						php;
++  /-\*- [Rr][Uu][Bb][Yy] -\*-/				ruby;
++  /^#![ \t]*\/.*\/ruby/					ruby;
+   /^From:/						mail;
+   /^#![ \t]*(\/usr)?\/bin\/[ngmt]?awk/			awk;
+   /^#![ \t]*(\/usr)?\/bin\/sh/				sh;
+diff -Nru enscript-1.6.4.orig/states/hl/erlang.st enscript-1.6.4/states/hl/erlang.st
+--- enscript-1.6.4.orig/states/hl/erlang.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/erlang.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,161 @@
++/**
++  * Name: erlang
++  * Description: Erlang programming language.
++  * Author: Sean Hinde 
++  */
++
++
++/* Erlang atom: ([a-z][a-zA-Z0-9_]*|\'[^\n]*\') */
++
++state erlang extends HighlightEntry
++{
++   /* Comments */
++   /%/ {
++     comment_face (true);
++     language_print ($0);
++     call (eat_one_line);
++     comment_face (false);
++   }
++
++   /* String constants. */
++   /\"/ {
++     string_face (true);
++     language_print ($0);
++     call (c_string);
++     string_face (false);
++   }
++
++   /* Special -record(rec_name, {}).  pre-processor case */
++   /(-record)(\([ \t]*)([a-z][a-zA-Z0-9_]*|\'[^\n]*\')/ {
++     reference_face (true);
++     language_print ($1);
++     reference_face (false);
++     language_print ($2);
++     type_face (true);
++     language_print ($3);
++     type_face (false);
++   }
++
++   /* Special -define(Alter, "Hello").  pre-processor case */
++   /(-define)(\([ 
++\t]*)([a-z][a-zA-Z0-9_]*|\'[^\n]*\'|[A-Z_][a-zA-Z0-9_]*)/ {
++     reference_face (true);
++     language_print ($1);
++     reference_face (false);
++     language_print ($2);
++     builtin_face (true);
++     language_print ($3);
++     builtin_face (false);
++   }
++
++   /* Pre-processor lines. */
++   /^-([a-z][a-zA-Z0-9_]*)/ {
++     reference_face (true);
++     language_print ($0);
++     reference_face (false);
++   }
++
++   /* Defines */
++   /(\?)([a-z][a-zA-Z0-9_]*|\'[^\n]*\'|[A-Z_][a-zA-Z0-9_]*)/ {
++     language_print ($1);
++     builtin_face (true);
++     language_print ($2);
++     builtin_face (false);
++   }
++
++   /* Records */
++   /(#)([a-z][a-zA-Z0-9_]*|\'[^\n]*\')/ {
++     language_print ($1);
++     type_face (true);
++     language_print ($2);
++     type_face (false);
++   }
++
++   /* Keywords.
++      '(after begin case try catch end fun if of receive when)
++      Regexp taken from emacs Erlang mode R9C
++   */
++   /\b(a(fter|ndalso)|begin|c(atch|ase)\
++|end|fun|if|o(f|relse)|receive|try|when\
++|query)\b/ {
++     keyword_face (true);
++     language_print ($0);
++     keyword_face (false);
++   }
++
++   /* Guards.
++    Regexp taken from emacs Erlang mode R9C
++   */
++   /\b((is_)*(atom|function|binary|constant|float\
++|integer|list|number|p(id|ort)\
++|re(ference|cord)|tuple))\b/ {
++     builtin_face (true);
++     language_print ($0);
++     builtin_face (false);
++   }
++
++   /* Built in functions */
++
++/\b(a(bs|live|pply|tom_to_list)\
++|binary_to_(list|term)\
++|concat_binary|d(ate|isconnect_node)\
++|e(lement|rase|xit)\
++|float(|_to_list)\
++|g(arbage_collect|et(|_keys)|roup_leader)\
++|h(alt|d)\
++|i(nte(ger_to_list|rnal_bif)|s_alive)\
++|l(ength|i(nk|st_to_(atom|binary|float|integer\
++|pid|tuple)))\
++|make_ref|no(de(|_(link|unlink)|s)|talive)\
++|open_port\
++|p(id_to_list|rocess(_(flag|info)|es)|ut)\
++|r(egister(|ed)|ound)\
++|s(e(lf|telement)|ize\
++|p(awn(|_link)|lit_binary)|tatistics)\
++|t(erm_to_binary|hrow|ime|l\
++|r(ace|unc)|uple_to_list)\
++|un(link|register)|whereis)\b/ {
++     keyword_face (true);
++     language_print ($0);
++     keyword_face (false);
++   }
++
++   /*
++    * Function definitions.
++    */
++   /^([a-z][a-zA-Z0-9_]*|'[^\n]*')/ {
++     function_name_face (true);
++     language_print ($1);
++     function_name_face (false);
++     language_print ($2);
++   }
++
++   /* Atom like strings */
++   /('[^\n]*')/ {
++     string_face (true);
++     language_print ($0);
++     string_face (false);
++   }
++
++   /* Characters */
++   /(\$.)/ {
++     string_face (true);
++     language_print ($0);
++     string_face (false);
++   }
++
++   /* Variable Names */
++   /*  /([\{\(\,\[ \t]+)([A-Z_][a-zA-Z0-9_]*)/ { */
++   /([^a-z0-9_\"])([A-Z_][a-zA-Z0-9_]*)/ {
++     language_print ($1);
++     variable_name_face (true);
++     language_print ($2);
++     variable_name_face (false);
++   }
++}
++
++/*
++Local variables:
++mode: erlang
++End:
++*/
+diff -Nru enscript-1.6.4.orig/states/hl/forth.st enscript-1.6.4/states/hl/forth.st
+--- enscript-1.6.4.orig/states/hl/forth.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/forth.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,96 @@
++/**
++ * Name: forth
++ * Description: Forth Programming Language.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++forth_builtins =
++/* builtins */
++  /\b(abort|bye|c(atch|o(ld|ntext))|d(rop|up)|f(d(rop|up)|nip|o(r(get|th)|ver)|rot\
++|s(eal|wap)|tuck)|include|l(ink|oad)|n(ip|eeds)|o(rder|ver)|pick|ro(ll|t)|swap|t(hrow|uck)\
++|within|2(drop|nip|dup|over|tuck|swap|rot)|3dup|4dup\
++)\b/;
++
++forth_types =
++/* types */
++  /\b(base|c(ell|har)|decimal|float|hex)\b/;
++  
++forth_keywords =
++/* keywords */
++  /\b(a(bs|gain|head|lso|nd)|begin|c(ase|onstant)|d(abs|efinitions|m(ax|in)|negate|o(|ne))\
++|e(lse|nd(|case|if|of)|xit)|f(a(bs|cos(|h)|log|sin(|h)|tan(|2|h))|cos(|h)|exp(|m1)|l(n(|p1)\
++|o(g|or)|s(in(|cos|h)|qrt)|tan(|h))|m(ax|in)|negate|or|round|sqrt)|h(ere|old)|i(f|nvert)\
++|l(eave|oop)|m(ax|in|od)|n(e(gate|xt)|ot)|o(f|nly|r)|r(epeat|oot)|s(eal|ign)|then\
++|un(til|loop)|v(ariable|oc(abulary|s))|while|xor\
++)\b/;
++
++state forth extends HighlightEntry
++{
++  /* Comments. */
++  /\\\\/ {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++
++  /* keywords. */
++  forth_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  forth_types {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* Builtins support */
++  forth_builtins {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* symbols, etc. */
++  />|>=|<=|<>|!|\+|\-|\^|\/|\*|\|/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /*
++   * function definitions, with args
++   * fct_name (args...) is
++   */
++  /^(:[ \t]+)([^ ^\t]+)([ \t]*)/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($3);
++  }
++}
++
+diff -Nru enscript-1.6.4.orig/states/hl/icon.st enscript-1.6.4/states/hl/icon.st
+--- enscript-1.6.4.orig/states/hl/icon.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/icon.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,93 @@
++/**
++ * Name: icon
++ * Description: Icon Programming Language.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++icon_builtins =
++/* Builtins */
++  /\b(break|create|default|fail|initial|l(ink|ocal)|not|s(tatic|uspend))\b/;
++
++icon_types =
++/* Types */
++  /\b(char|error|function|integer|proc|procedure|real|variable)\b/;
++  
++icon_keywords =
++/* Keywords */
++  /\b(a(bs|cos|ny|rgs|sin|tan)|b(al|y)|c(a(llout|se)|enter|hdir|lose|o(llect|py|s)|set)\
++|d(e(lay|lete|tab|isplay|tor)|o)|e(lse|n(d|tab)|rrorclear|very|xit|xp)|f(ind|lush)\
++|get(|ch|che|env)|i(and|com|f|mage|nsert|or|shift|xor)|k(bhit|ey)|l(eft|ist|o(adfunc|g))\
++|m(a(ny|p|tch)|ember|ove)|n(ame|ext|umeric)|o(f|pen|rd)|p(op|os|ull|ush|ut)\
++|r(e(ad(|s)|move|name|p(eat|l)|turn|verse)|ight|tod|unerr)|s(ave|eek|eq|et|in|ort(|f)\
++|qrt|top|tring|ystem)|t(a(b(|le)|n)|hen|o|rim|ype)|u(ntil|pto)|w(h(ere|ile)|rite(|s))\
++)\b/;
++
++state icon extends HighlightEntry
++{
++  /* Comments. */
++  /#/ {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  icon_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  icon_types {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* Structure support */
++  icon_builtins {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* Symbols, etc. */
++  />|>=|:=|<=|#|=+|!|::|\+|\-|\^|\/|\*|\|/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /*
++   * Function definitions, with args
++   * fct_name (args...) is
++   */
++  /([ \t]*procedure[ \t]+)(\w+)([ \t]*)/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($3);
++  }
++}
+diff -Nru enscript-1.6.4.orig/states/hl/lua.st enscript-1.6.4/states/hl/lua.st
+--- enscript-1.6.4.orig/states/hl/lua.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/lua.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,91 @@
++/**
++ * Name: lua
++ * Description: Lua Programming Language template for Enscript.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++lua_builtins =
++/* Builtins */
++  /\b(assert|call|foreach|globals|print|require|to(number|string))\b/;
++
++lua_keywords =
++/* Keywords */
++  /\b(and|break|do|e(nd|lse(|if))|f(alse|or|unction)|i(f|n)|local\
++|or|n(il|ot)|re(peat|turn)|t(hen|rue)|until|while\
++)\b/;
++  
++state lua extends HighlightEntry
++{
++
++  /* One line comments. */
++  /\-\-|^#!/ {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  lua_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  lua_builtins {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* Symbols, etc. */
++  /+|-|\*|=|!=|==|<|>|<=|>=|~=|!/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /* Class references */
++  /([ \t])*([a-zA-Z]+[, \ta-zA-Z0-9_]*):[^=]/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++  
++  /*
++   * Function definitions, with args
++   * function fct_name (args...)
++   */
++  /^([ \t]*function[ \t]+)([a-zA-Z_][a-zA-Z_:0-9]*)([ \t]*)(\([^)]*\)[ \t]*)[ \t]*$/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print(" ");
++    language_print ($3);
++    keyword_face (true);
++    language_print ($4);
++    keyword_face (false);
++  }
++
++}
+diff -Nru enscript-1.6.4.orig/states/hl/mail.st enscript-1.6.4/states/hl/mail.st
+--- enscript-1.6.4.orig/states/hl/mail.st	2003-03-05 09:26:33.000000000 +0200
++++ enscript-1.6.4/states/hl/mail.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -27,7 +27,7 @@
+   END {
+     comment_face (true);
+   }
+-  /:/ {
++  /[ \t:]/ {
+     language_print ($0);
+     return;
+   }
+diff -Nru enscript-1.6.4.orig/states/hl/Makefile.am enscript-1.6.4/states/hl/Makefile.am
+--- enscript-1.6.4.orig/states/hl/Makefile.am	2003-03-05 09:26:33.000000000 +0200
++++ enscript-1.6.4/states/hl/Makefile.am	2006-01-09 22:06:23.000000000 +0200
[email protected]@ -38,7 +38,8 @@
+ matlab.st nroff.st objc.st outline.st pascal.st passthrough.st perl.st	\
+ postscript.st python.st pyrex.st rfc.st scheme.st sh.st skill.st	\
+ sql.st states.st synopsys.st tcl.st tcsh.st tex.st vba.st verilog.st	\
+-vhdl.st vrml.st wmlscript.st zsh.st
++vhdl.st vrml.st wmlscript.st zsh.st eiffel.st erlang.st dylan.st oz.st	\
++lua.st oberon2.st icon.st smalltalk.st forth.st sml.st php.st ruby.st
+ 
+ states = $(misc) $(styles) $(languages) $(highlightings)
+ 
+diff -Nru enscript-1.6.4.orig/states/hl/Makefile.in enscript-1.6.4/states/hl/Makefile.in
+--- enscript-1.6.4.orig/states/hl/Makefile.in	2003-03-05 09:40:07.000000000 +0200
++++ enscript-1.6.4/states/hl/Makefile.in	2006-01-09 22:05:26.000000000 +0200
[email protected]@ -188,7 +188,8 @@
+ matlab.st nroff.st objc.st outline.st pascal.st passthrough.st perl.st	\
+ postscript.st python.st pyrex.st rfc.st scheme.st sh.st skill.st	\
+ sql.st states.st synopsys.st tcl.st tcsh.st tex.st vba.st verilog.st	\
+-vhdl.st vrml.st wmlscript.st zsh.st
++vhdl.st vrml.st wmlscript.st zsh.st eiffel.st erlang.st dylan.st oz.st	\
++lua.st oberon2.st icon.st smalltalk.st forth.st sml.st php.st ruby.st
+ 
+ 
+ states = $(misc) $(styles) $(languages) $(highlightings)
+diff -Nru enscript-1.6.4.orig/states/hl/oberon2.st enscript-1.6.4/states/hl/oberon2.st
+--- enscript-1.6.4.orig/states/hl/oberon2.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/oberon2.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,111 @@
++/**
++ * Name: oberon2
++ * Description: Oberon 2 Programming Language.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++oberon2_builtins =
++/* Builtins */
++  /\b(CONST|IMPORT)\b/;
++
++oberon2_types =
++/* Types */
++  /\b(ARRAY|B(OOLEAN|YTE)|CHAR|INTEGER|LONG(|INT|REAL)|MODULE|NIL\
++|P(OINTER|ROCEDURE)|RE(AL|CORD)|SHORT(|INT))\b/;
++  
++oberon2_keywords =
++/* Keywords */
++  /\b(A(BS|ND|SH)|BEGIN|C(A(P|SE)|HR)|D(O|EC|IV)\
++|E(LS(E|IF)|N(D|TIER)|X(CL|IT))|F(ALSE|OR)|HALT|I(F|S|N(|C(|L)))\
++|L(EN|OOP)|M(AX|IN|OD)|NEW|O(F|DD|R(|D))|S(ET|IZE)|T(HEN|O|RUE|YPE)\
++|UNTIL|RE(PEAT|TURN)|VAR|W(HILE|ITH))\b/;
++
++state oberon2_comment extends Highlight
++{
++  /\*\)/ {
++    language_print ($0);
++    return;
++  }
++}
++
++state oberon2 extends HighlightEntry
++{
++  /* Comments. */
++  /\(\*/ {
++    comment_face (true);
++    language_print ($0);
++    call (oberon2_comment);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  oberon2_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  oberon2_types {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* Structure support */
++  oberon2_builtins {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* Symbols, etc. */
++  /\->|>|>=|:=|<=|#|=|!|::|\+|\-|\^|\/|\*|\|/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /*
++   * Function definitions, with args
++   * fct_name (args...) is
++   */
++  /([ \t]*PROCEDURE[ \t]+)(\w+)([ \t]*)/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($3);
++  }
++
++  /([ \t]*END[ \t]+)(\w+)([ \t]*[;\.])/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($3);
++  }
++}
+diff -Nru enscript-1.6.4.orig/states/hl/oz.st enscript-1.6.4/states/hl/oz.st
+--- enscript-1.6.4.orig/states/hl/oz.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/oz.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,89 @@
++/**
++ * Name: oz
++ * Description: Mozart/Oz Programming Language.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++oz_builtins =
++/* Builtins */
++  /\b(export|import|local|require)\b/;
++
++oz_types =
++/* Types */
++  /\b(attr|c(lass|atch)|f(eat|unctor)|nil|prop|raise|try)\b/;
++  
++oz_keywords =
++/* Keywords */
++  /\b(at|c(ase|hoice|ond)|d(e(clare|fine)|o|is)|e(lse(|case|if|of)|nd)\
++|f(inally|or|rom|un)|i(f|n)|lock|meth|not|o(f|r)|p(repare|roc)|then\
++|thread)\b/;
++  
++state oz extends HighlightEntry
++{
++
++  /* Comments. */
++  /%/ {
++    comment_face (true);
++    language_print ($0);
++    call (eat_one_line);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  oz_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  oz_types {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* Structure support */
++  oz_builtins {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* Symbols, etc. */
++  /\.\.|=[=]|<\-|\\=|\|/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /*
++   * Function definitions, with args
++   * fct_name (args...) is
++   */
++  /([ \t]*\{)(\w+)([\. \t]*)/ {
++    language_print ($1);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($3);
++  }
++
++}
+diff -Nru enscript-1.6.4.orig/states/hl/perl.st enscript-1.6.4/states/hl/perl.st
+--- enscript-1.6.4.orig/states/hl/perl.st	2003-03-05 09:32:09.000000000 +0200
++++ enscript-1.6.4/states/hl/perl.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -60,6 +60,11 @@
+ 
+ state perl extends HighlightEntry
+ {
++  /* stuff after $# is a variable, not a comment */
++  /\$#\w+/ {
++    language_print ($0);
++  }
++
+   /* Comments. */
+   /#.*$/ {
+     comment_face (true);
[email protected]@ -127,7 +132,6 @@
+ 
+   /* Variables */
+   /[$%@&]+\w+/ {
+-    keyword_face (false);
+     language_print ($0);
+   }
+ 
+diff -Nru enscript-1.6.4.orig/states/hl/smalltalk.st enscript-1.6.4/states/hl/smalltalk.st
+--- enscript-1.6.4.orig/states/hl/smalltalk.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/smalltalk.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,80 @@
++/**
++ * Name: Smalltalk
++ * Description: Smalltalk Programming Language.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++smalltalk_keywords =
++/* Keywords */
++  /\b(class|false|inspect|isNil|new|nil|not(|Nil)|out|s(elf|uper)|true\
++|do|whileTrue|whileFalse|ifTrue|ifFalse|put|to|at|add|new\
++|for)\b/ ;
++
++state smalltalk_quot_string extends Highlight
++{
++  /\\\\./ {
++    language_print ($0);
++  }
++  /[\']/ {
++    language_print ($0);
++    return;
++  }
++}
++
++state smalltalk extends HighlightEntry
++{
++
++  /* Comments. */
++  /\"/ {
++    comment_face (true);
++    language_print ($0);
++    call (c_string);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  smalltalk_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Declarations */
++  /[ \t]*\|.*\|/ {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* String constants. */
++  /[\']/ {
++    string_face (true);
++    language_print ($0);
++    call (smalltalk_quot_string);
++    string_face (false);
++  } 
++
++  /* Symbols, etc. */
++  /:=|>|>=|==|<=|<>|=|!|::|@|\+|\-|\^|\/|\*|\||\[|\]/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /*
++   * Function definitions, with args
++   * fct_name (args...) is
++   */
++  /([ \t]*)(\w+)(:[ \t]*)/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold);
++    language_print ($2);
++    face_off(face_bold);
++    function_name_face (false);
++    language_print ($3);
++  }
++
++}
+diff -Nru enscript-1.6.4.orig/states/hl/sml.st enscript-1.6.4/states/hl/sml.st
+--- enscript-1.6.4.orig/states/hl/sml.st	1970-01-01 02:00:00.000000000 +0200
++++ enscript-1.6.4/states/hl/sml.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -0,0 +1,101 @@
++/**
++ * Name: sml
++ * Description: Standard ML Programming Language.
++ * Author: Brent Fulgham <[email protected]>
++ */
++
++sml_builtins =
++/* Builtins */
++  /\b(functor|lambda|s(ig(|nature)|truct(|ure))|NONE|SOME)\b/;
++
++sml_types =
++/* Types */
++  /\b(\'(a|b|c|d)|array|bool|char|int|list|real|string|unit|vector|word)\b/;
++  
++sml_keywords =
++/* Keywords */
++  /\b(a(bs(traction|type)|nd(|also)|s|toi)|before|c(ase|oncat)|d(o|atatype)\
++|e(lse|nd|qtype|xception)|f(n|un(|sig))|handle|i(f|n(|clude|fix|fixr))\
++|l(et|ocal)|nonfix|o(|f|p(|en)|relse|verload)|print|r(aise|ec|ef)|sharing\
++|t(hen|ype)|val|w(h(ere|ile)|ith(|type)))\b/ ;
++
++state sml_comment extends Highlight
++{
++  /\*\)/ {
++    language_print ($0);
++    return;
++  }
++}
++
++state sml extends HighlightEntry
++{
++
++  /* Comments. */
++  /\(\*/ {
++    comment_face (true);
++    language_print ($0);
++    call (sml_comment);
++    comment_face (false);
++  }
++
++  /* Keywords. */
++  sml_keywords {
++    keyword_face (true);
++    language_print ($0);
++    keyword_face (false);
++  }
++
++  /* Types. */
++  sml_types {
++    type_face (true);
++    language_print ($0);
++    type_face (false);
++  }
++
++  /* Structure support */
++  sml_builtins {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  } 
++
++  /* String constants. */
++  /\"/ {
++    string_face (true);
++    language_print ($0);
++    call (c_string);
++    string_face (false);
++  }
++
++  /* Character constants. */
++  /'.'|'\\\\.'/ {
++    string_face (true);
++    language_print ($0);
++    string_face (false);
++  }
++
++  /* Symbols, etc. */
++  /:=|>|>=|==|<=|<>|=|!|::|@|\+|\-|\^|\/|\*|\||\b(quot|rem|div|mod\
++|hd|tl)\b/ {
++    reference_face (true);
++    language_print ($0);
++    reference_face (false);
++  }
++
++  /*
++   * Function definitions, with args
++   * fct_name (args...) is
++   */
++  /([ \t]*f[u]n[ \t]+)(\w+)([ \t]*)/ {
++    keyword_face (true);
++    language_print ($1);
++    keyword_face (false);
++    function_name_face (true);
++    face_on(face_bold_italic);
++    language_print ($2);
++    face_off(face_bold_italic);
++    function_name_face (false);
++    language_print ($3);
++  }
++
++}
+diff -Nru enscript-1.6.4.orig/states/hl/tcl.st enscript-1.6.4/states/hl/tcl.st
+--- enscript-1.6.4.orig/states/hl/tcl.st	2003-03-05 09:26:33.000000000 +0200
++++ enscript-1.6.4/states/hl/tcl.st	2006-01-09 22:02:28.000000000 +0200
[email protected]@ -128,7 +128,7 @@
+ |e(ntry|of|rror|v(al|ent)|x(ec|it|pr))\
+ |f(blocked|configure|ile(|event|name)|lush|o(cus|nt|r(|each|mat))|rame)\
+ |g(ets|lob(|al)|r(ab|id))|history|i(f|mage|n(cr|fo|terp))|join\
+-|l(a(bel|ppend)|i(brary|n(dex|sert)|st(|box))|length|o(ad|se|wer)\
++|l(a(bel|ppend|st)|i(brary|n(dex|sert)|st(|box))|length|o(ad|se|wer)\
+ |r(ange|eplace)|s(earch|ort))\
+ |me(nu(|button)|ssage)|op(en|tion(|s))\
+ |p(ack(|age)|hoto|id|kg_mkIndex|lace|roc|uts|wd)\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.4-rh457719.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,12 @@
+diff -up enscript-1.6.4/src/main.c.rh457719 enscript-1.6.4/src/main.c
+--- enscript-1.6.4/src/main.c.rh457719	2008-08-08 11:23:27.000000000 +0200
++++ enscript-1.6.4/src/main.c	2008-08-08 11:23:36.000000000 +0200
[email protected]@ -2001,7 +2001,7 @@ handle_options (int argc, char *argv[])
+       int i;
+ 
+       c = getopt_long (argc, argv,
+-		       "#:123456789a:A:b:BcC::d:D:e::E::f:F:gGhH::i:I:jJ:kKlL:mM:n:N:o:Op:P:qrRs:S:t:T:u::U:vVW:X:zZ",
++		       "#:123456789a:A:b:BcC::d:D:e::E::f:F:gGhH::i:I:jJ:kKlL:mM:n:N:o:Op:P:qrRs:S:t:T:u::U:vVw:W:X:zZ",
+ 		       long_options, &option_index);
+ 
+       if (c == -1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-1.6.4-rh457720.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,12 @@
+diff -up enscript-1.6.4/src/mkafmmap.c.rh457720 enscript-1.6.4/src/mkafmmap.c
+--- enscript-1.6.4/src/mkafmmap.c.rh457720	2008-08-08 11:33:47.000000000 +0200
++++ enscript-1.6.4/src/mkafmmap.c	2008-08-08 11:33:58.000000000 +0200
[email protected]@ -139,7 +139,7 @@ main (int argc, char *argv[])
+       int option_index = 0;
+       int c;
+ 
+-      c = getopt_long (argc, argv, "p:h", long_options, &option_index);
++      c = getopt_long (argc, argv, "p:hV", long_options, &option_index);
+       if (c == -1)
+ 	break;
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-CVE-2008-3863+CVE-2008-4306.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,90 @@
+--- enscript-1.6.4/src/psgen.c
++++ enscript-1.6.4/src/psgen.c	2008-10-29 10:43:08.512598143 +0100
[email protected]@ -24,6 +24,7 @@
+  * Boston, MA 02111-1307, USA.
+  */
+ 
++#include <limits.h>
+ #include "gsint.h"
+ 
+ /*
[email protected]@ -124,7 +125,7 @@ struct gs_token_st
+ 	  double xscale;
+ 	  double yscale;
+ 	  int llx, lly, urx, ury; /* Bounding box. */
+-	  char filename[512];
++	  char filename[PATH_MAX];
+ 	  char *skipbuf;
+ 	  unsigned int skipbuf_len;
+ 	  unsigned int skipbuf_pos;
[email protected]@ -135,11 +136,11 @@ struct gs_token_st
+       Color bgcolor;
+       struct
+ 	{
+-	  char name[512];
++	  char name[PATH_MAX];
+ 	  FontPoint size;
+ 	  InputEncoding encoding;
+ 	} font;
+-      char filename[512];
++      char filename[PATH_MAX];
+     } u;
+ };
+ 
[email protected]@ -248,7 +249,7 @@ static int do_print = 1;
+ static int user_fontp = 0;
+ 
+ /* The user ^@font{}-defined font. */
+-static char user_font_name[256];
++static char user_font_name[PATH_MAX];
+ static FontPoint user_font_pt;
+ static InputEncoding user_font_encoding;
+ 
[email protected]@ -978,7 +979,8 @@ large for page\n"),
+ 			FATAL ((stderr,
+ 				_("user font encoding can be only the system's default or `ps'")));
+ 
+-		      strcpy (user_font_name, token.u.font.name);
++		      memset  (user_font_name, 0, sizeof(user_font_name));
++		      strncpy (user_font_name, token.u.font.name, sizeof(user_font_name) - 1);
+ 		      user_font_pt.w = token.u.font.size.w;
+ 		      user_font_pt.h = token.u.font.size.h;
+ 		      user_font_encoding = token.u.font.encoding;
[email protected]@ -1444,7 +1446,7 @@ read_special_escape (InputStream *is, To
+ 	  buf[i] = ch;
+ 	  if (i + 1 >= sizeof (buf))
+ 	    FATAL ((stderr, _("too long argument for %s escape:\n%.*s"),
+-		    escapes[i].name, i, buf));
++		    escapes[e].name, i, buf));
+ 	}
+       buf[i] = '\0';
+ 
[email protected]@ -1452,7 +1454,8 @@ read_special_escape (InputStream *is, To
+       switch (escapes[e].escape)
+ 	{
+ 	case ESC_FONT:
+-	  strcpy (token->u.font.name, buf);
++	  memset  (token->u.font.name, 0, sizeof(token->u.font.name));
++	  strncpy (token->u.font.name, buf, sizeof(token->u.font.name) - 1);
+ 
+ 	  /* Check for the default font. */
+ 	  if (strcmp (token->u.font.name, "default") == 0)
[email protected]@ -1465,7 +1468,8 @@ read_special_escape (InputStream *is, To
+ 		FATAL ((stderr, _("malformed font spec for ^@font escape: %s"),
+ 			token->u.font.name));
+ 
+-	      strcpy (token->u.font.name, cp);
++	      memset  (token->u.font.name, 0, sizeof(token->u.font.name));
++	      strncpy (token->u.font.name, cp, sizeof(token->u.font.name) - 1);
+ 	      xfree (cp);
+ 	    }
+ 	  token->type = tFONT;
[email protected]@ -1544,7 +1548,8 @@ read_special_escape (InputStream *is, To
+ 	  break;
+ 
+ 	case ESC_SETFILENAME:
+-	  strcpy (token->u.filename, buf);
++	  memset  (token->u.filename, 0, sizeof(token->u.font.name));
++	  strncpy (token->u.filename, buf, sizeof(token->u.filename) - 1);
+ 	  token->type = tSETFILENAME;
+ 	  break;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-doublefree.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,15 @@
+diff -up enscript-1.6.4/src/main.c.doublefree enscript-1.6.4/src/main.c
+--- enscript-1.6.4/src/main.c.doublefree	2008-08-08 11:10:07.000000000 +0200
++++ enscript-1.6.4/src/main.c	2008-08-08 11:11:51.000000000 +0200
[email protected]@ -1714,8 +1714,9 @@ name             width\theight\tllx\tlly
+ 	      is_close (&is);
+ 	    }
+ 
+-	  /* Clean up toc file. */
+-	  fclose (toc_fp);
++	  else
++	    /* Clean up toc file. */
++	    fclose (toc_fp);
+ 	}
+ 
+       /* Give trailer a chance to dump itself. */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-solaris-build.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,16 @@
+diff -urN enscript-1.6.4/configure.in enscript-1.6.4.new/configure.in
+--- enscript-1.6.4/configure.in	2003-03-05 07:26:16.000000000 +0000
++++ enscript-1.6.4.new/configure.in	2011-01-28 13:53:00.246166007 +0000
[email protected]@ -25,9 +25,9 @@
+   fi
+ )
+ 
+-if test "X$CC" = "X"; then
++#if test "X$CC" = "X"; then
+   AC_PROG_CC
+-fi
++#fi
+ 
+ AC_ISC_POSIX
+ AM_C_PROTOTYPES
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/enscript/patches/enscript-wrap_header.patch	Wed Jan 23 12:17:32 2013 -0800
@@ -0,0 +1,121 @@
+--- enscript-1.6.1/lib/simple.hdr.wrap_header	1997-03-03 09:00:08.000000000 +0100
++++ enscript-1.6.1/lib/simple.hdr	2007-02-12 12:57:02.000000000 +0100
[email protected]@ -1,50 +1,68 @@
+-% 
+-% Default simple header.
+-% Copyright (c) 1995 Markku Rossi.
+-% Author: Markku Rossi <[email protected]>
+-%
+-
+-%
+-% This file is part of GNU enscript.
+-% 
+-% 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 2, 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
+-% along with this program; see the file COPYING.  If not, write to
+-% the Free Software Foundation, 59 Temple Place - Suite 330,
+-% Boston, MA 02111-1307, USA.
+-%
+-
+-% -- code follows this line --
+-%Format: fmodstr	$D{%a %b %d %H:%M:%S %Y}
+-%Format: pagenumstr	$V$%
+-
+-/do_header {	% print default simple header
+-  gsave
+-    d_header_x d_header_y HFpt_h 3 div add translate
+-
+-    HF setfont
+-    user_header_p {
+-      5 0 moveto user_header_left_str show
+-
+-      d_header_w user_header_center_str stringwidth pop sub 2 div
+-      0 moveto user_header_center_str show
+-
+-      d_header_w user_header_right_str stringwidth pop sub 5 sub
+-      0 moveto user_header_right_str show
+-    } {
+-      5 0 moveto fname show
+-      45 0 rmoveto fmodstr show
+-      45 0 rmoveto pagenumstr show
+-    } ifelse
+-
+-  grestore
+-} def
++% 
++% Default simple header.
++% Copyright (c) 1995 Markku Rossi.
++% Author: Markku Rossi <[email protected]>
++%
++% Modified: Chris Josefy, USA, MAY 2006
++%  + Added line wrapping to header to work more like AIX enscript
++%  + This assumes that one does not change the header font size from the default
++%  + This also assumes that the line only wraps once
++
++%
++% This file is part of GNU enscript.
++% 
++% 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 2, 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
++% along with this program; see the file COPYING.  If not, write to
++% the Free Software Foundation, 59 Temple Place - Suite 330,
++% Boston, MA 02111-1307, USA.
++%
++
++% -- code follows this line --
++%Format: fmodstr	$D{%a %b %d %H:%M:%S %Y}
++%Format: pagenumstr	$V$%
++%HeaderHeight: 44
++
++/do_header {	% print default simple header
++  gsave
++    d_header_x d_header_y HFpt_h 3 div add translate
++
++    HF setfont
++    user_header_p {
++      5 0 moveto user_header_left_str show
++
++      d_header_w user_header_center_str stringwidth pop sub 2 div
++      0 moveto user_header_center_str show
++
++      d_header_w user_header_right_str stringwidth pop sub 5 sub
++      0 moveto user_header_right_str show
++    } {
++      fname length fmodstr length add pagenumstr length add 95 6 idiv add d_header_w 6 idiv le{
++        5 0 moveto fname show
++        45 0 rmoveto fmodstr show
++        45 0 rmoveto pagenumstr show
++      } {
++        5 0 moveto fmodstr show
++        45 0 rmoveto pagenumstr show
++        fname length d_header_w 6 idiv idiv 1 add 10 mul 5 exch moveto
++        1 1 fname length d_header_w 6 idiv idiv
++        {
++          dup fname exch 1 sub d_header_w 6 idiv mul d_header_w 6 idiv getinterval show
++          5 exch 10 mul fname length d_header_w 6 idiv idiv 1 add 10 mul exch sub moveto
++        } for
++        5 10 moveto
++        fname fname length d_header_w 6 idiv idiv d_header_w 6 idiv mul dup fname length exch sub getinterval show
++      }ifelse
++    }ifelse
++
++  grestore
++} def