History of Ghostscript versions 5.0 - 5.50

Table of contents

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: History5.htm 1053 2000-12-13 22:24:14Z giles $ 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: History5.htm 1053 2000-12-13 22:24:14Z giles $ line (actually, $Id: History5.htm 1053 2000-12-13 22:24:14Z giles $). 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