   Copyright (C) 1989, 1992, 1993, 1994 Aladdin Enterprises.  All rights reserved.
  
  This file is part of Aladdin Ghostscript.
  
  Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  or distributor accepts any responsibility for the consequences of using it,
  or for whether it serves any particular purpose or works at all, unless he
  or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  License (the "License") for full details.
  
  Every copy of Aladdin Ghostscript must include a copy of the License,
  normally in a plain ASCII text file named PUBLIC.  The License grants you
  the right to copy, modify and redistribute Aladdin Ghostscript, but only
  under certain conditions described in the License.  Among other things, the
  License requires that the copyright notice and this notice be preserved on
  all copies.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

This file, NEWS, describes the changes in the most recent releases of
Ghostscript.  Changes in older releases are described in history.doc.

For an overview of Ghostscript and a list of the documentation files, see
README.

Within each release, news appears in the following order: Documentation,
Procedures, Utilities, Drivers, Platforms, Fonts, Interpreter, Streams
(included under Interpreter through release 2.9.9), Library.  Changes
marked with a * were made available as patches to the previous primary or
secondary release.

Version 3.12 (9/29/94)
============

This is another bug fix release, the first Level 2 release that we believe
is reasonably reliable.

Documentation
-------------

Adds some text warning about making copies of the makefile.  (make.doc)

Procedures
----------

Fixes bugs:
	- There were a number of unnecessary dependencies on $(MAKEFILE) in
gs.mak, left over from before the existence of gconfigv.h.  (gs.mak)
	- JPEGSRC was defined in gs.mak rather than in jpeg.mak.  (gs.mak,
jpeg.mak)

Changes the version numbering scheme back to A.BC, since people seem to be
adapting to the change, and this allows using the version number directly
as a MS-DOS directory name.  (gconfig.c, gdevtfax.c, gs.c, gs_init.ps)

Updates the JPEG library to version 5 (official release) of the IJG code.
(jpeg/*, jpeg.mak)

Drivers
-------

Fixes bugs:
	- The TIFF/F driver put out invalid PageNumber and Software
entries.  (gdevtifs.h, gdevtfax.c)
	- The TIFF/F and fax Group 3 2-D drivers used K=3 and K=5 instead
of K=2 and K=4.  (gdevtfax.c)
	- The TIFF/F and fax Group 3 2-D drivers emitted improperly aligned
output.  (See under Streams below.)
	- The MS Windows driver didn't resize the window properly in
response to changing the device parameters.  (gdevmswn.c)

Because of complementary bugs in various C compilers, changes all the
non-printer devices to use a different set of macros.  (gdevmem.h,
gdevpcfb.h, gdevprn.h, gdevsvga.h, gxdevice.h, gdev{3b1, bgi, herc, l256,
pe, pm, sun, vglb, wddb, wdib, wprn, x}.c, gsdevice.c, gxacpath.c,
gxclip2.c, gxcpath.c, gxpcmap.c, zupath.c)

Changes the X11 driver to ignore the "margins" specified by Ghostview.
This is apparently necessary for Ghostview to handle landscape display
properly.  (gdevxini.c)

Adds a WindowID parameter to the X11 device, to allow setting the window
for the output.  (gdevx.h, gdevx.c, gdevxini.c)

Platforms
---------

Fixes bugs:
	- The definition of BEGINFILES in os2.mak occurred too late in the
file to have the desired effect.  (os2.mak)

Interpreter
-----------

Fixes bugs:
	- Updating the list of allocated file objects at a restore didn't
clear the prev pointer of the new head, which could cause the garbage
collector to encounter an invalid pointer.  (Bug introduced by .forgetsave
in 3.0.3.)  (zfile.c)

Streams
-------

Fixes bugs:
	- The CCITTFaxEncode filter with K > 0 and EncodedByteAlign = true
incorrectly aligned the 1-D/2-D bit as the last bit of a byte, rather than
the first bit.  (scfx.h, scfe.c)
	- eexec could loop indefinitely under certain conditions.
(seexec.c)
	- eexec's algorithm for recognizing text vs. binary encoding didn't
work properly in some cases that don't conform to the Adobe Type 1 Font
Format documentation.  (seexec.c)
	- Closing a stream didn't clear out the strm and state pointers,
which could cause invalid accesses by the garbage collector.  (stream.c)

Library
-------

Fixes bugs:
	- fill_loop could loop indefinitely under certain conditions.
(Introduced by a bug fix in 3.1.)  (gxfill.c)
	- fill/eofill sometimes failed to paint parts of a region.
(Introduced by a bug fix in 3.1.1.)  (gxfill.c)
	- Non-convex clipping paths sometimes omitted thin horizontal
slivers of the region.  (Probably introduced by the "thin graphics" fix in
3.1.)  (gxacpath.c)

Version 3.1.1 (9/25/94)
=============

This is primarily a bug fix release.  It was originally intended for some
commercial licensees, but beta testers found too many problems with it.

Documentation
-------------

Fixes bugs:
	- NEWS didn't indicate that there was a non-backward-compatible
change in the gx_device structure -- specifically, that l_margin,
b_margin, r_margin, and t_margin were replaced by macros named
dev_l_margin(dev), etc.  (news)

Describes the two-phase commit requirement for device put_params
procedures.  (drivers.doc, gsparam.h)

Procedures
----------

Fixes bugs:
	- The new S macro in genarch.c didn't work on compilers that do
macro substitution within string constants (which is forbidden by the ANSI
standard).  (genarch.c)

Drivers
-------

Fixes bugs:
	- Driver put_params implementations didn't observe a "two-phase
commit" discipline; this could lead to the current device in the graphics
state being closed, and other inconsistencies.  (gsparam.h, gxdevice.h,
iparam.h, gdevbit.c, gdevcdj.c, gdevmswn.c, gdevpcfb.c, gdevpm.c,
gdevprn.c, gdevx.c, gsdevice.c, gsdparam.c, zdevice.c, ziodev2.c, zmisc2.c)
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, it only affects
put_params implementations, of which there are few.

NOTE THE NON-BACKWARD-COMPATIBLE CHANGE IN THE gx_device STRUCTURE UNDER
'Documentation' ABOVE.  (gdevescp.c, gdevsj48.c, gdevsppr.c, gdevxini.c)

Platforms
---------

Ensures that the Unix makefiles all include all the variants of TIFF/F and
fax drivers.  (ansihead.mak, cc-head.mak, gcc-head.mak)

Interpreter
-----------

Fixes bugs:
	- Most of the contents of statusdict were missing when
running a Level 2 system in Level 1 mode.  (zmisc2.c)

Version 3.1 (9/20/94)
===========

This release finally includes a usable subset implementation of
setpagedevice, including all the machinery needed to address the
long-standing "margins" problems.

Documentation
-------------

Fixes bugs:
	- t_oparray objects weren't identified as behaving differently
depending on whether they were marked executable.  (iref.h)
	- drivers.doc had gx_color_value instead of gx_color_index in
the description of color mapping.  (drivers.doc)

Updates drivers.doc to reflect the change from static_procs to
std_procs in the gx_device structure.  (drivers.doc)

Procedures
----------

Fixes bugs:
	- The commands for building the JPEG library used rm instead
of rm -f.  (jpeg.mak)

Drivers
-------

Fixes bugs:
	- The X Windows driver hadn't been updated to reflect some
name changes in members of the gx_color_info structure.  (gdevx.h,
gdevx.c, gdevxini.c)

Changes all non-printer drivers so that they use the new std_device_body
macros.  (gdev*.c)

Adds a print_page_copies procedure for printer drivers, allowing the
driver to receive num_copies.  (gdevprn.h, gdevprn.c)

Interpreter
-----------

Fixes bugs:
	- ref_memory_enum/reloc_ptrs were declared inconsistently.
(ialloc.c)
	- If the operand of restore was invalid, the restore did
nothing, instead of giving a typecheck.  (zvmem.c)
	- In Level 2, the margins and setmargins compatibility
operators were defined incorrectly in terms of current/setpagedevice.
(gs_lev2.ps)

Enables .makeoperator to make local operators as well as global ones.
(opdef.h, iinit.c, zmisc.c, zpacked.c)

Finishes implementing the TransferFunction entry in halftone
dictionaries.  (zht1.c, zht2.c)

Adds .set/currentfilladjust operators for access to the fill
adjustment parameter in the graphics state.  (zgstate.h)

Removes the deviceinitialmatrix operator.  (zdevice.c)

Changes defaultmatrix from a procedure to an operator.  (zmatrix.c)

Sets the fill adjustment to 0.5 for high-resolution devices, effectively
implementing Adobe's any-part-of-pixel filling rule.  (gs_init.ps)

Implements a small but useful subset of setpagedevice.  (gs_lev2.ps)

Streams
-------

Fixes bugs:
	- The eexec decoder incorrectly concluded that its data was
in hex form if the first data character was whitespace.  (seexec.c)

Library
-------

Fixes bugs:
	- Thin graphics (e.g., lines or rectangles) with small angles
relative to the X axis rendered with many points missing.  (gxdraw.c,
gxfill.c)
	- The character cache rejected oversampled characters if the
scaled-up size was too large, even if the scaled-down size wasn't.
(gxchar.h, gschar.c, gxccache.c, gxccman.c)
	- A call on sqrt with an integer argument didn't promote it
explicitly to double, which is required for non-ANSI compilers.
(gshtscr.c)

Finishes implementing the TransferFunction entry in halftone
dictionaries.  (gsht1.c)

Modifies the character oversampler so it can produce gray scale
output instead of a 1-bit mask.  We don't actually make use of this
ability yet.  (gxccman.c)

Adds gs_set/currentfilladjust for access to the fill adjustment
parameter in the graphics state.  (gsstate.h, gsstate.c)

Changes the names of the last few routines beginning with gz_ to
begin with gx_ instead.  (gzdraw.h => gxdraw.h, gsimage*.c, gxdraw.c,
gxfill.c, gxstroke.c)

Properly implements the PageSize, Margins, .HWMargins, and ImagingBBox
device parameters for all devices.  (gscoord.c, gsdparam.c, gspath2.c)
Implements the NumCopies device parameter for printer devices.
(gdevprn.c)

Implements std_device_body macros to help insulate statically initialized
non-printer devices from future changes in the gx_device structure.
(gxdevice.h, ... many .c files ...)

Version 3.0.3 (9/16/94)
=============

This is primarily a bug fix release; it also implements most of the
remaining Level 2 loose ends (except for setpagedevice).

Documentation
-------------

Changes code that refers to "Ghostscript" to use the correct product
name from gs_product.  (gs.mak, gdevpbm.c, gdevsun.c, gswppm.c)

Documents the new .forgetsave operator.  (language.doc)

Clarifies the distinction between commercial licensing and single-copy
end-user sales.  (readme)

Procedures
----------

Fixes bugs:
	- The compilation rule for gdevadmp.c was missing from the
makefile.  (devs.mak)

Changes the version numbering scheme back to A.B.C, since too many
people got confused by the change to A.BC.  (gconfig.c, gs.c,
gs_init.ps)

Adds a -dNOGC switch to prevent the garbage collector from being
enabled.  (gs_init.ps)

Utilities
---------

Removes the ps2image utility, since the new psmono driver replaces it.

Drivers
-------

Fixes bugs:
	- The TIFF drivers incorrectly assumed that short and ulong
were the same size as TIFF_short and TIFF_ulong, causing problems on
64-bit systems.  (gdevtfax.c)
	- The EGA/VGA driver didn't do gray halftones properly if it
was configured as a monochrome or 8-color device.  (gdevpcfb.h)
	- The comment in gdevevga.c incorrectly identified the file
as gdevpcfb.c.  (gdevevga.c)

Changes the PC display drivers to save and restore more of the BIOS
state.  (gdevpcfb.h, gdevevga.c, gdevpcfb.c, gdevsco.c)

Adds a new psmono driver that does the same thing as ps2image, faster
and more conveniently.  (gdevpsim.c)

Replaces the X11 driver with the one from 3.01, since the color
handling rewrite in 3.02 introduced serious bugs.  (gdevx.h, gdevx.c,
gdevxini.c)

Platforms
---------

Changes the definition of gx_no_color_index to work around one of the
bugs in the SGI Irix compiler.  (gxdcolor.h)

Rewrites the installation commands in unix-end.mak so they don't have
very long lines.  (unix-end.mak)

Fonts
-----

Fixes bugs:
	- Fonts that used 2- or 4-element arrays in the Metrics dictionary
interpreted the width and side bearing interchanged with each other.
(gs_type1.ps)
	- Setting FONTPATH on the command line didn't work.  (gs_fonts.ps)

Streams
-------

Fixes bugs:
	- The stream position wasn't updated properly if sgets
crossed a buffer boundary.  (stream.c)

Extends the BoundedHuffman filters so they can encode and decode runs of
zeros specially, and so they mark and detect EOD.  (sbhc.h, shc.h, sbhc.c,
zfilter2.c)

Provides an alternate implementation of file streams which doesn't use
stdio buffering and which works around the System V "interrupted system
call" problem.  (stream.c, sfile.c, sfileno.c)

Increases the maximum LZW output code from 3000 to 4095.  (slzwe.c)

Interpreter
-----------

Fixes bugs:
	- Opening a filter on a file of the wrong access type (read
vs. write) didn't cause an error.  (stream.h, sbasic.c, zfile.c, zfileio.c)
	- save performed an extra, unnecessary gsave.  (zvmem.c)
	- sethalftone always gave a /undefined error.  (zht2.c)
	- eexec decryption read too much data from the input -- in
Level 2, it isn't allowed to read 512 characters ahead.  (sfilter.h,
strimpl.h, seexec.c, sstring.c, zfileio.c, zmisc1.c)
	- The scanner was too aggressive about allocating additional
space for strings on small machines.  (iscan.c)
	- The AccurateScreens flag in Type 1 and Type 2 halftone
dictionaries was being ignored.  (zht2.c)
	- The Level 2 definition of margins in statusdict didn't
allow for Margins being undefined in the current page device.
(gs_lev2.ps)
	- The Interpolate flag was being ignored in image
dictionaries.  [implemented in library]
	- The TransferFunction option was being ignored in halftone
dictionaries.  (zht2.c)
	- Type 5 halftones usually didn't work, because they called
the wrong (or an invalid) spot function.  (zht2.c)

Implements a .forgetsave operator that effectively causes a given save (and
all more recent saves) to disappear.  (isave.h, stream.h, isave.c, zfile.c,
zvmem.c)

Library
-------

Fixes bugs:
	- In the 1-operand form of the image operator, a Decode value of [1
0] with 8-bit sample values and a single data source was treated the same
as [0 1].  (gsimage1.c)
	- Some Monotype fonts put a callsubr between an OtherSubr call and
the following 'pop' opcodes (which the Adobe documentation forbids); The
Type 1 font interpreter gave an invalidfont error rather than allowing
this.  (gxtype1.h, gstype1.c)
	- Patterns didn't implement XStep and YStep properly.
(gxpcolor.h, gspcolor.c, gxclip2.c)
	- Clipping regions were sometimes 1 pixel too small at the edges;
this could cause vertical and horizontal lines produced by certain Windows
drivers to disappear.  (gzpath.h, gxacpath.c, gxcpath.c, gxfill.c)
	- Oversampling cached rotated characters produced very bad
results (many dropouts).  (gschar.c)
	- Rendering a DeviceGray color on a DeviceCMYK device applied
the transfer function to all 4 components, not just to the K
component.  (gxcmap.c)
	- A screen specified with setcolorscreen didn't take effect
properly on CMYK devices.  (gsht.c)

Implements the Interpolate option for images.  Currently this is only
implemented for portrait-orientation images (no rotation, skewing, or
X-reflection).  (gscspace.h, gximage.h, gscie.c, gscolor.c, gscolor1.c,
gscolor2.c, gspcolor.c, gxcmap.c, gsimage.c, gsimage2.c, gsimage3.c)

Implements AccurateScreens, but only in the form of a larger limit on
the size of a halftone super-cell.  (gxht.h, gsht.c, gsht1.c)

Starts to implement the TransferFunction option for halftones.
(gzht.h, gzstate.h, gsht.c, ...too many others to list...)

Version 3.02 (8/30/94)
============

This is another bug fix release.  It was distributed only to a few people,
since the new X Windows color mapping code is not reliable yet.

Documentation
-------------

Fixes bugs:
	- make.doc, but not unixtail.mak, called for setting PLATFORM=unix_
on SVR4 platforms.  (unixtail.mak)
	- drivers.doc contained some wording that suggested that
Ghostscript always used RGB colors internally.  (drivers.doc)
	- The definition of gx_device in drivers.doc had gotten out of sync
with gxdevice.h.  (drivers.doc)
	- README claimed that Ghostscript is not compatible with the
VAX/VMS DEC C compiler, which is no longer true.  (readme)

Adds a new section on printer drivers to drivers.doc.  (drivers.doc)

Adds a large number of new display boards to the 800x600 SVGA section of
use.doc.  (use.doc)

Adds a bug report form to the README file.  (readme)

Notes that OSF/1 AXP systems require changing the definition of INSTALL
from install to installbsd.  (make.doc)

Procedures
----------

Removes -Wno-uninitialized from the gcc flags, and fixes all the places (in
Aladdin's code only) that need to be fixed to pacify gcc after doing this.
(gcc-head.mak, gdevgif.c, gdevmem2.c, gdevpcl.c, gs.c, gsht1.c, gsimpath.c,
gsutil.c, gxclread.c, gxpcopy.c, gxstroke.c, idict.c, iscannum.c, stream.c,
zdevice2.c) (NOT FINISHED YET)

Adds a FAKEFONTS switch that makes fake entries in FontDirectory for
unloaded fonts, for the benefit of programs that think they can find all
the available fonts by scanning FontDirectory.  (gs_fonts.ps, gs_init.ps)

Utilities
---------

Fixes bugs:
	- ps2epsi didn't work, because setdevice now erases the page.
(ps2epsi.ps)
	- ps2epsi didn't work, because -dNODISPLAY installs a null device
with 0 width and height.  The fix -- to remove the -dNODISPLAY -- is not
satisfactory, because it opens an unnecessary window.  (ps2epsi)

Drivers
-------

Fixes bugs:
	- gdev_fax_open was incorrectly declared static in gdevtfax.c,
causing the extern reference in the dfax drivers not to be resolved.
(gdevtfax.c)
	- devs.mak included a duplicate definition of gdevmswn_h.
(devs.mak)
	- The fax drivers didn't link properly in Level 1 systems, because
shc.c was omitted from their dependency list.  (gs.mak, devs.mak)
	- The TIFF/F drivers didn't set RowsPerStrip properly.
(gdevtfax.c)
	- The TIFF/F drivers didn't byte-align the EOL properly.  (scfx.h,
gdevdfax.c, gdevtfax.c, scfe.c, zfilter2.c)
	- The rule for compiling gdevpccm.c incorrectly specified
dependency on gs.h rather than gx.h.  (devs.mak)
	- The rule for compiling gdevtfax.c didn't include time_.h as a
dependency.  (devs.mak)
	- The mode 2 compression routine for the DeskJet/LaserJet printers
was broken.  (gdevpcl.c)

Removes the -O0 from the compilation rule for gdevsco.c, since it was
misplaced to begin with.  (devs.mak)

Adds a maxDynamicColors X resource to control dynamic allocation in the
color map.  Replaces the X color lookup algorithms with completely new
ones, for a substantial performance gain.  (gdevx.h, gdevx.c, gdevxini.c)

Adds PageNumber, Software, and DateTime entries to the TIFF/F drivers.
(gdevtifs.h, gdevtfax.c)

Changes the margins for the LaserJet 4 to 0.  (gdevdjet.c)

Adds a user-contributed LaserJet 4 driver that does Floyd-Steinberg
dithering.  (gdevcdj.c)

Platforms
---------

Fixes bugs:
	- The exit codes for Ghostscript should be different on VMS.
(iastate.h, gs.c, gsmain.c, igc.c, igcref.c)
	- The VMS DEC C compiler declares malloc and free in stdlib.h, and
delete and unlink in stdlib.h.  (malloc_.h, stdio_.h)
	- st_prn_device wasn't defined, which upset the VMS linker even
though there were no references.  (gdevprn.h)
	- stdpre.h didn't bring in the right headers when running gcc on
SCO Unix, causing compilation warnings/errors.  (stdpre.h)
	- The definition of rename in gp_sysv didn't include const for the
arguments.  (gp_sysv.c)
	- The definition of gettimeofday in gp_sysv didn't return any
value.  (gp_sysv.c)
	- time_.h didn't work on MS-DOS systems.  (time_.h)
	- math_.h didn't include <math.h> when compiling with gcc on VMS
systems.  (math_.h)
	- DesqView/X doesn't have a 'cat' command, which caused problems in
the linking step.  (dvx-tail.mak)

Changes the definitions of popen in gdevpipe.c and gp_unix.c so they don't
specify the argument list.  This is an attempt to get around the fact that
there is no easy way to detect whether the available header files declare
popen correctly (with const arguments), incorrectly (with non-const
arguments), or not at all.  (gdevpipe.c, gp_unix.c)

Replaces VMS.MAK, VMS-CC.MAK, and VMS-AXP.MAK with new versions provided by
a user.  (vms.mak, vms-cc.mak, vms-axp.mak)

Changes the 16-bit Borland makefiles so their standard configuration is
Level 1 plus color.dev (CMYK color and colorimage).  (bc.mak, bcwin.mak)

Fonts
-----

Fixes bugs:
	- cfonts.mak still referred to some .gsf files that have been
replaced by .pfa files.  (cfonts.mak)
	- Compiled fonts got entered into FontDirectory, but didn't get
registered as resources.  (gs_ccfnt.ps)
	- The Cyrillic, Kana, Hershey .gsf, and URW fonts didn't include a
necessary systemdict begin/end, which caused them to fail in badly designed
environments.  (fonts/f*.gsf, fonts/h*.gsf, fonts/?0*.gsf)

Changes the default target directory in cfonts.mak from fonts/c to .;
changes the names of the Zapf Chancery compiled font procedures from c* to
zc*.  (cfonts.mak)

Adds more fonts from the Adobe Type Manager package for MS Windows to
Fontmap.ATM.  (fontmap.atm)

Adds the entire set of 35 standard fonts to the ccfonts feature in gs.mak;
removes all the compilation rules for compiled fonts, since these rules are
in cfonts.mak already.  (gs.mak)

Interpreter
-----------

Fixes bugs:
	- kshow executed a null, rather than the correct procedure, between
the characters of the string, and got a typecheck error at the end.
(zchar.c)
	- MultiMaster fonts computed their side bearing and width
incorrectly, producing incorrect output.  (zchar1.c)
	- There was no structure definition for gs_type1_state, so a GC
during the execution of an OtherSubrs procedure could scramble pointers in
the saved state.  (zchar1.c, zfont1.c; also affects library, see below)
	- kshow didn't work properly if the kerning procedure changed the
depth of the operand or dictionary stack.  (zchar.c)
	- If the element count for roll was too large by only 1 or 2, the
result was a crash rather than a rangecheck.  (zstack.c)
	- restore didn't undo currentgstate.  (igstate.h, store.h,
gsstate.c, zdevice2.c, zdps1.c, ztype.c)
	- The scanner didn't set the local bit properly in a suspended
state.  (iscan.c)
	- copypage disregarded #copies.  (gs_init.ps)
	- An incorrectly declared pointer led to addressing faults on
16-bit systems.  (zchar1.c)
	- The cache for Separation colors was allocated with one element
too few.  (zcsindex.c)

Changes `executive' so that if an error other than EOF occurs in the
reading of the statement, the interpreter prints the error message, but
control remains in the executive loop.  (This isn't a very good fix; a
better one will require refactoring executive / execute / run.)
(gs_init.ps)

Changes dictionary undo saving to use the new ref_must_save macro [internal
change only].  (idict.c)

Moves configuration definitions from iinit.c to gconfig.c.  (gcdefs.h,
interp.h, gconfig.c, gs.c, iinit.c, zmisc2.c, gs.mak)

Moves =string from systemdict to userdict for Adobe compatibility.
(gs_init.ps)

Starts to implement the Interpolate flag in image dictionaries.  See under
Library below for restrictions.  (zpaint.c, zimage2.c)

Streams
-------

Fixes bugs:
	- stream_compact attempted to compact a read-only string being used
as the data source of a filter.  (sbasic.c, stream.c)

Adds an EncodedEOLAlign flag to the CCITTFaxEncode stream, to allow direct
generation of TIFF/F output.  (scfx.h, scfe.c, zfilter2.c)

Library
-------

Fixes bugs:
	- There was no structure definition for gs_type1_state, so a GC
during the execution of an OtherSubrs procedure could scramble pointers in
the saved state.  (gxfont1.h, gxtype1.h, gstype1.c, gxhint2.c)
	- A couple of calls had to discard const, but didn't include the
necessary cast.  (gxpcmap.c)
	- makeimagedevice refused to accept an empty image.  (gsdevice.c)
	- The extra parentheses around arguments in memory_.h caused some
compilers to fail.  (memory_.h)
	- Floating point overflows during coordinate conversion terminated
Ghostscript.  (gxfarith.h, gxfixed.h, gsmatrix.c, gsmisc.c)
	- Accents still weren't getting placed properly on characters
created with seac.  (gstype1.c, gxhint2.c)
	- The SGI C compiler couldn't handle the (perfectly legal)
definitions of dev_init_[open_]misc.  (gxdevice.h)
	- string_.h caused some problems with gcc on some versions of
Solaris.  (string_.h)
	- The halftone levels for color screens were computed incorrectly.
(gzht.h, gxdither.c)
	- Color screens sometimes had vertical stripes of solid color
interspersed.  (gxcht.c)
	- Colors could get mapped incorrectly if a compiler aggressively
(and incorrectly) reordered the computation of procedure arguments
involving the unit_frac macro.  (gxcmap.c)
	- setcachedevice[2] insisted that the corners of the bounding box
be given in the correct order, i.e., llx < urx and lly < ury.  (gschar.c)
	- The image operator gave a limitcheck on unrotated 1-bit-per-pixel
images whose width in device coordinates exceeded 65529.  (gsimage.c)
	- The garbage collector didn't trace the input data of an
in-progress image operator correctly.  (gsimage.c)

Changes the max_rgb and dither_rgb members of gx_device_color_info to
max_color and dither_colors, since Ghostscript now uses these for CMYK
devices as well.  Also changes dither_gray to dither_grays.  (gdevmem.h,
gdevprn.h, gxdevice.h, gdevbit.c, gdevcdj.c, gdevprn.c, gdevxini.c,
gsdparam.c, gxcht.c, gxcmap.c)

Starts to implement the Interpolate option for images.  Currently this is
only implemented for image, not imagemask, and only for rotations that are
multiples of 90 degrees (possibly with reflection).  (gsimage.h,
gsiscale.h, gximage.h, gsimage.c, gsimage1.c, gsiscale.c)

Starts to implement XStep and YStep in pattern dictionaries.  (gxdcolor.h,
gxpcolor.h, gspcolor.c, gxpcmap.c)

Version 3.01 (8/14/94)
============

This is a patch release to fix early problems in release 3.0, and to clean
up a few known loose ends.

Documentation
-------------

Fixes bugs:
	- language.doc still documented the devicename procedure, which has
been withdrawn.  (language.doc)
	- drivers.doc didn't specify under what circumstances each
procedure could be called.  (drivers.doc)
	- current.doc said that setcachedevice and makeimagedevice wouldn't
accept packed arrays, but neither of these operators takes any array
arguments.  (current.doc)
	- current.doc said that definefont didn't interact properly with
the resource machinery, which apparently is no longer true.  (current.doc)
	- make.doc incorrectly gave the name of the DVX makefile as
dvx-djg.mak rather than dvx-gcc.mak.  (make.doc)
	- In one place, devices.doc incorrectly used -sBitsPerPixel= rather
than -dBitsPerPixel=.  (devices.doc)

Notes that a kernel bug in SCO Unix makes Ghostscript not work correctly in
some circumstances.  (use.doc)

Procedures
----------

Fixes bugs:
	- devs.mak incorrectly referred to gdevjetp.c instead of
gdev3852.c.  (devs.mak)
	- The obsolete file gsprops.c was accidentally included in the
fileset.

Changes the version numbering scheme from A.BCC to A.B[C].  E.g., this
release will be 3.01, not 3.001.  (gs_init.ps, gs.c, iinit.c)

Adds the LaserJet 4 driver to all makefiles that already include the
LaserJet 3 driver.  (*.mak)

Adds the BJ-200 driver to all makefiles that already included the BJ-10e
driver.  (*.mak)

Splits the Unix 'install' target into install-exec and install-data.  Moves
the executable scripts from gsdatadir to a new directory scriptdir, which
defaults to bindir.  (ansihead.mak, cc-head.mak, gcc-head.mak,
unix-end.mak)

Utilities
---------

Fixes bugs:
	- genconf had fixed buffer sizes built into it, which it could
overrun its working storage without checking.  (genconf.c)

Removes RCS or SCCS headers from two utility files.  (pj-gs.sh,
printafm.ps)

Drivers
-------

Fixes bugs:
	- The new dfaxhigh and dfaxlow drivers didn't set
state.EncodedByteAlign to false.  (gdevdfax.c)
	- The sunview driver assumed that the device would be open before
map_rgb_color was called.  (gdevsun.c)
	- The CP50 driver incremented page_count itself, rather than
letting the core library do it.  (gdevcp50.c)
	- The GIF driver(s) could loop indefinitely under certain
circumstances.  (gdevgif.c)
	- The Group 4 fax drivers incorrectly included end-of-line codes in
the output.  (gdevtfax.c, gdevdfax.c)
	- The Group 4 fax drivers could put out an EOB in the middle of the
data.  (scfe.c)
	- The DesignJet 650C driver didn't use the correct compression
mode.  (gdevcdj.c)
	- The Hercules and EGA/VGA/SVGA drivers computed the page height
incorrectly according to the A4 switch.  (gdevherc.c, gdevpcfb.h)

Changes the page_count and showpage_count members of the device structure
from int to long.  (gxdevice.h, gdevprn.c, gsdparam.c)

Changes the faxg3, faxg32d, and faxg4 drivers so that, like the TIFF and
dfax drivers, they adjust the page size to one of the three CCITT standard
sizes if this is reasonable.  (gdevtfax.c)

Splits the bit driver into bit, bitrgb, and bitcmyk.  Adds bitrgb and
bitcmyk to all makefiles that included bit.  (*.mak, devs.mak, gdevbit.c)

Replaces the atiw16, tseng16, and tvga16 SuperVGA drivers with a single
svga16 driver that allows specifying the display mode number.  (devs.mak,
gdevpcfb.c)

Platforms
---------

Fixes bugs:
	- The MS Windows and OS/2 drivers allocated their terminal input
buffers in a way that could cause the GC to crash.  (gp_mswin.c, gp_os2.c)
	- The handling of gettimeofday on SVR4 platforms was incorrect.
(time_.h, gp_sysv.c, gp_unix.c)
	- On some platforms, function prototypes were not enabled even if
__STDC__ was defined.  (stdpre.h)
	- The VMS build script referred to an obsolete feature lev2only.
(vms.mak)

Changes the DVX platform so that stdprn is buffered.  This should improve
printing performance dramatically.  (gp_dvx.c)

Fonts
-----

Fixes bugs:
	- Setting DISKFONTS resulted in a reference to FontFileDirectory
before it was defined.  (gs_type1.ps, gs_fonts.ps)
	- /Font findresource gave an error rather than doing font
substitution.  (gs_res.ps)
	- FontDirectory wasn't rebound to GlobalFontDirectory when global
VM was current.  (gs_res.ps, zdict.c)
	- Type 1 fonts weren't loaded into global VM.  (gs_fonts.ps)
	- In the standard Fontmap, the Utopia fonts had extension .gsf
rather than .pfa.  (fontmap.gs)
	- Fonts whose FontBBox was [0 0 0 0] were not displayed, or were
displayed as tiny dots.  (gs_type1.ps)

Interpreter
-----------

Fixes bugs:
	- dict_put could read from the variable pvslot before it was used.
(This was harmless, since the value was never actually used; it just upset
Purify.)  (idict.c)
	- Binary object sequences could cause addressing faults.
(iscanbin.c)
	- The attributes on names were set incorrectly in binary object
sequences.  (iscanbin.c)
	- gs.c duplicated (in some cases incorrectly) some definitions in
interp.h.  (gs.c)
	- gs_lib_paths was declared const in one place and non-const in
another.  (zfile.c)
	- file_restore and font_restore had inconsistent const declarations
for their argument.  (isave.c)
	- iodev_os_open_file was missing its last formal parameter.
(ziodev.c)
	- gs.c declared gs_devicename with an incorrect extern.  (gs.c)
	- undefinefont didn't interact properly with the resource
machinery.  (gs_lev2.ps)
	- The declaration for swap_entry used a typedef name as a formal
parameter, which upset some compilers.  (zmisc2.c)
	- Including the ccinit feature could cause the garbage collector to
make an invalid access.  (stream.c)
	- The check for t_[a]struct types in ztype.c was incorrect.
(ztype.c)
	- After the collection of halftone samples, temporary data
structures were freed incorrectly.  (gzht.h, gsht1.c, zht.c)
	- Images with source width between 489 and 492 crashed the
memory manager.  (iastate.h)

Makes it possible to define SEARCH_HERE_FIRST (gsmain.c) in the makefile.
(gsmain.c)

Splits the Level 2 resource machinery into a separate file.  (gs_lev2.ps,
gs_res.ps, gs.mak, unix-end.mak, vms.mak).

Changes the names of the DiffEncode/Decode filters to
PixelDifferenceEncode/Decode, and splits them off into a separate
"feature".  (gs.mak, zfilter2.c, zfpdiff.c, spdiff.c, spdiffx.h)

Adds experimental code for filtered image scaling.  DON'T USE THIS CODE.
(zimage2.c)

Streams
-------

Fixes bugs:
	- The CCITTFaxEncode filter could put out an EOB in the middle of
the data.  (scfe.c)

Splits off the PixelDifferenceEncode/Decode filters into a separate
"feature".  (gs.mak)

Library
-------

Fixes bugs:
	- gs_setcachedevice could return a garbage error code.  (gschar.c)
	- joins on stroked lines were incorrect if the device coordinate
system mapped +Y to +Y.  (gxstroke.c)
	- If gsmisc.c supplied versions of missing library routines, they
could clash with the names of the real ones if those were present
unexpectedly.  (memory_.h, gsmisc.c)
	- The initialization expression for is_open in the
dev_init_misc_open macro included a cast, which some compilers don't allow.
(gxdevice.h, gsdevice.c, gxclip2.c, gxpcmap.c)
	- In Type 1 fonts, character that specified their side bearing and
width with sbw rather than hsbw gave an invalidfont error.  (gstype1.c)
	- Some procedures were declared inconsistently with regard to const
arguments.  (gscie.c, gxpcmap.c, gxacpath.c, gxcmap.c)
	- A few places still assumed that pointers occupied 4 bytes.
(gxclist.c)
	- Rendering a gray halftone on a CMYK device called the device's
map_rgb_color procedure instead of map_cmyk_color.  (gxdither.c)

Renames gsfile.c as gswppm.c.  (gsfile.c, gswppm.c)

Implements the ability to cache arbitrarily transformed characters.  This
is currently enabled by a compile-time flag in gschar.c.  (gschar.c)

Version 3.0 (8/1/94)
===========

This is the first full Level 2 version released to the public.
Unfortunately, we were not able to include setpagedevice in this release.

Documentation
-------------

Fixes bugs:
	- README didn't mention Aladdin's European distributor.
	- psfiles.doc didn't describe some of the newer gs_*.ps files.

Notes that gcc -O2 (version 2.5.8 of gcc) generates incorrect code for some
modules on the H-P RISC architecture.

Notes that on AXP platforms running VMS, DEC C V4.0 is required.

Procedures
----------

Fixes bugs:
	- 'make clean' didn't delete devs.tr or t.tr.
	- devs.mak was missing the entry for faxg32d.
	- unixansi.mak omitted some drivers that were included in
unix-cc.mak and unix-gcc.mak.

Updates jpeg.mak to reference version 5beta1 of the IJG JPEG code.

Changes the version numbering scheme from A.B.C to A.B[CC].  I.e., the
first sub-release after 3.0 will be 3.01 or 3.001, not 3.0.1.

Utilities
---------

Fixes bugs:
	- ps2ascii didn't do a setglobal.

Adds an option to ansi2knr to convert ... to va_alist/va_dcl.

Drivers
-------

Fixes bugs:
	- The newly added faxg32d driver didn't have an entry in devs.mak.
	- The BMP, GIF, and PCX drivers wrote out an incorrect color
palette (the blue values were too small).
	- The vgalib driver had some compilation problems.
	- The TIFF drivers didn't produce correct multi-page output.

Adds faxg32d and tiffg32d drivers.

Reinstates the DigiFax drivers, which were withdrawn when the new fax
drivers were added.

Platforms
---------

Fixes bugs:
	- gs_btokn.ps and gs_ccfnt.ps weren't installed on Unix platforms.
	- The VMS module list omitted SBHC, included a non-existent GXDASH,
and had incorrect names for some of the IJG JPEG files.
	- The VMS build scripts (vms*.mak) had incorrect "boilerplate".
	- The VMS script file gssetmod.com had \r characters in it, as well
as \n characters.
	- The echogs and genarch utilities didn't return the correct exit
codes under VMS.
	- The VMS Fontmap had incorrect entries for the Courier and Charter
fonts.
	- When running under Ghostview, Ghostscript didn't drain the input
pipe.  (We fixed this with a temporary patch in gs.c; this isn't a good
solution for the longer term.)

Fonts
-----

Fixes bugs:
	- The free AvantGarde, Bookman, and Palatino font families had
incorrect FontBBox values.
	- The 'f' and 'j' in the free AvantGarde-DemiOblique,
Bookman-DemiItalic, Bookman-LightItalic, and Palatino-Italic fonts were
chopped off on the right.  (The bitmaps were chopped off in the original
BDF fonts from which these fonts were made.)

Interpreter
-----------

Fixes bugs:
	- gs -h and gs -v didn't print the tertiary version number correctly.
	- Binary object sequences with no strings or names didn't read in
correctly.
	- Binary object sequences that crossed an input buffer boundary
didn't read in correctly.
	- Binary object sequences read in as {[e1 .. en] e1 ... en} instead
of {[e1 ... en]}.  (New bug in 2.9.x.)
	- setpattern didn't set the current color space correctly if the
current color space wasn't a Pattern space.
	- If the current color space was an uncolored Pattern space but the
current color was a colored Pattern, currentcolor returned extra values on
the operands stack.
	- .buildfont1 in gs_type1.ps didn't force binding of the old
definition, causing ps2ascii to loop endlessly.

Adds a facility for writing and reading dictionaries in binary object
sequences.  This is experimental and subject to change in the future.

Streams
-------

Fixes bugs:
	- gs_run_string and ccinit didn't have any way to mark the string
as "foreign", which confused the GC.

Library
-------

Fixes bugs:
	- gxchar.h had an extra comma after the last element of the
show_width_status enum, which upset some compilers.
	- stroke and strokepath didn't correctly skip zero-length segments
if the line width was less than one pixel, or if there was a closed subpath
consisting entirely of zero-length segments.
	- strokepath sometimes incorrectly added a moveto at the end of the
path.

Version 2.9.10-beta (7/28/94)
===================

This is the last 2.9 beta, since 3.0 will be released on July 31.

Documentation
-------------

Fixes bugs:
	- A | in gs.1 had a \ in front of it instead of \\.

Adds a paragraph in gs.1 that tells how to select paper size.

Notes in devs.mak that the cdj550 driver is the best one for the H-P
DeskJet 520, and the pjxl300 driver is the right one for the H-P DeskJet
1200C.

Notes in make.doc that Watcom C++ 10.0 may require a change in a makefile.

Procedures
----------

Removes ICCINIT from MODULES.LIS for VMS systems.

Updates VMS.MAK to support Motif V1.2.

Updates jpeg.mak to work with version 5alpha4 of the IJG JPEG code.

Utilities
---------

Fixes bugs:
	- font2c didn't leave extra room in Type 0 font dictionaries for
entries added by definefont.
	- font2c left extra information on the stack.
	- ansi2knr would remove newline characters within formal argument
lists.
	- font2c got an Error: /undefined in makefontprocname.

Updates ansi2knr to work better with the GNU configure program.

Updates ansi2knr to handle procedure formal arguments automatically.

Drivers
-------

Fixes bugs:
	- If a file contained color or gray-scale information followed by a
masked image, the X driver would sometimes invert the polarity of the
image.

Platforms
---------

Fixes bugs:
	- Unix systems with a 2-argument gettimeofday returned garbage
values for the current time.
	- The VMS build script for compiled fonts omitted the requirement
to load gs_ccfnt.ps.
	- memory_.h didn't note that System V Unix platforms need memmove.

On Unix systems, changes the subdirectory of $datadir/ghostscript to just
be the version number (e.g., 2.9.10 rather than gs-2.9.9).

Fonts
-----

Adds support code for the Wadalab (University of Tokyo) free Kanji font.

Notes in the documentation in Fontmap that .pfa and .pfb fonts are
compatible with ATM, but .gsf fonts are not.

Changes the names of Thomas Wolff's expanded Hershey fonts, replacing .gsf
with .pfa.

Interpreter
-----------

Fixes bugs:
	- The scanner became confused if the literal names /<< or />>
straddled an input buffer boundary.
	- .setlanguagelevel gave an invalidaccess error when
switching from level 2 to level 1.
	- currentgstate, setgstate, and copy for gstates didn't do
the necessary access checks.
	- The Category resource category didn't define .ResourceFile, so
/Category resourcestatus gave an error.
	- The garbage collector didn't trace the structures used by
filenameforall properly on most platforms.
	- Automatically expanding systemdict didn't work, but didn't give
an error.
	- Automatically expanding a dictionary usually expanded it by too
much.
	- systemdict was created too small.
	- The garbage collector didn't trace the structures referenced only
from allocator objects, leading to attempts to access freed storage.
	- If a chunk was empty, the GC tried to free it even if it had
inner chunks.
*	- The outer loop in dict_find_name_by_index() could cause an
addressing fault on segmented machines when looking up Level 2 operators,
because the offset could get decremented past 0.
	- The heap_available procedure in gsmemory.c didn't convert
properly to non-ANSI syntax.  (New bug in 2.9.9.)
	- The ledgertray procedure wasn't implemented.
	- The xxxtray procedures didn't set the page size.
	- The settumble operator wasn't implemented, even as a dummy.
	- glyphshow didn't work with Type 3 fonts.
	- Supplying a RenderTable for a CIE color space caused an error.
	- The DCT filter code had the jpeg/ subdirectory name "wired in" to
the source files.

Adds experimental filters for Burrows/Wheeler block sorting compression
(BWBlockSortEncode/Decode), described in DEC SRC Research Report #124,
move-to-front coding (MoveToFrontEncode/Decode), and a simple form of
Huffman coding (BoundedHuffmanEncode/Decode).  These are experimental -- do
not rely on them remaining the same (or existing at all) in future
releases!

Adds all function prototypes needed to pacify strict compilers.

Removes all explicit references to userdict from the C code.

Changes the SAFER switch so that it disallows not only explicit writing,
deleting, or renaming of files, but also disallows specifying an explicit
OutputFile for any device (except for the initial device, by means of
-sOutputFile= on the command line).

Streams
-------

Fixes bugs:
	- Hex decoding (ASCIIHexDecode stream and <> literals) didn't treat
the data source as read-only (although it restored it to its original
contents).

Implements move-to-front coding, a simple form of Huffman coding, and
Burrows/Wheeler block sorting compression.

Library
-------

Fixes bugs:
*	- (The following bug fix was actually implemented somewhere around
version 2.7.)  restore didn't purge character cache entries whose keys were
names created more recently than the save.
	- gstype1.h declared gs_type1_state_sizeof as an extern, but this
wasn't defined anywhere.
	- gs_makeimagedevice didn't set the size of the palette correctly,
which confused the GC.
	- gs_makeimagedevice didn't set num_components to 1 for
mapped-color devices with only gray values.
*	- The two-color halftoning algorithms truncated when computing the
halftone level, rather than rounding it.
*	- If a path being filled had line segments that fell entirely to
the right of the clipping region, part of the path might not be filled.
	- The optimized code for 24-bit color didn't ensure properly that
32-bit accesses would be aligned appropriately.
	- The miter join check had gotten reversed somewhere along the way.
*	- Because x and y were interchanged in the miter check computation,
in some situations the check was inverted.  (This is a very old bug!)
	- It was believed that strokepath didn't work with dashed lines;
the problem appears to have been an incorrect testing program.

Adds all function prototypes needed to pacify strict compilers.

Changes fixed2float so it doesn't cast the result to float, and removes
fixed2double.  This produces slightly more accurate results in many places,
and may even be faster (for FPUs that normally generate double rather than
single precision results).

Version 2.9.9-beta (6/23/94)
==================

Documentation
-------------

Puts a pointer to devs.mak in the section of use.doc that talks about
MS-DOS displays.

Platforms
---------

Fixes bugs:
	- The %pipe% IODevice was omitted on System V platforms.
	- The AXP VMS build script needed /NESTED_INCLUDE=PRIMARY in
CC_QUAL to work around a bug in the DEC C compiler.

Fonts
-----

Fixes bugs:
	- gs_lev2.ps redefined .loadFontmap incorrectly.

Interpreter
-----------

Fixes bugs:
	- stream_compact used memcpy even though the source and destination
might overlap.
	- filter applied to a closed file could cause a crash.

Library
-------

Fixes bugs:
	- putdeviceparams to a printer didn't close and reopen the device
if only the page size or resolution was changed.

Version 2.9.8 (6/20/94)
=============

This is the first version that claims to be a full Level 2 implementation.
It was distributed to satisfy a contractual requirement.

Documentation
-------------

In make.doc:
	- Adds a reference to the generic System V section at the end of
the SCO section.
	- Notes that DEC OSF/1 systems may require changing the name of the
install program to installbsd.

Updates drivers.doc to reflect the change from "properties" to
"parameters".

Updates the Aladdin Enterprises Free Public License to version 1.

In language.doc, notes that certain device parameters will be phased out.

Procedures
----------

Fixes bugs:
	- The file aa.ps was included in the distribution by mistake.

Notes in the Unix makefiles that X11R6 probably needs SM and ICE added to
XLIBS.

Utilities
---------

Fixes bugs:
	- viewjpeg.ps used a non-existent file as its example.
	- A temporary string in wrfont.ps was allocated too small.

Upgrades font2c.ps so it will handle (simple) Type 0 fonts as well as Type
1.

Drivers
-------

Fixes bugs:
	- The TIFF drivers didn't byte-align each scan line.
	- gdevtfax.c applied & to an array member of a structure.

Changes the param_list interface slightly: Implementations of the
put_params driver procedure should now use param_signal_error to report
errors, and should not give up at the first error.  (Even though this is a
non-backward-compatible change, old implementations will continue to work;
they just won't deliver complete results to the setpagedevice Policies
machinery.)

Platforms
---------

Fixes bugs:
	- Removes the time zone adjustment from gp_get_clock in gp_unix.c,
since the value returned by all Unix systems is bogus.
	- The DV/X makefile still included the dfaxhigh and dfaxlow drivers.
	- gssetmod.com (VMS command file) didn't work properly if the
argument list was empty.
	- vms.mak, vms-axp.mak, and modules.lis hadn't been updated to
reflect changes in 2.9.7.
	- The MS Windows version wouldn't link (overflowed the 64K primary
data segment).

Fonts
-----

Makes the font substitution algorithm somewhat more intelligent.

Interpreter
-----------

Fixes bugs:
	- Enumerating the pointers of a zero-length array of structures
caused a divide by zero.
	- iref.h didn't protect itself against multiple inclusion.
	- The CCITTFaxEncode filter didn't byte-align the final
end-of-block code if EndOfBlock and EncodedByteAlign were both true.
	- make_initial_dict in iinit.c used `name' as a formal parameter
name, which some compilers believe conflicts with a typedef.
	- Not all internal operators had registered names.
	- The GC used memcpy, rather than bytes_copy, when compacting
objects, even though the source and destination might overlap.
	- When debugging was enabled, gc_string_mark could give a spurious
error indication.
	- vmstatus returned too small a value for the maximum VM.
	- The scanner could get into a loop when reading a radix-85 string.
	- The GC could get into a state where it was called after every
allocation (because of the patch setting global = true in ireclaim).
	- The general path filling algorithm didn't skip regions that were
completely outside the clipping box.
	- The gs_screen_enum structure contained a pointer (porder) that
pointed into the middle of a structure, confusing the GC.

Implements the BitmapWidths flag in fonts.  The default of false means that
we use scalable widths even with xfonts.

Changes the Generic resource category so that ResourceFileName is optional.

Changes the .getdeviceparams operator so that it takes an optional
dictionary giving the set of keys whose values are wanted.  Changes the
.putdeviceparams operator so that it takes an optional policy dictionary
specifying the action to be taken on errors, and returns a list of keys and
errors if it fails, rather than causing an error.  These are
non-backward-compatible changes, but ordinary programs do not use these
operators.

Changes the names of some internal operators and procedures by adding
a . to the beginning:
	currenttime
	devicename

Implements currentpagedevice, and a small subset of setpagedevice.  Only
the following keys in the page device dictionary are known to the current
implementation, and the ones marked with * are not actually processed:
	PageSize
	InputAttributes
	MediaColor, MediaWeight, MediaType, InsertSheet
	  (for InputAttributes matching only)
	*ImagingBBox
	OutputAttributes
	OutputType
	  (for OutputAttributes matching only)
	NumCopies
	HWResolution
	*Margins
	*Orientation (for all devices, not just roll devices)
	Policies
	Install
	BeginPage
	EndPage
Does not implement:
	- Updating InputAttributes or OutputAttributes by sensing the state
	  of the device;
	- Retrying media matching after an initial failure;
	- Automatic handling of portrait vs. landscape page size;
	- Recording the CTM after Install as the one to be used for
	  defaultmatrix, initmatrix, and initgraphics.
Also, media matching is normally disabled (with InputAttributes = null)
for all devices.  ****** We had to disable setpagedevice just before
shipping this release, because of interactions with the older device
handling machinery that we could not fix in the time available.

Library
-------

Fixes bugs:
	- 24-bit color (mem_true24_fill_rectangle and _copy_mono) had
algorithm bugs.
	- A complex conditional expression in gx_render_gray wouldn't
compile properly with the DECStation 3100 Ultrix 4.3 compiler.
	- The GC routines for gx_device_clip didn't handle the case where
the 'current' pointer pointed to list.single.
	- gx_add_char_bits used memcpy, rather than bytes_copy, for
compressing character bitmaps, even though the source and destination might
overlap.
	- Some compilers require the definition of st_gstate_contents to
precede the definitions of the GC procedures.
	- Filling a large rectangle (more than 1K of bitmap) with a colored
halftone overwrote random areas of the stack.

Changes gs_setcachedevice[2] to take a pointer to an array of floats,
rather than 6 or 10 individual floats.  THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE.

Implements the BitmapWidths flag in fonts.

Version 2.9.7-beta (6/5/94)
==================

Yet another pre-3.0 beta.  The main features are a fairly reliable garbage
collector, and function prototypes almost everywhere they are needed.

Documentation
-------------

Fixes bugs:
	- The comment at the beginning of the zfindlibfile procedure was
incorrect.

Replaces the GNU License (the COPYING file) with version 0 of the new
Aladdin Enterprises Free Public License (the PUBLIC file).

Procedures
----------

Fixes bugs:
	- The definition of cmykread.dev in gs.mak was incorrect (it
modified color.dev).

Adds the ability to specify a value for FONTPATH on the command line
(-sFONTPATH=), overriding GS_FONTPATH.

Replaces the -oper2 configuration resource type with the ability to specify
in the op_def list the dictionary in which operators will be defined.  (See
opdef.h for more details.)  This is an internal change only.

Utilities
---------

Fixes bugs:
	- viewgif.ps got an error on interlaced GIF files whose height
wasn't a multiple of 8.

Changes traceop.ps so it stores the traced operator in the same dictionary
where the operator is currently defined, if possible.

Drivers
-------

Fixes bugs:
	- The new G3 fax drivers crashed on page widths greater than 2623
(40 * 64 + 63) pixels.  (We fixed this by disallowing page widths greater
than approximately twice this.)
	- The 24-bit PCX driver had some debugging code accidentally left
in it that produced large volumes of useless console output.

Removes the previous (Leffler) TIFF/F driver and the TruFax driver.

Platforms
---------

Fixes bugs:
	- time_.h, gp_unix.c, and gp_sysv.c didn't do the right thing on
SVR4 platforms, where gettimeofday only takes 1 argument.
	- The final linking command on Turbo C platforms didn't specify the
COMPDIR directory for the linker.

Fonts
-----

Changes the standard Fontmap to use the URW contributed fonts as
work-alikes for Helvetica and Times Roman.

Interpreter
-----------

Fixes bugs:
	- The garbage collector wasn't in a consistent state.
	- In Level 2 mode, statusdict was allocated in global VM rather
than local VM.
	- resourceforall gave an error on the built-in categories such as
Filter.
	- The file searching algorithm didn't check the current directory
first.
	- When opening a file failed, it didn't return a different error
depending on the problem.
	- The CCITTFaxEncode filter crashed on widths larger than 2623 (64
* 40 + 63) pixels.  (We fixed this by disallowing page widths greater than
approximately twice this.)
	- The .type1getsbw operator gave an invalidfont error if a
CharString started with anything other than a [h]sbw.  (Adobe's published
specs say this is invalid, but some Adobe MultiMaster fonts start with a
callsubr and/or a callothersubr.)
	- When printing out the stack with == after an error, the error
handler got a repeated (and ultimately fatal) typecheck error if it
encountered an object of non-standard type.
	- The token operator could incorrectly attempt to free a structure
on the stack if it encountered an input buffer boundary.
	- string_to_ref didn't correctly set the a_local flag in the string
object it created.
	- If the -c switch was the last switch on the command line,
Ghostscript always exited without going into interactive mode.
	- copy didn't check for errors when copying a dictionary.

Makes many minor changes (mostly adding prototypes) to reduce error and
warning messages from gcc and other strict compilers.

Adds files containing the 4 predefined PDF encodings (MacRoman, MacExpert,
WinAnsi, and PDFDoc).

Library
-------

Fixes bugs:
	- image_bbox in gxccman.c could produce a division by 0 if a
0-width character was being entered into the cache.
	- gx_image_cached_char incorrectly specified a scale of 2x2 rather
than 1x1 if it had to read bits from an xfont.
	- Stale pointers in the halftone cache weren't cleared properly by
a restore.  (We fixed this by making grestoreall clear the halftone cache.)
	- setdash used gs_malloc, rather than the current allocator, for
allocating the dash pattern.
	- If one attempted to fill a very wide region with a colored
halftone, gx_dc_ht_colored_fill_rectangle would loop indefinitely.
	- The container_offset in clipping devices was set incorrectly,
causing the garbage collector to mangle pointers.

Changes the fopen routine in IODevices so that it can return an arbitrary
error code, rather than simply succeeding or failing.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE.  It only affects IODevice implementations,
of which there are very few.  (It doesn't affect ordinary device drivers.)

Changes the char_metrics xfont procedure so it returns the width as
floating point numbers rather than integers.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE.  It only affects xfont implementations, of
which there are very few.

Makes many minor changes (mostly adding prototypes) to reduce error and
warning messages from gcc and other strict compilers.

Version 2.9.6-beta (5/23/94, not distributed to the public)
==================

This, too, was supposed to be the last beta release for public release 3.0.
It was created primarily for a user who desperately needed a Level 1 system
that would run properly on a 64-bit hardware architecture.  The garbage
collector is badly broken (it's in the middle of an architectural change);
setpagedevice is still not implemented.

Documentation
-------------

Documents the standard location of Type 1 fonts on AIX.

Changes the last few mentions of Ghostview for Microsoft Windows to GSview
for Windows.

Notes that Solaris 2.n provides the X11 header files in a different place.

Changes README to reflect the differentiation between Aladdin Ghostscript
and GNU Ghostscript.

Procedures
----------

Fixes bugs:
	- The compilation rules for the modules that call the IJG library
used -Ijpeg rather than -I$(JPEGSRC).
	- The rule for gslib.dev omitted echogs$(XE) as a prerequisite.

Makes it possible to define the values of buildtime, copyright, revision,
revisiondate, and serialnumber in the makefile.

Utilities
---------

Fixes bugs:
	- The viewgif.ps utility didn't handle local color tables.

Updates ps2ai.ps to version 1.81.

Drivers
-------

Fixes bugs:
	- The TIFF and fax devices used some identical names, causing
linker complaints.
	- The bj10e/bj200 driver inadvertently disabled the sheet feeder.
(The change may not actually fix this bug, since we don't have either of
these printers with a sheet feeder to test it on.)
	- The 'bit' device didn't map colors to pixel values correctly.
	- The monochrome PCL driver didn't work around the fact that the
Canon LBP4i printer didn't clear its seed row correctly.

Adds new drivers:
	- A user-contributed driver for the H-P DesignJet 650C.
	- A user-contributed driver for the Canon LIPS III printer.
	- A completely new tiffg3 driver with one based on the new, fast
faxg3 code.  This driver does not include any external code, and carries an
Aladdin copyright.
	- A tiffg4 driver, also based on the fast CCITT filter code.

Removes the tiffg3x driver that appeared briefly in 2.9.5, and renames the
previous (Leffler) tiffg3 driver as tiffg3x.

Adds support for A0, A1, and A2 paper sizes to PCL drivers.

Changes all the names involving "props" to "params", for consistency with
the header files, some other internal interfaces, and Adobe's terminology.
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.  However, it only affects devices
that implement their own get_props and put_props procedures, of which there
aren't very many.

Platforms
---------

Fixes bugs:
	- The DV/X makefile used X11 rather than X for the X11 library name.
	- The DV/X makefile incorrectly included the PC display drivers.
	- The DV/X makefile omitted gp_dosfs.$(OBJ) from the list of
platform-specific files.
	- The DV/X makefile used : rather than ; for separating directory
names in GS_LIB_DEFAULT.
	- x_.h omitted a needed alias for XtAppSetFallbackResources.
	- The makefile entry for System V Unix systems didn't include
gp_unifn.$(OBJ).
	- The comment before LDFLAGS in the gcc makefiles incorrectly
suggested using the -x switch on Ultrix platforms.
	- The forward declaration of quant_params in zfdct.c upset the Sun
compiler because it declared a parameter as float rather than floatp.
*	- The Microsoft C compiler, like the Borland C compilers, only
compares the offset part of segmented pointers.

Fonts
-----

Adds a fontmap suitable for use with Adobe Type Basics.

Interpreter
-----------

Fixes bugs:
	- The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on
segmented systems.
	- The end_phase procedure in igc.c didn't work correctly on
segmented systems.
	- Indexed color spaces didn't mark their base space properly when
garbage collecting.
	- The garbage collector didn't work on segmented systems, because
it smashed the lsize field of large objects with mark/reloc information.
	- Some structures didn't have correct associated GC procedures:
gs_indexed_map, gs_client_pattern, gs_pattern_instance.
	- restore could free names or stack segments that were still
referenced.
*	- If a packed object caused an error, the error object could be set
to garbage rather than the correct object.
*	- Badly designed error handlers which use $error for temporary
storage could cause a dictfull error.
	- Some compilers objected to the use of "dict" as a variable name
in a scope where it was defined as a type.
	- IODevices were declared const and non-const inconsistently.
	- setpagedevice popped one object too many off the stack if the
request included any subdictionaries that needed to be merged.
	- More garbage collector bugs were fixed.
	- If the current stack block was empty, Level 2 restore would give
a spurious typecheck error.
	- The CCITTFaxEncode filter could get confused if it emptied the
input and filled the output at the same time.
	- The CCITTFaxEncode filter could insert an extra EOL if it had to
suspend at certain times.
	- The new parser for literal strings (as of 2.9.5) could mis-count
internal parentheses if a parenthesis caused the internal buffer collecting
the string to overflow.
	- If the current stack block had fewer than 3 elements,
.type1addpath could report a spurious typecheck error.
	- Text rendering operations (show, stringwidth, etc.) caused a
crash if the current color was a Pattern that hadn't already been
rasterized.
	- If a program did a grestore when the graphics state stack was
empty, the graphics state was initialized to unexpected (and, in some
cases, invalid) values.
	- pathforall could cause a bogus stackoverflow if it overflowed the
current stack block.
	- Closing an encoding filter with a procedure as target left the
filter on the stack.
*	- The outer loop in dict_lookup() could cause an addressing fault
on segmented machines when looking up Level 2 operators, because the offset
could get decremented past 0.
	- There was an = instead of an == in a test in scanner_reloc_ptrs.
	- The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted
the last (gcst) argument.

(Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs
in it.

Adds DiffEncode and DiffDecode filters that implement color prediction for
the PDF variant of the LZWDecode filter.

Changes the specification of .oserrorstring to be similar to getenv,
where, etc.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no
user-written code should be using .oserrorstring.

Adds oversampling for better character rasterizing.

Library
-------

Fixes bugs:
	- gx_dc_ht_colored_fill_rectangle gave a compiler warning because
of a problem with const pointers.
	- dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on
big-endian platforms, causing compilation errors.
	- IODevices were declared const and non-const inconsistently.
	- The Type 1 rasterizer never enabled overshoot suppression.
	- stroke didn't fatten the line properly if stroke adjustment was
enabled, or if the line was horizontal or vertical.
*	- The clipping test for characters was too strict by almost 1
pixel, leading to unnecessary clipping of text at the edge of the clipping
box.
*	- The initial clipping box was computed incorrectly for devices
whose initial transformation matrix included a rotation.

Changed the implementation of clipping lists and show enumerators to use
separate objects rather than embedded objects, to pacify the GC.  (This is
an internal change, not visible at the PostScript or API level.)

Makes the character cache trim off left and right blank areas, as well as
top and bottom.  (Internal change.)

Adds oversampling for better character rasterizing.

Version 2.9.5-beta (4/11/94)
==================

This was supposed to be the last beta release before 3.0, but it won't be.
The only known major defects are the unreliable garbage collector, and the
dummy implementation of setpagedevice/currentpagedevice.

Documentation
-------------

Fixes bugs:
	- The file commnew.doc didn't belong in the fileset.

Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl.

Adds a user-contributed `man' page for the ps2epsi utility.

Procedures
----------

Fixes bugs:
	- The IJG files didn't compile properly by themselves, because they
didn't have $(AK) in their dependency list.

Changes back the handling of files named on the command line, so that they
are first sought in the current directory, and if that fails, use the
search path.  (2.9.4-beta changed things so that files on the command line
did not use the search path, because as of that version, the search path
doesn't necessarily include the current directory.  I consider the "check
the current directory and then use the search path" rule, which is the
MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious
mistake, since it is one of the best-known security holes in Unix and can
also produce confusing and unexpected results depending on the current
directory; I would much rather have a clear distinction between
user-specified files, which should not use any path searching, and system
files, that only use the defined search path.  However, as of this moment,
users seem to want the convenience at the expense of insecurity and
confusion.)

Adds '.' to the beginning of the search path for MS-DOS platforms, to
conform to the usual MS-DOS file searching convention.

Adds a -c ("code") switch, which interprets following arguments (until the
next switch) as PostScript tokens.

Changes the handling of FEATURE_DEVS so that either level1.dev or
level2.dev must normally be selected.  THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty
definition.

Utilities
---------

Fixes bugs:
	- bench.ps didn't switch back to local VM properly before running
the program being benchmarked.

Adds a ppmsetpagesize command to the pstoppm utility.

Drivers
-------

Fixes bugs:
	- The PCX and GIF drivers used an incorrect algorithm for computing
the blue component of the color palette, which could cause colors to come
out with not quite enough blue.
	- The SPARCprinter driver wouldn't compile with non-ANSI compilers.

Adds new drivers:
	- A user-contributed driver for DEC sixel displays like the VT240
(sxlcrt, in gdevln03.c, which has a FSF copyright.)
	- A much larger and supposedly faster version of the TIFF/F driver
(tiffg3x, in gdevtifx.c), contributed by a user.  This has the same
copyright as the TIFF/F driver (gdevtiff.c).
	- A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax
output with no header, using the CCITTFaxEncode filter to do the work.
(This is around 2.5-3 times as fast as the other fax drivers distributed
with Ghostscript.)
	- A user-contributed driver for the Mitsubishi CP50 color printer.

Changes the `bit' driver so one can set the Colors and *Values properties.

Makes the color mapping for PC displays, PCX files, and GIF files identical
(they differed slightly before).

Platforms
---------

Fixes bugs:
	- VMS used DISPLAY rather than DECW$DISPLAY to get the display name
if opening the display failed.
	- Many minor bugs relating to OS/2 and Win32 were fixed.
	- On Unix and DV/X platforms, the install script didn't mkdir
$(gsdir), and didn't mkdir the intermediate directory for the man page.
	- On BSD and UTek platforms, the declaration of memset in
memory_.h, and the definition in gsmisc.c, conflicted with the ANSI
declaration.
	- One of the SPARC compilers compiled the intersection computation
in arc_either (gspath.c) incorrectly.
	- The temporary file names created under OS/2 could exceed the 8.3
length limit.

Interpreter
-----------

Fixes bugs:
	- The test files for the IJG library had been damaged by EOL
conversion.
	- The garbage collector didn't mark some of the most recently
created names.
	- The interpreter would sometimes report a typecheck instead of a
stackunderflow.
	- If aload didn't have enough room on the stack, it would report a
rangecheck rather than a stackoverflow.
	- zcontext wouldn't compile, because it hadn't been updated to the
new GC interfaces.
	- The definition of private_st_stream_proc_state in ifilter.h ended
with a semicolon, which upset some compilers.
	- load didn't check to make sure that the dictionaries it examined
had read access.
	- cvrs didn't handle negative numbers in radix 2 or 3 properly.
	- The allocator could become confused if it was asked to allocate a
large array.
	- readline gave an ioerror rather than a rangecheck if it
overflowed the string.
	- The allocator didn't free packed arrays properly.
	- The allocator's check for LIFO freeing of arrays was off by 1, so
it never succeeded.
	- The undercolor removal and black generation procedures weren't
initialized properly.
	- If the interpreter couldn't find gs_init.ps, it returned a random
exit code.
	- If an operator expected a procedure and didn't get one, it
sometimes gave an invalidaccess rather than a typecheck.
	- Unix file enumeration often did the wrong thing if there were
directories in the pattern.
	- The ASCIIHexDecode filter read an extra character after the
terminating >.
	- scalefont didn't fill in ScaleMatrix properly.
	- The CCITTFaxEncode filter crashed if the width of the page wasn't
a multiple of 8 bits.
	- The error printing code used .languagelevel, which wasn't defined
in Level 1 configurations.
	- setpagedevice didn't pop its argument.
	- Definitions in statusdict didn't change according to the current
language level.
	- Separation color spaces didn't allow strings as color space names.
	- Due to a bug in chunk_locate_ptr, the garbage collector sometimes
decided incorrectly that a pointer was pointing outside collectable space.
	- (Many other garbage collector bugs were fixed.)

Implements additional Level 2 features:
	- Garbage collection for strings.
	- Expandable operand and dictionary stacks, and the ability to set
	the maximum size of these stacks.
	- Additional user and system parameters.  The following are dummies:
	AccurateScreens, JobName, JobTimeout, WaitTimeout.
	- Procedure-based filters usable with cvx/exec and token.
	- Separation color spaces (always using the alternate space).
	(These were theoretically implemented in version 2.6, but they were
	never tested and were actually missing most of the implementation.)
	- VMThreshold and VMReclaim for invoking GC automatically.

Adds a hook in iscan.c for parsing DSC comments.

Adds encoding and decoding filters for the BCP and TBCP protocols.  These
are not fully implemented yet:
	- The interrupt and status request characters are ignored on input,
	and never generated on output;
	- The TBCP encoder doesn't emit the start-of-protocol string;
	- The TBCP decoder doesn't recognize the end-of-protocol string.

Factors out Type 1 font capability as a separate feature.

Changes the names of some files:
	packed.h to ipacked.h;
	bnum.h to ibnum.h.

Changes the name of the value.index member of a ref to value.boolval.
(Internal change only.)

Library
-------

Fixes bugs:
	- The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile
properly with non-ANSI compilers.
	- The JPEG library wouldn't compile properly with non-ANSI compilers.
*	- The platform font machinery gave up too easily in some cases.
	- CMYK devices needing halftoning converted the CMYK color to RGB.
	- The debugging code in arc_add (gspath.c) didn't print the output
values correctly.

Factors out Type 1 font capability as a separate feature.

Version 2.9.4-beta (2/19/94)
==================

Procedures
----------

Changes Ghostscript's path searching algorithm so that it does not
automatically look in the current directory first.  (The former algorithm
was more MS-DOS-like; the new one is more Unix-like.)  If you want to
include the current directory, you must include '.' in the search path.
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.

Adds two new resource types for genconf.c:
	- -header filexxx.h adds #include "filexxx.h" to gconfig.h.
	- -libpath dir adds dir to the list of library search paths.

Utilities
---------

Fixes bugs:
	- impath.ps (used by bdftops) computed the starting X coordinate
incorrectly, typically causing characters to be displaced slightly to the
right.
	- pstoppm.ps didn't handle local and global VM properly.

Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary
PostScript files into a form compatible with Adobe Illustrator.

Drivers
-------

Adds new drivers:
	- A user-contributed driver for Imagen Impress laser printers.
	- A user-contributed driver for the DEC LA75plus printer.

Platforms
---------

Under OS/2, adds the ability to keep Ghostscript in memory for a
specified number of minutes.

Adds support for Win32 and Win32s.

Changes the MS Windows platform font interface so that it does not attempt
to render fonts at sizes smaller than 6 pixels.  Changes the X Windows
interface, which already did this for 4-point and smaller fonts, to also
use a lower limit of 6 pixels.  Also changes the X Windows platform font
machinery so it does not render fonts at sizes larger than 36 pixels: at
large sizes, Ghostscript does a perfectly good job, and some X font servers
rasterize the entire font and lock up the entire window system while doing
so.

Interpreter
-----------

Fixes bugs:
	- currentdash always returned a new array of reals, rather than the
actual argument of setdash.
	- Strings in binary object sequences read in as integers.
	- Because of a bug in chunk_locate_ptr, some large objects didn't
get freed properly.
	- If an error occurred while processing an image, Ghostscript would
attempt to free random blocks of storage.
	- Input filters discarded trailing data, rather than filling it out
with zeros.  (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's
not clear what other filters it should affect.)
	- The ASCII85Encode filter produced garbage output for the final
1-4 bytes before EOD.
*	- The TIFF output driver produced incorrect output for the second
and subsequent pages if the output was being produced on multiple files.
*	- The default handleerror did a 'stop', which was not correct.
	- gpcheck.h converted all positive return codes to 0 if interrupt
checking was enabled.
	- Images with multiple data sources didn't work.
	- Images with 12-bit sample values didn't work.
	- Images with a file as the data source read additional data beyond
what was required.
	- 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't.
	- If %lineedit was opened multiple times, characters from later
openings overwrote characters from earlier ones.
	- token returned garbage for the "remaining string" result when
reading from a string, if it actually read all of the string.  (New bug in
2.9.2, probably.)

Implements additional Level 2 features:
	- DCTEncode and DCTDecode filters.
	- Filters with procedures as the data source or target.
	(Except for token and cvx/exec.)
	- Garbage collection for names.

Changes the error printout so that strings are always truncated at 200
characters.

For Level 2 systems, changes the initial setting of the object format
parameter from 0 to an appropriate non-zero value.

* Changes the .quit operator so that it takes two operands, an error object
and an error code; if the latter is negative, the interpreter returns this
as the error code, rather than e_Quit.

Makes StandardEncoding and ISOLatin1Encoding arrays, rather than packed
arrays, on large-memory systems, for compatibility with certain test
suites.  Changes .registerencoding to accept arrays as well as packed
arrays.

Library
-------

Fixes bugs:
	- Due to an error in cie_mult3, CIE-based colors were badly
mis-mapped.
*	- Very narrow (but not empty) rectangles would disappear.
*	- Small halftone cells could smash the next higher entry in the
halftone cache.
	- The orientation algorithm in gxstroke.c still interchanged
clockwise and counter-clockwise coordinate systems (after having been
"fixed" at least 3 times).
	- Stroking 1-pixel-wide lines shortened them, instead of
lengthening them, if non-butt caps were requested.

Refactors mem_mapped8_copy_mono because of limitations in the bcc32
compiler.

Version 2.9.3-beta (1/19/94)
==================

This version was created for evaluation purposes for a few users who
needed Level 2 capability; it was never released to anyone else, even
beta testers.

Documentation
-------------

Fixes bugs:
	- The description of psview and xpsview was incorrect.

Procedures
----------

Changes the installation directories for Unix and similar systems to put
Ghostscript data in $(datadir)/ghostscript/gs-NN.NN.NN rather than directly
in $(datadir)/ghostscript.  (Fonts still go in $(datadir)/ghostscript/fonts.)

Drivers
-------

Fixes bugs:
	- Some spaces were incorrectly replaced with tabs in the help
message in the 3B1 display driver.
	- The BMP driver wrote a spurious scan line at the beginning
of its output.
	- The monochrome PCX driver had the two palette elements
interchanged.

Adds new drivers:
	- A user-contributed driver for the Xerox XES printer format.  This
has a FSF copyright.
	- A user-contributed driver for the Epson AP3250 printer.  (This is
the same as the Stylus 800, with slightly different margins.)
	- A user-contributed driver for the DEC LA70 printer with some
algorithms for improving text at low resolutions.  This has a FSF
copyright.
	- A user-contributed driver for an intermediate-resolution mode
for 9-pin "Epson-compatible" printers.

Changes the name of the Stylus 800 driver from escp2 to st800.

Adds a compile-time flag to the Epson driver to cope with Panasonic 9-pin
printers, which sometimes have trouble mixing graphics and tabs.

Platforms
---------

Fixes bugs:
	- The MS Windows driver (gp_mswin.c) referred to iodev.h rather
than gxiodev.h.
	- On Unix System V platforms, gp_unifs.c and gdevpipe.c were
incorrectly omitted from the link list.
	- (Some?) System V platforms don't have the S_ISDIR macro,
requiring a change in stat_.h.
	- The Unix `install' target didn't install gs_std_e.ps and
gs_iso_e.ps.
	- No MODULES.LIS file was provided for VMS.

Adds Desqview/X makefiles that actually work.

Documents the set of H-P-supplied patches needed to make H-P's
compilers process Ghostscript.

Changes the MS Windows driver so that if the user presses the Enter key
while the image window has the focus, the text window will be brought to
the top and made the active window.  This is useful when viewing a
multi-page document with Ghostscript.

Interpreter
-----------

Fixes bugs:
	- The definition of public_st_client_color() in gxccolor.h
included an extraneous semicolon.
	- The definition of private_st_AXD_state() in sfilter.h included an
extraneous semicolon.
	- saxx.c didn't include sfilter.h, which it needed for the
definition of private_st_AXD_state().
	- ialloc_struct failed to create a separate chunk if the structure
was very large.
	- setcolorspace didn't allocate the colorspace object in the same
VM space as the graphics state, causing problems when the colorspace was
freed.
	- In rare circumstances, currentfile could return an empty array
rather than a file.
	- Dictionary keys were always allocated in global VM.
	- If NOPLATFONTS was true, definefont didn't check whether the
dictionary was read-only before trying to insert an ExactSize key.
	- startjob could get an invalidaccess error, because serverdict was
allocated in global VM.
	- Using definefont with an already registered font created a
circular list structure.
	- If a PostScript procedure appeared as a CharString in a Type 1
font, it was always called with the character name, never the character
code.
	- The SubFileDecode filter didn't work with a non-empty EOD string
(went into an endless loop).  (Probably a new bug in 2.8.)
	- save/restore didn't properly restore the maxlength of a
dictionary, causing data to get smashed at random.  (New bug in 2.9.)
	- save didn't mark objects as old, so a nested restore had no
effect.  (New bug in 2.9.2.)
	- After returning from an OtherSubrs callback, op_type1_free
freed the saved interpreter state incorrectly.  (New bug in 2.7.)
	- Level 1 configurations didn't work because .makeoperator gave an
invalidaccess error.  (New bug in 2.9.2.)
	- ASCII85 string literals didn't work.  (Probably a new bug in 2.8.)
	- If the current global/local allocation mode was different at the
end of a file than at the beginning, an addressing fault could occur
(gs_unregister_root in gs_run_string).  (New bug in 2.9.2.)
	- After a setfileposition on a file open for reading,
fileposition would return an incorrect value, even though the stream
was actually repositioned properly.

Brings the dictionary unpacking code for the DCT filters into line with
Adobe Technical Note 5116, which describes the Picky parameter for
DCTDecode and the NoMarker, Resync, Blend, Picky, and Relax parameters for
DCTEncode.

Changes the .quit operator so that if given a negative argument, the
interpreter returns this as the error code, rather than e_Quit.

Changes the Ghostscript integer version number from 100P+10S+T to
10000P+100S+T.

Changes the default halftone screen for high-resolution devices, both
black-and-white and color.

Library
-------

Fixes bugs:
	- The software floating multiply code used with USE_FPU=-1 only
worked on little-endian platforms.
	- Specifying a left side bearing to .type1addpath produced an
inappropriate offset.

Version 2.9.2-beta (1/2/94)
==================

This version was distributed only to beta testers.  It adds a garbage
collector and full local and global VM support.  It is the first version
that sets languagelevel = 2, i.e., claims to be a Level 2 implementation.

Documentation
-------------

Fixes bugs:
	- make.doc still referred to use_* variables in gdevx.c, and
use.doc didn't explain the use* X resources.

Notes that -Olimit=1000 is needed to compile Ghostscript on AXP systems
under OSF/1 1.3.

Utilities
---------

Fixes bugs:
	- viewgif.ps did not work with interlaced images.
	- font2c.ps omitted gsmemory.h from the #include list in compiled
fonts.

Drivers
-------

Fixes bugs:
	- The MS Windows driver hadn't been updated to work with the
new additions to the gx_device structure.
	- The BMP file driver wrote one scan line too many.
	- The cdj driver omitted an important cast to int in the error
diffusion code (FSdither macro).

Changes the SuperVGA drivers to recognize erasepage and reset the
color table, like the X driver.

Adds some fragmentary code to begin implementing the PostScript fax
extensions.

Platforms
---------

Fixes bugs:
	- The procedure initializers for the MS Windows console I/O
were missing the new reset element.
	- The makefile entry in bcwin.mak used -fdev rather than -iodev.
	- The Borland C++ makefiles exceeded MS-DOS's line length limit if
the compiler files were in the standard Borland directory (BORLANDC).
	- Some procedures weren't declared with prototypes in gp_vms.c.
	- Some declarations had to be reordered to pacify the VAX compiler.
	- Under MS Windows, Ghostscript didn't automatically de-iconify the
text window to display messages on an error exit.
	- The Unix makefile rule for gconfig_.h used echogs rather than
./echogs.
	- The Microsoft C makefile referred to an obsolete file gs.tr.
	- gp_unifs.c used strpbrk and strrchr, which some systems lack.

Updates the OS/2 code and documentation for compatibility with the current
Ghostscript version.

Fonts
-----

Fixes bugs:
	- The X11 .pfa fonts replaced their .gsf requirements in the
fontmap, but not distributed with the previous (beta) release.

Adds fontmaps appropriate for use with DEC Ultrix and OSF/1 systems.

Interpreter
-----------

Fixes bugs:
	- 4-value entries in the Metrics dictionary were interpreted with
the width and side bearing interchanged.
	- Objects large enough to require their own chunk were not freed
properly.
	- The GS_FONTPATH scanner didn't deal with the possibility that
opening a file might fail.
	- The interrupt and timeout errors incorrectly pushed an error
object on the operand stack.
	- imagemask gave an error if it was invoked with a dictionary
argument with a current color space with more than 1 parameter.
	- definefont insisted that a new font not have a FID entry.
	- Some places didn't cast char to byte when needed.
	- An extra element was left on the stack when substituting the
default font for a font whose file couldn't be found.
	- The CCITTFaxDecode filter didn't allow the dictionary to be
omitted.  (The Adobe documentation doesn't allow this, but Adobe
implementations do.)
	- When the input came from a pipe (`-') switch, opening a filter on
currentfile that required more than 1 input byte to make progress would
cause Ghostscript to hang (in sreadbuf).
	- The interpreter didn't call gs_set_lib_paths before executing a
compiled-in initialization file.
	- A stream could be closed more than once.  (New bug in 2.8.)
	- The LZW decoder produced incorrect output if a code string was
too long to fit into a single output buffer.  (New bug as of 2.8.)

Implements a special check in def to allow construction of systemdict,
which is stored in global VM but references dictionaries in local VM.

Implements additional Level 2 features:
	- %null% and %ram% IODevices.
	- startjob, exitserver.
	- Local and global VM (finish).
	- Garbage collection (for everything except names and strings).

Moves the procedures for selecting paper size from systemdict to userdict.

Sets languagelevel to 2 in Level 2 mode, since essentially all of
Level 2 is now implemented.

Factors out the Level 1 extended color facilities (CMYK color and
colorimage) as a separate configuration feature.

Adds some preliminary code to begin implementing the Adobe BCP and TBCP
communication protocols.

Changes the implementation of save and restore so that the bookkeeping
structures are allocated in the new area, not the old.  (This is an
internal change not visible at the PostScript level.)

Library
-------

Fixes bugs:
	- gdevprn used some preprocessor macros in formal argument
lists that ansi2knr couldn't handle.
	- pick_cell_size called gs_distance_transform with a 0 argument
that non-ANSI compilers didn't automatically promote to floating point.
	- gs_screen_init called hypot with integer arguments that
non-ANSI compilers didn't automatically promote to floating point.
	- Some places didn't cast char to byte when needed.
	- The vx/vy origin adjustment for WMode=1 wasn't implemented.
	- The pattern cache wasn't initialized properly.
	- Composite fonts didn't properly decode strings that started with
an escape sequence, which have a special (undocumented) decoding rule, and
also didn't properly decode strings with multiple consecutive escape
sequences.

Factors out the Level 1 extended color facilities (CMYK color and
colorimage) as a separate configuration feature.

Version 2.9.1-beta (12/7/93)
==================

This version was distributed only to beta testers.

Utilities
---------

Adds a viewgif.ps utility to view GIF files.  The current version does not
work with interlaced data, local color tables, or files containing more
than one image.

Interpreter
-----------

Fixes bugs:
	- putinterval and copy didn't do the right thing if the source and
destination were aliases for overlapping sections of the same array or
string.
	- The DCT filter stub didn't allow the dictionary to be omitted.
(The Adobe documentation doesn't allow this, but Adobe implementations
do.)

Adds an optional dictionary argument to the LZWDecode filter, containing
InitialCodeLength, FirstBitLowOrder, BlockData, and EarlyChange entries.
Setting these parameters appropriately allows reading (non-interlaced) GIF
data directly.

Library
-------

Fixes bugs:
	- setdash produced inverted output if the pattern had an odd
number of elements and the offset O had the property that L <= O mod
2*L, where L was the sum of the pattern elements.

Version 2.9-beta (12/6/93)
================

Like 2.7, this version was created to satisfy a contractual requirement,
and will never be distributed to anyone other than the other party to the
contract.

Documentation
-------------

Notes that Ghostscript runs on IBM PCs and compatibles under DR DOS
6.0.

Notes that Ghostscript will run on IBM PCs and compatibles with
Hercules display cards if you redirect text output to a file.

Notes that the alternate DeskJet 500C driver (djet500c) does not work
on the 550C.

Gives a list of system-specific directories where Type 1 fonts are
likely to be installed, as a suggested setting for GS_FONTPATH.

Procedures
----------

Changes the distribution script so that it stores all text files in the
main source archive with Unix end-of-line conventions, but with DOS
end-of-line conventions in the MS-DOS-specific archive.

Changes the MS-DOS, MS Windows, and OS/2 makefiles so that 486SX and 486DX
processors are different CPU_TYPEs.  (The former, designated by
CPU_TYPE=485, does not include an on-chip FPU.)

Adds a line to gs_init.ps which can be uncommented to select A4 as
the default paper size.

Adds a definable CFLAGS macro to the makefiles, allowing -DA4 to
select A4 as the default paper size.

Adds the H-P printer drivers to the standard Unix configurations.

Utilities
---------

Fixes bugs:
	- If there were no unencoded characters, prfont.ps would get
an error.

Changes ansi2knr to accept a wider range of function declaration syntax,
and to not depend on any Ghostscript header files.

Drivers
-------

Fixes bugs:
	- Several drivers (DigiFax, Epson LQ-2550, NEC P6) didn't handle
A4 paper width.
	- The IBM ProPrinter wasn't being initialized properly.
	- The Epson driver didn't work properly with compilers that
insisted on 'char' being a signed type.
	- The Epson driver ignored its end_string argument, producing
incorrect end-of-page behavior on some printers.

Adds new drivers:
	- User-contributed drivers for Bellcore MGR (a window manager most
commonly used with OS-9) devices.
	- A user-contributed driver for the CIF file format.
	- A user-contributed driver for the HP 2563B line printer.

Changes the LaserJet 2p, 3, and 4 drivers so they set the initial position
to (0,0) rather than (0,0.25").  (I don't remember why it was the other
way.)

Implements the PageCount property in all drivers, not just printer
drivers.

Introduces a new gx_tile_bitmap type, and changes the tile_rectangle
device procedure to take it in place of gx_bitmap.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE.  However, it only affects devices that
implement their own tile_rectangle procedures, of which there aren't very
many.

Platforms
---------

Fixes bugs:
	- The VMS module lists referred to SDCTD and SDCTE instead of
SDCT.
	- The Unix install script tried to install the non-existent file
readme.doc.
	- Microsoft C does something bizarre with empty macro parameters,
which caused a problem with the gs_struct_type_... macros.
	- The Unix platforms didn't automatically handle the presence
or absence of <dirent.h>.
	- The DEC Alpha OSF/1 1.3 library lacks `const' in the prototype
for popen, which requires a workaround.
	- The DEC Alpha OSF/1 1.3 X Windows library uses `private' as a
member name.

Splits off gp_unifs.c, containing code common to "Unix-like" file systems.

Adds a user-contributed OS-9 platform.

Interpreter
-----------

Fixes bugs:
	- The currentfile cache wasn't updated properly if an executable
file appeared in the middle of a procedure.  In particular, eexec-encoded
.PFB fonts often didn't work.
	- There was an extraneous `goto top' in scfd.c.
	- An integer constant overflowed in iname.c.
	- -2147483648 (i.e., -1 << 31) was converted to a float.
	- eexec didn't skip the first 4 characters correctly if they were
split across a buffer boundary.
	- The font/matrix pair cache didn't properly free entries with only
an XUID that was being deallocated.

Implements additional Level 2 features:
	- Patterns, makepattern, setpattern.
	- IODevice resource, setdevparams, currentdevparams.
	- OutputDevice resource, setpagedevice, currentpagedevice.
	(Partially implemented.)

Adds a new type t_struct to handle miscellaneous types that are allocated
as objects and that the interpreter doesn't handle specially, and changes
condition, fontID, gstate, lock, and save types to use t_struct.  (This is
an internal change, not visible at the language level.)

Moves the maxlength of a dictionary to its own ref, eliminating the "size
of integer" hack.  (This is an internal change, not visible at the
language level.)

Adds the last OS error number to the error printout.

Removes the obsolete framedevice operator.

Implements resetfile (the only Level 1 operator not yet implemented!).

Changes the name of the getdevice operator to .getdevice.

Library
-------

Fixes bugs:
	- A couple of necessary casts from char * to byte * were omitted.
	- A Sun compiler required an extra cast to (void *) in the e1
macro in clip_rect_enum_ptrs in gxcpath.c.
	- The gx_dc_ procedures defined in gxdraw.c weren't marked as
'private'.
	- The number of "on" pixels in a halftone cell sometimes varied by
1 from cell to cell.
	- Mapping a gray level to CMYK didn't subtract it from 1 (to
produce the K component).
*	- charpath took hints into account.

Shuffles the order of some declarations to pacify the VMS C compiler.

Version 2.8-beta (11/10/93)
================

This version was distributed only to beta testers.  It adds Type 0 font
support.  It also includes extensive redesign of streams (to eventually
support procedure streams) and device properties (to eventually support
get/setpagedevice and get/setdevparams).

Documentation
-------------

Notes the change in X11 foreground/background handling.

Changes README so it no longer claims that Ghostscript works with X11R3.

Notes (in devs.mak) that the cdjmono driver is the best one to use for the
DeskJet 510.

Procedures
----------

Fixes bugs:
	- echogs wasn't always invoked with ./ on Unix systems.

Changes the file name unix-ansi.mak to unixansi.mak, so it can be created
on a MS-DOS system.

Adds a new "feature", ccinit.dev, which compiles and links the
initialization files (gs_*.ps) into the executable, just as ccfonts.dev
compiles and links fonts.  If ccinit and ccfonts are both selected, the
only external file needed at run time is Fontmap.  Note that you must have
a working version of Ghostscript already in order to create a version that
uses the ccinit feature, just as for ccfonts.

Utilities
---------

Fixes bugs:
	- the ps2image utility didn't put a %! on the first line of the
output.

Drivers
-------

Fixes bugs:
	- The Hercules display driver didn't include definitions for
outport2 and PAGE_HEIGHT_INCHES, which it uses.
	- The BGI driver didn't call setactivepage or setvisualpage,
which it needs to do in general.
	- The Apple DMP driver declared dmp_print_page rather than
appledmp_print_page, causing a compilation error.

Changes the X11 driver so that it doesn't use the default foreground and
background colors: you must set foreground and background explicitly for
Ghostscript if you want them to be other than black and white
respectively.

Adds new user-contributed drivers for:
	- The StarJet 48 inkjet printer;
	- The Linux VGALIB display interface.
	- OS/2 Presentation Manager.

Changes the margins of the Epson driver to 0.2, 0.0, 0.0, 0.0, which
more accurately reflect the printer's capabilities.

Changes the get_props and put_props device procedures to take property
list "objects" with a procedural interface, rather than a data structure
interface.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.  It affects all
get_props and put_props procedures.  Fortunately, there were only a few
devices that implemented their own get_props and put_props procedures (the
H-P color printers, and the three window systems -- X Windows, MS Windows,
and OS/2 PM).

Platforms
---------

Fixes bugs:
	- The meaning of the -p switch for the Watcom compile-and-link
program was changed between Watcom C/386 versions 8.5 and 9.5, causing the
make process to malfunction.
	- The SCFTAB and SCFDTAB modules were omitted from the VMS link
list.

Adds user-contributed code for OS/2.

Removes the assumption that an 80486 CPU implies the presence of hardware
floating point, since the 486SX and Cyrix 486SLC don't have it.

Fonts
-----

Fixes bugs:
*	- The GS_FONTPATH scanner didn't recognize .PFB fonts beginning
with %!PS-AdobeFont.
*	- The GS_FONTPATH scanner often didn't recognize .PFB fonts at all.
	- Type 1 fonts always set the line join, line cap, and miter limit
to known values, rather than using the current values.  (Using the current
values doesn't make much sense, but it's apparently what the Adobe
implementations do.)
	- DISKFONTS didn't work, because of the change in the Ghostscript
fonts to do a systemdict begin/end (in version 2.7.1).

Interpreter
-----------

Fixes bugs:
	- == didn't produce exactly the same output as the Adobe
interpreters.  (Some automated debugging and testing programs care.)
	- The CCITTFaxEncode filter could get caught in an infinite loop,
because it failed to mask a byte datum when scanning for runs of black
pixels.
	- The write operator gave an error for values outside the range 0
to 255, rather than just using the low-order 8 bits.
	- Some applications call a statusdict procedure named
setresolution without checking first whether it is present; Ghostscript
didn't provide one.
	- Reading from a closed stream caused an error instead of
returning EOF.
	- Input streams didn't close automatically at EOF.
	- findfont was defined as an operator, not a procedure.
	- closefile on a closed file gave an error.  (It isn't obvious
that the Adobe documentation specifies that it shouldn't, but that's what
Adobe says they do.)
	- The LZWDecode filter didn't handle codes representing strings
longer than the buffer size correctly.
	- The LZWDecode filter only allowed 4095 codes to be used, rather
than 4096.
	- The rand operator produced an infinite string of zeros if
given 0 or 0x7fffffff as the seed.
	- When a CDevProc procedure was called, there was an extra
copy of the character name on the operand stack below the operands of
CDevProc.

Replaces all stream implementations with new ones designed to allow
interruption at arbitrary times.  ****** The 2-D case of CCITTFaxEncode
hasn't been converted (but it probably didn't work before, either).

Implements additional Level 2 features:
	- Type 0 (composite) fonts.

Adds an eexecEncode filter.

Implements setcolorscreen, which was accidentally omitted from 2.7.

Library
-------

Fixes bugs:
*	- In colorimage, if the color space of the image was different
from the current color space, and the first data values on a scan line
were zeros, the wrong color could result.
	- The new flatness testing algorithm could overflow, producing
straight lines or obvious polygons instead of curves.
	- Images could fail to display pixels after the first non-blank
pixel on a line if halftoned color was required.  (This bug was probably
introduced in 2.7.)
	- Interpolation between transfer map entries didn't work, because
of a rounding/truncation bug in frac2bits (bug introduced in 2.7.1.)
	- cshow did an extra grestore at the end.

* Implements a hack to slightly displace 1-bit-wide or -high images.  This
is necessary to work around a bug in TeX (or dvips?), which uses such
images to draw horizontal and vertical lines without positioning them to
ensure that they cover device pixel centers.

Adds support for composite fonts (no new client procedures).

Version 2.7.2-beta (10/11/93)
==================

This version was distributed only to alpha testers.

Utilities
---------

Fixes bugs:
	- prfont.ps didn't print unencoded characters.

Improves mergeini.ps to remove embedded comments.

Interpreter
-----------

Fixes bugs:
	- An error occurring within the scope of an internal .stopped
didn't pop the command and error name off the stack.
*	- The = and == procedures weren't re-entrant.

* Adds a .writecvs operator that does a cvs to an internal string followed
by a writestring.

Library
-------

Fixes bugs:
	- grestore freed the path and the clip path in an order that
was likely to lead to memory sandbars.
	- moveto + closepath didn't actually close the path.
	- moveto + reversepath produced an empty path (no moveto).
	- moveto + closepath + reversepath produced an extra lineto.
	- reversepath didn't set the current point to the end (i.e., the
former beginning) of the last subpath.

Adds a "planar" memory device.

Version 2.7.1-beta (10/4/93, not distributed to the public)
==================

Like 2.7, this version was created to satisfy a contractual requirement,
and will never be distributed to anyone other than the other party to the
contract.

Documentation
-------------

Documents the GS_OPTIONS environment variable.

Adds a summary of all environment variables to the documentation
(use.doc).

Documents the existence of a third free viewer built on Ghostscript.

Utilities
---------

Fixes bugs:
	- wrfont didn't wrap a systemdict begin / end around the body of
the font.
	- wrfont wrote out the Symbol and ZapfDingbats encodings in a way
that only worked if the encoding was known by name.

Changes bdftops to include an XUID if desired.

Changes bdftops so that it uses 'show' for unknown ligatures, rather than
executing the characters as subroutines; this makes such ligatures work
properly with xfonts.

Drivers
-------

Fixes bugs:
	- The PCL drivers sent a printer reset (<ESC>E) at the beginning
of every page, instead of only before the first page.
	- The PCX driver didn't round up the scan line width in the
header, even though it produced scan lines with the correct (rounded)
number of bytes.

Adds a new map_rgb_alpha_color procedure.  This is a backward-compatible
change; this procedure defaults to calling map_rgb_color.

Platforms
---------

Fixes bugs:
	- On Unix platforms, the value of the TEMP environment variable
had to end with a '/'.
	- On MS-DOS systems, printer output to devices other than PRN
(specifically, LPTn) didn't put the device into binary mode.

Adds FPU_TYPE to the Unix makefiles, with a default value of 1.

Removes the mention of Xmu linking problems on the SunOS platform,
since the problem no longer exists.

Changes the order of X Windows libraries from Xt X11 Xext to Xt Xext X11.
This makes the OSF/1 linker happier.

Fonts
-----

Fixes bugs:
	- All the fonts originated by Aladdin, and the shareware fonts,
had UniqueIDs in the 4xxxxxx range, which is only supposed to be used for
limited-distribution fonts.
*	- When Ghostscript loaded a font, it pushed a scratch dictionary
on the dictionary stack, rather than userdict.  (Note that this fix also
requires fixing the fonts to include a protective systemdict begin /
end; see below.)
*	- When loading a font failed, Ghostscript didn't check the font
name against the default font name properly.
	- Ghostscript's own fonts didn't include a systemdict begin /
end to guard against redefinition of names used in the reading
procedures (e.g., index).
*	- When Ghostscript scanned a .PFB font to get the FontName, it
didn't skip over the 6-byte header, which could cause confusion or a
syntaxerror.
	- Loading a .PFB font that left extra information on the
operand stack didn't work.

Changes the ZapfDingbats font to use DingbatsEncoding rather than include
a copy of the encoding in itself, if DingbatsEncoding is known.  Changes
the Symbol font similarly.

Removes eexec encryption from the 4 URW fonts, so they will work with
DISKFONTS.

Adds shareware Hiragana and Katakana fonts (Calligraphic-Hiragana and
Calligraphic-Katakana, by Kevin Hartig).

Adds GS on the end of the family names of all of Aladdin's own converted
fonts.

Replaces many of the Hershey fonts with new ones (mostly Type 1) created
by Thomas Wolff, who added accents, accented characters, and other
non-alphabetics.  These too now have proper UniqueIDs.

Interpreter
-----------

Fixes bugs:
*	- imagemask interpreted the Decode array incorrectly (inverted).
	- Running out of memory when constructing a path incorrectly
signalled a limitcheck rather than a VMerror.
	- restore didn't purge uncached scaled fonts properly.

Adds alpha (opacity) to the graphics state, and setalpha and
currentalpha operators.

Redefines erasepage in terms of a new .fillpage operator that fills
the current page with the current color and then does a sync_output.

Redefines setdevice and putdeviceprops in terms of new .setdevice and
.putdeviceprops operators that return a boolean indicating whether the
page needs to be erased.  With this change, operators that erase the page
always call erasepage at the interpreter level rather than calling
gs_erasepage directly.

Library
-------

Fixes bugs:
	- The null device allowed its size to be reset.
	- clippath didn't establish a current point if the clipping
path was empty.
*	- The Type 1 font interpreter (gs_type1_interpret) flattened
curves even if it was being invoked for charpath.
	- Colored halftones usually didn't come out with the correct
phase, and had several other problems.
	- A show or charpath within a BuildChar procedure didn't work.
	- Accented characters composed with seac used the base
character width instead of the composed character width.  (The Adobe
documentation says these must be the same, but some commercial fonts
don't obey this.)
	- setcurrentpoint in the accent of a character composed with
seac didn't take the accent's displacement into account.

Adds an alpha (coverage) value to the graphics state, and
gs_setalpha/currentalpha procedures.  Currently Ghostscript just passes
the alpha value to the driver; it doesn't attempt to emulate alpha
handling if the driver doesn't support it.

Redefines gs_erasepage to call gs_fillpage.

Bypasses the fill code if the clipping box is empty.  This makes a big
difference for stringwidth, and doesn't hurt anything else.

Changes frac_1 from 0x7fff to 0x7ff8.  This allows exact representation of
practically all useful fractions, since this number (32760) is
2*2*2*3*3*5*7*13.

Changes float to double in several matrix routines for better accuracy.

Adds new device properties to implement the deviceinfo operator:
Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues.
Also adds HWBitsPerPixel and HWColorMap.

Changes the sorting algorithm for halftones to use qsort instead of
special code.

Changes the Type 1 interpreter so that it uses the current point, rather
than (0,0), as the character origin.

Version 2.7-beta (9/20/93, not distributed to the public)
================

This is the first of a series of beta-only versions planned for release
between 2.6.n and 3.0.  This version, in particular, was created to
satisfy a contractual requirement, and will never be distributed to anyone
other than the other party to the contract.

Documentation
-------------

Fixes bugs:
	- The "HP XLFD extensions" to X11R5 are not specific to H-P
platforms.
	- The configuration generation script used rm rather than rm -f.
	- gs.1 was installed in $(docdir) rather than $(mandir);
$(mandir) wasn't defined.
	- ansi2knr.1 was installed in $(docdir), which was
inappropriate because ansi2knr itself wasn't installed anywhere.

Moves documentation for versions 2.4.x and 2.5.x to history.doc.

Moves the documentation on how to add devices to the configuration
from devs.mak to make.doc.

Changes the name of readme.doc to current.doc, since the presence of
two "readme" files was confusing to users.

Documents how to use the Microsoft Windows PostScript printer driver
to convert TrueType fonts to Type 1 fonts embedded in the document.

Corrects several errors in the documentation of the get_bits driver
procedure.

Documents the fact that X11R3 is no longer supported.

Removes the last references to "Ghostscript" from the comments in the
gs_*.ps files.  The only remaining reference, other than the boilerplate
comments at the beginning of each file, is in the message at the end of
gs_init.ps.

Documents the use of WMAKEL rather than WMAKE with the Watcom compiler.

Procedures
----------

Fixes bugs:
*	- The Unix install script used gs rather than $(GS) as the name of
the executable.
*	- The Unix install script didn't copy gs_dbt_e.ps to $(gsdatadir).
	- genconf.c used ps2 as a variable name; ps2 is a predefined
preprocessor symbol in the VSC compiler used by IBM.
	- @-expansion didn't interact properly with -- and -+.
	- The Unix install script didn't copy COPYING to $(docdir),
and copied README to $(gsdatadir) rather than $(docdir).
	- ps2ascii used /bin/sh -f, which is an incorrect flag.

Removes all uses and mentions of USG (a now-obsolete GNU convention)
as a synonym for SYSV.

Removes filter.dev and dps.dev from FEATURE_DEVS if level2.dev is
included, since they don't add anything beyond level2.dev.

Changes the ccgs script to explictly remove the old .o file before
doing the mv, for the benefit of people who have changed mv to prompt
before overwriting.  Changes the configuration script to use rm -f
for the same reason.

Changes the -Z switch so an empty list of options does nothing, rather
than turning on all options.

Adds a -@ switch which is like -- and -+ except that it does
@-expansion of arguments.

Changes genconf so it takes patterns from the command line that describe
how to write the linker control files, rather than having the patterns
built in.

Changes -d and -D so that if no value is supplied, the default is
true rather than null.

Utilities
---------

Fixes bugs:
*	- The ps2ascii script still referenced ps2ascii.ps under its
old name gs_2asc.ps.
*	- ps2image.ps had a 'pop' missing in the written-out
definition of 'max' in the boilerplate code it put at the beginning
of compressed files.
*	- ps2image.ps got a typecheck if a scan line had no repeated
data in it anywhere.
	- wrfont.ps didn't handle CharStrings or Subrs that weren't
strings.
	- mergeini.ps produced an init file that incorrectly
attempted to load the Symbol and Dingbats encodings dynamically.

Removes the gsview.bat file, since it was confusingly named and not
generally useful.

Changes bdftops back to using encrypted CharStrings, for compatibility
with Adobe interpreters, but also changes lenIV to 0, to save a little
more space.

Changes the traceop utility so it makes traced operators appear to be
operators, and so it will replace a definition in systemdict if explicitly
requested to do so and systemdict is writable.

Adds a printafm utility for printing the metrics of fonts in AFM format.

Drivers
-------

Fixes bugs:
	- The cdj driver was missing a few type casts that were needed to
satisfy pedantic compilers.
	- For banded devices, many of the non-displaying target routines
were getting called with the original device as the first argument, not
the target device.  (This didn't make any difference in practice, because
gdev_prn_open explicitly copied the non-rendering procedures back into the
procedure vector.)
*	- The X driver didn't catch and discard bogus errors on
XFreeColors, which faulty servers generate.
*	- The X driver gave up on color allocation too easily.
*	- The X driver dynamic color table size could become negative.
*	- x_lookup_font could return platform fonts of very small sizes,
which have very inaccurate metrics.
*	- The ESCP/2 driver was incorrectly named gdevescp2 in devs.mak.
	- The Apple DMP driver used #if 0 / #endif instead of comment
brackets, and was incorrectly named "dmp" instead of "appledmp" in
the source code.
*	- The X driver didn't free dynamic colors at the start of each page.
*	- The X driver didn't bind foreground/background defaults tightly.
*	- The X driver didn't check for GHOSTVIEW_COLORS properly.
*	- The X driver freed too many colors if an allocation request failed.
*	- The X driver didn't check return value of gs_malloc for being NULL.
*	- The DeskJet/LaserJet driver used an incorrect command for
end-of-page.
*	- The DeskJet/LaserJet driver incorrectly reset the printer at the
beginning of every page.
*	- The PCX driver put an old version number in the header, and
didn't pad scan lines to an even number of bytes.
	- The BMP driver used a variable named `quad', which is a
reserved word on some platforms.
*	- The TIFF driver didn't handle A4 or B4 size paper correctly.
*	- The X11 driver incorrectly demanded the Xmu library, which was
not needed and which caused link errors on some versions of SunOS.
*	- X11 font matching scheme was too loose, causing overlaps and
other problems.
*	- X11 Font Extensions (rotated and mirrored fonts) did not work
properly on NCD terminals.
*	- When freeing the rgb cube/gray ramp, the parameters to gs_free()
did not exactly match the parameters to gs_malloc().
*	- Ghostscript failed to warn the user when it could not allocate
the original color cube/gray ramp and dropped back to a smaller
cube/ramp, or from color to mono.
*	- x_release could cause Ghostscript to fail if a font was freed
after the device was closed.
	- The X driver continued to ask the server for colors even after a
request failed, causing colored images to display very slowly.

* Adds a pcxgray driver to provide 8-bit gray scale output in PCX format.

Adds a pcx24b driver to provide 24-bit RGB color PCX output.

* Adds a LaserJet 4 driver.

Adds a user-contributed driver for the DEC LA70 (very similar to the LA75).

Substantially improves the performance of the PxM drivers by eliminating
an unnecessary copying step and by writing each scan line with a single
fwrite when possible.

Moves the gray-scale and 24-bit RGB device color mapping routines to
gxcmap.c from gdevpcx.c and (nowhere).

Allows window granularities smaller than 64K in the VESA driver.

Changes the LaserJet margins again.

Platforms
---------

Fixes bugs:
	- Platforms where stat doesn't return a st_blocks value
computed the block count wrong.
	- In gp_vms.c, the call on SYS$FILESCAN needed two uint *s
rather than a long * and a struct *.
*	- The VMS script files referenced IBSCAN instead of ISCAN2,
and omitted GDEVXXF.
*	- The UUENCODEd icons for the MS Windows platform were omitted
from the fileset.
*	- On MS-DOS systems, filenameforall didn't interpret * alone
as a pattern matching all files.

Adds wildcard matching capability to filenameforall under Unix.

Removes gp_file_status from the platform interface, since all
platforms provide identical stat calls in the C library.

Adds DesqView/X (using djgcc and go32) as a platform.

Removes the S3 driver from the standard PC configurations.

Adds documentation for compiling Ghostscript on the Intergraph Clipper.

Updates the documentation to add a better list of X Windows font
names for the Sun platform.

Fonts
-----

Creates an external file (gs_dbt_e.ps) with the ZapfDingbats encoding
(actually in 2.6.1, but not documented there).

Changes the names of the Cyrillic fonts to Shareware-Cyrillic-Regular
and Shareware-Cyrillic-Italic, keeping Cyrillic, Cyrillic-Regular,
and Cyrillic-Italic as aliases.

* Removes the requirement that the FontName in the font file be the same
as the name in Fontmap.  (This requirement led to the need for aliases,
and was extremely confusing to users.)

* Adds a GS_FONTPATH environment variable containing a list of directories
that should be scanned automatically for fonts.

* Gets rid of the Ugly font, and changes the default to the IBM Courier
font, which is freely distributable.

Interpreter
-----------

Fixes bugs:
	- cvs didn't check for stack underflow.
*	- zht2.c didn't include alloc.h.
*	- execstackoverflow cleared the e-stack instead of just
cutting it back.
	- if and ifelse incorrectly reported typecheck instead of
stackunderflow.
	- Copying a dictionary could alter some items even if a later
item causes an invalidaccess error because of an attempted store of a
local object into global VM.
	- bitshift and cvrs assumed that longs occupied 32 bits.
*	- exitserver didn't check the password, and always succeeded.
	- Font loading didn't suppress all output messages if QUIET
was set.
*	- The interpreter incorrectly pushed its exit procedure on
the e-stack if it was called again after an interrupt.
*	- The interpreter didn't treat timeout like interrupt in
terms of re-executing the current operation.
*	- `show' operators popped their operands before they were
sure they wouldn't be interrupted.
*	- rotate with a matrix operand didn't check for multiples of
90 degrees.
	- In the system name table, ge was misspelled eg, and
pathforall was misspelled pathfoall.
*	- file_close_file attempted to free the buffer even if it was an
externally supplied string (specifically, the argument of gs_run_string).
	- setprintername (in gs_statd.ps) set printername rather than
.printername.

Implements additional Level 2 features:
	- Indexed color space with lookup procedure.
	- sethalftone, except for the transfer function override,
	and currenthalftone.

Implements OtherSubrs for indices greater than 3 (required for
MultiMaster fonts).

Implements black generation and undercolor removal.

Changes `store' from a C procedure to a PostScript procedure.

Changes idiv back so it requires integer operands, per the Adobe
documentation but not per some old Adobe interpreters.

* Adds many new paper sizes to gs_statd.ps.  It now includes ISO a0-a10
and b0-b10, and CAD sizes archA-archE.

Implements `status' for non-%os% files.  (This is currently a no-op,
but the framework is there.)

Changes the error handler so it normally uses = rather than == to print
the operand stack, to avoid recursive errors.

* Adds time slicing capability to the interpreter.

Implements setcolorscreen/currentcolorscreen.

Library
-------

Fixes bugs:
*	- Rectangles with vertices specified in clockwise order were
drawn as 0-width lines.
*	- The string matching function reported that 'abcdefg'
matched the pattern 'abcde'.
*	- The bounding box of non-rectangular clipping paths was not
being marked as valid, so cached characters would simply get
discarded as being outside the bounding box.
	- erasepage filled the page with the device's white color,
not with gray level 1 passed through the transfer function.
*	- Colors with equal R/G/B or C/M/Y components were rendered
incorrectly if the 3 or 4 transfer functions were not all the same.
*	- Because of a bug in rc_unshare, using CIE color would give
random errors (such as /invalidaccess in --for--).
*	- setbbox didn't round the coordinates properly, which could
cause erroneous rangecheck errors with coordinates on the edge of the
box.
*	- Color halftones "flipped over" at the 50% point, inverting
foreground and background.
	- Quite a few places assumed that longs occupied 32 bits.
*	- kshow passed an incorrect c1 value to the procedure.
	- The debugging code in update_x_list in gxfill.c didn't take
into account the possibility that the active line at x_first might be
deleted.
	- gx_image_cached_char called the xfont render_char procedure an
extra time if it failed with required=0 and succeeded with required=1.
(This was just a small inefficiency, not a logic bug.)
	- Non-rectangular clipping regions weren't computed correctly,
because accum_add_rect didn't handle overlapping rectangles.
	- Drivers didn't report file system errors (such as file system
full) as an ioerror.
*	- setdevice didn't reset the charpath and setcachedevice flags.
	- The Zortech compiler produced wrong code for the uid_equal
macro; uid_equal is now a procedure.

Passes OtherSubrs arguments back to the caller correctly for indices
greater than 3.

Implements black generation and undercolor removal.

Removes gdev_mem_ensure_byte_order, which was no longer used or useful.

Removes gstdev.c (device tracing), since it hasn't been used in a
long time and is of little value given a reasonable debugger.

Changes the interface to the xfont char_metrics and render_char
procedures to allow them to return 1.

Changes 32-bit memory devices so they use CMYK color mapping rather
than RGB mapping with an unused byte.

Implements gs_setcolorscreen/currentcolorscreen.

Implements Level 2 halftones, except for the transfer function override.

Implements a hack to make zero-width rectangles display as one pixel wide,
to work around a bug in the Microsoft Windows PostScript driver.
Currently the hack only works for vertical lines, not horizontal ones.

Versions before 2.7
===================

See the file history.doc.
