History of Ghostscript versions 5.0 - 5.50

## Table of contents

> - Version 5.50 (9/16/98)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Interpreter, Interpreter (PDF), Library
> - Version 5.40 (beta) (9/10/98)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Library
> - Version 5.39 (beta) (9/8/98)
>   - Drivers, Library
> - Version 5.38 (beta) (9/3/98)
>   - Documentation, Drivers, Interpreter, Library
> - Version 5.37 (beta) (8/31/98)
>   - Documentation, Procedures, Utilities, Drivers, Fonts, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.36 (beta) (8/25/98)
>   - Documentation, Utilities, Drivers, Platforms, Fonts, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.35 (beta) (8/18/98)
>   - Documentation, Drivers, Fonts, Interpreter, Interpreter (PDF), Library
> - Version 5.34 (beta) (8/16/98)
>   - Documentation, Procedures, Drivers, Interpreter, Library
> - Version 5.33 (beta) (8/14/98)
>   - Platforms, Fonts, Interpreter (PDF), Library
> - Version 5.32 (beta) (8/13/98)
>   - Procedures, Interpreter, Interpreter (PDF), Library
> - Version 5.31 (limited) (8/11/98)
>   - Drivers, Interpreter, Library
> - Version 5.30 (limited) (8/10/98)
>   - Documentation, Procedures, Drivers, Platforms, Fonts, Interpreter, Streams, Library
> - Version 5.28 (limited) (8/3/98)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.27 (limited) (7/18/98)
>   - Documentation, Procedures, Drivers, Platforms, Interpreter, Interpreter (PDF), Library
> - Version 5.26 (limited) (7/7/98)
>   - Procedures, Drivers, Fonts, Interpreter, Library
> - Version 5.25 (limited) (7/1/98)
>   - Documentation, Procedures, Platforms, Fonts, Interpreter, Interpreter (PDF), Drivers, Library
> - Version 5.24 (limited) (6/17/98)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.23 (limited) (5/14/98)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.22 (limited) (2/19/98)
>   - Documentation, Procedures, Utilities, Drivers, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.21 (limited) (1/19/98)
>   - Documentation, Procedures, Drivers, Fonts, Interpreter, Interpreter (PDF), Library
> - Version 5.20 (limited) (1/8/98)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, Interpreter, Interpreter (PDF), Streams, Library
> - Version 5.10 (11/23/97)
>   - Documentation, Procedures, Utilities, Drivers, Interpreter, Library
> - Version 5.07 (limited) (10/31/97)
>   - Documentation, Drivers, Library
> - Version 5.06 (limited) (10/7/97)
>   - Documentation, Procedures, Utilities, Drivers, Interpreter, Interpreter (PDF), Library
> - Version 5.05 (limited) (9/24/97)
>   - Platforms, Drivers, Interpreter, Interpreter (PDF)
> - Version 5.04 (limited) (9/21/97)
>   - Documentation, Procedures, Utilities, Drivers, Interpreter, Interpreter (PDF), Library
> - Version 5.03 (8/8/97)
>   - Documentation, Procedures, Drivers, Platforms, Fonts, Interpreter, Interpreter (PDF), Library
> - Version 5.02 (7/28/97)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, Interpreter, Interpreter (PDF), Library
> - Version 5.01 (6/22/97)
>   - Documentation, Procedures, Utilities, Drivers, Platforms, Interpreter, Interpreter (PDF), Library
> - Version 5.0 (6/6/97)
>   - Documentation, Procedures, Interpreter, Library

This document is a record of changes in Ghostscript releases numbered 5.0 through 5.50. For earlier versions, see the the history documents:

> History of Ghostscript versions 4.n
> History of Ghostscript versions 3.n
> History of Ghostscript versions 2.n
> History of Ghostscript versions 1.n

For other information, see the Ghostscript overview.

#

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

#

##

##

#

##

##

##

##

#

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

#

##

##

##

##

##

#

##

##

##

##

#

##

##

##

##

#

##

##

##

#

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

#

##

##

##

##

##

#

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

#

##

##

##

#

##

##

##

##

##

##

##

#

##

##

##

##

#

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

##

#

##

##

##

##

##

##

##

##

#

##

##

##

##

    Within each release, news appears in the following order: Incompatible
    changes, 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 a
    previous release.

    Version 5.50 (9/16/98)

    This is the first public release since 5.10.  See
    the release summary
    for a list of major additions and changes.

    Documentation

    Fixes problems:
    	- Many files still referred to .txt rather than .htm files.
    (DLL.htm, Make.htm, New-user.htm, Readme.htm, bcwin32.mak, cfonts.mak,
    devs.mak, dvx-gcc.mak, dwmainc.cpp, gs-vms.hlp, gxdevcli.h, gxdevice.h,
    int.mak, jpeg.mak, libpng.mak, msvc32.mak, msvclib.mak, openvms.mak,
    os2.mak, unix-cc.mak, unix-gcc.mak, unixansi.mak, watc.mak, watcw32.mak,
    wccommon.mak, zlib.mak)

    Notes that ps2epsi.1 and ps2epsi.txt may be inconsistent or obsolete.
    (ps2epsi.1, ps2epsi.txt)

    Adds a reference to Thomas Merz's Ghostscript manual.  (Readme.htm)

    Adds instructions for making RPMs.  (Install.htm, Make.htm)

    Changes the URL for post-release notes.  (Bug-form.htm, Make.htm,
    New-user.htm)

    Notes problems with Watcom compilation.  (Make.htm)

    Procedures

    Fixes problems:
    	- On Unix systems, the documentation files didn't get installed by
    `make install'.  (unixinst.mak)
    	- $() was missing around MAKEFILE in a Windows makefile.
    (msvc32.mak)
    	- The dfax drivers didn't include all the necessary files in the
    linker list.  (contrib.mak)
    	- The MSVC makefiles didn't allow building the executable in a
    different directory.  (bcwin32.mak, gs.mak, lib.mak, msvc32.mak,
    msvccmd.mak, msvclib.mak, msvctail.mak, os2.mak, watcw32.mak, winint.mak,
    winlib.mak)
    	- The default build directory for the Borland compiler was debugobj
    rather than obj.  (bcwin32.mak)

    Adds a patch file and some specification files for making RPMs.  (gs.rps,
    gs-fonts.rps, rpm-conf.dif)

    Removes the docs target in the makefile, since this function is now
    performed by another program.  (unix-end.mak)

    Drivers

    Fixes problems:
    	- The jpeg drivers caused a memory access error.  (bug introduced in
    5.20 by an incorrectly made fix) (gdevjpeg.c)
    	- The x11cmyk driver implemented map_rgb_color, which it should not
    do.  (gdevxalt.c)

    Updates a high-level driver for the addition of the bit-planar image format.
    (gdevps.c)

    Utilities

    Fixes problems:
    	- echogs -h didn't work in environments where char is signed.
    (echogs.c)

    Platforms

    Fixes problems:
    	- MSVC++ 5.0 produced incorrect code with TDEBUG=0.  We "fixed" this
    problem by noting in the makefile that TDEBUG must be left set to 1.
    (msvc32.mak, msvclib.mak)

    Updates the icons for the MS Windows and OS/2 platforms.  (gsgraph.icx,
    gsos2.icx, gspmdrv.icx, gstext.icx)

    Interpreter

    Fixes problems:
    	- setpagedevice didn't update the state correctly when switching to
    a new type of device (different OutputDevice value).  (gs_setpd.ps)
    	- The interpreter's initialization depended on BSS being initialized
    to 0.  (files.h, zfile.c)

    Removes all references to reloc_struct_ptr other than in gsstruct.h.
    (igcref.c)

    Adds DEBUG tracing for pdfmarks.  (gs_pdfwr.ps)

    Disables TEST code for release.  (zcrd.c, zfdcte.c)

    Interpreter (PDF)

    Fixes problems:
    	- Some third-party software still referred to the obsolete #?
    procedure.  (pdf_main.ps)
    	- Destinations with string names weren't properly converted to
    pdfmarks.  (pdf_main.ps)
    	- Destinations with S = /Named weren't supported.  (pdf_main.ps)

    Library

    Fixes problems:
    	- Dropout prevention wasn't applied to landscape image masks.
    (gximono.c)
    	- When using async rendering, the renderer's allocator was allocated
    with the wrong allocator.  (gdevprna.c)
    	- gx_strip_bitmap and gx_device_mask_clip didn't have proper GC
    descriptors, causing crashes if a GC occurred while rendering an ImageType 3
    or 4 image.  (gsstruct.h, gxbitmap.h, gxclip2.h, gxclipm.h, gxmclip.h,
    gspcolor.c, gxclipm.c, gxmclip.c)
    	- The buffer for printer devices wasn't reallocated properly for
    async devices when the page size changed.  We aren't entirely comfortable
    with the fix, but it's the best we've got right now.  (gdevprn.c)
    	- Some files wouldn't compile with -dNOPRIVATE.  (gxcspace.h,
    gscdevn.c, gscolor2.c, gscscie.c, gscsepr.c)
    	- gp_semaphore_close and gp_monitor_close were defined as not
    returning an error code.  (gpsync.h, gp_nsync.c, gp_posem.c, gp_semon.c,
    gp_win32.c)
    	- Initialization code depended on BSS being initialized to 0.
    (gsiodev.c)
    	- The special PCL color mapping device didn't handle CMYK devices
    correctly in other than "identity" mode.  (gdevcmap.c)

    Cleans up a little formatting.  (gscie.h, gscpixel.c, gxmclip.c)

    Removes all references to reloc_struct_ptr other than in gsstruct.h.
    (gsstruct.h, gsalloc.c, gsdevice.c, gsfont.c, gxcpath.c)

    Patches the async code so that it allocates twice as much space for the
    renderer as should be needed, to deal with sandbars.  (gdevprna.c)

    Version 5.40 (beta) (9/10/98)

    A few more fixes.  This is intended as the candidate fileset for the 5.50
    release.

    Documentation

    Fixes problems:
    	- The current GNU Ghostscript version was documented as 3.33, not
    4.03.  (New-user.htm)
    	- The ansi2knr usage documentation didn't mention --filename.
    (ansi2knr.1)
    	- A projected completion date was too optimistic.  (ps2pdf.1)

    Replaces all documentation files with new HTML versions.  (*.txt [deleted],
    *.htm, index.html, imainarg.c)

    Adds a contributed set of Emacs macros useful for working with Ghostscript
    documentation.  (gsdoc.el)

    Changes the version and date format slightly in one file for consistency.
    (gs-vms.hlp)

    Procedures

    Adds a make target (make docs) to touch up documentation files before a
    release.  (unix-end.mak)

    Utilities

    Removes the long-obsolete ps2image.ps utility.  (ps2image.ps [deleted])

    Drivers

    Adds a driver for the Color LaserJet 5.  (devs.mak, gdevclj.c)

    Platforms

    Fixes problems:
    	- Blanks in command lines weren't handled properly.  (dwmain.cpp,
    dwmainc.cpp)

    Library

    Fixes problems:
    	- 16-bit devices didn't convert colors to RGB correctly.
    (gdevm16.c)
    	- 16- and 32-bit RasterOp didn't work, because pack_from_standard
    didn't handle depths greater than 8.  (gdevdrop.c)
    	- RasterOps with devices with non-standard color representation
    sometimes substituted black or white for the source or target.  (gdevdrop.c)
    	- The non-orthogonal case of Axial shading executed the axial-case
    code as well.  (gxshade1.c)
    	- copy_color on 4-bit-deep memory devices did an unnecessary
    fit_copy check.  (gdevm4.c)
    	- An upcast was missing.  (gdevbbox.c)
    	- View clipping was applied to internal devices, incorrectly.
    (gspath.c)

    Revises the implementation of shading so as to reduce the use of macros,
    update formatting, and help prepare for PatternType 2 patterns.  (gsshade.h,
    gxshade.h, gxshade4.h, gscolor3.c, gsshade.c, gxshade.c, gxshade1.c,
    gxshade4.c, gxshade6.c)

    Version 5.39 (beta) (9/8/98)

    A couple more small fixes.

    Drivers

    Fixes problems:
    	- The pkm[raw] drivers didn't work with 32-bit pixels.  (gdevpbm.c)

    Adds (fake) 8-, 16-, and 32-bit X11 CMYK devices, for debugging.
    Unfortunately, the 16- and 32-bit devices consume the hardware color map and
    then no longer behave reasonably; the 8-bit device produces output with
    garbled colors (fixed in 5.40).  (devs.mak, gdevxalt.c)

    Library

    Fixes bugs:
    	- All banded devices caused a memory access error.  (bug introduced
    in 5.38)  (gsstate.c)
    	- The special color mapping device didn't update its state after
    put_params.  (gdevcmap.c)
    	- RasterOp on 8-bit non-gray-scale devices didn't handle filling
    with constant 0 or 1 properly.  (gdevmrop.c)
    	- The halftone machinery didn't switch from full-size to strip
    halftones early enough, possibly allocating very large halftone data
    structures.  (gshtscr.c)
    	- If an ioerror (such as a disk- or memory-full condition) occurred
    while writing out the band list, the bookkeeping structures were left in an
    inconsistent state, causing further problems.  (gxclutil.c)
    	- Some shaded fills didn't check for errors when filling
    sub-regions.  (gxshade1.c, gxshade4.c)

    Cleans up some formatting.  (gxshade6.c)

    Version 5.38 (beta) (9/3/98)

    The sole purpose of this release was to fix some obscure bugs detected by
    the Genoa tests and by another Aladdin project.

    Documentation

    Updates the list of implemented PostScript LanguageLevel 3 features.
    (current.txt)

    Drivers

    Fixes problems:
    	- The PDF writer did the wrong thing for multi-source images with
    more than 180 bytes of data (total) per scan line.  (gdevpdfi.c)
    	- If one used setdistillerparams, [g]restore caused a rangecheck in
    .setpagedevice.  ****** DISABLED FOR DCT DICTS, SINCE THIS CAUSES A SEGV
    ****** (gdevpsdp.c)

    Interpreter

    Fixes problems:
    	- 0-length parameter arrays were given an arbitrary type, confusing
    clients.  (iparam.c)
    	- EOD on a write stream caused an error.  (zfileio.c)

    Library

    Fixes problems:
    	- 0-length parameter arrays confused clients that wanted arrays of a
    particular type.  (gsparam.c)
    	- Patterns with XStep or YStep smaller than the bounding box didn't
    work properly.  (gxp1fill.c)
    	- Resizing an object sometimes copied it unnecessarily.  (gsalloc.c)
    	- Freeing the shared part of a graphics state didn't free its
    sub-objects.  (gsstate.c)
    	- The standard allocator didn't free its initial (self-containing)
    chunk when asked to free itself.  (gsalloc.c)
    	- The standard allocator didn't attempt to merge free blocks before
    giving up.  We implemented this by adding another virtual procedure to
    allocators, consolidate_free.  (gsmemory.h, gsmemraw.h, gsalloc.c,
    gsmalloc.c, gsmemlok.c, gsmemory.c)
    	- The free object merging algorithm thought there were free objects
    even when there weren't.  (Small performance bug only.)  (gsalloc.c)

    Adds some more tracing to pattern filling.  (gxclip2.c, gxp1fill.c)

    Replaces the cs_alloc, cs_copy, and cs_undo_alloc macros with procedures.
    (gxcspace.h, gscolor2.c, gscsepr.c, gscspace.c, gspcolor.c)

    Moves the free-object merging code from gsnogc.c to gsalloc.c, so it can be
    used even in systems that have a garbage collector.  (gsalloc.h, gxalloc.h,
    gsalloc.c, gsnogc.c)

    Version 5.37 (beta) (8/31/98)

    Documentation

    Mentions the new cid2code utility in the documentation.  (psfiles.txt)

    Documents dpsnext.dev.  (gs.mak)

    Notes that clients of ImageType 3 images are responsible for providing the
    mask data before the pixel data.  (gsiparm3.h)

    Procedures

    Fixes problems:
    	- The makefiles were missing a dependency of jconfig.h on arch.h.
    With this fix, parallel builds (make -jN) work reliably.  (jpeg.mak)

    Utilities

    Adds a utility for creating maps from CIDs to Unicode.  (unixinst.mak,
    cid2code.ps)

    Drivers

    Removes the %Fax% IODevice code, since it was only a skeleton and Adobe no
    longer supports this facility.  (devs.mak, gdevpfax.c [deleted])

    Fonts

    Fixes problems:
    	- TrueType fonts whose first code wasn't 0 or 0xf000 didn't display
    correctly.  (bug introduced in 5.36) (gs_ttf.ps)
    	- CIDFontType 0 fonts didn't handle being redefined with another
    name.  (gs_cidfn.ps)
    	- CIDFontType 0 fonts could get local-into-global-store errors.
    (gs_cidfn.ps)
    	- PDF files couldn't use already-defined CMap resources.
    (pdf_font.ps)
    	- Out-of-range CIDs gave an error rather than using a notdef
    character.  (gs_cidfn.ps)

    Interpreter

    Fixes problems:
    	- CIDFontType 4 fonts weren't recognized as CID-keyed.  (zchar2.c,
    zchar32.c, zfont32.c)
    	- When recovering from an error in an operator procedure, the
    interpreter didn't update the dictionary stack caches.  (interp.c)
    	- startjob didn't reinitialize the stacks or VM space.  (gs_lev2.ps)
    	- Encoding filters with a Predictor always caused an error.
    (zfilter2.c)
    	- currenttrapparams gave an error.  (gs_ll3.ps)
    	- settrapparams had no effect, and left the dictionary on the stack.
    (gs_ll3.ps)

    Finishes implementing Type 32 fonts.  These fonts don't actually work
    directly with the cache -- they store the bitmaps in a compressed form in an
    ordinary Dictionary -- but they do behave the way they are specified.
    (gs_typ32.ps, zchar32.c, zfont32.c)

    Cleans up formatting and macros in a few more files.  (ccfont.h, icharout.h,
    icstate.h, iutil.h, iutil2.h, ibnum.c, iccfont.c, iccinit0.c, ilocate.c,
    isave.h, isave.c, iscannum.c, iutil.c, iutil2.c)

    Removes or capitalizes a few more macros.  (zcontext.c, zcssepr.c,
    zusparam.c)

    Interpreter (PDF)

    Fixes problems:
    	- Color spaces with subsidiary spaces (Indexed, Separation, DeviceN)
    sometimes didn't work properly, because they were translated to PostScript
    structures more than once.  (pdf_draw.ps)
    	- Type 3 fonts didn't rebind the resource context when executing the
    CharProc procedure.  (pdf_font.ps)

    Streams

    Fixes problems:
    	- The CCITTFax decoder signaled an error if it saw an EOB with
    EndOfBlock = false.  (According to e-mail from Adobe, EOBs should be
    recognized even if EndOfBlock is false, even though the Red Book implies the
    opposite.)  (scfd.c)

    Cleans up macros and formatting in a few more files.  (slzwce.c, sfxfd.c,
    sfxstdio.c)

    Library

    Fixes problems:
    	- Landscape color images usually didn't display.  (bug introduced in
    5.32)  (gxicolor.c)
    	- If gs_heap_free_object was called with ptr != 0 but bp = 0 (which
    is an error), an invalid memory access would occur.  (gsmalloc.c)
    	- The left side bearing was still being added in a second time for
    the accent of a seac.  (bug probably introduced in 5.20)  (gxtype1.c)
    	- An access error occurred when rendering the very last glyph of a
    TrueType font with a 2-byte loca table.  (gstype42.c)
    	- In the fast portrait case of monochrome images, a numerical error
    sometimes produced a 1-bit-wide vertical stripe of an incorrect color at the
    right edge of the image.  (gxifast.c)
    	- ImageType 3 images with InterleaveType = 3 gave memory access
    errors.  (gximage3.c)
    	- Hit detection ignored any part of the aperture that had negative X
    or Y coordinates.  (gdevhit.c)
    	- The special color mapping device didn't copy all necessary values
    back from its target.  (gxdevice.h, gdevbbox.c, gdevcmap.c, gsdevice.c)
    	- The special color mapping device didn't handle ordinary (Type 1)
    images correctly.  (gdevcmap.c)
    	- CMYK halftones complemented both the color and the halftone level:
    this produced the right number of pixels turned on (only for linear spot
    functions or threshold arrays), but wasn't consistent with either the Adobe
    specification or the user's intentions.  (gxcht.c)
    	- The phase of mask Patterns wasn't always set correctly.
    (gxp1fill.c)
    	- The reader side of overlapped band devices was confused about its
    open/closed status.  (gdevprna.c)

    Renames Type 32 fonts from ft_bitmap to ft_CID_bitmap.  (gxftype.h)

    Adds some more tracing for composite font decoding.  (gsfcmap.c)

    Adds some more tracing for images.  (gxiinit.c)

    Cleans up formatting and macros in a few more files.  (gxifast.c)

    Moves the image*_type_data and image*_enum_procs_data definitions from
    header files into more appropriate .c files.  (gsiparm2.h, gsiparm3.h,
    gsiparm4.h, gxiparam.h, gxiinit.c, gximage2.c, gximage3.c, gximage4.c)

    Version 5.36 (beta) (8/25/98)

    Another set of fixes.  The free-standing bbox device now produces convenient
    %%BoundingBox messages.  This fileset also includes support for double-byte
    TrueType fonts.

    Documentation

    Fixes problems:
    	- There was a minor spacing glitch in one man page.  (gs.1)
    	- The page printed by align.ps didn't make it clear enough what to
    do with the numbers it asks users to calculate.  (align.ps)
    	- The sample code for adding gamma adjustment didn't work most of
    the time.  (devices.txt)
    	- The prolog produced by pswrite was completely uncommented.
    (gdevps.c)
    	- The documentation didn't note that the string block freelist
    (sfree) is sorted in address order.  (gxalloc.h)

    Notes that FirstBitLowOrder and LowBitFirst are equivalent.  (slzwx.h)

    Notes a change in the FTP site of the free Kanji ("Wadalab") fonts.
    (fonts.txt)

    Adds a pointer to the freely available Unicode CMaps.  (fonts.txt)

    Changes an obsolete e-mail address for Carsten Emde.  (contrib.mak)

    Utilities

    Fixes problems:
    	- The viewgif utility sometimes left 1-scan-line gaps when rendering
    interlaced images.  (viewgif.ps)

    Drivers

    Fixes problems:
    	- In the PDF writer, downsampled images were always written with 8
    bits per sample, not the requested depth.  (gdevpsdi.c)
    	- The 8-to-N-bit compression filter produced an extra byte at the
    end of each row, and the N-to-8-bit expansion filter skipped an input byte
    at the end of each row.  (gdevpsds.c)
    	- In the PDF writer, the size of downsampled images for changing the
    pixel width was set incorrectly, leading to inconsistent image parameters in
    the output.  (gdevpsdi.c)
    	- The subsampling filters didn't take a clear position about what to
    do with excess input samples beyond a multiple of the reduction factor,
    leading to inconsistent image parameters.  We added a Boolean to indicate
    whether they should discard the samples or use them to create an additional
    output sample.  (gdevpsds.h, gdevpsdi.c, gdevpsds.c)
    	- The subsampling filters didn't provide the necessary set_defaults
    procedures.  (gdevpsds.h, gdevpsds.c)
    	- Because of a typo, pdfwrite and pswrite printed sequences of 4
    decimal values wrong. (bug introduced during macro removal in 5.25)
    (gdevpstr.c)

    Makes the PS writer produce a %%HiResBoundingBox as well as a %%BoundingBox.
    (gdevps.c)

    Platforms

    Fixes problems:
    	- The Borland makefile didn't include the MT libraries.  We added a
    MULTITHREAD option to this makefile.  (bcwin32.mak)
    	- The MSVC makefile didn't include the MT switches in the right
    place.  (msvccmd.mak)
    	- 'make clean' in the Windows makefiles didn't clean up quite
    enough.  (bcwin32.mak, msvc32.mak, msvccmd.mak)
    	- The OS/2 makefile had gotten slightly out of date.  (os2.mak)

    Cleans up some formatting.  (gp_win32.c)

    Fonts

    Fixes problems:
    	- Loading large TrueType fonts caused excessive garbage collection.
    (gs_ttf.ps)

    Finishes implementing support for turning double-byte TrueType fonts into
    CIDFontType 2 fonts.  (gs_ttf.ps)

    Interpreter

    Fixes problems:
    	- We thought the dictionary returned by currentuserparams should
    always be allocated in local VM, but in fact the correct definition is that
    it should be allocated in the current VM.  The simplest way to make this
    work is for setuserparams to copy any string values into global VM.
    (gs_lev2.ps)
    	- 1-input stitching functions didn't allow k = 0.  (ifunc.h,
    zfunc.c)
    	- OtherSubrs defined in PostScript no longer worked.  (bug probably
    introduced when we rewrote the Type 1 code in C) (zchar1.c)

    Cleans up a few compiler warnings (missing empty 'default' cases, unused
    variables).  (igc.c, iname.c)

    Replaces some uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR.
    (isave.c, iscan.c)

    Interpreter (PDF)

    Fixes problems:
    	- Resources were re-created on each page, causing (sometimes a lot
    of) unnecessary computation.  We implemented most of the machinery for
    avoiding this, but not the mechanism for actually storing resources in
    global VM.  (pdf_base.ps, pdf_main.ps)

    Adds a little more debugging code.  (pdf_draw.ps)

    Streams

    Cleans up formatting in a few more files.  (sbtx.h, sfilter.h, slzwx.h,
    spngpx.h, srlx.h, sstring.h, seexec.c, sfilter1.c, sfilter2.c, smtf.c,
    spcxd.c, srld.c, srle.c)

    Replaces a couple of #defines with duplicated (small) structures.  (sbtx.h,
    sfilter.h, sfilter1.c, sfilter2.c)

    Replaces all uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR.
    (stream.c)

    Library

    Fixes problems:
    	- If a garbage collection occurred during a string show operation,
    memory could be corrupted. (bug introduced in 5.24) (gstext.h, gstext.c)
    	- A debugging check incorrectly indicated an error when
    miter-checking lines with a 0 degree angle between them.  (gxstroke.c)
    	- A structure created for bitmap/pixmap patterns was never freed.
    (gspcolor.c)
    	- Colored halftones didn't work with 24-bit devices.  (This case was
    never actually used.)  (gxcht.c)
    	- CIE colors didn't remap properly if the current color space was a
    Pattern space.  (gscie.c)
    	- In a non-garbage-collected environment, freeing a string in the
    current chunk made an unnecessary test.  (Minor performance impact only.)
    (gsnogc.c)

    Cleans up a few compiler warnings (missing empty 'default' cases, unused
    variables).  (gsht.c, gsht1.c, gshtscr.c, gsimage.c, gxacpath.c, gxclread.c,
    gxicolor.c, gxshade4.c)

    Replaces some uses of RELOC_*_PTR with RELOC_*_VAR.  (gsht1.c)

    Changes the printed output of the free-standing bbox device so it produces
    %%BoundingBox and %%HiResBoundingBox lines that can be dropped directly into
    a DSC header.  (gdevbbox.c)

    Speeds up the 4-bit case of copy_mono by about 30%.  (gdevm4.c)

    Expands some macros and cleans up formatting, for easier reading and
    debugging.  Speeds up the color halftone generation algorithm substantially
    (up to 40%), by skipping the halftone computation for planes that are known
    to be solid-color, and using copy_mono directly if only one plane is not
    solid-color.  (gxcht.c)

    Version 5.35 (beta) (8/18/98)

    More updates for 5.3x, specifically fixing problems with halftones on banded
    CMYK devices.

    Documentation

    Fixes problems:
    	- The URLs for the third-party libraries were out of date.
    (make.txt, jpeg.mak, libpng.mak, zlib.mak)

    Drivers

    Adds an x11gray4 device for help in debugging.  (devs.mak, gdevxalt.c)

    Fonts

    Fixes problems:
    	- TrueType fonts with more than 64K of data before or after the
    glyfs caused an error.  (gs_ttf.ps)

    Interpreter

    Fixes problems:
    	- The dictionary returned by currentuserparams was allocated in the
    current VM rather than always in local VM.  (gs_lev2.ps)

    Interpreter (PDF)

    Fixes problems:
    	- CID-keyed fonts caused an error, because their CDevProc was
    incorrect.  (pdf_font.ps)

    Library

    Fixes problems:
    	- A comment was duplicated.  (gxht.h)
    	- The main procedure of the command list reader was so large that it
    couldn't be optimized by many compilers, and was very hard to read.
    (gxclrast.c)
    	- Banding devices using multi-screen halftones could get memory
    access errors because they didn't clear the halftone caches when changing
    halftone parameters.  (gxclrast.c)
    	- Banding devices using multi-screen halftones didn't set the
    halftone phase correctly.  (gxcht.c, gxclrast.c)
    	- RasterOp didn't work for 2- or 4-bit gray-scale devices.  It still
    doesn't work right, but it's closer.  (gdevm2.c, gdevm4.c, gdevmrop.c)
    	- Undefined characters in CMap-based composite fonts caused errors
    and possible invalid memory accesses.  (gschar0.c)

    Version 5.34 (beta) (8/16/98)

    More updates for 5.3x.

    Documentation

    Updates all of the man pages to new versions.  (gs-vms.hlp, gs.1, pdf2dsc.1,
    pdf2ps.1, ps2ascii.1, ps2epsi.1, ps2pdf.1, ps2ps.1)

    Procedures

    Fixes problems:
    	- The MSVC library makefile incorrectly included gp_msio.c.
    (msvclib.mak, winlib.mak)

    Drivers

    Fixes problems:
    	- The PDF writer unnecessarily checked for other parameters after a
    failing show or pdfmark.  (gdevpdfp.c)
    	- The device's BufferSpace parameter was ignored.  (bug introduced
    by async rendering code in 5.30) (gdevprn.c)
    	- Banding devices smashed the first 4 bytes of each scan line.  (bug
    introduced in 5.28) (gxdevmem.h, gdevmem.c, gxclread.c)
    	- The phase for colored halftones was set wrong.  (We have "fixed"
    this innumerable times, and it is still probably wrong.)  (gxclrast.c)

    Replaces the deprecated gx_device_image_xxx calls with the new gx_image_xxx
    calls.  (gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c)

    Interpreter

    Fixes problems:
    	- The equality test for idiom recognition sometimes incorrectly
    returned false.  (zmisc3.c)
    	- shfill didn't take the BBox into account.  (It still doesn't.)
    (gxshade.c)
    	- The status operator could return an incorrect pages or bytes value
    for files larger than 2 Gb, rather than giving an error.  (zfile.c)

    Library

    Fixes problems:
    	- The hint tables weren't reset after processing the base character
    of a 'seac', leading to incorrect hinting and (for Type 2 CharStrings)
    possible mis-parsing of the outline data.  (gstype2.c)
    	- When processing a 'seac', the left side bearing was added in
    twice, displacing characters to the right.  (bug probably introduced in
    5.20) (gstype1.c)
    	- RasterOps didn't set the size of the RasterOp texture device,
    which caused filling operations involving a colored halftone to be clipped
    to an empty rectangle.  (gdevrops.c)
    	- When filling with a colored halftone, the RasterOp source was
    often disregarded.  (gxcht.c)
    	- gx_device_image[_plane]_data and gx_device_end_image took an
    unused dev argument, leading to potential confusion.  We deprecated the
    gx_device_image_plane_data and gx_device_end_image procedures, replacing
    them with macros that call their replacements gx_image_plane_data and
    gx_image_end (which no longer have the spurious dev argument).  (gxdevcli.h,
    gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c, gdevdflt.c, gsimage.c,
    gslib.c, gxclimag.c, gxclrast.c, gximage2.c, gximage3.c, gximage4.c)
    	- gs_color_adjust_count, introduced in 5.33 to address the problem
    of freeing free-standing patterns, just made things worse.  We are replacing
    them with gs_pattern_reference, essentially the procedure introduced in 5.31
    that we deleted in 5.33.  (gsccolor.h, gspcolor.h, gscolor.c, gspcolor.c)

    Changes hint suppression from a #define to a debugger-settable static.
    (gxhint1.c)

    Version 5.33 (beta) (8/14/98)

    This is the third set of updates for 5.30.  These updates have been driven
    mostly by the needs of another Aladdin project, so they haven't included as
    many problem fixes as we would normally make.

    Platforms

    Fixes problems:
    	- The thread creation procedure for Win32 called a Windows function
    rather than the proper C library function.  (gp_win32.c)
    	- In some MS-DOS implementations, the copy command doesn't recognize
    the /Y switch.  (bcwin32.mak)

    Fonts

    Fixes problems:
    	- TrueType fonts with *less* than 64K of glyf data stopped working.
    (bug introduced in 5.31) (gs_ttf.ps)

    Interpreter (PDF)

    Fixes problems:
    	- Using an Identity function left an extra element on the stack.
    (pdf_draw.ps)
    	- The syntax of # in names is different in PDF 1.1 and PDF 1.2, but
    the PDF 1.2 syntax was always used.  (pdf_base.ps, pdf_main.ps)

    Library

    Fixes problems:
    	- Color images still always caused an error. (bug introduced in
    5.32) (gxicolor.c)
    	- Because of a typo, the implementation of image types didn't
    compile. (bug introduced in 5.32)  (gxiparam.h)
    	- Free-standing colors (specifically pattern colors) and color
    spaces couldn't be freed.  This required a NON-BACKWARD-COMPATIBLE change in
    an internal API used for managing color and color space reference counts.
    (gxcspace.h, gsccolor.h, gscdevn.c, gscolor.c, gscolor2.c, gscscie.c,
    gscsepr.c, gscspace.c, gspcolor.c)

    Cleans up a little more formatting.  (gscspace.h)

    Version 5.32 (beta) (8/13/98)

    This is the second set of updates for 5.30.

    Procedures

    Fixes problems:
    	- The OS/2 makefile accidentally omitted the OS/2-PM driver.
    (os2.mak)
    	- The MSVC library makefile didn't work.  (msvclib.mak)
    	- Debugging was turned on in the Borland Windows makefile.
    (bcwin32.mak)
    	- The BEGINFILES2 list was too long in the MSVC makefile.
    (msvc32.mak)

    Interpreter

    Fixes problems:
    	- .execn wouldn't accept pseudo-operators.  (iref.h)
    	- inustroke with a matrix operand didn't work correctly.  (zupath.c)
    	- ImageType 4 images didn't work.  (bug introduced in 5.31)
    (zimage3.c)

    Interpreter (PDF)

    Fixes problems:
    	- Forms used more than once caused an invalidaccess error.
    (pdf_draw.ps)

    Library

    Fixes problems:
    	- Using a colored pattern with a Pattern color space that included a
    base space could access uninitialized floating point values, possibly
    causing an arithmetic trap.  (gspcolor.c)
    	- RasterOp wasn't implemented for 16- and 32- bit devices.
    (gdevm16.c, gdevm32.c, gdevmrop.c)
    	- The library test program relied on copysign, which some C
    libraries lack.  (gslib.c)
    	- The gs_free and gs_heap_free_all debugging printout were included
    even if DEBUG wasn't defined. (bug introduced in 5.30) (gsmalloc.c)
    	- Color images always caused an error. (bug introduced in 5.30)
    (gxicolor.c)
    	- Masked images with pis = NULL could cause an error.  (gximono.c)
    	- In landscape orientation, masked images didn't guarantee that the
    buffer of mask scan lines would be flushed to the mask clipping device
    before processing the data being masked.  (gxiparam.h, gxidata.c, gxifast.c,
    gximage3.c)
    	- Images with source transparency set but CombineWithColor = false
    could get an error because of trying to paint with an unloaded
    color. (caused by a bug fix in 5.30) (gxdcolor.c, gxiinit.c)

    Version 5.31 (limited) (8/11/98)

    This is the first set of updates for 5.30.  They fix a few minor build
    problems, and some significant problems with bitmap patterns that do not
    affect the PostScript or PDF interpreters.

    Drivers

    Moves some casting macros from generic files to the few specific files that
    use them.  (gdev4693.c, gdevn533.c, gdevsnfb.c)

    Interpreter

    Changes ImageType 4 images to match the change in the library interface.
    (zimage3.c)

    Library

    Fixes bugs:
    	- The MaskColor elements of ImageType 4 images were defined as int
    rather than uint, truncating the range by 1 bit and causing problems in
    comparing the mask color against the pixel samples.  (gsiparm4.h,
    gximage4.c)
    	- A needed cast was missing from gs_malloc_memory_release.
    (gsmalloc.h)
    	- A needed cast from byte to char was missing.  (gsparams.c)
    	- Patterns always allocated a mask for rendering, which for large
    patterns specified directly as bitmaps allocated a lot of unnecessary
    memory.  (gxcolor2.h, gspcolor.c, gxp1fill.c, gxpcmap.c)
    	- Macros simply defining casted versions of variables made the code
    hard to debug.  We have only removed the ones that are in generic code (not
    drivers) and that cast pointers to gx_device or its subclasses: the only
    ones removed from header files were prn_dev in gdevprn.h, mdev in gdevmem.h,
    and ccdev, crdev, and cwdev in gxcldev.h.  gdevmem.h, (gdevprn.h, gxclist.h,
    gdevabuf.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c, gdevm24.c,
    gdevm32.c, gdevmpla.c, gdevnfwd.c, gdevprn.c, gxacpath.c, gxclimag.c,
    gxclist.c, gxclpage.c, gxclpath.c, gxclread.c, gxclrect.c)
    	- There was no way to free a pattern instance outside the graphics
    state.  (gspcolor.h, gspcolor.c)

    Version 5.30 (limited) (8/10/98)

    This is the first beta candidate for the 5.50 release.  It completes the
    merge of the overlapped rasterizing code into the main development line.

    Documentation

    Fixes bugs:
    	- Yves Arrouye's e-mail address was out of date.  (gdevbjc.h,
    gdevcdj.c, contrib.mak, devices.txt, unix-lpr.txt)

    Makes the warning against using SHARE_JPEG=1 even stronger.  (make.txt,
    dvx-gcc.mak, ugcclib.mak. unix*.mak)

    Removes information about using DCL files on VMS to build Ghostscript.
    (make.txt)

    Updates the documentation for begin_typed_image.  (drivers.txt)

    Procedures

    Fixes bugs:
    	- The Unix build procedure didn't create the obj subdirectory
    automatically.  (unixhead.mak, unix-end.mak)
    	- gsdll_h wasn't defined for the OS/2 PM device.  Fixing this
    properly required moving the OS/2 drivers into the same makefile as the MS
    Windows drivers, and renaming the file.  (devs.mak, msdevs.mak => pcwin.mak,
    winlib.mak)
    	- gsiparm4_h was used before it was defined.  (lib.mak)
    	- Building with shared libaries still used header files in
    Ghostscript's directories, not the ones in /usr/include.  ****** NOT DONE
    YET ******
    	- The makefiles all assumed they were located in the current
    directory, not in the source directory.  (*.mak)

    Adds new 'debugclean' and 'pgclean' targets, parallel to 'debug' and 'pg',
    for the Unix platforms.  (unix-end.mak)

    Changes the management of .dev files so that on Unix platforms, one can
    really maintain standard, debugging, and profiling builds simultaneously.
    This is a hack, but a fairly reliable one.  (gs.mak, unixhead.mak,
    unix-end.mak)

    Adds a dummy thread / semaphore / monitor implementation to all platforms
    other than Windows.  (dvx-tail.mak, openvms.mak, os2.mak, ugcclib.mak,
    unixtail.mak, watc.mak, watclib.mak)

    Drivers

    Updates driver support to use the new write-position stream.  (gdevpsdf.c)

    Platforms

    Fixes bugs:
    	- The Windows Registry calls didn't deal properly with a null
    pointer.  (gp_wgetv.c)

    Makes a small change in the platform semaphore / monitor API.  (gpsync.h,
    gxsync.h, gp_win32.c, gxsync.c)

    Adds a dummy thread / semaphore / monitor implementation.  Note that with
    this implementation, async rendering WILL NOT WORK.  (gp_nsync.c)

    Adds pthreads thread creation and POSIX semaphores for Unix platforms.  (We
    still need to add System V semaphores, which is all that is available on
    Solaris and BSDI.)  (gp_semon.c, gp_posem.c, gp_pthr.c).

    Fonts

    Fixes bugs:
    	- CIDFontType 0 fonts didn't select the proper VM space for adding
    entries to font dictionaries, and for loading Subrs strings.  (gs_cidfn.ps)
    	- TrueType fonts with an odd glyfs length didn't work.  (gs_ttf.ps)
    	- TrueType fonts with a Format 3 'post' table didn't work.
    (gs_ttf.ps)
    	- TrueType fonts where the encoding in the 'post' table didn't cover
    the entire set of glyfs didn't work.  (gs_ttf.ps)
    	- TrueType fonts with more than 128K of glyfs didn't work.
    (gs_ttf.ps)
    	- TrueType cmap format 6 didn't work.  (gs_ttf.ps)
    	- CIDFontType 0 fonts with hex data didn't skip over the > at the
    end of the data.  (gs_cidfn.ps)

    Interpreter

    Works around the fact that gs_shfill can't do a gs_setcolorspace for color
    spaces that require interpreter assistance.  (gs_ll3.ps)

    Moves clipsave and cliprestore to C code.  (gs_ll3.ps, zmisc3.c)

    Updates some files to reflect the redivision of gsmemory.h and gsstruct.h.
    (imemory.h, istruct.h, ialloc.c)

    Streams

    Adds a stream that just keeps track of the write position.  (stream.h,
    stream.c)

    Removes the compilation dependency that required all clients of the zlib
    filters to be compiled with the zlib source directory in the search path.
    (szlibx.h, szlibxx.h, szlib[cde].c)

    Library

    Fixes bugs:
    	- ImageType 4 images with >1 input component didn't work.
    (gximage4.c)
    	- Sampled functions didn't keep the fractional part when
    interpolating, possibly leading to infinite recursion in shading.
    (gsfunc0.c)
    	- The color error value for shadings was computed incorrectly for
    CIE color spaces.  (gxshade.c)
    	- The CharstringType 2 'roll' operator rolled the operands in the
    wrong direction.  (gstype2.c)
    	- Images with RasterOp or transparency didn't retain the current
    color properly, leading to unpredictable results.  (gdevmrop.h, gsropt.h,
    gdevddrw.c, gdevrops.c, gxdcolor.c, gxiinit.c, gximage3.c)
    	- A cast to void * was needed to remove a const modifier.
    (gscrdp.c)
    	- On 8-bit non-gray-scale devices, RasterOp values of all-0s or
    all-1s produced the wrong output.  (gdevmrop.c)
    	- The GC procedure for halftone screen enumerators was wrong,
    possibly causing invalid memory access errors.  This bug predates 5.10.
    (gshtscr.c)
    	- An extra pair of string quotes confused some compilers.
    (gsshade.c)
    	- There were several errors in the CharstringType 2 'flex'
    operators.  (gstype2.c)
    	- The structure descriptors for devices weren't initialized in
    library-only configurations.  (int.mak, gconf.c)
    	- The Pattern cache got confused if the current device when a
    Pattern color was used wasn't the same as the current device when the
    Pattern instance was created.  (gxpcmap.c)
    	- The target of forwarding devices wasn't reference-counted
    properly.  (gsdevice.c) ****** FIXING THIS PROPERLY WILL BE A LOT OF WORK:
    WE ONLY FIXED gs_setdevice_no_erase ******
    	- As a result of fixing a typo, the structure declaration for
    gx_page_queue was private, causing clients not to compile.  We left it
    private and added an instance allocation procedure.  (gxpageq.h, gdevprna.c,
    gxpageq.c)
    	- The mask for ImageType 3 images was clipped (incorrectly).
    (gximage3.c)
    	- Interpolated images with negative X->X values in the CTM were
    displaced on the page.  (gxiscale.c)

    Finishes integrating the asynchronous rendering code.  (gpsync.h, gxclist.h,
    gdevprna.c, gsmemlok.c, gxclimag.c, gxclpath.c, gxclutil.c)

    Updates the memory manager API for additional flexibility needed for
    asynchronous rendering.  (gsmalloc.h, gsmemlok.h, gsmemraw.h, gsalloc.c,
    gsmalloc.c, gsmemlok.c)

    Updates the standard memory manager to work with a fixed (externally
    supplied) set of chunks, needed for asynchronous rendering, removing some
    macros in the process.  (gsalloc.h, gsalloc.c)

    Updates some code to use more mnemonic variable names.  (gstype2.c,
    gxicolor.c)

    Removes some macros for better readability.  (gdevmrop.c)

    Adds dummy implementations of clipsave and cliprestore.  (gsclipsr.h,
    gsclipsr.c)

    Implements an alternative, but completely untested, parameter list
    serializer based on streams.  (gsparam2.c)

    Moves more of the internal memory manager structures from gsmemory.h to
    gsstruct.h.  (gsmemory.h, gsstruct.h, gsmemory.c)

    Version 5.28 (limited) (8/3/98)

    This fileset almost finishes merging in the code for overlapped
    ("asynchronous") interpretation and rasterizing that gave rise to the
    side-branch versions 5.13 and 5.14; eliminates all initialized non-constant
    globals from the graphics library (but not from the interpreter); and adds a
    few more LanguageLevel 3 features (CIEBasedDEF[G] color spaces, CloseSource
    and CloseTarget for streams, Separation base space for Indexed color
    spaces).

    We were not originally planning to produce another fileset until the code
    merge was completed; however, the schedule demands of another Aladdin
    project justify another intermediate fileset.

    Documentation

    Notes that the MSVC++ 5.0 compiler may lock up when compiling gxi12bit.c
    with optimization.  (make.txt)

    Procedures

    Fixes bugs:
    	- psl3 didn't include fzlib.  (int.mak)
    	- The Windows makefile had the wrong name for a DLL.  (winint.mak)
    	- The Borland Windows makefile had several errors.  (bcwin32.mak)

    At the request of a user, changes the creation of jconfig.h so it #includes,
    rather than copies, arch.h.  (jpeg.mak, gsjconf.h)

    Utilities

    Fixes bugs:
    	- viewpbm.ps scaled the image wrong.  (viewpbm.ps)

    Drivers

    Fixes bugs:
    	- clist_close was declared as an open proc rather than a close proc.
    (As it happens, this didn't make any difference.)  (gxclist.c)
    	- A comment was improperly terminated.  (gxpageq.h)
    	- A needed #include of memory_.h was missing.  (gdevpsde.c)

    Integrates nearly all the rest of the code for asynchronous rendering.
    (gdevprn.h, gdevprna.h, gxcldev.h, gxclist.h, gxclpath.h, gxclmem.h,
    gdevbmpa.c, gdevprn.c, gdevprna.c, gxclbits.c, gxclimag.c, gxclist.c,
    gxclmem.c, gxclpath.c, gxclread.c, gxclrect.c)

    Changes tracing of memory-based clists to occur only if -Z: is selected,
    rather than always if the code was compiled with -DDEBUG.  Note that this is
    a NON-BACKWARD-COMPATIBLE CHANGE (but only affects debugging).  (gxclmem.c)

    Implements the NumCopies parameter for all page devices, not just printers.
    (gxdevcli.h, gxdevice.h, gdevprn.c, gsdparam.c)

    Splits off command list writing utilities into a separate file, since
    gxclist.c was getting too large.  (gxclist.h, gxclist.c, gxclutil.c)

    Splits command list reading into control (gxclread.c) and the actual list
    interpreter (gxclrast.c), since the file was getting too large.  (gxcldev.h,
    gxclrast.c, gxclread.c)

    Distinguishes dev_proc_* (defining a general driver procedure) from
    prn_dev_proc_* (defining a printer driver procedure).  Unfortunately, we
    have to keep dev_proc_print_page and _print_page_copies for backward
    compatibility.  (gdevprn.h)

    Splits out of the BMP driver the parts shared with the async version
    (gdevbmp.h, gdevbmp.c, gdevbmpc.c).

    Changes the band rasterizer to implement get_bits_rectangle rather than
    get_bits.  In some cases, this results in much less computation.
    (gxclist.c, gxclread.c)

    Makes the monochrome H-P printer drivers emit a printer reset when closing
    the device.  According to a user, this helps prevent the ink nozzles from
    clogging.  (gdevdjet.c)

    Platforms

    Fixes bugs:
    	- The Windows DLL entry point procedure didn't return a value as it
    was supposed to.  (gp_mswin.c)

    Removes all remaining initialized but non-constant globals, and ensures that
    all non-debugging-related BSS variables in the library are explicitly set to
    0 at initialization time.  (gp_unix.c)

    Improves an error message slightly.  (dwmainc.cpp)

    Interpreter

    Fixes bugs:
    	- The tracing code for restore_resources could access an invalid
    address.  (isave.c)
    	- sizeof(procedure) is not allowed in ANSI C++.  (opdef.h,
    iccfont.c, interp.c, ireclaim.c)
    	- A variable was declared incorrectly as bin_token_type_t rather
    than bin_seq_type_t.  (iscanbin.c)
    	- The behavior of copypage didn't change in LanguageLevel 3.
    (gs_init.ps)
    	- When grestore et al reactivated a page device, they performed an
    initgraphics, which should only be performed by showpage.  (gs_setpd.ps)
    	- The RunLengthEncode filter was broken in cases where the caller
    supplied a record size.  (bug introduced in 5.2x) (zfilter.c)
    	- A needed #include of memory_.h was missing.  (zfreuse.c)
    	- On machines with sizeof(long) > sizeof(int), the dictionary form
    of image and imagemask didn't work.  (bug introduced in 5.2x) (zimage2.c)
    	- exitserver left a 'true' on the operand stack.  (gs_lev2.ps)

    Replaces the STACK_LOOP_BEGIN/END macros with procedures.  (We retain the
    macros for backward compatibility.)  (istack.h, istack.c, zchar.c,
    zcontrol.c, zdict.c, zvmem.c)

    Reviews the remaining operator files for ease of reading / debugging,
    including removing macros where appropriate.  (z*.c)

    Changes the dictionary stack printer to indicate whether the dictionary is
    allocated in global or local VM.  (gs_init.ps)

    Redefines countexecstack and execstack as operators, solely for the sake of
    the Genoa [count]execstack tests.  (gs_init.ps, zcontrol.c)

    Changes array/string/packedarray forall not to keep an index on the stack,
    solely for the sake of the Genoa [count]execstack tests.  (zgeneric.c)

    Finishes implementing CIEBasedDEF[G] color spaces.  (icie.h, zcie.c)

    Adds a ColorSpace resource instance for sRGB.  (gs_lev2.ps, gs_res.ps)

    Implements CloseSource and CloseTarget for filters.  ****** DOESN'T WORK IF
    AN EXCEPTION OCCURS DURING A NESTED CLOSE. ****** (zfile.c)

    Allows Separation and DeviceN color spaces as the base space for an Indexed
    color space.  (zcsdevn.c, zcsindex.c, zcssepr.c)

    Interpreter (PDF)

    Fixes bugs:
    	- In PDF files, Indexed color spaces with a CIEBasedABC base space
    gave an /undefined error.  (pdf_draw.ps)

    Streams

    Fixes bugs:
    	- The report_error member of the DCT streams wasn't initialized
    early enough.  (ifilter.h, zfdctd.c, zfdcte.c, zfile.c)

    Changes the zlib filters to use the stream's allocator, rather than the
    default allocator, for their private storage.  Note that this requires the
    stream itself to keep pointers to this storage, for garbage collection.
    (szlibx.h, szlibc.c, szlibd.c, szlibe.c)

    Updates some clients to use new, simpler GC structure descriptors.  (sdct.h,
    sfilter.h, sdctc.c, sfilter1.c)

    Adds a close_strm member for the interpreter's use (CloseSource /
    CloseTarget).  (stream.h, stream.c)

    Library

    Fixes bugs:
    	- gstate, currentgstate, and setgstate didn't handle the effective
    clip path properly, possibly leading to dangling pointers.  (gsstate.c)
    	- setrasterop, setsourcetransparent, and settexturetransparent
    should all return int rather than void, since they can fail.  (gsrop.h,
    gsrop.c)
    	- FunctionType 1 functions didn't clip the output value to the
    Range.  (gsfunc3.c)
    	- A needed cast from byte * to char * was missing.  (gscrdp.c)
    	- Some needed #includes of *_.h were missing.  (gscrd.c, gscrdp.c,
    gxshade6.c)
    	- The prototype for gx_effective_clip_path wasn't #included in a
    needed place.  (gsimage.c)
    	- RasterOp sometimes didn't work properly for devices whose
    representation of white wasn't a pixel value of 0.  (gxdcolor.h, gdevbbox.c,
    gdevdbit.c, gdevvec.c, gslib.c, gxdcolor.c)
    	- The variable used to detect double declaration of
    gs_get_bits_params_t was named incorrectly.  (gxdevcli.h, gxgetbit.h)
    	- gs_[eo]clip never retained the clipping path in its original form.
    These routines now retain it in the simple case (the old clipping path is a
    rectangle, and the new path is completely contained within it).  This
    requires a small NON-BACKWARD-COMPATIBLE change in the gx_cpath_intersect
    procedure: it no longer updates the new path, and it flattens the path if
    needed.  To avoid problems, we renamed this procedure as gx_cpath_clip.
    (gsdps.c, gspath.c, gxcpath.c)
    	- If the image was empty, gs_image_common_init didn't free the
    lower-level enumerator.  (gsimage.c, gxccache.c)

    Removes all remaining initialized but non-constant globals, and ensures that
    all non-debugging-related BSS variables in the library are explicitly set to
    0 at initialization time.  (gxdevice.h, gconf.c, gsdevice.c, gshtscr.c,
    gsiodev.c, gsutil.c, gxcht.c)

    Finishes implementing table-driven GC descriptors.  We expected it to save
    considerable space at negligible time cost; it actually shrank the 1Mb
    executable by only about 5K, and slowed down garbage collection by about
    2%. (gsfcmap.h, gsstrtab.h [deleted], gsstruct.h, gzpath.h, gsfcmap.c,
    gsmemory.c, gsstrtab.c [deleted])

    Finishes implementing CIEBasedDEF[G] color spaces.  (gscie.h, gscie.c)

    Simplifies some code by removing or redefining macros.  (gxi12bit.c)

    Removes all patches made for easier retrofitting of 5.2x code into 5.1x
    filesets.  (gdevdrop.c, gdevmrop.c, gslib.c, gspcolor.c)

    Reviews a few more files for style and readability.  (gxbitfmt.h,
    gxgetbit.h)

    Allows Separation (and, if included, DeviceN) color spaces as the base space
    of an Indexed color space.  Unfortunately, this involves introducing a new
    distinction in color space types, which entails NON-BACKWARD-COMPATIBLE
    changes in the color space and color space type structures.  (gxcspace.h,
    gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c,
    gscspace.c, gspcolor.c)

    Makes a small addition in order to fix an interpreter bug.  (gxfixed.h,
    gdevbbox.c)

    Version 5.27 (limited) (7/18/98)

    This is another "in-flight" snapshot made in preparation for the 5.2x / 5.1x
    code merge.  It completes the driver CRD API.

    Documentation

    Fixes bugs:
    	- The reference to psview was out of date.  (new-user.txt)

    Adds some pointers to Aladdin Ghostscript mirror sites.  (new-user.txt)

    Updates the C style guide a little further.  (c-style.txt)

    Adds documentation on driver-supplied CRDs.  (drivers.txt)

    Updates the JPEG makefile to mention IJG release 6b.  (jpeg.mak)

    Updates documentation to reflect the devs.mak / contrib.mak split.  (README,
    devices.txt, drivers.txt, make.txt, new-user.txt, source.txt, use.txt)

    Procedures

    Fixes bugs:
    	- sjpegerr.o was needed even when using the shared JPEG library.
    (jpeg.mak)

    Changes the name of the jpeg library directory from jpeg-<version> to just
    jpeg, to parallel libpng and zlib.  (make.txt, *.mak)

    Creates a separate makefile for contributed drivers.  Eventually these
    drivers will go in a separate directory.  (devs.mak, contrib.mak, *.mak)

    Drivers

    Fixes bugs:
    	- The pkm driver was absurdly inefficient.  (gdevpbm.c)
    	- The psfax driver (which, admittedly, doesn't come close to
    working) no longer compiled.  (gdevpfax.c)
    	- The ARCHAIC mode of the Epson driver emitted an incorrect
    character ('r' instead of ^R).  (gdevepsn.c)
    	- The X driver didn't check the calls of XInitImage for error
    status.  (gdevx.c)

    Updates a client for the change in the names of the gb_ values.  (gdevx.c)

    Updates a client for the added param_request procedure.  (gdevpsdf.c)

    Reformats all Aladdin-maintained drivers to the new Ghostscript standard
    format, using indent.  We deliberately did not reformat user-contributed
    drivers, since indent mangles a line once in a while and we do not want to
    take responsibility for fixing others' code.  (*.h, *.c)

    Adds a default CRD specification to the 'bit' device, for testing.
    (gdevbit.c)

    Integrates a bit more of the support code for asynchronous rasterizing.
    (gxband.h, gxclio.h, gxclist.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c,
    gxclread.c, gxpageq.h, gxpageq.c)

    Platforms

    Adds thread support to the Win32 platform.  (gp_win32.c)

    Interpreter

    Fixes bugs:
    	- Composite fonts with CID-keyed descendants didn't run the
    BuildGlyph procedure.  (zchar.c)
    	- The internal representation of CMaps was built incorrectly.
    (zfcmap.c)
    	- Category resources didn't load from files automatically.
    (gs_res.ps)

    Reformats all files to the new Ghostscript standard format, using indent.
    (*.h, *.c)

    Reviews most of the operator files for ease of reading / debugging,
    including removing macros where appropriate.  (z*.c)

    Updates a client for the change in the names of the gb_ values.  (zdevice.c)

    Updates a client for the added param_request procedure.  (iparam.c)

    Updates clients for the completion of the CRD API.  (zcie.c, zcrd.c)

    Increases the initial size of systemdict a little more, to allow for -d and
    -s.  (iinit.c)

    Interpreter (PDF)

    Fixes bugs:
    	- Text modes other than 0 didn't work with multiple-byte fonts.
    (pdf_ops.ps)
    	- There were many bugs in the code for Type 0 and CIDFontType 0
    fonts.  (pdf_font.ps)

    Library

    Fixes bugs:
    	- cshow returned a character code of -1 for composite fonts with
    FMapType 9 (CMap-based).  (gsfcmap.h, gschar0.c, gsfcmap.c)
    	- The GC procedure for enumerating show enumerators was broken.
    (bug introduced in 5.24 or 5.25) (gschar.c)
    	- dashpath always copied the path, instead of only copying it if
    needed.  (gspath1.c)
    	- The hint replacement fix in 5.24 sometimes thought a path was
    closed when it wasn't, producing gross distortions of some characters.
    (gxhint3.c)

    Cleans up code for debugging by expanding macros, etc.  (gstext.h,
    gschar0.c)

    Changes the gb_ values to all caps, in line with general C convention.  This
    is a NON-BACKWARD-COMPATIBLE change to an as yet rarely-used API.
    (gxbitfmt.h, gdevalph.c, gdevdgbr.c, gdevmem.c, gsalphac.c, gximage2.c)

    Enhances the default implementation of parameter lists to allow requesting
    individual parameters.  This is needed for the driver CRD API.  (gsparam.h,
    gscparam.c, gsparam.c)

    Completes the API for driver CRDs, also moving some code from gscie.c to
    gscrd.c.  This involves a NON-BACKWARD-COMPATIBLE change in the prototype of
    the TransformPQR procedures.  (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c,
    gscrdp.c)

    Reformats all files to the new Ghostscript standard format, using indent.
    (*.h, *.c)

    Splits up gdevmrop.c into 3 files: gdevmrop.c (RasterOp implementation for
    memory devices), gdevdrop.c (default and device-independent RasterOp
    algorithms), and gdevrops.c (RasterOp-source device).  (gdevmrop.h,
    gdevdrop.c, gdevmrop.c, gdevrops.c)

    Version 5.26 (limited) (7/7/98)

    The purpose of this fileset is to add an API for drivers to provide one or
    more device-appropriate CIE rendering dictionaries.  Like 5.25, it is a
    "snapshot" fileset not made available even to beta testers.

    Procedures

    Fixes bugs:
    	- An !endif was omitted.  (msvc32.mak)
    	- A newly needed Windows library was omitted.  (msvctail.mak)
    	- The /Za and /Ze switches were set incorrectly for MSVC.
    (bcwin32.mak, msvccmd.mak, watcw32.mak, winint.mak, winlib.mak)

    Drivers

    Fixes bugs:
    	- A closing bracket was omitted (in code that is ifdef'd out).
    (gdevpdf.c)

    Fonts

    Changes the font loader so that instead of pushing systemdict and a small
    empty dictionary on the stack before loading a font, it pushes userdict.
    This is what Adobe interpreters do, but this will probably break some
    PostScript files, specifically ones that redefine 'index'.  I don't see how
    the Adobe interpreters can possibly do the right thing for such files.
    (gs_fonts.ps, gs_type1.ps)

    Interpreter

    Updates clients for changes in CRD API.  This involves some changes in
    internal procedures.  (gs_lev2.ps, icie.h, zcie.c, zcrd.c)

    Library

    Fixes bugs:
    	- Pickling string, name, and array parameters tried to force
    inappropriate alignment.  (gsparams.c)
    	- Pickling dictionary parameters wrote the result in the wrong
    place.  (gsparams.c)
    	- An occurrence of dev_t should have been gx_device.  The compiler
    didn't catch this because there happens to be a type named dev_t in
    <types.h> (!).  (gxclread.c)

    Adds an API for drivers to provide one or more CRDs (as device parameters).
    Makes a small but NON-BACKWARD-COMPATIBLE change in the names and argument
    lists of the existing CRD API (which is not used by anything in the standard
    configuration).  (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c, gscrdp.c,
    gslib.c)

    Version 5.25 (limited) (7/1/98)

    This is a "snapshot" fileset created for the purpose of merging with a
    separate development branch.  While it fixes some significant bugs in 5.24,
    it doesn't represent substantial additional progress.

    Documentation

    Completely rearranges the C style guide, updates it to reflect current
    practice, and adds a 1-page summary of the most important points.
    (c-style.txt)

    Updates the man pages for consistency and to correct minor errors.  (*.1)

    Notes that the pjxl300 driver works with the H-P CopyJet.  (devices.txt,
    devs.mak).

    Notes that in order to deal with over-zealous Solaris security checking,
    additional linker switches are needed.  (make.txt, unix*.mak)

    Procedures

    Fixes bugs:
    	- 'make install' didn't get the executable from the right place.
    unixinst.mak)
    	- COMPILE_INITS=1 didn't work.  (int.mak, geninit.c)
    	- The MSVC makefile updates hadn't been applied to the MSVC-only
    devices.  (devs.mak)
    	- The other PC makefiles didn't define GLCCWIN.  (bcwin32.mak,
    watcw32.mak)

    Adds bounding box testing to the library test program.  (ugcclib.mak)

    Reviews and reformats code for maintainability.  (genarch.c, geninit.c)

    Moves the MS Windows-specific devices to a new file.  (bcwin32.mak,
    devs.mak, msdevs.mak, msvc32.mak, watcw32.mak)

    Platforms

    Reviews and reformats header files for maintainability.  (vmsmath.h,
    windows_.h)

    Removes some no-longer-used files from the fileset.  (overlay.h, gp_itbc.c)

    Fonts

    Fixes bugs:
    	- Substituted fonts had their FontName set to the requested one.
    There was a comment in the code saying that some files that depend on this
    happening, but Adobe implementations don't do it.  However, aliased fonts in
    Fontmap will continue to have the FontName set to the Fontmap key.
    (gs_fonts.ps)

    Adds the euro symbol at position 240 (0360) in SymbolEncoding.  This is a
    PostScript 3 addition, but it's too much work to make it appear there only
    if languagelevel >= 3.  (gs_sym_e.ps)

    Interpreter

    Fixes bugs:
    	- The bbox device didn't work if its target was itself a forwarding
    device.  (gdevbbox.c)
    	- User parameters maintained at the PostScript (as opposed to VM)
    level didn't work.  (gs_init.ps)
    	- Idiom recognition didn't work.  (gs_init.ps, gs_ll3.ps, zmisc3.c)
    	- .beginpage and .endpage could cause an error if the current device
    was a page device but was installed with setdevice rather than
    setpagedevice.  (gs_setpd.ps)

    In the interest of readability, replaces all casting macros with separate
    variables, other than those used in enum_ptrs and reloc_ptrs procedures.
    Note that doing this for rptr in gc_trace in igc.c will have a significant
    performance cost on Intel CPUs, unless the compiler has a very good
    optimizer, because it introduces another variable competing for scarce
    registers in the most performance-critical section of code in the garbage
    collector.  (ialloc.c, igc.c, iparam.c, isave.c, istack.c, zchar42.c,
    zfproc.c, zusparam.c)

    Changes some macros to procedures.  (igc.c, ilocate.c, zusparam.c)

    Changes some macros to static quasi-constants (only variable for debugging).
    (zvmem.c)

    Adds #include "errors.h" to oper.h, removing it from z*.c.  (oper.h, z*.c)

    Reviews and reformats some header files for maintainability.  This is an
    ongoing project.  (bfont.h, errors.h, iinit.c)

    Consolidates and simplifies the reading and writing of binary tokens and
    binary object sequences.  (bseq.h [deleted], btoken.h, ibnum.h, ibnum.c,
    iscanbin.c, zbseq.c)

    Adds dummy user and system parameter entries for all the parameters listed
    in Appendix C of the PostScript Red Book: even though the book clearly says
    that no PostScript program should rely on the presence of any particular
    parameter, PostScript files routinely assume the existence of the parameters
    listed in Appendix C.  (gs_init.ps, gs_lev2.ps, gs_res.ps)

    Adds dummy user and system parameter entries for the new parameters listed
    in the 3010 Supplement.  (gs_ll3.ps)

    Adds double-inclusion protection to all header files.  (*.h)

    Moves the creation of binary object sequence headers from C to PostScript
    code.  (zbseq.c, gs_btokn.ps)

    Adds support for multiple FormTypes and ColorRenderingTypes.  (gs_init.ps,
    gs_lev2.ps, gs_res.ps, zcrd.c)

    Updates structures and clients for the introduction of "raw memory"
    allocators.  (ialloc.h, igc.h, ialloc.c, imain.c, isave.c)

    In the interest of readability and being able to use GNU indent to create
    standard formatting, changes the operator tables from procedures back to
    data structures.  This change is backward-compatible for all operator files,
    although we also edited all of Ghostscript's own operator definitions to
    remove the BEGIN_OP_DEFS and END_OP_DEFS macros (which now have to generate
    a little unnecessary code for backward compatibility). (opdef.h, iconf.c,
    iinit.c, iutil.c, z*.c)

    Splits zchar2.c into a Level 1+ part and a Level 2 part.  (zcfont.c,
    zchar2.c)

    Interpreter (PDF)

    Adds font synthesis based on the FontDescriptor.  Currently this is very
    rudimentary.  (pdf_font.ps)

    Drivers

    Fixes bugs:
    	- The PDF writer didn't default to A4 paper size if A4 was selected
    as the default in the makefile.  (gdevpdf.c)
    	- The default implementation of the begin_image procedure always
    called the image's begin_image implementation, rather than the device's
    begin_typed_image implementation.  (gdevddrw.c)
    	- The bbox device didn't initialize its reference count.
    (gdevbbox.c)
    	- A necessary cast was omitted.  (gdevpsde.c)

    Changes some macros to procedures.  (gdevpstr.h, gdevpstr.c)

    Adds an internal device to implement the PCL5 special color mapping
    algorithms.  (gdevcmap.h, gxdevice.h, gdevcmap.c, gdevnfwd.c)

    Adds double-inclusion protection to all header files.  (*.h)

    Updates drivers for the change in begin_image.  (gdevbbox.c, gdevpdfi.c,
    gdevvec.c, gxclimag.c)

    Library

    Fixes bugs:
    	- The non-ANSI definitions of CLEAR_MARKS_PROC, ENUM_PTRS_BEGIN_PROC
    and RELOC_PTRS_BEGIN were missing a parameter.  (gsstruct.h)
    	- A few necessary casts were omitted.  (gsparam.c, gxpcmap.c)
    	- Images or Patterns with non-default RasterOps could cause crashes.
    (gdevmrop.c, gxp1fill.c)
    	- Exponential Interpolation functions with non-integral positive
    exponents incorrectly required the lower bound of the domain to be strictly
    positive rather than only non-negative.  (gsfunc3.c)
    	- The attempt to achieve the desired color smoothness when shading
    could compute (nearly) forever.  (gxshade.c, gxshade1.c)
    	- The arc change in 5.24 caused arcs to render incorrectly.
    (gspath1.c)
    	- The macro-reducing cleanup in 5.24 introduced a bug in handling
    copy operations with negative skew.  (gdevm1.c)

    Adds unmasked images and bounding box testing to the library test program.
    (gxdevcli.h, gslib.c)

    Changes some macros to procedures.  (gxfunc.h, gsfunc.c, gsfunc0.c,
    gsfunc3.c)

    Adds double-inclusion protection to all header files.  (*.h)

    Reviews and reformats header files for maintainability.  (*_.h, dodebug.h
    [deleted])

    Changes the structure of the common part of the image enumerator to include
    the device (which may be different from the original device, because of
    forwarding), and to access the procedures through a pointer to a const
    structure.  This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of
    begin_image, since they now must pass the device to
    gx_image_enum_common_init.  (gximage.h, gxiparam.h, gdevddrw.c, gdevdflt.c,
    gxiinit.c, gximage3.c, gximage4.c)

    Adds tests of the new color mapping device to the library test program.
    (gslib.c)

    Removes the last vestiges of segmented pointers.  (genarch.c, std.h)

    Introduces a "raw memory" API, primarily for managing the underlying memory
    pool for embedded systems.  This involves a NON-BACKWARD-COMPATIBLE-CHANGE
    in the implementation (but not ordinary clients) of allocators.
    (gsmemory.h, gsmemraw.h, gxalloc.h, gsalloc.c, gsmalloc.c, gsmemory.c)

    Version 5.24 (limited) (6/17/98)

    In addition to the usual bug fixes, and a few enhancements where temptation
    proved irresistible or in response to an external need, this fileset:

    	- Takes the first steps on a major readability cleanup
    	(4-space indentation instead of 2, replacement of macros by
    	procedures, ....)

    	- Implements a bit more of the DPS functionality, including view
    	clipping, and gstate stack copying for 'fork'.

    	- Starts to sketch a text API for drivers.

    	- Changes the Unix makefiles so that they create production binaries
    	in a separate directory.

    Again, there are some non-backward-compatible changes required by other
    architectural improvements.  As always, we have tried to minimize the impact
    of such changes on users' code.

    Documentation

    Fixes bugs:
    	- The -Kn switch wasn't documented.  (use.txt)
    	- The term "Software" was used instead of "Program" in the last
    paragraphs of the license.  (PUBLIC)

    Adds a couple of missing operators to the list at the end of ostack.h.
    (ostack.h)

    Documents more precisely which gstate points to which objects after various
    gstate operations.  (gsstate.c)

    Corrects some addresses for the Free Software Foundation.  (commprod.txt,
    new-user.txt)

    Improves the documentation for memory management of color spaces.  (gscie.h,
    gscolor2.h)

    Updates the list of hardware available to Aladdin.  (new-user.txt)

    Documents ReopenPerPage.  (language.txt)

    Moves the documentation of image rendering procedures to a better place.
    (gximage.h, gxiinit.c)

    Clarifies that old slzwe.c files may not work with current Ghostscript
    versions.  (make.txt)

    Procedures

    Fixes bugs:
    	- psl3.dev didn't include func.dev.  (int.mak)
    	- device and device2 devices weren't sorted together, causing
    devices to appear in the list out of order (including, possibly, selecting
    the wrong device as default).  (genconf.c)
    	- The mswindll module definition omitted some needed files.
    (devs.mak)

    Changes the optimization level for gcc from -O to -O2 for both standard and
    profiling builds.  (unix-gcc.mak)

    Defines 3 new makefile macros for the Unix platforms,
    CFLAGS_{STANDARD|DEBUG|PROFILE}, that give the additional compiler switches
    for these 3 compilation options.  (unixansi.mak, unix-cc.mak, unix-gcc.mak)

    Changes the Unix makefiles so that by default they create the binaries in an
    'obj' subdirectory of the source directory.  (unixansi.mak, unix-cc.mak,
    unix-gcc.mak, unix-end.mak)

    Updates the MSVC++ makefiles so they allow setting any configuration
    parameter from the make command line.  (msvc32.mak, msvccmd.mak, msvccom.mak
    [deleted], msvclib.mak, msvctail.mak)

    Utilities

    Fixes bugs:
    	- ps2ascii was broken.  (ps2ascii.ps)

    Adds capability to gslp.ps:

    	- Variable-width fonts (but without automatic line breaking);

    	- Pair kerning (from AFM file);

    	- Inter-character and space width adjustment.

    This project was done for a paying customer.  (gslp.ps)

    Drivers

    Fixes bugs:
    	- The name of the plan9bm device was wrong.  (gdevpbm.c)
    	- The PDF writer wrote incorrect parameters for the CCITTFax filter
    used to compress Type 3 font bitmaps.  (bug introduced in 5.23) (gdevpdfi.c)
    	- The PDF writer emitted two 'endobj' lines for Type 3 bitmap fonts.
    (gdevpdf.c)

    Removes all remaining uses of _ds and _ss in Aladdin's drivers.  (gdevprn.h,
    gdevsvga.h, gdevbit.c, gdevcgm.c, gdevdjet.c, gdevmsxf.c, gdevpbm.c,
    gdevpccm.c, gdevpcfb.c, gdevpdfi.c, gdevprn.c, gdevsvga.c, gdevtfax.c)

    Renames a local macro named END.  (gdevcgml.c)

    Removes all uses of far_data other than for device (but not device2)
    prototypes.  (gdevbit.c, gdevdjet.c, gdevemap.c, gdevmsxf.c, gdevpbm.c,
    gdevpcfb.c, gdevpcx.c, gdevpdf.c, gdevpng.c, gdevps.c, gdevpsim.c, gdevpx.c,
    gdevtfax.c, gdevtfnx.c, gdevvglb.c, gdevx.c, gdevxalt.c)

    Adds a psrgb driver that writes PostScript (Level 2) planar,
    run-length-compressed, 24-bit RGB images.  (gdevpsci.c)

    Starts to define and implement a driver procedure for text.  This interface
    will certainly change in the future as we get more insight into the division
    of responsibility and control flow between generic code, individual drivers,
    and internal and external fonts.  This involves a major
    NON-BACKWARD-COMPATIBLE CHANGE in the gs_show_enum structure (which no
    client should be accessing directly).  (gdevmem.h, gdevprn.h, gstext.h,
    gxchar.h, gxdevcli.h, gxdevice.h, gxtext.h, gdevbbox.c, gdevht.c,
    gdevnfwd.c, gschar.c, gschar0.c, gstext.c, gxacpath.c, gxclip.c, gxclip2.c,
    gxclipm.c, gxclist.c, gxpcmap.c)

    Extends the parameter list printer to handle names and arrays.  (gdevpsdf.c)

    Implements the ability to write out a Type 1 font definition, for embedding
    fonts in PDF output.  Currently this code isn't called from anywhere, and it
    will certainly be subject to change in the future.  (gdevpsdf.h, gdevpdfi.c,
    gdevpsde.c, gdevpsdf.c)

    Adds the PCL XL Protocol Class 2.0 operators, attributes, and enumerated
    values to the relevant header files.  (gdevpxat.h, gdevpxen.h, gdevpxop.h)

    Converts some additional devices to -dev2, to make them const.  (devs.mak,
    gdevjpeg.c)

    To help in debugging, changes all uses of
    	#define ss ((stream_xxx_state *)st)
    to
    	stream_xxx_state * const ss = (stream_xxx_state *)st;
    (gdevpdfi.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c)

    Massages mem_mono_copy_mono and mem_mono_strip_tile_rectangle to reduce the
    use of macros somewhat.  (gdevm1.c, gdevmem.h)

    Makes a change to support the change in gs_param_list_common.  (gdevpsdf.c)

    Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
    (gdevpdfm.c, gdevpx.c, gdevx.c, gdevxalt.c)

    Adds a ReopenPerPage Boolean device parameter for printers, which causes the
    output file to be closed and reopened for each page.  This may be helpful in
    persuading spoolers to start printing as soon as the first page is
    available.  (gdevprn.h, gdevprn.c)

    Makes the %-format validator for output file names a procedure, even though
    it's only called in one place.  (gdevprn.c)

    Updates some clients for the change from std_procs to procs.  (gdevp2up.c,
    gdevpbm.c, gdevupd.c,

    Removes the use of the CleanFaxData tag (327) from TIFF output, since many
    applications don't recognize it and it isn't in the TIFF 6 documentation.
    (gdevtifs.h, gdevtfax.c)

    Platforms

    Adds a new gp_setmode_binary platform procedure, to set a file into binary
    mode on platforms that distinguish text and binary.  (gp.h, gp_*.c)

    Fonts

    Fixes bugs:
    	- The derived (Bold, Oblique, ...) Hershey fonts were broken.
    (fonts/makeher.ps, fonts/h*.ps)

    Interpreter

    Fixes bugs:
    	- As always, gcc failed to report some signed/unsigned char *
    mismatches.  (imainarg.c)
    	- Some needed #includes were missing.  (zcrd.c, ztype.c)
    	- Contexts were always allocated in global VM (should be local VM),
    and were freed in the current VM (should be local VM).  Fixing this required
    changing some internal interfaces defined in icontext.h.  (icontext.h,
    icontext.c, interp.c, zcontext.c)
    	- restore did some unnecessary gsaves.  (zvmem.c)
    	- Creating a new context didn't initialize the graphics state
    properly, and didn't do the first gsave that grestoreall relies on.
    (gs_dps.ps)
    	- The bookkeeping for open files didn't work with multiple contexts.
    Fixing this required a substantial (simplifying) redesign of the
    interpreter's bookkeeping for streams in general: this may have introduced
    new bugs.  (files.h, ireclaim.c, isave.c, zfile.c)
    	- fork didn't copy the graphics state stack.  (zcontext.c)
    	- The space bits were set incorrectly in the array reference for the
    operand stack, causing the garbage collector not to mark the operand stack
    of contexts other than the current one.  (interp.c)
    	- LanguageLevel 3 facilities weren't enabled when desired.
    (gs_ll3.ps, ilevel.h, opdef.h, iinit.c, zcsdevn.c, zimage3.c, zmisc2.c,
    zmisc3.c, zshade.c, ztrap.c)
    	- flushfile with a procedure-target stream didn't pass the buffered
    data to the procedure.  We tinkered with this a little, but it still isn't
    fixed.  (zfilter.c, zfproc.c)
    	- The top-level color space objects allocated by the CIE color space
    setting operators were never freed (until garbage collection).  (zcie.c)
    	- setpagedevice with a 0-size page didn't fail.  (gs_setpd.ps,
    zmedia2.c)
    	- If one or more of the matrices in a CIE color space or CRD was
    singular, setcolorspace or setcolorrendering could cause a stackoverflow.
    (zcie.c)
    	- defineuserobject didn't work.  (I don't see how it could ever have
    worked.)  (gs_dps2.ps)
    	- The version string wasn't read-only.  (gs_init.ps, gs_lev2.ps,
    gs_ll3.ps)
    	- Some standard resource categories weren't defined (which they need
    to be, even if they have no instances).  (gs_res.ps, gs_ll3.ps)
    	- The Trapping ProcSet was empty.  (gs_ll3.ps)
    	- setvmthreshold didn't accept a value of -1.  (gs_lev2.ps,
    gs_pdfwr.ps, zusparam.c, zvmem2.c)
    	- Binary tokens containing native reals with swapped byte order
    didn't read in properly.  (ibnum.c, iscanbin.c)
    	- In binary object sequences, many executable objects were
    incorrectly written out as literal.  (zbseq.c)
    	- String DataSources for shadings didn't work.  (zshade.c)
    	- Parameter dictionaries with integer keys didn't work.  (iparam.c)
    	- A "can't happen" condition caused massive confusion instead of a
    rangecheck error.  (gs_setpd.ps)
    	- setcachelimit and setcacheparams were broken, because they no
    longer interacted correctly with setuserparams and setsystemparams.
    (gs_lev2.ps)
    	- The source width and height of images was arbitrarily limited to
    32767.  (zimage2.c)
    	- The optional dictionary parameter for filters was the last
    operand, not the first.  (zfbcp.c, zfdecode.c, zfilter.c, zfilter2.c,
    zfilterx.c, zfzlib.c)
    	- If the current color space was Indexed, Separation using the
    alternative space, or DeviceN using the alternative space,
    currentgray/cmykcolor/hsbcolor/rgbcolor returned 0 rather than the
    underlying color.  (This was a correction to the Red Book in the 3010
    Language Supplement, Section D.2.4 and D.2.5.)  (gscolor.c, gscolor1.c,
    gxcspace.h)

    Implements some additional LanguageLevel 3 stream facilities:
    	- CloseSource and CloseTarget (parsing only).  (ilevel.h, zfilter.c)
    	- Dictionary argument for SubFileDecode.  (zfilter.c)
    	- UnitSize (fully implemented) and LowBitFirst (parsing only) for
    	LZWDecode. (zfdecode.c)
    	- ReusableStreamDecode (incomplete).  (gs_ll3.ps, zfreuse.c)

    Removes all remaining uses of _ds and _ss.  (bfont.h, errors.h, files.h,
    icie.h, idict.h, idparam.h, ifunc.h, iscan.h, iutil2.h, opdef.h; iccfont.c,
    idict.c, idparam.c, igc.c, iinit.c, iparam.c, iscan.c, iscannum.c, iutil2.c,
    zcid.c, zcie.c, zdevice2.c, zfdecode.c, zfile.c, zfileio.c, zfont0.c,
    zfont2.c, zfont42.c, zfunc.c, zht2.c, zusparam.c)

    Removes the use of gs_if_debug_c.  (zvmem2.c)

    Updates clients for the change in color space num_components.  (zcolor2.c,
    zcsindex.c, zcssepr.c, zpcolor.c)

    Changes the stack manager so it can ensure an unused margin above the top
    element.  This is needed for a possible change in the operator API.
    (istack.h, istack.c)

    Decouples the definition of the interpreter instance from the definition of
    the exported procedures that use it, so that we can use it in more places
    internally.  (iminst.h, main.h)

    Removes all initialization of static per-context state.  (iinit.c, iscan.c,
    zmath.c)

    Makes the freeing of VM spaces entirely dependent on the number of contexts
    referencing them, removing the special handling of interpreter termination.
    (icontext.h, gsalloc.c, icontext.c, inouparm.c, interp.c, zcontext.c,
    zusparam.c)  ****** IN PROGRESS ******

    Enables printing of time and memory usage even in non-DEBUG systems, for
    benchmarking.  (imain.c)

    Adds a .forceundef operator to parallel .forceput.  (gs_init.ps, zdict.c)

    Rewrites the Form caching code to use the Pattern cache.  (gs_fform.ps)

    Removes all uses of far_data.  (imain.c, imainarg.c, iname.c, opdef.h)

    Moves responsibility for null page devices from C code to PostScript code.
    (gs_setpd.ps, igstate.h, zdevice2.c, zgstate.c)

    Changes the context scheduler to not store or reload the state when
    switching from a context to the same context.  (zcontext.c)

    Moves .registerencoding from C code to PostScript code.  (gs_init.ps,
    zfont2.c)

    Splits off inames.h (API for names and the name table) from iname.h (API for
    the interpreter's name table); renames the_nt as the_gs_name_table, and
    moves it to imain.c.  We would like to rename iname.h as names.h, but there
    are too many places that include it.  (igc.h, iname.h, inamedef.h, inames.h,
    imain.h, idict.c, idstack.c, igc.c, iname.c, interp.c, isave.c)

    Splits off iestack.h and iostack.h from estack.h and ostack.h, as was done
    for [i]dstack.h in 5.23.  (estack.h, iestack.h, iostack.h, ostack.h,
    interp.c)

    Splits off the hit detection device from the user path code, moving it to
    the library level where it belongs.  (zupath.c)

    Updates the interpreter for the changes in the enum_ptrs, reloc_ptrs, and
    clear_marks memory management procedures.  (igc.c, igcref.c, ilocate.c,
    zcontext.c)

    Removes all uses of 'near' from the interpreter: if short and long calls
    have different formats, we rely on the compiler to generate the most
    efficient one.  (iccfont.c, imainarg.c, iparam.c, zdevice2.c, zdouble.c,
    zdps.c, zgstate.c, zmatrix.c, zpath.c, zpath1.c, zrelbit.c, ztype.c)

    Makes a couple of minor changes to support the change in
    gs_param_list_common.  (iparam.h, iparam.c)

    Changes internaldict to an operator, and executive and findencoding to
    procedures, in order to satisfy the Genoa FTS.  (gs_dps.ps, gs_init.ps,
    gs_res.ps)

    Updates clients for the addition of device reference counting.  (zpcolor.c,
    zupath.c)

    Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
    (istruct.h, opcheck.h)

    Adds a debugging operator for printing out a Type 1 font.  (zfont1.c)

    Updates the Type 1 font operators for the change in the procedure structure.
    (zchar1.c, zfont1.c)

    Updates one client for the change in the gs_show_enum structure.  (zchar.c)

    Removes an obsolete "hook" put in for a customer.  (zchar.c)

    Removes the BigStringEncode filter, which was only used by a former
    customer.  (zfilter.c)

    Interpreter (PDF)

    Fixes bugs:
    	- Images defined in non-Device color spaces were broken.
    (pdf_draw.ps)

    Removes some vestiges of the old pdf2ps.  (pdf_draw.ps, pdf_main.ps)

    Adds some leftover PDF 1.2 features:

    	- F, FFilter, and FDecodeParms keys in stream dictionaries.
    	(pdf_base.ps)

    	- Functions, including predefined spot functions.  (pdf_draw.ps)

    	- Name trees.  (pdf_base.ps)

    Adds some PDF 1.3 features.  Note that these require a fair amount of
    PostScript LanguageLevel 3 support.  Note also that none of these have been
    tested yet, because we don't have any source of test files.

    	- DeviceN and (stubbed) ICCBased color spaces.  (pdf_draw.ps,
    	pdf_ops.ps)

    	- Additional extended graphics state parameters.  (pdf_draw.ps)

    	- Number trees.  (pdf_base.ps)

    	- Masked images.  (pdf_draw.ps)

    Works around a bug in pdfTeX, which can generate Encoding vectors containing
    nulls.  (pdf_font.ps)

    Streams

    Fixes bugs:
    	- A needed #include of memory_.h was missing.  (sdeparam.c)
    	- The needed input buffer size for the RunLengthEncode filter was
    128, but should be 129.  (srle.c)
    	- The ASCII85Encode and ASCIIHexEncode filters sometimes didn't
    insert \n characters often enough.  (sfilter2.c, sstring.c)
    	- In one obscure boundary case, the CCITTFaxEncode filter with K =
    -1 could emit an extra, incorrect code.  (scfe.c)
    	- The CCITTFaxDecode filter didn't default DamagedRowsBeforeError to
    0.  (scfx.h)

    Removes all remaining uses of _ds and _ss.  (sfilter.h, sbcp.c, scfe.c,
    seexec.c, sfilter1.c, sstring.c)

    Removes the use of do_debug.  (scfd.c)

    Removes all uses of far_data.  (scf.h, scfdgen.c, scfdtab.c, scfetab.c,
    sjpegerr.c)

    Removes the save_count member of streams, which is now no longer needed.
    (stream.h)

    To help in debugging, changes all uses of
    	#define ss ((stream_xxx_state *)st)
    to
    	stream_xxx_state * const ss = (stream_xxx_state *)st;
    (sbcp.c, sbhc.c, sbwbs.c, scfd.c, scfe.c, sdctc.c, sdctd.c, sdcte.c,
    seexec.c, sfilter1.c, sfilter2.c, sfxfd.c, sfxstdio.c, siscale.c, slzwc.c,
    slzwce.c, slzwd.c, smtf.c, spdiff.c, spngp.c, srld.c, srle.c, sstring.c,
    szlibc.c, szlibd.c, szlibe.c)

    Changes all groups of statistic-gathering variables to be structure
    variables named stats_*.  (scfe.c)

    Rewrites the CCITTFaxEncode filter to cut down one particularly large and
    obnoxious macro, and to simplify the code by allocating an output buffer as
    well as an input buffer.  (scf.h, scfdgen.c, scfe.c, scfetab.c)

    Library

    Fixes bugs:
    	- The masked image clipper sequenced through mask rows incorrectly.
    (gxclipm.c)
    	- gx_[c]path_init_local_shared were declared as returning void, but
    could actually return an error.  (gxpath.h, gxcpath.c, gxpath.c)
    	- As always, gcc failed to report some static/non-static
    inconsistencies.  However, to my dismay, I find that the ANSI C standard
    allows these, so I'll have to stop complaining about them.  (gxclimag.c,
    gxclipm.c)
    	- As always, gcc failed to report some signed/unsigned char *
    mismatches.  (gdevpdfi.c, gsparam.c)
    	- A loop counted on a non-existent zero value to mark the end of the
    IODevice table.  (gsiodev.c)
    	- Some needed #includes of memory_.h were missing.  (gdevddrw.c,
    gscolor2.c, gscrdp.c, gscspace.c, gxclipm.c, gximage3.c, gxshade4.c)
    	- Pattern device colors didn't have access to the original halftone
    phase, making it impossible to handle non-standard X/YStep correctly.
    (gsdcolor.h, gspcolor.c)
    	- Pattern filling disregarded the phase.  THIS MAY UNDO A FIX MADE
    IN 5.02.  WE NEED TO RE-TEST PATTERNS CAREFULLY.  (gxp1fill.c)
    	- restore did some unnecessary gsaves.  (gsstate.h, gsstate.c)
    	- The reference counting macros could read from an object after
    freeing it.  (gsrefct.h)
    	- setgstate and currentgstate freed the view clipping path, which
    they shouldn't do.  (gsstate.c)
    	- If no view clipping path was set, viewclippath returned the entire
    extent of the device, not the imageable area.  (gxpath.h, gsdps.c, gspath.c)
    	- Assigning one stack-allocated path to another incorrectly wound up
    sharing their segments.  (gxcpath.c, gxpath.c)
    	- dot_length_absolute was incorrectly declared as float rather than
    bool.  (gxline.h)
    	- The test for varying-depth banded images was incorrect, causing
    varying-depth images to be treated as constant-depth.  (This only affected
    ImageType 3 images.)  (gxclimag.c)
    	- Failure to clamp Y values when processing banded images could
    cause crashes or invalid band list data.  (gxclimag.c)
    	- The changes in gsparam.c introduced in 5.23 made the coercion of
    int arrays to float arrays fail.  (gsparam.h, gsparam.c)
    	- Interpolated banded images could be transmitted incompletely,
    causing narrow stripes to be chopped out of their rendering.  (gxclimag.c)
    	- FunctionType 0 functions with 32-bit samples didn't read their
    data correctly.  (gsfunc0.c)
    	- Lattice-form Shadings with packed coordinates could crash or
    produce incorrect results.  (gxshade.c)
    	- Lattice-form Shadings with packed coordinates always returned an
    error.  (gxshade4.c)
    	- If the PaintProc of a Pattern or a Form, or a CharString
    procedure, or a similar callback copied the current graphics state with
    gstate or currentgstate, a dangling reference to the device could result.
    Fixing this required adding a reference count to devices: internally created
    devices initialize it to 0, externally visible devices initialize it to 1.
    THIS IS A DELICATE CHANGE AND WILL PROBABLY HAVE A BUG TAIL.  (gsdevice.h,
    gxdevcli.h, gxdevice.h, gdevmem.c, gdevmrop.c, gdevnfwd.c, gschar.c,
    gsdevice.c, gsmemory.c, gspaint.c, gsstate.c, gxacpath.c, gxccman.c,
    gxclip.c, gxmclip.c, gxpcmap.c)
    	- The return_if_error macro referred to code rather than code_.
    (gserror.h)
    	- Non-monotonic halftones didn't allocate enough slots in the
    halftone cache.  (gxht.c)
    	- setpagedevice with a 0-size page didn't fail.  Fixing this
    required making the nullpage device provide explicit InputAttributes.
    (gdevnfwd.c)
    	- Halftone angles were often slightly off.  (gshtscr.c)
    	- Banded fill_mask operations (used for characters) were sometimes
    broken.  This bug was obviously introduced since 5.10; I'm surprised that it
    didn't have more serious effects.  (gxclread.c)
    	- Partially transparent patterns didn't work with non-default
    RasterOp values.  (gxp1fill.c)
    	- The default implementation of strip_copy_rop didn't handle color
    space conversion properly.  (gdevmrop.c)
    	- Hint replacement could cause the initial moveto and final
    closepath of a Type 1 outline to differ, confusing the filling code.
    (gxhint3.c)
    	- Interpolated images were truncated at the bottom.  (bug probably
    introduced in 5.23) (gxiscale.c)
    	- Using an unsigned type for the index passed to enum_ptrs
    procedures caused comparisons against signed values to be incorrect.
    (gsstruct.h)

    Rewrites the rectangle list and mask clipping algorithms to use callback
    procedures rather than macros.  The rectangle list source code grew by 20%,
    but the compiled code shrank from 10K to less than 4K; the mask clip source
    code and compiled code both shrank.  (gxclip.h, gxmclip.h, gxclip.c,
    gxclip2.c, gxclipm.c, gxcpath.c)

    Removes all remaining uses of _ds and _ss.  (gsmemory.h, gsstruct.h, gzht.h,
    stdpre.h, gp_dosfb.c, gsbitops.c, gscie.c, gsht.c, gstype1.c, gstype2.c,
    gxclpath.c, gxclread.c, gxcmap.c, gxfill.c, gxi12bit.c, gxop1.h, gxpflat.c,
    gxstroke.c, gxtype1.c)

    Changes some GC procedures from explicit code to standard macros.
    (gsstruct.h, gscscie.c, gxcht.c)

    For easier debugging, changes gs_debug_c to a procedure; removes
    gs_if_debug_c and do_debug.  (gdebug.h, gsht1.c, gsmisc.c, gspaint.c,
    gxcht.c, gxht.c, gxpcmap.c)

    Changes the num_components member of the color space structure to a
    procedure, which is needed because DeviceN color spaces have a variable
    number of components; also makes Pattern spaces return -1 - the correct
    num_components instead of -1.  This is a NON-BACKWARD-COMPATIBLE CHANGE.
    Also adds a base_space procedure.  (gxcspace.h, gscdevn.c, gscolor1.c,
    gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c, gscspace.c, gspcolor.c,
    gxiinit.c, gxiscale.c)

    Changes all groups of statistic-gathering variables to be structure
    variables named stats_*.  (gxclip.c, gxclist.c, gxclpath.c, gxfill.c,
    gxifast.c)

    Starts to pull apart gs_makebitmap/pixmappattern to remove the dependency on
    masked images.  (gspcolor.c)

    Splits the C heap allocator from generic allocator support.  (gsmemory.c,
    gsmalloc.c)

    Removes all uses of far_data other than references to device (but not
    device2) prototypes.  (gdevmem.h, gdevmrop.h, gxdevcli.h, gconf.c,
    gdevabuf.c, gdevht.c, gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c,
    gsbittab.c, gsflip.c, gsroptab.c, gxcht.c)

    Adds a streams member to gs_ref_memory_t.  The library doesn't use this, but
    it greatly simplifies the interpreter's bookkeeping.  (gsalloc.h, gxalloc.h,
    gsalloc.c)

    Adds some more opaque types to the graphics state structure, rather than
    using naked struct types.  (gsccolor.h, gzstate.h)

    Introduces the notion of the "effective clip path" in a graphics state.
    Painting operators should now call gx_effective_clip_path rather than using
    the clip_path member directly.  (gxpath.h, gschar.c, gsdps1.c, gsimage.c,
    gspaint.c, gspath.c, gxccache.c, gxpaint.c)

    Implements view clipping.  (gzstate.h, gspath.c, gsstate.c)

    Starts to pare down the fit_* macros in gxdevice.h, since some people feel
    strongly they are hard to follow, and also adds BEGIN/END wrapping.
    (gxdevice.h, gdevabuf.c, gdevmem.c, gxclpath.c)

    Refactors the structure definition macros in anticipation of moving to a
    more table-driven approach.  Replaces ENUM_CALL, ENUM_RETURN_CALL, and
    RELOC_CALL with ENUM_USING and RELOC_USING.  (gsstruct.h, gdevmem.c,
    gshtscr.c, gxcpath.c, gxiinit.c)

    Sketches a table-driven rather than procedural representation for GC
    descriptors.  We believe this will improve readability, reduce code size,
    and perhaps reduce cache thrashing during garbage collection.  This requires
    a NON-BACKWARD-COMPATIBLE CHANGE to the enum_ptrs, reloc_ptrs, and
    clear_marks procedures (to add the structure descriptor as a parameter).
    This should not affect any ordinary clients, because they should already
    define these procedures using the macros in gsstruct.h, which *are*
    backward-compatible; however, they do affect two internal clients that use
    their own type tags with unions (color spaces and device colors).
    (gsstrtab.h, gsstruct.h, gsalloc.c, gsstrtab.c)

    Updates color spaces for the change in enum_ptrs and reloc_ptrs.
    (gxcspace.h, gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c,
    gscsepr.c, gscspace.c, gspcolor.c)

    Updates device colors for the change in enum_ptrs and reloc_ptrs.
    (gsdcolor.h, gxdcolor.h, gxpcolor.h, gspcolor.c, gxcht.c, gxcmap.c,
    gxdcolor.c, gxht.c, gxp1fill.c)

    Implements a hit detection device at the library level.  (gserrors.h,
    gdevhit.c)

    Changes some configuration parameters from #defines to statics.  (gschar.c)

    Changes "simple" structures so they no longer have 0 for the enum_ptrs or
    reloc_ptrs procedure.  This is a NON-BACKWARD-COMPATIBLE CHANGE for
    structure-definers that don't use the macros in gsstruct.h (of which there
    shouldn't be any).  (gsstruct.h, gsalloc.c)

    Adds the structure type name to the debugging printout for freeing objects.
    (gsalloc.c)

    To help in debugging, changes all uses of
    	#define ss ((stream_xxx_state *)st)
    to
    	stream_xxx_state * const ss = (stream_xxx_state *)st;
    (gxclread.c)

    Removes all uses of 'near' from the library: if short and long calls have
    different formats, we rely on the compiler to generate the most efficient
    one.  (gscie.c, gscoord.c, gsimpath.c, gsstate.c, gstype2.c, gxclpath.c,
    gxclread.c, gxfill.c, gxhint1.c, gxhint2.c, gxhint3.c, gxstroke.c)

    Adds 'inline' to stdpre.h, defined as the empty string on compilers other
    than the ones we know accept it.  (stdpre.h)

    Adds printout of the subrectangle to ImageType 1 tracing.  (gxiinit.c)

    Replaces a few uses of gs_memory_default with dev->memory.  (gdevdbit.c,
    gxclread.c)

    Improves support for halftone objects not associated with graphics states.
    This involves a minor change to the definitions of gs_spot_halftone and
    gs_threshold_halftone, to define the transfer function as a closure.  This
    is slightly NON-BACKWARD-COMPATIBLE in that it requires clients to set
    transfer_closure.proc to 0 if they also set transfer to 0.  NOTE: the API
    defined in gshtx.h is subject to future change.  (gscsepnm.h, gshtx.h,
    gxdht.h, gxfmap.h, gxht.h, gxtmap.h, gscolor.c, gsht.c, gsht1.c, gshtx.c)

    Changes the Bezier approximation of arcs to cut arcs at absolute multiples
    of 90 degrees rather than at intervals of 90 degrees (e.g., an arc from 45
    to 105 would now be cut at 90 rather than being treated as a single
    60-degree curve) in order to produce more uniform output and also to ensure
    that the bounding box for arcs is more accurate (to pacify the Genoa FTS).
    (gxfarith.h, gsmisc.c, gspath1.c)

    Replaces all remaining uses of do { ... } while (0) with BEGIN ... END.
    (gsbitops.h, gsdsrc.h, gserror.h, gsmdebug.h, gsrect.h, gxcldev.h, gxfunc.h,
    gxop1.h, gxtype1.h, gsalphac.c, gsshade.c, gstype2.c, gstype42.c,
    gxclread.c, gxcpath.c, gximage4.c, gxpath.c)

    Adds a user-defined halftone type, to support non-monotonic halftones.  We
    could make any of the following structures fully object-oriented:
    	- Halftones (client level)
    	- Halftone orders (device level, but not rendered)
    	- Device halftones (device level, fully rendered)
    The right place to do this for non-monotonic halftones, which are specified
    directly by bit masks, is at the device halftone level.  However, there are
    too many places that know too much about the implementation of device
    halftones and halftone orders right now.  WE NEED TO REVISIT THIS AFTER THE
    5.1x CODE BRANCH IS TERMINATED.  SHOULD ALSO CONVERT UNION TO TYPED UNION
    FOR GC -- CODE IS DUPLICATED IN gsht.c VS gshtx.c.  (gxdht.h, gxht.h,
    gxhttype.h, gshtx.h, gsht.c, gsht1.c, gshtx.c)

    Moves the procedures in Type 1 font data into a structure.  This is a
    NON-BACKWARD-COMPATIBLE CHANGE, but an internal one.  (gxfont1.h, gstype1.c,
    gstype2.c, gxtype1.c)

    Extends Type 1 / 2 / 4 fonts to require that they be able to enumerate the
    set of glyphs that they define, to allow writing them out.  We may propagate
    this to all base fonts in the future.  (gxfont1.h)

    Provides some utilities for devices that want to define their own
    InputAttributes and OutputAttributes.  (gdevprn.h, gxdevice.h, gdevprn.c,
    gsdparam.c)

    Removes all of the text-display procedures that took null-terminated C
    strings as operands.  This is NON-BACKWARD-COMPATIBLE.  However, since the
    memory manager required that all such operands be allocated using
    gs_alloc_string, the procedures were never usable with arbitrary C strings
    anyway.  (gschar.h, gschar.c)

    Renames the gx_device procedure record from std_procs to procs, in
    anticipation of more unified support for "objects".  This is a
    NON-BACKWARD-COMPATIBLE CHANGE for a surprisingly large number of clients
    that should have been using dev_proc and set_dev_proc.  (gdevbbox.h,
    gxdevcli.h, gxdevice.h, gdevdflt.c, gdevdgbr.c, gdevmem.c, gdevprn.c,
    gsalphac.c, gsdevice.c, gsropc.c, gxccache.c, gxifast.c)

    Disallows setting of the RasterOp-related graphics state parameters when
    a cache device is active.  (gsrop.c)

    Changes the tracing printout of path segments to provide enough accuracy to
    cover all the fraction bits of a 'fixed'.  (gxpath.c)

    Version 5.23 (limited) (5/14/98)

    This fileset adds a number of PostScript LanguageLevel 3 features: library
    support for ImageType 3 and 4 (masked) images, PostScript-level support for
    ImageType 4, and the shfill operator for smooth shading.  It also adds RCS
    $Id$ lines to all the files we maintain.  It also changes the Unix makefiles
    so that they create debugging or profiling binaries in separate directories.

    This fileset includes an unusually large number of non-backward-compatible
    API changes.  Most of them don't affect ordinary library clients, but a few
    do.  These changes, and a few more to come, result from the next (large)
    increment in our ongoing project to make the code completely re-entrant (no
    non-idempotent writable globals in our own code).  This necessarily involves
    putting some things that used to be global into structures, some of which
    must be added to some interfaces.

    NOTE: because of a combination of hardware problems, time pressure, and
    belated discovery of sloppiness by the original developers of the PC
    makefiles, none of the PC makefiles in this fileset work.  The Borland
    makefiles probably come the closest.

    Documentation

    Adds documentation for:
    	- The changes in begin_image and related facilities.  (drivers.txt)
    	- The addition of -Z/.  (use.txt)
    	- The new ps2ps utility.  (ps2ps.1)
    	- The new get_hardware_params procedure.  (drivers.txt)
    	- The new -B<size> / -B- switch.  (use.txt).

    Improves the documentation for the sample_ macros.  (gsbitops.h)

    Adds some documentation on how the debugging/tracing flags work.  (gdebug.h)

    Improves the documentation of DDAs.  (gxdda.h)

    Documents a subtle change in the meaning of a flag in the PDF
    FontDescriptor.  (pdf_font.ps)

    Changes the location of the authoritative site for zlib sources.  (zlib.mak)

    Corrects a typo.  (gsht1.h)

    Removes pdf_2ps.ps from the fileset.  (psfiles.txt)

    Adds standard file name comments to all .c and .h files that didn't already
    have them.  (dodebug.h, gdev3b1.c, gdev8510.c, gdevadmp.c, gdevhl7x.c,
    gdevimgn.c, gdevo182.c, gdevpdfx.h, gdevpe.c gdevsco.c, gdevsj48.c,
    gdevvglb.c, gsalpha.c, gscolor1.c, gscsepr.h, gsdsc.c, scfetab.c string_.h,
    zfunc3.c, zmedia2.c)

    Unifies the nroff styles of the various man pages a bit.  (*.1)

    Adds a reference to the CTAN mirror sites.  (new-user.txt)

    Notes that the result of rect_intersect may be anomalous.  (gsrect.h)

    Improves the documentation for the Distiller parameter handling code.
    (gdevpdfp.c, gdevpsdp.c)

    Corrects an ambiguity in the definition of the int_keys argument of
    param_begin_xmit_dict.  (gsparam.h)

    Adds a new file that will evolve into a reasonable guide to the source code.
    (README, source.txt)

    Adds the convention for 'status' and 'code' to the C style guide.
    (c-style.txt)

    Improves the documentation for the '-' pseudo-switch.  (use.txt)

    Updates the problem reporting form to include the URL for known post-release
    problems.  (bug-form.txt)

    Documents the availability of sources and binaries for Plan 9.
    (new-user.txt)

    Procedures

    Fixes bugs:
    	- The 'tags' target in the Unix makefiles had an incorrect directory
    name.  (bug probably introduced since 5.20)  (unix-end.mak)
    	- The ld_tr and CCFLAGS macros were used in the makefiles before
    they were defined, causing problems with `make' implementations that
    substitute macros into definitions at definition time rather than at use
    time.  (*.mak)
    	- Recent Digital Unix versions (4.0 and later) require -std1 when
    compiling.  (make.txt)
    	- The Unix library-only makefile had gotten out of date.
    (ugcclib.mak)
    	- pf2afm[.bat] were omitted from the fileset.  (master/package.tcl)
    	- The Borland makefile didn't work, because the Borland compiler
    requires specifying the output file name (-o) before the input file name
    (-c)!  This required changing the order of every compilation command in
    every platform-independent makefile.  The win*.mak files still need work.
    (*.mak)
    	- None of the non-Unix makefiles specified directory names for the
    auxiliary programs.  (dvx-tail.mak, os2.mak, wctail.mak, winlib.mak)
    	- The Windows makefiles lacked build rules for gp_ntfs and gp_win32.
    (msvclib.mak, winlib.mak)

    Adds a new debugging switch -Z/ that prints the file name and line number on
    all trace messages.  (gdebug.h, std.h)

    Changes the Unix 'pg' and 'debug' build targets so that they create the
    binaries in a 'pgobj' or 'debugobj' subdirectory of the standard build
    directory.  This allows keeping all 3 configurations active.  (unix-end.mak)

    Adds GEN directories for jpeg, libpng, and zlib.  (devs.mak, gs.mak,
    jpeg.mak, lib.mak, libpng.mak, zlib.mak)

    Adds a gendev.c that will eventually replace genconf.c.  (gendev.c, *.mak)

    Adds -Wcast-align to the gcc compilation switches.  (unix-gcc.mak)

    Adds support for libpng 1.0.1.  (libpng.mak)

    Notes the use of -R on Solaris and other SVR4 systems.  (unix*.mak)

    Removes pdf_2ps.ps from the fileset.  (int.mak, unixinst.mak,
    pdf_2ps.ps[deleted])

    Ensures that every file that is copyright, maintained, and distributed by
    Aladdin Enterprises has a RCS $Id$ line (actually, $Id: <filename> $).  In
    .c and .h files, these lines currently are only comments, but they could be
    converted easily to static strings later if we want to.  We had to touch
    almost every file in the fileset to do this, but we did *not* change the
    write dates.  (*)

    Makes the build procedure auto-detect whether the installed version of gcc
    has the 'const' code generation bug.  (gs.mak, lib.mak, unix-gcc.mak)

    Removes 'makefile' as a precondition for ccf32.tr.  (I can't quite figure
    out why it was there in the first place.)  (msvccom.mak)

    Replaces the -F<file> switch with a -B<buffer size> switch that forces all
    files to use the run_string interfaces.  -B- turns it off.  (iminst.h,
    imainarg.c)

    Adds a new resource to genconf.c, -replace <module>.  This causes <module>
    *not* to be included if the module with the -replace resource *is* included.
    If two modules -replace each other, either directly or indirectly through
    -includes, the result is undefined.  (genconf.c)

    Uses -replace to implement a default roplib package.  (lib.mak)

    Utilities

    Fixes bugs:
    	- unprot.ps stopped working because of the stricter prohibition
    against storing local-VM objects into systemdict.  (unprot.ps)

    Adds a new ps2ps utility, like pdf2ps, that "distills" PostScript.
    (ps2ps, ps2ps.bat)

    Modifies the ps2epsi utility so it can be run outside the ps2epsi script for
    testing.  (ps2epsi.ps)

    Changes the pdf2ps utility to use the pswrite device.  This gets rid of all
    conversion problems, at the expense of larger and stupider output files.
    (pdf2ps, pdf2ps.bat)

    Drivers

    Fixes bugs:
    	- Two procedures were declared 'private' inconsistently (thank you
    again, gcc).  (gdevps.c)
    	- The author of the uniprint driver sent a fix for an
    allocation-related bug and an off-by-one bug.  (gdevupd.c)
    	- The PDF writer incorrectly converted open stroked rectangles (only
    3 sides drawn) to closed (4 sides drawn).  (gxpath.h, gzpath.h, gdevpdfd.c,
    gxpath2.c)
    	- When banding, filling a character within the PaintProc of a
    Pattern could produce memory access errors.  (The problem was in
    gx_forward_fill_mask, which might affect filling characters in other
    situations as well.)  (gdevnfwd.c)
    	- The [e]pswrite driver produced incorrect line widths for stroked
    graphics.  (gdevps.c)
    	- The [e]pswrite driver didn't invoke colorimage correctly, so
    didn't handle Patterns right.  (gdevps.c)
    	- Vector devices didn't set the color before writing trapezoids,
    possibly causing incorrectly colored output.  (gdevvec.c)
    	- Vector devices could give errors on Pattern fills.  (gdevvec.c)
    	- The bbox device retained a pointer to the clipping path, which,
    since the path was embedded in the gs_state_contents, confused the garbage
    collector, causing memory access errors.  We fixed this by de-embedding the
    path object: see below.  (gsstate.c)
    	- On some Linux systems, the X driver could get a memory access
    error when displaying patterns.  We fixed this by adding calls on XInitImage
    in the necessary places when running X11R6.  (gdevx.c)
    	- PDF output didn't check names for unusual characters, and could
    produce invalid output if the input included names with those characters.
    (gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfo.c)
    	- In the PDF writer, DEST pdfmarks with /Dest but no /Page or /View
    didn't generate named destinations.  (gdevpdfm.c)
    	- Printer devices didn't allow . in %-formats in the output file
    name.  (gdevprn.c)
    	- The x11cmyk driver didn't read bits back from the screen
    correctly.  (gdevxalt.c)
    	- The pcxmono and pcxgray drivers used colored rather than
    gray-scale palettes.  (gdevpcx.c)
    	- The PCX drivers could emit repetition counts greater than 15,
    confusing some readers.  (gdevpcx.c)

    Removes some vestiges of the obsolete draw_line driver procedure.  We also
    rename the draw_line member of the driver procedure structure as
    obsolete_draw_line, so that any uses of it will cause compilation errors,
    but we don't remove it from the structure, so that existing driver procedure
    vectors will continue to compile (although the draw_line procedure will
    never be called).  (gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevdflt.c)

    To repair a design error, and at the same time add flexibility needed for
    ImageType 3:

    	- Removes the image_data and end_image driver procedures,
    associating them with the gx_image_enum(_common)_t structure instead.
    Clients should call gx_device_image_data and gx_device_end_image instead: we
    set the image_data and end_image procedures in the device structures to
    these procedures when filling in defaulted procedures.  This is a
    NON-BACKWARD-COMPATIBLE CHANGE for drivers that implement begin_image, since
    they now have to fill the procedures into the enumerator structure.
    (gsiparm*.h, gxdevcli.h, gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c,
    gdevdflt.c, gdevnfwd.c, gsimage.c, gxclist.c, gxidata.c, gxifast.c,
    gxiinit.c, gximage3.c, gximage4.c)

    	- Replaces the image_data driver procedure with a plane_data
    procedure (now associated with the image enumerator, not the device) that
    allows specifying the X offset and raster independently for each plane, and
    (depending on the image type) may allow omitting some planes.  We provide a
    gx_device_image_plane_data procedure parallel to _image_data and _end_image
    (see above).  (gsiparm*.h, gxdevcli.h, gxiparam.h, gdevbbox.c, gdevddrw.c,
    gxidata.c, gxiinit.c, gximage3.c, gximage4.c)

    Updates clients for image processing changes.  (gdevvec.h, gdevpdf.c,
    gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c)

    Enhances [e]pswrite to detect other kinds of opportunities for producing
    smaller output.  This involves a change in the moveto procedure in the
    'vector' interface.  (gdevps.c)

    Changes the bbox device so that it automatically detects whether it is being
    used as a component in a device pipeline or as a free-standing device,
    rather than having to select this in the makefile.  (lib.mak, gdevbbox.h,
    gdevbbox.c)

    Moves the halftoning driver a bit closer to real usability.  (gdevht.h,
    gdevht.c)

    Adds some tracing to the color mapping code in the X driver.  (gdevx.c)

    Implements setting the Dict and ACSDict parameters for pswrite and pdfwrite.
    Dict is effective with the CCITTFaxEncode filter for black-and-white images;
    otherwise, these parameters still don't do anything.  (gdevpdfi.c,
    gdevpsdp.c) ****** READING HUFFMAN TABLES IS NYI, SEE sdcparam.c; SETTING
    DOESN'T WORK BECAUSE DCT_set_defaults DOESN'T DO WHAT IT SHOULD ******

    Updates the PS/PDF writers to reflect the fact that the ASCIIHexEncode
    filter now has a state.  (gdevpsdf.c)

    Modifies the X driver so that it can draw multiple platform characters at a
    time rather than one character per call.  (gdevx.h, gdevx.c, gdevxxf.c)

    Takes advantage of the filter stream procedures now available in stream.c.
    (gdevjpeg.c, gdevpdf.c, gdevpsdf.c)

    Adds a get_hardware_params procedure, similar to get_params except that it
    reads parameters whose values depend on hardware state that may change
    without program intervention (e.g., panel switches).  The default is that
    there are no hardware parameters.  (gdevmem.h, gdevprn.h, gsdevice.h,
    gxdevcli.h, gxdevice.h, gxacpath.c, gxclip2.c, gxclipm.c, gxclist.c,
    gxcpath.c, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c,
    gdevprn.c, gsdparam.c)

    Updates the PS/PDF writer for the change in the parameter list API.
    (gdevpsdf.c)

    Makes a few more writable statics const.  (gdevos2p.c, gdevpipe.c,
    gdevpsim.c, gdevx.c)

    Removes the rrgb sample device, since it now no longer serves any purpose.
    (gdevrrgb.c[deleted])

    Converts some additional devices to -dev2, to make them const.  (devs.mak,
    gdevbit.c, gdevpbm.c, gdevpcx.c, gdevpsim.c, gdevpng.c, gdevtfax.c,
    gdevtfnx.c, gdevx.c, gdevxalt.c)

    Updates a client accessing the preallocated color spaces.  (gdevpsdi.c)

    Renames the debugging-related statics in the X driver as X_SOMETHING.
    (gdevx.c)

    Platforms

    Makes a few minor changes to support Plan 9.  (make.txt, devs.mak, stat_.h,
    stdio_.h, time_.h, gdevpbm.c)

    Fonts

    Documents the availability of a free Chinese font.  (fonts.txt,
    new-user.txt)

    Works around a bug in the Adobe PostScript driver.  We though it just output
    the FontBBox for Type 42 fonts in the 2048- or 4096-unit character space
    rather than a 1-unit space, but in fact it outputs garbage.  (zfont42.c,
    gstype42.c)

    Augments the handling of Type 42 fonts to recognize the gdir /
    GlyphDirectory method of outline definition in addition to the loca / glyf
    method, per Adobe versions 2015 and later (undocumented!).  (ifont.h,
    zfont42.c)

    Interpreter

    Fixes bugs:
    	- Memory management for argument strings was wrong.  (gsargs.h,
    gsargs.c)
    	- 1 .setlanguagelevel was broken, because it didn't allow for the
    possibility that values could get deleted from systemdict that existed in
    level2dict.  (bug introduced in 5.x, x <= 10) (zmisc2.c)
    	- -dFAKEFONTS was broken.  (gs_fonts.ps, gs_init.ps)
    	- copyscanlines was broken.  (bug introduced in 5.20) (gs_init.ps)
    	- The matrix returned by sizeimage was incorrect.  (zdpnext.c)
    	- The implementation of .buildpattern for PatternType 2 was wrong.
    (gs_ll3.ps)
    	- Ghostscript couldn't load TrueType fonts where the amount of data
    either before or after the glyf section exceeds 64K.  (gs_ttf.ps) ****** WE
    BACKED OUT THIS CHANGE, BECAUSE WE HAD TO BACK OUT THE NEXT ONE. ******
    	- Ghostscript couldn't load TrueType fonts where the total data is
    more than 64K and the offset or length of the glyfs is odd.  (gs_ttf.ps)
    ****** WE BACKED OUT THIS CHANGE: IT BROKE THE PDF INTERPRETER, BECAUSE IT
    IMPOSES A NEW REQUIREMENT THAT TTF FILES BE POSITIONABLE. ******
    	- Some compilers complained about arithmetic on enums.  (interp.c)
    	- The CIE color space and CRD GC structure definitions were in the
    interpreter rather than the library.  (zcie.c, zcrd.c)
    	- NullFont was still present in FontDirectory when currentglobal was
    false.  (gs_init.ps)
    	- execform failed with Form resources, because it tried to insert
    the Implementation in a read-only dictionary.  (gs_fform.ps, gs_lev2.ps)

    Finishes implementing ImageType 4 images, and moves closer to implementing
    ImageType 3.  (iimage.h, zdps.c, zimage.c, zimage2.c, zimage3.c)

    Updates tracing output to use the new dlprintf macros.  (idict.c, igc.c,
    igcref.c, igcstr.c, iname.c, interp.c, isave.c, iscan.c, zcie.c, zcontext.c)

    Implements multiproc=true for readimage.  (gs_dpnxt.ps)

    Does a bit more work on implementing shading with PatternType 2.
    (gs_ll3.ps, zfunc.c, zshade.c)

    Adds a .bitadd operator for adding integers modulo the word size.
    (zarith.c)

    Updates filter operators to use the new stream parameter facility.
    (iparam.h, iparam.c, zfdecode.c, zfdctc.c[deleted], zfdctd.c, zfdcte.c)

    Updates the implementation of parameter lists for the change from _dict to
    _collection.  (iparam.c, iparam.h)

    Takes advantage of the filter stream procedures now available in stream.c.
    (zfilter.c)

    Adds get_hardware_params to one device procedure vector.  (zupath.c)

    Adds .gethardwareparams to parallel .getdeviceparams.  (zdevice.c)

    Updates the interpreter's parameter list machinery to match the change in
    gsparam.h.  (iparam.h, iparam.c)

    Makes more writable statics const.  (gs_init.ps, btoken.h, dstack.h, iref.h,
    opextern.h, icontext.c, idict.c, igc.c, igcref.c, iinit.c, imainarg.c,
    interp.c, iscanbin.c, iutil.c, zbseq.c, zcie.c, zcontrol.c, zdevcal.c,
    zdevice2.c, zdps.c, zdps1.c, zfont2.c, zgeneric.c, zgstate.c, ziodev.c,
    ziodev2.c, ztype.c)

    Removes an inappropriate reference to PROGRAM_NAME.  (imainarg.c)

    Removes set/currentrenderalgorithm, since they are useless for the purpose
    for which they were intended.  (zrop.c)

    Uncomments code for CIEBasedDEF[G] color spaces, even though these aren't
    fully implemented yet.  (zcie.c)

    Reimplements StartJobPassword and SystemParamsPassword as no-access strings
    in systemdict.  (gs_lev2.ps, iutil2.h, iutil2.c, ziodev2.c, zusparam.c)

    Splits off the context state record from icontext.h, so that places that
    only need access to state variables don't need to import the
    procedures. (icontext.h, icstate.h)

    Updates a client for the change in gs_malloc_limit.  (imainarg.c)

    Updates clients for the change in the accessors for predefined color spaces.
    (zcolor1.c, zimage.c, zimage2.c)

    Renames the (few) debugging-related statics as I_SOMETHING.  (igc.c)

    Splits off idstack.h (API for dictionary stacks) from dstack.h (API for the
    interpreter's dictionary stack), and idstack.c (dictionary stack
    implementation) from idict.c (dictionary implementation).  We should have
    done this a long time ago!  (dstack.h, idictdef.h, idstack.h, idict.c,
    idstack.c, iinit.c, ireclaim.c)

    Folds the cached currentfile pointer into the exec-stack structure.
    (estack.h, interp.c)

    Changes clients of gs_register_*_root to eliminate statically allocated
    roots.  (iinit.c, iname.c, interp.c, zbseq.c, zcontext.c, zfile.c, zfont.c,
    zfont2.c, zgstate.c, ziodev.c)

    Adds a ref_free_stack procedure, and reformats the implementation of stacks.
    (istack.h, interp.c, istack.c)

    Interpreter (PDF)

    Fixes bugs:
    	- Pattern colors sometimes caused errors.  (gs_pdf.ps)
    	- A file ending with %%EOF without an EOL caused an error.
    (pdf_main.ps)
    	- Fl wasn't recognized as an abbreviation for FlateDecode in in-line
    images.  (pdf_draw.ps)

    Removes all code related to converting PDF to PS: it never worked reliably,
    and we now support this function with the pswrite device instead.
    (gs_pdf.ps => pdf_ops.ps, pdf*.ps)

    Streams

    Updates tracing output to use the new dlprintf macros.  (shc.h, scfd.c,
    scfe.c, shcgen.c)

    Provides the ability to read and set stream initial parameters to/from a
    parameter list.  This is currently needed only by the PDF/PS writers and the
    filter operator, so it is implemented in modules separate from the stream
    implementation per se, but it might be useful for other clients too.
    (scommon.h, scfparam.c, sdcparam.c, sdct*.c, sdeparam.c, sddparam.c,
    gdevpsfp.c[deleted])

    Changes the ASCII85Encode filter so it never produces two %% at the
    beginning of a line, which could mislead document managers or spoolers.
    (sfilter2.c)

    Changes the ASCIIHexEncode filter so it always produces lines of exactly 64
    characters, except for the last one.  THIS IS A NON-BACKWARD-COMPATIBLE
    CHANGE, because this filter now needs a state structure, which it didn't
    before.  (sstring.h, sstring.c)

    Moves filter_{read,write}_procs to stream.c, changing the names to
    s_filter_{read,write}_procs.  (stream.h, stream.c)

    Makes creation of JPEG filters set default values for parameters that are
    outside the IJG library (Picky and Relax).  (sdct.h, sjpegd.c, sjpege.c)

    Library

    Fixes bugs:
    	- An error in dda_step_add could theoretically produce anomalies in
    images (although we don't think we've ever seen any).  (gxdda.h)
    	- A boundary error in dda_state_next/previous/advance could
    theoretically produce anomalies in images by allowing R = 0 (although we
    don't think we've ever seen any).  (gxdda.h)
    	- A rounding error in computing the size of portrait images could
    produce a spurious 1-pixel-wide line at the edge of the image.  (gxifast.c)
    	- When banding, images with singular or nearly singular CTM or
    ImageMatrix could confuse things badly enough to cause memory access errors.
    (gxclimag.c)
    	- Patterns were broken.  (bug introduced in 5.21) (gxclip2.c)
    	- Because some image processing code retained a pointer to the
    clipping path, which was embedded inside the gs_state_contents object,
    garbage collection could cause crashes.  (The only case where we know this
    happened was the bounding box device, since we think all other image
    enumerators preconstruct a clipping device, which does not retain a pointer
    to the clipping path, rather than constructing one from the path on the
    fly.)  We fixed this by replacing gs_state_contents with individual objects:
    see below.
    	- The *_.h files didn't have double-inclusion protection.  (*_.h)
    	- ImageType 2 images were broken by the change in begin_typed_image.
    (gximage2.c)
    	- Color-setting operators that "substitute the nearest legal value"
    didn't substitute it in storage, only when using it.  E.g., after
    gs_setgray(pgs, 2.0), gs_currentgray(pgs) returned 2.0 rather than 1.0.
    This bug has been there since release 1.0!  (gxcspace.h, gscie.c, gscolor.c,
    gscolor1.c, gscolor2.c, gscdevn.c, gscsepr.c, gscpixel.c, gspcolor.c)
    	- The RasterOp implementation for 2-bit, 4-bit, and non-gray 8-bit
    devices didn't work.  (gdevmrop.c)
    	- The test of whether to use copy_mono, fill_mask, or general
    imaging for rendering characters sometimes used copy_mono when not
    appropriate.  (gxccache.c)
    	- The default implementation of fill_mask produced solid rectangles,
    rather than properly masked output, if the logical operation didn't use its
    source operand.  (gdevdbit.c)
    	- Some more files needed double inclusion protection.  (gscie.h)
    	- Checking for interrupts before a return always returned 0 rather
    than the correct return code if there was no interrupt.  (gsmisc.c)
    	- Characters within Pattern PaintProcs sometimes didn't get drawn.
    (gxpcmap.c)
    	- The CIE color space and CRD GC structure definitions were in the
    interpreter rather than the library.  (gscie.h, gscie.c)
    	- Numeric overflows when setting up the character cache caused
    errors rather than simply disabling caching for that character.  (gschar.c)
    	- FORCE_STRIP_HALFTONES was accidentally left set to 1 (in 5.10!),
    slowing down all uses of monobit halftones.  (gshtscr.c)

    Implements mask clipping, which is needed for ImageType 3 images.
    (gxclip2.h, gxclipm.h, gxmclip.h, gxclip2.c, gxclipm.c, gxmclip.c)

    Finishes implementing ImageType 3 and 4 images.  (gsimage.h, gsiparam.h,
    gsimage.c, gsiparm3.h, gximage3.c, gximage4.c)

    Starts to update the banding code to handle ImageType 3 and 4 images.
    (gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxiinit.c)

    Make eprintf_program_name, lprintf_file_{and_line,only}, and new
    dlprintf_file_{and_line,only} always be procedures, rather than sometimes
    macros and sometimes procedures.  (std.h, gdebug.h, gsmisc.c)

    Adds new dlprintf, dlputc, and dlputs macros that are like
    dprintf/dputc/dputs but also print the source file name and line number at
    the beginning of the line if the -Z/ debugging switch is set.  The if_debug*
    macros now use dlprintf rather than dprintf; many other places also needed
    changing.  Note that if any place was overlooked, no great harm is done:
    printout produced there simply won't include the source file and line number
    even if -Z/ is set.  (std.h, gdebug.h, gsmisc.c; gdevbbox.c, gdevdbit.c,
    gdevdgbr.c, gdevmrop.c, gdevrun.c, gdevsvga.c, gdevx.c, gp_unifs.c,
    gsalloc.c, gschar.c, gscoord.c, gsfont.c, gshsb.c, gsht.c, gshtscr.c,
    gsmemory.c, gspath.c, gstype1.c, gstype2.c, gxacpath.c, gxccache.c,
    gxclimag.c, gxclist.c, gxclpath.c, gxclread.c, gxcpath.c, gxfill.c,
    gxidata.c, gxpath.c, gxpcopy.c, gxpflat.c, gxstroke.c)

    Simplifies storage management for graphics states by replacing
    gs_state_contents with individual objects.  This slows down gsave and
    grestore a bit, but eliminates a class of potential obscure bugs.
    (gxpath.h, gzstate.h, gsstate.c, gxcpath.c, gxpath.c)

    Adds some more information to the deubgging printout for paths.  (gxpath.c)

    Modifies the library test program to test ImageType 3 and 4 images.
    (ugcclib.mak, gslib.c)

    Extends the @-file parser to be more shell-like:

    	- The sequence \ <newline> is ignored everywhere.

    	- If a # appears as the first character on a line outside quotes,
    	the entire line	(including the terminating newline) is ignored.

    (gsargs.h, gsargs.c)

    Changes a stem hint tracing message so that it will print with the correct
    line number.  (gxhint2.c)

    Moves the 'format' information for images to the image parameter structure.
    This entails a NON-BACKWARD-COMPATIBLE CHANGE in the begin_typed_image
    driver procedure (which was not guaranteed stable).  (gsiparam.h,
    gxdevcli.h, gsimage.c, gxiinit.c)

    Adds an optional matrix argument to begin_typed_image, overriding the CTM in
    the imager state if present.  This is needed to make masks and masked images
    line up precisely; this too is a NON-BACKWARD-COMPATIBLE CHANGE.
    (gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevnfwd.c, gdevx.c, gxclimag.c,
    gxiinit.c, gximage2.c, gximage3.c, gximage4.c)

    Adds a procedure for testing monotonicity of Functions over a given range.
    (gsfunc.h, gsfunc0.c, gsfunc3.c)

    Implements smooth shading with shfill.  All documented ShadingTypes (1-7)
    are implemented.  (gscspace.h, gsdsrc.h, gspath.h, gsshade.h, gxshade.h,
    gxshade4.h, gscolor.c, gscolor3.c, gsdsrc.c, gsfunc0.c, gsfunc3.c,
    gspath1.c, gsshade.c, gxshade.c, gxshade1.c, gxshade4.c, gxshade6.c)

    Changes the TrueType rasterizer to remove the assumption that the entire
    loca table is stored contiguously.  This may not have any practical effect,
    since currently Type 42 fonts never split the loca table across segments.
    (gstype42.c)

    Adds a new interface for creating CIE CRDs that provides the parameters as
    separate arguments.  (gscrd.h, gscrd.c)

    Starts to add the ability for a device to provide one or more default CIE
    CRDs as (read-only) device parameters.  (Not ready for use yet.)  (gscie.h,
    gscrdp.h, gscie.c, gscrdp.c)

    Adds a multiple-bit-per-pixel analogue of gs_makebitmappattern,
    gs_makepixmappattern, for use by another Aladdin project.  (lib.mak,
    gsbitmap.h, gsptype1.h, gxbitmap.h, gspcolor.c)

    Changes the API of param_begin_write_dict so that the client can request the
    creation of an array rather than a dictionary.  This is a
    NON-BACKWARD-COMPATIBLE CHANGE for implementors (of which there are only
    2.5), but not for clients.  (gsparam.h, gsparam.c)

    Adds dynamically typed data to the parameter list interface, and removes the
    statically typed procedures.  This isn't important for any standard facility
    yet.  This too is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of
    parameter lists.  (gsparam.h, gsparams.h, gsparam.c, gsparams.c)

    Adds a new platform-specific API for thread creation and synchronization,
    and a memory manager "wrapper" that monitor-locks each call.  No code
    normally included in this fileset uses any of this machinery as yet.  (gp.h,
    gpsync.h, gxsync.h, gsmemlok.h, gsmemlok.c, gxsync.c)

    Splits off (PatternType 1) Pattern filling into a separate file, since the
    file was getting too big; refactors the filling code to use procedures
    rather than macros.  (gxp1fill.h, gspcolor.c, gxp1fill.c)

    Makes a few more writable statics const.  (gscie.h, gscscie.c, gsdll.c,
    gsmemory.c, gsmisc.c, gstype1.c, gstype2.c, gxclpath.c)

    Adds a compile-time option, SYSTEM_CONSTANTS_ARE_WRITABLE, to choose whether
    the system configuration values (buildtime, copyright, product, revision,
    revisiondate, serialnumber) are const or not.  By default they are now
    const: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE (affecting only one user).
    (lib.mak, openvms.mak, os2.mak, unix-end.mak, wctail.mak, winlib.mak,
    gscdefs.h, gscdef.c)

    Removes the dependence of std.h on PROGRAM_NAME.  (std.h, gsdll.c, gsmisc.c,
    gscdef.c)

    Adds a new member of the color space type structure, the size of the
    smallest color space structure that will hold a color space of the given
    type.  Also removes the obsolete _ds modifier.  (gscspace.h, gxcspace.h,
    gscdevn.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscpixel.c,
    gscsepr.c, gspcolor.c, gxiinit.c)

    Removes set/currentrenderalgorithm, since they are useless for the purpose
    for which they were intended.  (gsrop.h, gsropt.h, gdevmrop.c, gsrop.c)

    Splits off gscspace.c from gscolor.c, and gscscie.c from gscie.c.  (gscie.c,
    gscolor.c, gscscie.c, gscspace.c)

    Adds constructor and accessor procedures for color spaces.  (gscie.h,
    gscolor2.h, gscsepr.h, gscspace.h, gsptype1.h, gxcolor2.h, gxcspace.h,
    gscolor.c, gscolor2.c, gscscie.c, gscsepr.c, gscspace.c, gslib.c,
    gspcolor.c)

    Changes the CIEBased color space structures slightly to allow implementation
    of the CIEBasedDEF[G] color spaces.  (gscie.h, gscie.c)

    Changes gs_malloc_limit from a static to a member of the allocator
    structure.  This is a NON-BACKWARD-COMPATIBLE CHANGE for clients that
    declared this variable as an extern.  (gsmalloc.h, gsmemory.c)

    In order to eliminate some statics, changes the static color space accessors
    (gs_color_space_Device*) so they require a const gx_imager_state as
    parameter, and changes their names as well to avoid confusion.  This is a
    NON-BACKWARD-COMPATIBLE CHANGE not only in these accessors, but also in
    gs_image_t_init_{gray,color}.  This is very unfortunate, but we see no way
    to avoid it.  (gscspace.h, gsiparam.h, gxistate.h, gscolor1.c, gscscie.c,
    gscspace.c, gsimage.c, gspcolor.c, gsstate.c, gxclread.c, gxiinit.c,
    gximage2.c, gximage3.c, gximage4.c)

    Unifies the handling of const for the IODevice table.  (gscdefs.h,
    gxiodev.h, gconf.c, gsiodev.c)

    Changes the register_root memory manager call so that a NULL as the pointer
    to the root structure asks the memory manager to allocate the root structure
    itself.  This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of the
    memory manager API (of which there are only 3).  (gsmemory.h, gsstruct.h,
    gsalloc.c, gsmemory.c)

    Adds a new GC structure type, suffix_add0_local, which is a more efficient
    form of suffix_add0 that can be used when the supertype is defined in the
    same file as the subtype.  (gsbitmap.h, gscie.h, gsshade.h, gsstruct.h)

    Uses the new package replacement facility in the makefile to make RasterOp
    optional without tinkering with statics at runtime.  (lib.mak, gxdevice.h,
    gxdevrop.h, gdevdbit.c, gdevdflt.c, gdevmrop.c, gdevnfwd.c, gsnorop.c,
    gsropc.c)

    Makes RasterOp really optional.  (gdevmrop.h, gsrop.h, gdevmrop.c, gsrop.c,
    gxiinit.c)

    Rewrites bits_fill_rectangle to get rid of nearly all the macros.
    (gxbitops.h, gsbitops.c)

    Removes the obsolete _ds from gs_log_error.  (gserror.h, gsmisc.c)

    Version 5.22 (limited) (2/19/98)

    This fileset has a few more bug fixes, a major overhaul of memory management
    for paths so that we can do view clipping in a reasonable way, and the
    ability to build executables in a different directory from the sources.

    Documentation

    Designates gv as the preferred VMS and Unix previewer.  (new-user.txt,
    use.txt)

    Adds a pointer to post-release documentation.  (README)

    Notes that compilation with certain platforms and compilers must turn off
    optimization.  (make.txt)

    Improves the documentation of the fit_fill and fit_copy macros.
    (gxdevice.h)

    Procedures

    Fixes bugs:
    	- The ccgs script for non-ANSI compilers was no longer flexible
    enough to handle all the possible command lines.  (ccgs)
    	- The pdfwrite device was missing on the DesqView/X platform.
    (dvx-gcc.mak)
    	- The System V build procedure was broken.  (unixtail.mak)
    	- A Watcom makefile lacked parentheses around a macro name.
    (wctail.mak)
    	- Some `make' programs drop trailing spaces in macro definitions: we
    didn't work around this.  (os2.mak, unixhead.mak, winlib.mak)

    Adds support for WCVERSION=11.0 in the Watcom makefiles.  (watc.mak,
    wccommon.mak)

    Adds a shell script for removing the 'includes' from makefiles, since a very
    few Unix systems don't support this capability.  (catmake)

    Changes -dNOPROMPT to -dNOPAGEPROMPT, and adds -dNOPROMPT to suppress both
    the end-of-page prompt and the executive prompt.  (use.txt, gs_init.ps)

    Adds definitions of {GL,PS}{SRC,GEN,OBJ}DIR to the top-level makefiles,
    removing these definitions from gs.mak.  (*.mak, gs.mak)

    Adds explicit directories to more makefile rules.  We can now do builds with
    source, GL/PS generated files, and GL/PS object files in 5 different
    directories!  (*.mak, gsjconf.h)

    Utilities

    Adds a user-contributed utility that runs dvips followed by ps2pdf.
    (dvipdf, unixinst.mak)

    Drivers

    Fixes bugs:
    	- A pointer was incorrectly declared const.  (gdevpdfm.c)
    	- pdfwrite handled the Title element of ARTICLE pdfmarks
    incorrectly.  (gdevpdfm.c)
    	- pdfwrite inserted a Dest element in Link annotations even if an A
    (Action) key was present.  (gdevpdfm.c)
    	- pdfwrite didn't recognize and convert /Article actions in
    pdfmarks.  (gdevpdfm.c)

    Replaces some open-coded accesses to path structure elements with macros, in
    anticipation of a representation change.  (gdevpdfd.c)

    Moves pdfwrite further towards supporting Dict and ACSDict Distiller
    parameters.  (gdevpsdf.h, gdevpsdp.c, gdevpsfp.c)

    Updates a few places for the change in the path API.  (gdevpdfd.c,
    gdevvec.c)

    Adds recognition of named object references to the PDF writer, fixing many
    bugs in the named object code in the process.  (gdevpdfx.h, gdevpdfm.c,
    gdevpdfo.c)

    Enhances pswrite to skip fills or strokes of completely empty paths, to
    recognize horizontal and vertical lines, and to abbreviate color settings
    based on 8-bit fractions.  This requires a NON-BACKWARD-COMPATIBLE CHANGE in
    the "vector" device interface (which was, however, clearly identified as
    subject to change without notice).  (gdevpsdf.h, gdevvec.h, gdevps.c,
    gdevpsdf.c, gdevpx.c, gdevvec.c)

    Interpreter

    Updates a few places for the change in the path API.  (zupath.c)

    Implements %statementedit properly.  (iscan.h, iscan.c, ziodev.c)

    Changes the initialization code so that if DELAYBIND is set, .forcedef and
    .forceput remain accessible until .bindnow is called.  (gs_init.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- An empty Differences array, which Acrobat Distiller 3.02 can emit,
    caused a rangecheck error.  (pdf_font.ps)

    Streams

    Fixes bugs:
    	- The alternative LZWEncode filter didn't emit a reset code as the
    first code, and waited one code too long to emit a reset.  (slzwce.c)

    Adds some double-inclusion protection.  (scfx.h)

    Library

    Fixes bugs:
    	- There was an (incorrect) assignment to a read-only structure
    member.  (gximage2.c)
    	- A formal parameter list was incorrect if __PROTOTYPES__ wasn't
    defined.  (gsroptab.c)
    	- Some images didn't get clipped properly when banding.  This was a
    fix for 5.03 that somehow didn't make it into 5.10.  (gxclimag.c)
    	- When banding, dashed lines could cause an invalid memory access.
    This was apparently caused by an error in a fix made in 5.04.  (gsline.c)
    	- Images with non-zero data_x could cause an invalid memory access.
    (gxiinit.c, gxidata.c)
    	- The band list rasterizer didn't initialize the image structure
    properly, causing control to go to a random address.  (gxclread.c)

    Replaces some open-coded accesses to path structure elements with macros, in
    anticipation of a representation change.  (gxpath.h, gzpath.h, gspath1.c,
    gxfill.c, gxpath2.c, gxstroke.c)

    Changes the path and clipping path structures so that segments and clipping
    lists are stored in separate, reference-counted structures.  This finally
    supports reliable freeing of path segments and clipping lists even in the
    presence of off-stack gstates, and the ability to store the original
    segments of a clipping path, both of which we have wanted for a long time.
    Unfortunately, it requires SIGNIFICANT NON-BACKWARD-COMPATIBLE CHANGES TO
    THE API FOR PATHS:
        Paths:
    	- adds gx_path_alloc_contained;
    	- gx_path_init => gx_path_init_local (or nothing);
    	- gx_path_reset => gx_path_new;
    	- removes gx_path_share and gx_path_release;
    	- gx_path_assign => gx_path_assign_{preserve,release};
    	- renames gx_path_expand_dashes => gx_path_add_dash_expansion,
    	  gx_path_flatten[_accurate] => gx_path_add_flattened[_accurate],
    	  gx_path_monotonize => gx_path_add_monotonized;
    	- removes the init Boolean from gx_path_copy[_reversed].
        Clipping paths:
    	- gx_cpath_init => gx_cpath_init_local (or nothing);
    	- removes gx_cpath_share and gx_cpath_release_segments;
    	- gx_cpath_path => gx_cpath_to_path;
    	- removes the mem argument from gx_cpath_from_rectangle.
    We believe that we either renamed or changed the argument list of every API
    function that was affected in a non-backward-compatible way, so incompatible
    clients will get either compilation or linking errors.  (gxpath.h,
    gzcpath.h, gzpath.h, gschar.c, gsdps.c, gsdps1.c, gspaint.c, gspath.c,
    gspath1.c, gsstate.c, gxacpath.c, gxccache.c, gxclpath.c, gxclread.c,
    gxcpath.c, gxfill.c, gxpath.c, gxpath2.c, gxpcmap.c, gxpcopy.c, gxpdash.c,
    gxstroke.c)

    Reimplements view clipping bookkeeping to use reference-counted paths.
    (gzstate.h, gsdps.c, gsstate.c)

    Adds const in a couple more places.  (gxpath2.c)

    If -Z? is enabled, makes the reference counting machinery check for
    reference counts going negative.  (gsrefct.h)

    Adds the first bit of code for rendering smooth shadings.  The code is
    nowhere near usable.  (gsshade.h, gxshade.h, gsshade.c, gxshade.c)

    Adds BEGIN ... END macros for creating compound statements that are
    syntactically equivalent to single statements.  (stdpre.h)

    Version 5.21 (limited) (1/19/98)

    This is primarily a bug fix fileset for 5.20, with a little new
    functionality (pdfwrite image downsampling and more complete pdfmark
    processing).

    Documentation

    Fixes bugs:
    	- The build procedures still referred to tar_cat.  (make.txt)

    Documents some user-developed patches for using certain kinds of Japanese
    fonts with Ghostscript.  (new-user.txt)

    Notes that on Solaris 2.x systems, it is probably not a good idea to use
    Sun's fonts.  (use.txt)

    Documents -dSTRICT.  (use.txt)

    Procedures

    Fixes bugs:
    	- The definitions of MAKEFILE in several makefiles was incorrect.
    (dvx-gcc.mak, unix-cc.mak, unixansi.mak)
    	- The build rules for the gp_*.$(OBJ) files lacked a directory name,
    confusing most 'make' programs.  (*.mak)
    	- geninit didn't work, because the syntax of psfile_() entries in
    gconfig.h had changed.  (geninit.c)
    	- Some files were created and then deleted during building,
    preventing [gnu]make -j from working.  (lib.mak, int.mak)

    Adds an explicit directory name to more files in the makefiles.  (jpeg.mak,
    lib.mak) Added in this fileset:
    	.$(OBJ): jpeg.mak,  {dvx-tail,msvclib,openvms,os2,ugcclib,unixtail,
    		watc,watclib,winint,winlib}.mak
    	.dev:	jpeg.mak

    Removes the default suppression of 'const' with gcc.  You must now compile
    with gcc 2.7.2.1 or newer, or patch the makefile.  (ugcclib.mak,
    unix-gcc.mak)

    Removes -DPNG_USE_CONST from the command line for compiling libpng, since
    this has never actually worked, and is handled in a different way starting
    with libpng 0.97.  (gs.mak)

    Adds a -dSTRICT switch that disables some Ghostscript extensions, to be more
    helpful in debugging applications that produce output for Adobe and other
    RIPs.  (gs_init.ps, gs_statd.ps)

    Drivers

    Fixes bugs:
    	- Many occurrences of 'const' were missing or incorrect.
    (gdevpdfd.c, gdevpdfi.c, gdevpdfo.c, gdevpdft.c)
    	- pdfmark processing was broken by changes introduced in 5.20.
    (gs_pdfwr.ps)
    	- pdfwrite didn't convert /Color => /C or /Title => /T in ANN and
    LNK pdfmarks.  (gdevpdfm.c)
    	- pdfwrite didn't convert /Dest => /D or /File => /F in the Action
    dictionary of ANN and LNK pdfmarks.  (gdevpdfm.c)
    	- pdfwrite didn't convert a /Launch annotation to an Action with a
    dictionary.  (gdevpdfm.c)
    	- pdfwrite didn't convert \n in annotation Contents strings to \r.
    (gdevpdfm.c)
    	- jstrm.state was used before being set.  (gdevjpeg.c)
    	- The SVGA devices were not identified as page devices.
    (gdevsvga.c)
    	- The SPARCPrinter driver returned the address of a local buffer
    containing an error string.  (gdevsppr.c)
    	- pdfwrite no longer compressed character bitmaps.  (bug introduced
    in 5.20) (gdevpdfi.c)
    	- pdfwrite didn't recognize _objdef syntax everywhere.  (gdevpdfx.h,
    gdevpdfm.c, gdevpdfo.c)
    	- pdfwrite didn't recognize and convert Launch and GoToR OUT
    pdfmarks.  (gdevpdfm.c)
    	- pdfwrite used a /Dest key rather than a /P key for the page number
    in articles.  (gdevpdfx.h, gdevpdfm.c)
    	- pdfwrite didn't save and write the /I dictionary for articles.
    (gdevpdfx.h, gsstruct.h, gdevpdf.c, gdevpdfm.c)

    Implements a parameter list "reader" that prints the parameter values on a
    stream in PS/PDF syntax.  (We need something like this for printing filter
    parameters.)  (gdevpsdf.h, gdevpdf.c, gdevpsdf.c)

    Implements a write stream that just keeps track of the position.  We use
    this to determine how much space to allocate for data we're going to save.
    (gdevpsdf.h, gdevpsdf.c)

    Implements image downsampling, but not anti-aliasing, for the PDF writer.
    (gdevpsdf.h, gdevpsds.h, gdevpsdi.c, gdevpsds.c)

    Fonts

    Adds Frutiger to the built-in list of sans-serif fonts.  (gs_fonts.ps)

    Interpreter

    Fixes bugs:
    	- Many occurrences of 'const' were missing.  (gsargs.c, ialloc.c,
    zdpnext.c, zfunc3.c, zshade.c)
    	- Some byte * => char * casts were missing.  (imainarg.c)
    	- The stack limit check in .eqproc was wrong.  (zmisc3.c)
    	- The paper sizes a4small and lettersmall weren't implemented.
    (gs_statd.ps)
    	- setuserparams signalled errors on 64-bit systems.  (zusparam.c)

    Changes .image2 to track the change in the library.  (zdps.c)

    Some improvements were made to the (still not entirely functional) Type 32
    font code.  (zchar32.c)

    Updates some filters to use the new procedure for transmitting collections
    of parameters.  (zfdecode.c)

    Adds ISO paper sizes C0 through C6.  (gs_statd.ps)

    Trims down the list of #includes in iconf.c.  (iconf.c)

    Interpreter (PDF)

    Fixes bugs:
    	- CalGray color spaces with a Gamma value caused an error.
    (gs_pdf.ps)

    Library

    Fixes bugs:
    	- There was a 'const' conflict in the code for handling ImageType 2
    images.  Fixing this properly required a small change in the ImageType 2
    structure.  (gsiparm2.h, gximage2.c)
    	- Many occurrences of 'const' were missing.  (gsfunc3.h, gstrap.h,
    gxgetbit.h, gdevdgbr.c, gstrap.c, gxclist.c, gxclread.c)
    	- A couple of enumerations had trailing commas.  (gsshade.h,
    gxbitfmt.h)
    	- The gcst parameter was omitted in the non-ANSI version of the
    ENUM_PTRS_BEGIN_PROC macro.  (gsstruct.h)
    	- gcc missed a private / non-private discrepancy.  (gxpcmap.c)
    	- An uninitialized variable was used by mistake
    (copy_params.options).  (gdevdgbr.c)
    	- The last statement of a procedure was unreachable.  (gxclpath.c)
    	- If a Type 2 font was transformed so that hints were not being
    used, hintmask and cntrmask didn't compute the number of following bytes
    correctly.  (gxtype1.h, gstype2.c, gxtype1.c)

    Factors out some common code in gxclip2.c into macros.  (gxclip2.c)

    Starts to reimplement RasterOp using the compositing framework.  (gsropc.h,
    gxropc.h, gsropc.c)  ****** IN PROGRESS ******

    Adds an equality-testing procedure for device colors.  This is used both for
    color images (which previously did this adhoc) and for RasterOp compositing.
    (gxdcolor.h, gximage.h, gxcht.c, gxdcolor.c, gxht.c, gspcolor.c)

    Implements hintmask (but not cntrmask) for Type 2 CharString fonts.  I don't
    know any reasonable way to test whether it's working, though.  (gxtype1.h,
    gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c)

    Adds a more convenient interface for reading and setting sets of parameters.
    (gsparam.h, gsparam.c)

    Pulls the decision as to whether to halftone for a given device out into a
    macro.  Eventually we will do something more sophisticated about this.
    (gxdevice.h, gxclist.c, gxcmap.c)

    Breaks apart a macro in anticipation of future usage.  (gsrefct.h)

    Version 5.20 (limited) (1/8/98)

    This fileset provides enough of the Display PostScript capabilities to start
    running real programs.  It also adds the first few LanguageLevel 3 features
    (none of which have been tested) and reorganizes the makefile structure
    somewhat.  There are many internal changes since 5.10, some of them still in
    progress, so we expect more problems than usual.

    This fileset is being provided for testing in two different configurations:
    a full release, and a DPS-only package.  The latter will be released with
    the GPL when it is reasonably complete and reliable.

    Documentation

    Fixes bugs:
    	- TrueType fonts on GS_FONTPATH weren't recognized.  (use.txt)
    	- The argument list for gstate was incorrect.  (zdevice2.c)
    	- There were a couple of minor errors in the e-stack documentation.
    (estack.h)
    	- fonts.txt had several errors regarding compiled fonts.
    (fonts.txt)
    	- An out-of-date Aladdin address still appeared in documentation.
    (new-user.txt)

    Updates make.txt to reflect the changes in makefile structure.  (make.txt)

    Notes the addition of -Z' and -Z".  (use.txt)

    Documents the new begin_typed_image, get_bits_rectangle,
    map_color_rgb_alpha, and create_compositor driver procedures.  (drivers.txt)

    Moves documentation for all releases before 5.0 to history4.txt.  (NEWS,
    history4.txt)

    Documents the addition of SHARE_JPEGLIB.  (make.txt)

    Removes the author's name and e-mail address from the ps2ascii man page, at
    his request.  (ps2ascii.1)

    Documents the addition of (some) image compression facilities to ps2pdf /
    pdfwrite.  (ps2pdf.txt)

    Documents the new -dNOINTERPOLATE and -F<n> switches.  (use.txt)

    Adds documentation for a user-contributed port to the SMS/QDOS operating
    system.  (new-user.txt)

    Removes documentation for BGI, which is no longer supported.  (use.txt)

    Documents the use of the Registry and the GS_DLL environment variable on
    Windows platforms.  (install.txt)

    Procedures

    Fixes bugs:
    	- The OpenVMS makefile referred to EXTEND_NAME rather than
    EXTEND_NAMES.  (openvms.mak)
    	- A typo caused a spurious error message from lpr.  (unix-lpr.sh)
    	- The PDF writer didn't include a needed dependency on zlib
    compression.  (devs.mak)
    	- The rule for the OS/2 printer device was wrong.  (devs.mak)
    	- The -migrate switch was incorrectly removed from the command line
    for pre-4.0 Digital Unix.  (make.txt)
    	- The -r switch was ignored with -dNODISPLAY.  (gs_init.ps)

    Adds targets for Type 32 fonts (type32.dev) and PostScript LanguageLevel 3
    (psl3.dev, psl3core.dev, psl3read.dev).  (gs.mak, int.mak, lib.mak)

    Changes the documented feature names for PostScript Level 1 and 2
    interpreters from level1/2 to psl1/2.  The old names are still recognized
    for backward compatibility.  (gs.mak, int.mak, *.mak)

    Removes support for building with DCL under VMS.  Building under VMS now
    requires some version of make, preferably GNU make.  THIS IS A
    NON-BACKWARD-COMPATIBLE CHANGE, but there was plenty of lead time for users
    (it was announced in 5.01, 6/22/97).  (vms*.mak[deleted])

    Starts to add an explicit directory name to every file in the makefiles, to
    allow building multiple object versions (e.g., debug, profile, product) or
    cross-building for multiple platforms in separate directories without any
    makefile editing.  (*.mak) Done so far:
    (done)	_h=	devs.mak gs.mak int.mak jpeg.mak lib.mak
    (done)	.h	devs.mak gs.mak int.mak lib.mak zlib.mak
    		openvms.mak os2.mak ugcclib.mak unix-end.mak
    		unixtail.mak wctail.mak winint.mak winlib.mak
    	.$(OBJ): devs.mak int.mak (except ccfonts)
    		lib.mak (except special compilations)
    		libpng.mak zlib.mak
    	.dev:	libpng.mak zlib.mak

    Gets rid of tar_cat.  Building on Unix platforms now requires that make
    recognize the include directive.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE:
    rather than editing the *head.mak files, users should now edit the unix*.mak
    or dvx*.mak files (which they previously were instructed NOT to do).  Aside
    from this, we think the change won't actually affect anyone, since most Unix
    make programs (include GNU make) do recognize this directive.  (*.mak,
    ansihead.mak[deleted], cc-head.mak[deleted], gcc-head.mak[deleted],
    dgc-head.mak[deleted], tar_*cat[deleted], dvx-gcc.mak, unixansi.mak,
    unix-cc.mak, unix-gcc.mak)

    Includes the basic context machinery in every PostScript interpreter
    configuration.  (int.mak)

    Removes the division between 'low-level' and 'high-level' band list
    facilities: we once thought we might make the latter optional, but this no
    longer seems useful.  (lib.mak)

    Introduces a new category of devices, identified to genconf as -dev2 and
    created with SETDEV2 and SETPDEV2.  For the moment, these are the same as
    existing devices except that their static instance is const, but we plan to
    make them quite different in the future: don't attempt to create any.
    (devs.mak, gs.mak, genconf.c, gconf.c)

    Removes the obsolete -includef resource from genconf.  (genconf.c)

    Removes support for IJG JPEG library v5* from the makefile, since we no
    longer support these library versions.  (jpeg.mak, lib.mak,
    gsjerror.h[deleted], gsjpglib.h[deleted], gsjerror.c[deleted])

    Makes the JPEG library use floating point if it is fast.  (gsjmorec.h)

    Adds a SHARE_JPEG option to the makefiles, with the necessary warning about
    possible incompatibilities.  (*.mak)

    Replaces the CCC macro in the makefiles with CC_, the various CC* macros
    with CC_* (except for CCA2K and CCAUX), and the O macro with O_; removes the
    'begin' target and the CCBEGIN macro.  THIS IS A NON-BACKWARD-COMPATIBLE
    CHANGE, required for the new arrangement of files into directories.  (*.mak)

    Replaces all occurrences of -Idir1 -Idir2 ... -Idirn in platform-generic
    makefiles with $(I_)dir1 $(II)dir2 ... $(_I)dirn, and defines these macros
    in platform-specific makefiles, in order to accommodate OpenVMS command
    syntax.  (*.mak)

    Adds -fno-common to the default gcc compilation and linking switches, to
    improve checking for doubly-defined externs.  (unix-gcc.mak)

    Adds a -dNOINTERPOLATE switch to turn off image interpolation.  (gs_init.ps)

    Adds a -F<file> switch that runs files through the run_string interface with
    an 1-byte buffer.  (imainarg.c)

    Allows specifying the name of the gconfig.h file with -DGCONFIG_H= in the
    compilation command line, to support certain multi-configuration build
    procedures.  (int.mak, lib.mak, gconf.h, gconf.c, gscdef.c, iconf.c)

    Splits off the installation targets from unix-end.mak.  (unix-end.mak,
    unixinst.mak, unix*.mak, ugcclib.mak)

    Utilities

    Fixes bugs:
    	- A case label was misplaced.  (No effect on normal operation.)
    (genconf.c)
    	- ps2ascii had some Encoding-related problems, and a serious bug
    causing the stack to grow indefinitely.  (ps2ascii.ps)

    Adds a new font2pcl.ps utility, for converting outline fonts to bitmapped
    PCL fonts.  (font2pcl.ps)

    At the request of a user, modifies ansi2knr to read stdin if no input file
    is supplied, and to accept an optional --filename switch to set the file
    name in the #line directive.  Also makes ansi2knr write the usage message on
    stderr rather than stdout.  (ansi2knr.c)

    Adds a user-contributed Perl script that fixes compatibility problems
    between MS Word output and Ghostview 1.5.  (fixmswrd.pl)

    Adds a new test file that produces some pretty color output.  (vasarely.ps,
    unix-end.mak)

    Adds a user-contributed utility for producing AFM files from PFA/PFB and
    optionally PFM files.  (pf2afm.bat, pf2afm.ps)

    Drivers

    Fixes bugs:
    	- Some 'static' declarations were missing (gcc lossage).  (gdevht.c,
    gdevmgr.c, gdevpcfb.c, gdevrrgb.c)
    	- Some 'char *' should have been 'unsigned char *'.  (gdevccr.c)
    	- The PDF writer represented non-rectangular clipping paths in a way
    that could cause Acrobat to produce incorrect output.  (The fix relies on
    the new clipping path enumeration facility.)  (gdevpdfd.c)
    	- get_params for the X device didn't read the WINDOWID and
    .IsPageDevice parameters.  (gdevx.c)
    	- A superseded driver was still in the distribution.
    (gdevnp6.c[deleted])
    	- The PDF writer's default parameters didn't quite match the default
    parameters of Adobe Acrobat(TM).  (gdevpsdf.h)
    	- A cast from const byte * to const char * was omitted.
    (gdevpdft.c)
    	- x_map_color_rgb returned incorrect values for values in the dither
    cube/ramp.  (gdevx.c)

    Adds user-contributed drivers for:
    	- the Brother HL 720/730 laser printer (gdevhl7x.c);
    	- the Cirrus Logic CL-GD54xx SuperVGA chipset (in gdevsvga.c).

    Adds stubs or dummy implementations for the new Acrobat Distiller 3.0
    pdfmark features (BP/EP/SP, _objdef/OBJ, PUT/PUTINTERVAL/CLOSE).  Features
    not yet implemented:
    	- Predefining Catalog and DocInfo.
    	- Writing out added Catalog and Info keys.
    	- Special handling for Page#, Prev/This/NextPage.
    	- Writing out added keys in Page objects.
    	- Defining objects for ANN, DEST, LNK, PS.
    	- Writing out added keys for ANN, BP, DEST, LNK, PS.
    	- Adding information to streams (PUT, CLOSE).
    	- Writing out streams.
    (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c)

    Removes the DoThumbnails distiller parameter, which Acrobat Distiller 3.0 no
    longer supports.  (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfp.c)

    Starts to eliminate or segregate writable globals that point to
    heap-allocated data, as in the interpreter (see below); specifically, makes
    all device and xfont procedure structures const in devices that Aladdin
    maintains.  Note that this involves a NON-BACKWARD-COMPATIBLE CHANGE in the
    get_xfont_procs device procedure (to add const to the return type); this
    only affects the 3 implementations of xfonts.  (gdevprn.h, gdevdjet.c,
    gdevm1.c, gdevpccm.c, gdevpdf.c, gdevpdfm.c, gdevpdft.c, gdevps.c,
    gdevpsdf.c, gdevpx.c; gxdevice.h, gxxfont.h, gdevbgi.c, gdevbit.c,
    gdevbmp.c, gdevdflt.c, gdevdjet.c, gdevlj56.c, gdevmiff.c, gdevmsxf.c,
    gdevnfwd.c, gdevpbm.c, gdevpcfb.c, gdevpdf.c, gdevpng.c, gdevprn.c,
    gdevps.c, gdevpx.c, gdevs3ga.c, gdevsvga.c, gdevtfax.c, gdevtfnx.c,
    gdevvglb.c, gdevwddb.c, gdevwdib.c, gdevwpr2.c, gdevwprn.c, gdevx.c,
    gdevxalt.c, gdevxxf.c, gxccman.c)

    Makes the statically allocated device templates const in some devices, using
    the new -dev2 device resource type.  NOTE: the meaning of -dev2 is subject
    to change without notice in future releases.  (gdevdjet.c, gdevpdf.c,
    gdevps.c, gdevpx.c, gdevvglb.c)

    Adds a new begin_typed_image driver procedure which is called for all types
    of images, not just ImageType 1.  The default implementation calls
    begin_image if the ImageType is 1.  (gdevmem.h, gdevprn.h, gsiparam.h,
    gxdevice.h, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c,
    gxacpath.c, gxclimag.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c)

    Adds a new get_bits_rectangle driver procedure which allows reading back an
    arbitrary rectangle of bits from the device, not just a single full scan
    line.  The default implementation calls get_bits, being careful to avoid a
    recursion loop; the default implementation of get_bits calls
    get_bits_rectangle similarly.  This procedure has a lot of flexibility,
    almost all of which is ultimately provided by the implementation in memory
    devices.  (gdevmem.h, gsbitops.h, gxcindex.h, gxdevice.h, gdevbbox.c,
    gdevdflt.c, gdevdgbr.c, gdevht.c, gdevm*.c, gdevmem.c, gdevmpla.c,
    gdevnfwd.c, gxbitfmt.h, gxclip2.c, gxclist.c, gxclread.c, gxcpath.c,
    gxgetbit.h)

    Removes support for the BGI (Borland Graphics Interface) device, since we no
    longer support the Borland compilers for MS-DOS.  (devs.mak, dvx-head.mak,
    openvms.mak, unixhead.mak, gdevbgi.c[deleted])

    Speeds up x_map_color_rgb by avoiding server access in most cases.
    (gdevx.h, gdevx.c, gdevxini.c)

    Implements get_bits_rectangle in the X driver in place of get_bits.
    (gdevx.c, gdevxalt.c)

    Implements begin_typed_image for ImageType 2 images in the X driver, as an
    example of how a driver can implement this function itself.  (gdevx.c)

    Adds a call on the DCTEncode set_defaults procedure, which is now required
    (see under Streams below).  (gdevjpeg.c)

    Implements a substantial part of the Distiller image compression machinery.
    See ps2pdf.txt for details.  (gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c,
    gdevps.c, gdevpsdf.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c)

    Adds a map_color_rgb_alpha driver procedure, complementing
    map_rgb_alpha_color.  (gdevmem.h, gdevprn.h, gxdevice.h,
    gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c, gdevprn.c,
    gxclip2.c, gxclist.c, gxcmap.c, gxcpath.c)

    Splits off gxdevcli.h (client definitions) from gxdevice.h, which had gotten
    very large.  This doesn't do much good yet in terms of reducing dependencies
    and compilation time, because every client still includes gxdevice.h, but
    it's the raw material for doing so in the future.  (gxdevcli.h, gxdevice.h)

    Adds alpha tracking to the command list.  (gxclpath.h, gxclimag.c,
    gxclpath.c, gxclread.c)

    Changes the 'show' pseudo-parameter for the PDF writer so that it takes
    multiple additional parameters instead of a dictionary.  This greatly
    reduces garbage collection overhead.  (gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c,
    gdevpdft.c)

    Adds a create_compositor driver call for handling compositing.  (gdevbbox.h,
    gdevmem.h, gdevprn.h, gsdevice.h, gxdevcli.h, gxdevice.h, gdevbbox.c,
    gdevdflt.c, gdevht.c, gdevnfwd.c, gsdevice.c, gxclimag.c, gxclip2.c,
    gxclist.c, gxcpath.c, gxpcmap.c)

    Updates drivers to account for the more careful handling of file name
    length.  (gdevpdfx.h, gdevwprn.c)

    Adds a user-contributed enhancement to make the Epson dot matrix driver work
    at 180x60dpi and 240x180dpi for 24 pin printers.  (gdevepsn.c)

    Platforms

    Fixes bugs:
    	- The Windows platform didn't put stdin into binary mode.
    (dwmainc.cpp)

    Removes all remaining uses of gs_malloc and gs_free in platform-specific
    code.  (gp_dosfb.c, gp_vms.c)

    Adds a platform-specific gp_getenv call, to allow the Windows implementation
    to consult the Registry.  (gp.h, gpgetenv.h, gp_getnv.c, gp_wgetv.c, *.mak,
    gp_win32.c)

    Separates out the declaration of popen and pclose, which may be declared
    correctly in stdio.h, incorrectly in stdio.h, or not at all, depending on
    the platform.  (lib.mak, unixtail.mak, pipe_.h, gdevpipe.c, gp_os2.c,
    gp_os9.c, gp_unix.c)

    Tweaks the platform-workaround header file conditionals a little more.
    (malloc_.h, memory_.h).

    Makes the Windows DLL check the GS_DLL environment/registry variable for the
    location of the DLL.  (dwdll.cpp)

    Defines the maximum length for the file name returned by
    gp_open_scratch_file, and possibly by gp_open_printer.  (gp.h, gp_*.c)

    Fonts

    Fixes bugs:
    	- A 'flush' was missing from a debugging message.  (gs_fonts.ps)
    	- Type 2 fonts didn't always have a PaintType entry.  (gs_cff.ps)
    	- CIDFontType 0 fonts were broken, probably because of a recently
    added validity test in the C code.  (gs_cidfn.ps)
    	- Font types without an Encoding caused an error (in .completefont).
    (gs_fonts.ps)
    	- composefont required the elements of the font array to be actual
    fonts, rather than allowing font names.  (gs_cidfn.ps)
    	- composefont required that all elements of the font array have
    CIDSystemInfo dictionaries.  (Adobe has said that their interpreters don't
    check for this in some cases, but it's a bug.  Unfortunately, by now it's an
    established one.)  (zfcmap.c)

    Adds .dir to the list of file suffixes known not to be fonts.  (gs_fonts.ps)

    Interpreter

    Fixes bugs:
    	- A Type 2 font that provided fewer CharStrings than charset
    elements caused an error.  (gs_cff.ps)
    	- If a context was joined before it terminated, its stack was never
    copied to the joining context.  (zcontext.c)
    	- Freeing a context didn't free most of its substructures.
    (icontext.h, istack.h, icontext.c, interp.c, istack.c, zcontext.c)
    	- save and restore didn't save and restore the user parameters.
    (gs_lev2.ps, zvmem2.c)
    	- %stdin and %stdout weren't defined per-context.  (files.h,
    icontext.h, icontext.c, ziodev.c)
    	- Switching contexts didn't clean up the stacks.  (The current way
    we do this is very inefficient: we should use a special null for filling the
    untouched area, so we can use it to detect the high water mark.)
    (icontext.c)
    	- A cast from const to non-const was missing.  (zdpnext.c)
    	- User parameters weren't managed per-context.  (The current way we
    do this is inefficient.)  (gs_dps.ps, gs_init.ps, gs_lev2.ps, isave.h,
    icontext.c, iinit.c, isave.c, zcontext.c, zusparam.c)
    	- Some operand checks weren't wrapped in do { ... } while(0),
    possibly leading to incorrect parsing of 'if's.  (opcheck.h)
    	- If a context terminated with unmatched saves, the restores weren't
    executed.  (isave.h, isave.c, zcontext.c)
    	- If two or more contexts shared the same global VM, the outermost
    restore (which in this case saves only local VM) checked for invalidrestore
    incorrectly.  (isave.c)
    	- resourceforall didn't remove its own temporary values from the
    operand stack when calling the procedure.  (gs_res.ps)
    	- resourceforall returned local instances even when currentglobal
    was true.  (gs_res.ps)
    	- If a context had unmatched saves, other contexts sharing the same
    local VM weren't blocked from running.  (zcontext.c)
    	- The NeXT compositing operations (Copy, etc.) weren't defined in
    systemdict.  (gs_dpnxt.ps)
    	- In the case of a stack overflow, some garbage could get left on
    the stack.  (istack.c)
    	- Stack overflow was reported prematurely -- typically when the
    stack depth had reached half the specified limit.  (istack.c)
    	- Freed ref arrays weren't filled with nulls, which could confuse
    the garbage collector later.  (ialloc.c)
    	- Certain stack overflow conditions could put a stack into an
    anomalous state that confused the garbage collector.  (istack.c)
    	- The maximum stack size could not be set to a value smaller than
    the current allocated space, but the minimum value should be the number of
    entries actually in use.  (istack.c)
    	- If .buildfont* had to add any elements to the font dictionary, a
    temporary pointer to the Encoding, FDepVector, or sfnts could become
    invalid, causing crashes or confusion.  (zfont0.c, zfont2.c, zfont42.c)

    Changes exit, stop, and .stop so that if there is no matching dynamically
    enclosing context (loop or stopped), the effect is a quit, like the Adobe
    interpreters, and not an invalidexit.  (zcontrol.c)

    Adds support for ImageTypes other than 1.  (gs_init.ps, gs_lev2.ps,
    gs_res.ps, zimage2.c)

    Adds support for LanguageLevel 3 features:
    	- Idiom recognition in 'bind'.  (gs_init.ps, gs_dps.ps, gs_lev2.ps,
    gs_ll3.ps, zmisc3.c)
    	- HalftoneTypes 6, 10, and 16.  (gs_ll3.ps)
    	- FunctionType resource category.  (gs_ll3.ps)
    	- FunctionType 2 and 3 Functions.  (zfunc3.c)
    	- PatternType 2 and smooth shading (structures and API only, no
    algorithms).  (gs_init.ps, gs_ll3.ps, gs_res.ps, zshade.c)
    	- In-RIP trapping (structures and API only, no algorithms).
    (gs_ll3.ps, ztrap.c)
    	- ImageType 3 and 4 (masked images) (structures and parsing only, no
    algorithms). (gs_ll3.ps, gs_res.ps, iimage2.h, zimage.c, zimage2.c,
    zimage3.c)
    	- DevicePixel color space.  (gs_lev2.ps, zcolor2.c, zcspixel.c)
    	- DeviceN color space.  (gs_lev2.ps, igstate.h, zcsdevn.c)

    Adds support for Type 32 fonts.  (gs_cidfn.ps, gs_init.ps, gs_typ32.ps,
    zchar32.c, zfont32.c)

    Adds debugging printout to the CFF loader.  (gs_cff.ps)

    Removes support for _ds pointers referencing the stacks, since we no longer
    support 16-bit implementations.  (iref.h, istack.h, interp.c, ireclaim.c,
    istack.c)

    Removes all #ifdef DPNEXT conditionalization.  (We had intended to use this
    to delimit blocks of code to be released with the GPL, but we're now
    planning to release a much larger number of files.)  (igstate.h, interp.h,
    istruct.h, interp.c, zgstate.c)

    Allows user parameters to be implemented partly in PostScript code, since
    this is required for some LanguageLevel 3 features (currently only
    IdiomRecognition).  (gs_lev2.ps)

    Removes most of the references to a global process scheduler.  Completing
    this will require passing an interpreter state structure to all operators in
    place of the operand stack pointer, which we aren't prepared to contemplate
    yet.  (zcontext.c)

    Adds tracing for context operations, -Z' and -Z".  (zcontext.c)

    Changes def so that it doesn't have a special exception for storing
    references to local objects into systemdict or its subsidiary dictionaries
    during initialization: such stores now must use .forceput (or .forcedef,
    defined in gs_init.ps using .forceput); changes .forceput to allow storing a
    local reference into any global dictionary, not only systemdict, if the save
    level is 0.  (gs_dps1.ps, gs_init.ps, gs_lev2.ps, gs_pdfwr.ps, gs_res.ps,
    gs_statd.ps, zdict.c)

    Moves all of the initialization of internaldict to PostScript code.
    (gs_init.ps, iinit.c, zcontrol.c)

    Moves the JobName user parameter from C to PostScript code.  (gs_lev2.ps,
    zusparam.c)

    Adds to every dictionary a pointer to the allocator that created it.  This
    allows us to create and grow dictionaries without having to reference any
    global variables.  (idict.h, idict.c, iinit.c)

    Implements the localfork operator, which creates contexts with private local
    VM.  (gs_dps.ps, gs_init.ps, dstack.h, gsalloc.h, ialloc.c, icontext.c,
    iinit.c, interp.c, zcontext.c)

    Systematizes reliable access to variables in systemdict and userdict.
    (gs_dps1.ps, gs_dps2.ps, gs_fonts.ps, gs_init.ps, gs_lev2.ps, gs_statd.ps,
    gs_type1.ps)

    Starts to eliminate or segregate writable globals that point to
    heap-allocated data.  (Writable globals containing procedures,
    run-time-settable switches, pointers to static data, or non-pointer values
    that are initialized once and idempotently are OK.)  (iconf.c, iinit.c,
    imain.c, imainarg.c, interp.c, zfont1.c, zht2.c, ziodev.c, ztype.c,
    zupath.c, zusparam.c)

    Adds support for ImageType 2 (device source) images.  (gs_dps.ps, zdps.c)

    Adds begin_typed_image to internal device procedure vectors.  (zupath.c)

    Increases the maximum stack sizes to match the Adobe implementation more
    closely.  (gs_init.ps)

    Adds a file_is_invalid macro to work around a bug in the Borland 5.0
    compiler.  (files.h, ziodev.c, zvmem.c)

    Changes the character cache to be allocated in the C heap rather than global
    VM.  This is required because cache chunks are now allocated from the same
    allocator as the cache.  (zfont.c)

    Implements sizeimage and readimage, including a new .getbitsrect operator.
    (gs_dpnxt.ps, gs_init.ps, zdevice.c, zdpnext.c)

    Resets the maximum stack sizes earlier in initialization.  (gs_init.ps)

    Tweaks the default CRD slightly (syntactically, not the content).
    (gs_lev2.ps)

    Adds support for PatternTypes other than 1.  (gs_init.ps, gs_lev2.ps,
    gs_res.ps, zpcolor.c)

    Adds a pointer to the C heap allocator to the gs_main_instance structure,
    working towards the goal of removing all references to gs_memory_default.
    (iminst.h)

    Removes all remaining uses of gs_malloc and gs_free from the interpreter.
    (igc.h, igc.c, imain.c, zfdctd.c, zfdcte.c)

    Adds an explicit #include for all remaining uses of gs_memory_default in the
    interpreter.  (zfdctd.c, zfdcte.c, zvmem.c)

    Adds a map_color_rgb_alpha driver procedure, complementing
    map_rgb_alpha_color.  (zupath.c)

    Removes the obsolete writeppmfile operator.  (zwppm.c[deleted])

    Updates the implementation of the image operators to match the change from
    HasAlpha to Alpha in the image definition structure.  (iimage.h, zcolor1.c,
    zimage.c)

    Reimplements upath in C code, since UnpaintedPath requires it.  (zupath.c)

    Updates interpreter code for the change in the GC interface. (imemory.h,
    istruct.h, icontext.c, igc.c, igcref.c, igcstr.c, ilocate.c, iname.c,
    isave.c, iscan.c, istack.c, zfproc.c)

    Implements the compositing operators.  (zdpnext.c, zdps.c, zupath.c)

    Changes some matrix operators to pass unpacked matrices on the stack.
    (zmatrix.c)

    Moves the alpha-related operators to where they belong.  (zcolor.c,
    zdpnext.c)

    Changes all calls on getenv to gp_getenv.  (imainarg.c, zmisc.c)

    Interpreter (PDF)

    Fixes bugs:
    	- PostScript pass-throughs caused an error.  They are now always
    executed; probably we should offer the option of not executing them, for
    closer compatibility with Acrobat.  (pdf_draw.ps, pdf_main.ps)
    	- Font resources, unlike all other types of resources, couldn't be
    inherited from an ancestor Page(s) object.  (pdf_font.ps)
    	- Resources appearing only in Form or Pattern dictionaries weren't
    recognized as being present.  (pdf_base.ps, pdf_draw.ps, pdf_main.ps)

    Moves closer to supporting Type 0 (and CID) fonts.  (pdf_font.ps)

    Streams

    Fixes bugs:
    	- If the image was very narrow or very shallow, the interpolated
    image scaling stream could make an invalid memory reference.  (siscale.c)

    Removes the last few references to gs_malloc and gs_free from stream code.
    Clients now *must* call the set_defaults procedure for the DCT filters
    before initializing them: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
    (sdct.h, sdctd.c, sdcte.c, sjpegc.c)

    Adds an explicit #include for all remaining uses of gs_memory_default.
    (sdctd.c, sdcte.c, szlibd.c, szlibe.c)

    Library

    Fixes bugs:
    	- Some files that included shc.h didn't include scommon.h.  (shc.h)
    	- A file didn't include std.h before <stdio.h>.  (gslib.c)
    	- There was an unnecessary extern (cleanup only).  (gscsepr.c)
    	- The uid.xvalues member of gs_client_pattern structures wasn't
    traced by the GC.  (gspcolor.h)
    	- If an Interpolated image reached the end of the input at exactly
    the wrong time, an assertion could fail.  (gxiscale.c)
    	- With non-ANSI compilers, an integer constant passed to the fmod
    library function, which requires a floating point argument, could cause a
    floating point exception or an incorrect result.  (gsmisc.c)
    	- An error in computing the bounding box sometimes caused strokes to
    print incorrectly (for example, some graduated fills printed incorrectly).
    (gxstroke.c)

    Implements an undocumented (!) feature of Type 2 CharStrings, namely that if
    the endchar operator is invoked with 4 or 5 operands on the stack, it is
    equivalent to the Type 1 seac operator (without the asb operand).  This
    required changing the implementation of seac so that it does the base
    character first, rather than the accent.  (gxtype1.h, gstype1.c, gstype2.c,
    gxtype1.c)

    Adds support for ImageTypes other than 1.  (gsiparam.h, gximage.h,
    gxiparam.h, gdevddrw.c, gsimage.c, gximage.c, gximage0.c)

    Adds support for ImageType 2 (device source) images.  Currently we only
    handle the simplest case (source is not transformed).  (gsimage.h,
    gsiparm2.h, gsimage.c, gximage2.c)

    Adds support for LanguageLevel 3 features:
    	- FunctionType 2 and 3 Functions.  (gsfunc3.h, gsfunc3.c)
    	- PatternType 2 and smooth shading (structures and API only, no
    algorithms).  (gscolor3.h, gsptype2.h, gsshade.h, gxistate.h, gscolor3.c,
    gsshade.c)
    	- In-RIP trapping (structures and API only, no algorithms).
    (gstrap.h, gstrap.c)
    	- ImageType 3 (masked images) (structures and API only, no
    algorithms).  (gsiparm3.h, gximage3.c)
    	- ImageType 4 (chroma-keyed masked images).  (gsiparm4.h,
    gximage4.c)
    	- DevicePixel color space.  (gscpixel.h, gscspace.h, gscpixel.c,
    gximono.c)
    	- DeviceN color space.  (gscspace.h, gscdevn.c)

    Removes the #ifdef FUTURE around the code for passing multi-plane and
    interpolated images through the band list (version 5.01) and for banded
    filling and stroking with colored halftones (version 4.71).  This code is
    now part of the standard release.  (gxcldev.h, gxclpath.h, gxdht.h,
    gxhttype.h, gsht.c, gxclimag.c, gxclread.c, gximage.c)

    Adds a _ptrs6 structure definition macro.  (gsstruct.h)

    Removes #ifdef DPNEXT conditionalization, as in the interpreter (see above).
    (gzstate.h, gsdps.c, gsstate.c, gximage.c, gximage5.c)

    Starts to eliminate or segregate writable globals that point to
    heap-allocated data, as in the interpreter (see above).  (gsbittab.h,
    gscdefs.h, gsdcolor.h, gxclist.h, gxsample.h, gzht.h, gconf.c, gsbitops.c,
    gsbittab.c, gscdef.c, gsdparam.c, gsflip.c, gsinit.c, gsmatrix.c,
    gspcolor.c, gsstate.c, gxcht.c, gxclist.c, gxcmap.c, gxdcolor.c, gxdither.c,
    gxht.c, gximage.c)

    Removes the division between 'low-level' and 'high-level' band list
    facilities.  (gxcldev.h, gxclimag.c, gxclist.c, gxclpath.c)

    Renames gximage*.c as gxi*.c, since these files apply only to ImageType 1
    images and the use of numerical suffixes was confusing.  (gximage.c =>
    gxiinit.c, gximage0.c => gxidata.c, gximage1.c => gxifast.c,
    gximage2.c => gximono.c, gximage3.c => gxicolor.c, gximage4.c =>
    gxi12bit.c, gximage5.c => gxiscale.c)

    Provides the ability to enumerate a clipping path (based on the clipping
    list) using an enumerator, in the same way as an ordinary path.  (gxpath.h,
    gzcpath.h, gzpath.h, gxcpath.c, gxpath2.c)

    Speeds up mem_mapped4_copy_mono substantially.  (gdevm4.c)

    Removes all remaining uses of gs_malloc and gs_free in the library, other
    than in drivers.  This turned out to require changing a couple of
    initialization APIs.  (gsfont.h, gslib.h, gxdevice.h, gxfcache.h, gsfont.c,
    gxccman.c)

    Reduces the writable statics related to the default (C heap) allocator to a
    single pointer.  (gsmalloc.h, gsmemory.h, gsinit.c, gsmemory.c)

    Adds support for PatternTypes other than 1.  (gscolor2.h, gspcolor.h,
    gsptype1.h, gxcolor2.h, gspcolor.c)

    Adds an explicit #include for all remaining uses of gs_memory_default that
    aren't covered by gxdevice.h.  (gxclmem.c)

    Splits off the default implementations of the bit-copying device procedures,
    because the file was getting too large.  (gdevdbit.c, gdevdflt.c)

    Adds a procedure for calculating the difference of two rectangles, needed
    for Type 2 images.  (gsrect.h, gxpath.h, gsutil.c)

    Extends the image machinery to allow alpha values to either precede or
    follow color values in image data, replacing HasAlpha with Alpha in the
    ImageType 1 image structure.  (gsiparam.h, gximage.h, gsimage.c, gxclimag.c,
    gxclread.c, gxicolor.c, gxiinit.c, gxiscale.c)

    Extends the path enumeration API to decouple path copying from coordinate
    transformation.  (gspath.h, gzpath.h, gspath1.c, gxpath2.c)

    Changes the garbage collector interface so that all procedures are passed
    through a structure rather than being referenced as externs.  This allows
    programs other than the GC itself to enumerate and relocate pointers, and
    also removes all static dependencies on the GC from the library.  This
    involves a NON-BACKWARD-COMPATIBLE CHANGE to the argument list of enum_ptrs
    procedures, and to the implementation of both enum_ptrs and reloc_ptrs.  (We
    hope that the new macros we've introduced will avoid non-backward-compatible
    changes in the future.)  (gsstruct.h, gdevmem.c, gsalloc.c, gscdevn.c,
    gscolor.c, gscolor2.c, gscsepr.c, gsdevice.c, gsfont.c, gshtscr.c,
    gsimage.c, gsmemory.c, gspcolor.c, gsstate.c, gxcmap.c, gxcpath.c, gxht.c,
    gxiinit.c)

    Moves the image compositing code into the library from its inappropriate
    home in the interpreter.  (gsdpnext.h)

    Splits up gsbitops.h into client interface and implementation support.
    Removes some obsolete code at the same time.  (gdevmem.h, gsbitops.h,
    gxbitops.h, gsbitops.c)

    Creates the concept of compositing functions and compositing devices
    (compositors).  (gscompt.h, gxcomp.h)

    Implements the default compositor for alpha-based compositing.  (gsalphac.h,
    gsalphac.c)

    Creates a store_alpha device that adds alpha channel storage to any other
    device.  (gdevalph.c)

    Moves alpha channel capability into the dpsnext feature, where it should
    have been all along.  (gsalpha.h, gscolor.h, gsalpha.c, gscolor.c,
    gsstate.c)

    Implements color premultiplying by (non-unity) alpha values.  Currently we
    always premultiply towards white: see gxalpha.h for some comments.
    (gxalpha.h, gxcmap.c)

    Reduces the amount of boilerplate in the RasterOp implementation table.
    (gsroptab.c)

    Adds an arg_push_temp_string procedure to accommodate the new gp_getenv
    call.  (gsargs.h, gsargs.c)

    Updates various library APIs to account for the more careful handling of
    file name length.  (gdevprn.h, gxclio.h, gxclist.h, gsdevice.c, gxclfile.c,
    gxclmem.c)

    Version 5.10 (11/23/97)

    This release, not originally planned, greatly reduces the size of PDF files
    produced by the pdfwrite device, fixes a number of minor problems in PDF
    output, and optionally produces output compatible with Acrobat 2.x, in order
    to address problems reported by NSF in processing these files as part of
    their FastLane electronic proposal submission process.  Aside from that, and
    some localized bug fixes, it has minimal changes from 5.03.

    Documentation

    Fixes bugs:
    	- ansihead.mak referred to unix-ansi.mak, which is actually named
    unixansi.mak.  (ansihead.mak)
    	- README referred to an "If you need help" section that was moved to
    new-user.txt.  (README)

    Updates build information for HP-UX systems.  (make.txt)

    Updates the information for getting Martin Lottermoser's hpdj driver.
    (new-user.txt)

    Improves the error message when a user tries to invoke gswin32c without
    explicitly selecting a device.  (dwmainc.cpp)

    Removes the author's name and e-mail address from the pdf2ps man page, at
    his request.  (pdf2ps.1)

    Improves the documentation for BandBufferSpace.  (language.txt)

    Procedures

    Changes the VMS command files so that they don't echo the commands.
    (append_l.com, copy_one.com, rm_all.com, rm_one.com)

    Utilities

    Fixes bugs:
    	- The "lp" command files all inappropriately set the top margin to
    0.1".  (lp386.bat, lp386r2.bat, lpgs, lpgs.bat, lpr2, lpr2.bat)
    	- The lp386[r2].bat command files inappropriately set the
    LanguageLevel to 1.  (lp386.bat, lp386r2.bat)

    Drivers

    Fixes bugs:
    	- The PDF writer got confused about the current color if the input
    contained text strings separated only by color changes.  (gdevpdf.c)
    	- Some casts between const char * and const byte * were incorrect
    (warnings only).  (gdevpdft.c)

    Adds a NoCancel parameter to the winpr2 device, which suppresses display of
    the dialog box.  (gdevwpr2.c)

    Interpreter

    Fixes bugs:
    	- An "extern" was omitted, causing a duplicate definition of
    build_function_procs.  (ifunc.h)
    	- The global pseudo-operator table was too small, causing a
    limitcheck in ps2ascii.  (iinit.c)
    	- setcolorspace with a Pattern space with no underlying space would
    cause an error if the current color space was a Pattern space.  (zpcolor.c)
    	- The Decode key was optional, not required, in the dictionary form
    of image[mask].  (zimage2.c)

    Adds two more PCL/PJL reset sequences to the list of sequences to ignore.
    (gs_init.ps)

    Library

    Fixes bugs:
    	- Multi-screen color halftones could produce "seams".  (gxcht.c)
    	- A bug in the gcc optimizer on H-P RISC workstations caused all
    curves to be output as lines.  (gxpflat.c)
    	- If a non-standard OtherSubr was called before the [h]sbw in a Type
    1 font, a crash could occur.  (gxhint3.c)
    	- gxclist.c didn't include string_.h.  (gxclist.c)

    Version 5.07 (limited) (10/31/97)

    A few more bug fixes for the 5.10 release.

    Documentation

    Fixes bugs:
    	- Some file and directory names hadn't been updated to match the new
    directory structure on the primary server.  (make.txt, new-user.txt)

    Adds the URL for reaching URW++.  (Fontmap.*)

    Drivers

    Fixes bugs:
    	- Because the C % operator isn't equivalent to 'modulus' for
    negative numerators, gx_default_strip_tile_rectangle could crash in some
    cases.  (gxdevice.h, gdevdflt.c)
    	- In the PDF writer, Dest values were correct (page numbers) for
    GoToR actions, but were incorrect (should be page object references) for
    other actions; also, Rect values were transformed, but should not be.
    (gdevpdfm.c)
    	- In the PDF writer, articles and bookmarks could attempt to write
    multiple Contents streams, which is not allowed.  (gdevpdfx.h, gdevpdf.c,
    gdevpdfm.c)
    	- The PDF writer ignored PS (PostScript pass-through) pdfmarks.
    (gdevpdfm.c)
    	- The PDF writer didn't write out the color space parameters for
    CIE-based spaces.   (gdevpdfi.c)

    Library

    Fixes bugs:
    	- Suffix subclass structures with 4 added pointers skipped the first
    pointer in the superclass when garbage collecting, possibly causing invalid
    memory accesses.  (gsstruct.h)
    	- An argument list incompatibility in a procedure used in a static
    structure initialization upset some compilers.  (gsfunc.h, gsfunc0.c)

    Version 5.06 (limited) (10/7/97)

    This fixes a few more bugs in the PDF writer, and a few other very obscure
    problems.  It also adds support for Functions and brings multiple contexts
    closer to working, neither of which we expect actually to be used any time
    soon.  This is intended to be the candidate fileset for the 5.10 release,
    but since we had to tinker with a delicate part of the PDF writer to fix a
    problem affecting visual quality with Acrobat, there may be new bugs that
    will have to be fixed in yet another candidate fileset.

    Documentation

    Fixes bugs:
    	- Jim McPherson's e-mail address was out of date.  (devices.txt)
    	- Invoking ps2pdf with only a single file name is supported on some
    versions of Windows NT and OS/2, not only on Unix.  (ps2pdf.txt)
    	- The ps2pdf documentation didn't indicate that ps2pdf can use the
    Windows "console mode" executable as well as the MS-DOS executable.
    (ps2pdf.txt)
    	- The list of which Distiller parameters actually have an effect was
    incorrect.  (gdevpdfp.c)

    Notes that the cdj550 driver is compatible with the H-P 660C and 660Cse.
    (devs.mak, devices.txt)

    Adds a note about using Acrobat Reader fonts.  (install.txt, use.txt)

    Notes that the LJ 5P, like the 5L, is not a PCL XL printer.  (devs.mak)

    Notes problems and possible problems with certain versions of the Borland
    C++ compiler.  (make.txt)

    Notes the change in -Z:.  (use.txt)

    Updates the uniprint documentation for this release.  (devices.txt)

    Expands the rationale for the large resolution in the bbox device.
    (gdevbbox.c)

    Notes that the H-P DeskJet 600 series can use the djet500 driver with -r600.
    (devs.mak)

    Procedures

    Fixes bugs:
    	- Vector devices didn't include a necessary dependency on the stream
    package.  (lib.mak)
    	- There were several bugs in the ps2pdf.bat file.  (ps2pdf.bat)

    Changes -Z: so it prints some summary lines as well as minimal information
    about banding.  This makes the -ZA trace compatible with our memory leak
    tool.  (iminst.h, imain.c)

    Utilities

    Fixes bugs:
    	- ps2epsi sometimes produced a too-large bounding box, or even
    caused a rangecheck.  (ps2epsi)

    At the advice of a user, removes the RESOLUTION=100 line from pv.sh.
    (pv.sh)

    Drivers

    Fixes bugs:
    	- The PDF writer produced incorrect output for stroke operations
    with unusual CTMs, because PDF, unlike PostScript, applies the CTM to the
    path at the time of the fill or stroke, not as the path is being
    constructed.  (gdevpdfd.c)
    	- Vector devices returned an error, instead of falling back to the
    default implementations, when filling or stroking with a pattern.
    (gdevvec.c)
    	- The PDF writer freed an internal stream structure using the wrong
    allocator, possibly causing memory corruption.  (gdevpdf.c)
    	- The uniprint driver had some compilation problems, and possibly
    other problems as well (consult the source file).  (gdevupd.c, *.upp)
    	- With -dNOCACHE, the PDF writer wrote all text in the base 14 fonts
    twice, once as text and once as outlines.  (gs_pdfwr.ps, gdevpdfd.c)
    	- The PDF writer didn't properly recognize Symbol and ZapfDingbats
    as being among the base 14 fonts.  (gs_pdfwr.ps)
    	- When using Acrobat Reader with font smoothing turned on, the base
    14 fonts appeared too bold on the screen in files produced by ps2pdf,
    because Reader decides that a 100-unit font at 1 unit = 0.1 point should be
    bolder than a 10-unit font at 1 unit = 1 point.  (gdevpdfx.h, gdevpdf.c,
    gdevpdft.c)
    	- The PDF writer didn't convert View/Page specifications for
    bookmark pdfmarks to a Dest key, causing bookmarks not to work.
    (gdevpdfm.c)

    Speeds up the PDF writer by only passing the encoding if it isn't
    StandardEncoding.  (gs_pdfwr.ps, gdevpdft.c)

    Changes the PDF writer's handling of unencoded glyphs.  Adds device
    parameters ReEncodeCharacters and ReAssignCharacters to control how
    unencoded glyphs are handled.  (These parameters will go away when we handle
    variant encodings in full generality.)  (gdevpdfx.h, gdevpdf.c, gdevpdfp.c,
    gdevpdft.c)

    Interpreter

    Fixes bugs:
    	- setpagedevice didn't restore the stack properly if it failed.
    (gs_setpd.ps)
    	- 0 identmatrix didn't cause an error.  (gs_init.ps)
    	- Devices expecting array-valued parameters didn't accept packed
    arrays.  (iparam.c)

    Starts to de-implement support for special handling of the stacks on
    machines with 16:16 addressing.  Currently this only happens if DPNEXT is
    defined.  (istack.h)

    Brings multiple contexts closer to working.  The interpreter can now run
    some very simple test cases.  (int.mak, icontext.h, igstate.h, interp.h,
    istruct.h, icontext.c, interp.c, zcontext.c, zgstate.c)

    Adds support for FunctionType 0 Functions.  (ifunc.h, iref.h, store.h,
    zfunc.c, zfunc0.c)

    Updates a few remaining pseudo-operators in gs_init.ps to take advantage of
    automatic operand and dictionary stack restoration: eexec, identmatrix,
    pathbbox.  Not updated yet: filter.  (gs_init.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- Separation color spaces weren't supported.  (gs_pdf.ps,
    pdf_draw.ps)

    Library

    Fixes bugs:
    	- The size argument to gs_free was wrong in an out-of-memory case.
    (This was irrelevant, since gs_free only uses the size argument for
    error-checking during debugging.)  (gdevprn.c)
    	- When freeing a block on the C heap, if -Z@ was set, the block's
    header wasn't filled with the sentinel pattern.  (Only relevant when
    debugging.)  (gsmemory.c)
    	- The C heap allocator didn't fix up pointers properly when freeing
    a block, causing unpredictable memory corruption after a 'resize' call.
    (gsmemory.c)
    	- Using a show operator inside the procedure of a cshow with a
    composite font could cause an invalid access.  (gschar.c)

    Adds support for FunctionType 0 Functions.  (gsdsrc.h, gsfunc.h, gsfunc0.h,
    gxfunc.h, gsdsrc.c, gsfunc.c, gsfunc0.c)

    Moves the GC descriptor for arrays of constant strings to a place where it
    is more visible.  (gscie.h, gsstruct.h, gscie.c, gsmemory.c)

    Version 5.05 (limited) (9/24/97)

    This fixes a few bugs found in the first few days of testing 5.04.  There
    will probably be several more small incremental filesets before the next
    public release.

    Platforms

    Fixes bugs:
    	- The Windows code wouldn't compile with the latest MSVC++, because
    Microsoft changed the prototype for fprintf.  (gp_msio.c)

    Drivers

    Fixes bugs:
    	- A picky compiler complained about some omitted casts.  (gdevpdf.c,
    gdevpdft.c)
    	- Writing a PDF file with any synthesized fonts could produce
    slightly garbled output or possibly even an invalid memory access, because a
    string was not terminated.  (gdevpdft.c)
    	- When writing a PDF file, the first character of a string could get
    placed off the page, because of a matrix bookkeeping error.  (gdevpdft.c)

    Interpreter

    Fixes bugs:
    	- In case of an error, setpagedevice executed a 'stop'
    unconditionally, rather than just signalling an error through the error
    machinery.  (gs_setpd.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- Files with unknown operators caused errors, even if the BX
    operator was used to disable the error report.  (pdf_base.ps)

    Version 5.04 (limited) (9/21/97)

    This is a test fileset for an unplanned release that greatly reduces the
    size of PDF files produced by the pdfwrite device, and also optionally
    produces output compatible with Acrobat 2.x, in order to address problems
    reported by NSF in processing these files as part of their FastLane
    electronic proposal submission process.  Aside from that, and some localized
    bug fixes, it has minimal changes from 5.03.

    Documentation

    Fixes bugs:
    	- George Cameron's address was listed with a domain of .ukis rather
    than .uk.  (devices.txt)
    	- The default value of ORIENT1 was given as false rather than true.
    (use.txt)
    	- The documentation for ps2pdf said one can omit the output file
    name, but this is only true on Unix systems.  (ps2pdf.txt)
    	- The documentation for ps2pdf didn't make clear that the executable
    must be named gs on Microsoft OSs.  (ps2pdf.txt)
    	- ht_cache is actually allocated with the first gstate, not on
    demand.  (gsstate.c)

    Slightly improves the documentation of .type1execchar.  (zchar1.c)

    Clarifies the distinction between Ghostscript (PostScript) commands and
    shell commands, for the benefit of users brainwashed by Microsoft.
    (use.txt)

    Improves the usage synopsis in the ps2epsi man page.  (ps2epsi.1)

    Adds a reference to Uli Wortmann's H-P drivers.  (new-user.txt)

    Improves the documentation of GS_FONTPATH, distinguishing it from GS_LIB and
    the search path.  (use.txt)

    Notes that on some systems, one must substitute 'installbsd' for 'install'
    in the makefile and make other edits.  (install.txt, ansihead.mak,
    cc-head.mak, gcc-head.mak)

    Notes that ps2epsi is no longer maintained.  (ps2epsi.ps)

    Clarifies the availability of support.  (new-user.txt)

    Procedures

    Fixes bugs:
    	- The uniprint driver was accidentally omitted from the default
    Watcom (MS-DOS) and OS/2 configurations.  (watc.mak, os2.mak)
    	- The suggested compiler switches for Digital Unix were incorrect.
    (make.txt)
    	- The cp.cmd script file didn't work in the newest versions of OS/2.
    (cp.cmd)
    	- The compilation rules for some Windows-specific files didn't
    include ccf32.tr in their dependencies, which could cause the compilation to
    fail.  (winint.mak)

    Removes the lev2min configuration, since we no longer support 16-bit Windows
    environments.  (int.mak)

    Utilities

    Fixes bugs:
    	- ps2epsi.bat always appended to the output file, rather than
    writing over it.  (There are probably other bugs in this script file.)
    (ps2epsi.bat)
    	- The output of pdf2ps didn't execute properly on some printers,
    especially Level 1 printers.  (gs_pdf.ps)

    Makes ps2pdf do an initial 'save', which causes fonts to be retained better
    across pages.  (ps2pdf, ps2pdf.bat)

    Adds an option to pcharstr.ps to produce C-like rather than PostScript-like
    output.  (pcharstr.ps)

    Drivers

    Fixes bugs:
    	- The LaserJet III and higher printers weren't able to print in the
    narrow strip between 1/6" and 1/4" from the left edge of the page.
    (gdevdjet.c)
    	- The PCL XL drivers produced incorrect output which often caused a
    PCL XL NoCurrentFont error at the beginning of the second page.  (gdevpx.c)
    	- The GC descriptors for the pswrite device and for PS/PDF devices
    were incorrect, causing the GC to smash memory.  (gdevpsdf.h, gdevps.c)
    	- The pdfwrite device didn't have a GC descriptor at all.  ******
    DISABLED because the device allocates all its temporary structures directly
    on the C heap. ****** (gdevpdf.c)
    	- When the PDF writer wrote out the Dest key in an action
    dictionary, it always used a page object instead of a page number, even if
    the page was in another file or didn't exist; it now always uses a page
    number.  (gdevpdfm.c)
    	- The PDF writer gave an error if a file redefined any of the 14
    known fonts.  (gs_pdfwr.ps)
    	- The PDF writer didn't handle copy_mono with a non-zero sourcex.
    (This probably had no effect in practice.)  (gdevpdfi.c)

    Splits off gdevpdfd.c (driver drawing procedures) from gdevpdf.c, since the
    file was getting too large.  (gdevpdfx.h, gdevpdf.c, gdevpdfd.c)

    Adds recognition of the CompressPages, CompatibilityLevel, and
    UseFlateCompression device (distiller) parameters to the PDF writer.  If
    CompressPages is true (default), CompatibilityLevel is 1.2 (default), and
    UseFlateCompression is true (default), page contents will be compressed with
    Flate ("zip") compression; otherwise, they will not be compressed.

    Restructures the PDF writer to produce much smaller and faster PDF files, by
    restructuring its handling of text to defer all resources to the end of the
    file, eliminate duplicate Font resources, turn characters into Type 3 fonts
    rather than Image XObjects, use more efficient text positioning commands,
    and optionally (but by default) Flate-compress the contents streams.  Also
    removes some unnecessary spaces in the output.  (gdevpdfx.h, gdevpdf.c,
    gdevpdfd.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c)

    Improves the PDF writer so that it no longer converts stroke operations with
    non-uniform CTMs to fills, and doesn't bother to stroke empty paths at all.
    (gdevpdfd.c)

    Speeds up the "alternate" X devices substantially.  (gdevxalt.c)

    Interpreter

    Fixes bugs:
    	- Filling a string with a Pattern caused a crash with the PDF
    writer.  (gs_pdfwr.ps)
    	- Converting a file with no marks at all to PDF produced invalid
    output.  (gdevpdf.c)
    	- .endpage, which is called at the end of every page, sometimes left
    2 extra values on the stack.  (gs_setpd.ps)
    	- A definefont with a Type 1 font lacking a .notdef character didn't
    cause an invalidfont error.  (bfont.h, zfont1.c, zfont2.c)
    	- On anti-aliased devices, characters from Type 1 fonts with an
    incorrect or missing FontBBox came out a factor of 2 or 4 too small if the
    character was small enough to cache.  (zchar1.c)
    	- If a file redefined certain operators, loading Type 1 fonts could
    fail.  This problem was fixed in an earlier release, and somehow the fix got
    undone.  (gs_type1.ps)
    	- cshow didn't set the correct current font when running the
    procedure, and didn't restore it properly afterwards.  (zchar.c, zchar2.c)
    	- With certain compilers, the interpreter loop caused unaligned
    memory accesses on DEC Alpha systems running Windows NT.  (iref.h)

    Adds freelist validation to the memory checker.  (ilocate.c)

    Changes the debugging switch for bypassing the garbage collector from
    compile-time to run-time.  (igc.c)

    Adds the real operators for view clipping (but they don't do anything yet,
    because view clipping isn't implemented at the library level).  (zdps.c,
    zvmem.c)

    Completes the implementation of defineusername.  (zdps.c)

    Adds an implementation of wtranslation, by simply reading a device parameter
    of the same name.  (gs_dps.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- Lab color spaces weren't implemented, and gave an error.
    (gs_pdf.ps)
    	- Images only worked with built-in color spaces, not color space
    resources.  (pdf_draw.ps)
    	- Embedded font subsets were treated as undefined.  (pdf_font.ps)

    Library

    Fixes bugs:
    	- strokepath sometimes clipped the path to the current clipping
    region, which it should never do.  (gxstroke.c)
    	- The initial X/Y position for Type 2 charstrings (CFFs) sometimes
    was set incorrectly.  (gstype2.c)
    	- Memory management for dash patterns was still incorrect (despite
    the fix in 4.36), possibly causing snarled freelists and invalid memory
    references.  (gsline.c, gsstate.c)
    	- The saved gstate of a Pattern instance was freed properly when the
    instance was freed by reference counting as a result of setting the color or
    color space, but not when the instance was freed by reference counting
    anywhere else.  (gspcolor.c)
    	- A test for whether to use a slower form of oversampling was
    incorrect.  (Probably only a performance bug.)  (gschar.c)
    	- cshow didn't set the correct current font when running the
    procedure, and didn't restore it properly afterwards.  (gsfont.h, gschar.c,
    gsfont.c)

    Improves allocator validity checking when DEBUG is set.  (gsalloc.c)

    Adds a couple of missing FontType values.  (gxftype.h)

    Changes the default conversions between CMYK and RGB colors back to the
    Adobe rules documented in the Red Book, to reduce output differences from
    Adobe implementations.  (gxdcconv.c)

    Adds a graphics state element for view clipping, under an #ifdef DPNEXT, and
    implementations of the view clipping operators (but not the logic for doing
    the actual clipping).  (gsstate.h, gzstate.h, gsstate.c)

    Removes the redundant clip_rule variable from the graphics state (which
    wasn't used for anything).  (gzstate.h, gspath.c)

    Version 5.03 (8/8/97)

    The only reason for this release is to fix two serious bugs introduced
    between 5.01 and 5.02.  We fixed a few other very localized and low-risk
    bugs at the same time.

    Documentation

    Removes the "(if relevant)" from the bug reporting form, since about 25% of
    the forms are submitted without a URL or any other data.  (bug-form.txt)

    Adds a discussion of single-use procedures to the style guide.
    (c-style.txt)

    Updates the information about obtaining Ghostscript on physical media.
    (new-user.txt)

    Updates the information about ps_view.  (new-user.txt)

    Procedures

    Adds the uniprint driver to all platforms.  (*.mak)

    Changes the contents of the pc.tar.gz archives:
    	- Adds *.upp.
    	- Removes *.res.
    	- Removes cp.bat, font2c.bat, mv.bat, rm.bat, wmakebat.bat,
    	  cp.cmd, mv.cmd and rm.cmd, and gv-vms.hlp.

    Removes an obsolete script file.  (tar_mv)

    Drivers

    Fixes bugs:
    	- The uniprint driver didn't handle an increase in media height
    correctly.  (gdevupd.c)

    Platforms

    Fixes bugs:
    	- Printing to printers other than LPT1 under MS Windows no longer
    worked.  (bug introduced in 5.02)  (gp_mswin.c)
    	- Drag-and-drop didn't work under Windows NT (or other 32-bit
    Windows environments).  (dwtext.cpp)
    	- Sequent systems needed an additional system header file.
    (time_.h)

    Fonts

    Fixes bugs:
    	- The substitutions Myriad => Times and Minion => Helvetica were
    incorrect; they should be the other way around.  (gs_fonts.ps)
    	- MyriadPkg wasn't recognized as a condensed font.  (gs_fonts.ps)
    	- Univers wasn't recognized as mapping to Helvetica.  (gs_fonts.ps)

    Interpreter

    Fixes bugs:
    	- A line of debugging code, printing the sections of 3 regions of
    TrueType fonts being loaded, was accidentally left in.  (gs_ttf.ps)
    	- TrueType fonts whose pre-glyf data had odd length were broken
    (typically gave a rangecheck error), because of the fix to treat the odd
    byte of individual sfnts strings as padding per Adobe documentation.  (bug
    introduced in 5.02) (gs_ttf.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- If a real-number token in a CFF had an even number of nibbles, a
    unmatchedmark error would occur.  (gs_cff.ps)
    	- If the strings Index in a CFF included an empty string, a
    rangecheck error would occur.  (gs_cff.ps)
    	- CFFs with non-standard Encodings that included standard strings
    would get a typecheck error.  (gs_cff.ps)

    Library

    Fixes bugs:
    	- Using %d in an OutputFile name didn't substitute the page number.
    (bug introduced in 5.02)  (gsdevice.c)
    	- In Type 2 CharStrings, if a hintmask occurred at the beginning, it
    wasn't recognized as also incorporating the function of vstemhm.
    (gstype2.c)
    	- The data bytes for hintmask and cntrmask weren't printed for
    debugging.  (gstype2.c)

    Version 5.02 (7/28/97)

    Because of an ISP failure that delayed the 5.0 announcement for 12 days, the
    5.01 release only responded to a few days of bug reports; 5.02 fixes some
    problems that should have been fixed in 5.01, as well as a large number of
    obscure problems uncovered by Genoa testing.

    Documentation

    Fixes bugs:
    	- The documentation for building on the Intergraph Clipper was out
    of date.  (make.txt)
    	- ESC was claimed to be a self-delimiting character.  (gs_init.ps)
    	- Removes the documentation claiming that ^D and ^Z are
    self-delimiting.  (language.txt)
    	- Document that -dSUBSTFONT doesn't create a font with the requested
    font name.  (use.txt)
    	- Ghostscript was defined as compatible with PDF 1.1 rather than PDF
    1.2.  (language.txt)
    	- The description of gcc problems on Alpha didn't make it clear that
    the use of gcc was optional, not required.  (make.txt)
    	- The description of how to use GNU make on VMS systems was
    inaccurate.  (make.txt)

    Improves the documentation for building on H-P RISC systems.  (make.txt)

    Corrects the discussion of Cygnus' licensing terms for the cygwin32
    environment.  (make.txt)

    Removes the apology for the poor quality of Ghostscript's TrueType
    rasterizer, since the quality is now quite good.  (fonts.txt)

    Documents the fact that one must use # rather than = with Watcom C.
    (use.txt)

    Documents the updates and additions to the uniprint driver.  (devices.txt)

    Adds some material to Aladdin's C style guide.  (c-style.txt)

    Documents the fact that using gmake requires VMS 6.2 or later on Alphas and
    7.1 (perhaps 7.0) or later on VAXen.  (make.txt)

    Adds an example EPS file.  (psfiles.txt)

    Adds some information about compiling and linking under OS/2.  (make.txt)

    Expands the description of XLIBDIR and XLIBDIRS.  (*head.mak)

    Adds a new pointer to information on using a Kanji font with Ghostscript.
    (new-user.txt)

    Documents the use of /Resource/<category>/<resource> as the default place
    where resources are sought.  (use.txt)

    Updates the documentation on building with MSVC++ to reflect the makefile
    changes.  (make.txt)

    Procedures

    Fixes bugs:
    	- In openvms.mak, several ifdef tests were wrong.  (openvms.mak)
    	- One CP command was slightly inconsistent with the others.
    (zlib.mak)
    	- If libz and libpng were both shared, libz was linked first,
    resulting in some undefined references.  (libpng.mak)
    	- The VMS makefile didn't interact properly with VMS's version
    numbering facility.  (copy_one.com)

    Updates the VMS DCL script one last time, to handle libpng version 96.
    (vms.mak)

    Restructures the MSVC++ makefiles to allow building the graphics library
    without the PostScript interpreter.  (bcwin32.mak, msvc4.mak[deleted],
    msvc5.mak[deleted], msvc32.mak, msvccom.mak, watcw32.mak,
    wincom.mak[deleted], winint.mak, winlib.mak)

    Adds a makefile to create a library-only demo program under MSVC++, like the
    ones for Unix/gcc and MS-DOS/Watcom.  (msvclib.mak)

    Adds an example EPS file.  (ridt91.eps, unix-end.mak)

    Removes support for libpng release 0.88, which is now quite obsolete.
    (libpng.mak)

    Utilities

    Fixes bugs:
    	- ps2pdf.bat, unlike ps2pdf, didn't accept options.  (ps2pdf.bat)
    	- echogs used 'const' in one place, which wasn't accepted by some
    very old compilers.  (echogs.c)
    	- pdf2ps output Orientation, which it shouldn't.  (pdf_main.ps)

    Makes the usage message from ps2pdf.bat include the options, like ps2pdf.
    (ps2pdf.bat)

    Changes the printpath utility so that its output is legal PostScript code.
    (ppath.ps)

    Makes pdf2dsc add DSC comments for the bounding box (if a CropBox is
    available in the PDF file) and the orientation.  (pdf2dsc.ps)

    Drivers

    Fixes bugs:
    	- The get_bits operation wasn't implemented for the vgalib driver.
    (gdevvglb.c)
    	- The dnj650c driver output an extra % near the end of the file.
    (gdevcdj.c)
    	- The definition of pprintd2 didn't have a line break before the
    procedure name, confusing ansi2knr.  (gdevpstr.c)
    	- EPS files produced invalid PDF output.  (gdevpdf.c)
    	- "Vector" output devices didn't recognize %d in output file names,
    or - for output to stdout.  (gdevprn.h, gxdevice.h, gdevprn.c, gdevvec.c,
    gsdevice.c)
    	- With the pdfwrite driver, restore or grestore would cause a
    rangecheck error in .installpagedevice if a setpagedevice had been executed.
    (gdevpdfp.c)
    	- The pdfwrite driver produced garbage output for text rotated by
    angles that were only infinitesimally different from multiples of 90
    degrees.  (gdevpdft.c)
    	- The pnm[raw] driver didn't handle anti-aliasing properly.
    (gdevpbm.c)
    	- The PDF writer didn't scale the parameters for [a][width]show
    correctly.  (gs_pdfwr.ps, gdevpdft.c)

    Fixes some minor compilation warnings not affecting code functionality.
    (gdevbbox.c, gdevpdfm.c, gshtscr.c, gsmemory.c, gxccman.c, gxfill.c,
    gximage0.c)

    Fixes some bugs in the uniprint driver and adds some more printer models.
    (gdevupd.c, bjc610a*.upp, bjc610b*.upp, necp2x6.upp, stc1520h.upp)

    Makes a small change for clean compilation on BeOS.  (gdevcdj.c)

    Updates the PNG driver to use updated API calls for allocating/initializing
    and freeing the PNG structures.  (gdevpng.c)

    Platforms

    Refactors the MS Windows code to allow building the library without the
    interpreter.  (gs_msio.c, gs_mslib.c, gp_mswin.c)

    Fonts

    Fixes bugs:
    	- definefont was executed twice on TrueType fonts.  (No bad
    consequences, just unnecessary work.)  (gs_ttf.ps)

    Interpreter

    Fixes bugs:
    	- The fix for the 'stopped' around run_string_* in 5.01 was made
    incorrectly.  (gs_init.ps)
    	- Many operators that expect a matrix operand didn't accept packed
    arrays.  (iutil.c)
    	- The default CRD didn't have an explicit BlackPoint, which some
    Genoa tests require.  (gs_lev2.ps)
    	- A stack protection fix caused setscreen and setcolorscreen with
    dictionary operands to give a typecheck.  (gs_dps2.ps)
    	- Executing a string didn't handle tail recursion properly if the
    last token was followed by a single whitespace character.  (interp.c)
    	- Clearing the error indication didn't set errorname to null.
    (gs_init.ps)
    	- Some unexpected items appeared on the execution stack, confusing
    some of the Genoa tests.  (gs_init.ps, istack.h, istack.c, zcontrol.c)
    	- The dummy definitions for setucacheparams/ucachestatus didn't look
    enough like the real ones.  (gs_dps2.ps)
    	- Insideness tests didn't work, because the hit detection device
    width and height weren't set up.  (zupath.c)
    	- defineuserobject didn't use the same algorithm for growing the
    array as Adobe interpreters.  (gs_dps2.ps)
    	- eq and ne didn't work correctly on save objects.  (iutil.c)
    	- findfont used =string internally, interfering with PostScript
    programs that also used it.  (gs_fonts.ps)
    	- cshow didn't set up scaled versions of base fonts as the current
    font.  (zchar2.c)
    	- defineresource didn't make the resource value read-only.
    (gs_res.ps)
    	- If inustroke got an error, it could return without an error
    indication and without changing the stack.  (zupath.c)
    	- The arrays returned by different invocations of currentcolorspace
    with the same device color space weren't guaranteed to be eq.  (gs_lev2.ps)
    	- Out-of-range integers followed by a '.' were converted to names
    rather than reals.  (iscan.c, iscannum.c)
    	- resourceforall caused an invalidaccess error if currentglobal was
    true but the procedure, template, or scratch string was in local VM.
    (gs_res.ps)
    	- In many places, integer values were converted to floats rather
    than doubles, losing precision.  (ichar.h, icharout.h, ifont.h, iutil.h,
    idparam.c, iparam.c, iutil.c, zchar.c, zchar1.c, zchar42.c, zcharout.c,
    zcie.c, zcolor.c, zcolor1.c, zcolor2.c, zcontrol.c, zcsindex.c, zcssepr.c,
    zdpnext.c, zdps1.c, zfont.c, zfont2.c, zgstate.c, zhsb.c, zht.c, zmath.c,
    zmatrix.c, zmedia2.c, zpath.c, zpath1.c, zupath.c)
    	- The TransformPQR procedure in the default CRD didn't pop its
    auxiliary operands from the stack.  (gs_lev2.ps)
    	- Because of an incorrect stack depth check, setcolorrendering
    sometimes produced a stackunderflow.  (zcrd.c)
    	- sethalftone caused an invalidaccess error if the HalfTone type was
    not 5, the dictionary was in local VM, and the current VM was global.
    (gs_dps2.ps)
    	- writeobject and printobject caused an invalidaccess error if the
    object being written was in local VM and the current VM was global.
    (gs_btokn.ps)
    	- ustrokepath appended the strokepath segments to the current path,
    rather than replacing the path.  (zupath.c)
    	- restore incorrectly purged from the character cache any characters
    in a font being freed, even if the font had a UID.  (zfont.c)
    	- The definition of zimage_opaque_setup confused ansi2knr.
    (zimage.c)
    	- Type 42 fonts that included the padding byte in each sfnts string
    didn't work if sfnts had more than one string.  (zfont42.c)
    	- Doing a garbage collection at the same time as handling a
    stackoverflow failed to update the object that needed re-execution, causing
    the interpreter to execute random data.  (interp.c)
    	- %stdout and %stderr weren't flushed if they were closed
    explicitly.  (ziodev.c)

    For greater Adobe compatibility:
    	- Changes setdash to limit dash patterns to 11 elements.  (This is
    enforced at the PostScript level: the graphics library doesn't have a
    limit.)  (gs_init.ps)
    	- Changes ^D and ^Z so they are not self-delimiting characters, and
    changes ^K so it is not a whitespace character.  (gs_init.ps, iscan.c,
    scantab.c)
    	- Makes = cause an error on non-read-accessible objects rather than
    printing them as --nostringval--.  (gs_init.ps)
    	- When -dSUBSTFONT= is used, makes findfont return the actual named
    font, rather than a copy with the FontName changed to the requested one.
    (gs_fonts.ps)
    	- CFF fonts with a non-default FontMatrix caused an error.
    (gs_cff.ps)

    Fixes some minor compilation warnings not affecting code functionality.
    (iparam.c, zfcmap.c)

    Strengthens the test of o-stack validity in the main interpreter loop in
    debug mode.  (interp.c)

    Changes the filling rule for Type 1 fonts from winding-number to even-odd.
    This affects no properly designed fonts, and seems to match Adobe
    interpreters better.  (zchar1.c)

    Implements non-standard Encodings in CFF fonts.  (gs_cff.ps)

    Changes the default halftone screen for 600 dpi printers from 85 to 106 lpi,
    which reduces the number of halftone levels from 50 to 32 but produces
    visually better output.  (gs_init.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- Pattern color spaces weren't supported.  (gs_pdf.ps, pdf_draw.ps)

    Causes references to undefined named Destinations to be ignored rather than
    giving an error.  (pdf_main.ps)

    Library

    Fixes bugs:
    	- A 'const' was omitted in a declaration, upsetting several
    compilers.  (gxclread.c)
    	- arct and arcto gave an error for negative radii.  (gspath1.c)
    	- The collinearity check for arct[o] could cause some arcs to be
    rendered as single points.  (gspath1.c)
    	- Uncolored patterns sometimes came out blank, because the color
    wasn't set before calling the PaintProc.  (gspcolor.c)
    	- The phase for masking colored patterns was wrong, producing
    incorrect output.  (gspcolor.c)
    	- reversepath always appended the current position to the new path,
    rather than only doing so if the path just consisted of a single moveto.
    (gxpath2.c)
    	- cshow didn't restore the current font properly.  (gschar.h,
    gschar.c)
    	- The check for whether characters can be cached didn't consider
    PaintType values other than 0 and 2.  (gschar.c)
    	- The bounding box device didn't handle PageCount properly.
    (gdevbbox.c)
    	- Uncached fonts with a next_char procedure didn't set the glyph
    properly.  (gschar.c)
    	- Parallelograms with ax < bx, ay < by, and the 'a' edge to the
    right of the 'b' edge weren't filled, causing pixels to be omitted from some
    highly skewed images.  (gdevddrw.c)
    	- 12-bit-per-pixel images in portrait orientation filled each scan
    line with the value of the last pixel -- i.e., didn't work.  (gximage4.c)
    	- The path representation of a clipping path could include some
    inappropriate, leftover path segments.  (gxcpath.c)
    	- The angle for the miter check was computed in device space rather
    than in user space.  (gxstroke.c)
    	- TrueType fonts were lumpy, and the accents of accented characters
    were placed incorrectly.  (gstype42.c)
    	- Some macros used for generating device prototypes didn't
    parenthesize all uses of their parameters, causing possible errors if the
    parameters were expressions rather than numeric constants.  (gdevprn.h)
    	- When banding, strip halftones (typically produced by
    AccurateScreens) sometimes didn't have the correct phase.  (gxbitmap.h,
    gxclread.c)
    	- A minor change was required for correct compilation with Microsoft
    VC++.  (memory_.h)
    	- Under certain conditions, character shapes could get wildly
    distorted by hints.  (bug introduced in 5.01) (gxhint3.c)

    For greater Adobe compatibility:
    	- Changes reversepath so that the implicit line created by closepath
    is not considered a "segment".  (gxpath2.c)

    Fixes some minor compilation warnings not affecting code functionality.
    (gstype1.c)

    Changes the font and scaled-font caches so that if the font has a UID
    (UniqueID or XUID), the UID and FontType are both considered part of the
    key, and we don't cache fonts with non-zero PaintType.  (The Red Book says
    that changing anything except the Encoding should also change or remove the
    UID, but some files don't do this.  The current fix is probably not
    sufficient, but it is a step in the right direction.)  (gxfcache.h,
    gxccache.c, gxccman.c)

    Splits off the definitions of font_type and fbit_type into a separate file,
    since gxfcache.h now needs font_type.  (gxfcache.h, gxfont.h, gxftype.h)

    Makes the Flex feature in Type 1 fonts conform to the published
    specification, rather than always producing curves.  The comment in the code
    (and in the NEWS entry for release 2.6) says that this breaks some very old
    Adobe fonts: if this turns out to be a problem, we'll figure out a test that
    will do the right thing for these fonts.  (gstype1.c)

    Provides 'double' versions of some API functions to accommodate the
    increased use of doubles in the interpreter.  (gschar.h, gschar.c)

    Adds a compile-time option to force the use of strip halftones, for
    debugging.  (gshtscr.c)

    Changes the hint snapping algorithm in the Type 1 rasterizer so that it will
    only change a stem width by a maximum of 1/2 pixel rather than 1 pixel.
    This appears to help with dropouts at certain sizes.  (gxhint2.c)

    Makes a few changes for clean compilation on BeOS.  (stdpre.h, stat_.h,
    gxcpath.c)

    Version 5.01 (6/22/97)

    This fixes a few bugs reported in the 5.0 release.  This will be a
    commercially supported release.

    Documentation

    Fixes bugs:
    	- README referred to an obsolete file devarch.txt.  (README)
    	- The comment on flip4x12 had a typo.  (gsflip.c)
    	- The algorithm comments for adjusted_y_spans_pixel weren't precise
    enough.  (gxfill.c)
    	- The usage message printed by the ps2pdf script didn't indicate
    that one can now insert options before the input file name.  (ps2pdf)
    	- The file searching documentation didn't indicate that paths
    beginning with ./ or ../ are considered "explicit" and not subject to
    searching.  (use.txt)
    	- The description of SEARCH_HERE_FIRST in the per-platform makefiles
    indicated that it only applied to initialization files, not to files
    specified on the command line as well.  (*.mak)
    	- There were still some references to 16-bit implementations.
    (install.txt)

    Clarifies that -dNODISPLAY also suppresses output to other devices.
    (use.txt)

    Adds the e-mail address for reporting problems to the bug report form, and
    also a space to report makefile changes.  (bug-form.txt)

    Adds a note under -g indicating that it fixes the media size.  (use.txt)

    Adds an explanation of why Ghostscript can't use the system libraries for
    the JPEG package.  (make.txt)

    Notes that ps2ai doesn't work properly with Adobe's Helvetica-Oblique font,
    and other fonts whose original FontMatrix involves skewing or rotation.
    (psfiles.txt)

    Updates the uniprint documentation slightly.  (devices.txt)

    Notes that the new lj5 drivers do not work with the LJ5L.  (devs.mak)

    Modifies the Aladdin Free Public License slightly to make it clearer that
    the exception for freely redistributable CD-ROMs only applies if the CD-ROM
    is being distributed by itself, not with anything else commercial.  (This
    has always been the case, but the previous wording wasn't clear enough.)
    (PUBLIC)

    Notes that gcc with -O still has code generation problems on H-P RISC
    machines.  (make.txt)

    Adds a pointer to Martin Lottermoser's hpdj driver.  (new-user.txt)

    Enhances and reorganizes the documentation for building Ghostscript, in
    response to user feedback.  (make.txt, install.txt)

    Adds a description of the EPSF recognition feature.  (language.txt)

    Procedures

    Fixes bugs:
    	- string__h was misspelled string_h in one place.  (lib.mak)
    	- gs_dps.ps wasn't installed by "make install".  (unix-end.mak)
    	- ccgs (used with non-ANSI C compilers) didn't do the right thing
    with -DPNG_USE_CONST.  (ccgs)

    Adds support for version 96 of libpng, and updates all the makefiles to
    reference it.  (libpng.mak, *.mak)

    Updates the MSVC makefiles to get rid of some warning messages and provide a
    way to specify a library path for the final link.  (msvc*.mak)

    Utilities

    Fixes bugs:
    	- The usage message for the gslp utility had a minor typo.
    (gslp.ps)
    	- The "line printer" utility didn't expand tabs properly when
    producing PostScript output.  (gslp.ps)
    	- The gslp utility didn't automatically include the date.  (gslp)
    	- The line printer scripts didn't pass the script name to the
    utility program, so the usage message didn't use the correct name.  (gsbj*,
    gsdj*, gslj*, gslp*, lp*)

    Modifies the gslp utility so that invoking it with no arguments prints the
    usage message.  (gslp.ps)

    Adds the ability to specify the number of bits per component to the
    CMYK-viewing utility.  (viewcmyk.ps)

    Changes the ps2pdf script so that on Windows NT, as on Unix, it allows
    omitting the output file name, automatically replacing the extension of the
    input file with .pdf.  (ps2pdf.bat)

    Drivers

    Fixes bugs:
    	- Some compilers didn't accept a #define with the macro name on the
    next line.  (gdevpx.c)
    	- The procedure dash_pattern_eq was defined in two places.
    (gdevpdf.c)
    	- The uniprint driver sometimes dropped some output or got confused,
    because of a misunderstanding about how to update device procedure vectors
    properly.  (gdevupd.c)
    	- The PostScript and EPS writers produced binary output for images,
    which generally can't be sent to PostScript printers.  (gdevpsdf.h,
    gdevpdf.c, gdevps.c)
    	- The EPS writer put a %%EOF at the end of the file, which might
    cause problems for some spoolers if the file is embedded in another.
    (gdevps.c)

    Changes the implementation of printer drivers so that they flush the output
    stream after each page.  We aren't absolutely sure that this is a good idea,
    but it prevents certain anomalous behavior where the last page isn't ejected
    properly.  (gdevprn.c)

    Implements a long-delayed update to the mgr drivers, to restore the color
    mapping to an older one.  (gdevmgr.h, gdevmgr.c)

    Updates the uniprint driver with a number of changes from its author.
    (gdevupd.c)

    Platforms

    Adds the JPEG, Postscript, and PCL XL drivers, which are included on all
    other platforms, to the MS Windows platforms.  (bcwin32.mak, msvc4.mak,
    msvc5.mak, watcw32.mak)

    Interpreter

    Fixes bugs:
    	- composefont defined the resource with the font name and font
    directory interchanged.  (gs_cmap.ps)
    	- With dFIXEDMEDIA, documents requesting other sizes caused an error
    instead of clipping the page.  (gs_init.ps)
    	- PageSize Policy = 7 wasn't implemented.  (However, the current
    implementation is wrong.)  (gs_setpd.ps, zmedia2.c)
    	- FontType resource 42 wasn't defined even if Type 42 fonts were
    supported; similarly for FontType 9, 10, and 11 for CIDFonts.  (gs_cidfn.ps,
    gs_res.ps)
    	- The error handling machinery would break if the name /errordict
    was redefined.  (gs_init.ps)
    	- Level 1 systems got an /undefined in .doneshowpage.  (zdevice.c,
    zdevice2.c)
    	- Because of an initialization order problem, copy didn't work on
    gstates.  (zgeneric.c)

    Adds a naive implementation of findcolorrendering.  (gs_lev2.ps, gs_res.ps)

    Removes the 'stopped' around run_string[_begin/continue/end] so that, as in
    4.03, errors print a hex dump and exit with a non-zero code instead of
    printing a readable message and continuing.  (We aren't sure that this
    change didn't undo the fix in 5.0 regarding calling startjob from
    run_string.)  (gs_init.ps)

    Interpreter (PDF)

    Fixes bugs:
    	- stdin redirection failed for PDF files even if the new stdin was
    seekable.  This was fixed in 4.02, but the fix stopped working with the
    introduction of .runexec.  (pdf_main.ps)

    Makes the cross-reference reader accept a startxref value that points at the
    EOL before the xref line.  The Adobe documentation doesn't allow this, but
    some real files are this way.  (pdf_main.ps)

    Library

    Fixes bugs:
    	- The bounding box of a completely empty path was reported as
    garbage.  (gxpath2.c)
    	- Stroking a path with more than one segment didn't produce correct
    output when anti-aliasing was used.  (gspaint.c)
    	- The alpha-buffer device returned an incorrect clipping box,
    causing output to be discarded.  (gdevabuf.c)
    	- gx_forward_get_clipping_box passed the wrong device to the target
    procedure, producing incorrect results.  (gdevnfwd.c)
    	- The sin/cos procedure did some unnecessary computations
    (performance bug only).  (gsmisc.c)
    	- The procedure for adjusting the ends of curves to match the
    tangents did some unnecessary computations (performance bug only).
    (gxpcopy.c)
    	- RAM-based banding always gave an invalidfileaccess error, due to a
    typo in memfile_fopen.  (gxclmem.c)
    	- The algorithms for deciding whether a line is thin still weren't
    correct.  (gxstroke.c)
    	- The fill adjustment values for the any-part-of-pixel case (adjust
    = 0.5) were (0.5-epsilon, 0.5+epsilon), which colored inappropriate
    additional pixels if the higher coordinate was integral.  With considerable
    trepidation, we have changed this to (0.5-epsilon,0.5), which does the right
    thing in every case we can think of.  (gxfill.c)
    	- When banding, paths were clipped to only 0.5 pixel outside their
    bounding box, which may be slightly too conservative; 1 pixel is safer.
    (gxclpath.c)
    	- The algorithm for testing whether an adjusted Y value spanned a
    pixel center was incorrect, causing some pixels to get colored incorrectly.
    (gxfill.c)
    	- 24-bit devices could cause a memory fault, by accessing a pointer
    just beyond the end of the line pointer array.  (gdevm24.c)
    	- Astonishingly enough, the determination of which hints were
    applicable to a given segment of a Type 1 character was wrong in several
    different places.  Fixing this in a way that correctly handled all allowed
    permutations of the coordinate system was not simple.  (gxfont1.h,
    gxhint1.c, gxhint3.c)
    	- The debugging printout macros didn't include the syntactic hack to
    prevent an 'else' from begin assigned to the wrong 'if'.  (gdebug.h)
    	- The bbox device was accidentally limited to 130 x 130 pixels (not
    130" x 130").  (bug introduced in 5.0) (gdevbbox.c)
    	- The bbox device didn't recognize PageBoundingBox in put_params,
    causing a possible /undefined error on [g]restore.  (gdevbbox.c)
    	- setlinewidth didn't take the absolute value of its operand.
    (zgstate.c)
    	- Some code formatting was slightly off.  (gximage5.c)
    	- Some extra pixels were written for Interpolated images, but they
    were immediately overwritten, so the output was correct.  (gximage5.c)

    Changes the data flipping API from a macro to a procedure, adds a return
    value, and makes the individual flipping procedures private.  (gsflip.h,
    gsflip.c)

    Adds (under an #ifdef FUTURE) code to allow passing multi-plane images
    through the band list.  (gxclpath.h, gxclimag.c, gxclread.c)

    Adds (under an #ifdef FUTURE) code to allow passing interpolated images
    through the band list.  NOTE: interpolated images will appear slightly
    different than without banding, because the part of the image intersecting
    each band will be scaled slightly differently in the (device) Y direction.
    (gxclpath.h, gxclimag.c, gxclread.c, gximage.c)

    Changes Type 1 hinting so that when it moves points on a curve, it does so
    by properly scaling the curve in the given direction.  (gxhint3.c)

    Version 5.0 (6/6/97)

    This is the first public release since 4.03.

    Documentation

    Fixes bugs:
    	- Fontmap.Sol was incorrectly referred to as Fontmap.Solaris.
    (use.txt)
    	- There was still a reference to pstoppm in the documentation.
    (psfiles.txt)
    	- The JPEG DOS source site information was out of date.  (jpeg.mak)
    	- The list of devices included in the distributed Unix makefiles was
    out of date.  (make.txt)
    	- The MCU size limitation on the DCT filters was documented
    incorrectly.  (current.txt)
    	- The URL for the uniprint driver home page was incorrect.
    (devices.txt)
    	- The makefiles referred to sfilefd.c, which is now named sfxfd.c.
    (gs.mak, *.mak)

    Adds a VMS help file.  (gs-vms.hlp)

    Removes documentation for Digital Unix (OSF/1) 1.2 and 1.3, which are now
    long obsolete, and updates the documentation for current versions.
    (make.txt)

    Notes that there may be a problem with libpng version 0.95.  (libpng.mak)

    Adds some specific documentation for the JPEG drivers.  (devices.txt)

    Adds a suggestion that people compiling Ghostscript check the values of
    JVERSION and PVERSION.  (make.txt)

    Removes the requirement for setting the LIB environment variable when
    compiling with MSVC.  (make.txt)

    Procedures

    Fixes bugs:
    	- There were a number of small errors in the new OpenVMS makefile.
    (openvms.mak)
    	- The MSVC makefiles omitted a necessary switch to work around some
    "unspecified Pentium bugs".  (msvccom.mak)
    	- The Borland makefile wasn't even close to working; fixing it
    required moving the compilation rule for genarch.exe into the
    compiler-specific makefiles.  (bcwin32.mak, msvccom.mak, watcw32.mak,
    wincom.mak)
    	- There were some (harmless) undefined macro references in the MSVC
    makefile.  (msvccom.mak)

    Makes it unnecessary to set the LIB environment variable for MSVC.
    (msvc4.mak, msvc5.mak, wincom.mak)

    Adds a note on compiling with the cygwin32 gcc compiler for Windows NT.
    (make.txt)

    Updates vms.mak yet again, hopefully for the last time.  (vms.mak)

    Moves the CGM, JPEG, and MIFF file formats from DEVICE_DEVS8 to
    DEVICE_DEVS14 to shorten command lines; adds pcxcmyk to all platforms that
    include PCX format at all; adds jpeggray to all platforms that include jpeg.
    (devs.mak, *.mak)

    Adds -DPNG_USE_CONST for compiling libpng, to get rid of compiler warning
    messages.  (gs.mak)

    Removes obsolete makefiles from the fileset.  (tccommon.mak, tctail.mak)

    Interpreter

    Fixes bugs:
    	- restore was broken if -dNOBIND was invoked.  This fix should have
    been in the 4.81 fileset, but was left out due to operator error.
    (gs_dps1.ps)
    	- Some compilers complained about macro argument replacement within
    a string literal.  (isave.c)
    	-dSAFER didn't allow opening the %stdxxx files, which caused the
    combination of -dSAFER and -dNOBIND to cause an infinite error.
    (gs_init.ps)
    	- If C code used run_string to execute a startjob, an error
    occurred.  (gs_init.ps)

    Library

    Fixes bugs:
    	- Some compilers complained about macro argument replacement within
    a string literal.  (gxclbits.c, gdevpdfi.c)
    	- At certain resolutions, a 1-pixel line of the wrong color could
    appear at one edge of landscape-oriented monobit images.  (This is the 4th
    or 5th time we have "fixed" this one infuriatingly fragile piece of code.)
    (gxfixed.h, gximage1.c)
    	- The optimized code for landscape monobit images overlooked the
    possibility of partial images, causing parts of images to be translated and
    possibly clipped.  (Yes, it's that same fragile piece of code.)
    (gximage1.c)
    	- The bounding box device allowed resetting its resolution, which
    could cause limitchecks from coordinate overflow.  Our fix is to initialize
    the device to a very high resolution (4000 dpi), which reduces the maximum
    page size it can handle to about 130" on a side.  (gdevbbox.c)
    	- The bounding box device wasn't identified as a page device.
    (gdevbbox.c)
    	- The bounding box device used alone disregarded changes in page
    size.  (gdevbbox.c)
    	- One old compiler didn't allow a structure member name to be the
    same as a typedef name.  (gximage.h, gximage.c, gximage4.c)
    	- The height and band intersection computations for banded images
    still weren't right, leading to inconsistencies in the band list and errors
    in the output (typically, thin horizontal white stripes at band boundaries).
    (gxclimag.c)

    Adds an extensive memory dump facility to the standard allocator.
    Eventually this should be moved into a separate file, but it would be too
    disruptive to do this just before a release.  (gsalloc.c)

Copyright © 1997, 1998, 1999 Aladdin Enterprises. All rights reserved.

This file is part of Aladdin Ghostscript. See the Aladdin Free Public License (the "License") for full details of the terms of using, copying, modifying, and redistributing Aladdin Ghostscript.

Ghostscript version 6.0, 3 February 2000