e>

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)

</pre><h3><a name="5.38_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.37"></a>Version 5.37 (beta) (8/31/98)</h2>

<h3><a name="5.37_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="5.37_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="5.37_Utilities"></a>Utilities</h3><pre>

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

</pre><h3><a name="5.37_Drivers"></a>Drivers</h3><pre>

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

</pre><h3><a name="5.37_Fonts"></a>Fonts</h3><pre>

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)

</pre><h3><a name="5.37_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="5.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="5.37_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="5.37_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.36"></a>Version 5.36 (beta) (8/25/98)</h2>

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

<h3><a name="5.36_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="5.36_Utilities"></a>Utilities</h3><pre>

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

</pre><h3><a name="5.36_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="5.36_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="5.36_Fonts"></a>Fonts</h3><pre>

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)

</pre><h3><a name="5.36_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="5.36_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="5.36_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="5.36_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.35"></a>Version 5.35 (beta) (8/18/98)</h2>

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

<h3><a name="5.35_Documentation"></a>Documentation</h3><pre>

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

</pre><h3><a name="5.35_Drivers"></a>Drivers</h3><pre>

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

</pre><h3><a name="5.35_Fonts"></a>Fonts</h3><pre>

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

</pre><h3><a name="5.35_Interpreter"></a>Interpreter</h3><pre>

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

</pre><h3><a name="5.35_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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

</pre><h3><a name="5.35_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.34"></a>Version 5.34 (beta) (8/16/98)</h2>

<p>
More updates for 5.3x.

<h3><a name="V5.34_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.34_Procedures"></a>Procedures</h3><pre>

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

</pre><h3><a name="V5.34_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.34_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.34_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.33"></a>Version 5.33 (beta) (8/14/98)</h2>

<p>
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.

<h3><a name="V5.33_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.33_Fonts"></a>Fonts</h3><pre>

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

</pre><h3><a name="V5.33_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.33_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.32"></a>Version 5.32 (beta) (8/13/98)</h2>

<p>
This is the second set of updates for 5.30.

<h3><a name="V5.32_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.32_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.32_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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

</pre><h3><a name="V5.32_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.31"></a>Version 5.31 (limited) (8/11/98)</h2>

<p>
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.

<h3><a name="V5.31_Drivers"></a>Drivers</h3><pre>

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

</pre><h3><a name="V5.31_Interpreter"></a>Interpreter</h3><pre>

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

</pre><h3><a name="V5.31_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.30"></a>Version 5.30 (limited) (8/10/98)</h2>

<p>
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.

<h3><a name="V5.30_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.30_Procedures"></a>Procedures</h3><pre>

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 =&gt; 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)

</pre><h3><a name="V5.30_Drivers"></a>Drivers</h3><pre>

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

</pre><h3><a name="V5.30_Platforms"></a>Platforms</h3><pre>

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).

</pre><h3><a name="V5.30_Fonts"></a>Fonts</h3><pre>

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 &gt; at the
end of the data.  (gs_cidfn.ps)

</pre><h3><a name="V5.30_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.30_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="V5.30_Library"></a>Library</h3><pre>

Fixes bugs:
	- ImageType 4 images with &gt;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-&gt;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)

</pre>

<hr>

<h2><a name="Version5.28"></a>Version 5.28 (limited) (8/3/98)</h2>

<p>
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).

<p>
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.

<h3><a name="V5.28_Documentation"></a>Documentation</h3><pre>

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

</pre><h3><a name="V5.28_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.28_Utilities"></a>Utilities</h3><pre>

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

</pre><h3><a name="V5.28_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.28_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.28_Interpreter"></a>Interpreter</h3><pre>

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) &gt; 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)

</pre><h3><a name="V5.28_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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

</pre><h3><a name="V5.28_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="V5.28_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.27"></a>Version 5.27 (limited) (7/18/98)</h2>

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

<h3><a name="V5.27_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.27_Procedures"></a>Procedures</h3><pre>

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-&lt;version&gt; 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)

</pre><h3><a name="V5.27_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.27_Platforms"></a>Platforms</h3><pre>

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

</pre><h3><a name="V5.27_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.27_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.27_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.26"></a>Version 5.26 (limited) (7/7/98)</h2>

<p>
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.

<h3><a name="V5.26_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.26_Drivers"></a>Drivers</h3><pre>

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

</pre><h3><a name="V5.26_Fonts"></a>Fonts</h3><pre>

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)

</pre><h3><a name="V5.26_Interpreter"></a>Interpreter</h3><pre>

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

</pre><h3><a name="V5.26_Library"></a>Library</h3><pre>

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
&lt;types.h&gt; (!).  (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)

</pre>

<hr>

<h2><a name="Version5.25"></a>Version 5.25 (limited) (7/1/98)</h2>

<p>
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.

<h3><a name="V5.25_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.25_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.25_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.25_Fonts"></a>Fonts</h3><pre>

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 &gt;= 3.  (gs_sym_e.ps)

</pre><h3><a name="V5.25_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.25_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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

</pre><h3><a name="V5.25_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.25_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.24"></a>Version 5.24 (limited) (6/17/98)</h2>

<p>
In addition to the usual bug fixes, and a few enhancements where temptation
proved irresistible or in response to an external need, this fileset:
<ul>
<li>	- Takes the first steps on a major readability cleanup
	(4-space indentation instead of 2, replacement of macros by
	procedures, ....)

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

<li>	- Starts to sketch a text API for drivers.

<li>	- Changes the Unix makefiles so that they create production
binaries
	in a separate directory.
</ul>

<p>
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.

<h3><a name="V5.24_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.24_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.24_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.24_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.24_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.24_Fonts"></a>Fonts</h3><pre>

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

</pre><h3><a name="V5.24_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.24_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.24_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="V5.24_Library"></a>Library</h3><pre>

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-&gt;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)

</pre>

<hr>

<h2><a name="Version5.23"></a>Version 5.23 (limited) (5/14/98)</h2>

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

<p>
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.

<p>
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.

<h3><a name="V5.23_Documentation"></a>Documentation</h3><pre>

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&lt;size&gt; / -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)

</pre><h3><a name="V5.23_Procedures"></a>Procedures</h3><pre>

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

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

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

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

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

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

Adds support for libpng 1.0.1.  (libpng.mak)

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

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

Ensures that every file that is copyright, maintained, and distributed by
Aladdin Enterprises has a RCS Id line.  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&lt;file&gt; switch with a -B&lt;buffer size&gt; 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 &lt;module&gt;.  This causes &lt;module&gt;
*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)

</pre><h3><a name="V5.23_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.23_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.23_Platforms"></a>Platforms</h3><pre>

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

</pre><h3><a name="V5.23_Fonts"></a>Fonts</h3><pre>

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)

</pre><h3><a name="V5.23_Interpreter"></a>Interpreter</h3><pre>

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 &lt;= 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)

</pre><h3><a name="V5.23_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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 =&gt; pdf_ops.ps, pdf*.ps)

</pre><h3><a name="V5.23_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="V5.23_Library"></a>Library</h3><pre>

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 \ &lt;newline&gt; 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)

</pre>

<hr>

<h2><a name="Version5.22"></a>Version 5.22 (limited) (2/19/98)</h2>

<p>
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.

<h3><a name="V5.22_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.22_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.22_Utilities"></a>Utilities</h3><pre>

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

</pre><h3><a name="V5.22_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.22_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.22_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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

</pre><h3><a name="V5.22_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="V5.22_Library"></a>Library</h3><pre>

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 =&gt; gx_path_init_local (or nothing);
	- gx_path_reset =&gt; gx_path_new;
	- removes gx_path_share and gx_path_release;
	- gx_path_assign =&gt; gx_path_assign_{preserve,release};
	- renames gx_path_expand_dashes =&gt; gx_path_add_dash_expansion,
	  gx_path_flatten[_accurate] =&gt; gx_path_add_flattened[_accurate],
	  gx_path_monotonize =&gt; gx_path_add_monotonized;
	- removes the init Boolean from gx_path_copy[_reversed].
    Clipping paths:
	- gx_cpath_init =&gt; gx_cpath_init_local (or nothing);
	- removes gx_cpath_share and gx_cpath_release_segments;
	- gx_cpath_path =&gt; 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)

</pre>

<hr>

<h2><a name="Version5.21"></a>Version 5.21 (limited) (1/19/98)</h2>

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

<h3><a name="V5.21_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.21_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.21_Drivers"></a>Drivers</h3><pre>

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 =&gt; /C or /Title =&gt; /T in ANN and
LNK pdfmarks.  (gdevpdfm.c)
	- pdfwrite didn't convert /Dest =&gt; /D or /File =&gt; /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)

</pre><h3><a name="V5.21_Fonts"></a>Fonts</h3><pre>

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

</pre><h3><a name="V5.21_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Many occurrences of 'const' were missing.  (gsargs.c, ialloc.c,
zdpnext.c, zfunc3.c, zshade.c)
	- Some byte * =&gt; 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)

</pre><h3><a name="V5.21_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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

</pre><h3><a name="V5.21_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.20"></a>Version 5.20 (limited) (1/8/98)</h2>

<p>
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.

<p>
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.

<h3><a name="V5.20_Documentation"></a>Documentation</h3><pre>

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&lt;n&gt; 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)

</pre><h3><a name="V5.20_Procedures"></a>Procedures</h3><pre>

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&lt;file&gt; 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)

</pre><h3><a name="V5.20_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.20_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.20_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.20_Fonts"></a>Fonts</h3><pre>

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)

</pre><h3><a name="V5.20_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.20_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.20_Streams"></a>Streams</h3><pre>

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)

</pre><h3><a name="V5.20_Library"></a>Library</h3><pre>

Fixes bugs:
	- Some files that included shc.h didn't include scommon.h.  (shc.h)
	- A file didn't include std.h before &lt;stdio.h&gt;.  (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 =&gt;
gxiinit.c, gximage0.c =&gt; gxidata.c, gximage1.c =&gt; gxifast.c,
gximage2.c =&gt; gximono.c, gximage3.c =&gt; gxicolor.c, gximage4.c =&gt;
gxi12bit.c, gximage5.c =&gt; 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)

</pre>

<hr>

<h2><a name="Version5.10"></a>Version 5.10 (11/23/97)</h2>

<p>
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.

<h3><a name="V5.10_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.10_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.10_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.10_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.10_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.10_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.07"></a>Version 5.07 (limited) (10/31/97)</h2>

<p>
A few more bug fixes for the 5.10 release.

<h3><a name="V5.07_Documentation"></a>Documentation</h3><pre>

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.*)

</pre><h3><a name="V5.07_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.07_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.06"></a>Version 5.06 (limited) (10/7/97)</h2>

<p>
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.

<h3><a name="V5.06_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.06_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.06_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.06_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.06_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.06_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Separation color spaces weren't supported.  (gs_pdf.ps,
pdf_draw.ps)

</pre><h3><a name="V5.06_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.05"></a>Version 5.05 (limited) (9/24/97)</h2>

<p>
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.

<h3><a name="V5.05_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The Windows code wouldn't compile with the latest MSVC++, because
Microsoft changed the prototype for fprintf.  (gp_msio.c)

</pre><h3><a name="V5.05_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.05_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.05_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Files with unknown operators caused errors, even if the BX
operator was used to disable the error report.  (pdf_base.ps)

</pre>

<hr>

<h2><a name="Version5.04"></a>Version 5.04 (limited) (9/21/97)</h2>

<p>
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.

<h3><a name="V5.04_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.04_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.04_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.04_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.04_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.04_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.04_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.03"></a>Version 5.03 (8/8/97)</h2>

<p>
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.

<h3><a name="V5.03_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.03_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.03_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The uniprint driver didn't handle an increase in media height
correctly.  (gdevupd.c)

</pre><h3><a name="V5.03_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.03_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- The substitutions Myriad =&gt; Times and Minion =&gt; 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)

</pre><h3><a name="V5.03_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.03_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.03_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.02"></a>Version 5.02 (7/28/97)</h2>

<p>
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.

<h3><a name="V5.02_Documentation"></a>Documentation</h3><pre>

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/&lt;category&gt;/&lt;resource&gt; as the default place
where resources are sought.  (use.txt)

Updates the documentation on building with MSVC++ to reflect the makefile
changes.  (make.txt)

</pre><h3><a name="V5.02_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.02_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.02_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.02_Platforms"></a>Platforms</h3><pre>

Refactors the MS Windows code to allow building the library without the
interpreter.  (gs_msio.c, gs_mslib.c, gp_mswin.c)

</pre><h3><a name="V5.02_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- definefont was executed twice on TrueType fonts.  (No bad
consequences, just unnecessary work.)  (gs_ttf.ps)

</pre><h3><a name="V5.02_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.02_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.02_Library"></a>Library</h3><pre>

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 &lt; bx, ay &lt; 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)

</pre>

<hr>

<h2><a name="Version5.01"></a>Version 5.01 (6/22/97)</h2>

<p>
This fixes a few bugs reported in the 5.0 release.  This will be a
commercially supported release.

<h3><a name="V5.01_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.01_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.01_Utilities"></a>Utilities</h3><pre>

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)

</pre><h3><a name="V5.01_Drivers"></a>Drivers</h3><pre>

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)

</pre><h3><a name="V5.01_Platforms"></a>Platforms</h3><pre>

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)

</pre><h3><a name="V5.01_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.01_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

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)

</pre><h3><a name="V5.01_Library"></a>Library</h3><pre>

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)

</pre>

<hr>

<h2><a name="Version5.0"></a>Version 5.0 (6/6/97)</h2>

<p>
This is the first public release since 4.03.

<h3><a name="V5.0_Documentation"></a>Documentation</h3><pre>

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)

</pre><h3><a name="V5.0_Procedures"></a>Procedures</h3><pre>

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)

</pre><h3><a name="V5.0_Interpreter"></a>Interpreter</h3><pre>

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)

</pre><h3><a name="V5.0_Library"></a>Library</h3><pre>

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)

</pre>

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1997, 1998, 1999, 2000 Aladdin Enterprises.
All rights reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                               <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>History of Ghostscript versions 6.n</title>
<!-- $Id: History6.htm,v 1.46 2003/12/08 23:17:15 giles Exp $ -->
<!--
	WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
	re-create the table of contents here, because it will replace the
	hand-edited TOC subheads with a separate subhead for each H2 in
	the body of the file.  Or if you do, first look at the original
	TOC to see how to edit it for visual conciseness.
-->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<table width="100%" border="0">
<tr><th align="center" bgcolor="#CCCC00"><font size=6>History of Ghostscript versions 6.n</font>
</table>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Version6.64">Version 6.64 (2001-04-07)</a>
<ul>
<li><a href="#6.64_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.64-Documentation">Documentation</a>,
    <a href="#6.64-Procedures">Procedures</a>,
    <a href="#6.64-Utilities">Utilities</a>,
    <a href="#6.64-Drivers">Drivers</a>,
    <a href="#6.64-PDF_writer">PDF writer</a>,
    <a href="#6.64-PDF_Interpreter">PDF Interpreter</a>,
    <a href="#6.64-Interpreter">Interpreter</a>,
    <a href="#6.64-Streams">Streams</a>,
    <a href="#6.64-Library">Library</a>,
    <a href="#6.64-Other">Other</a>
</ul>
<li><a href="#Version6.63">Version 6.63 (2001-03-31)</a>
<ul>
<li><a href="#6.63_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.63-Documentation">Documentation</a>,
    <a href="#6.63-Procedures">Procedures</a>,
    <a href="#6.63-Utilities">Utilities</a>,
    <a href="#6.63-Drivers">Drivers</a>,
    <a href="#6.63-PDF_writer">PDF writer</a>,
    <a href="#6.63-PDF_Interpreter">PDF Interpreter</a>,
    <a href="#6.63-Interpreter">Interpreter</a>,
    <a href="#6.63-Streams">Streams</a>,
    <a href="#6.63-Library">Library</a>
</ul>
<li><a href="#Version6.62">Version 6.62 (2001-03-19)</a>
<ul>
<li><a href="#6.62-Documentation">Documentation</a>,
    <a href="#6.62-Procedures">Procedures</a>,
    <a href="#6.62-Utilities">Utilities</a>,
    <a href="#6.62-Drivers">Drivers</a>,
    <a href="#6.62-PDF_writer">PDF writer</a>,
    <a href="#6.62-PDF_Interpreter">PDF Interpreter</a>,
    <a href="#6.62-Interpreter">Interpreter</a>,
    <a href="#6.62-Streams">Streams</a>,
    <a href="#6.62-Library">Library</a>,
    <a href="#6.62-Other">Other</a>
</ul>
<li><a href="#Version6.61">Version 6.61 (2001-02-21)</a>
<ul>
<li><a href="#6.61-Documentation">Documentation</a>,
    <a href="#6.61-Procedures">Procedures</a>,
    <a href="#6.61-Utilities">Utilities</a>,
    <a href="#6.61-Drivers">Drivers</a>,
    <a href="#6.61-PDF_writer">PDF writer</a>,
    <a href="#6.61-PDF_Interpreter">PDF Interpreter</a>,
    <a href="#6.61-Interpreter">Interpreter</a>,
    <a href="#6.61-Streams">Streams</a>,
    <a href="#6.61-Library">Library</a>,
    <a href="#6.61-Other">Other</a>
</ul>
<li><a href="#Version6.60">Version 6.60 (2000-12-31)</a>
<ul>
<li><a href="#6.60_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.60-Documentation">Documentation</a>,
    <a href="#6.60-Procedures">Procedures</a>,
    <a href="#6.60-Utilities">Utilities</a>,
    <a href="#6.60-Drivers">Drivers</a>,
    <a href="#6.60-PDF_writer">PDF writer</a>,
    <a href="#6.60-PDF_Interpreter">PDF Interpreter</a>,
    <a href="#6.60-Interpreter">Interpreter</a>,
    <a href="#6.60-Streams">Streams</a>,
    <a href="#6.60-Library">Library</a>,
    <a href="#6.60-Other">Other</a>
</ul>
<li><a href="#Version6.30">Version 6.30 (2000-10-03)</a>
<ul>
<li><a href="#6.30_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.30 Documentation">Documentation</a>,
    <a href="#6.30 Procedures">Procedures</a>,
    <a href="#6.30 Utilities">Utilities</a>,
    <a href="#6.30 Drivers">Drivers</a>,
    <a href="#6.30 PDF writer">PDF writer</a>,
    <a href="#6.30 Interpreter (PDF)">Interpreter (PDF)</a>,
    <a href="#6.30 Interpreter">Interpreter</a>,
    <a href="#6.30 Streams">Streams</a>,
    <a href="#6.30 Library">Library</a>,
    <a href="#6.30 ???Other???">???Other???</a>
</ul>
<li><a href="#Version6.23">Version 6.23 (2000-08-07)</a>
<ul>
<li><a href="#6.23_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.23 Documentation">Documentation</a>,
    <a href="#6.23 Procedures">Procedures</a>,
    <a href="#6.23 Utilities">Utilities</a>,
    <a href="#6.23 Drivers">Drivers</a>,
    <a href="#6.23 PDF writer">PDF writer</a>,
    <a href="#6.23 Interpreter (PDF)">Interpreter (PDF)</a>,
    <a href="#6.23 Interpreter">Interpreter</a>,
    <a href="#6.23 Library">Library</a>
</ul>
<li><a href="#Version6.22">Version 6.22 (2000-07-05)</a>
<ul>
<li><a href="#6.22_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.22 Documentation">Documentation</a>,
    <a href="#6.22 Procedures">Procedures</a>,
    <a href="#6.22 Utilities">Utilities</a>,
    <a href="#6.22 Drivers">Drivers</a>,
    <a href="#6.22 PDF writer">PDF writer</a>,
    <a href="#6.22 Interpreter (PDF)">Interpreter (PDF)</a>,
    <a href="#6.22 Interpreter">Interpreter</a>,
    <a href="#6.22 Streams">Streams</a>,
    <a href="#6.22 Library">Library</a>
</ul>
<li><a href="#Version6.21">Version 6.21 (2000-04-28)</a>
<ul>
<li><a href="#6.21_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.21 Documentation">Documentation</a>,
    <a href="#6.21 Procedures">Procedures</a>,
    <a href="#6.21 Utilities">Utilities</a>,
    <a href="#6.21 Drivers">Drivers</a>,
    <a href="#6.21 PDF writer">PDF writer</a>,
    <a href="#6.21 Interpreter (PDF)">Interpreter (PDF)</a>,
    <a href="#6.21 Interpreter">Interpreter</a>,
    <a href="#6.21 Streams">Streams</a>,
    <a href="#6.21 Library">Library</a>
</ul>
<li><a href="#Version6.20">Version 6.20 (2000-04-06)</a>
<ul>
<li><a href="#6.20_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.20 Documentation">Documentation</a>,
    <a href="#6.20 Procedures">Procedures</a>,
    <a href="#6.20 Utilities">Utilities</a>,
    <a href="#6.20 Drivers">Drivers</a>,
    <a href="#6.20 PDF writer">PDF writer</a>,
    <a href="#6.20 Interpreter (PDF)">Interpreter (PDF)</a>,
    <a href="#6.20 Interpreter">Interpreter</a>,
    <a href="#6.20 Streams">Streams</a>,
    <a href="#6.20 Library">Library</a>
</ul>
<li>(Versions 6.02 - 6.19 deliberately omitted.)
<li><a href="#Version6.01">Version 6.01 (2000-03-17)</a>
<ul>
<li><a href="#6.01_Incompatible_changes">Incompatible changes</a>,
    <a href="#6.01 Documentation">Documentation</a>,
    <a href="#6.01 Procedures">Procedures</a>,
    <a href="#6.01 Utilities">Utilities</a>,
    <a href="#6.01 Drivers">Drivers</a>,
    <a href="#6.01 PDF writer">PDF writer</a>,
    <a href="#6.01 Interpreter (PDF)">Interpreter (PDF)</a>,
    <a href="#6.01 Interpreter">Interpreter</a>,
    <a href="#6.01 Streams">Streams</a>,
    <a href="#6.01 Library">Library</a>
</ul>
<li><a href="#Version6.0">Version 6.0 (2000-02-03)</a>
<ul>
<li><a href="#6.0_Documentation">Documentation</a>,
    <a href="#6.0_Procedures">Procedures</a>,
    <a href="#6.0_Utilities">Utilities</a>,
    <a href="#6.0_Drivers">Drivers</a>,
    <a href="#6.0_Platforms">Platforms</a>,
    <a href="#6.0_Fonts">Fonts</a>,
    <a href="#6.0_PDF_writer">PDF writer</a>,
    <a href="#6.0_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#6.0_Interpreter">Interpreter</a>,
    <a href="#6.0_Streams">Streams</a>,
    <a href="#6.0_Library">Library</a>
</ul>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>
This document is a record of changes in Ghostscript releases numbered 6.n.
For earlier versions, see the the history documents:

<blockquote>
<a href="History5.htm">History of Ghostscript versions 5.n</a><br>
<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
<a href="History1.htm">History of Ghostscript versions 1.n</a>
</blockquote>

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<p>
Within each release, news appears in the following order: Incompatible
changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts,
PDF writer (included under Drivers through fileset 5.88), Interpreter,
Streams (included under Interpreter through release 2.9.9), Library.
Changes marked with a * were made available as patches to a previous
release.

<hr>

<h1><a name="Version6.64"></a>Version 6.64 (2001-04-07)</h1>

<p>
This is probably the last beta release before 7.0. Most of the patches
since last time are bug and portability fixes.

<p>
All problems registered on SourceForge numbered 414104 or lower are
closed, except for the following: 209350, 215256, 219798, 221582,
222534, 222727, 224056, 224863, 226477, 226584, 227684, 227709,
228180, 228641, 230694, 231390, 404255, 404482, 405342, 406285,
406689, 406696, 406979, 407342, 409887, 410371, 411753, 413114,
413669, 413747, 414022, 414104.

<h3><a name="6.64_Incompatible_changes"></a>Incompatible changes</h3>

<pre>
(Library)
	- The gs_logical_operation_t type now has a bit indicating
PDF 1.4 transparency.
(Build process)
	- The default directories for XLIBDIR and XINCLUDE now point
to /usr/X11R6. 


<h2><a name="6.64-Documentation"></a>Documentation</h2><pre>

1. Removing the article "Minor Bugs. kshow doesn't restore currentfont after
running proc." due to fixed. 2. Adding article "Buffering in input filters"
to "Differences from Adobe Implementation". (doc/Issues.htm [1.6]:
2001/04/03 15:53:01 igorm)

Updates Glenn Ramsey's email address in the Epson 300 documentation.
(doc/Devices.htm [1.24]: 2001/04/04 04:25:00 raph)

Adds request for code-review submissions to identify intended branches.
(doc/Maintain.htm [1.14]: 2001/04/04 07:22:48 raph)

Move SourceForge bug #226943 to the "Other implementation" section of this
document. The %ram% device has never been a user or customer issue, but it
might be handy to have. (doc/Projects.htm [1.27]: 2001/04/04 16:36:36 rayjj)

Updates to documentation. Location of main ftp site is now
ftp://mirror.cs.wisc.edu/pub/mirrors/ghost. Correct some links to the
www.cs.wisc.edu web site. Remove the statement that the Inprise compiler is
used for Windows distribution archives. (doc/Bug-info.htm [1.14],
doc/Fonts.htm [1.16], doc/Install.htm [1.20], doc/Make.htm [1.26],
doc/New-user.htm [1.23], doc/Release.htm [1.32], doc/Tester.htm [1.10]:
2001/04/05 08:49:57 ghostgum)

Adds issues from SourceForge bug numbers: 232334, 233403, 406643. Also adds
missing bug ID for #228808. (doc/Issues.htm [1.7]: 2001/04/05 14:44:39
rayjj)

Various documenation fixups. Removes pointer to external pdf_sec.ps now that
the full implementation is in our distribution. Adds note on the
class="offset" attribute to the html style guidelines. (doc/API.htm [1.5],
doc/Bug-form.htm [1.18], doc/Htmstyle.htm [1.13], doc/New-user.htm [1.24],
doc/Psfiles.htm [1.17], doc/Readme.htm [1.25]: 2001/04/06 11:27:00 giles)

Uses better test for avoiding crash on "gs -h". Also updates API document.
Thanks to Russell Lang. (doc/API.htm [1.6]: 2001/04/07 00:08:08 raph)

adds a last few doc fixups before the 6.64 beta release.
(doc/Bug-info.htm [1.15], doc/C-style.htm [1.15], doc/Htmstyle.htm [1.14]:
2001/04/07 00:15:02 giles)

Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers.
(doc/Devices.htm [1.25]: 2001/04/07 00:33:29 raph)

Corrections to interpreter API documentation. If "gs -h" executed,
gsapi_exit() must be called next. Assign copyright to artofcode LLC.
(doc/API.htm [1.7]: 2001/04/07 01:17:50 ghostgum)

Updates version number and date in preparation for 6.64 release. Updates
Develop.htm to accurately list source files. (doc/API.htm [1.8],
doc/Bug-form.htm [1.19], doc/Bug-info.htm [1.16], doc/C-style.htm [1.16],
doc/Commprod.htm [1.12], doc/Copying.htm [1.10], doc/Current.htm [1.10],
doc/DLL.htm [1.12], doc/Develop.htm [1.36], doc/Devices.htm [1.26],
doc/Drivers.htm [1.18], doc/Fonts.htm [1.17], doc/Helpers.htm [1.14],
doc/History1.htm [1.10], doc/History2.htm [1.10], doc/History3.htm [1.10],
doc/History4.htm [1.10], doc/History5.htm [1.12], doc/History6.htm [1.25],
doc/Htmstyle.htm [1.15], doc/Install.htm [1.21], doc/Issues.htm [1.8],
doc/Language.htm [1.29], doc/Lib.htm [1.10], doc/Maintain.htm [1.15],
doc/Make.htm [1.27], doc/New-user.htm [1.25], doc/News.htm [1.83],
doc/Projects.htm [1.28], doc/Ps-style.htm [1.10], doc/Ps2epsi.htm [1.11],
doc/Ps2pdf.htm [1.28], doc/Psfiles.htm [1.18], doc/README [1.9],
doc/Readme.htm [1.26], doc/Release.htm [1.33], doc/Source.htm [1.10],
doc/Tester.htm [1.11], doc/Unix-lpr.htm [1.10], doc/Use.htm [1.26],
doc/Xfonts.htm [1.10], doc/gs-vms.hlp [1.9], man/dvipdf.1 [1.7],
man/font2c.1 [1.7], man/gs.1 [1.7], man/gslp.1 [1.7], man/gsnd.1 [1.7],
man/pdf2dsc.1 [1.7], man/pdf2ps.1 [1.9], man/pdfopt.1 [1.7],
man/pf2afm.1 [1.7], man/pfbtopfa.1 [1.8], man/printafm.1 [1.7],
man/ps2ascii.1 [1.7], man/ps2epsi.1 [1.7], man/ps2pdf.1 [1.11],
man/ps2pdfwr.1 [1.8], man/ps2ps.1 [1.14], man/wftopfa.1 [1.7]: 2001/04/07
07:55:24 raph)

Trivial doc patch. (doc/Develop.htm [1.37]: 2001/04/07 07:58:50 raph)

Documentation fixups for broken internal links. (doc/Devices.htm [1.27],
doc/Maintain.htm [1.16], doc/Make.htm [1.28], doc/Release.htm [1.34]:
2001/04/07 08:18:53 giles)

</pre><h2><a name="6.64-Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- Speed up shading type 1. (lib.mak [1.47]: 2001/04/05 08:32:28
igorm)

Adds target to OS/2 makefile to build distribution zip archive. Disables
multiple image windows for OS/2 because we can't tell when subsequent
windows are closed. To allow multiple windows we would need to rewrite
gspmdrv.c. (os2.mak [1.14]: 2001/04/01 10:13:24 ghostgum)

Remove the bmpa*** devices from the default build. These are example devices
to demonstrate async rendering but do not have any advantages to users over
the bmp*** devices, and their inclusion requires thread support which is not
available on all systems. Resolves SourceForge bug #213799.
(unix-gcc.mak [1.15], unixansi.mak [1.11], unixtrad.mak [1.11]: 2001/04/03
20:04:46 rayjj)

updates to support libpng v1.0.9. (all-arch.mak [1.7], bcwin32.mak [1.9],
dvx-gcc.mak [1.9], libpng.mak [1.5], msvc32.mak [1.14], msvclib.mak [1.11],
openvms.mak [1.10], os2.mak [1.15], ugcclib.mak [1.10], unix-gcc.mak [1.16],
unixansi.mak [1.12], unixtrad.mak [1.12], watc.mak [1.11],
watclib.mak [1.11], watcw32.mak [1.10]: 2001/04/04 07:51:15 giles)

updates to support libpng v1.0.10. OS/2 makefile fixup for v1.0.9 and above
from Russell Lang. (all-arch.mak [1.8], bcwin32.mak [1.10],
dvx-gcc.mak [1.10], libpng.mak [1.6], msvc32.mak [1.15], msvclib.mak [1.12],
openvms.mak [1.11], os2.mak [1.16], ugcclib.mak [1.11], unix-gcc.mak [1.17],
unixansi.mak [1.13], unixtrad.mak [1.13], watc.mak [1.12],
watclib.mak [1.12], watcw32.mak [1.11]: 2001/04/06 07:27:22 giles)

Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers.
(contrib.mak [1.23]: 2001/04/07 00:33:29 raph)

Changes default XLIBDIR and XINCLUDE to /usr/X11R6, which is far more likely
than the previous values. (contrib.mak [1.24], ugcclib.mak [1.12],
unix-gcc.mak [1.18], unixtrad.mak [1.14]: 2001/04/07 06:50:27 raph)

Updates version number and date in preparation for 6.64 release. Updates
Develop.htm to accurately list source files. (version.mak [1.32]: 2001/04/07
07:55:25 raph)

</pre><h2><a name="6.64-Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- -dDELAYSAFER flag added; append operator fixed in Windows and OS/2
scripts; literal newlines removed from sed script. Bugs #223896, #230699
(lib/ps2epsi [1.5], lib/ps2epsi.bat [1.4], lib/ps2epsi.cmd [1.2],
lib/ps2epsi.ps [1.5]: 2001/04/04 04:45:42 alexcher)
	- The fileposition operator cannot be used on some data sources. Use
.fileposition (if on Ghostscript) and make some other changes to make this
portable to other PostScript interpreters. SourceForge bug #223005.
(lib/image-qa.ps [1.3]: 2001/04/04 04:54:53 rayjj)
	- Previous fix had OutputFile set to a debug value. Restoring it to
NUL (lib/ps2epsi.bat [1.5]: 2001/04/04 05:19:33 alexcher)
	- Adds whitespace to sed command in ps2epsi, needed on RH Linux 6.2.
(lib/ps2epsi [1.6]: 2001/04/04 21:05:00 raph)

</pre><h2><a name="6.64-Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- JPEG data made GC-traceable to prevent early freeing. Bug # 227090
gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure
is allocated with a descriptor. sdct.h : defines descriptors for JPEG
structures. sjpegc.c : implements the linked list of JPEG core blocks
sjpegd.c sjpege.c : corrects the initialization order of (de)compress
struct's gsstruct.h : yet another macro for a structure with 1 string and 1
ptr (gdevjpeg.c [1.3], gdevpsdu.c [1.10]: 2001/04/04 19:20:27 alexcher)

Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers.
(gdevhpij.c [1.1], gdevhpij.h [1.1]: 2001/04/07 00:33:29 raph)

</pre><h2><a name="6.64-PDF_writer"></a>PDF writer</h2><pre>

Fixes problems:
	- Emits W or W* after path construction operators when outputting
clip paths in the pdfwrite driver, to be correct with respect to the PDF
spec. (gdevpdfd.c [1.14]: 2001/04/07 07:12:52 raph)

</pre><h2><a name="6.64-PDF_Interpreter"></a>PDF Interpreter</h2><pre>

Fixes problems:
	- The search area for %%EOF at the end of PDF file is increased to
4K to cover a file generated by Distiller 3.02b for AIX 4.1.1 Customer #580
(lib/pdf_main.ps [1.31]: 2001/04/07 01:34:23 alexcher)
	- A comment is corrected to match the source.
(lib/pdf_main.ps [1.32]: 2001/04/07 01:47:00 alexcher)

PDF 1.4 improvements: Fixes garbage collection of device filter stack.
Forces idempotent path drawing in transparency mode. Corrects handling of
Group at toplevel page. (lib/pdf_draw.ps [1.29], lib/pdf_main.ps [1.30]:
2001/04/06 22:23:44 raph)

</pre><h2><a name="6.64-Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- Windows poll function now returns a code to interrupt Ghostscript
if the text window is closing. Don't show message box on exit if user closed
the text window. (dwmain.c [1.4], dwtext.c [1.3]: 2001/04/03 11:12:58
ghostgum)
	- equality operation between a pointer and enum constant (with 0
value) is a syntax error on CodeWarrior. Replacing the enum with NULL. From
Bernd Heller (zdscpars.c [1.10]: 2001/04/04 05:25:32 alexcher)
	- Register /All and /None in the name table on look-up. Otherwise an
attempt to set the separation color space fails with /undefined
(zcssepr.c [1.7]: 2001/04/04 16:09:15 alexcher)
	- JPEG data made GC-traceable to prevent early freeing. Bug # 227090
gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure
is allocated with a descriptor. sdct.h : defines descriptors for JPEG
structures. sjpegc.c : implements the linked list of JPEG core blocks
sjpegd.c sjpege.c : corrects the initialization order of (de)compress
struct's gsstruct.h : yet another macro for a structure with 1 string and 1
ptr (zfdctd.c [1.4], zfdcte.c [1.4]: 2001/04/04 19:20:27 alexcher)
	- Set default size of MAX_ESTACK to 5000. This is the minimal fix
recommended by L. Peter Deutsch in the followup to SourceForge bug #224095.
This should be fixed later to handle automatic stack expansion. The
approaches are defined by Peter as #2 and #3. Interim resolution to
SorceForge bug #224095. (interp.c [1.8]: 2001/04/06 06:42:45 rayjj)
	- Apparently Japanese Windows uses WM_USER+1 internally and
conflicts with gswin32c messages starting from WM_USER+1. So gswin32c
messages are moved to WM_USER+101 range. Fix from Akira Kakuto
(dwmainc.c [1.4]: 2001/04/06 08:36:02 ghostgum)
	- Do not put Windows stdin into binary mode if it is the console
because this returns CR and LF each time the Enter key is pressed. This
caused Ghostscript to not pause at following showpage prompts.
(dwmainc.c [1.5]: 2001/04/06 08:43:29 ghostgum)
	- Genoa FTS 035-07.ps got a SEGV error caused by data being
allocated in non-GC memory, but pointer enumumeration giving these pointers
to the GC for tracing. Since these objects didn't have GC type headers bad
things happened. Also change one of the allocations in sjpegc.c to immovable
that was not -- this change was not needed to prevent the crash.
(zfdctd.c [1.5]: 2001/04/07 00:33:22 rayjj)
	- Compressed fonts are now recognized as narrow during font
substitution. Customer #580 (lib/gs_fonts.ps [1.11]: 2001/04/07 01:07:01
alexcher)
	- two small issues with compilation under xlc on IBM AIX RS6000, a
name conflict with structures names (u)int64, and trailing commas in enum
declarations. Patch from Dan Coby. Sourceforge bug #414328.
(dscparse.h [1.4]: 2001/04/07 07:28:33 giles)

Adds target to OS/2 makefile to build distribution zip archive. Disables
multiple image windows for OS/2 because we can't tell when subsequent
windows are closed. To allow multiple windows we would need to rewrite
gspmdrv.c. (dpmain.c [1.3]: 2001/04/01 10:13:24 ghostgum)

updates to support libpng v1.0.10. OS/2 makefile fixup for v1.0.9 and above
from Russell Lang. (imain.c [1.11]: 2001/04/06 07:27:22 giles)

Removed unecessary include of Macintosh QDOffscreen.h header (iapi.h [1.2]:
2001/04/06 22:57:46 bdheller)

Uses better test for avoiding crash on "gs -h". Also updates API document.
Thanks to Russell Lang. (imain.c [1.12]: 2001/04/07 00:08:08 raph)

Updates version number and date in preparation for 6.64 release. Updates
Develop.htm to accurately list source files. (lib/gs_init.ps [1.33]:
2001/04/07 07:55:25 raph)

Removes \r\n line ends inadvertently added. (dscparse.h [1.5]: 2001/04/07
08:07:17 raph)

</pre><h2><a name="6.64-Streams"></a>Streams</h2><pre>

Fixes problems:
	- JPEG data made GC-traceable to prevent early freeing. Bug # 227090
gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure
is allocated with a descriptor. sdct.h : defines descriptors for JPEG
structures. sjpegc.c : implements the linked list of JPEG core blocks
sjpegd.c sjpege.c : corrects the initialization order of (de)compress
struct's gsstruct.h : yet another macro for a structure with 1 string and 1
ptr (sdct.h [1.3], sdeparam.c [1.3], sjpegc.c [1.3], sjpegd.c [1.3],
sjpege.c [1.3]: 2001/04/04 19:20:27 alexcher)
	- Genoa FTS 035-07.ps got a SEGV error caused by data being
allocated in non-GC memory, but pointer enumumeration giving these pointers
to the GC for tracing. Since these objects didn't have GC type headers bad
things happened. Also change one of the allocations in sjpegc.c to immovable
that was not -- this change was not needed to prevent the crash.
(sjpegc.c [1.4]: 2001/04/07 00:33:22 rayjj)

</pre><h2><a name="6.64-Library"></a>Library</h2><pre>

Fixes problems:
	- Register /All and /None in the name table on look-up. Otherwise an
attempt to set the separation color space fails with /undefined
(gscsepr.c [1.8]: 2001/04/04 16:09:15 alexcher)
	- JPEG data made GC-traceable to prevent early freeing. Bug # 227090
gsstruct.h : yet another macro for a structure with 1 string and 1 ptr
(gsstruct.h [1.8]: 2001/04/04 18:45:08 alexcher)
	- Speed up shading type 1. (gsshade.c [1.4], gxshade1.c [1.9]:
2001/04/05 08:32:28 igorm)
	- Some compilers complain that: "Argument of type "stream *" is
incompatible with parameter of type "FILE *". Thanks to Nelson Beebe for
finding this (on SGI). (gs_stdio.h [1.2]: 2001/04/06 03:19:07 rayjj)
	- Fixes crashes in Type 4 function evaluator when stack is empty.
(gsfunc4.c [1.5]: 2001/04/06 22:22:38 raph)

Adds a lop_pdf14 field to logical operators, which is used to force non-
idempotent drawing of paths. (gsropt.h [1.4]: 2001/04/05 23:21:15 raph)

PDF 1.4 improvements: Fixes garbage collection of device filter stack.
Forces idempotent path drawing in transparency mode. Corrects handling of
Group at toplevel page. (gdevp14.c [1.2], gsstate.c [1.11]: 2001/04/06
22:23:44 raph)

</pre><h2><a name="6.64-Other"></a>Other</h2><pre>

Fixes problems:
	- two small issues with compilation under xlc on IBM AIX RS6000, a
name conflict with structures names (u)int64, and trailing commas in enum
declarations. Patch from Dan Coby. Sourceforge bug #414328.
(icclib/icc.c [1.2], icclib/icc.h [1.2]: 2001/04/07 07:28:33 giles)

Removes \r\n line ends inadvertently added. (icclib/icc.c [1.3],
icclib/icc.h [1.3]: 2001/04/07 08:07:16 raph)

<hr>

<h1><a name="Version6.63"></a>Version 6.63 (2001-03-31)</h1>

<p>
This is the second beta release for the upcoming 7.0 release. This
fileset contains a number of stability improvements for the new
display device, integration of PDF 1.4 rendering with all devices, and
the usual round of bug fixes.

<p>
All problems registered on SourceForge numbered 411753 or lower are
closed, except for the following: 201955, 202735, 206652, 209350,
213799, 215256, 219798, 220967, 221582, 222534, 222727, 223005,
223754, 223896, 223992, 224056, 224095, 224863, 226477, 226584,
226943, 227090, 227684, 227709, 228180, 228641, 230694, 230699,
231390, 232334, 233403, 404255, 404482, 405313, 406285, 406643,
406689, 406696, 406979, 407342, 409887, 410371, 410722, 411753.

<h3><a name="6.63_Incompatible_changes"></a>Incompatible changes</h3>

<pre>
(Library)
	- The gs_text_enum_common structure has a new imaging_dev field
which is used by the bbox device to intercept low-level drawing
operations when drawing text.
	- There is a new pdf14 device filter used for rendering PDF 1.4
documents.


<h2><a name="6.63-Documentation"></a>Documentation</h2><pre>

Moves the following SourceForge bugs to the Issues.htm documentation:
201955, 220967, 223992. (doc/Issues.htm [1.2]: 2001/03/20 07:36:30 rayjj)

Added 2 issues related to JPEG in PDF, Bug 226391 (doc/Issues.htm [1.3]:
2001/03/20 16:41:28 alexcher)

Adds %printer% device to Windows to allow a printer to be specified as
-sOutputFile="%printer%Printer Name". This replaces the use of
"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
\\spool\, the new %printer% device does not write a large temporary file.
(doc/Install.htm [1.17]: 2001/03/26 11:28:20 ghostgum)

Change the search order for the Ghostscript Windows DLL to try the
executable directory before the location specified in the GS_DLL environment
variable. (doc/Install.htm [1.18]: 2001/03/27 09:35:22 ghostgum)

Some attributes of Catalog object are lost during PDF to PDF conversion
(doc/Issues.htm [1.4]: 2001/03/27 21:03:18 alexcher)

Increments version number after 6.62 release. (doc/News.htm [1.81]:
2001/03/28 21:27:15 raph)

Updates dates in preparation for 6.63 beta release. News updated.
(doc/API.htm [1.4], doc/Bug-form.htm [1.17], doc/Bug-info.htm [1.13],
doc/C-style.htm [1.14], doc/Commprod.htm [1.11], doc/Copying.htm [1.9],
doc/Current.htm [1.9], doc/DLL.htm [1.11], doc/Develop.htm [1.35],
doc/Devices.htm [1.23], doc/Drivers.htm [1.17], doc/Fonts.htm [1.15],
doc/Helpers.htm [1.13], doc/History1.htm [1.9], doc/History2.htm [1.9],
doc/History3.htm [1.9], doc/History4.htm [1.9], doc/History5.htm [1.11],
doc/History6.htm [1.23], doc/Htmstyle.htm [1.12], doc/Install.htm [1.19],
doc/Issues.htm [1.5], doc/Language.htm [1.28], doc/Lib.htm [1.9],
doc/Maintain.htm [1.13], doc/Make.htm [1.25], doc/New-user.htm [1.22],
doc/News.htm [1.82], doc/Projects.htm [1.26], doc/Ps-style.htm [1.9],
doc/Ps2epsi.htm [1.10], doc/Ps2pdf.htm [1.27], doc/Psfiles.htm [1.16],
doc/README [1.8], doc/Readme.htm [1.24], doc/Release.htm [1.31],
doc/Source.htm [1.9], doc/Tester.htm [1.9], doc/Unix-lpr.htm [1.9],
doc/Use.htm [1.25], doc/Xfonts.htm [1.9], doc/gs-vms.hlp [1.8],
man/dvipdf.1 [1.6], man/font2c.1 [1.6], man/gs.1 [1.6], man/gslp.1 [1.6],
man/gsnd.1 [1.6], man/pdf2dsc.1 [1.6], man/pdf2ps.1 [1.8],
man/pdfopt.1 [1.6], man/pf2afm.1 [1.6], man/pfbtopfa.1 [1.7],
man/printafm.1 [1.6], man/ps2ascii.1 [1.6], man/ps2epsi.1 [1.6],
man/ps2pdf.1 [1.10], man/ps2pdfwr.1 [1.7], man/ps2ps.1 [1.13],
man/wftopfa.1 [1.6]: 2001/04/01 01:10:54 raph)

</pre><h2><a name="6.63-Procedures"></a>Procedures</h2><pre>

Adds %printer% device to Windows to allow a printer to be specified as
-sOutputFile="%printer%Printer Name". This replaces the use of
"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
\\spool\, the new %printer% device does not write a large temporary file.
(winlib.mak [1.9]: 2001/03/26 11:28:20 ghostgum)

Adds Windows %printer% device to MS Visual C++ build. (msvc32.mak [1.13]:
2001/03/26 12:00:07 ghostgum)

Adds icclib subdirectory to tarballs. (toolbin/makeset.tcl [1.7]: 2001/03/28
21:24:00 raph)

Increments version number after 6.62 release. (version.mak [1.30]:
2001/03/28 21:27:15 raph)

Applies PDF 1.4 rendering with all devices. Previously, only pnga device
contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
model is detected in the source file, it installs the pdf 1.4 rendering
device as a device filter. (lib.mak [1.46]: 2001/04/01 00:30:41 raph)

Updates dates in preparation for 6.63 beta release. News updated.
(version.mak [1.31]: 2001/04/01 01:10:55 raph)

</pre><h2><a name="6.63-Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- closefile added for procedure based stdio to prevent disabled
stream from appearing valid. (ziodevsc.c [1.2]: 2001/03/27 09:37:10
ghostgum)
	- Avoid rangecheck error when character code exceeds 255. Support
zero-size bitmap used by some fonts for space character.
(lib/bdftops.ps [1.3]: 2001/03/27 20:53:36 alexcher)
	- BATCH parameter is added to all bdftops* scripts
(lib/bdftops [1.2], lib/bdftops.bat [1.3], lib/bdftops.cmd [1.2]: 2001/03/27
21:15:55 alexcher)
	- Corrects memory allocation of command line arguments in the
programs which load the Ghostscript interpreter DLL / shared object.
(dxmain.c [1.2]: 2001/03/31 10:09:47 ghostgum)

Adds %printer% device to Windows to allow a printer to be specified as
-sOutputFile="%printer%Printer Name". This replaces the use of
"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
\\spool\, the new %printer% device does not write a large temporary file.
(gp_msprn.c [1.1]: 2001/03/26 11:28:20 ghostgum)

</pre><h2><a name="6.63-Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- AutoFilter.* options now select lossless compression for the image
smaller than 64 pixels in any dimension. Bug # 226391 from a free user.
(gdevpsdi.c [1.14]: 2001/03/24 04:17:07 alexcher)
	- In the display device, allow NULL as a valid value for
DisplayHandle. Correct the code which requires the device to be closed
before changing the DisplayHandle and DisplayFormat parameters. SourceForge
bug # 411101. (gdevdsp.c [1.2]: 2001/03/28 08:46:15 ghostgum)
	- mdev-&gt;memory member was set to 0 causing gx_device_enum_ptr()
not enumerate mdev. This led to freeing of mdev by GC and memory exceptions
during de-allocation of the display device. (gdevdsp.c [1.3]: 2001/03/28
21:50:56 alexcher)
	- Correct memory allocation problems in the display device. Return
correct pointers from display_enum_ptrs so that the memory device and bitmap
are not moved or prematurely freed. Adds a finalize procedure. Change the
memory device to not forward to the display device. Mark the memory device
as retained so it gets freed at the correct time. (gdevdsp.c [1.4],
gdevdsp2.h [1.2]: 2001/03/29 07:26:57 ghostgum)
	- Prevents the buffered mode of the x11 device from missing updates
from the bitmap buffer to the X display. Fix for Artifex customer #1130
(gdevx.c [1.8]: 2001/03/30 18:22:28 rayjj)

Adds Tumble parameter to mswinpr2 device for specifying the duplex
arrangement. Adds QueryUser to the parameters returned by
win_pr2_get_params, so that it works from the command line.
(gdevwpr2.c [1.8]: 2001/03/26 09:44:08 ghostgum)

Adds %printer% device to Windows to allow a printer to be specified as
-sOutputFile="%printer%Printer Name". This replaces the use of
"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old
\\spool\, the new %printer% device does not write a large temporary file.
(gdevwpr2.c [1.9]: 2001/03/26 11:28:20 ghostgum)

Applies PDF 1.4 rendering with all devices. Previously, only pnga device
contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
model is detected in the source file, it installs the pdf 1.4 rendering
device as a device filter. (gdevp14.h [1.1]: 2001/04/01 00:30:41 raph)

Change: The Ghostscript 'pwrite' function name conflicted with the standard
pwrite function defined in unistd.h on several systems. To avoid confusion
with the standard function change the name to stream_write. Also change
'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
#410772. Fix by Ray Johnston. (gdevps.c [1.16], gdevpsdu.c [1.9],
gdevpsu.c [1.4]: 2001/04/01 00:35:26 raph)

</pre><h2><a name="6.63-PDF_writer"></a>PDF writer</h2><pre>

Fixes problems:
	- coordinate range is reduced to +/- 16383 to satisfy actual AR4
restrictions. When CTM was scaled to reduce the range, line width in stroke
and CTM in fill were wrong. Bug # 409105 from raf_mellen at
users.sourceforge.net (gdevpdfd.c [1.12]: 2001/03/21 04:25:48 alexcher)
	- ARTICLE pdfmark generated invalid bead object if /Page key was
left out. Bug # 227651 from mbentley at users.sourceforge.net
(gdevpdfm.c [1.10]: 2001/03/21 05:10:31 alexcher)
	- initial values of fill and stroke color didn't change when
ProcessColorModel changed. An attempt to set white color in CMYK mode was
ignored because it was considered equal to the default color. Bug #410441
from a free user. (gdevpdf.c [1.30]: 2001/03/22 15:12:48 alexcher)
	- pdf_reset_graphics() didn't set correct default color (black) in
/DeviceCMYK color model. An attempt to set white color was ignored because
it was considered equal to the default color causing white objects rendered
black. Bug #410441 from a free user. (gdevpdfg.c [1.11]: 2001/03/23 22:04:19
alexcher)
	- Maximum depth of an outline tree increased from 8 to 32. Bug
#410595 from a free user. (gdevpdfx.h [1.29]: 2001/03/23 22:18:28 alexcher)

Change: The Ghostscript 'pwrite' function name conflicted with the standard
pwrite function defined in unistd.h on several systems. To avoid confusion
with the standard function change the name to stream_write. Also change
'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
#410772. Fix by Ray Johnston. (gdevpdf.c [1.31], gdevpdfb.c [1.4],
gdevpdfc.c [1.15], gdevpdfd.c [1.13], gdevpdfe.c [1.9], gdevpdfg.c [1.12],
gdevpdfj.c [1.6], gdevpdfm.c [1.11], gdevpdfo.c [1.7], gdevpdfs.c [1.3],
gdevpdft.c [1.32], gdevpdfu.c [1.15], gdevpdfw.c [1.10]: 2001/04/01 00:35:26
raph)

</pre><h2><a name="6.63-PDF_Interpreter"></a>PDF Interpreter</h2><pre>

Fixes problems:
	- OmniForm generates PDF files with endobj missing in some objects.
Adobe Acrobat Reader ignores this. Generally speaking, Ghostscript does not
attempt to accept files that grossly fail to obey the Adobe specification
and are produced by software other than a very few extremely widespread
applications. However work-around for this case is easy and unlikely to
break anything. SourceForge bug #406694. (lib/pdf_base.ps [1.14]: 2001/03/20
05:04:59 alexcher)
	- URI action was not converted to corresponding pdfmark and lost
during PDF to PDF conversion. Bug #409245, patch Leon Bottou with some
changes. (lib/pdf_main.ps [1.28]: 2001/03/24 23:59:23 alexcher)

Implementation of security hooks for PDF reader by Geoffrey Keating is
merged into the main GS code base. (lib/pdf_sec.ps [1.3]: 2001/03/25
02:03:44 alexcher)

Applies PDF 1.4 rendering with all devices. Previously, only pnga device
contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
model is detected in the source file, it installs the pdf 1.4 rendering
device as a device filter. (lib/pdf_main.ps [1.29]: 2001/04/01 00:30:41
raph)

</pre><h2><a name="6.63-Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- flush procedure based stdout and stderr on exit. (imain.c [1.8]:
2001/03/27 09:38:39 ghostgum)
	- Fix for CIDFontType 0 : 1. Erroneous glyphs are drawn by cshow
(with -dNOCACHE); 2. Glyphs written in horizontal direction instead vertical
(with anti-aliasing); 3. Erroneous glyphs and awkward metrics (with
anti-aliasing and -dNOCACHE); Patches 1 &amp; 3 from Hideyuki Suzuki
(hideyuki), improved by igorm. SourceForge bug #222683. (zchar1.c [1.7]:
2001/03/27 09:56:39 igorm)
	- Changes to introduce the min_left stream state variable set this
to 1 for procedure streams, which caused 1 character to be retained in the
stream buffer which was not passed to the client. This broke the DLL
interface where procedure callouts were used to get the string from the
callback. Procedure streams have no need for EOD lookahead (to force
closure) so the correct min_left value is 0. SourceForge bug #404331.
(zfproc.c [1.9]: 2001/03/29 04:09:40 rayjj)
	- After recognizing a number the scanner wrongly interpreted it as a
name, if the number ends at the end of input buffer. Change from Raph.
SourceForge bug #224205. (iscannum.c [1.3]: 2001/03/29 13:27:59 igorm)
	- Correct the Windows virtual key code passed from the image window
to the console. (dwimg.c [1.2]: 2001/03/31 10:07:48 ghostgum)
	- Put Windows console stdout and stderr in binary mode. Ignore the
initial callout for stdout and stderr as the procedure stream acquires a
buffer. (dwmainc.c [1.2], imain.c [1.9]: 2001/03/31 10:08:43 ghostgum)
	- Corrects memory allocation of command line arguments in the
programs which load the Ghostscript interpreter DLL / shared object.
(dpmain.c [1.2], dwmain.c [1.2], dwmainc.c [1.3]: 2001/03/31 10:09:47
ghostgum)
	- When gswin32 text window is closed, exit the interpreter on next
access to stdin and then destroy the text window. (dwmain.c [1.3],
dwtext.c [1.2], imain.c [1.10]: 2001/03/31 10:11:55 ghostgum)

Change the search order for the Ghostscript Windows DLL to try the
executable directory before the location specified in the GS_DLL environment
variable. (dwdll.c [1.2]: 2001/03/27 09:35:22 ghostgum)

Update mail address from bug-gs@aladdin.com to bug-gs@ghostscript.com.
(imainarg.c [1.10]: 2001/03/28 18:30:35 rayjj)

Increments version number after 6.62 release. (lib/gs_init.ps [1.32]:
2001/03/28 21:27:15 raph)

Applies PDF 1.4 rendering with all devices. Previously, only pnga device
contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
model is detected in the source file, it installs the pdf 1.4 rendering
device as a device filter. (zdfilter.c [1.2]: 2001/04/01 00:30:41 raph)

Change: The Ghostscript 'pwrite' function name conflicted with the standard
pwrite function defined in unistd.h on several systems. To avoid confusion
with the standard function change the name to stream_write. Also change
'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
#410772. Fix by Ray Johnston. (zfcmap.c [1.9]: 2001/04/01 00:35:26 raph)

</pre><h2><a name="6.63-Streams"></a>Streams</h2><pre>

Fixes problems:
	- Changes to introduce the min_left stream state variable set this
to 1 for procedure streams, which caused 1 character to be retained in the
stream buffer which was not passed to the client. This broke the DLL
interface where procedure callouts were used to get the string from the
callback. Procedure streams have no need for EOD lookahead (to force
closure) so the correct min_left value is 0. SourceForge bug #404331.
(stream.c [1.11], stream.h [1.8]: 2001/03/29 04:09:40 rayjj)

Change: The Ghostscript 'pwrite' function name conflicted with the standard
pwrite function defined in unistd.h on several systems. To avoid confusion
with the standard function change the name to stream_write. Also change
'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
#410772. Fix by Ray Johnston. (spprint.c [1.3], spprint.h [1.3],
spsdf.c [1.5]: 2001/04/01 00:35:26 raph)

</pre><h2><a name="6.63-Library"></a>Library</h2><pre>

Fixes problems:
	- The old code can mis-identify ShadingType 1 function as constant
due to testing it at insufficient set of points. Replacing it with slower
accurate code. SourceForge bug #228714. (gxshade.c [1.6], gxshade.h [1.4],
gxshade1.c [1.8]: 2001/03/25 10:18:50 igorm)
	- Fix for CIDFontType 0 : 1. Erroneous glyphs are drawn by cshow
(with -dNOCACHE); 2. Glyphs written in horizontal direction instead vertical
(with anti-aliasing); 3. Erroneous glyphs and awkward metrics (with
anti-aliasing and -dNOCACHE); Patches 1 &amp; 3 from Hideyuki Suzuki
(hideyuki), improved by igorm. SourceForge bug #222683. (gxchar.c [1.4]:
2001/03/27 09:56:39 igorm)
	- Adds imaging_dev field to text enumeration, so that bbox device
can intercept low level drawing operations caused by implementation of
forwarded high level text operations. (gdevbbox.c [1.4], gstext.c [1.6],
gxccache.c [1.4], gxtext.h [1.7]: 2001/04/01 00:33:36 raph)

Applies PDF 1.4 rendering with all devices. Previously, only pnga device
contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging
model is detected in the source file, it installs the pdf 1.4 rendering
device as a device filter. (gdevp14.c [1.1], gsdfilt.c [1.2],
gsdfilt.h [1.2]: 2001/04/01 00:30:41 raph)

Change: The Ghostscript 'pwrite' function name conflicted with the standard
pwrite function defined in unistd.h on several systems. To avoid confusion
with the standard function change the name to stream_write. Also change
'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug
#410772. Fix by Ray Johnston. (gdevpsf1.c [1.9], gdevpsfm.c [1.5],
gdevpsft.c [1.7], gsfunc4.c [1.4]: 2001/04/01 00:35:26 raph)

<hr>

<h1><a name="Version6.62"></a>Version 6.62 (2001-03-19)</h1>

<p>
This is the first beta release for the upcoming 7.0 release. This fileset
adds ICC profile support using Graeme Gill's icclib, and the new DLL
interface from Russell Lang.

<p>
All problems registered on SourceForge numbered 409245 or lower are
closed, except for the following: 201955, 202735, 206652, 209350,
213799, 215256, 219677, 219798, 220967, 221582, 222534, 222683,
222727, 223005, 223091, 223754, 223896, 223992, 224056, 224095,
224134, 224205, 224863, 226364, 226391, 226462, 226477, 226584,
226943, 227090, 227190, 227276, 227382, 227651, 227684, 227709,
228180, 228354, 228423, 228641, 228714, 228788, 228808, 229439,
230694, 230699, 231390, 232334, 232696, 233403, 404255, 404255,
404482, 404933, 405313, 406285, 406643, 406689, 406694, 406696,
406699, 406979, 407342, 409105, 409133, 409244, 409245. Note that,
since the 6.61 release, SourceForge has renumbered all bugs in the
1xxxxx range by adding 100000 (thus, they are now 2xxxxxx).


<h2><a name="6.62-Documentation"></a>Documentation</h2><pre>

Increments version number to 6.62 as part of 6.61 release process.
(doc/News.htm [1.77]: 2001/02/24 01:56:01 raph)

Adds Epson Stylus Color 300 support to uniprint, also some code cleanups.
Thanks to Glenn Ramsey and Gunther Hess for the patch.
(doc/Devices.htm [1.20]: 2001/03/03 00:45:01 raph)

Added documentation for Ghostscript interpreter API as used by Windows and
OS/2 DLL and Linux shared object. (doc/API.htm [1.1], doc/DLL.htm [1.8],
doc/Readme.htm [1.20]: 2001/03/13 07:12:06 ghostgum)

Documentation changes in preparation for 6.62 beta release.
(doc/API.htm [1.2], doc/Bug-form.htm [1.15], doc/Bug-info.htm [1.11],
doc/C-style.htm [1.12], doc/Commprod.htm [1.9], doc/Copying.htm [1.7],
doc/Current.htm [1.7], doc/DLL.htm [1.9], doc/Develop.htm [1.33],
doc/Devices.htm [1.21], doc/Drivers.htm [1.15], doc/Fonts.htm [1.13],
doc/Helpers.htm [1.10], doc/History1.htm [1.7], doc/History2.htm [1.7],
doc/History3.htm [1.7], doc/History4.htm [1.7], doc/History5.htm [1.9],
doc/History6.htm [1.19], doc/Htmstyle.htm [1.10], doc/Install.htm [1.15],
doc/Language.htm [1.26], doc/Lib.htm [1.7], doc/Maintain.htm [1.11],
doc/Make.htm [1.23], doc/New-user.htm [1.20], doc/News.htm [1.78],
doc/Projects.htm [1.24], doc/Ps-style.htm [1.7], doc/Ps2epsi.htm [1.8],
doc/Ps2pdf.htm [1.25], doc/Psfiles.htm [1.14], doc/README [1.6],
doc/Readme.htm [1.21], doc/Release.htm [1.29], doc/Source.htm [1.7],
doc/Tester.htm [1.7], doc/Unix-lpr.htm [1.7], doc/Use.htm [1.23],
doc/Xfonts.htm [1.7], doc/gs-vms.hlp [1.6], man/dvipdf.1 [1.4],
man/font2c.1 [1.4], man/gs.1 [1.4], man/gslp.1 [1.4], man/gsnd.1 [1.4],
man/pdf2dsc.1 [1.4], man/pdf2ps.1 [1.6], man/pdfopt.1 [1.4],
man/pf2afm.1 [1.4], man/pfbtopfa.1 [1.5], man/printafm.1 [1.4],
man/ps2ascii.1 [1.4], man/ps2epsi.1 [1.4], man/ps2pdf.1 [1.8],
man/ps2pdfwr.1 [1.5], man/ps2ps.1 [1.11], man/wftopfa.1 [1.4]: 2001/03/17
01:26:48 raph)

Updates Changes and History6 files from cvs commit logs, in preparation for
6.62 beta release. (doc/Changes.htm [1.22], doc/History6.htm [1.20]:
2001/03/17 01:30:16 raph)

There was a spelling error in Juan Manuel Acosta's name. His entry is also
moved to "major contributers" section. (doc/Helpers.htm [1.11]: 2001/03/19
16:46:05 alexcher)

Updates date for 6.62 release to 2001-03-19. (doc/API.htm [1.3],
doc/Bug-form.htm [1.16], doc/Bug-info.htm [1.12], doc/C-style.htm [1.13],
doc/Commprod.htm [1.10], doc/Copying.htm [1.8], doc/Current.htm [1.8],
doc/DLL.htm [1.10], doc/Develop.htm [1.34], doc/Devices.htm [1.22],
doc/Drivers.htm [1.16], doc/Fonts.htm [1.14], doc/Helpers.htm [1.12],
doc/History1.htm [1.8], doc/History2.htm [1.8], doc/History3.htm [1.8],
doc/History4.htm [1.8], doc/History5.htm [1.10], doc/History6.htm [1.21],
doc/Htmstyle.htm [1.11], doc/Install.htm [1.16], doc/Language.htm [1.27],
doc/Lib.htm [1.8], doc/Maintain.htm [1.12], doc/Make.htm [1.24],
doc/New-user.htm [1.21], doc/News.htm [1.79], doc/Projects.htm [1.25],
doc/Ps-style.htm [1.8], doc/Ps2epsi.htm [1.9], doc/Ps2pdf.htm [1.26],
doc/Psfiles.htm [1.15], doc/README [1.7], doc/Readme.htm [1.22],
doc/Release.htm [1.30], doc/Source.htm [1.8], doc/Tester.htm [1.8],
doc/Unix-lpr.htm [1.8], doc/Use.htm [1.24], doc/Xfonts.htm [1.8],
doc/gs-vms.hlp [1.7], man/dvipdf.1 [1.5], man/font2c.1 [1.5],
man/gs.1 [1.5], man/gslp.1 [1.5], man/gsnd.1 [1.5], man/pdf2dsc.1 [1.5],
man/pdf2ps.1 [1.7], man/pdfopt.1 [1.5], man/pf2afm.1 [1.5],
man/pfbtopfa.1 [1.6], man/printafm.1 [1.5], man/ps2ascii.1 [1.5],
man/ps2epsi.1 [1.5], man/ps2pdf.1 [1.9], man/ps2pdfwr.1 [1.6],
man/ps2ps.1 [1.12], man/wftopfa.1 [1.5]: 2001/03/19 17:26:17 raph)

Inital version of this file that will be used to capture notes about minor
bugs or compatibility that are identified when action will not be undertaken
immediately. (doc/Issues.htm [1.1]: 2001/03/19 19:27:04 rayjj)

</pre><h2><a name="6.62-Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- Minor changes to fix compilation on VMS, thanks to Jacob
=JoukJansen for the patch. (devs.mak [1.42]: 2001/03/01 22:16:02 raph)
	- Corrects whitespace for new entries in devs.mak for VMS build.
Thanks to Jouk Jansen. (devs.mak [1.44]: 2001/03/13 20:01:35 raph)
	- Fixes SourceForge bug #219677. Adds debug and debugclean targets
to MSVC++ makefile that build in the debugobj and debugbin directories.
Fixes BEGINFILES and BEGINFILES2 so that 'make clean' removes all files.
(msvc32.mak [1.10], winlib.mak [1.7]: 2001/03/16 22:53:18 ghostgum)
	- /None and /All separations are now supported. SourceForge bug
#228354. (lib.mak [1.45]: 2001/03/18 19:15:50 igorm)
	- Adds lib directory to MS-Windows distribution archive. Change
copyright message in MS-Windows setup program to artofcode LLC. Thanks to
Russell Lang for the patch. (winint.mak [1.7]: 2001/03/19 17:12:45 raph)

Increments version number to 6.62 as part of 6.61 release process.
(version.mak [1.27]: 2001/02/24 01:56:01 raph)

Provide alternate %stdin/out/err implementation using procedure based
streams and callouts. Previous stdio implementation with
STDIO_IMPLEMENTATION= New callout stdio implementation with
STDIO_IMPLEMENTATION=c Bug fix to zflush and zpeekstring. New stdio stream
code is in ziodevsc.c which will be in next commit. (bcwin32.mak [1.5],
dvx-gcc.mak [1.6], gs.mak [1.3], int.mak [1.43], msvc32.mak [1.7],
msvclib.mak [1.7], openvms.mak [1.7], os2.mak [1.10], ugcclib.mak [1.7],
unix-gcc.mak [1.10], unixansi.mak [1.8], unixtrad.mak [1.8], watc.mak [1.7],
watclib.mak [1.7], watcw32.mak [1.6]: 2001/03/12 04:05:19 ghostgum)

Adds device filter pipeline, which will be used by PDF 1.4 and other
enhanced imaging operations. (int.mak [1.44], lib.mak [1.43]: 2001/03/13
00:41:10 raph)

Implement new Ghostscript interpreter API for DLL or shared object.
Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
API. For unix, build using "make so". Added loader programs for Ghostscript
interpreter library for Linux (dxmain.c), Windows (dw*.c) and OS/2
(dpmain.c). Add new "display" device for use with the new API. Linux
dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
the "x11" device. (devs.mak [1.43], gsdll2.def [1.2], gsdll32.def [1.2],
int.mak [1.45], msvc32.mak [1.8], os2.mak [1.11], unix-dll.mak [1.1],
unix-gcc.mak [1.11], winint.mak [1.6], winlib.mak [1.6]: 2001/03/13 07:09:28
ghostgum)

When building the Linux shared object, separate directories soobj and sobin
are used to prevent 'make' from mixing the object files and building a
corrupt executable. Added 'API.htm' to the installed documentation files.
(unix-dll.mak [1.2], unix-gcc.mak [1.12], unixinst.mak [1.18]: 2001/03/15
09:11:28 ghostgum)

Change AFPL Ghostscript path on Windows and OS/2 platforms from c:/aladdin
to c:/gs. (bcwin32.mak [1.6], msvc32.mak [1.9], msvclib.mak [1.8],
watc.mak [1.8], watclib.mak [1.8], watcw32.mak [1.7]: 2001/03/16 22:19:16
ghostgum)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (bcwin32.mak [1.7], devs.mak [1.45], dvx-gcc.mak [1.7], gs.mak [1.4],
icclib.mak [1.1], int.mak [1.46], lib.mak [1.44], msvc32.mak [1.11],
msvclib.mak [1.9], openvms.mak [1.8], os2.mak [1.12], ugcclib.mak [1.8],
unix-gcc.mak [1.13], unixansi.mak [1.9], unixtrad.mak [1.9],
version.mak [1.28], watc.mak [1.9], watclib.mak [1.9], watcw32.mak [1.8],
wctail.mak [1.3], winlib.mak [1.8]: 2001/03/17 01:15:42 raph)

Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
makefile changes to match. Adds missing COPYRIGHT and other documentation to
icclib. Thanks to L. Peter Deutsch for pointing out the need.
(bcwin32.mak [1.8], dvx-gcc.mak [1.8], msvc32.mak [1.12],
msvclib.mak [1.10], openvms.mak [1.9], os2.mak [1.13], ugcclib.mak [1.9],
unix-gcc.mak [1.14], unixansi.mak [1.10], unixtrad.mak [1.10],
watc.mak [1.10], watclib.mak [1.10], watcw32.mak [1.9]: 2001/03/19 17:11:15
raph)

Updates date for 6.62 release to 2001-03-19. (version.mak [1.29]: 2001/03/19
17:26:18 raph)

</pre><h2><a name="6.62-Utilities"></a>Utilities</h2><pre>

Replace many references to exit() with returns. (gp_dvx.c [1.3],
gp_os2.c [1.7], gp_unix.c [1.4]: 2001/03/12 03:50:02 ghostgum)

Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code.
Remove references to stdout/err, replacing with eprintf(). Remove global
variables. Disable mswindll and os2dll devices if a callback function is not
provided. (gp_mswin.c [1.4], gp_os2.c [1.8]: 2001/03/12 03:56:13 ghostgum)

stdio implementation using callouts. Missing file from last commit.
(ziodevsc.c [1.1]: 2001/03/12 04:11:28 ghostgum)

Implement new Ghostscript interpreter API for DLL or shared object.
Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
API. For unix, build using "make so". Added loader programs for Ghostscript
interpreter library for Linux (dxmain.c), Windows (dw*.c) and OS/2
(dpmain.c). Add new "display" device for use with the new API. Linux
dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
the "x11" device. (dxmain.c [1.1], gp_msdll.c [1.1], gp_mswin.c [1.5],
gp_os2.c [1.9], gsdll.c [1.4]: 2001/03/13 07:09:28 ghostgum)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (icc.c [1.1]: 2001/03/17 01:15:42 raph)

Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
makefile changes to match. Adds missing COPYRIGHT and other documentation to
icclib. Thanks to L. Peter Deutsch for pointing out the need. (icc.c [1.2]:
2001/03/19 17:11:15 raph)

</pre><h2><a name="6.62-Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- to achieve page independence, every page must in the general case
set page parameters. To preserve duplexing the page cannot set page
parameters. New code checks the current page size and sets it only if it is
necessary. Bug #404376 reported by bannis at users.sourceforge.net
(gdevpsu.c [1.3]: 2001/03/03 03:27:03 alexcher)

Adds Epson Stylus Color 300 support to uniprint, also some code cleanups.
Thanks to Glenn Ramsey and Gunther Hess for the patch. (gdevupd.c [1.4],
lib/stc300.upp [1.1], lib/stc300bl.upp [1.1], lib/stc300bm.upp [1.1]:
2001/03/03 00:45:01 raph)

Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code.
Remove references to stdout/err, replacing with eprintf(). Remove global
variables. Disable mswindll and os2dll devices if a callback function is not
provided. (gdevmswn.c [1.3], gdevpm.c [1.3], gdevwdib.c [1.3],
gdevwpr2.c [1.6], gdevwprn.c [1.3]: 2001/03/12 03:56:13 ghostgum)

Redirect all user messages from stdout and stderr to outwrite() and
errwrite(). This is needed to allow stdout/err to be redirected to the
caller for DLL / shared object builds. (gdev4693.c [1.2], gdevcdj.c [1.5],
gdevhl7x.c [1.4], gdevifno.c [1.2], gdevimgn.c [1.3], gdevos2p.c [1.4],
gdevsppr.c [1.3], gdevsunr.c [1.3], gdevupd.c [1.5], gdevwddb.c [1.3],
gdevwpr2.c [1.7]: 2001/03/13 06:51:39 ghostgum)

Implement new Ghostscript interpreter API for DLL or shared object.
Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
API. For unix, build using "make so". Added loader programs for Ghostscript
interpreter library for Linux (dxmain.c), Windows (dw*.c) and OS/2
(dpmain.c). Add new "display" device for use with the new API. Linux
dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
the "x11" device. (gdevdsp.c [1.1], gdevdsp.h [1.1], gdevdsp2.h [1.1],
gdevmswn.c [1.4], gdevpm.c [1.4]: 2001/03/13 07:09:28 ghostgum)

Adds typed image rendering to pnga (prototype PDF 1.4) device.
(gdevpnga.c [1.3]: 2001/03/17 00:16:53 raph)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (gdevpx.c [1.6]: 2001/03/17 01:15:42 raph)

</pre><h2><a name="6.62-PDF_writer"></a>PDF writer</h2><pre>

Fixes problems:
	- properly include unistd_.h in files that call unlink()
(gdevpdf.c [1.29]: 2001/03/16 22:12:34 giles)

Redirect all user messages from stdout and stderr to outwrite() and
errwrite(). This is needed to allow stdout/err to be redirected to the
caller for DLL / shared object builds. (gdevpdfm.c [1.9]: 2001/03/13
06:51:39 ghostgum)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (gdevpdfc.c [1.14]: 2001/03/17 01:15:42 raph)

</pre><h2><a name="6.62-PDF_Interpreter"></a>PDF Interpreter</h2><pre>

Fixes problems:
	- When the stream is located in an external file (i.e. the stream
dictionary contains an /F entry) GS fails with "typecheck in .knownget"
because of a minor bug in stack handling in pdf_base.ps. Bug #229425, the
fix from Andreas Bolsch &lt;meromorphic at users.sourceforge.net&gt;
(lib/pdf_base.ps [1.13]: 2001/03/04 16:59:19 alexcher)
	- GS can override image interpolation using INTERPOLATE or
NOINTERPOLATE flags. These flags had no effect on PDF because the PDF
interpreter is bound earlier than image operator is redefined. New version
takes image and imagemask values from systemdict at run time.
(lib/pdf_draw.ps [1.27]: 2001/03/11 05:15:26 alexcher)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (lib/pdf_draw.ps [1.28], lib/pdf_ops.ps [1.16]: 2001/03/17 01:15:41
raph)

</pre><h2><a name="6.62-Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- Allocate filter in local VM when currentglobal is false. Prevents
a problem with some QuarkXpress ProcSets that turn off vmreclaim and expect
save/restore to free memory which only works on local VM. Fix for problem
reported by Artifex customer #150, file "japan.ps". (zfilter.c [1.5]:
2001/02/28 00:39:26 rayjj)
	- Speed-up JPEG decompression by increasing file buffer to 2K. This
avoids installation of an intermediate buffering filter that resulted in a
byte-by-byte filling of the buffer to the JPEG code. When the buffer was not
full enough a recoverable error would result in a round trip for the next
byte. Fixes SourcForge bug #405342 for Artifex customer #350.
(zfile.c [1.7]: 2001/03/02 03:06:50 alexcher)
	- Removes Category dictionary from dictionary stack during the
execution of the /Font resourceforall procedure, needed for proper access
from the procedure to underlying dictionary. Fixes SourceForge bug #224973.
(lib/gs_cidcm.ps [1.2]: 2001/03/03 15:09:12 igorm)
	- GS didn't accept packed array as data source in image with
multiple data sources. From internal bug report. (zimage2.c [1.4]:
2001/03/12 22:53:22 alexcher)
	- ztype9mapcid now allocates string in global memory space to match
allocation of contents. Thanks to Masatake YAMATO for the patch.
(zfcid0.c [1.6]: 2001/03/13 19:57:06 raph)
	- Define to DefaultGray, DefaultRGB, DefaultCMYK color spaces to
allow UseCIEColor to work. SourceForge bugs #216461, #219676.
(lib/gs_ll3.ps [1.8]: 2001/03/14 12:00:37 igorm)
	- /None and /All separations are now supported. SourceForge bug
#228354. (zcssepr.c [1.6]: 2001/03/18 19:17:50 igorm)

Increments version number to 6.62 as part of 6.61 release process.
(lib/gs_init.ps [1.30]: 2001/02/24 01:56:01 raph)

Replace many references to exit() with returns. (errors.h [1.3], gs.c [1.3],
igcref.c [1.3], imain.c [1.4], imainarg.c [1.7], imainarg.h [1.3],
zcontext.c [1.7]: 2001/03/12 03:50:02 ghostgum)

Provide alternate %stdin/out/err implementation using procedure based
streams and callouts. Previous stdio implementation with
STDIO_IMPLEMENTATION= New callout stdio implementation with
STDIO_IMPLEMENTATION=c Bug fix to zflush and zpeekstring. New stdio stream
code is in ziodevsc.c which will be in next commit. (errors.h [1.4],
files.h [1.3], imain.c [1.5], iminst.h [1.3], interp.c [1.7], zfile.c [1.8],
zfileio.c [1.10], zfproc.c [1.8], ziodev.c [1.4]: 2001/03/12 04:05:19
ghostgum)

This fix corrects a problem with VM usage in the DSC parser. Previously the
dictionary dsc_dict was allocated in global VM but the DSC parser would try
to insert items while in local VM mode. This fix forces the DSC parser into
global VM mode. (lib/gs_dscp.ps [1.4]: 2001/03/12 22:41:22 dancoby)

Adds device filter pipeline, which will be used by PDF 1.4 and other
enhanced imaging operations. (zdfilter.c [1.1]: 2001/03/13 00:41:10 raph)

Redirect all user messages from stdout and stderr to outwrite() and
errwrite(). This is needed to allow stdout/err to be redirected to the
caller for DLL / shared object builds. (gs.c [1.4], idebug.c [1.3],
igc.c [1.3], imain.c [1.6], imainarg.c [1.8]: 2001/03/13 06:51:39 ghostgum)

Implement new Ghostscript interpreter API for DLL or shared object.
Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
API. For unix, build using "make so". Added loader programs for Ghostscript
interpreter library for Linux (dxmain.c), Windows (dw*.c) and OS/2
(dpmain.c). Add new "display" device for use with the new API. Linux
dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
the "x11" device. (dpmain.c [1.1], dpmainc.c [1.3], dwdll.c [1.1],
dwdll.cpp [1.3], dwdll.h [1.3], dwimg.c [1.1], dwimg.cpp [1.4],
dwimg.h [1.3], dwmain.c [1.1], dwmain.cpp [1.3], dwmain.h [1.3],
dwmainc.c [1.1], dwmainc.cpp [1.4], dwnodll.c [1.1], dwnodll.cpp [1.3],
dwtext.c [1.1], dwtext.cpp [1.3], dwtext.h [1.3], files.h [1.4], gs.c [1.5],
iapi.c [1.1], iapi.h [1.1], iconf.c [1.3], idisp.c [1.1], idisp.h [1.1],
imain.c [1.7], imainarg.c [1.9], iminst.h [1.4], main.h [1.3]: 2001/03/13
07:09:28 ghostgum)

Interpolation overriding is modified to support - colorimage; old version
did nothing - ImageType 3 dictionaries; old version did nothing - local data
source in global mode; old version failed (lib/gs_init.ps [1.31]: 2001/03/13
22:50:03 alexcher)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (icie.h [1.3], lib/gs_icc.ps [1.1], zcie.c [1.5], zicc.c [1.1]:
2001/03/17 01:15:41 raph)

</pre><h2><a name="6.62-Streams"></a>Streams</h2><pre>

Fixes problems:
	- eexecDecode filter returned EOF immediately if the input stream
was shorter than 9 characters. New code may misidentify short streams but
old code always failed. (seexec.c [1.4]: 2001/02/23 03:00:13 alexcher)

Replace many references to exit() with returns. (stdpre.h [1.3]: 2001/03/12
03:50:02 ghostgum)

Redirect all user messages from stdout and stderr to outwrite() and
errwrite(). This is needed to allow stdout/err to be redirected to the
caller for DLL / shared object builds. (std.h [1.4]: 2001/03/13 06:51:39
ghostgum)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (stream.c [1.10]: 2001/03/17 01:15:42 raph)

Minor patch to header files so that unlink() prototype doesn't conflict when
const is disabled through #define. (stdio_.h [1.4]: 2001/03/17 01:18:34
raph)

</pre><h2><a name="6.62-Library"></a>Library</h2><pre>

Fixes problems:
	- Minor changes to fix compilation on VMS, thanks to Jacob
=JoukJansen for the patch. (gstrans.c [1.13]: 2001/03/01 22:16:02 raph)
	- gp_file_name_sizeof is increased to 260 bytes, == MAX_PATH on MS
Windows. The platform-specific fix is too difficult because some platforms
may have very long or unlimited file names. Bug #231514 submitted by
anonymous user. (gp.h [1.6]: 2001/03/03 04:38:19 alexcher)
	- When objects were resized or trimmed, the objects o_size was not
being updated if the rounded_size didn't change. This could lead to
alignment issues on some systems (causing a crash). Problem reported by
Artifex customer #460. (gsalloc.c [1.9]: 2001/03/12 00:04:28 rayjj)
	- Some device color components were missed while serializing
halftone to clist, causing segment fault during playback. Changes use proper
number of device color components to be written to clist and read from it.
SourceForge bug #211449. (gxclpath.c [1.9], gxclrast.c [1.9]: 2001/03/13
08:38:03 igorm)
	- kshow now restores currentfont if changed while running proc.
Fixes SourceForge bug #221715. (gxchar.c [1.3]: 2001/03/14 13:03:49 igorm)
	- properly include unistd_.h in files that call unlink()
(gsiodev.c [1.5], gxclfile.c [1.3]: 2001/03/16 22:12:34 giles)
	- /None and /All separations are now supported. SourceForge bug
#228354. (gscsepr.c [1.7]: 2001/03/18 19:17:50 igorm)

Replace many references to exit() with returns. (gsargs.c [1.3],
gsargs.h [1.4], gsexit.h [1.3], gxalloc.h [1.6]: 2001/03/12 03:50:02
ghostgum)

Adds device filter pipeline, which will be used by PDF 1.4 and other
enhanced imaging operations. (gsdfilt.c [1.1], gsdfilt.h [1.1],
gsstate.c [1.10], gzstate.h [1.5]: 2001/03/13 00:41:10 raph)

Redirect all user messages from stdout and stderr to outwrite() and
errwrite(). This is needed to allow stdout/err to be redirected to the
caller for DLL / shared object builds. (gp_unifs.c [1.4], gsargs.c [1.4],
gsinit.c [1.3], gsio.h [1.5], gslib.c [1.4], gsmisc.c [1.10],
gxclutil.c [1.4]: 2001/03/13 06:51:39 ghostgum)

Implement new Ghostscript interpreter API for DLL or shared object.
Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
API. For unix, build using "make so". Added loader programs for Ghostscript
interpreter library for Linux (dxmain.c), Windows (dw*.c) and OS/2
(dpmain.c). Add new "display" device for use with the new API. Linux
dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
the "x11" device. (gsexit.h [1.4]: 2001/03/13 07:09:29 ghostgum)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (gs_stdio.h [1.1], gscdef.c [1.12], gscie.c [1.4], gscie.h [1.3],
gsciemap.c [1.5], gscolor.c [1.5], gscolor1.c [1.4], gscscie.c [1.4],
gscspace.h [1.6], gscssub.c [1.3], gsicc.c [1.1], gsicc.h [1.1],
gxcie.h [1.3], gxshade.c [1.5], icc.h [1.1]: 2001/03/17 01:15:42 raph)

Minor patch to header files so that unlink() prototype doesn't conflict when
const is disabled through #define. (unistd_.h [1.2]: 2001/03/17 01:18:34
raph)

Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
makefile changes to match. Adds missing COPYRIGHT and other documentation to
icclib. Thanks to L. Peter Deutsch for pointing out the need. (icc.h [1.2]:
2001/03/19 17:11:15 raph)

</pre><h2><a name="6.62-Other"></a>Other</h2><pre>

Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code.
Remove references to stdout/err, replacing with eprintf(). Remove global
variables. Disable mswindll and os2dll devices if a callback function is not
provided. (gp_mswin.h [1.3]: 2001/03/12 03:56:13 ghostgum)

Implement new Ghostscript interpreter API for DLL or shared object.
Reimplement old DLL interface using new API. See iapi.h and iapi.c for new
API. For unix, build using "make so". Added loader programs for Ghostscript
interpreter library for Linux (dxmain.c), Windows (dw*.c) and OS/2
(dpmain.c). Add new "display" device for use with the new API. Linux
dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than
the "x11" device. (gp_mswin.h [1.4], gsdll.h [1.3], gsdllwin.h [1.3]:
2001/03/13 07:09:28 ghostgum)

Integrates ICC profile input support from Jan Stoeckenius. Also includes
slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme
Gill. (icc9809.h [1.1]: 2001/03/17 01:15:42 raph)

Moves patched icclib 1.23 files into the new icclib/ subdirectory, with
makefile changes to match. Adds missing COPYRIGHT and other documentation to
icclib. Thanks to L. Peter Deutsch for pointing out the need.
(icc9809.h [1.2], icclib/COPYRIGHT [1.1], icclib/NOTES [1.1],
icclib/README [1.1], icclib/icc.c [1.1], icclib/icc.h [1.1],
icclib/icc9809.h [1.1]: 2001/03/19 17:11:14 raph)

<hr>

<h1><a name="Version6.61"></a>Version 6.61 (2001-02-21)</h1>

<p>
The primary updates in this fileset are in the PDF 1.4 transparency and
blending code (available for testing with the pnga driver). The usual
bug fixes are also present.

<p>
All problems registered on SourceForge numbered 133403 or lower are
closed, except for the following: 101814, 101955, 102735, 106652,
109350, 111449, 113116, 113799, 114084, 115256, 116461, 119676,
119677, 119798, 120967, 121582, 121715, 122534, 122683, 122727,
123005, 123091, 123754, 123896, 123992, 124056, 124095, 124134,
124205, 124863, 124973, 126364, 126391, 126462, 126477, 126584,
126943, 127090, 127190, 127244, 127276, 127382, 127651, 127684,
127709, 127802, 128180, 128354, 128423, 128641, 128714, 128808,
129425, 129439, 130694, 130699, 131001, 131390, 131514, 132334,
132696, 133403.


<h2><a name="6.61-Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- Ps-style.htm was missing from the index/blurbs in Readme.htm Adds
a note about documentation to the "Adding and Removing Files" section, and
moves that section to Maintain.htm from Release.htm. Closes sourceforge bug
#126771 (doc/Maintain.htm [1.9], doc/Readme.htm [1.18],
doc/Release.htm [1.27]: 2001/02/09 01:59:35 giles)

Brings prototypes for fill_path, stroke_path, and fill_trapezoid in sync
with code. New description for fill_trapezoid, as the parameters changed
considerably. (doc/Drivers.htm [1.13]: 2001/01/04 19:08:25 raph)

Adds a link to Adobe's Technote #5407 regarding transparency.
(doc/Language.htm [1.24]: 2001/01/07 18:21:55 giles)

Updates png and zlib urls to the new canonical domain. Patch from Tobias
Burnus. (doc/Devices.htm [1.18], doc/Make.htm [1.20],
doc/New-user.htm [1.18]: 2001/01/07 18:36:35 giles)

Increments CVS version number to 6.61 as part of (very delayed) 6.60 release
process. (doc/News.htm [1.75]: 2001/02/03 01:23:03 raph)

Added DOPDFMARKS to allow pdfmark to be called for annotations, links and
cropboxes for PDF files on any device. Fixes SourceForge bug # 127062.
(doc/Use.htm [1.21]: 2001/02/09 23:38:12 ghostgum)

Added addition comments about how to build GS on am IBM RS6000 under AIX
version 4.3.3 using the IBM C compiler (xlc) version 5.
(doc/Make.htm [1.21]: 2001/02/20 06:09:31 dancoby)

Updates dates and version numbers in preparation for 6.61 release.
(doc/Bug-form.htm [1.14], doc/Bug-info.htm [1.10], doc/C-style.htm [1.11],
doc/Commprod.htm [1.8], doc/Copying.htm [1.6], doc/Current.htm [1.6],
doc/DLL.htm [1.7], doc/Develop.htm [1.32], doc/Devices.htm [1.19],
doc/Drivers.htm [1.14], doc/Fonts.htm [1.12], doc/Helpers.htm [1.9],
doc/History1.htm [1.6], doc/History2.htm [1.6], doc/History3.htm [1.6],
doc/History4.htm [1.6], doc/History5.htm [1.8], doc/History6.htm [1.17],
doc/Htmstyle.htm [1.9], doc/Install.htm [1.14], doc/Language.htm [1.25],
doc/Lib.htm [1.6], doc/Maintain.htm [1.10], doc/Make.htm [1.22],
doc/New-user.htm [1.19], doc/News.htm [1.76], doc/PUBLIC [1.4],
doc/Projects.htm [1.23], doc/Ps-style.htm [1.6], doc/Ps2epsi.htm [1.7],
doc/Ps2pdf.htm [1.24], doc/Psfiles.htm [1.13], doc/README [1.5],
doc/Readme.htm [1.19], doc/Release.htm [1.28], doc/Source.htm [1.6],
doc/Tester.htm [1.6], doc/Unix-lpr.htm [1.6], doc/Use.htm [1.22],
doc/Xfonts.htm [1.6], doc/gs-vms.hlp [1.5], man/dvipdf.1 [1.3],
man/font2c.1 [1.3], man/gs.1 [1.3], man/gslp.1 [1.3], man/gsnd.1 [1.3],
man/pdf2dsc.1 [1.3], man/pdf2ps.1 [1.5], man/pdfopt.1 [1.3],
man/pf2afm.1 [1.3], man/pfbtopfa.1 [1.4], man/printafm.1 [1.3],
man/ps2ascii.1 [1.3], man/ps2epsi.1 [1.3], man/ps2pdf.1 [1.7],
man/ps2pdfwr.1 [1.4], man/ps2ps.1 [1.10], man/wftopfa.1 [1.3]: 2001/02/22
07:30:37 raph)

</pre><h2><a name="6.61-Procedures"></a>Procedures</h2><pre>

Updates png and zlib urls to the new canonical domain. Patch from Tobias
Burnus. (libpng.mak [1.4], zlib.mak [1.3]: 2001/01/07 18:36:35 giles)

First cut of the PDF 1.4 transparency and blending operations.
(contrib.mak [1.21], lib.mak [1.42]: 2001/01/14 00:25:27 raph)

Increments CVS version number to 6.61 as part of (very delayed) 6.60 release
process. (version.mak [1.25]: 2001/02/03 01:23:03 raph)

Continuing development of PDF 1.4 transparency and blending. This round of
commits implements groups, including non-isolated and knockout variants.
Also, moves the build rule for the pnga device from contrib to devs.
(contrib.mak [1.22], devs.mak [1.41]: 2001/02/22 07:27:10 raph)

Updates dates and version numbers in preparation for 6.61 release.
(version.mak [1.26]: 2001/02/22 07:30:39 raph)

</pre><h2><a name="6.61-Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- Temporary _.at file was not deleted. (lib/pdf2ps.bat [1.4]:
2001/02/03 16:12:29 alexcher)
	- Added -dSAFER (lib/pdf2ps.cmd [1.2]: 2001/02/03 18:31:12 alexcher)
	- Defines prototypes for fputs only for (broken) Sun platforms, to
avoid type mismatches when compiling with -Dconst=. Fixes SourceForge bug
133358. (echogs.c [1.3]: 2001/02/22 03:59:39 raph)

branches: 1.1.2; file vdtrace.c was initially added on branch HINTER.
(vdtrace.c [1.1]: 2001/01/12 06:19:36 igorm)

branches: 1.1.2; file _type1.c was initially added on branch HINTER.
(_type1.c [1.1]: 2001/02/02 20:27:09 igorm)

Converted to SAFER mode. (lib/pf2afm [1.2], lib/pf2afm.bat [1.2],
lib/pf2afm.cmd [1.2], lib/pf2afm.ps [1.3]: 2001/02/03 21:31:40 alexcher)

</pre><h2><a name="6.61-Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- Changes tiff12nc to output correct number of bytes for odd widths.
(gdevtfnx.c [1.5]: 2001/02/03 18:50:01 raph)
	- Added down cast from gx_device_printer to gx_device_fax The fix is
suggested by the user. (gdevdfax.c [1.4]: 2001/02/12 21:02:51 alexcher)
	- pswrite ProcSet is reordered to eliminate forward references and
please a simplistic parser used by one of GS customers. (gdevps.c [1.15]:
2001/02/21 05:52:07 alexcher)

First cut of the PDF 1.4 transparency and blending operations.
(gdevpnga.c [1.1]: 2001/01/14 00:25:27 raph)

Continuing development of PDF 1.4 transparency and blending. This round of
commits implements groups, including non-isolated and knockout variants.
Also, moves the build rule for the pnga device from contrib to devs.
(gdevpnga.c [1.2]: 2001/02/22 07:27:10 raph)

</pre><h2><a name="6.61-PDF_writer"></a>PDF writer</h2><pre>

Fixes problems:
	- in pdfwrite mode kshow called its procedure in infinite loop
bacause the character indes was not updated. Unexpected number of calls to
the procedure often caused various errors such as /stackunderfloe.
(gdevpdfs.c [1.2]: 2001/02/06 21:42:38 alexcher)
	- imagemask used the color of previous object if the object had
smaller clipping path than imagemask. Deferred grestore and setcolor were
transposed. (gdevpdfi.c [1.21]: 2001/02/07 03:49:27 alexcher)

</pre><h2><a name="6.61-PDF_Interpreter"></a>PDF Interpreter</h2><pre>

Fixes problems:
	- skip all bytes after the end of the stream in the inline image
until EOL or EI is found. Some buggy PDF files require this. Fix: In PDF 1.3
/Matrix key in XObject is optional. Add unitary matrix to the form
dictionary if XObject has none. (lib/pdf_draw.ps [1.25]: 2001/02/02 22:08:33
alexcher)

Added DOPDFMARKS to allow pdfmark to be called for annotations, links and
cropboxes for PDF files on any device. Fixes SourceForge bug # 127062.
(lib/pdf_main.ps [1.27]: 2001/02/09 23:38:12 ghostgum)

Continuing development of PDF 1.4 transparency and blending. This round of
commits implements groups, including non-isolated and knockout variants.
Also, moves the build rule for the pnga device from contrib to devs.
(lib/pdf_draw.ps [1.26]: 2001/02/22 07:27:10 raph)

</pre><h2><a name="6.61-Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- cvs operator did't report rangecheck when source operand is a name
or string and it's longer than the destination string. Bug # 130975
(iutil.c [1.3]: 2001/02/05 20:43:40 alexcher)
	- memmove() was used without portability header file memory_.h
(ztrans.c [1.13]: 2001/02/13 19:45:38 alexcher)
	- New TransformPQR implements a relative colorimetric intent by
scaling the XYZ values relative to the white and black points. Bug #129771
(lib/gs_lev2.ps [1.7]: 2001/02/21 04:23:44 alexcher)

branches: 1.1.2; file dwtrace.h was initially added on branch HINTER.
(dwtrace.h [1.1]: 2001/01/12 06:18:35 igorm)

branches: 1.1.2; file dwtrace.cpp was initially added on branch HINTER.
(dwtrace.cpp [1.1]: 2001/01/12 06:22:06 igorm)

Increments CVS version number to 6.61 as part of (very delayed) 6.60 release
process. (lib/gs_init.ps [1.29]: 2001/02/03 01:23:03 raph)

</pre><h2><a name="6.61-Streams"></a>Streams</h2><pre>

Minor patches for clean VMS compile. Thanks to Jacob (=Jouk) Jansen.
(stdio_.h [1.3]: 2001/02/02 07:52:26 raph)

</pre><h2><a name="6.61-Library"></a>Library</h2><pre>

Fixes problems:
	- egcc - 2.91.66 generates incorrect code for dda_step_add(dxx4,
dxx4); Using the intermediate variable now to wark around the problem. This
bug corrupted memory block headers and caused random crashes.
(gxifast.c [1.3]: 2001/01/25 21:36:17 alexcher)

Changes gx_image_cached_char so that it now images to the device in the text
enumeration, rather than the current device. This change gives more
flexibility for implementations of begin_text to interpose a device of their
own for actual imaging. (gxccache.c [1.3]: 2001/01/04 19:39:24 raph)

Updates documentation in gxdevcli.h on creating device instances.
(gxdevcli.h [1.4]: 2001/01/14 00:24:30 raph)

First cut of the PDF 1.4 transparency and blending operations.
(gxblend.c [1.1], gxblend.h [1.1]: 2001/01/14 00:25:27 raph)

Minor patches for clean VMS compile. Thanks to Jacob (=Jouk) Jansen.
(gsnogc.c [1.6], gxblend.c [1.2]: 2001/02/02 07:52:25 raph)

Continuing development of PDF 1.4 transparency and blending. This round of
commits implements groups, including non-isolated and knockout variants.
Also, moves the build rule for the pnga device from contrib to devs.
(gstrans.c [1.12], gxdevcli.h [1.5]: 2001/02/22 07:27:10 raph)

</pre><h2><a name="6.61-Other"></a>Other</h2><pre>

branches: 1.1.2; file _type1.h was initially added on branch HINTER.
(_type1.h [1.1]: 2001/01/12 06:22:23 igorm)

branches: 1.1.2; file vdtrace.h was initially added on branch HINTER.
(vdtrace.h [1.1]: 2001/02/02 20:27:09 igorm)

<hr>

<h1><a name="Version6.60"></a>Version 6.60 (2000-12-31)</h1>

<p>
This long-overdue fileset includes major new developer documentation, major
improvements in the PDF writer (for embedded fonts and for DSC comments),
and lots of bug fixes.  Unfortunately, for unknown reasons, the release
"smoke test" loops forever on the file data/ps/screen.ps -- but only when
compiled in 'production' mode, not in 'debug' mode.  We suspect a gcc bug,
but don't have the time to track it down before the end of the millennium.

<p>
All problems registered on SourceForge numbered 127190 or lower are closed,
except for the following: 101814, 101955, 102735, 105289, 106652, 109350,
111449, 113116, 113799, 114084, 115256, 116461, 117260, 119676, 119677,
119798, 120967, 121582, 121715, 122426, 122532, 122534, 122683, 122727,
123005, 123091, 123702, 123754, 123867, 123896, 123992, 124042, 124056,
124095, 124134, 124205, 124863, 124973, 126364, 126391, 126462, 126477,
126506, 126584, 126771, 126943, 127062, 127090, 127190.

<h3><a name="6.60_Incompatible_changes"></a>Incompatible changes</h3>

<pre>
(Interpreter)
	- With WMode = 1, CID-keyed fonts with no Metrics2 now use default
metrics computed from FontBBox rather than the horizontal metrics.
(PDF interpreter)
	- The interpreter now skips to the next EOL after reading the data
following the ID operator.
	- The incorrectly named ViewerOrientation DSC comment is now
corrected to ViewingOrientation.
(Streams)
	- All decoding filters that recognize an EOD in the source data
must now have an init procedure that sets state->min_left = 1.
(Library)
	- The glyph_data, subr_data, and seac_data procedures in a Type 1
font (gs_type1_data_procs), and the glyph_data procedure passed to
psf_{check,get}_outline_glyphs, must now return 1 iff the outline string was
newly allocated and should be freed by the caller, like the get_outline
procedure of Type 42 fonts (gs_type42_data).
	- The ip_state structure is renamed ip_state_t, and has a new
member, free_char_string.
	- The incorrectly named ViewerOrientation DSC comment is now
corrected to ViewingOrientation, and the viewer_orientation members of
the DSC parsing structure are corrected to viewing_orientation.



<h2><a name="6.60-Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- An isolated ampersand needed to be converted to the HTML form.
(doc/Bug-form.htm [1.12]: 2000/11/04 17:53:57 lpd)
	- cvs2hist was generating invalid anchor names and not escaping
special charaters. also enable '-r' commandline option, and pass '-b' if
it's not specified for default branch logs only. Changes.htm now passes the
validator. Minor url cleanup in Release.htm (doc/Changes.htm [1.19],
doc/Release.htm [1.23]: 2000/11/10 01:52:35 giles)
	- Removes obsolete documentation reference to -DUsePrinterImages and
clarifies the entry for the replacing -DPrinted. Fixes sourceforge bug #
121907. (doc/Use.htm [1.16]: 2000/11/20 20:34:23 giles)
	- Type 1 CharStrings loaded from disk for type 0 CIDFonts were never
freed, except by garbage collection (which doesn't reclaim chunks with only
a small amount of surviving data). In practice, this probably only affects
the PDF writer. (doc/News.htm [1.71]: 2000/11/23 23:34:23 lpd)
	- The pswrite device couldn't write to pipes. The fix involved
expanding the API for opening device OutputFiles so that the individual
driver could specify whether it required, requested, or did not want a
positionable file. Fixes SourceForge bug # 122223. (doc/Use.htm [1.17]:
2000/11/29 02:25:13 lpd)
	- The default ps2pdf "distiller parameters" weren't documented
correctly; the parameter values for the other PDFSETTINGS (screen, printer,
prepress) weren't documented at all; the xxxImageDownsampleThreshold
parameters were incorrectly documented as xxxDownsampleThreshold.
(doc/Ps2pdf.htm [1.22]: 2000/12/19 17:55:55 lpd)
	- The documentation of the -dSAFER command line switch was
inaccurate. (doc/Use.htm [1.18]: 2000/12/23 01:33:06 lpd)
	- documentation for gs_cidcm.ps and gs_dscp.ps was missing.
(doc/Psfiles.htm [1.11]: 2000/12/29 02:17:12 lpd)

Adds developer documentation on the color mapping pipeline.
(doc/Develop.htm [1.16]: 2000/11/03 04:53:00 lpd)

switch to Tobias Burnus' stylesheet for the B-D html documentation, along
with some minor cleanups (doc/Bug-form.htm [1.10], doc/Bug-info.htm [1.8],
doc/C-style.htm [1.6], doc/Commprod.htm [1.4], doc/Copying.htm [1.4],
doc/Current.htm [1.4], doc/DLL.htm [1.4], doc/Develop.htm [1.17],
doc/Devices.htm [1.14], doc/Drivers.htm [1.10], doc/gs.css [1.1]: 2000/11/03
06:42:42 giles)

update remaining file links in Develop.htm to &lt;dl&gt; format, plus
additional cleanup (doc/Commprod.htm [1.5], doc/DLL.htm [1.5],
doc/Develop.htm [1.18], doc/Devices.htm [1.15], doc/Drivers.htm [1.11]:
2000/11/03 20:15:55 giles)

Lists all the monochrome TIFF drivers individually, rather than as a class.
(doc/Devices.htm [1.16]: 2000/11/03 23:33:18 lpd)

Switches the rest of the human-maintained html documentation to the new
stylesheet. We now pass validator.w3.org for HTML 4.01 with the exception of
an error I couldn't figure out in Bug-form.htm. (doc/Bug-form.htm [1.11],
doc/Fonts.htm [1.9], doc/Helpers.htm [1.7], doc/Hershey.htm [1.3],
doc/Htmstyle.htm [1.7], doc/Humor.htm [1.2], doc/Install.htm [1.10],
doc/Language.htm [1.21], doc/Lib.htm [1.4], doc/Maintain.htm [1.7],
doc/Make.htm [1.17], doc/New-user.htm [1.15], doc/Projects.htm [1.20],
doc/Ps-style.htm [1.4], doc/Ps2epsi.htm [1.5], doc/Ps2pdf.htm [1.19],
doc/Psfiles.htm [1.10], doc/Public.htm [1.4], doc/Readme.htm [1.15],
doc/Release.htm [1.22], doc/Source.htm [1.4], doc/Tester.htm [1.4],
doc/Unix-lpr.htm [1.4], doc/Use.htm [1.15], doc/Xfonts.htm [1.4],
doc/index.html [1.2]: 2000/11/04 05:00:00 giles)

updated News.htm to use gs.css (doc/News.htm [1.70]: 2000/11/04 21:59:35
giles)

Adds documentation on Ghostscript's object-oriented coding conventions, and
more documentation on error generation. (doc/C-style.htm [1.7],
doc/Develop.htm [1.19]: 2000/11/07 07:34:57 lpd)

Expands the description of the color mapping process.
(doc/Develop.htm [1.20]: 2000/11/09 05:41:46 lpd)

updates history files 1-4 (historical) to valid html4 and the new stylesheet
(doc/History1.htm [1.4], doc/History2.htm [1.4], doc/History3.htm [1.4],
doc/History4.htm [1.4]: 2000/11/28 22:55:34 giles)

updates the version 5.x history file to the conforming html4
(doc/History5.htm [1.6]: 2000/12/01 00:47:08 giles)

Adds documentation on creating a release directory on the Wisconsin server,
including checking the version numbers of the third-party libraries.
(doc/Release.htm [1.24]: 2000/12/05 21:16:25 lpd)

Updates documentation to reflect recent improvements in text and DSC comment
handling. (doc/Ps2pdf.htm [1.20]: 2000/12/09 08:01:56 lpd)

Documents the change from ViewerOrientation to ViewingOrientation in the DSC
parser. (doc/News.htm [1.72]: 2000/12/09 19:53:48 lpd)

Makes the PDF writer extract orientation and bounding box information from
DSC comments, if present. The orientation is used to set Rotate if
AutoRotatePages is not selected; the bounding box is not yet used for
anything. (doc/Ps2pdf.htm [1.21]: 2000/12/09 19:54:55 lpd)

adds a brief blurb for Develop.htm (doc/Readme.htm [1.16]: 2000/12/11
19:39:36 giles)

In the developer documentation, breaks down several long file lists into
shorter, more focused ones. (doc/Develop.htm [1.21]: 2000/12/12 19:52:49
lpd)

Adds some additional documentation on halftones. (doc/Develop.htm [1.22]:
2000/12/15 01:46:57 lpd)

Adds additional documentation on makefile conventions, and improves a few
other areas. (doc/Develop.htm [1.23]: 2000/12/18 06:45:23 lpd)

Adds more documentation on makefiles, .dev files, and related topics.
(doc/Develop.htm [1.24]: 2000/12/20 05:09:31 lpd)

Adds more developer documentation on the PostScript interpreter; divides up
some lists of files to provide more helpful detail. (doc/Develop.htm [1.25]:
2000/12/20 20:15:41 lpd)

Documents the preferred line breaking and indentation format for assignment
statements, including chain assignments. (doc/C-style.htm [1.8]: 2000/12/22
16:58:55 lpd)

Makes some minor corrections and improvements to the developer
documentation. (doc/Develop.htm [1.26]: 2000/12/28 05:57:18 lpd)

Adds substantial new material on coding conventions for structures, classes,
and subclasses. (doc/C-style.htm [1.9]: 2000/12/28 07:12:38 lpd)

Documents about 15 additional non-standard operators (the ones most likely
to be used in future code). (doc/Develop.htm [1.27],
doc/Language.htm [1.22]: 2000/12/28 18:29:49 lpd)

Documents the need to run hrefcov as part of the release process; also fixes
some minor inaccuracies. (doc/Release.htm [1.25]: 2000/12/29 02:12:08 lpd)

Adds more files to the developer "roadmap" documentation.
(doc/Develop.htm [1.28]: 2000/12/29 02:18:47 lpd)

Adds the Fontmaps and the contributed drivers to the developer documentation
"roadmap", which is now complete. (doc/Develop.htm [1.29]: 2000/12/29
02:33:40 lpd)

Adds some developer documentation on design principles.
(doc/Develop.htm [1.30]: 2000/12/30 22:07:37 lpd)

Removes or updates no longer appropriate references to Aladdin Enterprises.
(doc/Commprod.htm [1.6], doc/Fonts.htm [1.10], doc/Install.htm [1.11],
doc/Make.htm [1.18], doc/New-user.htm [1.16], doc/Projects.htm [1.21],
doc/Use.htm [1.19]: 2000/12/31 21:43:59 lpd)

Updates documentation for the Windows uninstall program to reflect the name
change from Aladdin Ghostscript to AFPL Ghostscript.
(doc/Install.htm [1.12]: 2000/12/31 22:26:08 lpd)

Updates repository for 6.60 release. (doc/Bug-form.htm [1.13],
doc/Bug-info.htm [1.9], doc/C-style.htm [1.10], doc/Commprod.htm [1.7],
doc/Copying.htm [1.5], doc/Current.htm [1.5], doc/DLL.htm [1.6],
doc/Develop.htm [1.31], doc/Devices.htm [1.17], doc/Drivers.htm [1.12],
doc/Fonts.htm [1.11], doc/Helpers.htm [1.8], doc/History1.htm [1.5],
doc/History2.htm [1.5], doc/History3.htm [1.5], doc/History4.htm [1.5],
doc/History5.htm [1.7], doc/History6.htm [1.15], doc/Htmstyle.htm [1.8],
doc/Install.htm [1.13], doc/Language.htm [1.23], doc/Lib.htm [1.5],
doc/Maintain.htm [1.8], doc/Make.htm [1.19], doc/New-user.htm [1.17],
doc/News.htm [1.73], doc/Projects.htm [1.22], doc/Ps-style.htm [1.5],
doc/Ps2epsi.htm [1.6], doc/Ps2pdf.htm [1.23], doc/Psfiles.htm [1.12],
doc/Readme.htm [1.17], doc/Release.htm [1.26], doc/Source.htm [1.5],
doc/Tester.htm [1.5], doc/Unix-lpr.htm [1.5], doc/Use.htm [1.20],
doc/Xfonts.htm [1.5], doc/gs-vms.hlp [1.4], man/dvipdf.1 [1.2],
man/eps2eps.1 [1.3], man/font2c.1 [1.2], man/gs.1 [1.2], man/gslp.1 [1.2],
man/gsnd.1 [1.2], man/pdf2dsc.1 [1.2], man/pdf2ps.1 [1.4],
man/pdfopt.1 [1.2], man/pf2afm.1 [1.2], man/pfbtopfa.1 [1.3],
man/printafm.1 [1.2], man/ps2ascii.1 [1.2], man/ps2epsi.1 [1.2],
man/ps2pdf.1 [1.6], man/ps2pdfwr.1 [1.3], man/ps2ps.1 [1.9],
man/wftopfa.1 [1.2]: 2001/01/01 00:24:05 lpd)

</pre><h2><a name="6.60-Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- cvs2hist was generating invalid anchor names and not escaping
special charaters. also enable '-r' commandline option, and pass '-b' if
it's not specified for default branch logs only. Changes.htm now passes the
validator. Minor url cleanup in Release.htm (toolbin/cvs2hist.py [1.4]:
2000/11/10 01:52:35 giles)
	- The OS/2 platform code would no longer compile, because the stdio
files are no longer available. (fix from rjl) (os2.mak [1.9]: 2000/12/05
01:16:26 lpd)
	- Embedded font subsets always used similar sequences of prefixes,
making it likely that combining multiple PDF files would lead to clashes;
the code now generates truly random prefixes, using an external source of
random data. (devs.mak [1.39]: 2000/12/10 00:12:23 lpd)
	- Fixes a couple of dependency lists that had gotten out of sync.
(devs.mak [1.40]: 2000/12/10 00:17:51 lpd)
	- Seek was broken and PDF interpreter failed when
FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
general unistd_.h (lib.mak [1.40]: 2000/12/19 03:35:40 alexcher)
	- In the previous fix unistd__h was misspelt as unistd_h .
(lib.mak [1.41]: 2000/12/19 05:35:53 alexcher)
	- The recent change for localized man pages didn't update 2 of the 3
top-level Unix makefiles. (unixansi.mak [1.7], unixtrad.mak [1.7]:
2000/12/23 16:29:53 lpd)
	- The list of doc files to be installed had gotten out of date
(Develop.htm, Maintain.htm, and Ps-style.htm were missing).
(unixinst.mak [1.16]: 2000/12/23 16:30:36 lpd)
	- unixinst.mak was checked in with the previous fix only partly
done. (unixinst.mak [1.17]: 2000/12/23 16:34:12 lpd)

Collect some stray configuration related externs into iconf.h
(int.mak [1.40]: 2000/11/04 06:12:02 rayjj)

Adds DSC parsing capability to the PostScript interpreter, with an optional
'feature' to use the DSC Orientation comments to compensate for sloppy
PostScript producers that don't emit an appropriate setpagedevice command.
(int.mak [1.41]: 2000/11/05 18:33:53 lpd)

Adds the 'hook' for passing DSC comments to the PDF writer, but doesn't
actually process any of the comments. NOTE: Part of this code was
accidentally included in the recent fix for local/global VM problems in the
PostScript code for using the DSC parser. (devs.mak [1.36]: 2000/11/07
18:54:26 lpd)

Reorganizes some text-writing code in anticipation of adding CIDFont and
CMap support. (devs.mak [1.37]: 2000/11/17 22:11:44 lpd)

Avoids exporting empty LD_RUN_PATH environment variable to the link process.
This was causing binaries to search the current directory for libraries,
which was a security hole. Fixes SourceForge bug 122532. (ugcclib.mak [1.6],
unixlink.mak [1.3]: 2000/11/28 00:14:48 raph)

Updates the date and version checker for compatibility with the newest
documentation standards; also makes it check the makefile values of JVERSION
and PVERSION against the currently installed third-party source code.
(toolbin/pre [1.9]: 2000/12/05 21:14:14 lpd)

Extensively revises and updates the pdfwrite text handling code to support
processing and embedding of all types of fonts (except for Type 3 and
CIDFontType 1, which are defined by PostScript procedures), and all variants
of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
standard and non-standard CMaps are supported. (devs.mak [1.38],
int.mak [1.42], lib.mak [1.38]: 2000/12/08 23:35:37 lpd)

removes a spurious import of the cgi module (toolbin/cvs2hist.py [1.5]:
2000/12/11 19:40:23 giles)

Splits off the code for downsampling an oversampled character bitmap into a
separate file. (lib.mak [1.39]: 2000/12/14 00:14:52 lpd)

Adds a '-t' option to enable text output rather than html, replacing the old
behavior, which was to return text unless a version string was passed with
'-v'. The version string is now set to 'CVS' if no explicit version is
passed, and this is used in the named anchors within the html output.
(toolbin/cvs2hist.py [1.6]: 2000/12/23 09:38:10 giles)

Adds support for localized manpages to the make 'install' target. On unix
the makefile will now intall any files with the $MAN1EXT extension it finds
under locale subdirs of the man directory that are listed in the MAN_LCDIRS
variable. The $man1dir is correspondingly removed from unix-gcc.mak. Also
adds separate targets: install-doc install-man install-examples
install-libdata (unix-gcc.mak [1.9], unixinst.mak [1.15]: 2000/12/23
10:10:37 giles)

Improves the set of files checked by hrefcov +lib.
(toolbin/hrefcov.tcl [1.5]: 2000/12/29 02:16:13 lpd)

Adds a script for batch-converting PostScript files to PDF, intended to be
useful for testing. (toolbin/many2pdf.tcl [1.1]: 2000/12/31 22:28:09 lpd)

Updates repository for 6.60 release. (toolbin/pre [1.10],
version.mak [1.24]: 2001/01/01 00:24:06 lpd)

</pre><h2><a name="6.60-Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- pdfopt.ps used the "unresolved?" procedure from pdf_base.ps, which
has been replaced by the slightly different "resolved?" procedure.
(lib/pdfopt.ps [1.4]: 2000/12/01 04:15:52 lpd)
	- The OS/2 platform code would no longer compile, because the stdio
files are no longer available. (fix from rjl) (gp_os2.c [1.5]: 2000/12/05
01:16:26 lpd)
	- File flush method uses file member in stream. On Windows and OS/2
it is NULL for %stdout or %stderr. So the standard flush method is
installed. (gp_msio.c [1.3], gp_os2.c [1.6]: 2000/12/19 03:44:24 alexcher)
	- /NullEncode filter no longer supports fileposition. Replacing
fileposition with .fileposition (lib/impath.ps [1.3]: 2000/12/28 17:06:07
alexcher)
	- _.at file was not deleted in BAT file; SAFER option added to CMD
file. (lib/eps2eps.bat [1.4], lib/eps2eps.cmd [1.2]: 2000/12/30 18:45:37
alexcher)

Improves documentation of cid2code.ps by adding a complete usage example.
(lib/cid2code.ps [1.3]: 2000/11/30 18:22:11 lpd)

Adds extensive documentation to genconf.c; also brings it into line with
current Ghostscript coding standards. (genconf.c [1.4]: 2000/12/20 04:20:34
lpd)

Safe mode implemented using DELAYSAFER flag. (lib/pdf2dsc [1.3],
lib/pdf2dsc.bat [1.1], lib/pdf2dsc.ps [1.3]: 2000/12/29 05:03:49 alexcher)

</pre><h2><a name="6.60-Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- In PDF output, color values of 1.0 were usually written as 0.999.
(bug introduced in version 6.22) (gdevpsdu.c [1.8]: 2000/11/12 07:13:26 lpd)
	- The pswrite device couldn't write to pipes. The fix involved
expanding the API for opening device OutputFiles so that the individual
driver could specify whether it required, requested, or did not want a
positionable file. Fixes SourceForge bug # 122223. (gdevps.c [1.13],
gdevpx.c [1.5]: 2000/11/29 02:25:13 lpd)
	- Invalid (uninitialized) StripByteCount was being left in file for
the tiff12nc and tiff24nc devices. Needed to call gdev_tiff_end_strip().
(gdevtfnx.c [1.4]: 2000/12/15 06:09:27 rayjj)
	- Fixes bug introduced in gdevxini.c revision 1.5. Don't overwrite
the pixmap handle provided in the GHOSTVIEW environment variable.
(gdevxini.c [1.10]: 2000/12/15 10:18:47 ghostgum)
	- The pswrite device produced an extra page if the transfer function
didn't map "1 setgray" to device white. (gdevps.c [1.14]: 2000/12/21
03:58:54 lpd)

</pre><h2><a name="6.60-PDF_writer"></a>PDF writer</h2><pre>

Fixes problems:
	- kshow caused the PDF writer to revert to bitmapped fonts. Fixes
SourceForge bug # 104118. (gdevpdft.c [1.21]: 2000/11/06 04:17:14 lpd)
	- The PDF writer didn't handle stroked fonts correctly (they were
filled instead of stroked). (gdevpdf.c [1.23], gdevpdfd.c [1.11],
gdevpdft.c [1.22], gdevpdfx.h [1.23]: 2000/11/12 06:52:08 lpd)
	- When mixing filled and stroked fonts, the color wasn't set
correctly. (gdevpdft.c [1.23]: 2000/11/12 07:14:30 lpd)
	- The PDF writer incorrectly assumed that in PDF 1.3, the standard
Latin character set was the PostScript 3 extended set (it's actually the old
PostScript Level 2 set). (gdevpdft.c [1.28]: 2000/11/20 18:13:55 lpd)
	- Embedded CIDFontType 2 fonts had an incorrect BoundingBox.
(gdevpdff.c [1.14]: 2000/12/09 06:53:25 lpd)
	- Embedded font subsets always used similar sequences of prefixes,
making it likely that combining multiple PDF files would lead to clashes;
the code now generates truly random prefixes, using an external source of
random data. (gdevpdf.c [1.26], gdevpdfe.c [1.8], gdevpdff.c [1.15],
gdevpdff.h [1.9], gdevpdfx.h [1.27]: 2000/12/10 00:12:23 lpd)
	- Non-embedded Multiple Master instances weren't identified as such
(font Subtype = /MMType1). (gdevpdfw.c [1.7]: 2000/12/11 08:52:01 lpd)
	- pdfwrite would crash if a bitmap character was larger than 10Kb
(compressed). The fix simply raises the limit to 1 Mb. (gdevpdft.c [1.30]:
2000/12/13 01:33:37 lpd)
	- When processing DSC comments, some constant strings weren't copied
to the heap, possibly causing memory access errors. (gdevpdfp.c [1.16]:
2000/12/16 07:02:35 lpd)
	- If the same standard (base 14) font was loaded more than once
(because of save/restore), the PDF file could contain fonts that had
suffixed names (e.g., Helvetica~2) but with data missing as though they were
standard fonts, upsetting Acrobat Reader. Fixes SourceForge bug # 101905.
THIS FIX IS IN A VERY FRAGILE AREA AND MAY INTRODUCE NEW PROBLEMS.
(gdevpdff.c [1.16]: 2000/12/16 08:00:53 lpd)
	- The previous fix for copying DSC comment keys to the heap was
unnecessarily complex. (gdevpdfp.c [1.17]: 2000/12/16 19:28:51 lpd)
	- Resource usage wasn't tracked separately for Form XObjects (BP/EP
pdfmarks), producing non-compliant files that caused errors from Acrobat.
Fixes SourceForge bug # 102146. (gdevpdf.c [1.28], gdevpdff.c [1.17],
gdevpdff.h [1.10], gdevpdfm.c [1.8], gdevpdfo.c [1.6], gdevpdfo.h [1.6],
gdevpdft.c [1.31], gdevpdfu.c [1.14], gdevpdfw.c [1.8], gdevpdfx.h [1.28]:
2000/12/16 19:36:32 lpd)
	- Strict type correctness is required on VMS system. Contributed by
Jouk Jansen joukj@hrem.stm.tudelft.nl (gdevpdfw.c [1.9]: 2000/12/18 21:58:03
alexcher)

Adds the 'hook' for passing DSC comments to the PDF writer, but doesn't
actually process any of the comments. NOTE: Part of this code was
accidentally included in the recent fix for local/global VM problems in the
PostScript code for using the DSC parser. (gdevpdfp.c [1.13]: 2000/11/07
18:54:26 lpd)

Changes the internal indication of whether to allow font subsetting from a
Boolean to OK, YES, NO. (Unfortunately, I no longer remember why this change
is needed.) (gdevpdfe.c [1.6], gdevpdff.c [1.10], gdevpdff.h [1.5],
gdevpdft.c [1.24]: 2000/11/14 06:57:21 lpd)

When writing PDF output, adds the ability to convert text in Type 0 fonts to
text in the descendant leaf fonts. This completes the handling of text
output except for CID-keyed fonts. (gdevpdft.c [1.25]: 2000/11/14 16:47:09
lpd)

Reorganizes some text-writing code in anticipation of adding CIDFont and
CMap support. (gdevpdff.c [1.11], gdevpdff.h [1.6], gdevpdft.c [1.26]:
2000/11/17 22:11:44 lpd)

Makes glyphshow no longer revert to bitmapped fonts. Also adds a CIDFont
pseudo-resource, in anticipation of adding CID-keyed font support.
(gdevpdff.c [1.12], gdevpdff.h [1.7], gdevpdft.c [1.27], gdevpdfx.h [1.24]:
2000/11/20 08:31:20 lpd)

Extensively revises and updates the pdfwrite text handling code to support
processing and embedding of all types of fonts (except for Type 3 and
CIDFontType 1, which are defined by PostScript procedures), and all variants
of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
standard and non-standard CMaps are supported. (gdevpdf.c [1.24],
gdevpdfe.c [1.7], gdevpdff.c [1.13], gdevpdff.h [1.8], gdevpdfs.c [1.1],
gdevpdft.c [1.29], gdevpdfu.c [1.13], gdevpdfw.c [1.6], gdevpdfx.h [1.25]:
2000/12/08 23:35:38 lpd)

If ParseDSCCommentsForDocInfo is set to true, copies information from DSC
comments Creator, CreationDate, For, and Title into the output's Info
dictionary. (gdevpdfp.c [1.14]: 2000/12/09 07:49:22 lpd)

Makes the PDF writer extract orientation and bounding box information from
DSC comments, if present. The orientation is used to set Rotate if
AutoRotatePages is not selected; the bounding box is not yet used for
anything. (gdevpdf.c [1.25], gdevpdfp.c [1.15], gdevpdfx.h [1.26]:
2000/12/09 19:54:54 lpd)

Slightly changes the initialization of the random offset for font subset
prefixes, to work better with low-resolution clocks such as those typical on
PCs. (gdevpdf.c [1.27]: 2000/12/16 19:31:10 lpd)

</pre><h2><a name="6.60-PDF_Interpreter"></a>PDF Interpreter</h2><pre>

Fixes problems:
	- Type 0 fonts with a non-standard (embedded) CMap didn't work at
all. (lib/pdf_font.ps [1.15]: 2000/12/02 20:41:52 lpd)
	- The PDF interpreter ignored the CIDToGIDMap entry in (embedded)
CIDFontType 2 fonts, producing incorrect output if the map wasn't /Identity.
(lib/pdf_font.ps [1.16]: 2000/12/07 23:41:10 lpd)
	- GS didn't dereference indirect objects in Widths array.
(lib/pdf_font.ps [1.17]: 2000/12/17 19:06:19 alexcher)
	- Fixes a slight oversight in the true/false/null improvement for
the PDF interpreter. (lib/pdf_base.ps [1.12]: 2000/12/26 04:10:12 lpd)
	- When a non-TrueType font was substituted for a TrueType font, the
Encoding in the font descriptor was ignored. This hack was intended to fix
SF bug # 104702, an invalid PDF file, but it broke another case. Removal of
the hack makes GS render both cases similar to AR 4.
(lib/pdf_font.ps [1.18]: 2000/12/26 04:29:30 alexcher)
	- The PDF interpreter didn't rotate the CropBox for landscape pages,
producing incorrect output if the input of ps2pdf was a landscape PDF file.
(lib/pdf_main.ps [1.26]: 2000/12/31 01:07:18 lpd)

Improves font substitution by taking the "Narrow" property into account.
Fixes SourceForge bug 116460. Fix due to Leon Bottou.
(lib/pdf_font.ps [1.13]: 2000/11/05 17:36:28 raph)

Wraps the showpagecontents call in gsave/grestore, so that the graphics
state for drawing annotations is pristine. Fixes Sourceforge bug 123310.
(lib/pdf_main.ps [1.23]: 2000/11/25 22:00:21 raph)

The published PDF specification says the Encoding name "must be" one of the
3 predefined Encodings, implying that an error should occur if it isn't.
However, Acrobat Reader simply ignores unknown names, and since there are
some buggy applications that rely on this, we do the same.
(lib/pdf_font.ps [1.14]: 2000/11/28 18:55:24 alexcher)

The PDF specification says that the 'xref' must be on a line by itself. The
code formerly used readline and linene to check this. However, Acrobat
Reader only requires the line to begin with 'xref', and there are enough
applications producing non-compliant PDF files that we have to do this too.
(lib/pdf_main.ps [1.24]: 2000/12/18 03:41:35 alexcher)

AI8 writes bogus encoding array [0 1 0 0 0 0 0 0] AR doesn't care. So we
have to straighten it up here. (lib/pdf_draw.ps [1.24]: 2000/12/20 19:02:24
alexcher)

Makes the PDF interpreter handle true, false, and null specially, rather
than by dictionary lookup, so that the PostScript interpreter can still
process these names using the special fast case for names defined only in
systemdict. (lib/pdf_base.ps [1.11], lib/pdf_main.ps [1.25]: 2000/12/26
04:08:44 lpd)

</pre><h2><a name="6.60-Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- The recently updated code for activating the DSC comment parser
had several local/global VM problems, causing invalidaccess errors.
(lib/gs_dps2.ps [1.3], lib/gs_init.ps [1.27], lib/gs_pdfwr.ps [1.7]:
2000/11/07 18:51:24 lpd)
	- There was still a bug in the code for passing DSC comments to the
PDF writer, causing typecheck errors. (lib/gs_pdfwr.ps [1.8]: 2000/11/07
19:27:14 lpd)
	- If the procedure of a FunctionType 4 Function was syntactically
valid but exceeded the maximum stack depth, an attempt was made to free a
string as an object, causing memory corruption. (zfunc4.c [1.6]: 2000/11/11
17:34:06 lpd)
	- Disk-based TrueType fonts caused a memory leak. (Currently, there
are no such fonts, but CIDFontType 2 fonts, and directly-accessed TrueType
fonts, should be made disk-based.) (zfcid1.c [1.4]: 2000/11/22 08:32:07 lpd)
	- Type 1 CharStrings loaded from disk for type 0 CIDFonts were never
freed, except by garbage collection (which doesn't reclaim chunks with only
a small amount of surviving data). In practice, this probably only affects
the PDF writer. (zfcid0.c [1.5]: 2000/11/23 23:34:22 lpd)
	- Single-byte notdef ranges in CMaps incorrectly incremented the CID
number, rather than assigning the same CID to all characters in the range.
(lib/gs_cmap.ps [1.9]: 2000/11/29 06:58:36 lpd)
	- In dictionaries, an int lookup key sometimes didn't match a real
stored key, and vice versa. Fixes SourceForge bug # 123678. (idict.c [1.3]:
2000/11/30 07:13:08 lpd)
	- Further tweaking of the logic to clear end_status flags in a
pipeline in the continuation of a procedure write, making it more aggressive
than the previous fix, but less aggressive than the original code. This is a
revised fix for Sourceforge bug 119777. (zfproc.c [1.7]: 2000/12/02 19:58:45
raph)
	- 'gstate' was allowed in global VM even if the current graphics
state included references to structures in local VM (which is, in fact,
normally the case) and the save level was non-zero: this could create a
dangling pointer after the 'restore'. This "fix" is a workaround that simply
prohibits doing this, but a correct fix would copy any such structures.
(zdps1.c [1.3]: 2000/12/02 20:39:37 lpd)
	- The first call of check_psc_function in gs_build_function_4 didn't
initialize size to 0, causing the computed value of size to be garbage,
possibly leading to a VMerror or memory corruption. (zfunc4.c [1.7]:
2000/12/03 16:56:31 alexcher)
	- The font_info procedure for PostScript fonts other than Type 1
didn't return information from the FontInfo dictionary (Copyright,
FamilyName, FullName, Notice), causing this information to be omitted when
embedding the font in a PDF file. (ifont.h [1.6], zbfont.c [1.7],
zfont.c [1.3], zfont1.c [1.9]: 2000/12/03 23:35:30 lpd)
	- The %%ViewingOrientation: DSC comment was misspelled
%%ViewerOrientation:. This also corrects the CDSC_VIEWINGORIENTATION enum
value (formerly CDSC_VIEWERORIENTATION, and the viewing_orientation members
of the CDSCPAGE structure and the CDSC structure (formerly
viewer_orientation). (dscparse.c [1.3], dscparse.h [1.3], zdscpars.c [1.8]:
2000/12/09 18:28:23 lpd)
	- Unitialized member of CDSCPAGE caused random crashes.
(dscparse.c [1.4]: 2000/12/13 07:18:46 alexcher)
	- systemdict was being created too small for LanguageLevel 3
systems. (It expanded properly, but left a sandbar.) (iinit.c [1.3]:
2000/12/26 04:25:54 lpd)
	- Expanding a permanent dictionary (systemdict or userdict)
destroyed the single-definition bookkeeping for names defined in that
dictionary, slowing down subsequent interpretation. (idict.c [1.4]:
2000/12/26 06:09:58 lpd)
	- Fix to dscparse.c for parsing DOS EPS files. Code now looks for
%!PS-Adobe- at the start of the PostScript section, not at the start of the
DOS EPS header. (dscparse.c [1.5]: 2000/12/28 01:45:01 ghostgum)

Collect some stray configuration related externs into iconf.h
(imain.c [1.3], imainarg.c [1.5]: 2000/11/04 06:12:02 rayjj)

branches: 1.1.2; Collect some stray configuration related externs into
iconf.h (iconf.h [1.1]: 2000/11/04 06:12:02 rayjj)

Add COMPILE_INITS information line to -h help output. (imainarg.c [1.6]:
2000/11/04 06:13:42 rayjj)

Adds DSC parsing capability to the PostScript interpreter, with an optional
'feature' to use the DSC Orientation comments to compensate for sloppy
PostScript producers that don't emit an appropriate setpagedevice command.
(lib/gs_dscp.ps [1.1], zdscpars.c [1.1]: 2000/11/05 18:33:52 lpd)

branches: 1.1.2; Adds DSC parsing capability to the PostScript interpreter,
with an optional 'feature' to use the DSC Orientation comments to compensate
for sloppy PostScript producers that don't emit an appropriate setpagedevice
command. (dscparse.c [1.1], dscparse.h [1.1]: 2000/11/05 18:33:53 lpd)

Polishes the DSC parser interface: improves comments and formatting, and
fixes a couple of very minor glitches. (zdscpars.c [1.2]: 2000/11/06
07:34:21 lpd)

branches: 1.3.2; ... and fixes an overlooked const discrepancy.
(zdscpars.c [1.3]: 2000/11/06 07:35:51 lpd)

branches: 1.2.2; Fix: The recently updated code for activating the DSC
comment parser had several local/global VM problems, causing invalidaccess
errors. (lib/gs_dscp.ps [1.2]: 2000/11/07 18:51:25 lpd)

Return code variables (code and comment_code) in zparse_dsc_comments(). need
to be signed. (zdscpars.c [1.4]: 2000/11/08 00:54:48 dancoby)

Rewrites .parse_dsc_comment to use the parameter list machinery, removing a
little functionally duplicated code; changes two incorrect uints to ints
(fix from dan@artifex.com); adds additional comment types (BoundingBox,
PageBoundingBox, BeginDefaults, EndDefaults) to the interface.
(zdscpars.c [1.5]: 2000/11/08 07:07:32 lpd)

DSC parser changes: adds %%ViewerOrientation to DSC parser; doesn't flag an
error if %%Pages is absent but one %%Page is found; frees memory if
initialization fails; recognizes general whitespace in some places where
only spaces were recognized before. (changes from gsview@ghostgum.com.au)
(dscparse.c [1.2], dscparse.h [1.2]: 2000/11/13 05:44:58 lpd)

Adds DSC comment tracing to ps2pdf, if -dDEBUG is specified on the command
line. (lib/gs_pdfwr.ps [1.9]: 2000/11/13 17:03:51 lpd)

Adds %%EndDefaults, %%For:, and %%ViewerOrientation: to the set of DSC
comments handled by the .parse_dsc_comments operator. (zdscpars.c [1.6]:
2000/11/13 17:06:18 lpd)

Slightly simplifies the code for creating the internal representation of
CMaps. (lib/gs_cmap.ps [1.8]: 2000/11/16 00:32:00 lpd)

Changes .buildshading to always apply a ReusableStreamDecode filter to file
and stream DataSources, so that multiple passes over the stream work. This
patch closes SourceForge bug 121810. (lib/gs_ll3.ps [1.7]: 2000/11/16
00:37:32 raph)

Makes single-byte CMap ranges convert into a single range in the internal
representation, rather than (largest - smallest + 1) separate single-element
ranges. (lib/gs_cmap.ps [1.10]: 2000/11/29 07:10:27 lpd)

Adds documentation for the procedures declared in ifont.h. (ifont.h [1.5]:
2000/12/03 23:14:28 lpd)

Extensively revises and updates the pdfwrite text handling code to support
processing and embedding of all types of fonts (except for Type 3 and
CIDFontType 1, which are defined by PostScript procedures), and all variants
of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
standard and non-standard CMaps are supported. (lib/gs_cidfn.ps [1.18]:
2000/12/08 23:35:38 lpd)

Makes the default value of ParseDSCCommentsForDocInfo true rather than
false. (lib/gs_pdfwr.ps [1.10]: 2000/12/09 08:00:52 lpd)

Changes the parsing of the DSC Orientation comments to return -1 .. 3 rather
than 0 or 1. (lib/gs_dscp.ps [1.3], zdscpars.c [1.7]: 2000/12/09 17:52:29
lpd)

Changes .parse_dsc_comments to distinguish (document default)
ViewingOrientation from PageViewingOrientation, as for [Page]Orientation.
(zdscpars.c [1.9]: 2000/12/09 19:52:49 lpd)

Updates the comments with a new proposal for speeding up name lookup in the
interpreter. (dstack.h [1.3]: 2000/12/26 01:20:58 lpd)

The old code caused gswin crash when console window closes.
(dwimg.cpp [1.3]: 2000/12/26 13:41:40 igorm)

New flag DELAYSAFER added to defer activation of safety checks. SAFER=false
=&gt; no safety checks SAFER=true, DELAYSAFER=false =&gt; safety checks
always SAFER=true, DELAYSAFER=true =&gt; safety checks after .setsafe
(lib/gs_init.ps [1.28]: 2000/12/29 04:13:56 alexcher)

</pre><h2><a name="6.60-Streams"></a>Streams</h2><pre>

Fixes problems:
	- Seek was broken and PDF interpreter failed when
FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
general unistd_.h (sfxfd.c [1.6]: 2000/12/19 03:35:40 alexcher)

</pre><h2><a name="6.60-Library"></a>Library</h2><pre>

Fixes problems:
	- Several places in the band list code didn't call s_init_state to
initialize locally allocated stream states: this is now required (see the
"Incompatible changes" section above). We suspect there are a few more
places that will need this fix. (gxclbits.c [1.3], gxcldev.h [1.4],
gxclread.c [1.3], gxclutil.c [1.3]: 2000/11/05 00:34:24 lpd)
	- Fixes infinite loops when writing large bitmaps into clist. Now,
cmd_put_bits never requests an allocation in the clist buffer larger than
cbuf_size. (gxclbits.c [1.4]: 2000/11/05 18:44:57 raph)
	- Works around an Acrobat Reader 4 bug that causes AR4 to draw a
single pixel, rather than nothing, when filling a subpath consisting only of
a moveto. (gdevvec.c [1.8]: 2000/11/07 16:42:28 lpd)
	- The PDF writer didn't handle stroked fonts correctly (they were
filled instead of stroked). (gdevvec.c [1.9], gdevvec.h [1.5]: 2000/11/12
06:52:08 lpd)
	- The pdfwrite and pswrite drivers could emit a lineto or rlineto
without a moveto at the beginning of the path. (bug introduced very
recently, by a workaround for an Acrobat Reader bug) (gdevvec.c [1.10]:
2000/11/14 07:41:08 lpd)
	- Attempting to write a CFF Type 2 font larger than 32K but smaller
than 64K caused a rangecheck. (gdevpsf2.c [1.8]: 2000/11/19 17:48:08 lpd)
	- Computing the default width or the fixed width for a CIDFont or
TrueType font could do a huge amount of unnecessary work. (Probably only
affects the PDF writer.) (gsfont.c [1.3]: 2000/11/20 21:09:09 lpd)
	- The Type 1 to Type 2 CharString converter (currently used only by
the PDF writer) often didn't detect invalid CharStrings as input.
(gdevpsfx.c [1.6]: 2000/11/21 02:33:55 lpd)
	- The code for writing a CIDFontType0 CFF font mistook Type 2
CharStrings for Type 1, and tried to convert them to Type 2. (This currently
affects only the PDF writer.) (gdevpsf2.c [1.9]: 2000/11/21 02:35:59 lpd)
	- Disk-based TrueType fonts caused a memory leak. (Currently, there
are no such fonts, but CIDFontType 2 fonts, and directly-accessed TrueType
fonts, should be made disk-based.) (gdevpsft.c [1.5], gstype42.c [1.10]:
2000/11/22 08:32:07 lpd)
	- Type 1 CharStrings loaded from disk for type 0 CIDFonts were never
freed, except by garbage collection (which doesn't reclaim chunks with only
a small amount of surviving data). In practice, this probably only affects
the PDF writer. (gsfcid.c [1.5], gstype1.c [1.6], gstype2.c [1.9],
gxfont1.h [1.5], gxtype1.c [1.8], gxtype1.h [1.5]: 2000/11/23 23:34:22 lpd)
	- The pswrite device couldn't write to pipes. The fix involved
expanding the API for opening device OutputFiles so that the individual
driver could specify whether it required, requested, or did not want a
positionable file. Fixes SourceForge bug # 122223. (gdevpipe.c [1.4],
gdevvec.c [1.11], gdevvec.h [1.6], gsdevice.c [1.8]: 2000/11/29 02:25:13
lpd)
	- The change for freeing transient CharStrings introduced two bugs,
possibly causing the code to free data twice, or to free data that should be
retained. (gdevpsfx.c [1.8]: 2000/11/30 05:58:19 lpd)
	- Allocates graphics state path in stable memory. This prevents
paths in Type 3 fonts allocated inside a save ... setcachedevice ... restore
sequence from being prematurely freed. Fixes SourceForge bug 101549.
(gspath1.c [1.3], gsstate.c [1.6]: 2000/12/04 21:13:55 raph)
	- An inadvertent change caused the graphics state not to be freed on
grestore. This fix, due to lpd, restores the freeing statement.
(gsstate.c [1.7]: 2000/12/05 09:24:57 raph)
	- The pointers to the substituted color spaces in the graphics state
weren't included in the structure descriptor, causing memory access errors
if UseCIEColor was used. (gsstate.c [1.8]: 2000/12/11 04:06:22 alexcher)
	- In TrueType fonts, glyph outlines starting with an off-curve point
didn't render correctly, replacing the curve with a pair of straight lines.
(gstype42.c [1.11]: 2000/12/12 22:27:56 alexcher)
	- Strict type correctness is required on VMS system. Contributed by
Jouk Jansen joukj@hrem.stm.tudelft.nl (gdevpsf2.c [1.12], gsfcmap.c [1.13]:
2000/12/18 21:58:03 alexcher)
	- Seek was broken and PDF interpreter failed when
FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
general unistd_.h (gpmisc.c [1.9]: 2000/12/19 03:35:40 alexcher)
	- Fixes a subtle logic bug in the scan line path filling code, which
unfortunately involved rewriting the code from scratch. The new code is also
somewhat subtle, and may contain new bugs: DON'T TRUST IT YET. Fixes
SourceForge bug # 117066. (gxfill.c [1.7]: 2000/12/23 06:02:39 lpd)
	- Embedded Type 1 fonts omitted StdVW. (Acrobat Reader requires
this, even though the Type 1 specification says it is optional.)
(gdevpsf1.c [1.8]: 2000/12/29 01:18:55 lpd)

Adds developer documentation on the color mapping pipeline. (gxfrac.h [1.3]:
2000/11/03 04:53:00 lpd)

Improves the documentation of the minimum responsibilities of the 'process'
procedure in a text enumerator. (gxtext.h [1.6]: 2000/11/06 00:44:37 lpd)

Adds a param_string_from_transient_string macro, to parallel
param_string_from_string for non-permanent C strings. (gsparam.h [1.8]:
2000/11/08 06:56:50 lpd)

Adds a macro for declaring suffix subclasses with 5 added pointers (in
addition to the existing 1, 2, 3, 4, and 6). (gsstruct.h [1.6]: 2000/11/21
16:46:55 lpd)

Adds a procedure for testing whether a glyph is a "notdef" in a font,
necessary for fixing a memory consumption problem when accessing type 0
CIDFonts. (gsfont.c [1.4], gxfont.h [1.3]: 2000/11/23 23:23:40 lpd)

Speeds up the slow case of fixed_mult_quo by nearly a factor of 2, by using
a tiny bit of numerical analysis. (gsmisc.c [1.9], gxfixed.h [1.3]:
2000/11/24 06:53:23 lpd)

Improves the performance of embedded font writing by freeing strings when no
longer needed, and by removing redundant computation. (Currently relevant
only to the PDF writer.) (gdevpsf1.c [1.7], gdevpsf2.c [1.10],
gdevpsfu.c [1.5], gdevpsfx.c [1.7]: 2000/11/24 07:10:41 lpd)

Adds a procedure for creating an Identity CMap, needed by the PDF writer.
(gsfcmap.c [1.11], gxfcmap.h [1.6]: 2000/11/26 04:08:41 lpd)

Implements the stopgap measure of increasing fill_adjust for Coons patch
shading, to cover the dropouts caused by incorrect triangulation of the mesh
surface. See SourceForge Bug 119588 for a more thorough analysis.
(gsptype2.c [1.4], gxshade4.c [1.4]: 2000/11/29 01:31:30 raph)

Adds an internal unique ID to CMap structures (gs_cmap_t), for use as a
cache or comparison key. (gsfcmap.c [1.12], gxfcmap.h [1.7]: 2000/11/29
05:50:03 lpd)

The old code did not comply ISO/IEC C language standard and compiled wrongly
to Mac, causing halftone problem on Mac. (gshtscr.c [1.5]: 2000/11/29
14:41:34 igorm)

Adds macros for suffix subclass structures with 7 or 8 additional pointers
(1-6 and 9 existed already). (gsstruct.h [1.7]: 2000/12/04 01:11:53 lpd)

Extensively revises and updates the pdfwrite text handling code to support
processing and embedding of all types of fonts (except for Type 3 and
CIDFontType 1, which are defined by PostScript procedures), and all variants
of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with
all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both
standard and non-standard CMaps are supported. (gdevpsf.h [1.9],
gdevpsf2.c [1.11], gdevpsfm.c [1.4], gdevpsft.c [1.6], gdevpsfu.c [1.6]:
2000/12/08 23:35:38 lpd)

Moves definitions of gs_state_do_ptrs and gs_state_num_ptrs from gsstate.c
to gzstate.h since they depend on the contents of struct gs_state_s defined
there. (gsstate.c [1.9], gzstate.h [1.4]: 2000/12/11 12:52:16 alexcher)

Splits off the code for downsampling an oversampled character bitmap into a
separate file. (gsbitcom.c [1.1], gsbitops.c [1.3]: 2000/12/14 00:14:52 lpd)

branches: 1.1.2; Fix: Seek was broken and PDF interpreter failed when
FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
general unistd_.h (unistd_.h [1.1]: 2000/12/19 03:35:40 alexcher)

Brings gxfill.c up to date with current coding standards (except for adding
_t to the names of locally defined structure types); also puts #ifdef
FILL_TRAPEZOIDS around a little more code that tests 'if (fill_trapezoids)'.
(gxfill.c [1.6]: 2000/12/21 16:10:36 lpd)

Updates repository for 6.60 release. (gscdef.c [1.11]: 2001/01/01 00:24:06
lpd)

</pre><h2><a name="6.60-Other"></a>Other</h2><pre>

Fixes problems:
	- Seek was broken and PDF interpreter failed when
FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls
is extended to support MSVC &amp;&amp; Win32. close_.h is replaced by more
general unistd_.h (close_.h [1.3]: 2000/12/19 03:35:40 alexcher)

<hr>

<h1><a name="Version6.30"></a>Version 6.30 (2000-10-03)</h1>

<p>
This fileset consists of xxx.

<p>
All problems registered on SourceForge numbered 110922 or lower are closed,
except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
104118, 105289, 105558, 106340, 106652, 109350, 110445, 110898, 110922.

<p>
The following projects are in a partially completed state:

<ul>

<li>CID-keyed fonts in the PDF writer (gdevpdf[eftw].c) -- barely started.

</ul>

<pre>

<h2><a name="6.24_Incompatible_changes"></a>Incompatible changes</h2>

(Procedures)
	- The -Zv and -ZV switches now trace alpha/transparency features.
	- The program name is now AFPL Ghostscript rather than Aladdin
Ghostscript.
	- The default Windows installation directory is now c:\gs rather
than c:\Aladdin.
(Utilities)
	- lib/pdfeof.ps is deleted; its functionality is included in the
standard code.
(Drivers)
	- The X driver now implements sync_output using XSync(False) rather
than XFlush().
(Library)
	- gdev_vector_dopath now never returns 1.
	- Color space types now have a new, required, "equal" procedure.


<h2><a name="6.30 Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- the "User parameters" section was incorrectly titled "Device
parameters". (doc/Language.htm [1.11]: 2000/08/17 17:00:42 lpd)

Initializes files for the 6.24 fileset. (doc/News.htm [1.57]: 2000/08/09
16:54:01 lpd)

Adds Alex Cherepanov to the roster of helpers. (doc/Helpers.htm [1.2]:
2000/08/09 16:54:39 lpd)

Documents the -dDEVICE{WIDTH,HEIGHT}POINTS= switches. (doc/Use.htm [1.10]:
2000/08/17 01:31:52 lpd)

Notes the change in the return value of gdev_vector_dopath.
(doc/News.htm [1.58]: 2000/08/20 00:20:42 lpd)

Changes text to make it clear that Yves Arrouye no longer maintains the BJC
drivers that he wrote. (doc/Devices.htm [1.11]: 2000/08/21 14:38:27 lpd)

Puts the logic for detecting garbage after %%EOF (and some similar invalid
constructs) back into the main code, making it produce a message on stderr.
(doc/Psfiles.htm [1.6]: 2000/08/23 02:22:39 lpd)

Documents the deletion of lib/pdfeof.ps. (doc/News.htm [1.59]: 2000/08/23
02:23:54 lpd)

Starts to implement the PDF 1.4 transparency features. All API and operator
additions are now implemented (at least as stubs) and documented, as is
bookkeeping for the new scalar graphics state members (but not for the soft
masks or the transparency group stack). (doc/Language.htm [1.12]: 2000/08/23
21:46:31 lpd)

Adds a project to avoid DCT-decoding followed by DCT-encoding images when
writing PDF files. (doc/Projects.htm [1.16]: 2000/08/24 03:43:12 lpd)

Adds a new equality-testing virtual procedure for color spaces.
(doc/News.htm [1.60]: 2000/08/24 05:42:30 lpd)

Brings the (still mostly stubbed) transparency code to a more
self-consistent state. (doc/Language.htm [1.13]: 2000/08/30 01:34:40 lpd)

Completes the parsing of .{begin,end}transparency{group,mask}, except for
the TransferFunction for masks. The specification is still subject to
change. (doc/Language.htm [1.14]: 2000/08/30 15:03:36 lpd)

Divides the list of documents according to whether the document is for
users, for developers, or both. (doc/Readme.htm [1.11]: 2000/08/30 21:24:00
lpd)

Adds more documentation for the transparency rendering stack.
(doc/Language.htm [1.15]: 2000/08/31 03:34:41 lpd)

Adds a requirement to only use ANSI standard C library facilities.
(doc/C-style.htm [1.2]: 2000/09/08 04:53:14 lpd)

Changes the -Zv switch to trace alpha/transparency-related features.
(doc/News.htm [1.61], doc/Use.htm [1.11]: 2000/09/10 05:23:10 lpd)

Implements another chunk of the PDF 1.4 transparency features, fixing some
bugs in the previous code. (doc/Language.htm [1.16]: 2000/09/10 05:26:27
lpd)

Documents the addition of (limited) PDF 1.4 output capabilities.
(doc/Ps2pdf.htm [1.16]: 2000/09/11 02:08:58 lpd)

Moves the Matte entry of soft mask images from the main structure to the
mask structures, and changes Matted to has_Matte. (doc/Language.htm [1.17]:
2000/09/11 04:08:13 lpd)

Documents division of bug-gs mailbox into bug-gs, bug-gs-dev, and
bug-gs-beta. (doc/Bug-form.htm [1.7], doc/Bug-info.htm [1.5]: 2000/09/15
23:44:21 lpd)

Adds a paragraph explaining why and how the AFPL is not an Open Source /
Free Software license. (doc/PUBLIC [1.2], doc/Public.htm [1.2]: 2000/09/18
22:26:32 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript; also updates many internal references from
Aladdin Ghostscript to AFPL Ghostscript, and from Aladdin Enterprises to
artofcode LLC. (doc/Bug-form.htm [1.8], doc/Bug-info.htm [1.6],
doc/C-style.htm [1.3], doc/Changes.htm [1.17], doc/Commprod.htm [1.2],
doc/Copying.htm [1.2], doc/Current.htm [1.2], doc/DLL.htm [1.2],
doc/Devices.htm [1.12], doc/Drivers.htm [1.7], doc/Fonts.htm [1.7],
doc/Helpers.htm [1.3], doc/History1.htm [1.2], doc/History2.htm [1.2],
doc/History3.htm [1.2], doc/History4.htm [1.2], doc/History5.htm [1.4],
doc/History6.htm [1.12], doc/Htmstyle.htm [1.5], doc/Install.htm [1.6],
doc/Language.htm [1.18], doc/Lib.htm [1.2], doc/Maintain.htm [1.3],
doc/Make.htm [1.14], doc/New-user.htm [1.11], doc/News.htm [1.62],
doc/PUBLIC [1.3], doc/Projects.htm [1.17], doc/Ps2epsi.htm [1.3],
doc/Ps2pdf.htm [1.17], doc/Psfiles.htm [1.7], doc/Public.htm [1.3],
doc/Readme.htm [1.12], doc/Release.htm [1.18], doc/Source.htm [1.2],
doc/Tester.htm [1.2], doc/Unix-lpr.htm [1.2], doc/Use.htm [1.12],
doc/Xfonts.htm [1.2], doc/gs-vms.hlp [1.2]: 2000/09/19 21:37:50 lpd)

Updates README from Readme.htm. (doc/README [1.3]: 2000/09/19 23:39:31 lpd)

Changes the default Windows installation directory from c:\Aladdin to c:\gs.
(doc/Install.htm [1.7], doc/News.htm [1.63]: 2000/09/22 05:32:17 lpd)

Replaces the OpenVMS installation instructions with an improved set
contributed by a user. (doc/Helpers.htm [1.4], doc/Install.htm [1.8]:
2000/09/22 20:33:19 lpd)

Adds a project for fixing PDF files that have gotten mangled by EOL
conversion. (doc/Projects.htm [1.18]: 2000/09/25 14:40:37 lpd)

Adds a reference to PreScript, another free text extraction program based on
Ghostscript. (doc/New-user.htm [1.12]: 2000/09/26 01:04:40 lpd)

Documentation changes in preparation for 6.30 release. Replaced some contact
information, updated version numbers. (doc/Bug-form.htm [1.9],
doc/Bug-info.htm [1.7], doc/Commprod.htm [1.3], doc/Copying.htm [1.3],
doc/Current.htm [1.3], doc/DLL.htm [1.3], doc/Devices.htm [1.13],
doc/Drivers.htm [1.8], doc/Fonts.htm [1.8], doc/Helpers.htm [1.5],
doc/History1.htm [1.3], doc/History2.htm [1.3], doc/History3.htm [1.3],
doc/History4.htm [1.3], doc/History5.htm [1.5], doc/History6.htm [1.13],
doc/Htmstyle.htm [1.6], doc/Install.htm [1.9], doc/Language.htm [1.19],
doc/Lib.htm [1.3], doc/Maintain.htm [1.4], doc/Make.htm [1.15],
doc/New-user.htm [1.13], doc/News.htm [1.64], doc/Projects.htm [1.19],
doc/Ps2epsi.htm [1.4], doc/Ps2pdf.htm [1.18], doc/Psfiles.htm [1.8],
doc/README [1.4], doc/Readme.htm [1.13], doc/Release.htm [1.19],
doc/Source.htm [1.3], doc/Tester.htm [1.3], doc/Unix-lpr.htm [1.3],
doc/Use.htm [1.13], doc/Xfonts.htm [1.3], doc/gs-vms.hlp [1.3]: 2000/10/04
04:33:27 raph)

Bring version numbers and dates up to date. Small bug fix in toolbin/pre to
make it able to handle months with leading zeros. (doc/C-style.htm [1.4],
doc/Helpers.htm [1.6], man/ps2ps.1 [1.7]: 2000/10/04 05:18:54 raph)

</pre><h2><a name="6.30 Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- The PostScript image writing drivers (psmono/gray/rgb) didn't set
the page size in the output, and didn't produce DSC-compliant output.
(devs.mak [1.31]: 2000/08/09 06:55:45 lpd)
	- The FlateEncode and zlibEncode filters didn't implement the
"Effort" parameter. (fix from Alex Cherepanov) (int.mak [1.28]: 2000/08/09
16:55:24 lpd)
	- Because "-" as an OutputFile now references the %stdout IODevice,
it no longer worked in configurations without a PostScript interpreter.
Fixing this required factoring out the stdin/out/err IODevices and providing
an implementation that didn't reference the PostScript interpreter.
(int.mak [1.32], lib.mak [1.34], ugcclib.mak [1.3]: 2000/09/07 06:14:45 lpd)
	- Configurations including PDF but not PostScript didn't include all
the PostScript LL3 features needed to interpret PDF 1.3 et seq.
(int.mak [1.33]: 2000/09/07 06:35:06 lpd)
	- Cleans up some missing and incorrect dependencies.
(devs.mak [1.33], int.mak [1.34], lib.mak [1.35]: 2000/09/11 04:43:09 lpd)
	- The definition of PSRCDIR was inconsistent with the definition of
PVERSION. (openvms.mak [1.5]: 2000/09/22 04:05:40 lpd)
	- The pgnm and pnm drivers didn't properly detect the presence of
gray shades or color in images, sometimes causing gray or color information
to be lost in the output. (fix contributed by a user) (devs.mak [1.35]:
2000/09/23 04:52:56 lpd)

Initializes files for the 6.24 fileset. (version.mak [1.19]: 2000/08/09
16:54:02 lpd)

Adds a mention of the Color LaserJet 4500 as a color PCL XL printer.
(devs.mak [1.32]: 2000/08/17 20:43:50 lpd)

Changes text to make it clear that Yves Arrouye no longer maintains the BJC
drivers that he wrote. (contrib.mak [1.19]: 2000/08/21 14:38:28 lpd)

Puts the logic for detecting garbage after %%EOF (and some similar invalid
constructs) back into the main code, making it produce a message on stderr.
(unixinst.mak [1.12]: 2000/08/23 02:22:39 lpd)

Starts to implement the PDF 1.4 transparency features. All API and operator
additions are now implemented (at least as stubs) and documented, as is
bookkeeping for the new scalar graphics state members (but not for the soft
masks or the transparency group stack). (int.mak [1.29], lib.mak [1.30]:
2000/08/23 21:46:31 lpd)

Adds a new equality-testing virtual procedure for color spaces.
(lib.mak [1.31]: 2000/08/24 05:42:30 lpd)

Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc.
and banding don't do the right thing yet. (int.mak [1.30],
version.mak [1.20]: 2000/08/25 01:46:48 lpd)

Brings the (still mostly stubbed) transparency code to a more
self-consistent state. (lib.mak [1.32]: 2000/08/30 01:34:40 lpd)

Finishes the code for parsing ImageType 103 (soft-mask) images.
(int.mak [1.31], lib.mak [1.33]: 2000/08/30 04:30:05 lpd)

*** empty log message *** (int.mak [1.35]: 2000/09/14 19:46:05 alexcher)

Undoes uncommented and in some cases inappropriate changes. (int.mak [1.36]:
2000/09/18 06:28:58 lpd)

Updates license notices to reference the AFPL (like the rest of Ghostscript)
rather than simply saying "All rights reserved". (toolbin/3way.tcl [1.2],
toolbin/cvs2hist.py [1.2], toolbin/errlist.tcl [1.2],
toolbin/gsindent [1.2], toolbin/gsmake.tcl [1.4], toolbin/headers.tcl [1.2],
toolbin/leaks.tcl [1.2], toolbin/makegnu.tcl [1.2],
toolbin/makeset.tcl [1.4], toolbin/pre [1.6], toolbin/precheck.tcl [1.2],
toolbin/suite.tcl [1.2], toolbin/tmake.tcl [1.2]: 2000/09/19 17:30:25 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, and changes internal references in various
scripts. (toolbin/3way.tcl [1.3], toolbin/cvs2hist.py [1.3],
toolbin/errlist.tcl [1.3], toolbin/gsindent [1.3], toolbin/gsmake.tcl [1.5],
toolbin/headers.tcl [1.3], toolbin/leaks.tcl [1.3],
toolbin/makegnu.tcl [1.3], toolbin/makeset.tcl [1.5], toolbin/pre [1.7],
toolbin/precheck.tcl [1.3], toolbin/suite.tcl [1.3],
toolbin/tmake.tcl [1.3]: 2000/09/19 18:10:51 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (all-arch.mak [1.5], bcwin32.mak [1.3], cfonts.mak [1.2],
contrib.mak [1.20], devs.mak [1.34], dvx-gcc.mak [1.4], dvx-head.mak [1.2],
dvx-tail.mak [1.3], dwmain.rc [1.2], dwsetup.def [1.2], dwsetup.rc [1.2],
dwuninst.def [1.2], dwuninst.rc [1.3]: 2000/09/19 19:00:08 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gs.mak [1.2], gs16spl.rc [1.2], gsdll2.rc [1.2],
gsdll32.rc [1.2]: 2000/09/19 19:00:25 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gsos2.rc [1.2], gspmdrv.rc [1.2]: 2000/09/19 19:00:30 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gswin.rc [1.2]: 2000/09/19 19:00:33 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (int.mak [1.37], jpeg.mak [1.3], lib.mak [1.36],
libpng.mak [1.2], msvc32.mak [1.5], msvccmd.mak [1.5], msvclib.mak [1.5],
msvctail.mak [1.4], openvms.mak [1.4], openvms.mmk [1.5], os2.mak [1.7],
pcwin.mak [1.2]: 2000/09/19 19:00:45 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (ugcclib.mak [1.4], unix-aux.mak [1.3], unix-end.mak [1.2],
unix-gcc.mak [1.7], unixansi.mak [1.5], unixhead.mak [1.2],
unixinst.mak [1.13], unixlink.mak [1.2], unixtrad.mak [1.5],
version.mak [1.21], watc.mak [1.5], watclib.mak [1.5], watcw32.mak [1.4],
wccommon.mak [1.3], wctail.mak [1.2], winint.mak [1.5], winlib.mak [1.4],
winplat.mak [1.2], wmin.mak [1.2], zlib.mak [1.2]: 2000/09/19 19:00:52 lpd)

Add commands to make the target GLGENDIR and BINDIR directories so that a
clean build works automatically. (msvctail.mak [1.5]: 2000/09/21 15:14:37
rayjj)

Changes the default Windows installation directory from c:\Aladdin to c:\gs.
(dwsetup.rc [1.3]: 2000/09/22 05:32:17 lpd)

Changes the default Windows Start Menu Folder from "Aladdin" to
"Ghostscript". (dwsetup.rc [1.4]: 2000/09/22 05:35:02 lpd)

Updates the makefiles from libpng version 1.0.5 to 1.0.8.
(all-arch.mak [1.6], bcwin32.mak [1.4], dvx-gcc.mak [1.5], libpng.mak [1.3],
msvc32.mak [1.6], msvclib.mak [1.6], openvms.mak [1.6], openvms.mmk [1.6],
os2.mak [1.8], ugcclib.mak [1.5], unix-gcc.mak [1.8], unixansi.mak [1.6],
unixtrad.mak [1.6], watc.mak [1.6], watclib.mak [1.6], watcw32.mak [1.5]:
2000/09/25 15:06:28 lpd)

Documentation changes in preparation for 6.30 release. Replaced some contact
information, updated version numbers. (version.mak [1.22]: 2000/10/04
04:33:29 raph)

Bring version numbers and dates up to date. Small bug fix in toolbin/pre to
make it able to handle months with leading zeros. (toolbin/pre [1.8]:
2000/10/04 05:18:54 raph)

</pre><h2><a name="6.30 Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- ps2pdf13.cmd set the output PDF version to 1.2 rather than 1.3.
(lib/ps2pdf13.cmd [1.2]: 2000/09/10 19:32:44 lpd)
	- The OpenVMS Fontmap had gotten badly out of date; specifically, it
didn't reference the URW++ fonts distributed with Ghostscript.
(lib/Fontmap.VMS [1.2]: 2000/09/22 03:30:21 lpd)

Puts the logic for detecting garbage after %%EOF (and some similar invalid
constructs) back into the main code, making it produce a message on stderr.
(lib/pdfeof.ps [1.2]: 2000/08/23 02:22:39 lpd)

Adds script / batch / command files for producing PDF 1.4 output.
(lib/ps2pdf14 [1.1], lib/ps2pdf14.bat [1.1], lib/ps2pdf14.cmd [1.1]:
2000/09/10 19:33:47 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, and changes a few other internal
references. (lib/Fontmap.ATB [1.2], lib/Fontmap.ATM [1.2],
lib/Fontmap.GS [1.2], lib/Fontmap.OS2 [1.2], lib/Fontmap.SGI [1.2],
lib/Fontmap.Sol [1.2], lib/Fontmap.Ult [1.2], lib/addxchar.ps [1.2],
lib/afmdiff.awk [1.2], lib/align.ps [1.2], lib/bdftops.ps [1.2],
lib/caption.ps [1.2], lib/cbjc600.ppd [1.2], lib/cbjc800.ppd [1.2],
lib/cid2code.ps [1.2], lib/docie.ps [1.2], lib/errpage.ps [1.2],
lib/font2c.ps [1.2], lib/font2pcl.ps [1.2], lib/gslp.ps [1.2],
lib/gsnup.ps [1.2], lib/image-qa.ps [1.2], lib/impath.ps [1.2],
lib/jispaper.ps [1.2], lib/lines.ps [1.2], lib/markhint.ps [1.2],
lib/markpath.ps [1.2], lib/packfile.ps [1.2], lib/pcharstr.ps [1.2],
lib/pdf2dsc.ps [1.2], lib/pdfopt.ps [1.3], lib/pdfwrite.ps [1.3],
lib/pfbtopfa.ps [1.2], lib/ppath.ps [1.2], lib/ps2ai.ps [1.2],
lib/ps2ascii.ps [1.2], lib/ps2epsi [1.4], lib/ps2epsi.ps [1.4],
lib/showchar.ps [1.2], lib/stcinfo.ps [1.2], lib/stcolor.ps [1.2],
lib/stocht.ps [1.3], lib/traceimg.ps [1.2], lib/traceop.ps [1.2],
lib/type1enc.ps [1.2], lib/type1ops.ps [1.2], lib/uninfo.ps [1.2],
lib/unprot.ps [1.2], lib/viewcmyk.ps [1.2], lib/viewgif.ps [1.2],
lib/viewmiff.ps [1.2], lib/viewpbm.ps [1.2], lib/viewpcx.ps [1.2],
lib/viewps2a.ps [1.2], lib/wftopfa.ps [1.2], lib/winmaps.ps [1.2],
lib/wrfont.ps [1.2], lib/zeroline.ps [1.2]: 2000/09/19 18:29:11 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (bench.c [1.3], echogs.c [1.2]: 2000/09/19 19:00:08 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (genarch.c [1.2], genconf.c [1.3], gendev.c [1.2],
genht.c [1.2], geninit.c [1.3], gp_dvx.c [1.2], gp_iwatc.c [1.4],
gp_mktmp.c [1.2], gp_mshdl.c [1.2], gp_msio.c [1.2], gp_mslib.c [1.2],
gp_mswin.c [1.3], gp_ntfs.c [1.4], gp_os2.c [1.4], gp_os9.c [1.3],
gp_sysv.c [1.2], gp_unix.c [1.3], gp_vms.c [1.4], gp_wgetv.c [1.3],
gp_win32.c [1.2], gp_wsync.c [1.2], gs16spl.c [1.2]: 2000/09/19 19:00:23
lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gsdll.c [1.3], gserver.c [1.2]: 2000/09/19 19:00:27 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gspmdrv.c [1.2]: 2000/09/19 19:00:31 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (scfdgen.c [1.2]: 2000/09/19 19:00:48 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (zdosio.c [1.2]: 2000/09/19 19:00:53 lpd)

When GSC environment variable is not set, gssetgs.bat fails to set it, which
makes ps2pdf.bat and several other scripts fail on Windows NT 4.0 with the
following misleading error message: "_.at" This file doesn't have a program
associated with it ... This change fixes the problem.
(lib/gssetgs.bat [1.2]: 2000/10/01 15:25:37 alexcher)

</pre><h2><a name="6.30 Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- The PostScript image writing drivers (psmono/gray/rgb) didn't set
the page size in the output, and didn't produce DSC-compliant output.
(gdevps.c [1.11], gdevpsci.c [1.2], gdevpsim.c [1.3], gdevpsu.c [1.1],
gdevpsu.h [1.1]: 2000/08/09 06:55:45 lpd)
	- the user-contributed cfax driver didn't correctly handle page
widths other than the standard fax widths, and didn't write the required
end-of-document marker. (gdevcfax.c [1.2]: 2000/08/17 04:43:25 lpd)
	- Setting parameters for the PS/PDF writer reset any unspecified
*Dict parameter dictionaries to the empty dictionary, rather than leaving
them alone. (gdevpsdp.c [1.6]: 2000/08/18 03:18:59 lpd)
	- BJC printers with different X and Y resolution produced incorrect
output. Also removes the comment asking users to report problems to Yves
Arrouye, since he no longer maintains this code. (gdevcdj.c [1.3]:
2000/08/21 14:43:17 lpd)
	- The emulation of XPutImage (Ghostscript*useXPutImage: 0) was
broken. (gdevx.c [1.6]: 2000/08/21 17:23:26 lpd)
	- Dictionary-valued device parameters for high-level devices could
be freed while the device still referred to them. (gdevpsdp.c [1.7]:
2000/08/31 15:55:46 lpd)
	- Cleans up some missing and incorrect dependencies.
(gdevsco.c [1.2]: 2000/09/11 04:43:09 lpd)
	- Works around a gcc code generation bug that sometimes caused gray
colors to be written out as RGB in PDF files. (Minor performance issue
only.) (gdevpsdu.c [1.6]: 2000/09/11 21:12:12 lpd)
	- The pgnm and pnm drivers didn't properly detect the presence of
gray shades or color in images, sometimes causing gray or color information
to be lost in the output. (fix contributed by a user) (gdevpbm.c [1.3]:
2000/09/23 04:52:57 lpd)

In the X Windows driver, changes XFlush() to XSync(False) so that updates
will actually complete before the command prompt appears. (gdevx.c [1.5],
gdevxini.c [1.8]: 2000/08/19 03:31:44 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdev3852.c [1.2], gdev3b1.c [1.2], gdev4081.c [1.2],
gdev8510.c [1.2], gdev8bcm.c [1.2], gdev8bcm.h [1.2], gdevadmp.c [1.2],
gdevatx.c [1.6], gdevbit.c [1.2], gdevbj10.c [1.3], gdevbjc.h [1.2],
gdevbjcl.c [1.2], gdevbjcl.h [1.2], gdevbmp.c [1.3], gdevbmp.h [1.2],
gdevbmpa.c [1.3], gdevbmpc.c [1.2], gdevccr.c [1.2], gdevcdj.c [1.4],
gdevcfax.c [1.3], gdevcgm.c [1.2], gdevcgml.c [1.2], gdevcgml.h [1.2],
gdevcgmx.h [1.2], gdevcif.c [1.2], gdevclj.c [1.2], gdevcljc.c [1.2],
gdevcp50.c [1.2], gdevcslw.c [1.2], gdevdcrd.c [1.2], gdevdcrd.h [1.2],
gdevdfax.c [1.3], gdevdjet.c [1.6], gdevdjtc.c [1.2], gdevdljm.c [1.4],
gdevdljm.h [1.4], gdevdm24.c [1.2], gdevegaa.asm [1.2], gdevepsc.c [1.2],
gdevepsn.c [1.2], gdevescp.c [1.2], gdevevga.c [1.2], gdevfax.c [1.2],
gdevfax.h [1.2], gdevherc.c [1.2], gdevhl7x.c [1.3], gdevimgn.c [1.2],
gdevjpeg.c [1.2], gdevl256.c [1.3], gdevl31s.c [1.2], gdevlbp8.c [1.2],
gdevlj56.c [1.2], gdevlp8k.c [1.2], gdevlxm.c [1.2], gdevmeds.c [1.2]:
2000/09/19 19:00:11 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevmeds.h [1.2], gdevmgr.c [1.2], gdevmgr.h [1.2],
gdevmiff.c [1.2], gdevmswn.c [1.2], gdevmswn.h [1.2], gdevmsxf.c [1.2],
gdevn533.c [1.2], gdevo182.c [1.2], gdevokii.c [1.2], gdevos2p.c [1.3],
gdevp2up.c [1.2], gdevpbm.c [1.2], gdevpccm.c [1.2], gdevpccm.h [1.3],
gdevpcfb.c [1.2], gdevpcfb.h [1.2], gdevpcl.c [1.4]: 2000/09/19 19:00:14
lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevpcl.h [1.4], gdevpcx.c [1.2], gdevpe.c [1.2]: 2000/09/19
19:00:17 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevphex.c [1.2], gdevpjet.c [1.2], gdevpm.c [1.2],
gdevpm.h [1.2], gdevpng.c [1.3], gdevps.c [1.12], gdevpsdf.h [1.8],
gdevpsdi.c [1.12], gdevpsdp.c [1.8], gdevpsds.c [1.4], gdevpsds.h [1.4],
gdevpsdu.c [1.7], gdevpsim.c [1.4], gdevpsu.c [1.2], gdevpsu.h [1.2],
gdevpx.c [1.4], gdevpxat.h [1.3], gdevpxen.h [1.3], gdevpxop.h [1.2],
gdevpxut.c [1.2], gdevpxut.h [1.2], gdevs3ga.c [1.2], gdevsco.c [1.3],
gdevsj48.c [1.2], gdevsnfb.c [1.2], gdevsppr.c [1.2], gdevstc.c [1.2],
gdevstc.h [1.2], gdevstc1.c [1.2], gdevstc2.c [1.2], gdevstc3.c [1.2],
gdevstc4.c [1.2], gdevsun.c [1.2]: 2000/09/19 19:00:20 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevsunr.c [1.2], gdevsvga.c [1.2], gdevsvga.h [1.2],
gdevtfax.c [1.4], gdevtfax.h [1.4], gdevtfnx.c [1.3], gdevtifs.c [1.3],
gdevtifs.h [1.3], gdevtknk.c [1.2], gdevupd.c [1.3], gdevvglb.c [1.3],
gdevwddb.c [1.2], gdevwdib.c [1.2], gdevwpr2.c [1.5], gdevwprn.c [1.2],
gdevx.c [1.7], gdevx.h [1.4], gdevxalt.c [1.2], gdevxcmp.c [1.2],
gdevxcmp.h [1.2], gdevxini.c [1.9], gdevxres.c [1.3], gdevxxf.c [1.5]:
2000/09/19 19:00:23 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (png_.h [1.2]: 2000/09/19 19:00:47 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (x_.h [1.2]: 2000/09/19 19:00:52 lpd)

</pre><h2><a name="6.30 PDF writer"></a>PDF writer</h2><pre>

Fixes problems:
	- The SrcPg entry in ANN pdfmarks was (effectively) ignored. (bug
introduced between 5.50 and 6.01.) (gdevpdfm.c [1.5]: 2000/08/31 18:49:59
lpd)
	- When CompatibilityLevel < 1.4, transparency was ignored rather
than being rendered explicitly. (gdevpdfg.c [1.9]: 2000/09/11 21:13:49 lpd)

Works around the bug in Acrobat Reader (all versions) that apparently treats
stroked fonts as filled fonts, ignoring the PaintType. (gdevpdft.c [1.15]:
2000/08/31 03:23:26 lpd)

Adds the ability to write some PDF 1.4 constructs: graphics state parameters
AIS, BM, ca/CA, and TK, and images with soft masks (except for Matte).
(gdevpdfg.c [1.8], gdevpdfg.h [1.8], gdevpdfi.c [1.18]: 2000/09/11 02:14:09
lpd)

Adds the ability to write PDF 1.4 soft-masked images. (gdevpdfi.c [1.19],
gdevpdfo.c [1.4], gdevpdfo.h [1.4], gdevpdfv.c [1.2]: 2000/09/11 04:10:42
lpd)

Replaces "Distiller" with our program name in the Info Producer string.
(gdevpdf.c [1.20], gdevpdfm.c [1.6], gdevpdfu.c [1.11], gdevpdfx.h [1.21]:
2000/09/12 02:03:35 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevpdf.c [1.21], gdevpdfb.c [1.2], gdevpdfc.c [1.12],
gdevpdfd.c [1.10], gdevpdfe.c [1.4], gdevpdff.c [1.8], gdevpdff.h [1.4],
gdevpdfg.c [1.10], gdevpdfg.h [1.9], gdevpdfi.c [1.20], gdevpdfj.c [1.5],
gdevpdfm.c [1.7], gdevpdfo.c [1.5], gdevpdfo.h [1.5], gdevpdfp.c [1.10],
gdevpdfr.c [1.4], gdevpdft.c [1.16], gdevpdfu.c [1.12], gdevpdfv.c [1.3],
gdevpdfw.c [1.5], gdevpdfx.h [1.22]: 2000/09/19 19:00:17 lpd)

</pre><h2><a name="6.30 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>

Fixes problems:
	- PDF files with embedded CID fonts with FontName != BaseFont
(prohibited by the PDF specification, but produced by some Adobe software)
caused an error. (lib/pdf_font.ps [1.11], lib/pdf_ops.ps [1.8]: 2000/08/08
22:29:12 lpd)
	- Setting the color (fill or stroke) sometimes overwrote the color
associated with an outer gsave level. (lib/pdf_ops.ps [1.9]: 2000/08/24
01:55:37 lpd)
	- The PDF text rendering modes that included clipping (modes 4-7)
didn't work. The fix is a bit of a hack, but it's much closer to being
right. (lib/pdf_ops.ps [1.12]: 2000/08/31 02:05:55 lpd)
	- The new code for detecting whether a page used any transparency
features could cause an error. (lib/pdf_main.ps [1.14]: 2000/09/10 18:48:26
lpd)
	- Filters with indirect object parameters caused an error. (Fix from
Artifex.) (lib/pdf_base.ps [1.9]: 2000/09/14 00:38:05 lpd)
	- The page dictionary was left on the operand stack while the page
was being rendered, causing the sc[n]/SC[N] operators to give an error if
the color consisted of only a single value. (bug introduced after 6.23)
(lib/pdf_main.ps [1.18]: 2000/09/18 06:38:38 lpd)

Puts the logic for detecting garbage after %%EOF (and some similar invalid
constructs) back into the main code, making it produce a message on stderr.
(lib/pdf_main.ps [1.11]: 2000/08/23 02:22:39 lpd)

Implements the op, OP, and OPM (overprint control) elements of ExtGStates.
(lib/pdf_draw.ps [1.17], lib/pdf_ops.ps [1.10]: 2000/08/24 02:26:52 lpd)

Implements the new PDF 1.4 scalar graphics state parameters (ca, CA, SMask,
AIS, BM, TK). The implementation of SMask is a stub.
(lib/pdf_draw.ps [1.18], lib/pdf_ops.ps [1.11]: 2000/08/24 03:04:29 lpd)

If a PDF file is invalid but repairable, prints out the Producer as part of
the warning message. (lib/pdf_main.ps [1.12]: 2000/08/24 04:18:40 lpd)

Adds most of the code needed to support PDF 1.4 transparency groups and soft
masks in the graphics state. (lib/pdf_draw.ps [1.19], lib/pdf_ops.ps [1.13]:
2000/09/08 04:54:10 lpd)

Implements another chunk of the PDF 1.4 transparency features, fixing some
bugs in the previous code. (lib/pdf_draw.ps [1.20], lib/pdf_main.ps [1.13],
lib/pdf_ops.ps [1.14]: 2000/09/10 05:26:27 lpd)

Moves the Matte entry of soft mask images from the main structure to the
mask structures, and changes Matted to has_Matte. (lib/pdf_draw.ps [1.21]:
2000/09/11 04:08:13 lpd)

Renders pages that use any transparency features as transparency groups.
(lib/pdf_main.ps [1.15]: 2000/09/12 20:36:23 lpd)

*** empty log message *** (lib/pdf_main.ps [1.16]: 2000/09/15 03:51:54
alexcher)

Undoes uncommented and in some cases inappropriate changes.
(lib/pdf_main.ps [1.17]: 2000/09/18 06:28:58 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, and changes a few other internal
references. (lib/pdf_base.ps [1.10], lib/pdf_draw.ps [1.22],
lib/pdf_font.ps [1.12], lib/pdf_main.ps [1.19], lib/pdf_ops.ps [1.15],
lib/pdf_sec.ps [1.2]: 2000/09/19 18:29:11 lpd)

</pre><h2><a name="6.30 Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- The FlateEncode and zlibEncode filters didn't implement the
"Effort" parameter. (fix from Alex Cherepanov) (zfzlib.c [1.2]: 2000/08/09
16:55:25 lpd)
	- The *ACSImageDict parameter dictionaries weren't being set for the
/default configuration; the *ACSImageDict parameters were never recognized,
because their names were spelled incorrectly as *ACSDict. (Two separate
bugs.) (lib/gs_pdfwr.ps [1.5]: 2000/08/18 03:20:12 lpd)
	- When given an array of the wrong size, a number of operators
produced a limitcheck error rather than a rangecheck. (idparam.c [1.2],
idparam.h [1.2], zcie.c [1.3], zfont1.c [1.7], zfunc.c [1.5],
zfunc0.c [1.2], zimage2.c [1.2], zimage3.c [1.2], zpcolor.c [1.2],
zshade.c [1.3]: 2000/08/23 01:45:08 lpd)
	- The stub implementations of .{set,current}{opacity,shape}mask
didn't {pop the argument}{push null}. (ztrans.c [1.2]: 2000/08/24 03:03:18
lpd)
	- The BeOS C compiler objected to some int/bool mismatches.
(icontext.c [1.5]: 2000/08/31 03:51:29 lpd)
	- If changing LanguageLevels caused a dictionary to grow, memory
could be corrupted. (zmisc2.c [1.2]: 2000/08/31 14:43:58 lpd)
	- Because "-" as an OutputFile now references the %stdout IODevice,
it no longer worked in configurations without a PostScript interpreter.
Fixing this required factoring out the stdin/out/err IODevices and providing
an implementation that didn't reference the PostScript interpreter.
(ziodev.c [1.2], ziodevs.c [1.1]: 2000/09/07 06:14:45 lpd)
	- .LocalDefaults was stored in a local array in the (global)
ColorSpace category dictionary, causing memory anomalies with multiple
contexts. (lib/gs_ll3.ps [1.6], lib/gs_res.ps [1.13]: 2000/09/20 07:15:11
lpd)
	- A missing cast caused the picky OpenVMS compiler to complain.
(zdevcal.c [1.3]: 2000/09/22 04:18:17 lpd)
	- Attempting to show an undefined character code in a TrueType font
with no .notdef entry caused an error. (lib/gs_ttf.ps [1.8]: 2000/09/23
18:47:06 lpd)

Initializes files for the 6.24 fileset. (lib/gs_init.ps [1.21]: 2000/08/09
16:54:02 lpd)

Adds the PDF "overprint mode" to the graphics state. THE ACTUAL
FUNCTIONALITY IS NOT IMPLEMENTED YET. (zcssepr.c [1.4]: 2000/08/23 17:54:16
lpd)

Starts to implement the PDF 1.4 transparency features. All API and operator
additions are now implemented (at least as stubs) and documented, as is
bookkeeping for the new scalar graphics state members (but not for the soft
masks or the transparency group stack). (ztrans.c [1.1]: 2000/08/23 21:46:31
lpd)

Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc.
and banding don't do the right thing yet. (igstate.h [1.2], ztrans.c [1.3]:
2000/08/25 01:46:48 lpd)

Implements some minor improvements to the freelist algorithms that can
produce nearly a factor of 2 speedup in some allocation-intensive
situations. (isave.c [1.2]: 2000/08/26 03:21:34 lpd)

Brings the (still mostly stubbed) transparency code to a more
self-consistent state. (ztrans.c [1.4]: 2000/08/30 01:34:40 lpd)

Finishes the code for parsing ImageType 103 (soft-mask) images.
(ztrans.c [1.5]: 2000/08/30 04:30:06 lpd)

Completes the parsing of .{begin,end}transparency{group,mask}, except for
the TransferFunction for masks. The specification is still subject to
change. (ztrans.c [1.6]: 2000/08/30 15:03:36 lpd)

*Really* finishes the transparency rendering stack operators (the previous
version didn't even compile), except for TransferFunction. (ztrans.c [1.7]:
2000/08/30 21:11:55 lpd)

Implements another chunk of the PDF 1.4 transparency features, fixing some
bugs in the previous code. (lib/gs_ll3.ps [1.4], ztrans.c [1.8]: 2000/09/10
05:26:27 lpd)

Checks that the TransferFunction of a soft mask is 1-in, 1-out; sets Matted
correctly in the soft mask parameters passed to the graphics library.
(ztrans.c [1.9]: 2000/09/11 02:10:28 lpd)

Moves the Matte entry of soft mask images from the main structure to the
mask structures, and changes Matted to has_Matte. (ztrans.c [1.10]:
2000/09/11 04:08:13 lpd)

Upgrades the proposed driver interface transparency extension from comments
to macros, changing the name 'discard_transparency_level' to
'discard_transparency_layer'. (ztrans.c [1.11]: 2000/09/11 20:13:31 lpd)

*** empty log message *** (lib/gs_init.ps [1.22], zmatrix.c [1.2]:
2000/09/14 19:46:05 alexcher)

Undoes uncommented and in some cases inappropriate changes.
(lib/gs_init.ps [1.23], zmatrix.c [1.3]: 2000/09/18 06:28:58 lpd)

Updates the license notice to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript. (examples/waterfal.ps [1.2]: 2000/09/19
18:03:40 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, and changes a few other internal
references. (lib/gs_agl.ps [1.2], lib/gs_btokn.ps [1.3],
lib/gs_ccfnt.ps [1.4], lib/gs_ce_e.ps [1.2], lib/gs_cff.ps [1.7],
lib/gs_cidfn.ps [1.17], lib/gs_cmap.ps [1.6], lib/gs_cmdl.ps [1.2],
lib/gs_css_e.ps [1.2], lib/gs_dbt_e.ps [1.2], lib/gs_diskf.ps [1.2],
lib/gs_dpnxt.ps [1.2], lib/gs_dps.ps [1.4], lib/gs_dps1.ps [1.2],
lib/gs_dps2.ps [1.2], lib/gs_epsf.ps [1.2], lib/gs_fform.ps [1.2],
lib/gs_fonts.ps [1.9], lib/gs_frsd.ps [1.4], lib/gs_il1_e.ps [1.2],
lib/gs_il2_e.ps [1.2], lib/gs_init.ps [1.24], lib/gs_kanji.ps [1.2],
lib/gs_ksb_e.ps [1.2], lib/gs_l2img.ps [1.2], lib/gs_lev2.ps [1.6],
lib/gs_lgo_e.ps [1.3], lib/gs_lgx_e.ps [1.2], lib/gs_ll3.ps [1.5],
lib/gs_mex_e.ps [1.2], lib/gs_mgl_e.ps [1.3], lib/gs_mro_e.ps [1.2],
lib/gs_pdf_e.ps [1.2], lib/gs_pdfwr.ps [1.6], lib/gs_pfile.ps [1.2],
lib/gs_rdlin.ps [1.2], lib/gs_res.ps [1.12], lib/gs_setpd.ps [1.5],
lib/gs_statd.ps [1.4], lib/gs_std_e.ps [1.2], lib/gs_sym_e.ps [1.2],
lib/gs_trap.ps [1.3], lib/gs_ttf.ps [1.7], lib/gs_typ32.ps [1.2],
lib/gs_typ42.ps [1.2], lib/gs_type1.ps [1.4], lib/gs_wan_e.ps [1.2],
lib/gs_wl1_e.ps [1.2], lib/gs_wl2_e.ps [1.2], lib/gs_wl5_e.ps [1.2]:
2000/09/19 18:29:11 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (bfont.h [1.3], btoken.h [1.4], ccfont.h [1.2],
dpmainc.c [1.2], dstack.h [1.2], dwdll.cpp [1.2], dwdll.h [1.2],
dwimg.cpp [1.2], dwimg.h [1.2], dwinst.cpp [1.2], dwinst.h [1.2],
dwmain.cpp [1.2], dwmain.h [1.2], dwmainc.cpp [1.3], dwnodll.cpp [1.2],
dwsetup.cpp [1.3], dwsetup.h [1.2], dwtext.cpp [1.2], dwtext.h [1.2],
dwuninst.cpp [1.2], dwuninst.h [1.2], errors.h [1.2], estack.h [1.2],
files.h [1.2]: 2000/09/19 19:00:09 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (ghost.h [1.2], gs.c [1.2]: 2000/09/19 19:00:23 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (ialloc.c [1.2], ialloc.h [1.2], iastate.h [1.2],
iastruct.h [1.2], ibnum.c [1.2], ibnum.h [1.2], iccfont.c [1.2],
iccinit0.c [1.2], icfontab.c [1.2], ichar.h [1.3], ichar1.h [1.3],
icharout.h [1.2], icid.h [1.2], icie.h [1.2], icolor.h [1.2], iconf.c [1.2],
icontext.c [1.6], icontext.h [1.2], icremap.h [1.2], icsmap.h [1.2],
icstate.h [1.4], iddict.h [1.2], iddstack.h [1.2], idebug.c [1.2],
idebug.h [1.2], idict.c [1.2], idict.h [1.2], idictdef.h [1.2],
idosave.h [1.2], idparam.c [1.3], idparam.h [1.3], idsdata.h [1.2],
idstack.c [1.2], idstack.h [1.2], iesdata.h [1.2], iestack.h [1.2],
ifcid.h [1.2], ifilter.h [1.3], ifilter2.h [1.2], ifont.h [1.4],
ifont1.h [1.3], ifont2.h [1.2], ifont42.h [1.3], ifrpred.h [1.2],
ifunc.h [1.3], ifwpred.h [1.2], igc.c [1.2]: 2000/09/19 19:00:41 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (igc.h [1.2], igcref.c [1.2], igcstr.c [1.3], igcstr.h [1.2],
igstate.h [1.3], iht.h [1.2], iimage.h [1.2], iimage2.h [1.2],
iinit.c [1.2], iinit.h [1.2], ilevel.h [1.2], ilocate.c [1.3],
imain.c [1.2], imain.h [1.2], imainarg.c [1.4], imainarg.h [1.2],
imemory.h [1.2], iminst.h [1.2], iname.c [1.3], iname.h [1.2],
inamedef.h [1.2], inameidx.h [1.2], inames.h [1.2], inamestr.h [1.2],
inobtokn.c [1.2], inouparm.c [1.2], interp.c [1.6], interp.h [1.2],
iosdata.h [1.2], iostack.h [1.2], ipacked.h [1.2], iparam.c [1.5],
iparam.h [1.2], iparray.h [1.2], ipcolor.h [1.2], ireclaim.c [1.2],
iref.h [1.3], isave.c [1.3], isave.h [1.2], iscan.c [1.5], iscan.h [1.4],
iscanbin.c [1.5], iscanbin.h [1.2], iscannum.c [1.2], iscannum.h [1.2],
isdata.h [1.2], isstate.h [1.2], istack.c [1.2], istack.h [1.2],
istkparm.h [1.2], istream.h [1.2], istruct.h [1.2], itoken.h [1.2],
iutil.c [1.2], iutil.h [1.2], iutil2.c [1.2], iutil2.h [1.2],
ivmem2.h [1.2]: 2000/09/19 19:00:44 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (ivmspace.h [1.2], main.h [1.2], oparc.h [1.2],
opcheck.h [1.2], opdef.h [1.2], oper.h [1.2], opextern.h [1.2],
ostack.h [1.2], sbhc.c [1.2], sbhc.h [1.2], sbwbs.c [1.2], sbwbs.h [1.2],
sfilter1.c [1.5]: 2000/09/19 19:00:47 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (shcgen.c [1.2], shcgen.h [1.2], smtf.c [1.2], smtf.h [1.2],
store.h [1.2], zarith.c [1.4], zarray.c [1.2], zbfont.c [1.6],
zbseq.c [1.4], zcfont.c [1.2], zchar.c [1.3], zchar1.c [1.5],
zchar2.c [1.2], zchar32.c [1.2], zchar42.c [1.2], zcharout.c [1.2],
zcharx.c [1.3], zcid.c [1.3], zcie.c [1.4], zcolor.c [1.4]: 2000/09/19
19:00:50 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (zcolor1.c [1.3], zcolor2.c [1.3], zcontext.c [1.6],
zcontrol.c [1.3], zcrd.c [1.2], zcsdevn.c [1.3], zcsindex.c [1.3],
zcspixel.c [1.2], zcssepr.c [1.5], zdevcal.c [1.2], zdevice.c [1.3],
zdevice2.c [1.3], zdict.c [1.3], zdouble.c [1.2], zdpnext.c [1.2],
zdps.c [1.4], zdps1.c [1.2], zfbcp.c [1.3], zfcid.c [1.10], zfcid0.c [1.4],
zfcid1.c [1.2], zfcmap.c [1.8], zfdctd.c [1.3], zfdcte.c [1.3],
zfdecode.c [1.3], zfile.c [1.5], zfileio.c [1.9], zfilter.c [1.4],
zfilter2.c [1.3], zfilterx.c [1.2], zfmd5.c [1.2], zfont.c [1.2],
zfont0.c [1.3], zfont1.c [1.8], zfont2.c [1.3], zfont32.c [1.2],
zfont42.c [1.5], zfproc.c [1.4], zfrsd.c [1.4], zfunc.c [1.6],
zfunc0.c [1.3], zfunc3.c [1.2], zfunc4.c [1.5], zfzlib.c [1.3],
zgeneric.c [1.3], zgstate.c [1.2], zhsb.c [1.2], zht.c [1.2], zht1.c [1.2],
zht2.c [1.2], zimage.c [1.5], zimage2.c [1.3], zimage3.c [1.3],
ziodev.c [1.3], ziodev2.c [1.3], ziodevs.c [1.2], zmath.c [1.3],
zmatrix.c [1.4], zmedia2.c [1.2], zmisc.c [1.2], zmisc1.c [1.3],
zmisc2.c [1.3], zmisc3.c [1.2], zpacked.c [1.2], zpaint.c [1.2],
zpath.c [1.2], zpath1.c [1.2], zpcolor.c [1.3], zrelbit.c [1.2],
zrop.c [1.2], zshade.c [1.4], zstack.c [1.2], zstring.c [1.2],
zsysvm.c [1.2], ztoken.c [1.6], ztrans.c [1.12], ztrap.c [1.2],
ztype.c [1.3], zupath.c [1.2], zusparam.c [1.3], zvmem.c [1.2],
zvmem2.c [1.2]: 2000/09/19 19:00:53 lpd)

Change to avoid multiply defined rect_param when NOPRIVATE is used. This
module uses 4 element X/Y/width/Height, not a gs_rect so xywh_param is a
better name. (zdpnext.c [1.3]: 2000/09/21 15:12:01 rayjj)

Changes the default Windows installation directory from c:\Aladdin to c:\gs.
(dwsetup.cpp [1.4]: 2000/09/22 05:32:17 lpd)

Changes the default Windows Start Menu Folder from "Aladdin" to
"Ghostscript". (dwsetup.cpp [1.5]: 2000/09/22 05:35:02 lpd)

Documentation changes in preparation for 6.30 release. Replaced some contact
information, updated version numbers. (lib/gs_init.ps [1.25]: 2000/10/04
04:33:29 raph)

</pre><h2><a name="6.30 Streams"></a>Streams</h2><pre>

Fixes problems:
	- s_add_filter used min_out_size rather than min_in_size for the
minimum buffer size, which could cause an endless loop when writing to the
filter. (This only affected filters allocated by C code, not by the
PostScript filter operator.) (stream.c [1.7], stream.h [1.6]: 2000/08/16
01:26:22 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (sa85d.c [1.2], sa85d.h [1.2], sa85x.h [1.3], sbcp.c [1.3],
sbcp.h [1.2], sbtx.h [1.2], scanchar.h [1.2], scantab.c [1.2], scf.h [1.2],
scfd.c [1.2], scfe.c [1.2], scfetab.c [1.2], scfparam.c [1.2], scfx.h [1.2],
scommon.h [1.2], sdcparam.c [1.2], sdcparam.h [1.2], sdct.h [1.2],
sdctc.c [1.2], sdctd.c [1.2], sdcte.c [1.2], sddparam.c [1.2],
sdeparam.c [1.2], seexec.c [1.3], sfilter.h [1.6], sfilter2.c [1.3],
sfxboth.c [1.2], sfxfd.c [1.5]: 2000/09/19 19:00:47 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (sfxstdio.c [1.4], shc.c [1.2], shc.h [1.2], siinterp.c [1.2],
siinterp.h [1.2], siscale.c [1.4], siscale.h [1.2], sisparam.h [1.2],
sjpeg.h [1.2], sjpegc.c [1.2], sjpegd.c [1.2], sjpege.c [1.2],
slzwc.c [1.2], slzwce.c [1.2], slzwd.c [1.2], slzwx.h [1.2], smd5.c [1.3],
smd5.h [1.2], spdiff.c [1.3], spdiffx.h [1.2], spngp.c [1.2],
spngpx.h [1.2], spprint.c [1.2], spprint.h [1.2], spsdf.c [1.4],
spsdf.h [1.2], srdline.h [1.2], srld.c [1.2], srle.c [1.2], srlx.h [1.2],
sstring.c [1.2], sstring.h [1.2], stat_.h [1.5], std.h [1.3],
stdio_.h [1.2], stdpre.h [1.2], stream.c [1.8], stream.h [1.7],
strimpl.h [1.2], string_.h [1.2], szlibc.c [1.2], szlibd.c [1.2],
szlibe.c [1.2], szlibx.h [1.2], szlibxx.h [1.2]: 2000/09/19 19:00:50 lpd)

</pre><h2><a name="6.30 Library"></a>Library</h2><pre>

Fixes problems:
	- Parameter lists didn't have proper GC descriptors; garbage
collection could mangle keys and collection values in non-transient
parameter lists (such as distiller parameters). (gscparam.c [1.5]:
2000/08/19 03:01:30 lpd)
	- gdev_vector_dopath could return 1, which value was then propagated
to callers that interpreted it differently. (gdevvec.c [1.5],
gdevvec.h [1.3]: 2000/08/20 00:21:42 lpd)
	- An AIX compiler could get confused if the last elements of a
structure were individual bytes. (gzpath.h [1.2]: 2000/08/24 19:43:48 lpd)
	- If the OutputFile of a high-level device was ever set, any
subsequent execution of setpagedevice would cause a rangecheck in
.installpagedevice. (gdevvec.c [1.6]: 2000/08/31 02:04:50 lpd)
	- Type 2 CharStrings didn't insert an explicit closepath at the end
of each subpath. (This matters for charpath followed by stroke.)
(gstype2.c [1.5]: 2000/08/31 02:16:45 lpd)
	- Type 2 fonts should insert an explicit closepath only if the
font's PaintType != 1. (gstype2.c [1.6]: 2000/08/31 03:21:45 lpd)
	- The BeOS C compiler objected to some int/bool mismatches.
(gp.h [1.4], gxfill.c [1.4], gxtext.h [1.2]: 2000/08/31 03:51:29 lpd)
	- Because "-" as an OutputFile now references the %stdout IODevice,
it no longer worked in configurations without a PostScript interpreter.
Fixing this required factoring out the stdin/out/err IODevices and providing
an implementation that didn't reference the PostScript interpreter.
(gsiodevs.c [1.1], gslib.c [1.2]: 2000/09/07 06:14:45 lpd)
	- Fixes a type error caused by a change in the TransferFunction
member of gs_transparency_mask_params_t. (gstrans.c [1.7]: 2000/09/10
18:20:09 lpd)
	- Several places in the code for ImageType 3x (soft-masked) images
didn't correctly handle the case where only one of the two masks was
supplied (which is always the case for PDF). (gximag3x.c [1.4]: 2000/09/11
02:12:19 lpd)
	- The -Zv tracing messages for gs_begin_transparency_{group,mask}
were incorrect. (gstrans.c [1.10]: 2000/09/12 20:35:05 lpd)
	- Printing the program name and version didn't use fprintf, so it
didn't work properly with the stdout redirection on Windows. (fix from
Artifex) (gsmisc.c [1.7]: 2000/09/18 06:22:35 lpd)
	- Undefined characters in CID-keyed (FMapType 9) composite fonts
caused an infinite loop, because the parsing index was never advanced past
the character. (gsfcmap.c [1.7]: 2000/09/21 02:44:44 lpd)
	- CID-keyed (FMapType 9) composite fonts didn't return the correct
parsed character code, possibly causing widthshow or cshow to produce
incorrect output. (gsfcmap.c [1.8], gsfcmap.h [1.4]: 2000/09/21 03:02:03
lpd)
	- Works around ANSI C's unreasonable new aliasing restrictions.
(gsnogc.c [1.5]: 2000/09/22 04:17:52 lpd)
	- The 'head' table in embedded TrueType fonts had a length of 56; it
should have a length of 54 and be followed by 2 padding bytes.
(gdevpsft.c [1.4]: 2000/09/26 06:42:05 lpd)

Initializes files for the 6.24 fileset. (gscdef.c [1.7]: 2000/08/09 16:54:02
lpd)

Adds the PDF "overprint mode" to the graphics state. THE ACTUAL
FUNCTIONALITY IS NOT IMPLEMENTED YET. (gscsepr.c [1.4], gscsepr.h [1.3],
gsstate.c [1.2], gxclpath.c [1.3], gxclpath.h [1.2], gxclrast.c [1.4],
gxistate.h [1.2]: 2000/08/23 17:54:14 lpd)

Starts to implement the PDF 1.4 transparency features. All API and operator
additions are now implemented (at least as stubs) and documented, as is
bookkeeping for the new scalar graphics state members (but not for the soft
masks or the transparency group stack). (gsistate.c [1.2], gsstate.c [1.3],
gstparam.h [1.1], gstrans.c [1.1], gstrans.h [1.1], gxclpath.c [1.4],
gxclpath.h [1.3], gxclrast.c [1.5], gxistate.h [1.3], gzstate.h [1.2]:
2000/08/23 21:46:31 lpd)

Adds a new equality-testing virtual procedure for color spaces.
(gscdevn.c [1.4], gscolor2.c [1.5], gscpixel.c [1.2], gscscie.c [1.2],
gscsepr.c [1.5], gscspace.c [1.3], gscspace.h [1.3], gspcolor.c [1.3],
gxcspace.h [1.3]: 2000/08/24 05:42:30 lpd)

Changes the band list representation of mask images to allow
BitsPerComponent > 1 (for soft masks). (gximage1.c [1.2]: 2000/08/24
17:58:18 lpd)

Adds Matte and has_Matte members to ImageType 1 images. These are only used
with the new transparency features. (gsiparam.h [1.2], gximage1.c [1.3]:
2000/08/24 19:20:12 lpd)

Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc.
and banding don't do the right thing yet. (gstparam.h [1.2],
gstrans.c [1.2], gstrans.h [1.2], gxcldev.h [1.2], gxclpath.c [1.5],
gxclpath.h [1.4]: 2000/08/25 01:46:48 lpd)

Changes remove_range_from_freelist to only scan relevant freelists, rather
than all of them. On some files, the speedup is dramatic. (gsalloc.c [1.6]:
2000/08/26 01:18:33 lpd)

Completes an edit that accidentally left the repository in an inconsistent
state. (gxclpath.c [1.6], gxclrast.c [1.6]: 2000/08/26 03:19:56 lpd)

Implements some minor improvements to the freelist algorithms that can
produce nearly a factor of 2 speedup in some allocation-intensive
situations. (gsalloc.c [1.7], gxalloc.h [1.4]: 2000/08/26 03:21:34 lpd)

Brings the (still mostly stubbed) transparency code to a more
self-consistent state. (gsipar3x.h [1.1], gsiparam.h [1.3],
gsstruct.h [1.4], gstparam.h [1.3], gstrans.c [1.3], gstrans.h [1.3],
gxclpath.c [1.7], gxclpath.h [1.5], gxclrast.c [1.7], gximag3x.c [1.1],
gximag3x.h [1.1], gximage1.c [1.4], gxistate.h [1.4]: 2000/08/30 01:34:40
lpd)

Finishes the code for parsing ImageType 103 (soft-mask) images.
(gximag3x.c [1.2]: 2000/08/30 04:29:56 lpd)

Completes the parsing of .{begin,end}transparency{group,mask}, except for
the TransferFunction for masks. The specification is still subject to
change. (gstparam.h [1.4], gstrans.c [1.4], gstrans.h [1.4]: 2000/08/30
15:03:36 lpd)

Adds documentation on proposed driver interface additions for managing the
transparency rendering stack. (gstrans.c [1.5]: 2000/08/31 20:22:47 lpd)

Adds color space type names for tracing/debugging. (gscspace.h [1.4]:
2000/09/10 05:21:44 lpd)

Changes the -Zv switch to trace alpha/transparency-related features.
(gdevabuf.c [1.2]: 2000/09/10 05:23:10 lpd)

Implements another chunk of the PDF 1.4 transparency features, fixing some
bugs in the previous code. (gstparam.h [1.5], gstrans.c [1.6],
gximag3x.c [1.3]: 2000/09/10 05:26:27 lpd)

Moves the Matte entry of soft mask images from the main structure to the
mask structures, and changes Matted to has_Matte. (gsipar3x.h [1.2],
gximag3x.c [1.5], gximag3x.h [1.2]: 2000/09/11 04:08:13 lpd)

Adds a default implementation of soft-masked images that simply ignores the
mask. (gximag3x.c [1.6]: 2000/09/11 04:38:01 lpd)

Upgrades the proposed driver interface transparency extension from comments
to macros, changing the name 'discard_transparency_level' to
'discard_transparency_layer'. (gstrans.c [1.8], gstrans.h [1.5]: 2000/09/11
20:13:31 lpd)

Finishes the (dummy) implementation of the transparency layer stack in the
graphics library. (gsistate.c [1.3], gsstate.c [1.4], gstparam.h [1.6],
gstrans.c [1.9], gxistate.h [1.5]: 2000/09/11 22:20:05 lpd)

Makes the default string matching parameters public. (gsutil.c [1.3],
gsutil.h [1.2]: 2000/09/12 02:02:52 lpd)

*** empty log message *** (gsmisc.c [1.6]: 2000/09/15 03:01:51 alexcher)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (close_.h [1.2], ctype_.h [1.2], dirent_.h [1.2],
dos_.h [1.2], errno_.h [1.2], fcntl_.h [1.3], gconf.c [1.2], gconf.h [1.2],
gdebug.h [1.2], gdevabuf.c [1.3], gdevalph.c [1.2], gdevbbox.c [1.3],
gdevbbox.h [1.2]: 2000/09/19 19:00:09 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevcmap.c [1.2], gdevcmap.h [1.2], gdevdbit.c [1.2],
gdevddrw.c [1.2], gdevdflt.c [1.3], gdevdgbr.c [1.2], gdevdrop.c [1.3],
gdevemap.c [1.2], gdevhit.c [1.2], gdevht.c [1.3], gdevht.h [1.2],
gdevm1.c [1.2], gdevm16.c [1.2], gdevm2.c [1.2], gdevm24.c [1.2],
gdevm32.c [1.2], gdevm4.c [1.2], gdevm8.c [1.2], gdevmem.c [1.2],
gdevmem.h [1.3], gdevmpla.c [1.2], gdevmpla.h [1.2], gdevmr1.c [1.2],
gdevmr2n.c [1.2], gdevmr8n.c [1.2], gdevmrop.h [1.3], gdevmrun.c [1.2],
gdevmrun.h [1.2], gdevnfwd.c [1.3]: 2000/09/19 19:00:12 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevpipe.c [1.3], gdevplnx.c [1.2], gdevplnx.h [1.2],
gdevppla.c [1.2], gdevppla.h [1.2], gdevprn.c [1.5], gdevprn.h [1.6],
gdevprna.c [1.2], gdevprna.h [1.2], gdevpsf.h [1.7], gdevpsf1.c [1.5],
gdevpsf2.c [1.7], gdevpsfm.c [1.3], gdevpsft.c [1.3], gdevpsfu.c [1.4],
gdevpsfx.c [1.5], gdevrops.c [1.3]: 2000/09/19 19:00:20 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gdevtrac.c [1.2], gdevvec.c [1.7], gdevvec.h [1.4],
gp.h [1.5], gp_dosfe.c [1.2], gp_dosfs.c [1.2], gp_getnv.c [1.2],
gp_msdos.c [1.2], gp_nsync.c [1.2], gp_psync.c [1.2], gp_strdl.c [1.2],
gp_unifn.c [1.2], gp_unifs.c [1.3], gpcheck.h [1.2], gpgetenv.h [1.2],
gpmisc.c [1.7], gpmisc.h [1.2], gpsync.h [1.2], gsalloc.c [1.8],
gsalloc.h [1.2], gsalpha.c [1.2], gsalpha.h [1.2], gsalphac.c [1.2],
gsalphac.h [1.2], gsargs.c [1.2], gsargs.h [1.3], gsbitmap.h [1.2],
gsbitops.c [1.2], gsbitops.h [1.2], gsbittab.c [1.2], gsbittab.h [1.2]:
2000/09/19 19:00:23 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gsccode.h [1.4], gsccolor.h [1.2], gscdef.c [1.8],
gscdefs.h [1.2], gscdevn.c [1.5], gscdevn.h [1.3], gschar.c [1.3],
gschar.h [1.3], gschar0.c [1.2], gscie.c [1.3], gscie.h [1.2],
gsciemap.c [1.3], gscindex.h [1.2], gsclipsr.c [1.2], gsclipsr.h [1.2],
gscolor.c [1.4], gscolor.h [1.3], gscolor1.c [1.3], gscolor1.h [1.2],
gscolor2.c [1.6], gscolor2.h [1.3], gscolor3.c [1.4], gscolor3.h [1.2],
gscompt.h [1.2], gscoord.c [1.5], gscoord.h [1.2], gscparam.c [1.6],
gscpixel.c [1.3], gscpixel.h [1.2], gscpm.h [1.2], gscrd.c [1.2],
gscrd.h [1.2], gscrdp.c [1.2], gscrdp.h [1.2], gscrypt1.c [1.2],
gscrypt1.h [1.2], gscscie.c [1.3], gscsel.h [1.2], gscsepnm.h [1.2],
gscsepr.c [1.6], gscsepr.h [1.4], gscspace.c [1.4], gscspace.h [1.5],
gscssub.c [1.2], gscssub.h [1.2], gsdcolor.h [1.3], gsdevice.c [1.7],
gsdevice.h [1.3], gsdevmem.c [1.2], gsdparam.c [1.4], gsdpnext.h [1.2],
gsdps.c [1.2], gsdps.h [1.2], gsdps1.c [1.2], gsdsrc.c [1.2],
gsdsrc.h [1.3], gserror.h [1.2], gserrors.h [1.2], gsexit.h [1.2],
gsfcid.c [1.4], gsfcmap.c [1.6], gsfcmap.h [1.3], gsfemu.c [1.2],
gsflip.c [1.2], gsflip.h [1.2], gsfname.c [1.2], gsfname.h [1.2],
gsfont.c [1.2], gsfont.h [1.2], gsfont0.c [1.2], gsfunc.c [1.4],
gsfunc.h [1.4], gsfunc0.c [1.3], gsfunc0.h [1.2], gsfunc3.c [1.4],
gsfunc3.h [1.2], gsfunc4.c [1.3], gsfunc4.h [1.2], gsfuncv.c [1.2],
gsfuncv.h [1.2]: 2000/09/19 19:00:26 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gsgc.h [1.2], gshsb.c [1.2], gshsb.h [1.2], gsht.c [1.2],
gsht.h [1.2], gsht1.c [1.2], gsht1.h [1.2], gshtscr.c [1.3], gshtx.c [1.2],
gshtx.h [1.2], gsimage.c [1.3], gsimage.h [1.2], gsimpath.c [1.2],
gsinit.c [1.2], gsio.h [1.4], gsiodev.c [1.3], gsiodevs.c [1.2],
gsipar3x.h [1.3], gsiparam.h [1.4], gsiparm2.h [1.2], gsiparm3.h [1.4],
gsiparm4.h [1.2], gsistate.c [1.4], gsjconf.h [1.2], gslib.c [1.3],
gslib.h [1.2], gsline.c [1.2], gsline.h [1.2], gslparam.h [1.2],
gsmalloc.c [1.3], gsmalloc.h [1.2], gsmatrix.c [1.2], gsmatrix.h [1.2],
gsmdebug.h [1.2], gsmemlok.c [1.3], gsmemlok.h [1.2], gsmemory.c [1.2],
gsmemory.h [1.2], gsmemraw.h [1.2], gsmemret.c [1.2], gsmemret.h [1.2],
gsmisc.c [1.8], gsnogc.c [1.4], gsnogc.h [1.2], gsnorop.c [1.2],
gsnotify.c [1.2], gsnotify.h [1.2], gspaint.c [1.2], gspaint.h [1.2],
gsparam.c [1.4], gsparam.h [1.7], gsparam2.c [1.2], gsparams.c [1.2],
gsparams.h [1.2], gsparamx.c [1.3], gsparamx.h [1.3], gspath.c [1.2],
gspath.h [1.2], gspath1.c [1.2], gspath2.h [1.2], gspcolor.c [1.4],
gspcolor.h [1.2], gspenum.h [1.2], gsptype1.c [1.2], gsptype1.h [1.2]:
2000/09/19 19:00:29 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gsptype2.c [1.3], gsptype2.h [1.2], gsrect.h [1.2],
gsrefct.h [1.2], gsrop.c [1.2], gsrop.h [1.2], gsropc.c [1.2],
gsropc.h [1.2], gsropt.h [1.3], gsroptab.c [1.2], gsshade.c [1.3],
gsshade.h [1.3], gsstate.c [1.5], gsstate.h [1.2], gsstruct.h [1.5],
gsstype.h [1.2], gstext.c [1.3], gstext.h [1.3], gstparam.h [1.7],
gstrans.c [1.11], gstrans.h [1.6], gstrap.c [1.3], gstrap.h [1.3],
gstype1.c [1.5], gstype1.h [1.2], gstype2.c [1.7], gstype42.c [1.7],
gstypes.h [1.2], gsuid.h [1.2], gsutil.c [1.4], gsutil.h [1.3],
gsxfont.h [1.2], gx.h [1.2], gxacpath.c [1.3], gxalloc.h [1.5],
gxalpha.h [1.2], gxarith.h [1.2], gxband.h [1.2], gxbcache.c [1.2],
gxbcache.h [1.2], gxbitfmt.h [1.2], gxbitmap.h [1.2], gxbitops.h [1.2],
gxccache.c [1.2], gxccman.c [1.2], gxcdevn.h [1.2], gxchar.c [1.2],
gxchar.h [1.2], gxchrout.c [1.2], gxchrout.h [1.2], gxcht.c [1.2],
gxcid.h [1.3], gxcie.h [1.2], gxcindex.h [1.2], gxclbits.c [1.2],
gxcldev.h [1.3], gxclfile.c [1.2], gxclimag.c [1.2], gxclio.h [1.2],
gxclip.c [1.3], gxclip.h [1.2], gxclip2.c [1.3], gxclip2.h [1.2],
gxclipm.c [1.3], gxclipm.h [1.2], gxclipsr.h [1.2], gxclist.c [1.3],
gxclist.h [1.2], gxcllzw.c [1.2], gxclmem.c [1.2], gxclmem.h [1.2]:
2000/09/19 19:00:32 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gxclpage.c [1.2], gxclpage.h [1.2], gxclpath.c [1.8],
gxclpath.h [1.6], gxclrast.c [1.8], gxclread.c [1.2], gxclrect.c [1.2],
gxclutil.c [1.2], gxclzlib.c [1.2], gxcmap.c [1.3], gxcmap.h [1.2],
gxcolor2.h [1.4], gxcomp.h [1.2], gxcoord.h [1.2], gxcpath.c [1.3],
gxcpath.h [1.2], gxcspace.h [1.4], gxctable.c [1.3], gxctable.h [1.2],
gxcvalue.h [1.2], gxdcconv.c [1.3], gxdcconv.h [1.2], gxdcolor.c [1.3],
gxdcolor.h [1.3], gxdda.h [1.2], gxdevbuf.h [1.2], gxdevcli.h [1.3],
gxdevice.h [1.4], gxdevmem.h [1.2], gxdevrop.h [1.2], gxdht.h [1.4],
gxdhtres.h [1.2], gxdither.c [1.2], gxdither.h [1.2], gxfarith.h [1.3],
gxfcache.h [1.2], gxfcid.h [1.6], gxfcmap.h [1.5], gxfill.c [1.5],
gxfixed.h [1.2], gxfmap.h [1.3], gxfont.h [1.2], gxfont0.h [1.3],
gxfont1.h [1.4], gxfont42.h [1.4], gxfrac.h [1.2], gxftype.h [1.2],
gxfunc.h [1.3], gxgetbit.h [1.2], gxhint1.c [1.2], gxhint2.c [1.2],
gxhint3.c [1.2], gxht.c [1.2], gxht.h [1.2], gxhtbit.c [1.3],
gxhttile.h [1.2], gxhttype.h [1.2], gxi12bit.c [1.2], gxiclass.h [1.2],
gxicolor.c [1.2], gxidata.c [1.4], gxifast.c [1.2], gximag3x.c [1.7]:
2000/09/19 19:00:35 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gximag3x.h [1.3], gximage.c [1.2], gximage.h [1.2],
gximage1.c [1.5], gximage2.c [1.2], gximage3.c [1.6], gximage3.h [1.4],
gximage4.c [1.3], gximono.c [1.2], gxino12b.c [1.2], gxiodev.h [1.2],
gxiparam.h [1.2], gxipixel.c [1.2], gxiscale.c [1.2], gxistate.h [1.6],
gxline.h [1.2], gxlum.h [1.2], gxmatrix.h [1.4], gxmclip.c [1.2],
gxmclip.h [1.2], gxobj.h [1.2], gxop1.h [1.2], gxp1fill.c [1.2],
gxp1impl.h [1.2], gxpageq.c [1.2], gxpageq.h [1.2], gxpaint.c [1.2],
gxpaint.h [1.2], gxpath.c [1.2], gxpath.h [1.2], gxpath2.c [1.2],
gxpcache.h [1.2], gxpcmap.c [1.3], gxpcolor.h [1.2], gxpcopy.c [1.3],
gxpdash.c [1.2], gxpflat.c [1.2], gxropc.h [1.2], gxrplane.h [1.2],
gxsample.c [1.2], gxsample.h [1.2], gxshade.c [1.4], gxshade.h [1.3],
gxshade1.c [1.5], gxshade4.c [1.3], gxshade4.h [1.2], gxshade6.c [1.3],
gxstate.h [1.2], gxstdio.h [1.2], gxstroke.c [1.2], gxsync.c [1.2],
gxsync.h [1.2], gxtext.h [1.3], gxtmap.h [1.2], gxttf.h [1.2],
gxtype1.c [1.6], gxtype1.h [1.4], gxxfont.h [1.2], gzacpath.h [1.2],
gzcpath.h [1.2], gzht.h [1.3], gzline.h [1.2], gzpath.h [1.3]: 2000/09/19
19:00:38 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gzstate.h [1.3]: 2000/09/19 19:00:41 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (jerror_.h [1.2], malloc_.h [1.2], math_.h [1.2],
memory_.h [1.2], pipe_.h [1.2]: 2000/09/19 19:00:47 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (time_.h [1.2], vmsmath.h [1.2], windows_.h [1.2]: 2000/09/19
19:00:51 lpd)

Bring version numbers and dates up to date. Small bug fix in toolbin/pre to
make it able to handle months with leading zeros. (gscdef.c [1.9]:
2000/10/04 05:18:54 raph)

</pre><h2><a name="6.30 ???Other???"></a>???Other???</h2><pre>

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gp_mswin.h [1.2]: 2000/09/19 19:00:24 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gsdll.h [1.2], gsdll32w.lnk [1.2], gsdllos2.h [1.2],
gsdllwin.h [1.2], gsjmorec.h [1.2]: 2000/09/19 19:00:27 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (gspmdrv.h [1.2]: 2000/09/19 19:00:31 lpd)

Updates the license notices to reflect the name change from Aladdin
Ghostscript to AFPL Ghostscript, as well as some internal references to the
program name. (iutilasm.asm [1.2]: 2000/09/19 19:00:46 lpd)

<hr>

<h1><a name="Version6.23"></a>Version 6.23 (2000-08-07)</h1>

<p>
This fileset consists mostly of bug fixes.

<p>
All problems registered on SourceForge numbered 110922 or lower are closed,
except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
104118, 105289, 105558, 106340, 106652, 109350, 110445, 110898, 110922.

<p>
The following projects are in a partially completed state in the PDF writer:

<ul>

<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started.

</ul>

<pre>

<h2><a name="6.23_Incompatible_changes"></a>Incompatible changes</h2>

(Drivers)
	- With high-level drivers ([e]pswrite, pdfwrite, pxl*, cgm*),
changing the OutputFile after writing one or more pages now causes an error.
(Interpreter)
	- By default, copydevice will only copy a device prototype.
	- Some internal references to contexts in zcontext.c are changed
from direct pointers to context indices.
	- Renames internal types to add a _t: ctx_list, ctx_status,
gs_context, gs_condition, gs_lock.
(Library)
	- By default, gs_copydevice[2] will only copy a device prototype.


<h2><a name="6.23 Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- Local GC in a multi-context system caused a crash. Also updates
all the internal type names in zcontext.c by adding a _t suffix if
necessary. (doc/News.htm [1.54]: 2000/07/10 23:56:55 lpd)
	- With some high-level drivers, changing the OutputFile after
opening the device could cause a crash. After the fix, doing this works
properly if no pages have actually been written out, but causes a rangecheck
error if any pages have been written. (This is required to maintain internal
consistency.) (doc/News.htm [1.55]: 2000/07/12 14:02:03 lpd)
	- The documented limit on the length of a file name was incorrect.
(doc/Language.htm [1.9]: 2000/08/03 06:45:25 lpd)

Increments the version number, in preparation for the next fileset.
(doc/News.htm [1.52]: 2000/07/06 02:45:06 lpd)

Adds a finish_copydevice device procedure, for cleaning up after copying the
bits of a device prototype or instance. For safety, the default
implementation only allows copying the prototype, not instances. This is a
NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device
instance never worked reliably, so it should not have been used this way
before. (doc/Drivers.htm [1.4], doc/News.htm [1.53]: 2000/07/06 04:13:24
lpd)

Updates the references to the Computer Modern Fontmap on CTAN.
(doc/Fonts.htm [1.5], doc/New-user.htm [1.8]: 2000/07/09 23:29:25 lpd)

Updates a couple of release procedures. (doc/Release.htm [1.15]: 2000/07/10
19:32:59 lpd)

Adds documentation and a script for preparing GNU releases from Aladdin
releases. (doc/Release.htm [1.16]: 2000/07/17 17:10:57 lpd)

Clarifies that device parameters set with -d or -s can be changed
subsequently. (doc/Use.htm [1.8]: 2000/07/17 20:13:03 lpd)

Adds a project for making Ghostscript work as a Netscape browser plug-in.
(doc/Projects.htm [1.13]: 2000/07/19 22:50:18 lpd)

Removes the SVG driver from the list of projects, since there is a group
close to completing one (referenced from the Ghostscript home page on the
Web). (doc/Projects.htm [1.14]: 2000/07/20 14:49:52 lpd)

Directs users to the Ghostscript home page on the Web for information about
third-party drivers. (doc/New-user.htm [1.9]: 2000/07/20 14:50:34 lpd)

Adds a partially implemented driver that just produces a trace of its
drawing calls. This driver also serves as a minimal example of how to
implement the high-level driver operations. (doc/Drivers.htm [1.5]:
2000/07/29 04:00:00 lpd)

Updates dates and version #s for the 6.23 fileset. (doc/Bug-info.htm [1.4],
doc/Changes.htm [1.15], doc/Drivers.htm [1.6], doc/Fonts.htm [1.6],
doc/History5.htm [1.3], doc/Htmstyle.htm [1.4], doc/Install.htm [1.5],
doc/Language.htm [1.10], doc/New-user.htm [1.10], doc/News.htm [1.56],
doc/Projects.htm [1.15], doc/Ps2pdf.htm [1.15], doc/Release.htm [1.17],
doc/Use.htm [1.9], man/ps2ps.1 [1.6]: 2000/08/07 17:48:09 lpd)

</pre><h2><a name="6.23 Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- $(GLGEN)/md5.h wasn't deleted after compilation. (lib.mak [1.26]:
2000/07/09 23:19:59 lpd)
	- TrueType font loading now requires the Adobe glyph list, but this
dependency was missing from the makefile. (int.mak [1.26]: 2000/07/19
08:11:15 lpd)
	- During compilation, GLSRCDIR was searched before GLGENDIR. (We're
very surprised that this didn't cause detectable trouble before.)
(lib.mak [1.27]: 2000/07/19 14:32:00 lpd)
	- The dependency on gsparamx.$(OBJ) was incorrectly attached to
pdfwrite.dev rather than psdf.dev. (devs.mak [1.30]: 2000/08/03 17:42:52
lpd)
	- 'pre' didn't work with dates in August or September (Tcl doesn't
accept 08 and 09 as valid numbers). (toolbin/pre [1.5]: 2000/08/07 17:35:27
lpd)

Increments the version number, in preparation for the next fileset.
(version.mak [1.17]: 2000/07/06 02:45:06 lpd)

Adds some user-contributed comments about using the Canon BJ200 driver with
the BJ300. (contrib.mak [1.18]: 2000/07/11 15:33:19 lpd)

Updates the (user-contributed) all-architecture build script to work around
a detail in the SGI IRIX C library header files. (all-arch.mak [1.4]:
2000/07/15 19:23:45 lpd)

Adds documentation and a script for preparing GNU releases from Aladdin
releases. (toolbin/makegnu.tcl [1.1]: 2000/07/17 17:10:57 lpd)

Adds a partially implemented driver that just produces a trace of its
drawing calls. This driver also serves as a minimal example of how to
implement the high-level driver operations. (lib.mak [1.28]: 2000/07/29
04:00:00 lpd)

Changes 'gsmake' to report line number rather than character position for
errors and warnings. (toolbin/gsmake.tcl [1.3]: 2000/08/07 17:22:27 lpd)

Updates dates and version #s for the 6.23 fileset. (version.mak [1.18]:
2000/08/07 17:48:10 lpd)

Adds some missing dependencies. (int.mak [1.27], lib.mak [1.29]: 2000/08/07
17:52:22 lpd)

</pre><h2><a name="6.23 Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- An invalid file name or pattern passed to filenameforall would
(incorrectly) return an empty string rather than not returning any file
names at all. (gp_vms.c [1.3]: 2000/07/09 21:09:51 lpd)
	- Some DOS/Windows script files didn't use 'call', so they would
terminate execution prematurely if called from another script file.
(lib/ps2pdf.bat [1.5], lib/ps2pdf12.bat [1.4], lib/ps2pdf13.bat [1.4],
lib/ps2pdfxx.bat [1.8]: 2000/07/24 15:12:21 lpd)

</pre><h2><a name="6.23 Drivers"></a>Drivers</h2><pre>

Implements finish_copydevice for X windows, to allow copying instances as
well as the prototype. (gdevx.c [1.4], gdevx.h [1.3], gdevxini.c [1.7]:
2000/07/06 05:29:46 lpd)

Adds some user-contributed comments about using the Canon BJ200 driver with
the BJ300. (gdevbj10.c [1.2]: 2000/07/11 15:33:19 lpd)

</pre><h2><a name="6.23 PDF writer"></a>PDF writer</h2><pre>

Fixes problems:
	- M_2PI was predefined on some systems. (gdevpdfg.c [1.6]:
2000/07/09 23:11:31 lpd)
	- The word and character spacing values were not tracked correctly
when mixing text and graphics, sometimes producing horizontally misplaced
text. (gdevpdf.c [1.18], gdevpdfg.c [1.7], gdevpdfu.c [1.10],
gdevpdfx.h [1.19]: 2000/07/11 14:33:54 lpd)
	- 'show'ing an empty string could cause the next string to be
positioned incorrectly. (gdevpdft.c [1.14]: 2000/07/27 14:18:11 lpd)

Updates font embedding code to handle CIDFontType 2 fonts. NOT TESTED.
(gdevpdfe.c [1.3]: 2000/07/27 04:18:13 lpd)

Adds glyphs_used to FontDescriptors and pfd to std_fonts in the device
structure. WORK IN PROGRESS. (gdevpdf.c [1.19], gdevpdff.c [1.7],
gdevpdff.h [1.3], gdevpdfx.h [1.20]: 2000/07/27 04:19:24 lpd)

</pre><h2><a name="6.23 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>

Fixes problems:
	- If a badly-constructed PDF file referenced one of the 12 base
alphabetic fonts explicitly as a TrueType font (e.g., /BaseFont
/TimesNewRoman /Subtype /TrueType) without embedding it, the substituted
Type 1 font had the wrong Encoding. (lib/pdf_font.ps [1.10]: 2000/07/10
13:18:28 lpd)
	- Piped input beginning with a % caused an ioerror. (bug introduced
in 6.22) (lib/pdf_main.ps [1.10]: 2000/07/14 05:30:19 lpd)
	- As a result of some recent changes to fix other problems, setting
certain text state parameters (Tf, Ts, Tz) outside of text mode (BT/ET)
caused an error. (lib/pdf_ops.ps [1.6]: 2000/07/19 15:57:54 lpd)
	- Setting a singular text matrix (e.g., 0 0 0 0 <x> <y> Tm) caused
an error. (lib/pdf_ops.ps [1.7]: 2000/08/04 16:08:05 lpd)

</pre><h2><a name="6.23 Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- Removes the '?' procedure, which was defined solely for the
convenience of users who don't read the documentation and which interfered
with the operation of some code produced by the Adobe PS5 Windows driver.
(lib/gs_init.ps [1.18]: 2000/07/09 22:34:30 lpd)
	- A constant 1 should have been 1L, causing a warning on systems
where sizeof(long) > sizeof(int). (zarith.c [1.3]: 2000/07/09 23:10:58 lpd)
	- The workaround for attempting to set a 4-element PageSize value in
a page device sometimes caused an error. (bug introduced in 6.21)
(lib/gs_setpd.ps [1.4]: 2000/07/10 12:48:54 lpd)
	- Redefining setcolorspace could cause an infinite recursion.
(lib/gs_lev2.ps [1.5]: 2000/07/10 13:35:24 lpd)
	- Local GC in a multi-context system caused a crash. Also updates
all the internal type names in zcontext.c by adding a _t suffix if
necessary. (zcontext.c [1.4]: 2000/07/10 23:56:55 lpd)
	- A garbage collection occurring within a save could cause a memory
access error. (bug introduced in 6.22) (zcontext.c [1.5]: 2000/07/14
05:28:56 lpd)
	- Piped input beginning with a % caused an ioerror. (bug introduced
in 6.22) (zfileio.c [1.8]: 2000/07/14 05:30:19 lpd)
	- A garbage collection occurring while scanning a binary token
sequence could cause a syntaxerror or corrupted data. (iscan.c [1.3]:
2000/07/18 15:39:02 lpd)
	- (correction) An interruption (including a callout for a
procedure-based stream), not a garbage collection, while scanning a binary
token sequence could cause a syntaxerror or corrupted data. (iscan.c [1.4]:
2000/07/18 15:41:55 lpd)
	- When loading a TrueType font, invalid glyph numbers in the 'post'
table (which appear in some Adobe-created PDF files) caused an error instead
of being ignored; a test was backwards, causing some embedded TrueType fonts
in PDF files to produce a rangecheck error. (lib/gs_ttf.ps [1.6]: 2000/07/19
08:12:41 lpd)
	- When NOPROMPT was set, no flush or flushpage occurred at the end
of a page. (fix from an anonymous user on SourceForge)
(lib/gs_init.ps [1.19]: 2000/07/20 01:40:50 lpd)
	- Type 1 or Type 2 fonts with invalid LanguageGroup values < 0
caused an error. (Such fonts are invalid, but some real fonts have garbage
LanguageGroup values, and Adobe software doesn't give an error.)
(zfont1.c [1.6]: 2000/07/24 18:08:38 lpd)
	- Errors while executing gs_init.ps and other PostScript
initialization files were sometimes ignored, leading to mysterious error
messages later. (imainarg.c [1.3]: 2000/08/03 06:43:17 lpd)
	- Showing text with a singular matrix (scaling matrix x CTM) could
leave extraneous values on the operand stack. (zchar1.c [1.4]: 2000/08/04
16:09:30 lpd)

Increments the version number, in preparation for the next fileset.
(lib/gs_init.ps [1.15]: 2000/07/06 02:45:06 lpd)

Redefines [gs_]copydevice in terms of a new gs_copydevice2/.copydevice2,
which adds a Boolean keep_open argument that requests (but does not
guarantee) that a copy of an open device remain open.
(lib/gs_init.ps [1.16], zdevice.c [1.2]: 2000/07/06 03:26:13 lpd)

Adds a finish_copydevice device procedure, for cleaning up after copying the
bits of a device prototype or instance. For safety, the default
implementation only allows copying the prototype, not instances. This is a
NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device
instance never worked reliably, so it should not have been used this way
before. (lib/gs_init.ps [1.17]: 2000/07/06 04:13:24 lpd)

Adds the ability to load CIDFont resources from CFF OpenType font files.
(lib/gs_cff.ps [1.6], lib/gs_cidfn.ps [1.16]: 2000/07/29 05:58:28 lpd)

Ensures that errordict has at least one empty entry, for the sake of some
astonishingly bad PostScript code that tests for this and has a bug in the
case where it isn't true. (lib/gs_init.ps [1.20]: 2000/08/04 04:29:45 lpd)

</pre><h2><a name="6.23 Library"></a>Library</h2><pre>

Fixes problems:
	- Some coordinate computations for Type 1 fonts could lose far too
much precision if _fixed_shift was reduced. (gscoord.c [1.2],
gxmatrix.h [1.2]: 2000/07/11 09:25:46 lpd)
	- If the current color space was DeviceRGB, gs_currentgray returned
the wrong value. (bug introduced in 6.22) (gscolor.c [1.3]: 2000/07/11
14:00:09 lpd)
	- With some high-level drivers, changing the OutputFile after
opening the device could cause a crash. After the fix, doing this works
properly if no pages have actually been written out, but causes a rangecheck
error if any pages have been written. (This is required to maintain internal
consistency.) (gdevvec.c [1.4]: 2000/07/12 14:02:04 lpd)
	- A file had accidentally acquired an incorrect license notice.
(gscoord.c [1.4]: 2000/07/13 02:02:09 lpd)
	- Type 2 fonts that used the 'hflex' operator could produce
distorted characters (e.g., slanted bottoms). (gstype2.c [1.4]: 2000/07/13
02:09:21 lpd)
	- The use of macros within procedure argument lists confused
ansi2knr. (gximage3.c [1.5], gximage3.h [1.3]: 2000/07/19 14:30:45 lpd)
	- Freeing a locking allocator could cause infinite recursion.
(gsmemlok.c [1.2]: 2000/07/19 21:32:12 lpd)
	- "Accurate curves" was a no-op for certain cases of horizontal or
vertical tangents. (gxpcopy.c [1.2]: 2000/08/05 01:04:28 lpd)

Increments the version number, in preparation for the next fileset.
(gscdef.c [1.5]: 2000/07/06 02:45:06 lpd)

Redefines [gs_]copydevice in terms of a new gs_copydevice2/.copydevice2,
which adds a Boolean keep_open argument that requests (but does not
guarantee) that a copy of an open device remain open. (gsdevice.c [1.5],
gsdevice.h [1.2]: 2000/07/06 03:26:13 lpd)

Adds a finish_copydevice device procedure, for cleaning up after copying the
bits of a device prototype or instance. For safety, the default
implementation only allows copying the prototype, not instances. This is a
NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device
instance never worked reliably, so it should not have been used this way
before. (gdevbbox.c [1.2], gdevdflt.c [1.2], gdevht.c [1.2],
gdevmem.h [1.2], gdevnfwd.c [1.2], gdevprn.h [1.5], gdevrops.c [1.2],
gsdevice.c [1.6], gxacpath.c [1.2], gxclip.c [1.2], gxclip2.c [1.2],
gxclipm.c [1.2], gxclist.c [1.2], gxdevcli.h [1.2], gxdevice.h [1.3],
gxpcmap.c [1.2]: 2000/07/06 04:13:24 lpd)

Adds a little more tracing output for images. (gxidata.c [1.3]: 2000/07/09
21:04:25 lpd)

Adds _simple_final structure type definition macros. (gsstruct.h [1.3]:
2000/07/10 15:43:30 lpd)

Removes a structure member no longer needed after a recent fix.
(gscoord.c [1.3], gxmatrix.h [1.3]: 2000/07/12 04:49:43 lpd)

Adds the ability to write subsetted CIDFontType 2 (TrueType-based) fonts.
(gdevpsf.h [1.6], gdevpsft.c [1.2], gdevpsfu.c [1.3], gxfcid.h [1.5]:
2000/07/21 01:09:16 lpd)

Adds a partially implemented driver that just produces a trace of its
drawing calls. This driver also serves as a minimal example of how to
implement the high-level driver operations. (gdevtrac.c [1.1]: 2000/07/29
04:00:00 lpd)

Improves the smoothness of ShadingType 4 - 7 gradient fills.
(gxshade4.c [1.2], gxshade6.c [1.2]: 2000/08/03 20:47:48 lpd)

Updates dates and version #s for the 6.23 fileset. (gscdef.c [1.6]:
2000/08/07 17:48:10 lpd)

<hr>

<h1><a name="Version6.22"></a>Version 6.22 (2000-07-05)</h1>

<p>
This fileset consists mostly of bug fixes.  It also further improves the PDF
writer, which now handles ImageType 3 images and PatternType 2 (shading)
patterns.

<p>
All problems registered on SourceForge numbered 108819 or lower are closed,
except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
104118, 105289, 105558, 106340, 106652, 108639.

<p>
The following projects are in a partially completed state in the PDF writer:

<ul>

<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started.

</ul>

<pre>

<h2><a name="6.22_Incompatible_changes"></a>Incompatible changes</h2>

(Procedures)
	- Versions now have odd numbers during development, even numbers
when released.
	- The TMPDIR environment variable, if set, now takes precedence
over TEMP.
	- On MS-DOS, MS Windows, and OS/2 platforms, the batch files that
invoke Ghostscript now use a default name of gswin32 or gswin32c rather than
simply gs.
(Drivers)
	- The PCL drivers now select a given paper size if the requested
height is at least 0.1" greater than the height of the next smaller paper
size, rather than if the requested height is at least as large as that of
the given paper size.
(Interpreter)
	- user_names_p and system_names_p may now be NULL: clients must
check this.
	- scan_comment_proc and scan_dsc_proc are now deprecated, and will
disappear in the near future.
	- The values in psuserparams are now checking procedures rather
than parameter values.
	- Comments beginning with %! are treated as "DSC comments", like
comments beginning with %%.
(Library)
	- The macro for declaring the fill_rectangle procedure of a shading
is now upper-case.  The fill_rectangle procedure is now a member of a procs
structure; there is a new macro for calling it.
	- The parameter list and return value for gs_currentgray have
changed.  This is very unfortunate, but it was unavoidable.


<h2><a name="6.22 Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- The batch files for MS-DOS, MS Windows, and OS/2 referred to the
executable by the name 'gs'. They now use environment variables GS
(graphical) and GSC (console) for the executable names, defaulting to
gswin32 and gswin32c respectively. (doc/News.htm [1.45], doc/Use.htm [1.6]:
2000/05/20 20:53:04 lpd)
	- The -dCompatibilityLevel= switch was incorrectly identified in one
place as -dCompatibility=. (doc/Ps2pdf.htm [1.11]: 2000/05/22 21:29:45 lpd)
	- [gs_]currentgray didn't return the correct value if the current
color space was a DeviceN space using the alternate space.
(doc/News.htm [1.49]: 2000/07/03 15:28:26 lpd)
	- Fixes a couple of typos. (doc/Release.htm [1.12]: 2000/07/04
19:19:38 lpd)
	- The "smoke test" procedure for fileset releases didn't stress the
banding code nearly as hard as intended. (doc/Release.htm [1.13]: 2000/07/05
04:50:13 lpd)

Adds predefined pdfwrite settings similar to the three standard settings in
Adobe Acrobat Distiller 4, plus a "default" setting, with
-dPDFSETTINGS=/settingname. (doc/Ps2pdf.htm [1.10]: 2000/04/29 02:29:20 lpd)

Increments the version number to 6.23. From now on, we use odd numbers
during development, even numbers for released filesets.
(doc/Changes.htm [1.12], doc/History6.htm [1.7], doc/News.htm [1.40],
doc/Release.htm [1.11]: 2000/04/29 16:49:43 lpd)

Implements ImageType 3 images in the PDF writer. (doc/News.htm [1.41]:
2000/04/30 06:21:58 lpd)

Creates a procs structure for shadings, moving the fill_rectangle procedure
into it, in anticipation of adding a get_params procedure.
(doc/News.htm [1.42]: 2000/04/30 19:37:37 lpd)

Implements PatternType 2 patterns and shfill in the PDF writer.
(doc/News.htm [1.43]: 2000/05/02 07:14:58 lpd)

Adds a reference to Karel Kulhavy's pdf2html program.
(doc/New-user.htm [1.6]: 2000/05/04 21:16:44 lpd)

Adds a small project to remove the limit on the length of the OutputFile
parameter for printer drivers. (doc/Projects.htm [1.9]: 2000/05/06 00:32:08
lpd)

Documents the addition of TMPDIR for specifying the directory for temporary
files. (doc/News.htm [1.44], doc/Use.htm [1.5]: 2000/05/19 17:59:28 lpd)

Adds (more) user-contributed uniprint parameter files for the Epson Stylus
Color 640. (doc/Devices.htm [1.8]: 2000/05/23 18:58:56 lpd)

Adds implementation of the %font% IODevice to the list of projects.
(doc/Projects.htm [1.10]: 2000/05/24 23:30:15 lpd)

Documents the change in the paper size selection for PCL drivers.
(doc/News.htm [1.46]: 2000/05/30 03:26:15 lpd)

Adds glyph decaching notification to the list of projects.
(doc/Projects.htm [1.11]: 2000/05/30 05:54:23 lpd)

Documents that user_names_p and system_names_p may now be NULL.
(doc/News.htm [1.47]: 2000/06/05 01:26:05 lpd)

Adds the ability to write multi-strip monochrome TIFF files, controlled by a
new MaxStripSize parameter for the monochrome TIFF drivers.
(doc/Devices.htm [1.9]: 2000/06/05 05:41:55 lpd)

Updates the open ICC color support project to reference Graeme Gill's icclib
package. (doc/Projects.htm [1.12]: 2000/06/08 02:55:37 lpd)

Adds an umbrella document for maintenance procedures, initially describing
the procedure for uploading bug report test data to SourceForge.
(doc/Maintain.htm [1.1], doc/Readme.htm [1.8]: 2000/06/13 20:27:26 lpd)

Updates documentation to reflect the use of the GSC environment variable to
set the name of the executable for ps2pdf. (doc/Ps2pdf.htm [1.12]:
2000/06/21 17:10:41 lpd)

Updates documentation on the ProcessColorModel and ColorConversionStrategy
parameters. (doc/Ps2pdf.htm [1.13]: 2000/06/21 18:06:07 lpd)

Adds user parameters ProcessComment and ProcessDSCComment. If not null,
these procedures are called with the file and the comment line whenever the
scanner detects a comment (or non-DSC comment) or DSC comment. NOTE: the
interpreter is currently patched so that ProcessComment is never called.
(doc/Language.htm [1.4], doc/News.htm [1.48]: 2000/06/27 00:53:38 lpd)

Adds a reference to a user-maintained Czech translation of the Ghostscript
'man' pages. (doc/Readme.htm [1.9]: 2000/06/27 14:03:29 lpd)

Brings the language documentation (more) up to date.
(doc/Language.htm [1.5]: 2000/06/29 16:00:48 lpd)

Improves the documentation of copydevice regarding where it allocates the
copy, and documents finddevice. (doc/Drivers.htm [1.2],
doc/Language.htm [1.6]: 2000/06/30 00:09:15 lpd)

Adds a findprotodevice "operator", to find a device prototype by name.
(doc/Language.htm [1.7]: 2000/07/05 04:49:11 lpd)

Changes the version numbering system back to sequential (not odd/even).
Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
(doc/History6.htm [1.8], doc/News.htm [1.50]: 2000/07/05 17:23:54 lpd)

Updates documentation related to version numbering, reflecting the move back
to sequential numbering. (doc/Maintain.htm [1.2], doc/Release.htm [1.14]:
2000/07/05 18:27:50 lpd)

Updates documentation dates for making a fileset. (doc/Changes.htm [1.13],
doc/Devices.htm [1.10], doc/Drivers.htm [1.3], doc/History6.htm [1.9],
doc/Language.htm [1.8], doc/New-user.htm [1.7], doc/News.htm [1.51],
doc/Ps2pdf.htm [1.14], doc/Readme.htm [1.10], doc/Use.htm [1.7]: 2000/07/06
00:01:39 lpd)

</pre><h2><a name="6.22 Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- The rule for the recently-added gdevhl12 driver omitted the space
before the colon. (contrib.mak [1.12]: 2000/05/02 01:42:12 lpd)
	- Once again, corrects an incorrect dependency list.
(lib.mak [1.19]: 2000/05/02 07:14:11 lpd)
	- smd5.c didn't compile properly with "traditional C" compilers.
(lib.mak [1.20]: 2000/05/19 06:08:01 lpd)
	- Temporary files weren't created as private or exclusive.
(lib.mak [1.21], os2.mak [1.6], watc.mak [1.4], watclib.mak [1.4],
winlib.mak [1.3]: 2000/05/19 17:52:51 lpd)
	- The definitions of user names weren't properly associated with
local VM (they were stored in a static variable). (int.mak [1.22]:
2000/05/26 02:27:58 lpd)
	- 'make install' on Unix systems didn't install pdfopt.ps and
pdfwrite.ps. (unixinst.mak [1.11]: 2000/05/30 23:07:34 lpd)
	- The dependency list for the new Epson Stylus Photo driver was
wrong, causing build problems if this driver was included.
(contrib.mak [1.13]: 2000/06/01 20:25:39 lpd)
	- The change to implement stripped TIFF files broke non-TIFF fax
output formats (faxg* drivers). Also factors plain-fax writing from TIFF
writing. (devs.mak [1.26]: 2000/06/06 06:37:37 lpd)
	- Corrects a typo introduced by recent changes. (msvctail.mak [1.3]:
2000/06/07 06:36:54 lpd)
	- Rendering TrueType fonts didn't adjust the flatness to ensure
accurate results. (lib.mak [1.23]: 2000/06/20 15:46:53 lpd)
	- The makefile missed a dependency (CIDFontType 0 fonts require
FontType 2 fonts). (int.mak [1.23]: 2000/06/27 17:23:13 lpd)
	- The makefiles didn't include the requirement that gs_mro_e.ps be
loaded before gs_mgl_e.ps. (devs.mak [1.28], int.mak [1.24]: 2000/06/27
17:36:42 lpd)
	- A dependency was missing. (lib.mak [1.24]: 2000/07/04 19:05:12
lpd)
	- Fixes a typo; reduces the number of false warnings for
documentation date mismatches. (toolbin/pre [1.4]: 2000/07/04 19:19:17 lpd)
	- Fixes a typo. (contrib.mak [1.16]: 2000/07/04 22:30:10 lpd)
	- Adds a missing dependency. (devs.mak [1.29]: 2000/07/04 22:30:33
lpd)
	- Adds a missing dependency. (contrib.mak [1.17]: 2000/07/06
00:00:13 lpd)

Increments the version number to 6.23. From now on, we use odd numbers
during development, even numbers for released filesets. (version.mak [1.15]:
2000/04/29 16:49:43 lpd)

Restructures the code for handling ImageType 3 images, for the benefit of
the PDF writer. (lib.mak [1.18]: 2000/04/30 03:08:15 lpd)

Implements ImageType 3 images in the PDF writer. (devs.mak [1.23]:
2000/04/30 06:21:58 lpd)

Implements PatternType 2 patterns and shfill in the PDF writer.
(devs.mak [1.24]: 2000/05/02 07:14:58 lpd)

Adds the first draft of a driver for the Practical Automation ATX-23, -24,
and -38 label/ticket printers, developed under contract. This has a dual
GPL/AFPL license. (devs.mak [1.25]: 2000/05/03 20:30:06 lpd)

Works around the fact that Microsoft Visual C++ (only) doesn't define the O_
flags for the `open' library call. (lib.mak [1.22]: 2000/05/31 20:34:43 lpd)

Makes it possible to build on MSVC++ systems without specifying the paths
for the tools, headers, or libraries. See msvc{32,lib}.mak for details.
(msvc32.mak [1.4], msvccmd.mak [1.4], msvclib.mak [1.4], msvctail.mak [1.2],
winint.mak [1.4]: 2000/06/05 02:46:07 lpd)

Adds a user-contributed driver for SFF (the file format for CAPI fax
devices). (contrib.mak [1.14]: 2000/06/06 06:38:31 lpd)

Notes that the vgalib driver only suppotrs 16-color modes. (devs.mak [1.27]:
2000/06/06 15:28:01 lpd)

Removes an obsolete file. (toolbin/package.tcl [1.2]: 2000/06/06 18:05:32
lpd)

Documents the fact that the IJG JPEG library header files must be available
when compiling, even if SHARE_JPEG=1. (dvx-gcc.mak [1.3], jpeg.mak [1.2],
unix-gcc.mak [1.6], unixansi.mak [1.4], unixtrad.mak [1.4]: 2000/06/07
13:32:44 lpd)

Finishes implementing the Process[DSC]Comment callout. (int.mak [1.25]:
2000/06/28 20:17:00 lpd)

Removes some third-party drivers with incompatible licenses.
(contrib.mak [1.15]: 2000/07/02 22:11:31 lpd)

Finishes working around the fact that Microsoft C, in defiance of multiple
standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or
anywhere else). (lib.mak [1.25]: 2000/07/05 00:48:21 lpd)

Changes the version numbering system back to sequential (not odd/even).
Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
(version.mak [1.16]: 2000/07/05 17:23:54 lpd)

</pre><h2><a name="6.22 Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- Fixes a couple of minor Windows NT compatibility problems in
script files. (lib/ps2pdf.bat [1.3], lib/ps2pdfxx.bat [1.5]: 2000/05/05
03:21:03 lpd)
	- Temporary files weren't created as private or exclusive.
(gp_iwatc.c [1.3], gp_mswin.c [1.2], gp_os2.c [1.3]: 2000/05/19 17:52:51
lpd)
	- gsdll_init didn't propagate an error return from
gs_main_init_with_args, causing clients to think Ghostscript was initialized
properly when it wasn't. (gsdll.c [1.2]: 2000/05/20 14:39:42 lpd)
	- The batch files for MS-DOS, MS Windows, and OS/2 referred to the
executable by the name 'gs'. They now use environment variables GS
(graphical) and GSC (console) for the executable names, defaulting to
gswin32 and gswin32c respectively. (lib/bdftops.bat [1.2],
lib/eps2eps.bat [1.3], lib/font2c.bat [1.2], lib/gsbj.bat [1.2],
lib/gsdj.bat [1.2], lib/gsdj500.bat [1.2], lib/gslj.bat [1.2],
lib/gslp.bat [1.2], lib/gsnd.bat [1.2], lib/gsndt.bat [1.2],
lib/gssetgs.bat [1.1], lib/gst.bat [1.2], lib/gstt.bat [1.2],
lib/lpgs.bat [1.2], lib/lpr2.bat [1.2], lib/pdf2ps.bat [1.3],
lib/pdfopt.bat [1.2], lib/pftogsf.bat [1.2], lib/ps2ascii.bat [1.3],
lib/ps2epsi.bat [1.3], lib/ps2pdfxx.bat [1.7], lib/ps2ps.bat [1.3]:
2000/05/20 20:53:05 lpd)
	- The ps2pdf.bat script didn't set the default PDF level, so it
normally produced PDF 1.3 rather than 1.2, which was contrary to the
documentation and different from the Unix ps2pdf script.
(lib/ps2pdf.bat [1.4]: 2000/06/08 02:33:09 lpd)

Adds a user-contributed program for displaying the differences between two
AFM (font metric) files. This has a dual AFPL/GPL copyright.
(lib/afmdiff.awk [1.1]: 2000/04/29 20:51:41 lpd)

Removes an out-of-date e-mail address. (lib/ps2pdfxx.bat [1.4]: 2000/05/04
16:40:08 lpd)

Adds -dSAFER to all the format conversion scripts in which the input is
executed as PostScript or PDF code. (lib/eps2eps [1.2],
lib/eps2eps.bat [1.2], lib/pdf2dsc [1.2], lib/pdf2ps [1.3],
lib/pdf2ps.bat [1.2], lib/ps2ascii [1.2], lib/ps2ascii.bat [1.2],
lib/ps2epsi [1.3], lib/ps2epsi.bat [1.2], lib/ps2pdfwr [1.5],
lib/ps2pdfxx.bat [1.6], lib/ps2ps [1.2], lib/ps2ps.bat [1.2]: 2000/05/19
06:38:25 lpd)

Adds -dSAFER to one more script. (lib/pdfopt [1.2]: 2000/05/30 05:28:22 lpd)

Refactors some PDF-writing code for use in a PDF decompressor.
(lib/pdfwrite.ps [1.2]: 2000/06/27 17:06:32 lpd)

Adds a number of (user-maintained) command files for OS/2.
(lib/bdftops.cmd [1.1], lib/eps2eps.cmd [1.1], lib/font2c.cmd [1.1],
lib/pdf2ps.cmd [1.1], lib/pf2afm.cmd [1.1], lib/ps2ascii.cmd [1.1],
lib/ps2epsi.cmd [1.1], lib/ps2pdf.cmd [1.1], lib/ps2pdf12.cmd [1.1],
lib/ps2pdf13.cmd [1.1], lib/ps2ps.cmd [1.1]: 2000/07/05 16:21:13 lpd)

</pre><h2><a name="6.22 Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- The "compressed data" command encoding was wrong in one place in
the documentation, and the code used the incorrect encoding.
(gdevatx.c [1.2]: 2000/05/06 00:31:25 lpd)
	- If a file made no marks at all, ps2[e]ps produced bad output.
(gdevps.c [1.8]: 2000/05/07 15:38:27 lpd)
	- Returning an image compression parameter dictionary didn't close
an enumeration, failing to free a bookkeeping structure. (gdevpsdp.c [1.5]:
2000/05/11 16:13:16 lpd)
	- The epswrite driver could produce output that used initclip, which
is not allowed in EPS files. (gdevps.c [1.9]: 2000/05/20 06:36:30 lpd)
	- The change to implement stripped TIFF files broke non-TIFF fax
output formats (faxg* drivers). Also factors plain-fax writing from TIFF
writing. (gdevfax.c [1.1], gdevfax.h [1.1], gdevtfax.c [1.3],
gdevtfax.h [1.3]: 2000/06/06 06:37:37 lpd)
	- In the X driver, resetting MaxBitmap didn't have the proper
effect, and could cause a crash. (This is probably only a partial fix.)
(gdevxini.c [1.4]: 2000/06/12 01:52:16 lpd)
	- Finishes fixing the handling of MaxBitmap in the X driver.
(gdevxini.c [1.5]: 2000/06/12 02:45:25 lpd)
	- In the ATX drivers, the word count for compressed scan lines was
written as 2 bytes rather than 1; the drivers wouldn't accept a page width
greater than 2400 pixels. (gdevatx.c [1.4]: 2000/06/12 04:39:48 lpd)
	- Works around a bug in the MSVC++ 5.0 compiler that treats (int <<
unsigned) as unsigned rather than int. (gdevcd8.c [1.2], gdevcdj.c [1.2],
gdevdj9.c [1.3]: 2000/06/20 14:21:34 lpd)
	- Uncolored Patterns used with a gray color produced incorrect PDF
output. (Bug introduced in 6.2x.) (gdevpsdu.c [1.5]: 2000/06/28 05:13:19
lpd)
	- Moves an assignment to eliminate a bogus warning from some picky
compilers about a variable supposedly clobbered by longjmp.
(gdevpng.c [1.2]: 2000/07/03 21:10:33 lpd)
	- Two values were computed and not used. (gdevpx.c [1.3]: 2000/07/03
21:30:41 lpd)
	- [e]pswrite didn't guarantee a maximum line length of 255
characters, and didn't mark binary data with %%BeginData:/%%EndData.
(gdevps.c [1.10]: 2000/07/04 18:34:38 lpd)
	- Fixes references to undeclared functions. (gdevdfax.c [1.2],
gdevl256.c [1.2]: 2000/07/04 22:25:08 lpd)
	- X Windows platform fonts were broken when using multiple device
instances (windows). (gdevxxf.c [1.4]: 2000/07/05 18:20:41 lpd)

Improves the test for whether compressing an image is worthwhile.
(gdevpsdi.c [1.11]: 2000/04/30 01:26:41 lpd)

When printing color values derived from 8-bit fields, rounds the output to 3
decimal places for compactness with no loss of precision. (gdevpsdu.c [1.4]:
2000/04/30 19:24:28 lpd)

Adds the first draft of a driver for the Practical Automation ATX-23, -24,
and -38 label/ticket printers, developed under contract. This has a dual
GPL/AFPL license. (gdevatx.c [1.1]: 2000/05/03 20:30:06 lpd)

Updates the ATX printer drivers to handle the unprintable margins.
(gdevatx.c [1.3]: 2000/05/19 05:48:30 lpd)

Adds (more) user-contributed uniprint parameter files for the Epson Stylus
Color 640. (lib/st640ih.upp [1.1], lib/st640ihg.upp [1.1],
lib/st640p.upp [1.1], lib/st640pg.upp [1.1], lib/st640pl.upp [1.1],
lib/st640plg.upp [1.1]: 2000/05/23 18:58:56 lpd)

Adds support for 11x17 paper in PCL printers; changes the paper size tests
so that paper size N+1 is selected if the requested height is at least 0.1"
greater than the height of paper size N. (gdevpcl.c [1.2], gdevpcl.h [1.2]:
2000/05/30 03:24:17 lpd)

Adds comments about H-P's inconsistent use of different names and size codes
for the 11x17 paper size. (gdevpcl.c [1.3], gdevpcl.h [1.3]: 2000/05/30
20:45:45 lpd)

Adds the ability to write multi-strip monochrome TIFF files, controlled by a
new MaxStripSize parameter for the monochrome TIFF drivers.
(gdevtfax.c [1.2], gdevtfax.h [1.2], gdevtfnx.c [1.2], gdevtifs.c [1.2],
gdevtifs.h [1.2]: 2000/06/05 05:41:55 lpd)

Adds a user-contributed driver for SFF (the file format for CAPI fax
devices). (gdevcfax.c [1.1]: 2000/06/06 06:38:31 lpd)

Notes that the vgalib driver only suppotrs 16-color modes.
(gdevvglb.c [1.2]: 2000/06/06 15:28:01 lpd)

Adds some code contributed by Leon Bottou <leonb@research.att.com> that
makes the X driver prefer TrueColor visuals. We aren't sure of the
ramifications of this.... (gdevxini.c [1.6]: 2000/06/12 04:41:15 lpd)

Updates the ATX driver(s) to enforce maximum page width and minimum page
length. (gdevatx.c [1.5]: 2000/06/22 14:55:53 lpd)

Removes some third-party drivers with incompatible licenses.
(gdevcd8.c [1.3], gdevdj9.c [1.4], gdevhl12.c [1.2]: 2000/07/02 22:11:31
lpd)

Per user request, changes the license on the basic monochrome
DeskJet/LaserJet drivers from AFPL to dual AFPL/GPL. (gdevdjet.c [1.5],
gdevdljm.c [1.3], gdevdljm.h [1.3]: 2000/07/05 17:36:14 lpd)

</pre><h2><a name="6.22 PDF writer"></a>PDF writer</h2><pre>

Fixes problems:
	- A "0 ||" was omitted, potentially causing some kinds of errors
that never happen in practice to be overlooked. (gdevpdfi.c [1.17]:
2000/05/02 01:55:10 lpd)
	- Fixes minor syntactic incompatibilities with "traditional C"
compilers. (gdevpdfg.c [1.5]: 2000/05/11 16:14:51 lpd)
	- The PDF writer could still produce coordinates for paths that
exceeded Acrobat Reader's user-coordinate limit of +/- 32K.
(gdevpdfd.c [1.9]: 2000/05/23 21:05:00 lpd)
	- In PDF 1.2 output, several synthesized Type 3 fonts could have the
same name, producing errors and/or incorrect output. (bug introduced since
6.01) (gdevpdf.c [1.17], gdevpdft.c [1.11], gdevpdfx.h [1.18]: 2000/05/24
20:39:30 lpd)
	- The FontDescriptor flags for non-embedded alphabetic fonts with
non-Standard encodings incorrectly identified the font as a small-caps font.
(gdevpdff.c [1.6]: 2000/05/30 23:04:23 lpd)
	- Works around the fact that Acrobat Reader won't accept /MMType1
fonts, but will accept MM Type 1 instances if they're tagged as /Type1
rather than /MMType1. (gdevpdft.c [1.12], gdevpdfw.c [1.4]: 2000/06/12
18:13:51 lpd)
	- Embedded Type 1 (but not Type 2 / 1C) fonts were written without
eexec encryption. We can't figure out how this happened, because the PDF
spec requires eexec encryption and the correct code was commented out; we
suppose this was a debugging or testing modification that got left in. (bug
introduced since 6.01) (gdevpdfe.c [1.2]: 2000/06/12 18:15:20 lpd)
	- Text in Type 3 synthesized fonts was often positioned incorrectly,
usually too far to the left. (bug introduced since 6.01) (gdevpdft.c [1.13]:
2000/06/13 16:34:42 lpd)
	- Images that ended prematurely still (again?) weren't written
correctly. (gdevpdfj.c [1.4]: 2000/06/27 06:32:03 lpd)

Implements ImageType 3 images in the PDF writer. (gdevpdfb.c [1.1],
gdevpdfg.h [1.6], gdevpdfi.c [1.16], gdevpdfj.c [1.3], gdevpdfx.h [1.16]:
2000/04/30 06:21:58 lpd)

Implements PatternType 2 patterns and shfill in the PDF writer.
(gdevpdfc.c [1.11], gdevpdfg.h [1.7], gdevpdfo.c [1.3], gdevpdfo.h [1.3],
gdevpdfv.c [1.1], gdevpdfx.h [1.17]: 2000/05/02 07:14:58 lpd)

</pre><h2><a name="6.22 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>

Fixes problems:
	- PatternType 2 (shaded) Patterns caused errors.
(lib/pdf_draw.ps [1.14]: 2000/05/02 07:03:09 lpd)
	- -q (-dQUIET) didn't suppress all warnings from the PDF
interpreter. (lib/pdf_base.ps [1.8]: 2000/05/07 15:51:18 lpd)
	- FunctionType 3 functions with indirect /Bounds or /Encode entries
caused a typecheck error. (lib/pdf_draw.ps [1.15]: 2000/06/07 19:08:00 lpd)
	- If the TR element of an ExtGState was an array of Functions (for
setcolortransfer) rather a single Function (for settransfer), an error
occurred. (fix from Artifex) (lib/pdf_draw.ps [1.16]: 2000/06/12 00:40:45
lpd)
	- The code for keeping the Install procedure from getting more and
more deeply nested didn't actually work, and also caused pages with a
non-zero MediaBox offset to be translated incorrectly.
(lib/pdf_main.ps [1.8]: 2000/06/12 19:17:03 lpd)
	- PDF files with embedded TrueType fonts didn't map characters to
glyph indices correctly (i.e., using the same algorithm as Acrobat Reader).
(lib/pdf_font.ps [1.8]: 2000/06/21 02:15:01 lpd)
	- The built-in Identity CMaps had an incorrect entry count for
begincodespacerange and begincidrange; these CMaps, and all Type 0 fonts,
were constructed in a way that was incompatible with some old Adobe font
loading software. (lib/pdf_font.ps [1.9]: 2000/06/28 01:36:30 lpd)
	- If PDF interpretation was included in the build, the very first
line of a non-PDF file wouldn't be processed (if applicable) as a comment.
(lib/pdf_main.ps [1.9]: 2000/06/29 15:55:13 lpd)

</pre><h2><a name="6.22 Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- localfork didn't properly initialize userdict in the new context.
(lib/gs_dps.ps [1.2]: 2000/05/01 07:20:37 lpd)
	- A null Pattern color caused an error. (zcolor2.c [1.2]: 2000/05/01
15:15:06 lpd)
	- Fixes minor syntactic incompatibilities with "traditional C"
compilers. (zbfont.c [1.5], zfcid0.c [1.3]: 2000/05/11 16:14:51 lpd)
	- The 'monitor' operator was broken (probably had never been
tried!). (zcontext.c [1.2]: 2000/05/15 19:14:25 lpd)
	- -dSTRICT caused an error, /undefined in SIZES.
(lib/gs_statd.ps [1.3]: 2000/05/17 19:17:40 lpd)
	- CFF CID fonts in which the FDSelect array occurred before the
CharStrings caused an error. (lib/gs_cff.ps [1.5]: 2000/05/17 20:39:20 lpd)
	- dict_matrix3_param didn't work correctly on platforms where the
compiler aligned structures to a boundary larger than sizeof(float), causing
incorrect output or arithmetic exceptions for CIE color spaces.
(zcie.c [1.2]: 2000/05/18 19:02:25 lpd)
	- Flushing or closing a procedure-based output stream still wasn't
implemented correctly (it could cause an endless loop). (zfproc.c [1.3]:
2000/05/19 19:35:01 lpd)
	- 'monitor' left its operand on the stack. (zcontext.c [1.3]:
2000/05/22 21:15:23 lpd)
	- The definitions of user names weren't properly associated with
local VM (they were stored in a static variable). (btoken.h [1.2],
iref.h [1.2], iscanbin.c [1.3], zbseq.c [1.2], zdps.c [1.2]: 2000/05/26
02:27:58 lpd)
	- Invoking an image operator with an empty string data source caused
an infinite loop. (zimage.c [1.4]: 2000/05/30 03:43:19 lpd)
	- The fix for associating the user name array with local VM didn't
create the user name table properly for new contexts with their own local
VM. The user name array is now created lazily. (btoken.h [1.3],
iscanbin.c [1.4], zbseq.c [1.3], zdps.c [1.3]: 2000/05/30 04:38:26 lpd)
	- As a result of the fix removing the incorrect same-local-VM check
in context_state_load, userparams wasn't updated properly when switching
contexts. (icontext.c [1.3]: 2000/05/30 20:40:17 lpd)
	- MAX_HALF_INTVAL was defined incorrectly, causing the mul operator
to run slower than necessary when multiplying two small integers.
(zarith.c [1.2]: 2000/06/04 17:00:29 lpd)
	- Shadings with an array of Functions caused a rangecheck or
typecheck error. (zshade.c [1.2]: 2000/06/04 18:26:17 lpd)
	- If the new value of a device parameter was an array with some
integers and some reals, and the first element was a real, a typecheck error
would occur. (iparam.c [1.4]: 2000/06/19 22:22:51 lpd)
	- PDF files with embedded TrueType fonts didn't map characters to
glyph indices correctly (i.e., using the same algorithm as Acrobat Reader).
(lib/gs_agl.ps [1.1], lib/gs_ttf.ps [1.5]: 2000/06/21 02:15:01 lpd)
	- The dictionary used to hold Encodings wasn't large enough.
(lib/gs_init.ps [1.10]: 2000/06/27 17:55:05 lpd)
	- The change in parameter type checking required for the new
Process[DSC]Comment user parameters broke type checking for system
parameters. (lib/gs_lev2.ps [1.4]: 2000/06/27 17:56:04 lpd)
	- Calling out to process a comment during scanning left an extra
element on the operand stack if the comment appeared within { }.
(ztoken.c [1.3]: 2000/06/28 00:47:05 lpd)
	- In some cases, two successive DSC comments produced a syntaxerror.
(ztoken.c [1.4]: 2000/06/28 05:14:17 lpd)
	- The code for registering compiled fonts was sensitive to its
position in the order of loading the initialization files (caused an error
if loaded too early). (lib/gs_ccfnt.ps [1.3]: 2000/06/29 23:31:14 lpd)
	- [gs_]currentgray didn't return the correct value if the current
color space was a DeviceN space using the alternate space. (zcolor.c [1.3],
zcolor1.c [1.2]: 2000/07/03 15:28:26 lpd)

Adds predefined pdfwrite settings similar to the three standard settings in
Adobe Acrobat Distiller 4, plus a "default" setting, with
-dPDFSETTINGS=/settingname. (lib/gs_pdfwr.ps [1.4]: 2000/04/29 02:29:21 lpd)

Increments the version number to 6.23. From now on, we use odd numbers
during development, even numbers for released filesets.
(lib/gs_init.ps [1.8]: 2000/04/29 16:49:43 lpd)

Changes .buildfont1 to accept Type 1 fonts with LanguageGroup other than 0
or 1. This is contrary to the spec, but we've seen a few fonts with other
values. (zfont1.c [1.5]: 2000/05/06 08:19:37 lpd)

Cleans up code and comments slightly. (lib/gs_dps.ps [1.3]: 2000/05/30
20:35:56 lpd)

Adds user parameters ProcessComment and ProcessDSCComment. If not null,
these procedures are called with the file and the comment line whenever the
scanner detects a comment (or non-DSC comment) or DSC comment. NOTE: the
interpreter is currently patched so that ProcessComment is never called.
(interp.c [1.4], iscan.c [1.2], iscan.h [1.2], lib/gs_init.ps [1.9],
lib/gs_lev2.ps [1.3], ztoken.c [1.2], ztype.c [1.2]: 2000/06/27 00:53:38
lpd)

Finishes implementing the Process[DSC]Comment callout. (icontext.c [1.4],
icstate.h [1.3], interp.c [1.5], iscan.h [1.3], itoken.h [1.1],
lib/gs_init.ps [1.11], ztoken.c [1.5], zusparam.c [1.2]: 2000/06/28 20:17:00
lpd)

Changes the name of the unread operator to .unread, retaining unread as a
synonym for backward compatibility. (lib/gs_init.ps [1.12], zfileio.c [1.7]:
2000/06/29 15:58:24 lpd)

Adds a findprotodevice "operator", to find a device prototype by name.
(lib/gs_init.ps [1.13]: 2000/07/05 04:49:11 lpd)

Changes the version numbering system back to sequential (not odd/even).
Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
(lib/gs_init.ps [1.14]: 2000/07/05 17:23:54 lpd)

</pre><h2><a name="6.22 Streams"></a>Streams</h2><pre>

Fixes problems:
	- file_limit wasn't initialized properly in some cases.
(sfxfd.c [1.4], sfxstdio.c [1.3]: 2000/05/02 02:06:41 lpd)
	- smd5.c didn't compile properly with "traditional C" compilers.
(smd5.c [1.2]: 2000/05/19 06:08:01 lpd)
	- The workaround for Microsoft C's omission of O_APPEND et al caused
warnings or errors with other compilers. (stat_.h [1.3]: 2000/07/03 21:07:05
lpd)

Works around the fact that Microsoft Visual C++ (only) doesn't define the O_
flags for the `open' library call. (stat_.h [1.2]: 2000/05/31 20:34:43 lpd)

Finishes working around the fact that Microsoft C, in defiance of multiple
standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or
anywhere else). (stat_.h [1.4]: 2000/07/05 00:48:21 lpd)

</pre><h2><a name="6.22 Library"></a>Library</h2><pre>

Fixes problems:
	- A null Pattern color caused an error. (gspcolor.c [1.2]:
2000/05/01 15:15:07 lpd)
	- A procedure name exceeded VMS's 31-character limit.
(gsparam.h [1.6]: 2000/05/02 01:47:50 lpd)
	- If the DataSource of a shading was a reusable stream, the stream
wasn't reset before rendering the shading. (gxshade.c [1.2]: 2000/05/02
07:05:10 lpd)
	- shfill didn't go through the device fill_path procedure,
preventing it from being written out as a high-level PostScript or PDF
construct. (gscolor3.c [1.2]: 2000/05/02 07:06:23 lpd)
	- Once again, corrects an incorrect dependency list.
(gscolor3.c [1.3]: 2000/05/02 07:14:11 lpd)
	- The code for adding elements to small-string free lists was wrong,
possibly causing an endless loop. (gsnogc.c [1.3]: 2000/05/04 01:29:53 lpd)
	- Fixes minor syntactic incompatibilities with "traditional C"
compilers. (gsfunc4.c [1.2], gstype42.c [1.5]: 2000/05/11 16:14:51 lpd)
	- CIEBasedDEF[G] color spaces computed incorrect results or caused
invalid memory accesses, especially if DecodeDEF[G] is not the identity
function. (This bug had probably been there since these color spaces were
first implemented, unnoticed because DecodeDEF[G] is almost always the
identity.) (gscie.c [1.2], gsciemap.c [1.2], gxctable.c [1.2]: 2000/05/15
19:58:38 lpd)
	- Temporary files weren't created as private or exclusive.
(close_.h [1.1], gp_unifs.c [1.2], gpmisc.c [1.1], gpmisc.h [1.1]:
2000/05/19 17:52:51 lpd)
	- OutputFile values starting with a %d format string caused an
error. (bug introduced in 5.85) (gsdevice.c [1.4]: 2000/05/20 06:58:11 lpd)
	- In rare cases, an overflow could occur in the filling loop,
producing distorted output. (Fix from Artifex Software.) (gxfill.c [1.3]:
2000/05/23 05:46:52 lpd)
	- When writing PDF or PostScript, stroked rectangles could sometimes
be omitted from the output. (gdevvec.c [1.3]: 2000/05/24 18:48:14 lpd)
	- In PDF output, the conversion of Type 1 to Type 2 CharStrings
didn't adjust the X offset of the accent for 'seac', causing accents to be
displaced to the right. (gdevpsfx.c [1.3]: 2000/05/24 23:20:43 lpd)
	- The definitions of user names weren't properly associated with
local VM (they were stored in a static variable). (gsalloc.c [1.3],
gxalloc.h [1.2]: 2000/05/26 02:27:58 lpd)
	- The change for local user names didn't update the structure
descriptor for gs_ref_memory_t. (gsalloc.c [1.4], gxalloc.h [1.3]:
2000/05/26 02:33:38 lpd)
	- The fix for 'seac' when converting Type 1 to Type 2 CharStrings
wasn't quite complete. (gdevpsfx.c [1.4]: 2000/05/26 20:48:37 lpd)
	- If [eo]clip set a rectangular region, clippath would return the
rounded clipping box, not the correct clipping path. (gxcpath.c [1.2]:
2000/05/31 22:20:04 lpd)
	- ShadingType 2 shadings could cause an invalid memory access.
(gsfunc3.c [1.3]: 2000/06/04 18:25:33 lpd)
	- Printer drivers that didn't implement print_page_copies didn't
print multiple copies of the same page on separate files if the OutputFile
name included %d, and some drivers (such as the TIFF drivers) produced
invalid output. (gdevprn.c [1.4]: 2000/06/05 02:04:26 lpd)
	- 32-bit sample values in shading data didn't work, because some
CPUs execute (1 << 32) as (1 << 0). (gxshade.c [1.3]: 2000/06/07 19:07:17
lpd)
	- Type 1 fonts without eexec encryption still included the 4 eexec
padding bytes. (bug probably introduced since 6.0) (gdevpsf1.c [1.4]:
2000/06/12 17:38:48 lpd)
	- Axial shadings with a non-orthogonal CTM could fail to fill the
required region. (fix from Artifex) (gxshade1.c [1.4]: 2000/06/12 21:45:19
lpd)
	- When allocator debugging was enabled (-Z@), 'restore' didn't clear
vacated space in inner chunks. (gsalloc.c [1.5]: 2000/06/13 07:04:18 lpd)
	- the row buffers for images weren't allocated with a stable
allocator, possibly causing data corruption or invalid accesses if a
PostScript program invoked save/restore within the data-reading procedure
for an image. (gsimage.c [1.2]: 2000/06/13 07:05:21 lpd)
	- Rendering TrueType fonts didn't adjust the flatness to ensure
accurate results. (gstype42.c [1.6], gxchrout.c [1.1], gxchrout.h [1.1],
gxtype1.c [1.5]: 2000/06/20 15:46:53 lpd)
	- Calling get_params with a static (read-only) device prototype
could cause a memory access error. (gsdparam.c [1.3]: 2000/06/22 14:05:49
lpd)
	- [gs_]currentgray didn't return the correct value if the current
color space was a DeviceN space using the alternate space. (gscolor.c [1.2],
gscolor.h [1.2], gscolor1.c [1.2]: 2000/07/03 15:28:26 lpd)
	- Some picky compilers complained about "integer constant is
unsigned in ANSI C, signed with -traditional". (md5.c [1.2]: 2000/07/03
21:55:18 lpd)
	- If TMPDIR wasn't defined, TEMP would be ignored. (bug introduced
in 6.23) (gpmisc.c [1.4]: 2000/07/04 19:54:00 lpd)
	- Watcom C requires the non-standard O_BINARY mode flag when opening
(with open) a file that will later be opened in binary mode with fdopen.
(gpmisc.c [1.6]: 2000/07/05 17:08:27 lpd)

Restructures the code for handling ImageType 3 images, for the benefit of
the PDF writer. (gximage3.c [1.3], gximage3.h [1.1]: 2000/04/30 03:08:15
lpd)

Implements ImageType 3 images in the PDF writer. (gximage3.c [1.4],
gximage3.h [1.2]: 2000/04/30 06:21:58 lpd)

Creates a procs structure for shadings, moving the fill_rectangle procedure
into it, in anticipation of adding a get_params procedure. (gsshade.c [1.2],
gsshade.h [1.2], gxshade.h [1.2]: 2000/04/30 19:37:37 lpd)

Implements PatternType 2 patterns and shfill in the PDF writer.
(gsptype2.c [1.2]: 2000/05/02 07:14:58 lpd)

Changes gdev_prn_file_is_new from a macro to a procedure. (gdevprn.c [1.3],
gdevprn.h [1.4]: 2000/05/20 20:25:48 lpd)

Works around the fact that Microsoft Visual C++ defines S_IREAD and S_IWRITE
but not their newer equivalents S_IRUSR and S_IWUSR. (gpmisc.c [1.2]:
2000/05/24 18:49:54 lpd)

Changes some assignments to work around over-zealous compiler warnings.
(gxtype1.c [1.4]: 2000/05/24 23:52:58 lpd)

Works around the fact that Microsoft Visual C++ (only) doesn't define the O_
flags for the `open' library call. (gpmisc.c [1.3]: 2000/05/31 20:34:43 lpd)

Improves some comments in A_fill_stripe. (gxshade1.c [1.3]: 2000/06/04
20:58:23 lpd)

Finishes working around the fact that Microsoft C, in defiance of multiple
standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or
anywhere else). (fcntl_.h [1.1], gpmisc.c [1.5]: 2000/07/05 00:48:21 lpd)

Adds O_BINARY to the Microsoft compatibility fcntl.h patch. (fcntl_.h [1.2]:
2000/07/05 17:21:43 lpd)

Changes the version numbering system back to sequential (not odd/even).
Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE".
(gscdef.c [1.3]: 2000/07/05 17:23:54 lpd)

Updates GS_PRODUCT for making a fileset. (gscdef.c [1.4]: 2000/07/06
00:01:03 lpd)

<hr>

<h1><a name="Version6.21"></a>Version 6.21 (2000-04-28)</h1>

<p>
This fileset includes more PDF writer enhancements: conversion of embedded
Type 1 fonts to Type 1C (smaller), handling of more color spaces for images,
ImageType 4 images, compression of mask images, support for (tiled) Pattern
colors, more graphics state distiller parameters, recording of graphics
state functions in the output.  It also greatly improves the space usage and
loading time for CMaps.

<p>
All problems registered on SourceForge numbered 104890 or lower are closed,
except for the following: 101549, 101814, 101905, 101955, 102146, 102735,
103528, 104118, 104375.

<p>
The following projects are in a partially completed state in the PDF writer:

<ul>

<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started.

<li>ImageType 3 images (gdevpdf[ij].c) -- started.

</ul>

<pre>

<h2><a name="6.21_Incompatible_changes"></a>Incompatible changes</h2>

(Drivers)
	- The downsampling filters now require WidthIn and HeightIn,
replacing Columns.
	- The gp_ procedures for managing screen swapping between console
and graphics are removed.
	- Any driver that processes the pdfmark pseudo-parameter must now
also return null for the "value" of the pdfmark parameter when (and only
when) specifically requested.
(PDF writer)
	- The last argument of pdf_alloc_font has changed.
	- pdf_set_color is renamed pdf_set_pure_color.
	- When producing PDF 1.3 output, the base 14 fonts are now
candidates for embedding just like any other fonts.
(Interpreter)
	- The .fontproperties procedure in gs_fonts.ps now takes an
additional argument.
	- The interpreter must no longer reference stdin/out/err directly.
(Library)
	- The internal representation of CMaps is changed completely, and
has several new required members.
	- gs_cmap is renamed gs_cmap_t; gx_code_map is renamed
gx_code_map_t.
	- Clients creating CMaps must call gs_cmap_init to initialize them.
	- The library must no longer reference stdin/out/err directly.


<h2><a name="6.21 Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- The PDF writer could get an ioerror when downsampling images whose
size wasn't an exact multiple of the downsampling factor.
(doc/News.htm [1.31]: 2000/04/13 16:44:59 lpd)
	- When processing a PDF file, the font substitution heuristic based
on the FontName sometimes overrode the Flags information in the
FontDescriptor. (doc/News.htm [1.34]: 2000/04/20 06:36:02 lpd)
	- When pdfwrite was producing PDF 1.3 output, the base 14 fonts were
never embedded, rather than being handled like all other fonts.
(doc/News.htm [1.37]: 2000/04/20 23:49:40 lpd)
	- The URL for the Arphic free Chinese fonts had become incorrect.
(doc/Fonts.htm [1.3]: 2000/04/27 13:44:52 lpd)
	- Fixes a few typos, and adds GS_FONTPATH to the list of environment
variables to be unset for a pristine test run. (doc/Release.htm [1.10]:
2000/04/28 22:08:41 lpd)

Adds projects related to SVG and to pswrite image compression.
(doc/Projects.htm [1.4]: 2000/04/07 18:39:12 lpd)

Makes the ps2pdf scripts replace a .eps extension with .pdf, as they do with
.ps. (doc/Ps2pdf.htm [1.7], man/ps2pdf.1 [1.5], man/ps2pdfwr.1 [1.2]:
2000/04/07 19:28:14 lpd)

Completely redesigns the representation of CMaps, to reduce space
requirements and make comparing them more reasonable, changing gs_cmap to
gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
PostScript code currently only handles a few well-behaved CMap structures.)
(doc/News.htm [1.27]: 2000/04/08 03:54:38 lpd)

Documents the need to set SYNC=nosync on NextStep / OpenStep systems.
(doc/Make.htm [1.10]: 2000/04/10 04:45:37 lpd)

Overhauls font embedding in the PDF writer: splits off the code into a new
file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and
adds a little bit of code for future support of Type 0 and CID-keyed fonts.
(doc/News.htm [1.28]: 2000/04/10 07:48:37 lpd)

Documents the fact that building on NeXTSTEP 3.3 systems requires removing
-Wmissing-declarations from GCFLAGS. (doc/Make.htm [1.11]: 2000/04/11
14:06:54 lpd)

Enhances pdf2ps to allow defaulting the output file name.
(man/pdf2ps.1 [1.2]: 2000/04/11 14:23:24 lpd)

Factors out code for writing functions and for adding filter-related entries
to a stream dictionary; implements the DefaultRenderingIntent distiller
parameter. (doc/Ps2pdf.htm [1.8]: 2000/04/11 16:06:57 lpd)

Implements additional distiller parameters: PreserveHalftoneInfo,
PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs.
Remove), UCRandBGInfo. Splits off graphics state management into separate
files. Implements the remaining graphics state parameters (halftone,
transfer function, black generation, undercolor removal, halftone phase,
smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******.
In anticipation of handling more general colors, renames pdf_set_color as
pdf_set_pure_color, and adds pdf_set_drawing_color. (doc/News.htm [1.29]:
2000/04/11 18:31:32 lpd)

Updates documentation to match recent changes in the pdfwrite driver.
(doc/Ps2pdf.htm [1.9]: 2000/04/11 22:56:17 lpd)

Makes the second argument of the pfbtopfa script optional, so 'pfbtopfa
dir/x.pfb' is equivalent to 'pfbtopfa dir/x.pfb x.pfa'.
(man/pfbtopfa.1 [1.2]: 2000/04/12 17:41:41 lpd)

In pdfwrite, rewrites the image writing code to use Cos objects rather than
direct printing, and splits off the creation of image dictionaries into a
new file; adds support for tiling with uncolored Patterns; implements
converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the
same for ImageType 3. This code is "in progress" and likely to have problems
for a while. (doc/News.htm [1.30]: 2000/04/12 18:44:35 lpd)

Implements pdfwrite compression for mask images, using the same parameters
as for monochrome images. (doc/News.htm [1.32]: 2000/04/13 18:40:23 lpd)

Adds user-contributed uniprint parameter files for the Canon BJC-8200,
including an addition for the Red Hat printer data base.
(doc/Devices.htm [1.4]: 2000/04/14 03:59:57 lpd)

Slightly updates the user-contributed documentation on the new BJC-8200
uniprint parameters. (doc/Devices.htm [1.5]: 2000/04/15 00:20:54 lpd)

Completes code for reading and writing CMaps. (doc/News.htm [1.33]:
2000/04/16 03:05:29 lpd)

Clarifies some details of posting releases on SourceForge.
(doc/Release.htm [1.9]: 2000/04/17 22:59:24 lpd)

Converts the ps2epsi documentation to HTML. (doc/Ps2epsi.htm [1.1],
doc/Readme.htm [1.6], doc/ps2epsi.txt [1.2]: 2000/04/18 17:59:13 lpd)

Adds a couple of graphics library optimization projects.
(doc/Projects.htm [1.5]: 2000/04/19 04:05:11 lpd)

Adds a project for creating an OutputDevice resource instance for each
device. (doc/Projects.htm [1.6]: 2000/04/19 21:37:47 lpd)

Checks in the accumulated change log. (doc/Changes.htm [1.10]: 2000/04/20
07:24:22 lpd)

Removes the gp_ procedures for managing screen swapping between console and
graphics, which haven't been used for a long time and are no longer useful.
(doc/News.htm [1.35]: 2000/04/20 22:47:35 lpd)

Removes all remaining direct references to stdin/out/err from the library,
interpreter, and non-contributed drivers; moves the ersatz definitions of
stdin/out/err to a new header file. (doc/News.htm [1.36]: 2000/04/20
23:30:22 lpd)

Reduces the startup time for displaying PDF files, by skipping the creation
of pdfmarks for annotations and outlines when the output device doesn't
process pdfmarks. (doc/News.htm [1.38]: 2000/04/21 16:58:28 lpd)

Notes that even if SHARE_JPEG=1, the IJG library sources are required.
(doc/Make.htm [1.12]: 2000/04/27 07:39:05 lpd)

Documents the new -dPrinted[=true/false] switch for PDF files.
(doc/Use.htm [1.3]: 2000/04/27 08:17:05 lpd)

Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
No output is produced until the filter is closed. (doc/Language.htm [1.2]:
2000/04/27 14:39:57 lpd)

Updates the description of the project to produce higher-level PCL output.
(doc/Projects.htm [1.7]: 2000/04/28 10:42:02 lpd)

Adds a sample file containing a wide variety of PDF annotations; updates
documentation for this and some other overlooked files.
(doc/Psfiles.htm [1.4]: 2000/04/28 10:51:02 lpd)

Notes that the uniprint dnj750c.upp parameters are also good for the 450C.
(doc/Devices.htm [1.6]: 2000/04/28 14:27:02 lpd)

Updates release dates. (man/pdf2ps.1 [1.3], man/ps2ps.1 [1.5]: 2000/04/28
18:29:32 lpd)

Updates version numbers and dates for the 6.21 fileset.
(doc/Bug-form.htm [1.6], doc/Devices.htm [1.7], doc/Fonts.htm [1.4],
doc/Language.htm [1.3], doc/Make.htm [1.13], doc/Projects.htm [1.8],
doc/Ps2epsi.htm [1.2], doc/Psfiles.htm [1.5], doc/Readme.htm [1.7],
doc/Use.htm [1.4]: 2000/04/28 22:06:25 lpd)

Updates the news for the 6.21 fileset. (doc/News.htm [1.39]: 2000/04/28
22:18:16 lpd)

</pre><h2><a name="6.21 Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- Some makefile macros were used before being defined.
(devs.mak [1.9], lib.mak [1.9]: 2000/04/07 16:02:03 lpd)
	- `make install-data' didn't install lib/gs_frsd.ps or
lib/pdfopt.ps. (unixinst.mak [1.7]: 2000/04/07 19:17:48 lpd)
	- gsmake would get into a loop if the makefile was not a symbolic
link; `gsmake check' didn't accept a makefile name on the command line.
(toolbin/gsmake.tcl [1.2]: 2000/04/07 19:37:21 lpd)
	- `makemaster' referred to an undefined variable. (How could it ever
have worked?) (toolbin/makeset.tcl [1.3]: 2000/04/07 19:39:27 lpd)
	- A dependency wasn't updated when moving the gdevpsf* rules from
devs.mak to lib.mak. (lib.mak [1.10]: 2000/04/07 19:40:25 lpd)
	- The dependencies in the makefile weren't updated for the pdfwrite
font embedding overhaul. (devs.mak [1.11]: 2000/04/10 18:57:33 lpd)
	- Once again, the dependencies hadn't been updated. (int.mak [1.17]:
2000/04/11 15:59:42 lpd)
	- Setting pdfwrite parameters for a DCTEncode filter could cause a
crash (memory fault). (devs.mak [1.16]: 2000/04/13 01:53:07 lpd)
	- `make install' didn't install all the documentation files.
(unixinst.mak [1.9]: 2000/04/14 04:06:13 lpd)
	- The Color LaserJet 5 drivers were incorrectly identified as
"supported" rather than "contributed". (contrib.mak [1.7], devs.mak [1.17]:
2000/04/20 17:12:54 lpd)
	- PDF images with a bitmap Mask caused errors or produced incorrect
output. (int.mak [1.20]: 2000/04/24 00:59:04 lpd)

Completely redesigns the representation of CMaps, to reduce space
requirements and make comparing them more reasonable, changing gs_cmap to
gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
PostScript code currently only handles a few well-behaved CMap structures.)
(int.mak [1.16]: 2000/04/08 03:54:38 lpd)

Updates version #s to 6.21. (We should have done this earlier.)
(version.mak [1.12]: 2000/04/10 04:46:36 lpd)

Overhauls font embedding in the PDF writer: splits off the code into a new
file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and
adds a little bit of code for future support of Type 0 and CID-keyed fonts.
(devs.mak [1.10]: 2000/04/10 07:48:37 lpd)

Adds Function-based tint_transform procedures for Separation and DeviceN
color spaces. (lib.mak [1.11]: 2000/04/10 19:02:19 lpd)

Factors out code for writing functions and for adding filter-related entries
to a stream dictionary; implements the DefaultRenderingIntent distiller
parameter. (devs.mak [1.12]: 2000/04/11 16:06:57 lpd)

Implements additional distiller parameters: PreserveHalftoneInfo,
PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs.
Remove), UCRandBGInfo. Splits off graphics state management into separate
files. Implements the remaining graphics state parameters (halftone,
transfer function, black generation, undercolor removal, halftone phase,
smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******.
In anticipation of handling more general colors, renames pdf_set_color as
pdf_set_pure_color, and adds pdf_set_drawing_color. (devs.mak [1.13]:
2000/04/11 18:31:32 lpd)

Splits off creation and writing of color spaces, and writing color values,
into a separate file. Adds support for (Function-based) Separation and
DeviceN color spaces, general Pattern color spaces, and procedure-based
Indexed color spaces. Adds some code to support Pattern colors, but stubs it
out because it depends on changes in the image writing code that haven't
been integrated yet. In fact, most of the new code isn't called yet, either.
(devs.mak [1.14]: 2000/04/11 19:10:13 lpd)

In pdfwrite, rewrites the image writing code to use Cos objects rather than
direct printing, and splits off the creation of image dictionaries into a
new file; adds support for tiling with uncolored Patterns; implements
converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the
same for ImageType 3. This code is "in progress" and likely to have problems
for a while. (devs.mak [1.15]: 2000/04/12 18:44:35 lpd)

Adds user-contributed uniprint parameter files for the Canon BJC-8200,
including an addition for the Red Hat printer data base.
(unixinst.mak [1.8]: 2000/04/14 03:59:57 lpd)

Adds code to write out CMaps, similar to the code for writing fonts, for
eventual embedding in PDF output. (int.mak [1.18], lib.mak [1.12]:
2000/04/14 07:17:24 lpd)

Completes code for reading and writing CMaps. (int.mak [1.19],
lib.mak [1.13]: 2000/04/16 03:05:29 lpd)

Adds a user-contributed driver for the Epson Stylus (Color) Photo printers.
(contrib.mak [1.6]: 2000/04/18 06:34:26 lpd)

Converts the ps2epsi documentation to HTML. (unixinst.mak [1.10]: 2000/04/18
17:59:13 lpd)

Checks in the accumulated change log. (version.mak [1.13]: 2000/04/20
07:24:22 lpd)

Converts the bmp* and bmpa* devices to -dev2, to make them const.
(devs.mak [1.18]: 2000/04/20 17:19:21 lpd)

Removes the gp_ procedures for managing screen swapping between console and
graphics, which haven't been used for a long time and are no longer useful.
(dvx-tail.mak [1.2], lib.mak [1.14], openvms.mak [1.3], openvms.mmk [1.4],
os2.mak [1.5], unix-aux.mak [1.2], watc.mak [1.3], watclib.mak [1.3],
winlib.mak [1.2]: 2000/04/20 22:47:35 lpd)

Removes all remaining direct references to stdin/out/err from the library,
interpreter, and non-contributed drivers; moves the ersatz definitions of
stdin/out/err to a new header file. (lib.mak [1.15], unix-gcc.mak [1.5]:
2000/04/20 23:30:22 lpd)

Adds compression for pdfwrite Patterns. (devs.mak [1.19]: 2000/04/24
06:13:02 lpd)

Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
No output is produced until the filter is closed. (devs.mak [1.20],
int.mak [1.21], lib.mak [1.16]: 2000/04/27 14:39:57 lpd)

Adds a user-contributed driver for the H-P 970Cxi inkjet printer.
(contrib.mak [1.8]: 2000/04/27 14:55:56 lpd)

Factors the H-P monochrome laser and inkjet drivers into a generic driver
and printer-specific clients. (devs.mak [1.21]: 2000/04/27 20:16:33 lpd)

Adds a user-contributed driver for the Brother HL-1250 laser printer. This
has a dual AFPL/GPL license, and a non-Aladdin copyright.
(contrib.mak [1.9]: 2000/04/27 20:18:39 lpd)

Once again, updates some dependency lists that had become inconsistent with
the code. (contrib.mak [1.10], devs.mak [1.22], lib.mak [1.17]: 2000/04/27
21:36:19 lpd)

Yet again, updates an out-of-date dependency list. (contrib.mak [1.11]:
2000/04/28 18:28:42 lpd)

Changes the check for documentation files having the correct embedded date.
(toolbin/pre [1.3]: 2000/04/28 18:29:14 lpd)

Updates version numbers and dates for the 6.21 fileset. (version.mak [1.14]:
2000/04/28 22:06:26 lpd)

</pre><h2><a name="6.21 Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- The e-mail address for reporting problems was out of date.
(lib/ps2epsi.ps [1.2]: 2000/04/10 02:27:21 lpd)
	- If a font didn't have a FontName (which is the case for bitmap
fonts produced by recent versions of dvips), ps2epsi caused an error.
(lib/ps2epsi.ps [1.3]: 2000/04/11 16:32:51 lpd)
	- Backs out contributed changes of 2000-03-05 because of bugs.
(ansi2knr.c [1.3]: 2000/04/13 03:41:48 lpd)
	- ps2epsi removed all ^M characters in the input, possibly
corrupting binary data. (lib/ps2epsi [1.2]: 2000/04/27 01:44:04 lpd)

Makes the ps2pdf scripts replace a .eps extension with .pdf, as they do with
.ps. (lib/ps2pdfwr [1.2], lib/ps2pdfxx.bat [1.2]: 2000/04/07 19:28:14 lpd)

Enhances pdf2ps to allow defaulting the output file name. (lib/pdf2ps [1.2]:
2000/04/11 14:23:24 lpd)

Makes the second argument of the pfbtopfa script optional, so 'pfbtopfa
dir/x.pfb' is equivalent to 'pfbtopfa dir/x.pfb x.pfa'. (lib/pfbtopfa [1.2]:
2000/04/12 17:41:41 lpd)

Adds user-contributed uniprint parameter files for the Canon BJC-8200,
including an addition for the Red Hat printer data base. (lib/bj8.rpd [1.1]:
2000/04/14 03:59:57 lpd)

Increases the VMThreshold when converting PostScript to PDF, to reduce
garbage collection overhead. (lib/ps2pdfwr [1.3]: 2000/04/17 19:06:58 lpd)

Moves the optimization prologue for ps2pdf from the command line to a
procedure, to avoid shell length limits. (lib/ps2pdfwr [1.4],
lib/ps2pdfxx.bat [1.3]: 2000/04/18 16:40:14 lpd)

Removes the gp_ procedures for managing screen swapping between console and
graphics, which haven't been used for a long time and are no longer useful.
(bench.c [1.2], gp_dosfb.c [1.2], gp_iwatc.c [1.2], gp_nofb.c [1.2]:
2000/04/20 22:47:35 lpd)

Checks in a file overlooked in the elimination of the gp_ console
procedures. (gp_os2.c [1.2]: 2000/04/20 23:27:21 lpd)

</pre><h2><a name="6.21 Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- The pdfwrite driver sometimes compressed images in an Indexed
color space with the DCTEncode filter, producing garbage. (gdevpsdi.c [1.4]:
2000/04/12 19:25:56 lpd)
	- Setting pdfwrite parameters for a DCTEncode filter could cause a
crash (memory fault). (gdevpsdf.h [1.7], gdevpsdi.c [1.5], gdevpsdp.c [1.4],
gdevpsdu.c [1.2]: 2000/04/13 01:53:07 lpd)
	- Compressing with DCTEncode tried to add the compression filter
twice. (gdevpsdi.c [1.6]: 2000/04/13 04:52:38 lpd)
	- The PDF writer could get an ioerror when downsampling images whose
size wasn't an exact multiple of the downsampling factor. (gdevpsdi.c [1.7],
gdevpsds.c [1.2], gdevpsds.h [1.2]: 2000/04/13 16:44:59 lpd)
	- Downsampled mask images could cause a memory access error.
(gdevpsdi.c [1.9]: 2000/04/18 16:37:04 lpd)
	- PDF Patterns weren't written correctly if the ProcessColorModel
wasn't Device RGB. (gdevpsdu.c [1.3]: 2000/04/24 05:40:30 lpd)
	- The [e]pswrite driver produced incorrect output for color images
with multiple data sources. (gdevps.c [1.5]: 2000/04/25 19:35:07 lpd)

Implements pdfwrite compression for mask images, using the same parameters
as for monochrome images. (gdevpsdi.c [1.8]: 2000/04/13 18:40:23 lpd)

Adds user-contributed uniprint parameter files for the Canon BJC-8200,
including an addition for the Red Hat printer data base.
(lib/bj8gc12f.upp [1.1], lib/bj8hg12f.upp [1.1], lib/bj8oh06n.upp [1.1],
lib/bj8pa06n.upp [1.1], lib/bj8pp12f.upp [1.1], lib/bj8ts06n.upp [1.1]:
2000/04/14 03:59:57 lpd)

Adds a user-contributed driver for the Epson Stylus (Color) Photo printers.
(gdevphex.c [1.1]: 2000/04/18 06:34:26 lpd)

Converts the bmp* and bmpa* devices to -dev2, to make them const.
(gdevbmp.c [1.2], gdevbmpa.c [1.2]: 2000/04/20 17:19:21 lpd)

Documents the astounding fact that the Xt implementation actually writes
into the XtResource tables. (gdevxres.c [1.2]: 2000/04/20 19:59:28 lpd)

Removes all remaining direct references to stdin/out/err from the library,
interpreter, and non-contributed drivers; moves the ersatz definitions of
stdin/out/err to a new header file. (gdevxxf.c [1.3]: 2000/04/20 23:30:22
lpd)

When writing PDF output, reduces the size of compressed images in Indexed
color spaces by not using a Predictor for them. (gdevpsdi.c [1.10]:
2000/04/21 06:46:08 lpd)

Adds an internal filter for converting images to Indexed form if possible.
(gdevpsds.c [1.3], gdevpsds.h [1.3]: 2000/04/21 19:26:37 lpd)

Cleans up code by replacing macros with procedures or variables.
(gdevps.c [1.6]: 2000/04/25 20:35:46 lpd)

Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or
vertical line segments going in the same direction. This makes a big
difference for PostScript files produced by certain applications.
(gdevps.c [1.7]: 2000/04/25 22:39:54 lpd)

Adds a user-contributed driver for the H-P 970Cxi inkjet printer.
(gdevdj9.c [1.1]: 2000/04/27 14:55:56 lpd)

Factors the H-P monochrome laser and inkjet drivers into a generic driver
and printer-specific clients. (gdevdjet.c [1.3], gdevdljm.c [1.1],
gdevdljm.h [1.1]: 2000/04/27 20:16:33 lpd)

Adds a user-contributed driver for the Brother HL-1250 laser printer. This
has a dual AFPL/GPL license, and a non-Aladdin copyright. (gdevhl12.c [1.1]:
2000/04/27 20:18:39 lpd)

Once again, updates some dependency lists that had become inconsistent with
the code. (gdevdj9.c [1.2]: 2000/04/27 21:36:19 lpd)

Makes the printers in gdevdjet.c that support setting the number of copies
use this feature when multiple copies are requested. (gdevdjet.c [1.4],
gdevdljm.c [1.2], gdevdljm.h [1.2]: 2000/04/28 13:37:47 lpd)

</pre><h2><a name="6.21 PDF writer"></a>PDF writer</h2><pre>

Fixes problems:
	- The Cos objects of resources not shared between pages weren't
freed at the end of each page. (gdevpdf.c [1.9]: 2000/04/10 04:17:56 lpd)
	- gdevpdfe.c was omitted from the check-in for the overhaul of
pdfwrite font embedding. (gdevpdfe.c [1.1]: 2000/04/10 16:01:29 lpd)
	- pdfwrite output could contain commands to set the line width to a
negative value, which PostScript allows but PDF doesn't. (gdevpdfd.c [1.6]:
2000/04/12 19:51:14 lpd)
	- The changes for the new color handling code caused stroked
graphics not to output the line width. (new bug since 6.20)
(gdevpdfd.c [1.7]: 2000/04/13 03:47:21 lpd)
	- Pattern resources were written with incorrectly scaled XStep and
YStep, and without a Type entry. (gdevpdfc.c [1.3], gdevpdfi.c [1.10]:
2000/04/13 04:12:33 lpd)
	- The PDF writer could get an ioerror when downsampling images whose
size wasn't an exact multiple of the downsampling factor.
(gdevpdfi.c [1.11]: 2000/04/13 16:44:59 lpd)
	- Bitmapped characters weren't written properly on the output file
(new bug since 6.20). (gdevpdfg.h [1.4], gdevpdfi.c [1.12],
gdevpdfj.c [1.2]: 2000/04/13 17:24:54 lpd)
	- gxdcolor.h was required for gxpcolor.h, but wasn't included.
(gdevpdfc.c [1.4]: 2000/04/18 17:42:55 lpd)
	- A table of constant strings wasn't declared as const.
(gdevpdfp.c [1.7]: 2000/04/20 17:37:31 lpd)
	- When pdfwrite was producing PDF 1.3 output, the base 14 fonts were
never embedded, rather than being handled like all other fonts.
(gdevpdff.c [1.4]: 2000/04/20 23:49:40 lpd)
	- Indexed color spaces used in in-line images were being written
incorrectly. Also optimizes Indexed images by converting RGB palettes to
Gray if all the entries are actually gray. (gdevpdfc.c [1.5]: 2000/04/21
15:29:20 lpd)
	- The recent optimization for using the ' command in PDF output lost
track of the leading value between blocks of text, causing lines in later
blocks to overprint each other. (gdevpdfu.c [1.9]: 2000/04/21 22:29:05 lpd)
	- Backs out the change that allowed embedding of the base 14 fonts,
because it produces invalid output. (gdevpdff.c [1.5]: 2000/04/22 00:13:11
lpd)
	- Colored Patterns requiring masking weren't written properly.
(gdevpdfc.c [1.6]: 2000/04/24 00:09:37 lpd)
	- Patterns were written upside-down. (gdevpdfc.c [1.7]: 2000/04/24
01:11:36 lpd)
	- PDF Patterns weren't written correctly if the ProcessColorModel
wasn't Device RGB. (gdevpdf.c [1.15], gdevpdfc.c [1.8], gdevpdfg.h [1.5],
gdevpdfi.c [1.13], gdevpdfx.h [1.15]: 2000/04/24 05:40:30 lpd)
	- The color space for images wasn't always written in the correct
form (an object reference for image XObjects, a resource name for in-line
images). (gdevpdfi.c [1.14]: 2000/04/28 12:07:37 lpd)
	- Patterns were sometimes written with a duplicate Type element.
(gdevpdfc.c [1.10]: 2000/04/28 12:23:54 lpd)
	- Patterns were sometimes written twice, with an empty definition
the second time. (gdevpdfi.c [1.15]: 2000/04/28 12:24:42 lpd)

Overhauls font embedding in the PDF writer: splits off the code into a new
file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and
adds a little bit of code for future support of Type 0 and CID-keyed fonts.
(gdevpdff.c [1.3], gdevpdff.h [1.2], gdevpdft.c [1.6], gdevpdfw.c [1.3]:
2000/04/10 07:48:37 lpd)

Factors out code for writing functions and for adding filter-related entries
to a stream dictionary; implements the DefaultRenderingIntent distiller
parameter. (gdevpdf.c [1.10], gdevpdfu.c [1.6], gdevpdfx.h [1.8]: 2000/04/11
16:06:57 lpd)

Adds ExtGState resources. These should be written and freed at the end of
each page, but they aren't yet. (gdevpdfx.h [1.9]: 2000/04/11 16:38:14 lpd)

Implements additional distiller parameters: PreserveHalftoneInfo,
PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs.
Remove), UCRandBGInfo. Splits off graphics state management into separate
files. Implements the remaining graphics state parameters (halftone,
transfer function, black generation, undercolor removal, halftone phase,
smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******.
In anticipation of handling more general colors, renames pdf_set_color as
pdf_set_pure_color, and adds pdf_set_drawing_color. (gdevpdf.c [1.11],
gdevpdfd.c [1.4], gdevpdfg.c [1.1], gdevpdfg.h [1.1], gdevpdfi.c [1.8],
gdevpdft.c [1.7], gdevpdfu.c [1.7], gdevpdfx.h [1.10]: 2000/04/11 18:31:32
lpd)

Splits off creation and writing of color spaces, and writing color values,
into a separate file. Adds support for (Function-based) Separation and
DeviceN color spaces, general Pattern color spaces, and procedure-based
Indexed color spaces. Adds some code to support Pattern colors, but stubs it
out because it depends on changes in the image writing code that haven't
been integrated yet. In fact, most of the new code isn't called yet, either.
(gdevpdf.c [1.12], gdevpdfc.c [1.1], gdevpdfd.c [1.5], gdevpdfg.c [1.2],
gdevpdfg.h [1.2], gdevpdft.c [1.8], gdevpdfx.h [1.11]: 2000/04/11 19:10:13
lpd)

Integrates a couple of minor overlooked changes in the text-writing code.
(gdevpdf.c [1.13], gdevpdft.c [1.9], gdevpdfx.h [1.12]: 2000/04/11 19:20:56
lpd)

In pdfwrite, rewrites the image writing code to use Cos objects rather than
direct printing, and splits off the creation of image dictionaries into a
new file; adds support for tiling with uncolored Patterns; implements
converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the
same for ImageType 3. This code is "in progress" and likely to have problems
for a while. (gdevpdf.c [1.14], gdevpdfc.c [1.2], gdevpdfg.c [1.3],
gdevpdfg.h [1.3], gdevpdfi.c [1.9], gdevpdfj.c [1.1], gdevpdfx.h [1.13]:
2000/04/12 18:44:35 lpd)

Tweaks the PDF writer to use the ' command for positioning text when
possible (small optimization only). (gdevpdfg.c [1.4], gdevpdft.c [1.10],
gdevpdfu.c [1.8], gdevpdfx.h [1.14]: 2000/04/18 16:08:16 lpd)

Reduces the startup time for displaying PDF files, by skipping the creation
of pdfmarks for annotations and outlines when the output device doesn't
process pdfmarks. (gdevpdfp.c [1.8]: 2000/04/21 16:58:28 lpd)

Adds compression for pdfwrite Patterns. (gdevpdfc.c [1.9]: 2000/04/24
06:13:02 lpd)

Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or
vertical line segments going in the same direction. This makes a big
difference for PostScript files produced by certain applications.
(gdevpdf.c [1.16], gdevpdfd.c [1.8]: 2000/04/25 22:39:54 lpd)

Updates the list of remaining pdfwrite tasks. (gdevpdfp.c [1.9]: 2000/04/27
21:36:52 lpd)

</pre><h2><a name="6.21 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>

Fixes problems:
	- Embedded subset CFF fonts in PDF files were defined using the name
in the font data rather than the font name in the PDF resource object. (bug
#102901) (lib/pdf_ops.ps [1.5]: 2000/04/11 05:33:13 lpd)
	- When processing a PDF file, the font substitution heuristic based
on the FontName sometimes overrode the Flags information in the
FontDescriptor. (lib/pdf_font.ps [1.6]: 2000/04/20 06:36:02 lpd)
	- PDF images with a bitmap Mask caused errors or produced incorrect
output. (lib/pdf_draw.ps [1.10]: 2000/04/24 00:59:04 lpd)
	- Masked images weren't drawn properly, because the two data sources
could reference the same file. (lib/pdf_draw.ps [1.11]: 2000/04/24 05:39:45
lpd)
	- *Really* fixes the problem of data source aliasing for masked
images. (lib/pdf_draw.ps [1.12]: 2000/04/24 05:53:43 lpd)
	- If a font specified Subtype = /TrueType but the actual font used
was not a TrueType font, any Encoding in the Font object should be ignored.
(This is a hack required by the PDF specification.) (lib/pdf_font.ps [1.7]:
2000/04/24 06:37:18 lpd)
	- Colored annotation borders caused an error; 0-width borders were
drawn even though they shouldn't be; Link and Stamp annotations weren't
drawn at all. Also adds a new -dPrinted[=true/false] switch to choose
whether to produce "screen" or "printer" output. (code from Artifex)
(lib/pdf_draw.ps [1.13], lib/pdf_main.ps [1.7]: 2000/04/27 08:16:40 lpd)

Makes undefined XObject resources for the Do operator produce a warning
rather than an error, to parallel Acrobat Reader. (lib/pdf_draw.ps [1.9]:
2000/04/16 07:48:23 lpd)

Tweaks up the performance of the PDF interpreter loop slightly.
(lib/pdf_base.ps [1.7]: 2000/04/18 05:45:49 lpd)

Reduces the startup time for displaying PDF files, by skipping the creation
of pdfmarks for annotations and outlines when the output device doesn't
process pdfmarks. (lib/pdf_main.ps [1.6]: 2000/04/21 16:58:28 lpd)

</pre><h2><a name="6.21 Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- Fixes some signed/unsigned char * mismatches. (zfrsd.c [1.3]:
2000/04/07 15:27:14 lpd)
	- Automatic loading of fonts from resource files didn't work
(usually caused an unmatchedmark or typecheck error).
(lib/gs_fonts.ps [1.5], lib/gs_res.ps [1.9]: 2000/04/08 03:45:41 lpd)
	- A -> should have been a . (only shows up on 64-bit systems).
(zfunc4.c [1.3]: 2000/04/09 20:04:00 lpd)
	- the most recent 'fixes' for loading font resources caused all
built-in fonts to be returned as null. (lib/gs_res.ps [1.10]: 2000/04/09
22:51:01 lpd)
	- /Category defineresource didn't make the category definition
dictionary read-only. (lib/gs_res.ps [1.11]: 2000/04/10 18:29:04 lpd)
	- Attempting to build an invalid FunctionType 4 function could cause
a memory access error. (zfunc4.c [1.4]: 2000/04/10 19:38:53 lpd)
	- Embedded subset CFF fonts in PDF files were defined using the name
in the font data rather than the font name in the PDF resource object. (bug
#102901) (lib/gs_cff.ps [1.4]: 2000/04/11 05:33:13 lpd)
	- CMaps with more than one code space range weren't converted to the
internal form correctly; begincidchar and beginnotdefchar caused errors.
(lib/gs_cmap.ps [1.3], zfcmap.c [1.6]: 2000/04/14 07:53:10 lpd)
	- flushfile and closefile didn't properly flush streams whose final
target was a procedure, and closefile didn't actually close them. (This is a
very old bug.) (zfproc.c [1.2]: 2000/04/18 05:50:15 lpd)
	- CIDFontType 0 CIDFonts in which some FDArray element had no Subrs
caused an error. (lib/gs_cidfn.ps [1.14]: 2000/04/18 05:58:08 lpd)
	- Attempting to set a PageSize with 4 elements actually set the
PageSize (to the first 2 elements), rather than ignoring the attempt. (This
is just a patch to prevent some PageMaker files from being thrown off by the
4-element PageSizes in Input Attributes.) (lib/gs_setpd.ps [1.2]: 2000/04/19
06:01:19 lpd)
	- When choosing a substituted font, 'Serif' had priority over
'Sans', so unknown fonts with 'SansSerif' in their name would have a serif
font substituted. (lib/gs_fonts.ps [1.6]: 2000/04/19 13:48:48 lpd)
	- The fix to make setpagedevice ignore 4-element PageSizes in
InputAttributes was broken. (It's impossible that it could ever have worked,
despite the fact that we tested it.) (lib/gs_setpd.ps [1.3]: 2000/04/20
06:24:39 lpd)
	- When processing a PDF file, the font substitution heuristic based
on the FontName sometimes overrode the Flags information in the
FontDescriptor. (lib/gs_fonts.ps [1.7]: 2000/04/20 06:36:02 lpd)
	- Showing a string in a Type 1 font with a singular combined matrix
(e.g., after 0 scalefont setfont) caused an error instead of doing nothing.
(zchar1.c [1.3]: 2000/04/22 00:34:46 lpd)
	- Images with multiple file DataSources where two or more of the
files were the same caused a crash. (zimage.c [1.3]: 2000/04/24 00:07:41
lpd)
	- .reusablestreamdecode wasn't defined for use in LanguageLevel 2.
(The ReusableStreamDecode filter itself was properly defined.)
(lib/gs_frsd.ps [1.3]: 2000/04/24 00:45:38 lpd)
	- Loading an unknown font gave a spurious "non-string font name"
message; unknown fonts with names containing style strings like Bold or
Italic caused an error. (bug introduced since 6.20) (lib/gs_fonts.ps [1.8]:
2000/04/28 22:03:58 lpd)

Adds a workaround for misnamed glyphs in some Microsoft TrueType font 'post'
tables. (lib/gs_mgl_e.ps [1.2], lib/gs_ttf.ps [1.4]: 2000/04/08 01:53:16
lpd)

Completely redesigns the representation of CMaps, to reduce space
requirements and make comparing them more reasonable, changing gs_cmap to
gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
PostScript code currently only handles a few well-behaved CMap structures.)
(lib/gs_cmap.ps [1.2], zfcmap.c [1.4], zfont0.c [1.2]: 2000/04/08 03:54:38
lpd)

Updates version #s to 6.21. (We should have done this earlier.)
(lib/gs_init.ps [1.7]: 2000/04/10 04:46:36 lpd)

Makes Separation and DeviceN color spaces detect that their tint transform
procedure is a Function, and call it rather than using its cached values.
(zcsdevn.c [1.2], zcssepr.c [1.3]: 2000/04/10 19:39:44 lpd)

Adds code to write out CMaps, similar to the code for writing fonts, for
eventual embedding in PDF output. (zfcmap.c [1.5]: 2000/04/14 07:17:24 lpd)

Completes code for reading and writing CMaps. (lib/gs_cmap.ps [1.4],
zfcmap.c [1.7]: 2000/04/16 03:05:29 lpd)

Works around a bug in the AdobePS5 Windows driver, which emits CMaps lacking
the required CMapName entry. (lib/gs_cidfn.ps [1.15], lib/gs_cmap.ps [1.5]:
2000/04/18 07:18:42 lpd)

Moves the optimization prologue for ps2pdf from the command line to a
procedure, to avoid shell length limits. (lib/gs_pdfwr.ps [1.3]: 2000/04/18
16:40:14 lpd)

Removes all remaining direct references to stdin/out/err from the library,
interpreter, and non-contributed drivers; moves the ersatz definitions of
stdin/out/err to a new header file. (imainarg.c [1.2]: 2000/04/20 23:30:22
lpd)

Speeds up Type 1 font loading slightly by removing a conversion from binary
to hex and back again. (zmisc1.c [1.2]: 2000/04/22 16:03:18 lpd)

Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
No output is produced until the filter is closed. (zfmd5.c [1.1]: 2000/04/27
14:39:57 lpd)

Adds a sample file containing a wide variety of PDF annotations; updates
documentation for this and some other overlooked files.
(examples/annots.pdf [1.1]: 2000/04/28 10:51:02 lpd)

</pre><h2><a name="6.21 Streams"></a>Streams</h2><pre>

Fixes problems:
	- FILE_IMPLEMENTATION=both was broken (by the introduction of
sread_subfile). (sfxfd.c [1.3]: 2000/04/10 02:41:48 lpd)
	- flushfile and closefile didn't properly flush streams whose final
target was a procedure, and closefile didn't actually close them. (This is a
very old bug.) (stream.c [1.6]: 2000/04/18 05:50:15 lpd)
	- The PixelDifference filters (Predictor = 2) weren't implemented
for Colors > 4 and BitsPerComponent != 8, and they dropped trailing bytes if
the length of the data wasn't an exact multiple of the pixel size.
(spdiff.c [1.2]: 2000/04/22 03:55:22 lpd)

Enhances the ASCII85Encode filter to avoid %! at the beginning of a line of
output, in addition to avoiding %% which it did already. (sa85x.h [1.2],
sfilter2.c [1.2]: 2000/04/08 01:30:36 lpd)

Removes all remaining direct references to stdin/out/err from the library,
interpreter, and non-contributed drivers; moves the ersatz definitions of
stdin/out/err to a new header file. (std.h [1.2]: 2000/04/20 23:30:22 lpd)

Speeds up Type 1 font loading slightly by removing a conversion from binary
to hex and back again. (seexec.c [1.2], sfilter.h [1.5]: 2000/04/22 16:03:18
lpd)

Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input.
No output is produced until the filter is closed. (smd5.c [1.1],
smd5.h [1.1]: 2000/04/27 14:39:57 lpd)

</pre><h2><a name="6.21 Library"></a>Library</h2><pre>

Fixes problems:
	- Fixes some signed/unsigned char * mismatches. (gdevpsf2.c [1.5]:
2000/04/07 15:27:14 lpd)
	- Writing a Type 2 CFF with multiply-encoded glyphs produced an
incorrect Encoding. Also, when producing output for PDF 1.2 files, no longer
emits certain opcodes that cause an (unjustified) error in Acrobat Reader 3
for Linux. (gdevpsf.h [1.3], gdevpsf2.c [1.6]: 2000/04/10 07:42:31 lpd)
	- gsmisc.c didn't compile in DEBUG mode on systems with a
non-standard prototype for the sqrt function. (gsmisc.c [1.3]: 2000/04/10
16:00:31 lpd)
	- One picky compiler complained about (1L << 31). (gsmisc.c [1.4]:
2000/04/10 17:21:41 lpd)
	- putdeviceparams allowed a PageSize or .MediaSize value with the
wrong number of elements to take effect. (gsdparam.c [1.2]: 2000/04/19
05:59:05 lpd)
	- The elimination of stdin/out/err also eliminated some #defines
that are needed for error printout. (gsio.h [1.3]: 2000/04/21 06:39:17 lpd)
	- The structure descriptor for ImageType 3 images was public rather
than private. (gsiparm3.h [1.3], gximage3.c [1.2]: 2000/04/22 07:02:18 lpd)
	- The "point matching" feature of TrueType composite glyphs wasn't
implemented, causing some composite (accented) characters to have their
accents misplaced. (gstype42.c [1.4]: 2000/04/25 07:22:50 lpd)

Completely redesigns the representation of CMaps, to reduce space
requirements and make comparing them more reasonable, changing gs_cmap to
gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The
PostScript code currently only handles a few well-behaved CMap structures.)
(gsfcmap.c [1.4], gsfcmap.h [1.2], gxfcmap.h [1.3], gxfont0.h [1.2]:
2000/04/08 03:54:38 lpd)

Adds Function-based tint_transform procedures for Separation and DeviceN
color spaces. (gscdevn.c [1.3], gscdevn.h [1.2], gscsepr.c [1.3],
gscsepr.h [1.2]: 2000/04/10 19:02:19 lpd)

Adds code to write out CMaps, similar to the code for writing fonts, for
eventual embedding in PDF output. (gdevpsf.h [1.4], gdevpsfm.c [1.1]:
2000/04/14 07:17:24 lpd)

Completes code for reading and writing CMaps. (gdevpsf.h [1.5],
gdevpsfm.c [1.2], gsccode.h [1.3], gsfcid.c [1.3], gsfcmap.c [1.5],
gxcid.h [1.2], gxfcmap.h [1.4]: 2000/04/16 03:05:29 lpd)

Removes the gp_ procedures for managing screen swapping between console and
graphics, which haven't been used for a long time and are no longer useful.
(gp.h [1.3]: 2000/04/20 22:47:35 lpd)

Removes all remaining direct references to stdin/out/err from the library,
interpreter, and non-contributed drivers; moves the ersatz definitions of
stdin/out/err to a new header file. (gsdevice.c [1.3], gsio.h [1.2],
gsmisc.c [1.5], gxdevice.h [1.2]: 2000/04/20 23:30:22 lpd)

Adds an essential new file overlooked in the removal of references to
stdin/out/err. (gxstdio.h [1.1]: 2000/04/20 23:50:20 lpd)

Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or
vertical line segments going in the same direction. This makes a big
difference for PostScript files produced by certain applications.
(gdevvec.c [1.2], gdevvec.h [1.2]: 2000/04/25 22:39:54 lpd)

Adds template macros for printer devices that implement print_page_copies
rather than print_page. (gdevprn.c [1.2], gdevprn.h [1.3]: 2000/04/28
13:36:16 lpd)

<hr>

<h1><a name="Version6.20"></a>Version 6.20 (2000-04-06)</h1>

<p>
This fileset includes the first steps towards bringing the pdfwrite driver
closer to matching Acrobat Distiller 4.  Highlights:

<ul>

<li> Reimplementation of CIDFontType 0 support in C rather than PostScript;

<li> Parsing (but not functional implementation) of nearly all the Acrobat
Distiller 4 parameters;

<li> Implementation of AutoRotatePages and DCTEncode filtering in the PDF
writer;

<li> A PDF linearizer ("optimizer").

</ul>

<p>
All problems registered on SourceForge numbered 103963 or lower are closed,
except for the following: 101549, 101814, 101829, 101905, 101955, 102046,
102047, 102132, 102146, 102735, 102901, 103016, 103528, 103963.

<pre>

<h2><a name="6.20_Incompatible_changes"></a>Incompatible changes</h2>

(Procedures)
	- The default value of FPU_TYPE in all Windows and OS/2 makefiles
is now 387 rather than 0.
	- The process for reporting problems has changed significantly.
(PDF writer)
	- The Cos procedures no longer take the device as an argument,
except for object-creating procedures, which now take the device rather
than an allocator.
	- The is_object member of Cos values is replaced by value_type.
Clients must use COS_VALUE_IS_OBJECT() to test whether a value is an object
reference.
	- The Cos procedures that take C strings no longer copy the string.
	- The argument of cos_write_object is no longer const.
(Drivers)
	- The default BufferSpace for printer drivers is now 4 Mb.
	- Device halftone order implementations must now provide a new
bit_index procedure.
	- The image argument for psdf_setup_image_filters is changed from
gs_image_t to gs_pixel_image_t.
	- The font-related psdf_ procedures are renamed psf_.
(Streams)
	- The interface to the [T]BCP filters is now in a separate file,
sbcp.h.
(PDF interpreter)
	- The internal beginpage procedure is renamed dictbeginpage, and
now takes a dictionary argument.
(Interpreter)
	- The argument list for the internal build_gs_TrueType_font
procedure has changed.
	- The zcharstring_glyph_outline procedure is renamed
zchar1_glyph_outline.
	- The Instances dictionary of resources is renamed .Instances.
(Library)
	- ImageType 4 images now give an error if a MaskColor value is out
of the range of possible sample values.
	- The definition of gs_param_key_t, the key type returned by
parameter list enumeration, is changed.
	- Implementors of parameter lists must now call gs_param_list_init
to initialize the common members.
	- st_indexed_map is now private.  Clients allocating instances of
this structure must now call alloc_indexed_map.
	- Setting a transfer map as the identity mapping now requires
calling gx_set_identity_transfer.
	- gs_cid_system_info is renamed gs_cid_system_info_t.
	- The get_outline procedure of a Type 42 or Type 11 (CIDFontType 0)
font now returns 1 if the string was newly allocated and can be freed by the
client.
	- The procs member of gs_type1_data is now an in-line structure
rather than a pointer to a const structure.


<h2><a name="6.20 Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- If log2_transfer_map_size > 8, identity transfer functions
returned garbage. The fix requires that if a client wants to set a transfer
function to the identity mapping, it must call gx_set_identity_transfer
rather than simply setting the procedure to gs_identity_transfer.
(doc/News.htm [1.13]: 2000/03/19 17:14:47 lpd)
	- In PDF files, the page CropBox was not being used to clip the
output. (doc/News.htm [1.18]: 2000/03/21 23:08:32 lpd)
	- Fixes several problems in resourceforall and resource loading: the
operands of resourceforall were restored even in the case of an error in the
client's procedure; the name Instances had special meaning for some Adobe
code; resourceforall caused an invalidaccess error if an operand was in
local VM but the current VM was global; loading a resource from a file could
cause a typecheck error if the file left values on the operand stack.
(doc/News.htm [1.25]: 2000/04/04 22:26:02 lpd)
	- The location of the lists of supported and unsupported drivers was
incorrect. (doc/Bug-info.htm [1.2]: 2000/04/07 03:01:52 lpd)

Undoes an accidental RCS ID substitution in what was supposed to be literal
text. (doc/Htmstyle.htm [1.2]: 2000/03/18 22:29:03 lpd)

Increments the version number to 6.20, in anticipation of the next release.
(We do this at the beginning of the development for a release, not the end.)
(doc/History6.htm [1.4], doc/News.htm [1.6]: 2000/03/19 00:27:22 lpd)

Splits out the [T]BCP filter interface into a separate file.
(doc/News.htm [1.7]: 2000/03/19 02:40:18 lpd)

Documents the fact that ImageType 4 images now cause an error for
out-of-range MaskColor values. (doc/News.htm [1.8]: 2000/03/19 04:32:09 lpd)

Updates the change log with recent changes. (doc/Changes.htm [1.4]:
2000/03/19 05:39:58 lpd)

Adds a new document listing projects with which we are seeking help. Also
makes the description of Changes.htm and News.htm more accurate.
(doc/New-user.htm [1.2], doc/Projects.htm [1.1], doc/Readme.htm [1.3]:
2000/03/19 06:07:15 lpd)

Changes the default value of BufferSpace to 4 Mb. In desktop applications,
this is a reasonable value that can substantially improve performance
(especially for color printers); embedded applications will want to set
BufferSpace themselves in any case. (doc/News.htm [1.9]: 2000/03/19 06:51:13
lpd)

Changes the key type returned by parameter list enumeration to include a
persistence flag, makes C parameter lists support non-persistent keys, and
upgrades GC descriptors so that parameter lists can be used non-transiently;
updates implementors of parameter lists to call gs_param_list_init to
initialize the common members, which is now required. (doc/News.htm [1.10]:
2000/03/19 15:16:11 lpd)

Documents the fact that drivers that device halftone order implementations
must now provide the new bit_index procedure. (This should have been
documented when bit_index was introduced!) (doc/News.htm [1.11]: 2000/03/19
15:47:47 lpd)

Makes st_indexed_map private. Clients must now use the constructor procedure
alloc_indexed_map rather than allocating instances directly.
(doc/News.htm [1.12]: 2000/03/19 16:37:28 lpd)

Update the date and change log for the latest batches of checked-in changes.
(doc/Changes.htm [1.5]: 2000/03/19 17:29:57 lpd)

Adds a PDF linearizer ("optimizer"). This is a separate utility (not
integrated with the pdfwrite driver), written in PostScript.
(doc/Psfiles.htm [1.2]: 2000/03/20 04:31:22 lpd)

Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements
the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and
xxxACSImageDict distiller parameters. Implements DCTEncode as an
xxxImageFilter option (it used to cause a crash). Makes the
AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict)
if the image has 8 bits per component and is not Indexed, and LZW/Flate
otherwise: this still isn't right, but it's closer. Implementation changes:
Changes the implementation of distiller parameter dictionaries from stream
states to parameter lists; changes the test for masks in
psdf_setup_image_filters, and changes the image argument from gs_image_t to
gs_pixel_image_t. (doc/News.htm [1.14]: 2000/03/20 05:40:04 lpd)

Moves font-writing support into a new module (gdevpsf*), changing the source
file names. Adds the ability to write CFF fonts, with either Type 1 or Type
2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
Type 2, including optimizing sequences of Type 1 operators into a single
Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
TESTED]. Starts (just barely) to remove more unneeded information from
embedded TrueType fonts. (doc/News.htm [1.15]: 2000/03/20 07:02:12 lpd)

Updates the consolidated change log with today's changes.
(doc/Changes.htm [1.6]: 2000/03/20 07:18:38 lpd)

Starts to move support for CIDFontType 0 and 2 into C code, needed by the
PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
that have a GlyphDirectory (not documented in the PLRM, but clearly
correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
(doc/News.htm [1.16]: 2000/03/20 19:53:06 lpd)

Notes that the argument list for the internal build_gs_TrueType_font
procedure has changed, as part of the CIDFont migration to C code.
(doc/News.htm [1.17]: 2000/03/20 20:04:20 lpd)

Adds invocation scripts and documentation for the PDF "optimizer".
(man/pdfopt.1 [1.1]: 2000/03/21 17:01:33 lpd)

Updates information about reporting problems when using Ghostview or GSview.
(doc/Bug-form.htm [1.3], doc/New-user.htm [1.3]: 2000/03/22 22:13:49 lpd)

Checks in the latest consolidated change log. (doc/Changes.htm [1.7]:
2000/03/24 05:04:55 lpd)

Substantially enhances the Cos object machinery. Interface: Adds a few more
procedures, including a procedure to create a stream that writes directly
into a Cos stream object, procedures for putting more kinds of values into
arrays and dictionaries, and a param_list interface. Changes Cos objects to
store a reference to the PDF device, and removes the device argument from
all Cos procedures other than object creation. Replaces the Boolean
is_object member of Cos values by a value_type enum: clients must now use
COS_VALUE_IS_OBJECT() to test whether a value is an object reference. To
reduce allocator overhead, makes the Cos procedures that take C strings no
longer copy the string. Records whether each Cos object has been written
into the output, so that in the future (but not in this batch of changes)
resource definitions can be copied at the end of each page. Implementation:
Moves more of the implementation of Cos objects to the .c file.
(doc/News.htm [1.19]: 2000/03/24 06:12:52 lpd)

Adds parsing for the remaining Acrobat Distiller 4 parameters, although most
of them don't have any effect yet; brings documentation up to date.
(doc/Ps2pdf.htm [1.3]: 2000/03/28 07:36:58 lpd)

Implements LockDistillerParams; completes the StartPage/EndPage fix checked
in just before. (doc/Ps2pdf.htm [1.4]: 2000/03/28 07:52:06 lpd)

Changes the default value of FPU_TYPE in all Windows and OS/2 makefiles from
0 to 387, since all current desktop CPUs include floating point hardware.
(doc/News.htm [1.20]: 2000/03/28 17:03:48 lpd)

Changes the get_outline / glyph_data procedure for getting encoded font
outline data to return an indication of whether the outline data were just
allocated and can be freed by the client. (This is a possibly
non-backward-compatible change.) (doc/News.htm [1.21]: 2000/03/28 18:47:02
lpd)

Adds a note about bogus "ANSI aliasing" warnings from the DEC C compiler.
(doc/Make.htm [1.8]: 2000/03/29 19:29:08 lpd)

Changes the procs structure of gs_type1_data to an in-line structure rather
than a pointer to a const structure. (Needed for moving CIDFontType 0
support into C.) (doc/News.htm [1.22]: 2000/03/29 22:10:31 lpd)

Updates the change log with recent changes. (doc/Changes.htm [1.8]:
2000/03/30 07:59:39 lpd)

Creates a real list of projects on which help would be appreciated.
(doc/Projects.htm [1.2]: 2000/04/01 00:43:11 lpd)

Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
a surprising number of changes in other font-related files.
(doc/News.htm [1.23]: 2000/04/02 07:38:46 lpd)

Updates the documentation on preparing releases to reflect the addition of
the toolbin directory. (doc/Release.htm [1.7]: 2000/04/02 18:56:58 lpd)

Implements the AutoRotatePages distiller parameter. (doc/Ps2pdf.htm [1.5]:
2000/04/03 02:54:41 lpd)

Updates the problem reporting procedure to use SourceForge; separates the
description of the procedure from the reporting form.
(doc/Bug-form.htm [1.4], doc/Bug-info.htm [1.1], doc/New-user.htm [1.4],
doc/News.htm [1.24], doc/Readme.htm [1.4]: 2000/04/04 04:14:02 lpd)

Updates release dates and version numbers. (doc/Bug-form.htm [1.5],
doc/Bug-info.htm [1.3], doc/Htmstyle.htm [1.3], doc/Make.htm [1.9],
doc/New-user.htm [1.5], doc/Projects.htm [1.3], doc/Ps2pdf.htm [1.6],
doc/Psfiles.htm [1.3], doc/Readme.htm [1.5], man/ps2pdf.1 [1.4],
man/ps2ps.1 [1.4]: 2000/04/07 05:21:45 lpd)

Removes redundant material, and the www.aladdin.com distribution point, from
the release procedure documentation. (doc/Release.htm [1.8]: 2000/04/07
05:24:29 lpd)

</pre><h2><a name="6.20 Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- pdfread.dev incorrectly depended on dpsnext_. (int.mak [1.4]:
2000/03/19 02:00:09 lpd)
	- The referenced libpng version hadn't been updated to 1.0.5.
(openvms.mmk [1.3]: 2000/03/20 16:38:46 lpd)
	- The MSVC++ 6 compiler no longer recognizes the /FPi87 switch.
(msvccmd.mak [1.2]: 2000/03/31 05:06:53 lpd)
	- MSVC versions before 5, not before 6, recognize /FPi87.
(msvccmd.mak [1.3]: 2000/03/31 05:50:33 lpd)
	- Removes some occurrences of $,I,d,: that shouldn't be substituted.
(toolbin/pre [1.2]: 2000/04/07 05:20:35 lpd)

Increments the version number to 6.20, in anticipation of the next release.
(We do this at the beginning of the development for a release, not the end.)
(version.mak [1.6]: 2000/03/19 00:27:22 lpd)

Adds a pseudo-encoding for the CFF StandardStrings that represent
characters. (devs.mak [1.3], int.mak [1.3], unixinst.mak [1.5]: 2000/03/19
00:38:50 lpd)

Updates makefiles with dependencies for recent changes. (int.mak [1.5],
lib.mak [1.3]: 2000/03/19 05:37:38 lpd)

Adds dependencies for the new implementation of FunctionType 4 functions.
(int.mak [1.6]: 2000/03/19 07:03:53 lpd)

Splits off "vanilla" Functions into separate files, in anticipation of
removing them (they were only used to implement PostScript Calculator
Functions). (lib.mak [1.4]: 2000/03/19 07:33:08 lpd)

Update the date and change log for the latest batches of checked-in changes.
(version.mak [1.7]: 2000/03/19 17:29:57 lpd)

Moves font-writing support into a new module (gdevpsf*), changing the source
file names. Adds the ability to write CFF fonts, with either Type 1 or Type
2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
Type 2, including optimizing sequences of Type 1 operators into a single
Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
TESTED]. Starts (just barely) to remove more unneeded information from
embedded TrueType fonts. (devs.mak [1.4], lib.mak [1.5]: 2000/03/20 07:02:12
lpd)

Updates dependencies to reflect today's batches of checked-in changes.
(devs.mak [1.5], int.mak [1.7], lib.mak [1.6]: 2000/03/20 07:16:35 lpd)

Updates the makefile for the renaming of gdevpsdf.c => gdevpsdu.c.
(devs.mak [1.6]: 2000/03/20 19:30:35 lpd)

Starts to move support for CIDFontType 0 and 2 into C code, needed by the
PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
that have a GlyphDirectory (not documented in the PLRM, but clearly
correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
(int.mak [1.8], lib.mak [1.7]: 2000/03/20 19:53:06 lpd)

Extends the C support for CIDFontType 0 fonts to include those with FontType
2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF
fonts). (int.mak [1.9]: 2000/03/21 07:43:42 lpd)

Adds invocation scripts and documentation for the PDF "optimizer".
(unixinst.mak [1.6]: 2000/03/21 17:01:33 lpd)

Splits off the ReusableStreamDecode filter as a separate module, since
CIDFontType 0 fonts will use it even in LanguageLevels below 3.
(int.mak [1.10]: 2000/03/21 21:34:57 lpd)

Makes file streams remember the file name, needed for efficiently
implementing reusable streams. (int.mak [1.11]: 2000/03/23 02:13:40 lpd)

Checks in the latest consolidated change log. (version.mak [1.8]: 2000/03/24
05:04:55 lpd)

Changes the implementation of incrementally loaded CIDFontType 0 fonts to
use a ReusableStreamDecode filter, in anticipation of moving the BuildGlyph
procedure for these fonts from PostScript to C. (int.mak [1.12],
version.mak [1.9]: 2000/03/27 16:36:24 lpd)

Changes the default value of FPU_TYPE in all Windows and OS/2 makefiles from
0 to 387, since all current desktop CPUs include floating point hardware.
(msvc32.mak [1.3], msvclib.mak [1.3], os2.mak [1.4], watcw32.mak [1.3]:
2000/03/28 17:03:48 lpd)

Updates the change log with recent changes. (version.mak [1.10]: 2000/03/30
07:59:39 lpd)

Cleans up some dependencies missed at the last checkin. (devs.mak [1.7],
int.mak [1.13]: 2000/03/31 05:03:30 lpd)

Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
a surprising number of changes in other font-related files. (int.mak [1.14]:
2000/04/02 07:38:46 lpd)

Adds a variety of tools used to build and distribute Ghostscript releases.
The only documentation is comments in the files themselves, and there isn't
much of it. All aspects of these tools are subject to change without notice.
(toolbin/3way.tcl [1.1], toolbin/cvs2hist.py [1.1],
toolbin/errlist.tcl [1.1], toolbin/gsmake.tcl [1.1],
toolbin/headers.tcl [1.1], toolbin/leaks.tcl [1.1],
toolbin/makeset.tcl [1.1], toolbin/package.tcl [1.1], toolbin/pre [1.1],
toolbin/pre.chk [1.1], toolbin/precheck.tcl [1.1], toolbin/smoke.ps [1.1],
toolbin/suite.tcl [1.1], toolbin/tmake.tcl [1.1]: 2000/04/02 18:44:27 lpd)

Moves gsindent from src to toolbin. (toolbin/gsindent [1.1]: 2000/04/02
18:56:25 lpd)

Adds an #include required by the Watcom compiler. (devs.mak [1.8]:
2000/04/05 19:51:54 lpd)

Adds a missing dependency. (lib.mak [1.8]: 2000/04/07 03:00:56 lpd)

Updates a few dependencies for the release. (int.mak [1.15]: 2000/04/07
05:23:12 lpd)

Updates the build date for the release. (version.mak [1.11]: 2000/04/07
05:25:18 lpd)

Adds .cvsignore files, to prevent bogus warnings on cvs update.
(.cvsignore [1.1], src/.cvsignore [1.1]: 2000/04/05 19:46:04 lpd)

</pre><h2><a name="6.20 Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- A couple of places in the Windows code didn't correctly handle
Ghostscript version 6.64, 7 April 2001
21:45:03 lpd)
	- Replaces a final exit() with a return, to avoid a compiler
warning. (genconf.c [1.2]: 2000/04/05 19:53:27 lpd)

Makes geninit remove whitespace adjacent to hex and base-85 string literals.
(geninit.c [1.2]: 2000/03/18 22:51:24 lpd)

Adds a PDF linearizer ("optimizer"). This is a separate utility (not
integrated with the pdfwrite driver), written in PostScript.
(lib/pdfopt.ps [1.1], lib/pdfwrite.ps [1.1]: 2000/03/20 04:31:22 lpd)

Replaces the O(N^2) sorting algorithm for printing unencoded characters with
a O(N log N) algorithm, which makes printing Unicode and Chinese/Japanese
fonts practical. (lib/prfont.ps [1.2]: 2000/03/21 06:39:49 lpd)

Adds invocation scripts and documentation for the PDF "optimizer".
(lib/pdfopt [1.1], lib/pdfopt.bat [1.1], lib/pdfopt.ps [1.2]: 2000/03/21
17:01:33 lpd)

Splits off the ReusableStreamDecode filter as a separate module, since
CIDFontType 0 fonts will use it even in LanguageLevels below 3.
(zfreuse.c [1.2]: 2000/03/21 21:34:57 lpd)

Adds a variety of tools used to build and distribute Ghostscript releases.
The only documentation is comments in the files themselves, and there isn't
much of it. All aspects of these tools are subject to change without notice.
(gsindent [1.2]: 2000/04/02 18:44:27 lpd)

</pre><h2><a name="6.20 Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- The color_info member of the Windows and OS/2 printer devices (and
other devices using PC-style palettes) wasn't initialized properly, causing
improper behavior. (gdevos2p.c [1.2], gdevpccm.h [1.2], gdevwpr2.c [1.3]:
2000/03/20 21:05:11 lpd)
	- Fixes a bug in the mswinpr2 driver in the handling of
BitsPerPixel. (gdevwpr2.c [1.4]: 2000/03/22 17:08:33 lpd)
	- In PCL XL output (pxl* drivers), if a PostScript image didn't
provide enough source data, the remainder of the output image was
erroneously filled with pixel value 0 (typically black or the foreground
color). (gdevpx.c [1.2]: 2000/03/22 20:55:21 lpd)
	- In the output of the pswrite driver (pdf2ps, ps2ps), the showpage
for each page occurred before, not after, the restore that ended the page
contents. This contradicted Adobe's documentation, and made utilities like
N-up printing not work properly. (gdevps.c [1.4]: 2000/03/28 00:52:46 lpd)
	- The PCL XL 2.0 value for sRGB color space was wrong, and the
attribute for writing mode was missing. (gdevpxat.h [1.2], gdevpxen.h [1.2]:
2000/03/29 18:19:44 lpd)
	- When printing on monochrome LaserJet/DeskJet printers, the driver
didn't set the number of copies to 1; on the LJ 4si, this sometimes caused
double printing. (gdevdjet.c [1.2]: 2000/04/03 14:36:12 lpd)
	- Updates clients for the change in the last argument of
cff_string_index from uint * to int *. (gdevpsf2.c [1.4]: 2000/04/05
19:55:29 lpd)

Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements
the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and
xxxACSImageDict distiller parameters. Implements DCTEncode as an
xxxImageFilter option (it used to cause a crash). Makes the
AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict)
if the image has 8 bits per component and is not Indexed, and LZW/Flate
otherwise: this still isn't right, but it's closer. Implementation changes:
Changes the implementation of distiller parameter dictionaries from stream
states to parameter lists; changes the test for masks in
psdf_setup_image_filters, and changes the image argument from gs_image_t to
gs_pixel_image_t. (gdevpsdf.h [1.4], gdevpsdi.c [1.3], gdevpsdp.c [1.3]:
2000/03/20 05:40:04 lpd)

Moves font-writing support into a new module (gdevpsf*), changing the source
file names. Adds the ability to write CFF fonts, with either Type 1 or Type
2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
Type 2, including optimizing sequences of Type 1 operators into a single
Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
TESTED]. Starts (just barely) to remove more unneeded information from
embedded TrueType fonts. (gdevpsd1.c [1.2], gdevpsdf.c [1.3],
gdevpsdf.h [1.5], gdevpsdt.c [1.2], gdevpsf.h [1.1], gdevpsf1.c [1.1],
gdevpsf2.c [1.1], gdevpsft.c [1.1], gdevpsfu.c [1.1], gdevpsfx.c [1.1]:
2000/03/20 07:02:12 lpd)

Renames an inappropriately named file. (gdevpsdf.c [1.4], gdevpsdf.h [1.6],
gdevpsdu.c [1.1]: 2000/03/20 19:03:43 lpd)

Extends the C support for CIDFontType 0 fonts to include those with FontType
2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF
fonts). (gdevpsf.h [1.2]: 2000/03/21 07:43:42 lpd)

Changes the procs structure of gs_type1_data to an in-line structure rather
than a pointer to a const structure. (Needed for moving CIDFontType 0
support into C.) (gdevpsf1.c [1.2], gdevpsf2.c [1.2], gdevpsfx.c [1.2]:
2000/03/29 22:10:31 lpd)

Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
a surprising number of changes in other font-related files.
(gdevpsf2.c [1.3], gdevpsfu.c [1.2]: 2000/04/02 07:38:45 lpd)

Slightly simplifies the output of the psmono and psgray drivers.
(gdevpsim.c [1.2]: 2000/04/02 19:57:37 lpd)

Adds an #include required by the Watcom compiler. (gdevpsf1.c [1.3]:
2000/04/05 19:51:54 lpd)

</pre><h2><a name="6.20 PDF writer"></a>PDF writer</h2><pre>

Fixes problems:
	- The pointer enumeration procedure for pdf_image_enum was wrong,
possibly producing a mangled pointer and a memory access error if a garbage
collection occured while writing an image in a PDF file. (gdevpdfi.c [1.5]:
2000/03/20 05:54:13 lpd)
	- The computation for testing whether a tiled pattern could be
represented in line, and whether it exceeded Acrobat Reader's size limit,
was wrong, causing some patterns not to be represented as Patterns.
(gdevpdfi.c [1.6]: 2000/03/20 05:58:15 lpd)
	- When ProcessColorModel=/DeviceCMYK, if the first object on a page
or after changing the clipping path was white, the PDF writer would write it
as black. (gdevpdfu.c [1.3]: 2000/03/21 18:36:36 lpd)
	- If a page ended with an incomplete outline tree, an invalid memory
access occurred. (gdevpdf.c [1.3], gdevpdfm.c [1.2]: 2000/03/24 05:09:56
lpd)
	- The SP pdfmark didn't check that its argument was a graphics
stream. (gdevpdfm.c [1.4]: 2000/03/24 06:18:39 lpd)
	- The name of the EndPage Distiller parameter collided with the
EndPage page device parameter. (gdevpdfp.c [1.4]: 2000/03/28 07:45:25 lpd)
	- If two embedded fonts had the same base font, the PDF file could
wind up with an invalid entry in the xref table. (gdevpdft.c [1.4]:
2000/04/01 01:18:32 lpd)

Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements
the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and
xxxACSImageDict distiller parameters. Implements DCTEncode as an
xxxImageFilter option (it used to cause a crash). Makes the
AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict)
if the image has 8 bits per component and is not Indexed, and LZW/Flate
otherwise: this still isn't right, but it's closer. Implementation changes:
Changes the implementation of distiller parameter dictionaries from stream
states to parameter lists; changes the test for masks in
psdf_setup_image_filters, and changes the image argument from gs_image_t to
gs_pixel_image_t. (gdevpdfi.c [1.4]: 2000/03/20 05:40:04 lpd)

Moves font-writing support into a new module (gdevpsf*), changing the source
file names. Adds the ability to write CFF fonts, with either Type 1 or Type
2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
Type 2, including optimizing sequences of Type 1 operators into a single
Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
TESTED]. Starts (just barely) to remove more unneeded information from
embedded TrueType fonts. (gdevpdff.c [1.2], gdevpdfw.c [1.2]: 2000/03/20
07:02:12 lpd)

Substantially enhances the Cos object machinery. Interface: Adds a few more
procedures, including a procedure to create a stream that writes directly
into a Cos stream object, procedures for putting more kinds of values into
arrays and dictionaries, and a param_list interface. Changes Cos objects to
store a reference to the PDF device, and removes the device argument from
all Cos procedures other than object creation. Replaces the Boolean
is_object member of Cos values by a value_type enum: clients must now use
COS_VALUE_IS_OBJECT() to test whether a value is an object reference. To
reduce allocator overhead, makes the Cos procedures that take C strings no
longer copy the string. Records whether each Cos object has been written
into the output, so that in the future (but not in this batch of changes)
resource definitions can be copied at the end of each page. Implementation:
Moves more of the implementation of Cos objects to the .c file.
(gdevpdf.c [1.4], gdevpdfi.c [1.7], gdevpdfm.c [1.3], gdevpdfo.c [1.2],
gdevpdfo.h [1.2], gdevpdfr.c [1.2], gdevpdfu.c [1.4], gdevpdfx.h [1.3]:
2000/03/24 06:12:52 lpd)

Changes a few initializations to suppress warnings from one picky compiler
that doesn't like ptr = buf - 1 where buf is an array. (gdevpdfr.c [1.3]:
2000/03/28 02:01:34 lpd)

Adds parsing for the remaining Acrobat Distiller 4 parameters, although most
of them don't have any effect yet; brings documentation up to date.
(gdevpdf.c [1.5], gdevpdfp.c [1.3], gdevpdfx.h [1.4]: 2000/03/28 07:36:58
lpd)

Implements LockDistillerParams; completes the StartPage/EndPage fix checked
in just before. (gdevpdf.c [1.6], gdevpdfp.c [1.5], gdevpdfx.h [1.5]:
2000/03/28 07:52:06 lpd)

Changes the initial values of the "job control" parameters to match Acrobat
Distiller 4. (gdevpdf.c [1.7], gdevpdfp.c [1.6], gdevpdfx.h [1.6]:
2000/03/28 07:57:14 lpd)

Implements the AutoRotatePages distiller parameter. (gdevpdf.c [1.8],
gdevpdft.c [1.5], gdevpdfu.c [1.5], gdevpdfx.h [1.7]: 2000/04/03 02:54:41
lpd)

</pre><h2><a name="6.20 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>

Fixes problems:
	- Reading embedded compressed CIDFonts wasn't implemented.
(lib/pdf_font.ps [1.3]: 2000/03/19 01:28:59 lpd)
	- PDF images with DeviceN color spaces caused an error.
(lib/pdf_draw.ps [1.2]: 2000/03/19 01:44:53 lpd)
	- PDF images with a Mask ignored the mask. (lib/pdf_draw.ps [1.3]:
2000/03/19 01:46:27 lpd)
	- the PDF interpreter hadn't been updated for the move to
library-based FunctionType 4 Functions, and still tried to bind the names
true and false to the no longer existing operators .true and .false.
(lib/pdf_draw.ps [1.5]: 2000/03/19 07:37:03 lpd)
	- FunctionType 2 and 3 functions didn't work.
(lib/pdf_draw.ps [1.6]: 2000/03/19 15:23:10 lpd)
	- In PDF files, the page CropBox was not being used to clip the
output. (lib/pdf_main.ps [1.4], lib/pdf_ops.ps [1.3]: 2000/03/21 23:08:32
lpd)
	- The "fix" for FunctionTypes 2 and 3 in PDF files had made things
worse, because the code didn't distinguish between resolving to a PostScript
function (for shadings) and resolving to a PostScript procedure (for
halftones, BG/UCR, alternate color space mapping, etc.)
(lib/pdf_draw.ps [1.7]: 2000/03/23 18:31:46 lpd)
	- Text with a Pattern color scaled the pattern according to the text
matrix, not the default matrix of the marking context.
(lib/pdf_base.ps [1.6], lib/pdf_main.ps [1.5], lib/pdf_ops.ps [1.4]:
2000/03/30 18:01:58 lpd)
	- Resolving a Shading didn't create a reusable stream for the
shading data; since the data was then read at unpredictable times, the
shading or other constructs in the PDF file could read incorrect data.
(lib/pdf_draw.ps [1.8]: 2000/04/03 06:01:25 lpd)

Adds a lforall procedure for the PDF linearizer. (lib/pdf_base.ps [1.3]:
2000/03/19 01:50:05 lpd)

Changes the PDF interpreter so that following an object reference doesn't
store the result back into the referring slot, and so that # # R always
creates an indirect object. This is necessary for the PDF linearizer. It
shouldn't have any visible effect (other than a possible small performance
cost). (lib/pdf_base.ps [1.4], lib/pdf_draw.ps [1.4]: 2000/03/19 01:53:58
lpd)

Refactors some code to make it usable by the PDF linearizer.
(lib/pdf_main.ps [1.3]: 2000/03/19 17:26:42 lpd)

Speeds up loading embedded Type 1 fonts a little. (lib/pdf_base.ps [1.5],
lib/pdf_font.ps [1.4]: 2000/03/24 07:42:16 lpd)

Speeds up reading embedded Type 1 fonts a little more.
(lib/pdf_font.ps [1.5]: 2000/03/24 16:28:26 lpd)

</pre><h2><a name="6.20 Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- Font substitution was broken. (lib/gs_fonts.ps [1.3]: 2000/03/19
00:22:05 lpd)
	- The CFF reader gave an error if a font included any Subrs (it's
very surprising that this hasn't surfaced before, but apparently Acrobat
Distiller always produces CFF fonts with no Subrs); the CFF reader didn't
default lenIV to -1 for Type 1 CharStrings; the CFF reader wasn't able to
read CIDFonts. (lib/gs_cff.ps [1.3], lib/gs_cidfn.ps [1.4]: 2000/03/19
00:45:40 lpd)
	- EXTEND_NAMES had stopped working, because not all places that
needed the index of a name ref used name_index rather than r_size
(ilocate.c), and because the high_index value in the name sub-table was set
incorrectly (iname.c). (ilocate.c [1.2], iname.c [1.2]: 2000/03/19 01:33:23
lpd)
	- The attribute check for Functions being executed was incorrect
(always succeeded). (zfunc.c [1.2]: 2000/03/19 02:12:37 lpd)
	- s_add_filter didn't ensure enough buffering. This entailed moving
the NullEncode/Decode filters to stream.[hc]. (sfilter1.c [1.2]: 2000/03/19
03:15:02 lpd)
	- The parameters of SubFileDecode filters weren't initialized fully
(required by a change in this version). (zfilter.c [1.3]: 2000/03/19
04:03:45 lpd)
	- The AutoPositionEPSFiles Distiller parameter was misspelled
AutoPositionEPSFile. (lib/gs_pdfwr.ps [1.2]: 2000/03/19 05:03:31 lpd)
	- Enumerating the elements of a dictionary-based parameter list
returned garbage for the keys. (iparam.c [1.2]: 2000/03/19 15:13:13 lpd)
	- .buildfont0 should not check CIDSystemInfo compatibility. The
PLRM3 says PostScript interpreters do not make this check, even though the
PLRM2 says compatibility is required (!). (zfcmap.c [1.2]: 2000/03/19
16:53:50 lpd)
	- If log2_transfer_map_size > 8, identity transfer functions
returned garbage. The fix requires that if a client wants to set a transfer
function to the identity mapping, it must call gx_set_identity_transfer
rather than simply setting the procedure to gs_identity_transfer.
(zcolor.c [1.2]: 2000/03/19 17:14:47 lpd)
	- Separation color spaces didn't store the separation name.
(zcssepr.c [1.2]: 2000/03/19 17:21:36 lpd)
	- The addition of the dummy cid_Setup procedure in gs 6.01 was
accidentally commented out. (lib/gs_cidfn.ps [1.5]: 2000/03/21 00:11:55 lpd)
	- The test for whether an CIDFontType 2 outline string was large
enough to include prefixed metrics was backwards, which would have caused
problems with any font that used MetricsCount. (zfcid.c [1.3]: 2000/03/21
00:43:17 lpd)
	- A couple of places in the Windows code didn't correctly handle
Ghostscript version numbers of the form #.0#. (dwsetup.cpp [1.2]: 2000/03/22
21:45:03 lpd)
	- In some cases, re-registering an existing font or CIDFont with
definefont would cause an invalidfont error. (zbfont.c [1.4],
zfont42.c [1.3]: 2000/03/28 18:20:39 lpd)
	- Re-registering a CIDFont with definefont, or defining a CIDFont
with definefont instead of /CIDFont defineresource, caused an invalidfont
error or a crash. (lib/gs_cidfn.ps [1.9], lib/gs_fonts.ps [1.4]: 2000/03/28
18:21:50 lpd)
	- The new C BuildGlyph code for CIDFontType 0 fonts didn't handle
GlyphDirectory or Type 2 CharStrings correctly. (lib/gs_cidfn.ps [1.12],
zfcid.c [1.8]: 2000/03/31 23:21:57 lpd)
	- The internaldict "operator" was allocated in local VM, preventing
it from being bound into procedures allocated in global VM.
(lib/gs_init.ps [1.6]: 2000/04/04 22:16:02 lpd)
	- If there was a CIDInit ProcSet defined in the filesystem, the code
for initializing the built-in CIDInit ProcSet became confused.
(lib/gs_cidfn.ps [1.13]: 2000/04/04 22:17:33 lpd)
	- Fixes several problems in resourceforall and resource loading: the
operands of resourceforall were restored even in the case of an error in the
client's procedure; the name Instances had special meaning for some Adobe
code; resourceforall caused an invalidaccess error if an operand was in
local VM but the current VM was global; loading a resource from a file could
cause a typecheck error if the file left values on the operand stack.
(interp.c [1.3], lib/gs_ccfnt.ps [1.2], lib/gs_res.ps [1.3]: 2000/04/04
22:26:02 lpd)
	- resourceforall didn't enumerate external (loadable) instances, and
would enumerate an instance twice if it had both a local and a global
definition. (lib/gs_res.ps [1.4]: 2000/04/05 21:07:02 lpd)
	- The implementation of resourcestatus wasn't compatible with some
badly written code in an Adobe font downloader that assumes that the
implementation of resourcestatus in Generic and Font is the same.
(lib/gs_res.ps [1.5]: 2000/04/05 21:20:07 lpd)
	- The just-checked-in fixed for resourceforall didn't work properly
for the IdiomSet category. (They probably failed for other categories that
had no instances, but we didn't check this.) (lib/gs_res.ps [1.6]:
2000/04/05 21:51:43 lpd)
	- Some Adobe font downloading code assumed that loading a resource
file would never leave extra values on the stack; our implementation didn't
ensure this (by popping them if needed). (lib/gs_res.ps [1.8]: 2000/04/06
04:50:28 lpd)
	- If an alphabetic font defined and used a .notdef character,
pdfwrite always converted it to a bitmap. (lib/gs_lgo_e.ps [1.2]: 2000/04/07
02:48:23 lpd)

Provides a gs_atan2_degrees procedure to parallel sin and cos.
(zmath.c [1.2]: 2000/03/18 23:10:39 lpd)

Speeds up string garbage collection by scanning unmodified string regions
faster. (igcstr.c [1.2]: 2000/03/18 23:29:32 lpd)

Adds the ImagemaskTrapping parameter to the trapping state.
(lib/gs_trap.ps [1.2]: 2000/03/18 23:35:53 lpd)

Increments the version number to 6.20, in anticipation of the next release.
(We do this at the beginning of the development for a release, not the end.)
(lib/gs_init.ps [1.4]: 2000/03/19 00:27:22 lpd)

Adds a pseudo-encoding for the CFF StandardStrings that represent
characters. (lib/gs_cff.ps [1.2], lib/gs_css_e.ps [1.1]: 2000/03/19 00:38:50
lpd)

Refactors the code for getting Type 1/2/4 font parameters so it can be used
for FDArray entries of CIDFontType 0 fonts. (ifont1.h [1.2], zfont1.c [1.2]:
2000/03/19 02:07:45 lpd)

Speeds up Function evaluation slightly, by preallocating space for a
reasonable number of operands and results on the C stack rather than always
allocating it on the heap. (zfunc.c [1.3]: 2000/03/19 02:16:58 lpd)

Adds a public procedure for determining whether a PostScript object is a
Function, and if so, returning the pointer to the gs_function_t structure.
(ifunc.h [1.2], zfunc.c [1.4]: 2000/03/19 02:22:01 lpd)

Splits out the [T]BCP filter interface into a separate file. (zfbcp.c [1.2]:
2000/03/19 02:40:18 lpd)

Adds a skip_count parameter to the SubFileDecode filter, giving the number
of initial bytes or records to skip over. (Needed for printing FunctionType
4 functions, possibly useful for other things.) (sfilter1.c [1.3]:
2000/03/19 03:20:18 lpd)

Replaces the implementation of FunctionType 4 functions at the PostScript
language level with one that uses the new library-based facilities.
(zdevice2.c [1.2], zfunc4.c [1.2]: 2000/03/19 06:56:23 lpd)

Changes the key type returned by parameter list enumeration to include a
persistence flag, makes C parameter lists support non-persistent keys, and
upgrades GC descriptors so that parameter lists can be used non-transiently;
updates implementors of parameter lists to call gs_param_list_init to
initialize the common members, which is now required. (iparam.c [1.3]:
2000/03/19 15:16:11 lpd)

Makes Separation and DeviceN color spaces convert their tint transform
function to a FunctionType 4 Function if possible, for better accuracy and
to allow writing in PDF files. (lib/gs_lev2.ps [1.2], lib/gs_ll3.ps [1.2]:
2000/03/19 15:28:34 lpd)

Makes st_indexed_map private. Clients must now use the constructor procedure
alloc_indexed_map rather than allocating instances directly.
(zcsindex.c [1.2]: 2000/03/19 16:37:28 lpd)

Refactors the code for building fonts so it can be used for FDArray entries
of CIDFontType 0 fonts. (bfont.h [1.2], zbfont.c [1.2]: 2000/03/19 16:45:47
lpd)

Adds a .fileposition operator that will read the position even of
non-positionable streams, needed for the PDF linearizer. (zfileio.c [1.3]:
2000/03/20 04:30:49 lpd)

Starts to move support for CIDFontType 0 and 2 into C code, needed by the
PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
that have a GlyphDirectory (not documented in the PLRM, but clearly
correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
(icid.h [1.1], ifont.h [1.2], ifont42.h [1.1], zcid.c [1.2], zfcid.c [1.1],
zfcmap.c [1.3], zfont42.c [1.2]: 2000/03/20 19:53:06 lpd)

Hooks the new CIDMap code into the BuildGlyph procedure for CIDFontType 2
fonts. (Contrary to a previous log comment, MetricsCount is already hooked
in.) Support for CIDFontType 2 fonts is now implemented entirely in C, as
for Type 42 fonts. (lib/gs_cidfn.ps [1.6], zfcid.c [1.2]: 2000/03/21
00:32:15 lpd)

Extends the C support for CIDFontType 0 fonts to include those with FontType
2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF
fonts). (ifont2.h [1.1], zfcid.c [1.4], zfont2.c [1.2]: 2000/03/21 07:43:42
lpd)

Changes Subr loading for CIDFontType 0 fonts from lazy to immediate, so that
C code can be guaranteed access to the Subrs. (In every CIDFontType 0 font
that we have seen, SubrCount is 5, so this has no significant time or space
cost.) Also adds support for FDBytes > 1 in GlyphDirectory definitions.
(lib/gs_cidfn.ps [1.7]: 2000/03/21 20:06:44 lpd)

Splits off the ReusableStreamDecode filter as a separate module, since
CIDFontType 0 fonts will use it even in LanguageLevels below 3.
(lib/gs_frsd.ps [1.1], lib/gs_ll3.ps [1.3], zfrsd.c [1.1]: 2000/03/21
21:34:57 lpd)

Makes file streams remember the file name, needed for efficiently
implementing reusable streams. (zfile.c [1.3], zfileio.c [1.4]: 2000/03/23
02:13:40 lpd)

Changes the new .filename operator to return true/false rather than causing
an error; redefines findlibfile in terms of a simpler .libfile operator +
.filename. (lib/gs_init.ps [1.5], zfile.c [1.4], zfileio.c [1.5]: 2000/03/23
18:47:17 lpd)

Finishes implementing the file case of ReusableStreamDecode. This required
adding the ability to restrict file-reading streams to a subfile.
(lib/gs_frsd.ps [1.2], sfilter1.c [1.4], zfileio.c [1.6], zfrsd.c [1.2]:
2000/03/24 03:59:42 lpd)

Changes the implementation of incrementally loaded CIDFontType 0 fonts to
use a ReusableStreamDecode filter, in anticipation of moving the BuildGlyph
procedure for these fonts from PostScript to C. (lib/gs_cidfn.ps [1.8],
zbfont.c [1.3], zfcid.c [1.5]: 2000/03/27 16:36:24 lpd)

Changes the get_outline / glyph_data procedure for getting encoded font
outline data to return an indication of whether the outline data were just
allocated and can be freed by the client. (This is a possibly
non-backward-compatible change.) (zfcid.c [1.6]: 2000/03/28 18:47:02 lpd)

Changes the procs structure of gs_type1_data to an in-line structure rather
than a pointer to a const structure. (Needed for moving CIDFontType 0
support into C.) (zfont1.c [1.3]: 2000/03/29 22:10:31 lpd)

Finishes moving support for CIDFontType 0 fonts from PostScript to C.
(ifont.h [1.3], ifont42.h [1.2], lib/gs_cidfn.ps [1.10], zfcid.c [1.7],
zfont42.c [1.4]: 2000/03/31 04:55:18 lpd)

Allows dictionaries as the value of CIDMap resources. (Also removes an
unrelated obsolete comment.) (lib/gs_cidfn.ps [1.11]: 2000/03/31 05:11:30
lpd)

Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
a surprising number of changes in other font-related files. (ichar1.h [1.2],
ifcid.h [1.1], zchar1.c [1.2], zfcid.c [1.9], zfcid0.c [1.1],
zfcid1.c [1.1], zfont1.c [1.4]: 2000/04/02 07:38:46 lpd)

Makes the .writefont9 operator (used only for testing) available in both
DEBUG and PROFILE configurations. (zfcid0.c [1.2]: 2000/04/03 02:37:55 lpd)

Extends .forceput to handle arrays as well as dictionaries, required to fix
a bug with internaldict. (zdict.c [1.2], zgeneric.c [1.2]: 2000/04/04
22:13:23 lpd)

Works around an Adobe code assumption that the default FindResource
procedure does *not* call the ResourceStatus procedure if the requested
instance is already defined in VM. (lib/gs_res.ps [1.7]: 2000/04/05 23:31:54
lpd)

Implements the framework for superexec (but none of the actual access check
bypasses). (icontext.c [1.2], icstate.h [1.2], zcontrol.c [1.2]: 2000/04/06
04:40:06 lpd)

Extends the undocumented CCRun procedure to take an additional argument, a
Private dictionary, required by some Adobe font downloading code.
(lib/gs_type1.ps [1.3]: 2000/04/06 05:25:10 lpd)

</pre><h2><a name="6.20 Streams"></a>Streams</h2><pre>

Fixes problems:
	- s_add_filter didn't ensure enough buffering. This entailed moving
the NullEncode/Decode filters to stream.[hc]. (sfilter.h [1.3],
stream.c [1.3], stream.h [1.3]: 2000/03/19 03:15:02 lpd)
	- When FPU_TYPE <= 0, the image interpolation code lost too much
accuracy, producing color streaks in the output. (Fix by DanCoby.)
(siscale.c [1.2]: 2000/03/29 20:34:45 lpd)
	- Fixes a couple of typos in the recently checked-in image
interpolation fix. (siscale.c [1.3]: 2000/03/30 06:55:26 lpd)

Splits out the [T]BCP filter interface into a separate file. (sbcp.c [1.2],
sbcp.h [1.1], sfilter.h [1.2]: 2000/03/19 02:40:18 lpd)

Adds a skip_count parameter to the SubFileDecode filter, giving the number
of initial bytes or records to skip over. (Needed for printing FunctionType
4 functions, possibly useful for other things.) (sfilter.h [1.4]: 2000/03/19
03:20:18 lpd)

Changes the key type returned by parameter list enumeration to include a
persistence flag, makes C parameter lists support non-persistent keys, and
upgrades GC descriptors so that parameter lists can be used non-transiently;
updates implementors of parameter lists to call gs_param_list_init to
initialize the common members, which is now required. (spsdf.c [1.2]:
2000/03/19 15:16:11 lpd)

Makes file streams remember the file name, needed for efficiently
implementing reusable streams. (stream.c [1.4], stream.h [1.4]: 2000/03/23
02:13:40 lpd)

Finishes implementing the file case of ReusableStreamDecode. This required
adding the ability to restrict file-reading streams to a subfile.
(sfxfd.c [1.2], sfxstdio.c [1.2], stream.c [1.5], stream.h [1.5]: 2000/03/24
03:59:42 lpd)

Changes a few initializations to suppress warnings from one picky compiler
that doesn't like ptr = buf - 1 where buf is an array. (spsdf.c [1.3]:
2000/03/28 02:01:34 lpd)

</pre><h2><a name="6.20 Library"></a>Library</h2><pre>

Fixes problems:
	- Two comments in the file were incorrect. (gsiparm3.h [1.2]:
2000/03/19 02:46:11 lpd)
	- param_coerce_typed, which works with any parameter list
implementation, was incorrectly described as associated with the default
implementation. (gsparam.h [1.2]: 2000/03/19 03:37:08 lpd)
	- TrueType fonts didn't use vhea/vmtx if WMode = 1. Also makes
gs_font_type42 subclassable, for implementing CIDFontType 2 fonts, and makes
its procedure for getting a glyph's side bearing and width virtual, required
to support MetricsCount in CIDFontType 2 fonts. (gstype42.c [1.3],
gxfont42.h [1.2]: 2000/03/19 03:58:51 lpd)
	- ImageType 4 images didn't give an error for out-of-range MaskColor
values. The file also had an unnecessary #include. (gximage4.c [1.2]:
2000/03/19 04:10:09 lpd)
	- If log2_transfer_map_size > 8, identity transfer functions
returned garbage. The fix requires that if a client wants to set a transfer
function to the identity mapping, it must call gx_set_identity_transfer
rather than simply setting the procedure to gs_identity_transfer.
(gxclrast.c [1.3], gxcmap.c [1.2], gxfmap.h [1.2]: 2000/03/19 17:14:47 lpd)
	- Fixes a warning about aliasing produced by one extremely picky
compiler. (gsnogc.c [1.2]: 2000/03/22 21:39:32 lpd)
	- Filling or clipping with ridiculously large (out-of-bounds)
coordinates could cause an internal overflow that produced incorrect
results. (This is probably not the last such bug.) (gxfill.c [1.2]:
2000/03/30 07:03:59 lpd)

Provides a gs_atan2_degrees procedure to parallel sin and cos.
(gsmisc.c [1.2], gxfarith.h [1.2]: 2000/03/18 23:10:39 lpd)

Improves the 8x8 bitmap "flipping" procedure to take advantage of 32-bit
ints. (gsutil.c [1.2]: 2000/03/18 23:16:16 lpd)

Adds a public procedure for restricting a color to its legal range.
(gscspace.c [1.2], gscspace.h [1.2], gxcspace.h [1.2]: 2000/03/18 23:19:17
lpd)

Adds the new ImagemaskTrapping parameter to the trapping state.
(gstrap.c [1.2], gstrap.h [1.2]: 2000/03/18 23:26:17 lpd)

Increments the version number to 6.20, in anticipation of the next release.
(We do this at the beginning of the development for a release, not the end.)
(gscdef.c [1.2]: 2000/03/19 00:27:22 lpd)

Adds a pseudo-encoding for the CFF StandardStrings that represent
characters. (gsccode.h [1.2]: 2000/03/19 00:38:50 lpd)

Adds a bit_index procedure to the implementation of device halftones,
required for writing halftones in PDF files. (The only implementors are
internal ones.) (gxdht.h [1.2], gxhtbit.c [1.2]: 2000/03/19 05:10:55 lpd)

Adds a public procedure for getting a palette entry of an Indexed color
space, used when writing Indexed color spaces in PDF files.
(gscindex.h [1.1], gscolor2.c [1.2], gscolor2.h [1.2]: 2000/03/19 05:20:28
lpd)

Reimplements "PostScript calculator" (FunctionType 4) functions entirely in
C, to allow them to be written out in PDF files. (gsfunc4.c [1.1],
gsfunc4.h [1.1], gsstruct.h [1.2]: 2000/03/19 05:25:53 lpd)

Moves gx_device_color_equal to the public API, for detecting redundant color
setting when writing PDF files. (gsdcolor.h [1.2], gxdcolor.c [1.2],
gxdcolor.h [1.2]: 2000/03/19 06:46:08 lpd)

Changes the default value of BufferSpace to 4 Mb. In desktop applications,
this is a reasonable value that can substantially improve performance
(especially for color printers); embedded applications will want to set
BufferSpace themselves in any case. (gdevprn.h [1.2]: 2000/03/19 06:51:13
lpd)

Adds virtual procedures for Functions to write their parameters to a
parameter list, and to access their data source and subfunctions. This is
needed for writing Functions in PDF files. This change is also a
prerequisite for the C implemention of FunctionType 4 functions, even though
it appears later in the change log. (gsdsrc.h [1.2], gsfunc.c [1.2],
gsfunc.h [1.2], gsfunc0.c [1.2], gsfunc3.c [1.2], gsparam.c [1.2],
gsparam.h [1.3], gxfunc.h [1.2]: 2000/03/19 07:24:53 lpd)

Splits off "vanilla" Functions into separate files, in anticipation of
removing them (they were only used to implement PostScript Calculator
Functions). (gsfunc.c [1.3], gsfunc.h [1.3], gsfuncv.c [1.1],
gsfuncv.h [1.1]: 2000/03/19 07:33:08 lpd)

Adds a procedure for allocating a C parameter list. (gscparam.c [1.2],
gsparam.h [1.4]: 2000/03/19 15:00:05 lpd)

Undoes a premature change that depends on an update not yet checked in.
(gscparam.c [1.3]: 2000/03/19 15:07:59 lpd)

Changes the key type returned by parameter list enumeration to include a
persistence flag, makes C parameter lists support non-persistent keys, and
upgrades GC descriptors so that parameter lists can be used non-transiently;
updates implementors of parameter lists to call gs_param_list_init to
initialize the common members, which is now required. (gscparam.c [1.4],
gsparam.c [1.3], gsparam.h [1.5]: 2000/03/19 15:16:11 lpd)

Adds a procedure for copying one parameter list to another.
(gsparamx.c [1.2], gsparamx.h [1.2]: 2000/03/19 15:35:31 lpd)

Records the CTM used for sampling HalftoneType 1 spot functions. This is
needed for recognizing the standard spot functions when producing PDF
output. Also factors the code for initializing spot functions for the
benefit of the PDF writer. (gshtscr.c [1.2], gxdht.h [1.3], gzht.h [1.2]:
2000/03/19 15:43:36 lpd)

Adds a proc_data member to the map for Separation and Indexed color spaces.
(gscolor2.c [1.3], gxcolor2.h [1.2]: 2000/03/19 16:23:46 lpd)

Makes st_indexed_map private. Clients must now use the constructor procedure
alloc_indexed_map rather than allocating instances directly.
(gscolor2.c [1.4], gscsepr.c [1.2], gxclrast.c [1.2], gxcolor2.h [1.3]:
2000/03/19 16:37:28 lpd)

Adds procedures for building and accessing DeviceN color spaces.
(gscdevn.c [1.2], gscdevn.h [1.1]: 2000/03/19 17:02:37 lpd)

Exports the 'blend' operators of the Type 1 interpreter, for use by the Type
1 / Type 2 font writer. (gstype1.c [1.3], gxtype1.c [1.2], gxtype1.h [1.3]:
2000/03/19 18:46:44 lpd)

Starts to move support for CIDFontType 0 and 2 fonts into C code. (These
header files are the ones needed to compile the new gdevpsf* files; they
don't interact with any existing code.) (gxcid.h [1.1], gxfcid.h [1.1]:
2000/03/20 06:40:22 lpd)

Moves font-writing support into a new module (gdevpsf*), changing the source
file names. Adds the ability to write CFF fonts, with either Type 1 or Type
2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts
with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to
Type 2, including optimizing sequences of Type 1 operators into a single
Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT
TESTED]. Starts (just barely) to remove more unneeded information from
embedded TrueType fonts. (gxttf.h [1.1]: 2000/03/20 07:02:12 lpd)

Starts to move support for CIDFontType 0 and 2 into C code, needed by the
PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for
CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts
that have a GlyphDirectory (not documented in the PLRM, but clearly
correct). Implements Adobe 3011 features: integer and dictionary CIDMaps,
and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code,
which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.)
(gsfcid.c [1.1], gsfcmap.c [1.3], gxfcmap.h [1.2], gxfont1.h [1.2]:
2000/03/20 19:53:06 lpd)

Changes a few initializations to suppress warnings from one picky compiler
that doesn't like ptr = buf - 1 where buf is an array. (gxclpath.c [1.2]:
2000/03/28 02:01:34 lpd)

Changes the get_outline / glyph_data procedure for getting encoded font
outline data to return an indication of whether the outline data were just
allocated and can be freed by the client. (This is a possibly
non-backward-compatible change.) (gxfcid.h [1.2], gxfont42.h [1.3]:
2000/03/28 18:47:02 lpd)

Changes the procs structure of gs_type1_data to an in-line structure rather
than a pointer to a const structure. (Needed for moving CIDFontType 0
support into C.) (gstype1.c [1.4], gstype2.c [1.3], gxfont1.h [1.3],
gxtype1.c [1.3]: 2000/03/29 22:10:31 lpd)

Finishes moving support for CIDFontType 0 fonts from PostScript to C.
(gxfcid.h [1.3]: 2000/03/31 04:55:18 lpd)

Finishes implementing the ability to write CIDFontType 0 CFFs. This involved
a surprising number of changes in other font-related files. (gsfcid.c [1.2],
gxfcid.h [1.4]: 2000/04/02 07:38:46 lpd)

<hr>

<h1><a name="Version6.01"></a>Version 6.01 (2000-03-17)</h1>

This is a bug-fix release for 6.0.

This release fixes the following reported bugs: #101555, #101813, #101816,
#101818, #101827, #101830, #101871, #101853, #101906, #101949, #101950,
#102003, #102004, #102038, #102081, #102936.

<h2><a name="6.01_Incompatible_changes"></a>Incompatible changes</h2>

(Platforms)
	- OpenVMS using VAX C is no longer supported.  (OpenVMS with DEC C
and gcc are still supported.)
(Drivers)
	- The third argument of psdf_set_color is changed from const char *
to const psdf_set_color_commands_t *.
(Interpreter)
	- The non-standard feature of writing dictionaries in binary object
output is now disabled by default, but can now be enabled dynamically.
(Library)
	- The definition of TRANSPARENCY_PER_H_P is moved from gdevmrop.h to
gsropt.h.
	- The handling of the source opaque, texture transparent case of
RasterOp when TRANSPARENCY_PER_H_P is defined is changed slightly.


<h2><a name="6.01 Documentation"></a>Documentation</h2><pre>

Fixes problems:
	- Fixes a typo. (man/ps2pdf.1 [1.2]: 2000/03/10 03:11:06 lpd)
	- When converting PostScript to PDF, selecting /Bicubic as an image
DownsampleType caused an error instead of defaulting to /Average.
(doc/Ps2pdf.htm [1.2]: 2000/03/10 04:16:09 lpd)
	- The gs###src.zip and gs###lib.zip files weren't mentioned as being
included in distributions; News.htm and Changes.htm weren't mentioned at
all. (doc/Release.htm [1.5]: 2000/03/15 07:23:52 lpd)
	- Fixes a problem producing too much black in the output; also adds
support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and
Epson Stylus Color 200). Note that this is user-contributed code.
(doc/Devices.htm [1.2]: 2000/03/16 02:01:36 lpd)

In ansi2knr, adds user-contributed support for concatenated string literals
and character constants, and fixes for a couple of minor bugs.
(man/ansi2knr.1 [1.2]: 2000/03/10 03:16:17 lpd)

Removes an inappropriate copying notice. (doc/Hershey.htm [1.2]: 2000/03/10
07:03:57 lpd)

Clarifies when xdpyinfo and xwininfo are needed. Adds privacy options for
problem reports. (doc/Bug-form.htm [1.2]: 2000/03/10 07:06:08 lpd)

Adds a new eps2eps utility analogous to ps2ps. (man/eps2eps.1 [1.1],
man/ps2ps.1 [1.2]: 2000/03/10 07:51:55 lpd)

Updates the documentation on making RPMs, which is no longer supported.
(doc/Install.htm [1.2], doc/Make.htm [1.2]: 2000/03/10 07:58:00 lpd)

Adds a recommendation to use gcc on SGI platforms. (doc/Make.htm [1.3]:
2000/03/10 07:59:53 lpd)

Updates documentation regarding Unix systems that do/don't use libpthread.
(doc/Make.htm [1.4]: 2000/03/10 08:01:35 lpd)

Removes support for VAX C, which DEC stopped supporting 9 (!) years ago.
(doc/Make.htm [1.5], doc/Use.htm [1.2]: 2000/03/10 08:02:59 lpd)

Updates the documentation for building Aladdin releases to reflect revised
procedures for the Windows executable, and a few other minor changes.
(doc/Release.htm [1.2]: 2000/03/10 15:55:39 lpd)

Adds the ability to compile on OS/2 with XFree86. (doc/Install.htm [1.3],
doc/Make.htm [1.6]: 2000/03/10 19:50:49 lpd)

Moves all history for versions 5.n into History5.htm; creates History6.htm
for versions 6.n; redefines News.htm as containing only news for the current
release; adds (a link to) Changes.htm for the mechanically generated change
log. (doc/History5.htm [1.2], doc/History6.htm [1.1], doc/News.htm [1.2],
doc/README [1.2], doc/Readme.htm [1.2]: 2000/03/14 06:14:43 lpd)

Partially updates the release procedure documentation to reflect the use of
SourceForge and CVS. (doc/Release.htm [1.3]: 2000/03/14 06:39:23 lpd)

Adds a change log generated mechanically from the CVS logs. Future releases
may omit this file (doc/Changes.htm) from their change log.
(doc/Changes.htm [1.1], doc/News.htm [1.3]: 2000/03/14 06:48:44 lpd)

Revises the release procedures to reflect use of SourceForge, and to
separate out the procedures for building Windows executables.
(doc/Release.htm [1.4]: 2000/03/15 02:24:58 lpd)

Adds information on uninstalling Ghostscript on Windows.
(doc/Install.htm [1.4]: 2000/03/15 07:29:53 lpd)

Adds the ability to set the ProcessColorModel of the pdfwrite device to
/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
for fill, stroke, text, and imagemask, and for images that (for whatever
reason) can't be written in their specified color space. Note that this is a
short-term fix: pdfwrite should output colors in the color space in which
they were specified. However, a proper fix will require more significant
architectural changes. (doc/News.htm [1.4]: 2000/03/16 01:21:23 lpd)

Adds a reference to a third-party Fontmap for the Computer Modern fonts.
(doc/Fonts.htm [1.2]: 2000/03/16 04:05:07 lpd)

Adds documentation and a makefile entry for Matthew Gelhaus' cdj880 driver.
The code will eventually be included in gdevcd8.c, but it is not yet mature
enough. (doc/Devices.htm [1.3]: 2000/03/16 08:09:42 lpd)

Updates the version number reference in the troff header.
(man/ps2pdf.1 [1.3], man/ps2ps.1 [1.3]: 2000/03/17 00:47:08 lpd)

Removes the attempted documentation on building Windows executable
distributions: it was never correct, and Aladdin will no longer be creating
such distributions. Also reorganizes the document slightly and brings the
rest of it fully into line with reality. (doc/Release.htm [1.6]: 2000/03/17
04:40:47 lpd)

Adds information on building with the Intel C/C++ optimizing compiler
(requires the Microsoft Visual C++ environment), and fixes a typo in the
link to ftp.cdrom.com. (doc/Make.htm [1.7]: 2000/03/17 17:42:59 lpd)

Checks in the first wrap-up for the 6.01 release. (doc/Changes.htm [1.2],
doc/History6.htm [1.2], doc/News.htm [1.5]: 2000/03/18 04:13:40 lpd)

</pre><h2><a name="6.01 Procedures"></a>Procedures</h2><pre>

Fixes problems:
	- The terminating $ on the $Id: line in gsmalloc.c was missing, and
dwuninst.rc lacked a $Id: line. (dwuninst.rc [1.2]: 2000/03/10 03:44:33 lpd)
	- The %ram% IODevice was defined, but should not be (it represents a
RAM-based file system, which Ghostscript does not provide). Fix: The type of
the %null% IODevice was /FileSystem rather than /Special. (int.mak [1.2]:
2000/03/10 07:02:07 lpd)
	- The dependency list for coslwxl omitted a $(DD).
(contrib.mak [1.2]: 2000/03/10 07:30:54 lpd)
	- The makefile still referred to a long-gone driver for the DEC
LA70. (contrib.mak [1.3]: 2000/03/10 07:32:43 lpd)
	- The Unix install process tried to make links without deleting them
first. (unixinst.mak [1.2]: 2000/03/10 07:49:21 lpd)
	- The Watcom compiler switches didn't force enums to occupy a full
int, leading to execution errors because the code casts (enum *) pointers to
(int *). (wccommon.mak [1.2]: 2000/03/10 08:15:31 lpd)
	- The Windows zip archive didn't include font metrics files. (This
change only fixes the build procedure: it doesn't actually update the
currently released zip archive.) (winint.mak [1.2]: 2000/03/10 08:17:06 lpd)
	- the "all architectures" build and test script hadn't been updated
to use different STDLIBS values depending on where the platform provides the
pthreads library. (all-arch.mak [1.2]: 2000/03/10 15:40:43 lpd)
	- The documentation for building with pthreads on FreeBSD hadn't
been updated. (unix-gcc.mak [1.2], unixansi.mak [1.2], unixtrad.mak [1.2]:
2000/03/10 15:44:01 lpd)
	- gsmalloc.c didn't include the prototype for gs_exit(), which it
calls. (lib.mak [1.2]: 2000/03/10 15:53:08 lpd)

Because of rampant confusion, disagreement, and lack of standardization,
removes the RPM-related spec and patch files. (gs-fonts.rps [1.2],
gs.rps [1.2], rpm-conf.dif [1.2]: 2000/03/10 03:22:04 lpd)

Increases the stack size for the PC platforms, since a user had reported
that the OS/2 stack size was too small. (dw32c.def [1.2],
dwmain32.def [1.2], gsos2.def [1.2]: 2000/03/10 03:33:21 lpd)

Updates the Brother HL7xx drivers with a new user-contributed version, plus
a couple of minor fixes. (contrib.mak [1.4]: 2000/03/10 07:33:44 lpd)

Adds a new eps2eps utility analogous to ps2ps. (unixinst.mak [1.3]:
2000/03/10 07:51:55 lpd)

Removes support for VAX C, which DEC stopped supporting 9 (!) years ago.
(openvms.mak [1.2], openvms.mmk [1.2]: 2000/03/10 08:02:59 lpd)

Updates all makefiles to the current libpng version, 1.0.5.
(bcwin32.mak [1.2], dvx-gcc.mak [1.2], msvc32.mak [1.2], msvclib.mak [1.2],
os2.mak [1.2], ugcclib.mak [1.2], unix-gcc.mak [1.3], unixansi.mak [1.3],
unixtrad.mak [1.3], watc.mak [1.2], watclib.mak [1.2], watcw32.mak [1.2]:
2000/03/10 15:48:58 lpd)

Updates the version # to 6.01, and the version date. (version.mak [1.2]:
2000/03/10 17:18:29 lpd)

Adds the ability to compile on OS/2 with XFree86. (os2.mak [1.3]: 2000/03/10
19:50:49 lpd)

Moves all history for versions 5.n into History5.htm; creates History6.htm
for versions 6.n; redefines News.htm as containing only news for the current
release; adds (a link to) Changes.htm for the mechanically generated change
log. (unixinst.mak [1.4], version.mak [1.3]: 2000/03/14 06:14:44 lpd)

Adds entries for ibm-rs6000-aix-4.3, sgi-mips-irix6.5-64bit, and
sun-sparc-solaris-64bit. (all-arch.mak [1.3]: 2000/03/15 18:38:29 lpd)

Adds the ability to set the ProcessColorModel of the pdfwrite device to
/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
for fill, stroke, text, and imagemask, and for images that (for whatever
reason) can't be written in their specified color space. Note that this is a
short-term fix: pdfwrite should output colors in the color space in which
they were specified. However, a proper fix will require more significant
architectural changes. (version.mak [1.4]: 2000/03/16 01:21:24 lpd)

Adds documentation and a makefile entry for Matthew Gelhaus' cdj880 driver.
The code will eventually be included in gdevcd8.c, but it is not yet mature
enough. (contrib.mak [1.5]: 2000/03/16 08:09:42 lpd)

Adds a missing dependency of gdevpdft.o on gxfont42.h. (devs.mak [1.2]:
2000/03/17 02:59:26 lpd)

Adds a disclaimer of responsibility for the makefile section for creating
distribution archives, which Aladdin is no longer maintaining.
(winint.mak [1.3]: 2000/03/17 03:01:58 lpd)

Checks in the first wrap-up for the 6.01 release. (unix-gcc.mak [1.4],
version.mak [1.5]: 2000/03/18 04:13:40 lpd)

</pre><h2><a name="6.01 Utilities"></a>Utilities</h2><pre>

Fixes problems:
	- The loader for the stochastic halftone incorrectly assumed that
the resource file left the resource on the stack, causing a stackunderflow
error. (lib/stocht.ps [1.2]: 2000/03/10 03:34:44 lpd)
	- The ps2pdf*.bat scripts didn't set PS2PDFSW to the empty string if
there were no arguments, causing the same file to be processed again.
(lib/ps2pdf12.bat [1.2], lib/ps2pdf13.bat [1.2]: 2000/03/10 07:40:00 lpd)
	- Fixes a typo in the fix for putting stdout in binary mode.
(gp_ntfs.c [1.3]: 2000/03/18 01:15:16 lpd)
	- For printer devices, a non-null definition for OutputFile was
required even on platforms that had a default printer (as implemented by
gp_open_printer for that platform). (gp_os9.c [1.2], gp_unix.c [1.2],
gp_vms.c [1.2]: 2000/03/18 01:45:16 lpd)

In ansi2knr, adds user-contributed support for concatenated string literals
and character constants, and fixes for a couple of minor bugs.
(ansi2knr.c [1.2]: 2000/03/10 03:16:17 lpd)

Updates the pf2afm.ps utility with a revised version from its authors.
(lib/pf2afm.ps [1.2]: 2000/03/10 03:35:37 lpd)

Adds a new eps2eps utility analogous to ps2ps. (lib/eps2eps [1.1],
lib/eps2eps.bat [1.1]: 2000/03/10 07:51:55 lpd)

Removes a temporary file that was included in the fileset by mistake.
(lib/history [1.2]: 2000/03/10 08:18:36 lpd)

Changes the ps2pdf MS Windows / MS-DOS scripts to use temporary files to
avoid the absurdly low limits on the length of a command line and the total
size of environment variable definitions. (lib/ps2pdf.bat [1.2],
lib/ps2pdf12.bat [1.3], lib/ps2pdf13.bat [1.3], lib/ps2pdfwr.bat [1.2],
lib/ps2pdfxx.bat [1.1]: 2000/03/14 20:20:20 lpd)

On Windows, puts stdout into binary mode as well as stdin, to allow piping
printer output through stdout (not a good idea, but it should be supported
as well as on other platforms). (gp_ntfs.c [1.2]: 2000/03/17 06:22:59 lpd)

</pre><h2><a name="6.01 Drivers"></a>Drivers</h2><pre>

Fixes problems:
	- When converting PostScript to PDF, selecting /Bicubic as an image
DownsampleType caused an error instead of defaulting to /Average.
(gdevpsdf.h [1.2], gdevpsdi.c [1.2], gdevpsdp.c [1.2]: 2000/03/10 04:16:09
lpd)
	- The mswinpr2 driver didn't handle setting BitsPerPixel to the same
value when the device was already open, possibly causing an error on restore
or grestore. (gdevwpr2.c [1.2]: 2000/03/10 04:26:07 lpd)
	- When operating in buffered mode (MaxBitmap > 0), the X driver
sometimes failed to copy all of the updated area to the screen.
(gdevx.c [1.2], gdevx.h [1.2], gdevxini.c [1.2], gdevxxf.c [1.2]: 2000/03/10
06:56:27 lpd)
	- The [e]pswrite driver produced invalid output if the input file
didn't end with a showpage. Also cleans up some formatting and removes a
redundant test. (gdevps.c [1.2]: 2000/03/10 07:44:27 lpd)
	- Fixes a problem producing too much black in the output; also adds
support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and
Epson Stylus Color 200). Note that this is user-contributed code.
(gdevupd.c [1.2], lib/bjc610a0.upp [1.2], lib/bjc610a1.upp [1.2],
lib/bjc610a2.upp [1.2], lib/bjc610a3.upp [1.2], lib/bjc610a4.upp [1.2],
lib/bjc610a5.upp [1.2], lib/bjc610a6.upp [1.2], lib/bjc610a7.upp [1.2],
lib/bjc610a8.upp [1.2], lib/bjc610b1.upp [1.2], lib/bjc610b2.upp [1.2],
lib/bjc610b3.upp [1.2], lib/bjc610b4.upp [1.2], lib/bjc610b6.upp [1.2],
lib/bjc610b7.upp [1.2], lib/bjc610b8.upp [1.2], lib/cdj550.upp [1.2],
lib/cdj690.upp [1.1], lib/cdj690ec.upp [1.1], lib/dnj750c.upp [1.1],
lib/dnj750m.upp [1.1], lib/ras32.upp [1.2], lib/stc.upp [1.2],
lib/stc1520h.upp [1.2], lib/stc2.upp [1.2], lib/stc200_h.upp [1.1],
lib/stc2_h.upp [1.2], lib/stc2s_h.upp [1.2], lib/stc500p.upp [1.2],
lib/stc500ph.upp [1.2], lib/stc600ih.upp [1.2], lib/stc600p.upp [1.2],
lib/stc600pl.upp [1.2], lib/stc800ih.upp [1.2], lib/stc800p.upp [1.2],
lib/stc800pl.upp [1.2], lib/stc_h.upp [1.2], lib/stc_l.upp [1.2],
lib/stcany.upp [1.2]: 2000/03/16 02:01:36 lpd)
	- The X driver's algorithm for deciding when to update the screen
was changed several times between 5.50 and 6.0, and one of the more recent
changes caused it to copy many more pixels to the screen than necessary if
the file was making marks on the page in widely separated places.
(gdevx.c [1.3]: 2000/03/17 07:35:43 lpd)
	- In the X driver, the full-page buffer controlled by -dMaxBitmap=
wasn't allocated with a stable allocator, possibly leading to memory access
errors if save/restore were used. (gdevxini.c [1.3]: 2000/03/18 04:11:59
lpd)

Updates the Brother HL7xx drivers with a new user-contributed version, plus
a couple of minor fixes. (gdevhl7x.c [1.2]: 2000/03/10 07:33:44 lpd)

Enhances the [e]pswrite driver to handle Indexed color spaces over Device
color spaces, only with the standard Decode. (gdevps.c [1.3]: 2000/03/10
07:45:50 lpd)

Adds the ability to set the ProcessColorModel of the pdfwrite device to
/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
for fill, stroke, text, and imagemask, and for images that (for whatever
reason) can't be written in their specified color space. Note that this is a
short-term fix: pdfwrite should output colors in the color space in which
they were specified. However, a proper fix will require more significant
architectural changes. (gdevpsdf.c [1.2], gdevpsdf.h [1.3]: 2000/03/16
01:21:24 lpd)

Adds two more user-contributed 'uniprint' printer parameter sets: Epson
Stylus Color 640, and a generic Epson Stylus Color in high resolution mode
(720x720 dpi). (lib/stc640p.upp [1.1], lib/stcany_h.upp [1.1]: 2000/03/16
02:03:40 lpd)

</pre><h2><a name="6.01 PDF writer"></a>PDF writer</h2><pre>

Fixes problems:
	- In-line images emitted an extra 'q' (gsave), causing the CTM to
become incorrect, entries to pile up on the dictionary stack, and an
invalidrestore error to occur at the end of the page. (gdevpdfi.c [1.2]:
2000/03/10 03:47:37 lpd)
	- The change in 5.99 to work around Acrobat Reader's 32K limit on
user space coordinates caused all 0-width rectangles to disappear, which had
major effects on some files. (gdevpdfd.c [1.2]: 2000/03/10 03:48:10 lpd)
	- Incrementally downloaded TrueType fonts produced truncated Widths
tables in the output. We have patched this with a ******HACK****** that
causes such fonts to be converted to bitmaps: the correct fix (to delay
determining the range of valid characters until the font is written) is too
large a change to make in a bug fix release. (gdevpdft.c [1.2]: 2000/03/10
03:48:48 lpd)

Adds the ability to set the ProcessColorModel of the pdfwrite device to
/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used
for fill, stroke, text, and imagemask, and for images that (for whatever
reason) can't be written in their specified color space. Note that this is a
short-term fix: pdfwrite should output colors in the color space in which
they were specified. However, a proper fix will require more significant
architectural changes. (gdevpdf.c [1.2], gdevpdfd.c [1.3], gdevpdfi.c [1.3],
gdevpdfp.c [1.2], gdevpdft.c [1.3], gdevpdfu.c [1.2], gdevpdfx.h [1.2]:
2000/03/16 01:21:24 lpd)

</pre><h2><a name="6.01 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre>

Fixes problems:
	- When interpreting a PDF file, the Install page device procedure
got more and more deeply nested after every page, eventually causing an
execstackoverflow. (lib/pdf_main.ps [1.2]: 2000/03/10 03:56:11 lpd)
	- When interpreting a PDF file, text drawing operators didn't reset
the text position, so strings could get displayed on top of each other. (bug
introduced by a fix in 5.98) (lib/pdf_ops.ps [1.2]: 2000/03/10 03:57:03 lpd)
	- When interpreting a PDF file, substituted small-cap fonts were
created with incorrect scaling. (lib/pdf_font.ps [1.2]: 2000/03/10 03:57:50
lpd)

Cleans up some formatting. (lib/pdf_base.ps [1.2]: 2000/03/10 03:58:14 lpd)

</pre><h2><a name="6.01 Interpreter"></a>Interpreter</h2><pre>

Fixes problems:
	- There were extraneous 'def' commands that caused definitions to be
made in the wrong dictionary. (lib/gs_ttf.ps [1.2]: 2000/03/10 03:31:39 lpd)
	- If an error occurred while loading a font, it wouldn't produce an
error message. (This is a 'fix' of a 'fix' of a 'fix': it might well break
something else.) (lib/gs_type1.ps [1.2]: 2000/03/10 03:37:14 lpd)
	- When reading the strings of a binary object sequence, having to
get more data from a procedure-based stream sometimes caused a syntaxerror.
Fix: If the reserved (0) field in binary objects or binary object sequences
was not 0, no syntaxerror occurred. (iscanbin.c [1.2]: 2000/03/10 03:38:50
lpd)
	- The code for handling execstackoverflow errors didn't cut back the
stack correctly, possibly causing invalid memory accesses if an incorrect
attempt was made to run a cleanup procedure. (interp.c [1.2]: 2000/03/10
04:04:38 lpd)
	- Writing of dictionaries in binary object output, a non-standard
extension, was enabled by default, and also had to be enabled at startup
time if it was ever going to be used. Fix: Binary error messages caused an
error if the command wasn't of a type that printobject could handle. We now
do what the Adobe implementations appear to do in this case, namely, convert
the object with cvs. (lib/gs_btokn.ps [1.2]: 2000/03/10 04:27:31 lpd)
	- CloseSource and CloseTarget were effectively ignored for Flate and
LZW filters with a Predictor, and for the DCT filters. (ifilter.h [1.2],
zfdctd.c [1.2], zfdcte.c [1.2], zfdecode.c [1.2], zfilter.c [1.2],
zfilter2.c [1.2]: 2000/03/10 04:32:51 lpd)
	- findlibfile didn't handle %iodevice% prefixes correctly.
(zfile.c [1.2]: 2000/03/10 04:35:08 lpd)
	- fileposition didn't give an error for filters or non-seekable
streams. (zfileio.c [1.2]: 2000/03/10 04:35:53 lpd)
	- Images with input from a file or filter demanded 1 byte of data
too many, sometimes causing the last line of the image to be dropped. (bug
probably introduced in 6.0) (zimage.c [1.2]: 2000/03/10 04:37:02 lpd)
	- The check for a show within a cshow procedure for a CID font was
wrong. Fix: Character widths in CIDFontType 0 fonts were ignored (!). Adds a
.glyphwidth operator to support correct handling of character widths for CID
fonts. Adds a glyphwidth procedure to the library, like glyphshow and
glyphpath, in order to support correct handling of widths for CID fonts.
(ichar.h [1.2], lib/gs_cidfn.ps [1.2], zchar.c [1.2], zcharx.c [1.2]:
2000/03/10 04:41:47 lpd)
	- resourcestatus for fonts was broken. (lib/gs_res.ps [1.2]:
2000/03/10 04:54:15 lpd)
	- Fixes incorrect documentation of several procedures.
(lib/gs_fonts.ps [1.2]: 2000/03/10 07:00:28 lpd)
	- The %ram% IODevice was defined, but should not be (it represents a
RAM-based file system, which Ghostscript does not provide). Fix: The type of
the %null% IODevice was /FileSystem rather than /Special. (ziodev2.c [1.2]:
2000/03/10 07:02:07 lpd)
	- Directly-loaded TrueType fonts (including embedded TrueType fonts
in PDF files) could get confused with each other in the cache, because their
XUIDs were based on the font checksum field, which some fonts don't have set
correctly. (lib/gs_ttf.ps [1.3]: 2000/03/16 07:38:07 lpd)

Adds a new example file, a 3-D synthetic image. (examples/doretree.ps [1.1]:
2000/03/10 04:00:45 lpd)

Adds implementations of the devforall, devstatus, and diskonline
compatibility operators. (lib/gs_statd.ps [1.2]: 2000/03/10 04:01:55 lpd)

Some Adobe CIDFonts include a line /Setup /cid_Setup load def that
apparently is intended only to prevent the fonts from being loaded by a
standard PostScript interpreter (as opposed to ATM or a special font
loader), since cid_Setup is not defined anywhere and Setup is never
referenced; this change adds a dummy definition of cid_Setup to work around
this. (lib/gs_cidfn.ps [1.3]: 2000/03/10 04:53:25 lpd)

Updates the version # to 6.01, and the version date. (lib/gs_init.ps [1.2]:
2000/03/10 17:18:29 lpd)

Changes the default undercolor removal and black generation functions back
from f(k) = k to f(k) = 0. This fixes some, but not all, of the reported
problems with color inkjet output in 6.0. (lib/gs_init.ps [1.3]: 2000/03/10
18:47:31 lpd)

On Windows, puts stdout into binary mode as well as stdin, to allow piping
printer output through stdout (not a good idea, but it should be supported
as well as on other platforms). (dwmainc.cpp [1.2]: 2000/03/17 06:22:59 lpd)

</pre><h2><a name="6.01 Streams"></a>Streams</h2><pre>

Changes the sbuf_min_left macro to a procedure for readability and in
preparation for later revision. (stream.c [1.2], stream.h [1.2]: 2000/03/10
03:40:13 lpd)

</pre><h2><a name="6.01 Library"></a>Library</h2><pre>

Fixes problems:
	- (%os%) currentdevparams didn't return (fixed) values for
InitializeAction, Mounted, Removable, Searchable, SearchOrder, and
Writeable, or (meaningful) values for BlockSize, Free, and LogicalSize.
Currently, the latter values are dummies. (gsiodev.c [1.2]: 2000/03/10
03:43:06 lpd)
	- The terminating $ on the $Id: line in gsmalloc.c was missing, and
dwuninst.rc lacked a $Id: line. (gsmalloc.c [1.2]: 2000/03/10 03:44:33 lpd)
	- RasterOps with source transparency = 0, texture transparency = 1
didn't match the (very peculiar) H-P specification even if
TRANSPARENCY_PER_H_P was defined. (gdevdrop.c [1.2], gdevmrop.h [1.2],
gsropt.h [1.2]: 2000/03/10 04:06:15 lpd)
	- The prototype for gs_exit() was not included even though gs_exit()
was called. Fix: A cast discarded const unnecessarily. (gsalloc.c [1.2]:
2000/03/10 04:08:23 lpd)
	- The type of the %pipe% IODevice was /FileSystem, whereas it should
be /Special. (gdevpipe.c [1.2]: 2000/03/10 04:13:57 lpd)
	- An incorrectly formatted procedure couldn't be converted correctly
by ansi2knr. (gxidata.c [1.2]: 2000/03/10 04:30:58 lpd)
	- The check for a show within a cshow procedure for a CID font was
wrong. Fix: Character widths in CIDFontType 0 fonts were ignored (!). Adds a
.glyphwidth operator to support correct handling of character widths for CID
fonts. Adds a glyphwidth procedure to the library, like glyphshow and
glyphpath, in order to support correct handling of widths for CID fonts.
(gschar.c [1.2], gschar.h [1.2], gstext.c [1.2], gstext.h [1.2]: 2000/03/10
04:41:47 lpd)
	- The description of the value returned by code_map_decode_next in
*pchr was incorrect. (documentation bug only) (gsfcmap.c [1.2]: 2000/03/10
07:03:09 lpd)
	- Fixes a problem producing too much black in the output; also adds
support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and
Epson Stylus Color 200). Note that this is user-contributed code.
(gsargs.h [1.2]: 2000/03/16 02:01:36 lpd)
	- The code for Axial shadings incorrectly assumed that if the
shading axis was horizontal or vertical in user space, it was also
horizontal or vertical in device space: this caused incorrect results when
the CTM wasn't orthogonal. (gxshade1.c [1.2]: 2000/03/17 08:17:55 lpd)
	- For printer devices, a non-null definition for OutputFile was
required even on platforms that had a default printer (as implemented by
gp_open_printer for that platform). (gp.h [1.2], gsdevice.c [1.2]:
2000/03/18 01:45:16 lpd)

Clears the glyf and loca offsets in TrueType fonts that lack these tables,
so that clients who care can tell whether the font is being downloaded
incrementally. (gstype42.c [1.2]: 2000/03/10 03:45:29 lpd)

Changes a few macro definitions to work around over-zealous compiler
warnings. (gstype1.c [1.2], gstype2.c [1.2], gxtype1.h [1.2]: 2000/03/10
04:29:37 lpd)

Changes the default undercolor removal and black generation functions back
from f(k) = k to f(k) = 0. This fixes some, but not all, of the reported
problems with color inkjet output in 6.0. (gxdcconv.c [1.2]: 2000/03/10
18:47:31 lpd)

<hr>

<h1><a name="Version6.0"></a>Version 6.0 (2000-02-03)</h1>

This is the first public release since 5.50.  See <a href="Current.htm">the
release summary</a> for information about new capabilities and known
problems.

<h2><a name="6.0_Documentation"></a>Documentation</h2>

Documents the fact that the plane_depths of a gx_image_enum structure may
vary, and that planes_wanted procedure of a gx_image_enum must return false
if the depths *or* widths can change.  (gxiparam.h)

Documents the fact that a wanted plane's wanted status, width, or depth can
only be changed by a call of plane_data that provides data for that plane.
(gxiparam.h)

Documents the change in the handling of the pthreads library.
(doc/Make.htm)

Documents the fact that setting parameters for the DCTEncode filter in
ps2pdf causes a crash.  (doc/Ps2pdf.htm)

Documents another bug in the MIPSpro 7.x / IRIX 6.5.x compilers, with
isave.c.  (doc/Make.htm)

Corrects Russell Lang's e-mail address.  (doc/New-user.htm)

Documents the new image operator test file and the pdfeof file.
(doc/Psfiles.htm)

Documents the 'w' argument for image_render procedures.  (gxiclass.h)

Adds a little more checking to the release process.  (doc/Release.htm)

Documents the return values from the font build_char procedure.  (gxfont.h)

Documents the fact that the free 'zip' program is needed to build the
self-extracting Windows executable, as well as WinZipSE.  (doc/Make.htm,
msvc32.mak, winint.mak)

Adds references to several new free fonts.  (doc/Fonts.htm)

Documents an important invariant for streams.  (stream.h)

Adds a reference for user-supported Watcom / GNU make makefiles.
(doc/Make.htm, doc/New-user.htm)

Documents the dependence of gs_ttf.ps on some of the gs_*_e.ps files.
(lib/gs_ttf.ps)

Documents how to make self-extracting Windows executables.
(doc/Release.htm)

Adds a number of new user-contributed man pages.  (unixinst.mak, man/gslp.1,
man/wftopfa.1, man/printafm.1, man/pfbtopfa.1, man/font2c.1, man/dvipdf.1,
man/ps2pdfwr.1, man/gsnd.1, man/pf2afm.1, man/ps2pdf.1)

<h2><a name="6.0_Procedures"></a>Procedures</h2>

Fixes problems:
	- Building on BSDI didn't work.  The simplest way to fix this was to
change the linking of the pthreads library on Unix platforms to be included
in STDLIBS rather than the "sync" implementation. (fix contributed by a
user) (lib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak)
	- Once again, some runtime files weren't installed.  (unixinst.mak)
	- Building the self-extracting executable didn't work.  (winint.mak)

Updates the user-contributed all-architectures makefile.  (all-arch.mak)

<h2><a name="6.0_Utilities"></a>Utilities</h2>

Fixes problems:
	- A needed #include was missing.  (geninit.c)
	- There were signed/unsigned char mismatches.  (genht.c, geninit.c)
	- The MacOS compiler imposes a 32K limit on the size of a stack
frame: we changed the code to use malloc/free.  (geninit.c)

Removes an unnecessary variable.  (echogs.c)

Adds a file that attempts to test the image operators exhaustively.
(lib/image-qa.ps, unixinst.mak)

Enhances the prfont.ps utility to print CIDFonts.  (lib/prfont.ps)

Adds a utility file that patches the PDF interpreter to allow garbage after
the %%EOF (or the %%EOF to be missing completely).  (lib/pdfeof.ps)

<h2><a name="6.0_Drivers"></a>Drivers</h2>

Fixes problems:
	- The X driver compared too many bits of color value, leading to
unnecessary halftoning.  (bug introduced by a fix in 5.99) (gdevxcmp.c)
	- Output from the pswrite driver got a dictfull error on Level 1
printers.  (gdevps.c)
	- Anti-aliasing had stopped working on MS Windows and OS/2. (bug
probably introduced in 5.65) (gdevmswn.c, gdevpm.c)

<h2><a name="6.0_Platforms"></a>Platforms</h2>

Adds a conditional definition of PTHREAD_CREATE_DETACHED for old versions of
the pthreads library.  (gp_psync.c)

Updates the Microsoft Visual C++ library makefile for VC++ 6.  (msvclib.mak)

Updates some copyright dates.  (winint.mak, dwsetup.rc)

<h2><a name="6.0_Fonts"></a>Fonts</h2>

Updates the URW fonts to include the expanded Adobe character set, including
many Eastern European accented characters.  (doc/New-user.htm)

Removes a 'readonly' that inconvenienced the authors of ttf2pf.
(lib/gs_ttf.ps)

<h2><a name="6.0_PDF_writer"></a>PDF writer</h2>

Fixes problems:
	- The Dest key was deleted from GoTo and GoToR link annotation
pdfmarks.  (gdevpdfm.c)
	- {name} references were substituted even in stream data for the
/PUT pdfmark.  (gdevpdfm.c)
	- The revision number was sometimes printed incorrectly if its
fraction part was zero.  (gdevpdf.c)
	- Embedded Multiple Master font instances weren't identified as
MMType1 rather than Type1.  (gdevpdff.h, gdevpdff.c, gdevpdft.c, gdevpdfw.c)
	- The test against MaxSubsetPct was incorrect when the percentages
were equal.  (gdevpdfw.c)
	- Font registrations weren't removed when the device was closed.
(gdevpdff.h, gdevpdfx.h, gdevpdff.c, gdevpdfw.c)
	- Multiple /OBJ pdfmarks with the same name caused an error.  For
Distiller compatibility, we now allow this if the type is the same, even
though the pdfmark specification doesn't say anything about this being
legal.  (gdevpdfm.c)

Removes an unnecessary variable.  (gdevpdff.c, gdevpdfr.c)

Disables embedding Multiple Master font instances, since Acrobat Reader
doesn't accept what appear to be correct output and we don't have time
before the release to track down the problem.  (gdevpdft.c)

<h2><a name="6.0_Interpreter_PDF"></a>Interpreter (PDF)</h2>

Factors some code to allow patching the PDF reader to allow garbage after
the %%EOF (or the %%EOF to be missing completely).  (lib/pdf_main.ps)

<h2><a name="6.0_Interpreter"></a>Interpreter</h2>

Fixes problems:
	- Type 1 fonts with non-standard OtherSubrs had stopped working.
(bug introduced since 5.60) (zchar1.c)
	- usecmap didn't work.  (lib/gs_cmap.ps)
	- The glyph_info procedure for Type 1 fonts didn't take Metrics[2]
or CDevProc into account.  (zchar1.c, zfont1.c)
	- The multiple-data-source case of images was broken. (bug
introduced in 5.99) (zimage.c)
	- If a page device Install procedure caused an error, things could
be left in an inconsistent state.  (lib/gs_setpd.ps)
	- Using a DeviceN color space could access uninitialized data in a
color value.  (zcsdevn.c)
	- DeviceN images with procedure data sources were broken.
(zimage.c)
	- Images with a procedure data source could terminate prematurely if
their processing was interrupted.  (zimage.c)
	- The garbage collector only marked half the name table sub-tables,
and attempted to mark an equal number of invalid pointers, leading to
invalid accesses or memory corruption.  (iname.c)

Removes an unused variable.  (zmisc.c)

<h2><a name="6.0_Streams"></a>Streams</h2>

Fixes problems:
	- sgets didn't reset the cursor pointers, so sgets into a client
buffer followed by sseek (for some kinds of streams, including files) could
get confused.  (stream.c)

<h2><a name="6.0_Library"></a>Library</h2>

Fixes problems:
	- A 'const' qualifier was omitted, leading to a type mismatch.
(gxclrast.c)
	- The revision number was sometimes printed incorrectly if its
fraction part was zero.  (gsmisc.c)
	- gs_image_next returned the wrong value in *pused if it incremented
the plane number.  (bug introduced in 5.99) (gsimage.c)
	- Only the last of the data_x and raster values in the local
'planes' array in gs_image_next_planes were initialized.  (bug introduced in
5.99) (gsimage.c)
	- The multiple-data-source case of images was broken. (bug
introduced in 5.99) (gsimage.h, gsimage.c)
	- ImageType 3 images with unequal scaling for the mask and data
didn't work.  (We thought they once did, but it appears they never have.)
(gximage3.c)
	- Images with 12-bit samples treated a Decode entry of [1 0] the
same as [0 1].  (Other, general Decode entries worked correctly.)
(gxipixel.c)
	- ImageType 3 images didn't work if processing was ever interrupted
for remapping a color.  (gximage3.c)
	- Images in DeviceN color spaces with 12-bit samples didn't work.
(gxi12bit.c, gxidata.c)
	- Images in DeviceN color spaces could fail to render properly
because the interruption of rendering left a half-built entry in an internal
cache.  (gxi12bit.c, gxicolor.c)
	- Images with non-idempotent RasterOps in 1-component DeviceN color
spaces didn't render properly, because the same pixel was rendered multiple
times after a color remapping interruption.  (gximono.c)
	- The fast case of masked images caused a crash if invoked without
an imager state.  (gximono.c)
	- Flushing buffered image data could cause coordinate bookkeeping
to get out of sync.  (gxidata.c)
	- ImageType 3, InterleaveType 2 images sometimes failed to render
the last row.  (gximage3.c)
	- The fix in 5.88 for resizing large objects had a bug itself.
(gsalloc.c)
	- Whan banding, if a client supplied more data than necessary for an
image, the client was told (incorrectly) that all of the data was used.
(fix from Artifex) (gxclimag.c)
	- Null patterns caused a crash. (bug probably introduced by changes
to support PatternType 2) (gspcolor.c)
	- On hand-initialized memory devices where line_ptrs[0] != base,
monobit RasterOps could cause invalid or stray memory accesses.  (gdevmr1.c)

Removes an unnecessary variable.  (gdevppla.c, gsfont.c)

Adds the ability to call a specified procedure when unregistering
notification, needed for removing PDF font registrations.  (gsnotify.h,
gsnotify.c)

Updates the copyright year.  (gscdef.c)

</pre>

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 2000 Aladdin Enterprises.
All rights reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>HTML coding and style guidelines for Ghostscript documentation</title>
<!-- $Id: Htmstyle.htm,v 1.34 2003/12/08 23:17:15 giles Exp $ -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>HTML coding and style guidelines for Ghostscript documentation</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Introduction">Introduction</a>
<li><a href="#Appearance">Appearance and contents</a>
<ul>
<li><a href="#Page_structure">Page structure</a>
<li><a href="#Links_outside">Links to outside the Ghostscript documentation</a>
<li><a href="#Images">Images and graphics</a>
<li><a href="#index.html"><b><tt>index.html</tt></b></a>
</ul>
<li><a href="#Large_structure">HTML large structure</a>
<ul>
<li><a href="#HTML_head">HTML <b><tt>&lt;head&gt;</tt></b></a>
<li><a href="#HTML_body">HTML <b><tt>&lt;body&gt;</tt></b></a>
</ul>
<li><a href="#Inner_structure">HTML inner structure</a>
<ul>
<li><a href="#Structuring_comments">Structuring comments</a>
<li><a href="#Headers">Headers: <b><tt>&lt;Hn&gt;</tt></b></a>
<li><a href="#Anchors">Anchors: <b><tt>&lt;a name="..."&gt;</tt></b></a>
</ul>
<li><a href="#Text">The presentation of text</a>
<ul>
<li><a href="#Text_sections">Sections of text</a>
<ul>
<li><a href="#Paragraphs">Paragraphs: <b><tt>&lt;p&gt;</tt></b></a>
<li><a href="#Blockquote">Indented paragraphs: <b><tt>&lt;blockquote&gt;</tt></b></a>
<li><a href="#Line_breaks">Explicit line breaks: <b><tt>&lt;br&gt;</tt></b></a>
<li><a href="#Preformatted_text">Preformatted text: <b><tt>&lt;pre&gt;</tt></b></a>
</ul>
<li><a href="#Use_of_fonts">The use of different font faces</a>
</ul>
<li><a href="#Lists">Lists: <b><tt>&lt;ul&gt;, &lt;ol&gt;, &lt;dl&gt;</tt></b></a>
<li><a href="#Tables">Tables: <b><tt>&lt;table&gt;</tt></b></a>
<ul>
<li><a href="#Readability">Readability for the user and the HTML writer</a>
<li><a href="#Table_guidelines">Specific guidelines for coding tables</a>
<li><a href="#Typical_table">HTML code for typical tables</a>
</ul>
<li><a href="#Unused_tags">Tags not used</a>
<li><a href="#New_document">Creating a new document</a>
<ul>
<li><a href="#File_name">Name the new document in 8+3 format</a>
<li><a href="#Plagiarize">Use an existing document as a model</a>
<li><a href="#Readme_material">Write new references to go in <b><tt>Readme.htm</tt></b></a>
<li><a href="#New_doc_other">Other considerations</a>
</ul>
<li><a href="#Miscellany">Miscellany</a>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Introduction"></a>Introduction</h2>

<p>
The most important intention in casting Ghostscript's documentation into
Hypertext Markup Language (HTML) from simple text form is to improve its
usefulness greatly to those who use, install, and build Ghostscript:
everything else is details.  The wide spread of World Wide Web browsers now
makes it possible to distribute documents which are not only readable as
text, but also richly cross-linked as hypertext.  Using hypertext through a
browser can reduce the effort required to find and use the information
people often need in order to use Ghostscript.

<p>
The remainder of this document expresses the guidelines used to create the
HTML form of the Ghostscript documentation.  The guidelines are intended to
encourage

<ul>
<li>documents that are easy to read and understand in all of the most-used
forms: on screen with a browser, printed by a browser, or as plain text;

<li>correct HTML that conforms to prevailing standards;

<li>consistent HTML coding among all Ghostscript's documents; and

<li>HTML documents that are as simple as possible in light of their
contents; free of difficult, little-used, or proprietary constructs; and
easy to understand and modify.
</ul>

<p>
Here are those guidelines.

<hr>

<h2><a name="Appearance"></a>Appearance and contents</h2>

<p>
What the user sees browsing the documentation, and what a document
developer or editor sees working with it, are different.  This section is
about what the user sees.

<h3><a name="Page_structure"></a>Page structure</h3>

<p>
A Ghostscript document in HTML form should consist of

<ol>
<li>a visual header containing
<ol type=a>
<li>a conspicuous highlighted headline;
<li>a table of contents;
<li>"hints": references to other useful documents, always including
<a href="Readme.htm">Readme.htm</a>;
</ol>
<li>the substantive contents;
<li>a visual trailer consisting entirely of
<ol type=a>
<li>standard copyright and licensing text;
<li>the Ghostscript version number; and
<li>the date when the document was last modified.
</ol>
</ol>

<p>
This document is an example of this standard visible structure.  Also see
below about "<a href="#Structuring_comments">Structuring comments</a>" in
HTML source code.

<p>
Where it makes sense to modify the standard structure to make the document
more usable, do that.  See
<a href="Readme.htm"><b><tt>Readme.htm</tt></b></a> for an example: the
introductory material at the beginning of the visible header, before the
table of contents.

<h3><a name="Links_outside"></a>Links to outside the Ghostscript documentation</h3>

<p>
Links to sites and documents outside the ghostscript distribution
must carry the <code>class="offsite"</code> attribute and value. This signals special
formatting to the stylesheet to assist users reading offline.

<p>
Avoid gratuitous commercial links; for instance, link the title of a book
to its publisher, not to one particular on-line bookseller. See
<a href="Language.htm#Capabilities"><b><tt>Language.htm</tt></b></a> for an
example, the reference to the <em>PostScript Language Reference
Manual</em>.

<p>
Similarly, where you have a choice, refer to free software rather than
commercial products.  See
<a href="Make.htm#Third-party_libraries">Make.htm</a> for an example, the
reference to <a href="Make.htm#Third-party_libraries">InfoZip
<b><tt>unzip</tt></b></a> (where many commercial products provide similar
functions).

<h3><a name="Images"></a>Images and graphics</h3>

<p>
Use no graphics or images.  The documents are text-only, so nothing is lost
when a document is converted into ASCII text.  This is an explicit initial
design goal of the HTML documentation.

<h3><a name="index.html"></a><b><tt>index.html</tt></b></h3>

<p>
<b><tt>index.html</tt></b> is not a part of the visible Ghostscript
documentation itself, but when it is placed with all the
<b><tt>*.htm</tt></b> files in a directory and a browser refers to the
directory name alone, most servers are configured to deliver a file named
<b><tt>index.html</tt></b> by default.  This one does nothing except
immediately to open the introductory Ghostscript document
<a href="index.html"><b><tt>Readme.htm</tt></b></a>.  This is intended to
make life easier for both webmasters and users.

<hr>

<h2><a name="Large_structure"></a>HTML large structure</h2>

<h3><a name="HTML_head"></a>HTML <b><tt>&lt;head&gt;</tt></b></h3>

<p>
Besides the essential HTML structure elements, Ghostscript HTML document's
<b><tt>&lt;head&gt;</tt></b> consists of three elements in this order:

<ol>
<li>A <b><tt>&lt;title&gt;</tt></b>, usually the same text as the
<a href="#Headline">headline</a>

<li>An RCS identification line giving the name of the file in an HTML
comment:

<blockquote>
<!-- The next line must not contain the literal string $,I,d,:! -->
<b><tt>&lt;!-- $Id</tt><tt>: </tt></b><b><em>{file name}</em></b><b><tt>.htm $ --&gt;</tt></b>
</blockquote>

<li>For documents converted from another form, an HTML comment line giving
the name of the original file before it was edited and converted to HTML:

<blockquote>
<b><tt>&lt;!-- Originally: </tt></b><b><em>{file name}</em></b><b><tt> --&gt;</tt></b>
</blockquote>
</ol>

<h3><a name="HTML_body"></a>HTML <b><tt>&lt;body&gt;</tt></b></h3>

<p>
A Ghostscript HTML document's <b><tt>&lt;body&gt;</tt></b> consists of five
elements in this order:

<ol>
<li><a name="Headline"></a>The <b><em>headline</em></b> is conspicuous text
at the top of the page, usually the same as the
<a href="#Structure_head"><b><tt>&lt;title&gt;</tt></b></a> text. It is
always in a table whose purpose is to provide a colored background using
<b><tt>bgcolor</tt></b>, going the full width of the page:

<blockquote>
<b><tt>&lt;p&gt;&lt;table width="100%" border="0"&gt;<br>
&lt;tr&gt;&lt;th align="center" bgcolor="#CCCC00"&gt;&lt;font size=6&gt;</tt></b><br>
<b><em>{Text}</em></b><br>
<b><tt>&lt;/font&gt;<br>
&lt;/table&gt;</tt></b>
</blockquote>

<li><a name="Table_of_contents"></a>
The <b><em>table of contents</em></b> consists of nested unordered
lists <b><tt>&lt;ul&gt;</tt></b>, in most documents assembled strictly from
the <b><tt>&lt;Hn&gt;</tt></b> headers.  The levels of nesting in the table
of contents correspond to the level numbers of the headers.

<li>The <b><em>hint</em></b> is a short section suggesting where to look
for other related information.  With very few exceptions this always
includes a reference and link to
<a href="Readme.htm"><b><tt>Readme.htm</tt></b></a>, but may include other
suggestions and references.

<li>The substance of the document.

<li>The <b><em>trailer</em></b> contains, in a small font size,

<ol type=a>
<li>the <b><em>copyright notice</em></b> and other legal boilerplate text
<li>the <b><em>version number</em></b> of Ghostscript and the
<b><em>date</em></b> when the file was last modified.
</ol>
</ol>

<p>
This document for an example of that structure.

<hr>

<h2><a name="Inner_structure"></a>HTML inner structure</h2>

<h3><a name="Structuring_comments"></a>Structuring comments</h3>

<p>
Special comment lines within the HTML files mark internally the visible
sections of the document.  They make it easy for both document developers
and programs to handle the HTML code.  Each of these comments is exactly 80
characters wide, and each important section of a document is bracketed by a
unique beginning and ending pair.  View the source code of this document
for an example of these structuring comments.  The sections they mark are:

<ol>
<li>the <b><em>visible header</em></b>
<ol type=a>
<li>the <a href="#Headline"><b><em>headline</em></b></a>
<li>the <b><em>table of contents</em></b>
<li>the "see also" <b><em>hints</em></b>
</ol>
<li>the <b><em>body</em></b>
<li>the <b><em>trailer</em></b>
</ol>

<h3><a name="Headers"></a>Headers: <b><tt>&lt;Hn&gt;</tt></b></h3>

<p>
Give a header <b><tt>&lt;Hn&gt;</tt></b> this structure:

<blockquote><b><tt>
&lt;h2&gt;&lt;a name="Head_anchor"&gt;&lt;/a&gt;Header text&lt;/h2&gt;
</tt></b></blockquote>

<p>
That is, the opening header tag, an anchor, the header text, and the
closing tag.

<p>
Represent every header in the table of contents, linked
<b><tt>&lt;a&nbsp;href="#..."&gt;</tt></b>...<b><tt>&lt;/a&gt;</tt></b> to
the header.  Of course, the headers are also convenient linkage points for
references from other documents.

<h3><a name="Anchors"></a>Anchors: <b><tt>&lt;a name="..."&gt;</tt></b></h3>

<p>
Give an anchor a name consisting only of letters, digits, dots
("<b><tt>.</tt></b>"), hyphens ("<b><tt>-</tt></b>"), and underscores
("<b><tt>_</tt></b>"), but not white space or other punctuation marks.
This ensures that the name is readable and that an entire name always
appears on a single line of HTML source both where it's defined and
everywhere it's used, making it simple to find anchors by text search in
the HTML source code.

<p>
Choose anchor names to be readable and meaningful in the HTML source code.
For instance:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Use this form
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>... <b><em>NOT</em></b> this form
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>&lt;a&nbsp;name="Image_formats"&gt;&lt;/a&gt;</tt></b>
	<td>&nbsp;
	<td><b><tt>&lt;a&nbsp;name="Imgfts"&gt;&lt;/a&gt;</tt></b>
</table></blockquote>

<p>
Anchors should be empty, that is

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Use this form
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>... <b><em>NOT</em></b> this form
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
	<td>&nbsp;
	<td><b><tt>&lt;a&nbsp;name="..."&gt;</tt></b><b><em>anything</em></b><b><tt>&lt;/a&gt;</tt></b>
</table></blockquote>

<p>
<a name="Anchor_placement"></a>Place an anchor within a paragraph (indented
paragraph, list item, head, etc.) and at its beginning.

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Use this form
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>... <b><em>NOT</em></b> this form
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>&lt;p&gt;&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
	<td>&nbsp;
	<td><b><tt>&lt;p&gt;</tt></b><b><em>&nbsp;...text...&nbsp;</em></b><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
<tr valign=top>	<td><b><tt>&lt;p&gt;&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
	<td>&nbsp;
	<td><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;&lt;p&gt;</tt></b>
<tr valign=top>	<td><b><tt>&lt;li&gt;&lt;a&nbsp;name="..."&gt;&lt;/a&gt;</tt></b>
	<td>&nbsp;
	<td><b><tt>&lt;a&nbsp;name="..."&gt;&lt;/a&gt;&lt;li&gt;</tt></b>
</table></blockquote>

<hr>

<h2><a name="Text"></a>The presentation of text</h2>

<h3><a name="Text_sections"></a>Sections of text</h3>

<h4><a name="Paragraphs"></a>Paragraphs: <b><tt>&lt;p&gt;</tt></b></h4>

<p>
Define unindented paragraphs with <b><tt>&lt;p&gt;</tt></b>, never with
explicit line breaks <b><tt>&lt;br&gt;</tt></b>, and make them
ragged-right, not right-filled or centered.  Put the paragraph tag
<b><tt>&lt;p&gt;</tt></b> on a line alone, except when it is
<a href="#Anchor_placement">followed immediately by an anchor</a>.
Don't place the anchor before the paragraph tag.

<h4><a name="Blockquote"></a>Indented paragraphs: <b><tt>&lt;blockquote&gt;</tt></b></h4>

<p>
Define indented paragraphs with <b><tt>&lt;blockquote&gt;</tt></b>.  Avoid
elaborate nested indentation -- that is, more than two levels.  It is
generally a poor idea to try to make indentation carry too much weight of
meaning for text, so use indentation simply to separate visual elements for
easier reading.

<h4><a name="Line_breaks"></a>Explicit line breaks: <b><tt>&lt;br&gt;</tt></b></h4>

<p>
Use explicit line breaks <b><tt>&lt;br&gt;</tt></b> sparingly, and never as
a substitute for paragraph tags.  Do use them in

<ul>
<li>multi-line addresses
<li>formatted coding examples
<li>table entries, sparingly
</ul>

<h4><a name="Preformatted_text"></a>Preformatted text: <b><tt>&lt;pre&gt;</tt></b></h4>

<p>
Use preformatted text <b><tt>&lt;pre&gt;</tt></b> exclusively for material
that must be presented with exact spacing in a monospaced font, such as
extended coding examples.  Where extended preformatted text seems likely to
be wider than a typical browser window, reduce the font size:

<blockquote>
<b><tt>&lt;font size="-1"&gt;&lt;pre&gt;</tt></b><br>
<b><em>...&nbsp;Wide preformatted text&nbsp;...</em></b><br>
<b><tt>&lt;/pre&gt;&lt;/font&gt;</tt></b>
</blockquote>

<h3><a name="Use_of_fonts"></a>The use of different font faces</h3>

<p>
Do not use named fonts.  Use only standard markup to specify fonts, as
shown in this table.

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Use of fonts</font><hr>
<tr valign=bottom>
	<th align=left>Tag
	<td>&nbsp;&nbsp;&nbsp;
	<th align=left>Used for
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>&lt;address&gt;</tt></b>
	<td>&nbsp;
	<td>Addresses in running text
<tr valign=top>	<td><b><tt>&lt;b&gt;</tt></b>
	<td>&nbsp;
	<td>Emphasis everywhere
<tr valign=top>	<td><b><tt>&lt;em&gt;</tt></b>
	<td>&nbsp;
	<td>Emphasis, usually in running text; with <b><tt>&lt;b&gt;</tt></b>, strong emphasis
<tr valign=top>	<td><b><tt>&lt;font size=</tt></b><b><em>N</em></b><b><tt>&gt;</tt></b>
	<td>&nbsp;
	<td>Table headings, extended <b><tt>&lt;pre&gt;</tt></b> examples
<tr valign=top>	<td><b><tt>&lt;pre&gt;</tt></b>
	<td>&nbsp;
	<td>Preformatted text (to control spacing)
<tr valign=top>	<td><b><tt>&lt;small&gt;</tt></b>
	<td>&nbsp;
	<td>Superscripts (smaller than <b><tt>&lt;font size="-1"&gt;</tt></b>)
<tr valign=top>	<td><b><tt>&lt;sup&gt;</tt></b>
	<td>&nbsp;
	<td>Superscripts
<tr valign=top>	<td><b><tt>&lt;tt&gt;</tt></b>
	<td>&nbsp;
	<td>With <b><tt>&lt;b&gt;</tt></b>, used for specific names of
	code, programs, and data in running text, and in short examples
</table></blockquote>

<hr>

<h2><a name="Lists"></a>Lists: <b><tt>&lt;ul&gt;, &lt;ol&gt;, &lt;dl&gt;</tt></b></h2>

<p>
Don't over-use lists: instead simply use clear wording in running text
wherever possible.  Use a list where the special formatting improves the
material's clarity and readability.

<p>
Most simple lists should be unordered (bulleted) lists
<b><tt>&lt;ul&gt;</tt></b>.  Use an ordered (numbered or alphabetized) list
<b><tt>&lt;ol&gt;</tt></b> only where the exact ordering or an exact count
is important.

<p>
Where entries in a descriptive list <b><tt>&lt;dl&gt;</tt></b> contain
extended descriptions <b><tt>&lt;dd&gt;</tt></b> -- especially if the
descriptions contain paragraph breaks or tables -- improve the spacing
between entries by making each entry a separate list.  That is, enclose
each entry in a separate list to give it more readable spacing, rather than
putting many <b><tt>&lt;dt&gt;...&lt;dd&gt;...</tt></b> entries in a single
list:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Use this form
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>... <b><em>NOT</em></b> this form
<tr>	<td colspan=3><hr>
<tr>	<td valign=top>
	    <b><tt>&lt;dl&gt;</tt></b><br>
	    <b><tt>&lt;dt&gt;</tt></b>Term<br>
	    <b><tt>&lt;dd&gt;</tt></b>Description<br>
	    <b><tt>&lt;p&gt;</tt></b>Another paragraph of description<br>
	    <b><tt>&lt;/dl&gt;</tt></b><br>
	    &nbsp;<br>
	    <b><tt>&lt;dl&gt;</tt></b><br>
	    <b><tt>&lt;dt&gt;</tt></b>Another term<br>
	    <b><tt>&lt;dd&gt;</tt></b>Another description<br>
	    <b><tt>&lt;/dl&gt;</tt></b><br>
	    ...<br>
	<td>&nbsp;
	<td valign=top>
	    <b><tt>&lt;dl&gt;</tt></b><br>
	    <b><tt>&lt;dt&gt;</tt></b>Term<br>
	    <b><tt>&lt;dd&gt;</tt></b>Description<br>
	    <b><tt>&lt;p&gt;</tt></b>Another paragraph of description<br>
	    <b><tt>&lt;dt&gt;</tt></b>Another term<br>
	    <b><tt>&lt;dd&gt;</tt></b>Another description<br>
	    ...<br>
	    <b><tt>&lt;/dl&gt;</tt></b>
</table></blockquote>

<p>
This may be more work for the HTML writer, but the results for the reader
are often much better.

<hr>

<h2><a name="Tables"></a>Tables: <b><tt>&lt;table&gt;</tt></b></h2>

<h3><a name="Readability"></a>Readability for the user and the HTML writer</h3>

<p>
Format tables to be as readable as possible both with a browser and when
converted to plain text.  Browsers and converters of all kinds handle
tables idiosyncratically, so there seems to be more art than science to
reaching this end, which accounts for all the detail in the guidelines for
tables: it is the reason for all the uses of background color
<b><tt>bgcolor</tt></b>, horizontal rules <b><tt>&lt;hr&gt;</tt></b>, and
explicit spacing.

<p>
Secondarily, arrange HTML source code for tables to be readable by the
writer and developer.

<h3><a name="Table_guidelines"></a>Specific guidelines for coding tables</h3>

<ul>
<li>Large tables have heads with the same background color as the page's
<a href="#Headline">headline</a>.  (Color is used only in tables and only
this way, and it is the same color everywhere.  In consideration of
differences of color vision, the color is chosen so that normal black text
contrasts with a brighter background, and the color itself against white.)

<li>Do not use borders for tables; they almost invariably only clutter the
appearance without adding to clarity, and they don't convert well to plain
text.  For visual spacing prefer white space.

<li>Set cell padding and spacing to 0.  Use explicit white space for
readability, not implicit white space.

<li>Begin the code for a new row <b><tt>&lt;tr&gt;</tt></b> on a new line.
Generally use <b><tt>valign=top</tt></b> to control the placement of text
in a row for readability with a browser or as plain text.

<li>Code the first column of a row beginning on the same line as the
beginning of the row, and then begin every other column on a separate line.
Always precede <b><tt>&lt;td&gt;</tt></b> by a tab character.

<li>Separate two columns of substantive material by a visually empty column
of nonbreaking spaces for readability.  Specify the width of this empty
column in the first row, and in all other rows give that column a single
nonbreaking space.

<li>Use horizontal rules and visually empty rows for clarity, but
sparingly.  Be consistent with the existing tables.

<li>Give every cell some contents: put a nonbreaking space in a visually
empty cell as a placeholder.
</ul>

<h3><a name="Typical_table"></a>HTML code for typical tables</h3>

<p>
The HTML source code for a typical large table should look like this:

<blockquote>
<pre>&lt;table cellpadding=0 cellspacing=0&gt;
&lt;tr&gt;&lt;th colspan=5 bgcolor="#CCCC00"&gt;&lt;hr&gt;&lt;font size="+1"&gt;Large&nbsp;table&lt;/font&gt;&lt;hr&gt;
&lt;tr&gt;    &lt;th align=left&gt;...
        &lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
        &lt;th align=left&gt;...
        &lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
        &lt;th align=left&gt;...
&lt;tr&gt;    &lt;td&gt;...
        &lt;td&gt;&amp;nbsp;&amp;nbsp;
        &lt;td&gt;...
        &lt;td&gt;&amp;nbsp;
        &lt;td&gt;...
...
&lt;/table&gt;
</pre></blockquote>

<p>
The HTML source code for a typical small table should look like this:

<blockquote>
<pre>&lt;table cellpadding=0 cellspacing=0&gt;
&lt;tr&gt;    &lt;td&gt;...
        &lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
        &lt;td&gt;...
&lt;tr&gt;    &lt;td&gt;...
        &lt;td&gt;&amp;nbsp;
        &lt;td&gt;...
...
&lt;/table&gt;
</pre></blockquote>

<hr>

<h2><a name="Unused_tags"></a>Tags not used</h2>

<p>
Don't use optional tags (ones not required by the HTML standard).  These
include <b><tt>&lt;/dd&gt;</tt></b>, <b><tt>&lt;/dt&gt;</tt></b>,
<b><tt>&lt;/li&gt;</tt></b>, <b><tt>&lt;/p&gt;</tt></b>,
<b><tt>&lt;/tr&gt;</tt></b>, <b><tt>&lt;/th&gt;</tt></b>, and
<b><tt>&lt;/td&gt;</tt></b>.

<hr>

<h2><a name="New_document"></a>Creating a new document</h2>

<h3><a name="File_name"></a>Name the new document in 8+3 format</h3>

<p>
If you create a new Ghostscript HTML document, choose for it a name in 8+3
format for cross-platform compabitility:

<blockquote>
<b><em>Name</em></b><b><tt>.htm</tt></b>
</blockquote>

<p>
where "<b><em>Name</em></b>" is no more than eight characters.

<p>
Begin the new file name with an upper-case letter like the existing names,
which are in mixed case beginning with upper-case letters.  Use spelling,
not case, to distinguish between names: that is, don't create a new file
whose name differs from an existing one only by the difference between
upper and lower case, because some platforms can't store two such files.

<h3><a name="Plagiarize"></a>Use an existing document as a model</h3>

<p>
To create an entirely new Ghostscript document, plagiarize this one for the
<a href="#Structuring_comments">structuring comments</a> and other useful
parts.  Then, using the <a href="#Structuring_comments">structuring
comments</a> as a guide to the sections of the document (in a text editor,
search for "<b><tt>&lt;!--&nbsp;[</tt></b>"):

<ul>
<li>insert your own HTML title and <a href="#Headline">headline</a> (they
should ordinarily be the same text) in place of the old ones;

<li>insert your own RCS <b><tt>$Id</tt></b> in place of the old one in the
<a href="#Structure_head">HTML header</a>;

<li>delete the old entries in the <a href="#Table_of_contents">table of
contents</a>;

<li>keep the hint paragraph;

<li>delete the entire contents section between the structuring comments;
and

<li>in the trailer, update the version number and date.
</ul>

<p>
You now have a template document ready for new contents.

<h3><a name="Readme_material"></a>Write new references to go in <b><tt>Readme.htm</tt></b></h3>

<p>
Write material to go in <a href="Readme.htm"><b><tt>Readme.htm</tt></b></a>
that describes the new document, and links to it from two sections:

<ul>
<li>the <a href="Readme.htm#Theme_roadmap">thematic section</a> and

<li>the descriptions of documentation
<a href="Readme.htm#Ordered_roadmap">arranged by file name</a>.
</ul>

<h3><a name="New_doc_other"></a>Other considerations</h3>

<p>
Follow the other guidelines here, including which elements of the
document should go in which section according to the structuring comments,
and <a href="#Headers">anchoring every <b><tt>&lt;Hn&gt;</tt></b>
header</a>.  As you create text and headers, you will want to rebuild the
<a href="#Table_of_contents">table of contents</a> from the headers
occasionally.

<p>
Pete Kaiser &lt;<a href="mailto:kaiser@acm.org">kaiser@acm.org</a>&gt;
wrote a package of GNU emacs functions specifically to handle Ghostscript
HTML documentation, including functions to build a table of contents from
headers in an HTML document, and to build and maintain tables and
other structures built along the guidelines in this document.

<hr>

<h2><a name="Miscellany"></a>Miscellany</h2>

<p>
Use <b><tt>&lt;&gt;</tt></b> to bracket links to visible email addresses
(<b><tt>mailto</tt></b>) in running text.  This makes it easy for a user to
cut and paste the entire name and address into another document or mailer,
for instance

<blockquote>
Free Software Foundation &lt;<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>&gt;
</blockquote>

<p>
For exponentiation use "<b><tt>^</tt></b>" (not "**" or "exp()") plus
writing the exponent as a superscript in <b><tt>&lt;small&gt;</tt></b>
size:

<blockquote>
Something<b><tt>^&lt;sup&gt;</tt></b><b><tt>&lt;small&gt;</tt></b>exponent<b><tt>&lt;/small&gt;&lt;/sup&gt;</tt></b>.
</blockquote>

<p>
to look like this:

<blockquote>
Something<b><tt>^</tt></b><sup><small>exponent</small></sup>
</blockquote>

<p>
This is intended for readability both in a browser and as plain text.

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1996, 2000 Aladdin Enterprises.  All rights
reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Another Ghostscript interpreter</title>
<!-- $Id: Humor.htm,v 1.5 2002/02/21 21:36:33 giles Exp $ -->
<!-- Originally: humor.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>Another Ghostscript interpreter</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>
This document contains a humorous message, verbatim except for
minor spelling corrections, received from a friend out in network-land.

<!-- [1.3 end hint] ======================================================== -->

<!-- [1.0 end visible header] ============================================== -->

<hr>

<!-- [2.0 begin contents] ================================================== -->

<p>
Regarding Ghostscript: I hate to say this to you but I've already
implemented a Ghostscript interpreter. I'm happy to see that someone else
has recognized the need dead people have for computers. I have included an
example of the output of my Ghostscript at the end of this letter.

<p>
The interpreter is written in a language called cant-C, developed by Mr.
Turing last year. The compiler is easily ported to any environment you
care to name. I would be more than happy to send you a copy, but you must
first contact my lawyer for this venture, Thomas Jefferson of Phila. Pa..
(As a side note, Mr. Jefferson is very excited by Ghostscript. Look for
The Declaration of Independance V1.1 RSN).

<p>
The possibilities for Ghostscript go far beyond Deathtop publishing, I'm
sure you'll agree. I have contacted numerous authors who may be interested
in using Ghostscript (Shakespeare, Hemingway, etc) and all have been very
excited by what they've seen. (Shakespeare wants to write a modern Romeo
and Juliette, called Romeo and Julio, the story of 2 gay hispanic men kept
apart by their parents.)

<p>
Anyway, here is the Ghostscript example I promised. Feel free to show this
to your friends and colleagues, I'm sure they'll all be suitably impressed.

<pre>
------Cut Here--------------------------------------
------Cut Here--------------------------------------
</pre>

<!-- [2.0 end contents]
==================================================== -->

<!-- [3.0 begin visible trailer]
=========================================== -->
<hr>

<p>
<small>Copyright &copy; 2001 artofcode LLC.  All rights reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 7.00, 8 April 2001
</small>

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ghostscript</title>
<!-- Ghostscript auto-referral to the introductory document -->
<!-- $Id: index.html,v 1.5 2002/02/21 21:36:33 giles Exp $ -->
<meta http-equiv="REFRESH" content="0; url=Readme.htm">
</head>
<body>
<p>
Please see <a href="Readme.htm">Readme.htm</a> for an index of the
Ghostscript documentation.
</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>How to install Ghostscript</title>
<!-- $Id: Install.htm,v 1.44 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: install.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>How to install Ghostscript</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Overview">Overview of how to install Ghostscript</a>
<li><a href="#Install_Unix">Installing Ghostscript on Unix</a>
<ul>
<li><a href="#Shared_object">Ghostscript as a shared object</a>
<li><a href="#Install_Linux">Additional notes on Linux</a>
</ul>
<li><a href="#Install_Windows">Installing Ghostscript on MS Windows</a>
<li><a href="#Install_VMS">Installing Ghostscript on OpenVMS</a>
<li><a href="#Install_DOS">Installing Ghostscript on DOS</a>
<li><a href="#Install_OS2">Installing Ghostscript on OS/2 2.x</a>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a> and "<a href="Make.htm">How to build Ghostscript from source
code</a>".

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Overview"></a>Overview of how to install Ghostscript</h2>

<p>
You must have three things to run Ghostscript:
<ol>
<li>The Ghostscript executable file; on some operating
systems, more than one file is required.  These are entirely
platform-specific.  See below for details.

<li>Initialization files that Ghostscript reads in when it
starts up; these are the same on all platforms.
<ul>
<li><b><tt>gs_</tt></b>*<b><tt>.ps</tt></b> unless Ghostscript was compiled
using the "compiled initialization files" option.  See the documentation of
<a href="Psfiles.htm">PostScript files distributed with Ghostscript</a>.

<li><b><tt>pdf_</tt></b>*<b><tt>.ps</tt></b> if Ghostscript was compiled
with the ability to interpret Adobe Portable Document Format (PDF) files,
that is, <b><tt>pdf.dev</tt></b> was included in
<b><tt>FEATURE_DEVS</tt></b> when Ghostscript was built.

<li><b><tt>Fontmap</tt></b> and <b><tt>Fontmap.GS</tt></b> (or the
appropriate <b><tt>Fontmap.</tt></b><em>xxx</em> for your platform), unless
you plan always to invoke Ghostscript with the <a
href="Use.htm#FONTMAP_switch"><b><tt>-dNOFONTMAP</tt></b> switch</a>.
</ul>

<li>Fonts, for rendering text.  These are platform-independent,
but if you already have fonts of the right kind on your platform,
you may be able to use those.  See below for details.  Also see the
<a href="Fonts.htm">documentation on fonts</a>.
</ol>

<p>
The <a href="Use.htm">usage documentation</a> describes the search
algorithms used to find initialization files and font files.  The
per-platform descriptions that follow tell you where to install these
files.

<hr>

<h2><a name="Install_Unix"></a>Installing Ghostscript on Unix</h2>

<p>
Ghostscript uses the common configure, build and install method common 
to many modern software packages. In general the following with suffice
to build ghostscript:
<blockquote><tt><b>
	./configure<br>
	make
</b></tt></blockquote>
and then it may be installed in the default location with:
<blockquote><b>
	<tt>make install</tt>
</b></blockquote>	
This last command may need to be performed with super user privileges.

<p>
You can set the installation directory by adding <tt>--prefix=<em>path</em></tt>
to the configure invocation in the first step. The default prefix is <tt>/usr/local</tt>,
which is to say the <tt>gs</tt> executable is installed as <tt>/usr/local/bin/gs</tt>.

</p>A list of similar configuration options is available via <tt>./configure --help</tt>

<p>
For more detailed information on building Ghostscript see
<a href="Make.htm#Unix_build">how to build Ghostscript on Unix</a> in
the documentation on building Ghostscript, especially regarding information
on using the older <a href="Make.htm#UNIX_makefile">hand edited makefile</a>
approach. Whatever configuration method you use, execute "<b><tt>make
install</tt></b>" to install the executable and all the required and
ancillary files after the build is complete.

<h3><a name="Use_Acrobat_fonts_Unix"></a>Fonts</h3>

<p>
The makefile installs all the files except fonts under the directory
defined in the makefile as <b><tt>prefix</tt></b>. Fonts need to be
installed separately. The fonts should be installed in
<tt><em>{prefix}</em>/share/ghostscript/fonts</tt>.
(That is, <tt>/usr/local/share/ghostscript/fonts/</tt> if you used the default
configuration above.)

<p>
If you have Adobe Acrobat installed, you can use the Acrobat fonts 
in place of the ones distributed with with Ghostscript by adding the 
Acrobat fonts directory to
<b><tt>GS_FONTPATH</tt></b> and removing these fonts from
<b><tt>Fontmap.GS</tt></b>:

<blockquote>
Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, Helvetica,
Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, Symbol, Times-Bold,
Times-BoldItalic, Times-Italic, Times-Roman, ZapfDingbats
</blockquote>

<p>
Similarly, you can have ghostscript use other fonts on your system by adding
entries to the fontmap or adding the directories to the GS_FONTMAP environment
variable. See the <a href="Use.htm#Font_lookup">usage documentation</a> for more
information. 
For example, many linux distributions place fonts under <tt>/usr/share/fonts</tt>.

<h3><a name="Shared_object"></a>Ghostscript as a shared object</h3>
If you've built Ghostscript as a shared object, instead of '<tt>make install</tt>', 
you must use '<tt>make soinstall</tt>'.  
See <a href="Make.htm#Shared_object">how to build Ghostscript
as a shared object</a> for more details.

<h3><a name="Install_Linux"></a>Additional notes on Linux</h3>

<p>
For Linux, you may be able to install or upgrade Ghostscript from
precompiled <a href="http://www.rpm.org">RPM</a> files using:

<blockquote><b><tt>
rpm -U ghostscript-N.NN-1.i386.rpm<br>
rpm -U ghostscript-fonts-N.NN-1.noarch.rpm
</tt></b></blockquote>

<p>
However, please note that we do not create RPMs for Ghostscript, and we take
no responsibility for RPMs created by others.

<hr>

<h2><a name="Install_Windows"></a>Installing Ghostscript on MS Windows</h2>

<p>
We usually distribute Ghostscript releases for Windows as self-extracting
archive files, since this is the most convenient form for users.  These
files can also be unpacked as if they were plain zip files.

<p>
The self-extracting archive is normally named
<b><tt>gs###w32.exe</tt></b>,
where ### is the release number (e.g., 650 for Ghostscript 6.50, 
700 for Ghostscript 7.00).

<h3><a name="Windows4"></a>Windows 95/98 and NT 4</h3>

<p>
To install a self-extracting Ghostscript archive on Windows 95/98 or
Windows NT4/2000, you need just this self-extracting archive file.  
Run this file to install Ghostscript.

<p>
Alternatively, if you have the zip file, unzip it to a temporary
directory then run the included <b><tt>setupgs.exe</tt></b>.
After the setup program has finished, remove the temporary files.

<p>
After installing Ghostscript, it is strongly recommended that you 
install the <a href="New-user.htm#GSview">GSview previewer</a>, 
which provides an easier to use graphical interface for Ghostscript.
Information on GSview is available from:

<blockquote>
<a
href="http://www.cs.wisc.edu/~ghost/gsview/" 
class="offsite">http://www.cs.wisc.edu/~ghost/gsview/</a>
</blockquote>

<h3><a name="General_Windows"></a>General Windows configuration</h3>

<p>
The archive includes files in these subdirectories:

<blockquote><b><tt>
gs<em>#.##</em>\bin
<br>gs<em>#.##</em>\lib
<br>gs<em>#.##</em>\examples
<br>gs<em>#.##</em>\doc
<br>fonts
</tt></b></blockquote>

<p>
The actual executable files, in the <b><tt>gs<em>#.##</em>\bin</tt></b>
subdirectory, are:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=top>	<td><b><tt>GSWIN32.EXE</tt></b>
	<td>&nbsp;
	<td>32-bit Ghostscript using windows
<tr valign=top>	<td><b><tt>GSWIN32C.EXE</tt></b>
	<td>&nbsp;
	<td>32-bit Ghostscript using only the command line
<tr valign=top>	<td><b><tt>GSDLL32.DLL</tt></b>
	<td>&nbsp;
	<td>32-bit dynamic link library containing most of Ghostscript's
functionality
</table></blockquote>

<p>
See "<a href="#Install_DOS">Installing Ghostscript on DOS</a>" below for
information about using Adobe Type Manager, Adobe Type Basics, or Adobe
Acrobat fonts.  If your system uses TrueType fonts, you can get them
converted to a Ghostscript-compatible format at the time you select your
"printer" by doing the following:

<blockquote><ol>
<li>Open control panel and double-click on the "Printers" icon.
<li>Select your PostScript printer.
<li>Choose Setup.
<li>Choose Options.
<li>Choose Advanced.
<li>At the top of the dialog box you will see TrueType Fonts Send to
Printer As: Choose <em>(drop-down menu)</em> Adobe Type 1.
<li>Uncheck Use Printer Fonts for All TrueType Fonts and Use
Substitution
Table.
<li>OK.
<li>OK etc.
</ol></blockquote>

<p>
That's it!  Your TrueType fonts will automatically be downloaded in your
PostScript file for Ghostscript to use.

<p>
For printer devices, the default output is:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=top>	<td>The default printer
	<td>&nbsp;&nbsp;&nbsp;
	<td>Win95 or WinNT
<tr valign=top>	<td>Prompt for a printer port
	<td>&nbsp;
	<td>Win32s (Windows 3.1)
</table></blockquote>

<p>
This can be modified as follows.

<blockquote>
<dl>
<dt><b><tt>-sOutputFile="LPT1:"</tt></b>
<dd>Output to the named port.

<dt><b><tt>-sOutputFile="%printer%printer name"</tt></b> (Windows 95, 98,
NT or 2000)
<dd>Output to the named printer.  If your printer is named "HP DeskJet 500"
then you would use <tt>-sOutputFile="%printer%HP DeskJet 500"</tt>.

<dt><b><tt>-sOutputFile="\\spool\printer name"</tt></b> (Windows 3.1/Win32s)
<dd>Output to the named printer.  Note that this is NOT a UNC name.

</dl>
</blockquote>

<p>
If Ghostscript fails to find an environment variable, it looks for a
registry value of the same name under the key

<blockquote><b><tt>
HKEY_CURRENT_USER\Software\AFPL Ghostscript\#.##
</tt></b></blockquote>

<p>
or if that fails, under the key

<blockquote><b><tt>
HKEY_LOCAL_MACHINE\SOFTWARE\AFPL Ghostscript\#.##
</tt></b></blockquote>

<p>
where #.## is the Ghostscript version number.  This does not work under
Win32s (that is, Windows 3.1, which doesn't support named registry
values).

<p>
Ghostscript will attempt to load the Ghostscript dynamic link 
library <b><tt>GSDLL32.DLL</tt></b> in the following order:
<ul>
<li> In the same directory as the Ghostscript executable.
<li> If the environment variable <b><tt>GS_DLL</tt></b> is defined, 
Ghostscript tries to load the Ghostscript dynamic link library (DLL) 
with the name given.  
<li> Using the standard Windows library search method: the directory
from which the application loaded, the current directory, the Windows
system directory, the Windows directory and the directories listed in
the PATH environment variable.
</ul>

<p>
The Ghostscript setup program will create registry values
for the environment variables <b><tt>GS_LIB</tt></b> 
and <b><tt>GS_DLL</tt></b>.

<h3><a name="Uninstall_Windows"></a>Uninstalling Ghostscript on Windows</h3>

<p>
To uninstall Ghostscript, use the Control Panel, Add/Remove Programs and
remove "Ghostscript #.##" and "Ghostscript Fonts".  (The entries may be
called "Aladdin Ghostscript" or "AFPL Ghostscript", rather than just
"Ghostscript", depending on what version of Ghostscript was installed.)

<hr>

<h2><a name="Install_VMS"></a>Installing Ghostscript on OpenVMS</h2>

<p>
You need the file <b><tt>GS.EXE</tt></b> to run Ghostscript on OpenVMS, and
installing Ghostscript on an OpenVMS system requires building it first:
please read <a href="Make.htm#VMS_build">how to build Ghostscript on VMS</a>
in the documentation on building Ghostscript.

<p>
The following installation steps assume that the Ghostscript directory is
<b><tt>DISK1:[DIR.GHOSTSCRIPT]</tt></b>.  Yours will almost certainly be in
a different location so adjust the following commands accordingly.

<ul>

<li>Download the fonts and unpack them into
<b><tt>DISK1:[DIR.GHOSTSCRIPT.LIB]</tt></b>.

<li>Enable access to the program and support files for all users with:

<blockquote><pre>
$ set file/prot=w:re DISK1:[DIR]GHOSTSCRIPT.dir
$ set file/prot=w:re DISK1:[DIR.GHOSTSCRIPT...]*.*
</pre></blockquote>

<li>Optionally, add the Ghostscript help instructions to your system wide
help file:

<blockquote><pre>
$ lib/help sys$help:HELPLIB.HLB DISK1:[DIR.GHOSTSCRIPT.DOC]GS-VMS.HLP
</pre></blockquote>

<li>Lastly, add the following lines to the appropriate system wide or user
specific login script.

<blockquote><pre>
$ define gs_exe DISK1:[DIR.GHOSTSCRIPT.BIN]
$ define gs_lib DISK1:[DIR.GHOSTSCRIPT.EXE]
$ gs :== $gs_exe:gs.exe
</pre></blockquote>

</ul>

<p>
If you have DECWindows/Motif installed, you may wish to replace the
<b><tt>FONTMAP.GS</tt></b> file with <b><tt>FONTMAP.VMS</tt></b>.  Read the
comment at the beginning of the latter file for more information.

<hr>

<h2><a name="Install_DOS"></a>Installing Ghostscript on DOS</h2>

<p>
You need the files <b><tt>GS386.EXE</tt></b> and <b><tt>DOS4GW.EXE</tt></b>
to run Ghostscript.  You should install all the files except the fonts in
<b><tt>C:\GS</tt></b>, and the fonts in <b><tt>C:\GS\FONTS</tt></b>.

<p><a name="Use_platform_fonts_DOS"></a> If you have Adobe Type Manager
(ATM) fonts installed on your system, and you wish to use them with
Ghostscript, you may wish to replace the <b><tt>FONTMAP</tt></b> file with
<b><tt>FONTMAP.ATM</tt></b>, and to add to the environment variable
<b><tt>GS_LIB</tt></b> the name of the directory where the fonts are located
(see below for more information about <b><tt>GS_LIB</tt></b>).  Before you
do this, please read carefully the license that accompanies the ATM fonts;
we take no responsibility for any possible violations of such licenses.
Similarly, if you have Adobe Type Basics, you may wish to replace
<b><tt>FONTMAP</tt></b> with <b><tt>FONTMAP.ATB</tt></b>.  Finally, if you
have neither ATM nor ATB but you have Adobe Acrobat installed, you can use
the Acrobat fonts in place of the ones provided with Ghostscript by adding
the Acrobat fonts directory to <b><tt>GS_FONTPATH</tt></b> and removing
these fonts from <b><tt>FONTMAP</tt></b>:

<blockquote>
Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, Helvetica,
Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, Symbol, Times-Bold,
Times-BoldItalic, Times-Italic, Times-Roman, ZapfDingbats
</blockquote>

<hr>

<h2><a name="Install_OS2"></a>Installing Ghostscript on OS/2 2.x</h2>

<p>
The Ghostscript OS/2 implementation is designed for OS/2 2.1 or later.  A
few people have used it successfully under OS/2 2.0, but it has had very
little testing.  You need these files to run Ghostscript on OS/2:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=top>	<td><b><tt>GSOS2.EXE</tt></b>
	<td>&nbsp;&nbsp;&nbsp;
	<td>A text application that will run windowed or full screen
<tr valign=top>	<td><b><tt>GSDLL2.DLL</tt></b>
	<td>&nbsp;
	<td>A dynamic link library that must be in the same directory as
	    <b><tt>GSOS2.EXE</tt></b> or on the <b><tt>LIBPATH</tt></b>.
<tr valign=top>	<td><b><tt>GSPMDRV.EXE</tt></b>
	<td>&nbsp;
	<td>An "external driver" used by the "<b><tt>os2pm</tt></b>"
	    device, which is normally the default device and which displays
	    output in a Presentation Manager window;
	    <b><tt>GSPMDRV.EXE</tt></b> must be located in the same
	    directory as <b><tt>GSOS2.EXE</tt></b> or on the
	    <b><tt>PATH</tt></b>
</table></blockquote>

<p>
<b><tt>GSOS2.EXE</tt></b>, <b><tt>GSDLL2.DLL</tt></b> and
<b><tt>GSPMDRV.EXE</tt></b> are compiled using EMX/GCC 0.9d.  You must have
the EMX DLLs on your <b><tt>LIBPATH</tt></b>; they are available in a
package <b><tt>emxrt.zip</tt></b> from many places on the Internet, so you
can find the package by using a search engine or an ftp lookup service such
as the one at

<blockquote>
<a href="http://ftpsearch.lycos.com/"
class="offset">http://ftpsearch.lycos.com/</a>
</blockquote>

<p>
The system menu of the Ghostscript Image window includes a "Copy" command
to copy the currently displayed bitmap to the Clipboard.

<p>
OS/2 comes with some Adobe Type Manager fonts. If you wish to use these with
Ghostscript, you should replace the <b><tt>FONTMAP</tt></b> file with
<b><tt>FONTMAP.OS2</tt></b>, and add to the environment variable
<b><tt>GS_LIB</tt></b> (see below for more information about
<b><tt>GS_LIB</tt></b>) the name of the directory where the fonts are
located, usually <b><tt>C:\PSFONTS</tt></b>.  Before you do this, please
read carefully the license that accompanies the ATM fonts; we take no
responsibility for any possible violations of such licenses.

<p>
Since <b><tt>GSOS2.EXE</tt></b> is not a PM application, it cannot
determine the depth of the PM display.  You must provide this information
using the <b><tt>-dBitsPerPixel</tt></b> option.  Valid values are 1, 4, 8
(the default), and 24.

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Use
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>For
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>-dBitsPerPixel=1</tt></b>
	<td>&nbsp;
	<td>VGA monochrome
<tr valign=top>	<td><b><tt>-dBitsPerPixel=4</tt></b>
	<td>&nbsp;
	<td>VGA standard
<tr valign=top>	<td><b><tt>-dBitsPerPixel=8</tt></b>
	<td>&nbsp;
	<td>SVGA 256 colors
</table></blockquote>

<p>
A command file <b><tt>gspm.cmd</tt></b> containing the following line may
be useful:

<blockquote><b><tt>
@c:\gs\gsos2.exe -Ic:/gs;c:/gs/fonts;c:/psfonts -sDEVICE=os2pm -dBitsPerPixel=8 -sPAPERSIZE=a4 %1 %2 %3 %4 %5 %6 %7 %8
</tt></b></blockquote>

<p>
While drawing, the <b><tt>os2pm</tt></b> driver updates the display every 5
seconds.  On slow computers this is undesirable, and a different interval
can be specified in milliseconds with the <b><tt>-dUpdateInterval</tt></b>
option, with a default of <b><tt>-dUpdateInterval=5000</tt></b>; to disable
update, use <b><tt>-dUpdateInterval=0</tt></b>.

<p>
Standard VGA is very slow because it uses double buffering to avoid bugs
and because of 1-plane to 4-plane conversion; it's better to use a
256-color display driver.  Many display drivers have bugs which cause 1
bit-per-pixel bitmaps to be displayed incorrectly.

<p>
<b><tt>GSOS2.EXE</tt></b> and <b><tt>GSPMDRV.EXE</tt></b> will stay in
memory for the number of minutes specified in the environment variable
<b><tt>GS_LOAD</tt></b>.

<p>
If you run <b><tt>GS386</tt></b> in the OS/2 2.0 or 2.1 DOS box, you must
select the "ENABLED" setting for the DPMI_DOS_API option of the DOS box.
<b><tt>GS386</tt></b> will not run with the "AUTO" setting.

<p>
For printer devices, output goes to the default queue.  To print to a
specified queue, use <b><tt>-sOutputFile=\\spool\NullLPT1</tt></b>, where
<b><tt>NullLPT1</tt></b> is the queue's physical name.

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1996, 2000 Aladdin Enterprises.  All rights
reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ghostscript and the PostScript language</title>
<!-- $Id: Language.htm,v 1.78 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: language.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>Ghostscript and the PostScript language</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Capabilities">Ghostscript's capabilities in relation to PostScript</a>
<li><a href="#Implementation_limits">Implementation limits</a>
<ul>
<li><a href="#Architectural_limits">Architectural limits</a>
<li><a href="#Typical_memory_limits">Typical memory limits in LanguageLevel 1</a>
<li><a href="#VM_consumption">Other differences in VM consumption</a>
</ul>
<li><a href="#Additional_operators">Additional operators in Ghostscript</a>
<ul>
<li><a href="#Graphics_and_text">Graphics and text operators</a>
<ul>
<li><a href="#Transparency">Transparency</a>
<ul>
<li><a href="#Transparency_graphics_state_operators">Graphics state operators</a>
<li><a href="#Transparency_rendering_stack_operators">Rendering stack operators</a>
<li><a href="#Transparency_ImageType">New ImageType</a>
</ul>
<li><a href="#Graphics_state">Other graphics state operators</a>
<li><a href="#Path">Path operators</a>
<li><a href="#Painting">Painting operators</a>
<li><a href="#Character">Character operators</a>
</ul>
<li><a href="#Other">Other operators</a>
<ul>
<li><a href="#Mathematical">Mathematical operators</a>
<li><a href="#Dictionary">Dictionary operators</a>
<li><a href="#String">String and name operators</a>
<li><a href="#Relational">Relational operators</a>
<li><a href="#File">File operators</a>
<li><a href="#Virtual_memory">Virtual memory operators</a>
<li><a href="#Miscellaneous">Miscellaneous operators</a>
<li><a href="#Device">Device operators</a>
</ul>
</ul>
<li><a href="#Filters">Filters</a>
<ul>
<li><a href="#Standard_filters">Standard filters</a>
<li><a href="#Non_standard_filters">Non-standard filters</a>
<li><a href="#Unstable_filters">Unstable filters</a>
</ul>
<li><a href="#Device_parameters">Device parameters</a>
<li><a href="#User_parameters">User parameters</a>
<li><a href="#Miscellaneous_additions">Miscellaneous additions</a>
<ul>
<li><a href="#Extended_semantics_of_run">Extended semantics of 'run'</a>
<li><a href="#DecodingResources">Decoding resources</a>
<li><a href="#CIDDecodingResources">CIDDecoding resources</a>
<li><a href="#GlyphNames2Unicode">GlyphNames2Unicode</a>
<li><a href="#MultipleResourceDirectories">Multiple Resource directories</a>
</ul>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Capabilities"></a>Ghostscript's capabilities in relation to PostScript</h2>

<p>
The Ghostscript interpreter, except as noted below, is intended to execute
properly any source program written in the (LanguageLevel 3)
<b>PostScript</b> language as defined in the <cite>PostScript
Language Reference, Third Edition</cite> (ISBN 0-201-37922-8) published by
Addison-Wesley in mid-1999.  However, the interpreter is configurable in
ways that can restrict it to various subsets of this language.
Specifically, the base interpreter accepts the Level 1 subset of the
PostScript language, as defined in the first edition of the <cite>PostScript
Language Reference Manual</cite> (ISBN 0-201-10174-2) Addison-Wesley 1985,
plus the file system, version 25.0 language, and miscellaneous additions
listed in sections A.1.6, A.1.7, and A.1.8 of the Second Edition
respectively, including allowing a string operand for the
"<b><tt>status</tt></b>" operator.  The base interpreter may be configured
(see the <a href="Make.htm">documentation on building Ghostscript</a> for
how to configure it) by adding any combination of the following:

<ul>
<li>The ability to process PostScript Type 1 fonts.  This facility is
normally included in the interpreter.

<li>The CMYK color extensions listed in section A.1.4 of the Second Edition
(including <b><tt>colorimage</tt></b>).  These facilities are available
only if the <b><tt>color</tt></b>, <b><tt>dps</tt></b>, or
<b><tt>level2</tt></b> feature was selected when Ghostscript was built.

<li>The Display PostScript extensions listed in section A.1.3 of the Second
Edition, but excluding the operators listed in section A.1.2.  These
facilities are available only if the <b><tt>dps</tt></b> feature or the
<b><tt>level2</tt></b> feature was selected when Ghostscript was built.

<li>The composite font extensions listed in section A.1.5 of the Second
Edition, and the ability to handle Type 0 fonts.  These facilities are
available only if the <b><tt>compfont</tt></b> feature or the
<b><tt>level2</tt></b> feature was selected when Ghostscript was built.

<li>The ability to load TrueType fonts and to handle PostScript Type 42
(encapsulated TrueType) fonts.  These facilities are available only if the
<b><tt>ttfont</tt></b> feature was selected when Ghostscript was built.

<li>The PostScript Level 2 "filter" facilities except the
<b><tt>DCTEncode</tt></b> and <b><tt>DCTDecode</tt></b> filters.  These
facilities are available only if the <b><tt>filter</tt></b>,
<b><tt>dps</tt></b>, or <b><tt>level2</tt></b> feature was selected when
Ghostscript was built.

<li>The PostScript Level 2 <b><tt>DCTEncode</tt></b> and
<b><tt>DCTDecode</tt></b> filters.  These facilities are available only if
the <b><tt>dct</tt></b> or <b><tt>level2</tt></b> feature was selected when
Ghostscript was built.

<li>All the other PostScript Level 2 operators and facilities listed in
section A.1.1 of the Second Edition and not listed in any of the other
A.1.n sections.  These facilities are available only if the
<b><tt>level2</tt></b> feature was selected when Ghostscript was built.

<li>All PostScript LanguageLevel 3 operators and facilities listed in the
Third Edition, except as noted below.  These facilities are available only
if the <b><tt>psl3</tt></b> feature was selected when Ghostscript was built.

<li>The ability to recognize DOS EPSF files and process only the PostScript
part, ignoring bitmap previews or other information.  This facility is
available only if the <b><tt>epsf</tt></b> feature was selected when
Ghostscript was built.
</ul>

<p>
Ghostscript currently does not implement the following PostScript
LanguageLevel 3 facilities:

<ul>
<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color
spaces -- the alternate space is always used.

<li>Settable <b><tt>ProcessColorModel</tt></b> for page devices, except for
a very few special devices.

<li><b><tt>IODevice</tt></b>s other than <b><tt>%stdin</tt></b>,
<b><tt>%stdout</tt></b>, <b><tt>%stderr</tt></b>, <b><tt>%lineedit</tt></b>,
<b><tt>%statementedit</tt></b>, <b><tt>%os%</tt></b>, and (if configured)
<b><tt>%pipe%</tt></b> and <b><tt>%disk0%</tt></b> through <b><tt>%disk0%</tt></b>.
</ul>

<p>
Ghostscript can also interpret files in the Portable Document Format (PDF)
1.3 format defined in the <a
href="http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf"><em>Portable
Document Format Reference Manual</em> Version 1.3</a> of March 11, 1999,
distributed by <a href="http://www.adobe.com/">Adobe Systems
Incorporated</a>, except as noted below.  This facility is available only if
the <b><tt>pdf</tt></b> feature was selected when Ghostscript was built.

<p>
Ghostscript currently does not implement the following PDF 1.3 facilities:

<ul>
<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color
spaces, as noted above for PostScript.

<li>Native <b><tt>ICCBased</tt></b> color spaces -- these too always use the
alternate space.
</ul>

<p>
Ghostscript also includes a number of
<a href="#Additional_operators">additional operators</a> defined below that
are not in the PostScript language defined by Adobe.

<hr>

<h2><a name="Implementation_limits"></a>Implementation limits</h2>

<p>
The implementation limits show here correspond to those in Tables B.1 and
B.2 of the Second and Third Editions, which describe the quantities fully.
Where Ghostscript's limits are different from those of Adobe's
implementations (as shown in the Third Edition), Adobe's limits are also
shown.

<h3><a name="Architectural_limits"></a>Architectural limits</h3>

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Architectural limits (corresponds to Adobe table B.1)</font><hr>
<tr valign=bottom>
	<th align=left>Quantity
	<td>&nbsp;&nbsp;
	<th align=left>Limit
	<td>&nbsp;&nbsp;
	<th align=left>Type
	<td>&nbsp;&nbsp;
	<th align=left>Adobe
<tr>	<td colspan=7><hr>
<tr valign=top>	<td>integer
	<td>&nbsp;
	<td>32-bit
	<td>&nbsp;
	<td>twos complement integer
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>real
	<td>&nbsp;
	<td>single-precision
	<td>&nbsp;
	<td>IEEE float
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>array
	<td>&nbsp;
	<td>65535
	<td>&nbsp;
	<td>elements
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>dictionary
	<td>&nbsp;
	<td>65534
	<td>&nbsp;
	<td>elements
	<td>&nbsp;
	<td>65535
<tr valign=top>	<td>string
	<td>&nbsp;
	<td>65535
	<td>&nbsp;
	<td>characters
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>name
	<td>&nbsp;
	<td>16383
	<td>&nbsp;
	<td>characters
	<td>&nbsp;
	<td>127
<tr valign=top>	<td>filename
	<td>&nbsp;
	<td>128*
	<td>&nbsp;
	<td>characters
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td><b><tt>save</tt></b> level
	<td>&nbsp;
	<td>none
	<td>&nbsp;
	<td>(capacity of memory)
	<td>&nbsp;
	<td>15
<tr valign=top>	<td><b><tt>gsave</tt></b> level
	<td>&nbsp;
	<td>none
	<td>&nbsp;
	<td>(capacity of memory)
	<td>&nbsp;
	<td>13
</table></blockquote>

<p>
* The limit on the length of a file name is 128 characters if the name
starts with a %...% IODevice designation, or 124 characters if it does not.

<h3><a name="Typical_memory_limits"></a>Typical memory limits in LanguageLevel 1</h3>

<blockquote><table cellpadding=0 cellspacing=0>

<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Memory limits (corresponds to Adobe table B.2)</font><hr>
<tr valign=bottom>
	<th align=left>Quantity
	<td>&nbsp;&nbsp;
	<th align=left>Limit
	<td>&nbsp;&nbsp;
	<th align=left>Type
	<td>&nbsp;&nbsp;
	<th align=left>Adobe
<tr>	<td colspan=7><hr>
<tr valign=top>	<td><b><tt>userdict</tt></b>
	<td>&nbsp;
	<td>200
	<td>&nbsp;
	<td>&nbsp;
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td><b><tt>FontDirectory</tt></b>
	<td>&nbsp;
	<td>100
	<td>&nbsp;
	<td>&nbsp;
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>operand stack
	<td>&nbsp;
	<td>800
	<td>&nbsp;
	<td>&nbsp;
	<td>&nbsp;
	<td>500
<tr valign=top>	<td>dictionary stack
	<td>&nbsp;
	<td>20
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>execution stack
	<td>&nbsp;
	<td>250
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>interpreter level
	<td>&nbsp;
	<td>none
	<td>&nbsp;
	<td>(capacity of memory)
	<td>&nbsp;
	<td>10
<tr valign=top>	<td>path
	<td>&nbsp;
	<td>none
	<td>&nbsp;
	<td>(capacity of memory)
	<td>&nbsp;
	<td>1500
<tr valign=top>	<td>dash
	<td>&nbsp;
	<td>11
	<td>&nbsp;
	<td>&nbsp;
<tr valign=top>	<td>VM
	<td>&nbsp;
	<td>none
	<td>&nbsp;
	<td>(capacity of memory)
	<td>&nbsp;
	<td>240000
<tr valign=top>	<td>file
	<td>&nbsp;
	<td>none
	<td>&nbsp;
	<td>(determined by operating system)
	<td>&nbsp;
	<td>6
<tr valign=top>	<td>image
	<td>&nbsp;
	<td>65535
	<td>&nbsp;
	<td>values (samples × components)<br>for1-, 2-, 4-, or 8-bit samples
	<td>&nbsp;
	<td>3300
<tr valign=top>	<td>&nbsp;
	<td>&nbsp;
	<td>32767
	<td>&nbsp;
	<td>values for 12-bit samples
	<td>&nbsp;
	<td>3300
</table></blockquote>

<h3><a name="VM_consumption"></a>Other differences in VM consumption</h3>

<p>
Packed array elements occupy either 2 bytes or 8 bytes.  The average
element size is probably about 5 bytes.  Names occupy 12 bytes plus the
space for the string.

<hr>

<h2><a name="Additional_operators"></a>Additional operators in Ghostscript</h2>

<h3><a name="Graphics_and_text"></a>Graphics and text operators</h3>

<h4><a name="Transparency"></a>Transparency</h4>

<p>
Ghostscript provides a set of operators for implementing the transparency
and compositing facilities of PDF 1.4.  These are defined only if the
<b><tt>transpar</tt></b> option was selected when Ghostscript was built.  We
do not attempt to explain the underlying graphics model here: for details,
see <a
href="http://partners.adobe.com/asn/developer/technotes.html#acrobat-pdf" 
class="offsite">Adobe
Technical Note</a> #5407, "<a
href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/PDF_Transparency.pdf" 
class="offsite">Transparency
in PDF</a>". Note, however, that
Ghostscript's model generalizes that of PDF 1.4 in that Ghostscript
maintains separate alpha and mask values for opacity and shape, rather than
a single value with a Boolean that says whether it represents opacity or
shape.  EVERYTHING IN THIS SECTION IS SUBJECT TO CHANGE.

<h5><a name="Transparency_graphics_state_operators"></a>Graphics state
operators</h5>

<dl>
<dt><b><tt>&lt;modename&gt; .setblendmode -</tt></b>
<dd>Sets the blending mode in the graphics state.  If the mode name is not
recognized, causes a <b><tt>rangecheck</tt></b> error.  The initial value of
the blending mode is <b><tt>/Compatible</tt></b>.
</dl>

<dl>
<dt><b><tt>- .currentblendmode &lt;modename&gt;</tt></b>
<dd>Returns the current blending mode.
</dl>

<dl>
<dt><b><tt>&lt;0..1&gt; .setopacityalpha -</tt></b>
<dd>Sets the opacity alpha value in the graphics state.
The initial opacity alpha value is 1.
</dl>

<dl>
<dt><b><tt>- .currentopacityalpha &lt;0..1&gt;</tt></b>
<dd>Returns the current opacity alpha value.
</dl>

<dl>
<dt><b><tt>&lt;0..1&gt; .setshapealpha -</tt></b>
<dd>Sets the shape alpha value in the graphics state.
The initial shape alpha value is 1.
</dl>

<dl>
<dt><b><tt>- .currentshapealpha &lt;0..1&gt;</tt></b>
<dd>Returns the current shape alpha value.
</dl>

<dl>
<dt><b><tt>&lt;bool&gt; .settextknockout -</tt></b>
<dd>Sets the text knockout flag in the graphics state.
The initial value of the text knockout flag is <b><tt>true</tt></b>.
</dl>

<dl>
<dt><b><tt>- .currenttextknockout &lt;bool&gt;</tt></b>
<dd>Returns the current text knockout flag.
</dl>

<h5><a name="Transparency_rendering_stack_operators"></a>Rendering stack
operators</h5>

<p>
The interpreter state is extended to include a (per-context) rendering stack
for handling transparency groups and masks (generically, "layers").  Groups
accumulate a full value for each pixel (paint plus transparency); masks
accumulate only a coverage value.  Layers must be properly nested, i.e., the
'end' or 'discard' operator must match the corresponding 'begin' operator.

<p>
Beginning and ending layers must nest properly with respect to
<b><tt>save</tt></b> and <b><tt>restore</tt></b>: <b><tt>save</tt></b> and
<b><tt>restore</tt></b> do not save and restore the layer stack.  Currently,
layers are not required to nest with respect to <b><tt>gsave</tt></b> and
<b><tt>grestore</tt></b>, except that the device that is current in the
graphics state when ending a layer must be the same as the device that was
current when beginning the layer.  THIS AREA IS SUBJECT TO CHANGE.

<dl>
<dt><b><tt>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
.begintransparencygroup -</tt></b>
<dd>Begins a new transparency group.  The <b><tt>ll/ur</tt></b> coordinates
are the bounding box of the group in the current user coordinate system.
<b><tt>paramdict</tt></b> has the following keys:
<dl>
<dt><b><tt>/Isolated</tt></b>
<dd>(optional) Boolean; default value = <b><tt>false</tt></b>.
<dt><b><tt>/Knockout</tt></b>
<dd>(optional) Boolean; default value = <b><tt>false</tt></b>.
</dl>
</dl>

<dl>
<dt><b><tt>- .discardtransparencygroup -</tt></b>
<dd>Ends and discards the current transparency group.
</dl>

<dl>
<dt><b><tt>- .endtransparencygroup -</tt></b>
<dd>Ends the current transparency group, compositing the group being ended
onto the group that now becomes current.
</dl>

<dl>
<dt><b><tt>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
.begintransparencymask -</tt></b>
<dd>Begins a new transparency mask.  The <b><tt>ll/ur</tt></b> coordinates
are the bounding box of the mask in the current user coordinate system.
<b><tt>paramdict</tt></b> has the following keys:
<dl>
<dt><b><tt>/Subtype</tt></b>
<dd>(required) Name, either <b><tt>/Alpha</tt></b> or
<b><tt>/Luminosity</tt></b>.
<dt><b><tt>/Background</tt></b>
<dd>(optional) Array of number.
<dt><b><tt>/TransferFunction</tt></b>
<dd>(optional) Function object (produced by applying
<b><tt>.buildfunction</tt></b> to a Function dictionary).
</dl>
</dl>

<dl>
<dt><b><tt>- .discardtransparencymask -</tt></b>
<dd>Ends and discards the current transparency mask.
</dl>

<dl>
<dt><b><tt>&lt;masknum&gt; .endtransparencymask -</tt></b>
<dd>Ends the current transparency mask, installing it as the current opacity
(<b><tt>masknum</tt></b> = 0) or shape (<b><tt>masknum</tt></b> = 1) mask in
the graphics state.
</dl>

<dl>
<dt><b><tt>&lt;masknum&gt; .inittransparencymask -</tt></b>
<dd>Resets the current opacity (<b><tt>masknum</tt></b> = 0) or shape
(<b><tt>masknum</tt></b> = 1) mask to an infinite mask with alpha = 1
everywhere.
</dl>

<h5><a name="Transparency_ImageType"></a>New ImageType</h5>

<p>
The transparency extension defines a new ImageType 103, similar to ImageType
3 with the following differences:

<ul>

<li>The required <b><tt>MaskDict</tt></b> is replaced by two optional
dictionaries, <b><tt>OpacityMaskDict</tt></b> and
<b><tt>ShapeMaskDict</tt></b>.  If present, these dictionaries must have a
<b><tt>BitsPerComponent</tt></b> entry, whose value may be greater than 1.
Note that in contrast to ImageType 3, where any non-zero chunky mask value
is equivalent to 1, ImageType 103 simply takes the low-order bits of chunky
mask values.

<li>A <b><tt>Matte</tt></b> entry may be present in one or both mask
dictionaries, indicating premultiplication of the data values.  If both
<b><tt>MaskDict</tt></b>s have a <b><tt>Matte</tt></b> entry and the values
of the two <b><tt>Matte</tt></b> entries are different, a
<b><tt>rangecheck</tt></b> error occurs.

<li><b><tt>InterleaveType</tt></b> appears in the <b><tt>MaskDict</tt></b>s,
not the <b><tt>DataDict</tt></b>, because each mask has its own
<b><tt>InterleaveType</tt></b>.  <b><tt>InterleaveType</tt></b> 2
(interlaced scan lines) is not supported.

</ul>

<h4><a name="Graphics_state"></a>Other graphics state operators</h4>

<dl>
<dt><b><tt>&lt;bool&gt; .setaccuratecurves -</tt></b>
<dd>Sets a graphics state flag that determines whether curves and arcs,
when flattened, always start and end with a line that is a segment of the
tangent; this also causes butt and square caps to be properly perpendicular
to the tangent.  <b><tt>initgraphics</tt></b> sets this flag to false, to
match other PostScript implementations.
</dl>

<dl>
<dt><b><tt>- .currentaccuratecurves &lt;bool&gt;</tt></b>
<dd>Returns the current value of the accurate curves flag.
</dl>

<dl>
<dt><b><tt>&lt;int&gt; .setcurvejoin -</tt></b>
<dd>Sets a graphics state parameter that determines how to treat the joins
between the line segments produced when a curve is flattened.  The parameter
value may be either -1 or a value acceptable to <b><tt>setlinejoin</tt></b>.
If the parameter value is -1, the join used for flattened curve line
segments is given by the current line join parameter in the graphics state
(except that if the line join value is "none", a bevel join is used), which
matches the Adobe Red Book, but not the Adobe implementations; if the curve
join parameter value is a line join value, that type of join is used for
flattened curve line segments, regardless of the value of the graphics state
line join parameter.  The initial (and default) value of the curve join
parameter is 2, causing bevel joins to be used: this matches the Adobe
implementations.  <b><tt>initgraphics</tt></b> sets the parameter to its
default value.
</dl>

<dl>
<dt><b><tt>- .currentcurvejoin &lt;int&gt;</tt></b>
<dd>Returns the current value of the curve join parameter.
</dl>

<dl>
<dt><b><tt>&lt;bool&gt; .setdashadapt -</tt></b>
<dd>Sets a graphics state flag that determines whether dash patterns do
(true) or do not (false) automatically scale themselves so that each line
segment consists of an integral number of pattern repetitions.
<b><tt>initgraphics</tt></b> sets this flag to false.
</dl>

<dl>
<dt><b><tt>- .currentdashadapt &lt;bool&gt;</tt></b>
<dd>Returns the current value of the dash adaptation flag.
</dl>

<dl>
<dt><b><tt>&lt;matrix&gt; .setdefaultmatrix -</tt></b>
<dd>Sets the default matrix that is returned by
<b><tt>defaultmatrix</tt></b> and installed by <b><tt>initmatrix</tt></b>.
Ordinary programs should not use this operator.
</dl>

<dl>
<dt><b><tt>&lt;num&gt; &lt;bool&gt; .setdotlength -</tt></b>
<dd>Sets a graphics state parameter that determines the handling of
zero-length lines (dots).  If the dot length is zero, dots are painted as
circles if round line caps are in effect, otherwise they are not painted at
all.  If the dot length is non-zero, dots are treated exactly like lines of
the given length: the length is specified in user coordinates (like line
width) if <b><tt>bool</tt></b> is false, or in default user coordinates of
points (units of 1/72in; see the <a href="Devices.htm#Measurements">notes
on measurements</a> in the documentation on devices) if
<b><tt>bool</tt></b> is true.  Dots occurring as part of dash patterns will
be oriented correctly; isolated dots will be oriented as though they were
part of a vertical line.  <b><tt>initgraphics</tt></b> sets the dot length
to zero.
</dl>

<dl>
<dt><b><tt>- .currentdotlength &lt;num&gt; &lt;bool&gt;</tt></b>
<dd>Returns the current dot length and dot length mode.
</dl>

<dl>
<dt><b><tt>&lt;dx&gt; &lt;dy&gt; .setfilladjust2 -</tt></b>
<dd>Sets graphics state parameters that cause all filled and stroked
regions to be "fattened" by the given amount relative to an algorithm that
only paints pixels whose centers fall within the region to be painted.
<b><tt>dx</tt></b> and <b><tt>dy</tt></b> are numbers between 0 and 0.5,
measured in device space.  The only two values that are likely to be useful
are 0, which gives a pure center-of-pixel rule, and 0.5, which gives
Adobe's any-part-of-pixel rule.  (0.5 is treated slightly specially in
order to create half-open pixels per Adobe's specification.)
</dl>

<dl>
<dt><b><tt>- .currentfilladjust2 &lt;dx&gt; &lt;dy&gt;</tt></b>
<dd>Returns the current fill adjustment values.
</dl>

<dl>
<dt><b><tt>&lt;bool&gt; .setlimitclamp -</tt></b>
<dd>Sets a graphics state flag that determines whether attempts to set the
current point outside the internally representable range should clamp the
value to the largest representable value (true) or give a
<b><tt>limitcheck</tt></b> error (false).  <b><tt>initgraphics</tt></b> sets
this flag to false, to match other PostScript implementations.
</dl>

<dl>
<dt><b><tt>- .currentlimitclamp &lt;bool&gt;</tt></b>
<dd>Returns the current value of the limit clamp flag.
</dl>

<dl>
<dt><b><tt>&lt;int&gt; .setoverprintmode -</tt></b>
<dd>Sets the overprint mode in the graphics state.  Legal values are 0 or 1.
Per the PDF 1.3 specification, if the overprint mode is 1, then when the
current color space is <b><tt>DeviceCMYK</tt></b>, color components whose
value is 0 do not write into the target, rather than writing a 0 value.
THIS BEHAVIOR IS NOT IMPLEMENTED YET.  The initial value of the overprint
mode is 0.
</dl>

<dl>
<dt><b><tt>- .currentoverprintmode &lt;int&gt;</tt></b>
<dd>Returns the current overprint mode.
</dl>

<h4><a name="Path"></a>Path operators</h4>

<dl>
<dt><b><tt>- .dashpath -</tt></b>
<dd>If there is no current dash pattern, does nothing.  Otherwise, does the
equivalent of <b><tt>flattenpath</tt></b> and then chops up the path as
determined by the dash pattern.
</dl>

<dl>
<dt><b><tt>&lt;x&gt; &lt;y&gt; &lt;width&gt; &lt;height&gt; .rectappend -</tt></b>
<dt><b><tt>&lt;numarray&gt; .rectappend -</tt></b>
<dt><b><tt>&lt;numstring&gt; .rectappend -</tt></b>
<dd>Appends a rectangle or rectangles to the current path, in the same
manner as <b><tt>rectfill</tt></b>, <b><tt>rectclip</tt></b>, etc.  Defined
only if the <b><tt>dps</tt></b> or <b><tt>level2</tt></b> option was
selected when Ghostscript was built.
</dl>

<h4><a name="Painting"></a>Painting operators</h4>

<p>
Ghostscript supports an experimental extension of the PostScript imaging
model to include <b><tt>RasterOp</tt></b> and some related facilities.
This extension is available only if the <b><tt>rasterop</tt></b> option was
selected when building Ghostscript.

<p>
With the <b><tt>RasterOp</tt></b> extension, imaging operations compute a
function <b>D&nbsp;=&nbsp;f(D,S,T)</b> in RGB space, where <b>f</b> is an
arbitrary 3-input Boolean function, <b>D</b> is the destination (frame
buffer or print buffer), <b>S</b> is the source (described below), and
<b>T</b> is the texture (the current PostScript color, which may be a
pattern).  The source and texture depend on the PostScript imaging
operation:

<ul>
<li>For <b><tt>fill</tt></b> and <b><tt>stroke</tt></b>, the source is
solid black, covering the region to be painted; the texture is the current
PostScript color.

<li>For <b><tt>show</tt></b> and <b><tt>imagemask</tt></b>, the source is
solid black, covering the pixels to be painted; the texture is the current
PostScript color.

<li>For <b><tt>image</tt></b> and <b><tt>colorimage</tt></b>, the source is
the image data; the texture depends on an optional Boolean parameter,
<b><tt>CombineWithColor</tt></b>, in the image dictionary.  If
<b><tt>CombineWithColor</tt></b> is false (the default), the texture is
solid black.  If <b><tt>CombineWithColor</tt></b> is true, the texture is
the current color.  For the non-dictionary form of the image operator,
<b><tt>CombineWithColor</tt></b> is considered to be false.
</ul>

<p>
The <b><tt>rasterop</tt></b> option adds the following operators:

<dl>
<dt><b><tt>&lt;int8&gt; .setrasterop -</tt></b>
<dd>Sets the <b><tt>RasterOp</tt></b> function in the graphics state.  The
default function is 252, Source | Texture.
</dl>

<dl>
<dt><b><tt>- .currentrasterop &lt;int8&gt;</tt></b>
<dd>Returns the current <b><tt>RasterOp</tt></b> function.
</dl>

<dl>
<dt><b><tt>&lt;bool&gt; .setsourcetransparent -</tt></b>
<dd>Sets source transparency in the graphics state.  When source
transparency is true, white source pixels prevent storing into the
destination, regardless of what the <b><tt>RasterOp</tt></b> function
returns.  The default source transparency is false.
</dl>

<dl>
<dt><b><tt>- .currentsourcetransparent &lt;bool&gt; -</tt></b>
<dd>Returns the current source transparency.
</dl>

<dl>
<dt><b><tt>&lt;bool&gt; .settexturetransparent -</tt></b>
<dd>Sets texture transparency in the graphics state.  When texture
transparency is true, white texture pixels prevent storing into the
destination, regardless of what the <b><tt>RasterOp</tt></b> function
returns.  The default texture transparency is false.
</dl>

<dl>
<dt><b><tt>- .currenttexturetransparent &lt;bool&gt; -</tt></b>
<dd>Returns the current texture transparency.
</dl>

<p>
For more information on RasterOp and transparency, please consult chapter 5
of the "PCL 5 Color Technical Reference Manual",
<a href="http://www.hp.com/cposupport/printers/support_doc/bpl01354.html">Hewlett-Packard
Manual Part No. 5961-0635</a>.

<h4><a name="Character"></a>Character operators</h4>

<dl>
<dt><b><tt>&lt;string&gt; &lt;bool&gt; .charboxpath -</tt></b>
<dd>For each character <b>C</b> in the rendering of &lt;string&gt;, let the
bounding box of <b>C</b> <b><em>in device space</em></b> be the four
<b><em>user-space</em></b> points p1x/y, p2x/y, p3x/y, and p4x/y.  For each
character in order, <b><tt>.charboxpath</tt></b> appends the following to
the current path:

<ul><li>If <b><tt>&lt;bool&gt;</tt></b> is true, the equivalent of:

<blockquote>
p1x p1y <b><tt>moveto</tt></b><br>
p2x p2y <b><tt>lineto</tt></b><br>
p3x p3y <b><tt>lineto</tt></b><br>
p4x p4y <b><tt>lineto</tt></b><br>
<b><tt>closepath</tt></b>
</blockquote>
</ul>

<p>
This creates a path whose <b><tt>pathbbox</tt></b> is the
<b><tt>bbox</tt></b> of the string.

<ul><li>If <b><tt>&lt;bool&gt;</tt></b> is false, the equivalent of:

<blockquote>
p1x p1y <b><tt>moveto</tt></b><br>
p3x p3y <b><tt>lineto</tt></b>
</blockquote>
</ul>

<p>
If the CTM is well-behaved (consists only of reflection, scaling, and
rotation by multiples of 90 degrees), this too creates a (simpler) path
whose <b><tt>pathbbox</tt></b> is the <b><tt>bbox</tt></b> of the string.
</dl>

<dl>
<dt><b><tt>&lt;font&gt; &lt;charname|charcode&gt; &lt;charname&gt; &lt;charstring&gt; .type1execchar -</tt></b>
<dd>Does all the work for rendering a Type 1 outline.  This operator, like
<b><tt>setcharwidth</tt></b> and <b><tt>setcachedevice</tt></b>, is valid
only in the context of a show operator -- that is, it must only be called
from within a <b><tt>BuildChar</tt></b> or <b><tt>BuildGlyph</tt></b>
procedure.
</dl>

<dl>
<dt><b><tt>&lt;font&gt; &lt;charcode&gt; %Type1BuildChar -</tt></b>
<dd>This is not a new operator: rather, it is a name known specially to the
interpreter.  Whenever the interpreter needs to render a character (during
a ...<b><tt>show</tt></b>, <b><tt>stringwidth</tt></b>, or
<b><tt>charpath</tt></b>), it looks up the name <b><tt>BuildChar</tt></b>
in the font dictionary to find a procedure to run.  If it does not find
this name, and if the <b><tt>FontType</tt></b> is 1, the interpreter
instead uses the value (looked up on the dictionary stack in the usual way)
of the name <b><tt>%Type1BuildChar</tt></b>.

<p>
The standard definition of <b><tt>%Type1BuildChar</tt></b> is in the
initialization file <b><tt>gs_type1.ps</tt></b>.  Users should not need to
redefine <b><tt>%Type1BuildChar</tt></b>, except perhaps for tracing or
debugging.
</dl>

<dl>
<dt><b><tt>&lt;font&gt; &lt;charname&gt; %Type1BuildGlyph -</tt></b>
<dd>Provides the Type 1 implementation of <b><tt>BuildGlyph</tt></b>.
</dl>

<h3><a name="Other"></a>Other operators</h3>

<h4><a name="Mathematical"></a>Mathematical operators</h4>

<dl>
<dt><b><tt>&lt;number&gt; arccos &lt;number&gt;</tt></b>
<dd>Computes the arc cosine of a number between -1 and 1.
</dl>

<dl>
<dt><b><tt>&lt;number&gt; arcsin &lt;number&gt;</tt></b>
<dd>Computes the arc sine of a number between -1 and 1.
</dl>

<h4><a name="Dictionary"></a>Dictionary operators</h4>

<dl>
<dt><b><tt>mark &lt;key1&gt; &lt;value1&gt; &lt;key2&gt; &lt;value2&gt; ... .dicttomark &lt;dict&gt;</tt></b>
<dd>Creates and returns a dictionary with the given keys and values.  This
is the same as the PostScript Level 2 <b><tt>&gt;&gt;</tt></b> operator,
but is available even in Level 1 configurations.
</dl>

<dl>
<dt><b><tt>&lt;dict&gt; &lt;key&gt; &lt;value&gt; .forceput - </tt></b>
<dd>Equivalent to <b><tt>put</tt></b>, but works even if
<b><tt>dict</tt></b> is not writable, and (if <b><tt>dict</tt></b> is
<b><tt>systemdict</tt></b> or the current save level is 0) even if
<b><tt>dict</tt></b> is in global VM and <b><tt>key</tt></b> and/or
<b><tt>value</tt></b> is in local VM.  <strong>This operator should be used
only initialization code, and only in executeonly procedures: it must not be
accessible after initialization.</strong>
</dl>

<dl>
<dt><b><tt>&lt;dict&gt; &lt;key&gt; .forceundef - </tt></b>
<dd>Equivalent to <b><tt>undef</tt></b>, but works even if
<b><tt>dict</tt></b> is not writable.  <strong>This operator should be used
only initialization code, and only in executeonly procedures: it must not be
accessible after initialization.</strong>
</dl>


<dl>
<dt><b><tt>&lt;dict&gt; &lt;key&gt; .knownget &lt;value&gt; true</tt></b>
<dt><b><tt>&lt;dict&gt; &lt;key&gt; .knownget false</tt></b>
<dd>Combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the
obvious way.
</dl>

<dl>
<dt><b><tt>&lt;dict&gt; &lt;integer&gt; .setmaxlength -</tt></b>
<dd>Sets the capacity (<b><tt>maxlength</tt></b>) of a dictionary.
Causes a <b><tt>dictfull</tt></b> error if the dictionary has more
occupied entries than the requested capacity.
</dl>

<h4><a name="String"></a>String and name operators</h4>

<dl>
<dt><b><tt>&lt;integer&gt; .bytestring &lt;bytestring&gt;</tt></b>
<dd>Allocates and returns a bytestring, a special data type that can be
larger than the maximum size of a string (64K-1 bytes) and can be used in
place of a string with a very few operators.
</dl>

<dl>
<dt><b><tt>&lt;name&gt; .namestring &lt;string&gt;</tt></b>
<dd>Returns the (read-only) string for a name.
</dl>

<dl>
<dt><b><tt>&lt;string&gt; &lt;charstring&gt; .stringbreak &lt;index|null&gt;</tt></b>
<dd>Searches for a character in <b><tt>string</tt></b> that appears
somewhere in <b><tt>charstring</tt></b>.  If such a character is found,
returns the index of the first such character; if no such character is
found, returns <b><tt>null</tt></b>.
</dl>

<dl>
<dt><b><tt>&lt;obj&gt; &lt;pattern&gt; .stringmatch &lt;bool&gt;</tt></b>
<dd>Matches <b><tt>obj</tt></b> against a pattern in which '*' matches 0 or
more characters and '?' matches any single character.  If
<b><tt>obj</tt></b> is a string or a name, matches its characters against
the pattern; if <b><tt>obj</tt></b> is of any other type, the result is
<b><tt>true</tt></b> if the pattern is the single character "*" and
<b><tt>false</tt></b> otherwise.
</dl>

<dl>
<dt><b><tt>&lt;state&gt; &lt;fromString&gt; &lt;toString&gt; .type1encrypt &lt;newState&gt; &lt;toSubstring&gt;</tt></b>
<dd>Encrypts <b><tt>fromString</tt></b> according to the algorithm for
Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>.
<b><tt>toString</tt></b> must be at least as long as
<b><tt>fromString</tt></b>, or a rangecheck error occurs.
<b><tt>state</tt></b> is the initial state of the encryption algorithm (a
16-bit non-negative integer); <b><tt>newState</tt></b> is the new state of
the algorithm.
</dl>

<dl>
<dt><b><tt>&lt;state&gt; &lt;fromString&gt; &lt;toString&gt; .type1decrypt &lt;newState&gt; &lt;toSubstring&gt;</tt></b>
<dd>Decrypts <b><tt>fromString</tt></b> according to the algorithm for
Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>.
Other specifications are as for <b><tt>type1encrypt</tt></b>.
</dl>

<h4><a name="Relational"></a>Relational operators</h4>

<dl>
<dt><b><tt>&lt;number|string&gt; &lt;number|string&gt; max &lt;number|string&gt;</tt></b>
<dd>Returns the larger of two numbers or strings.
</dl>

<dl>
<dt><b><tt>&lt;number|string&gt; &lt;number|string&gt; min &lt;number|string&gt;</tt></b>
<dd>Returns the smaller of two numbers or strings.
</dl>

<h4><a name="File"></a>File operators</h4>

<dl>
<dt><b><tt>&lt;file&gt; .filename &lt;string&gt; true</tt></b>
<dt><b><tt>&lt;file&gt; .filename false</tt></b>
<dd>If the file was opened by the <b><tt>file</tt></b> or
<b><tt>.tempfile</tt></b> operator, returns the file name and
<b><tt>true</tt></b>; if the file is a filter, returns
<b><tt>false</tt></b>.
</dl>

<dl>
<dt><b><tt>&lt;file&gt; .fileposition &lt;integer&gt; true</tt></b>
<dd>Returns the position of <b><tt>file</tt></b>.  Unlike the standard
<b><tt>fileposition</tt></b> operator, which causes an error if the file is
not positionable, <b><tt>.fileposition</tt></b> works on all files,
including filters: for non-positionable files, it returns the total number
of bytes read or written since the file was opened.
</dl>

<dl>
<dt><b><tt>&lt;string&gt; findlibfile &lt;foundstring&gt; &lt;file&gt; true</tt></b>
<dt><b><tt>&lt;string&gt; findlibfile &lt;string&gt; false</tt></b>
<dd>Opens the file of the given name for reading, searching through
directories <a href="Use.htm#Finding_files">as described in the usage
documentation</a>.  If the search fails, <b><tt>findlibfile</tt></b> simply
pushes false on the stack and returns, rather than causing an error.
</dl>

<dl>
<dt><b><tt>&lt;file&gt; &lt;string&gt; .peekstring &lt;substring&gt; &lt;filled_bool&gt;</tt></b>
<dd>Reads bytes from a file like <b><tt>readstring</tt></b>, but also leaves
the bytes in the file buffer so they will be read again by a subsequent read
operation.  Currently gives a <b><tt>rangecheck</tt></b> error if
<b><tt>string</tt></b> is larger than the file's buffer.
</dl>

<a name=Tempfile></a>
<dl>
<dt><b><tt>&lt;prefix_string|null&gt; &lt;access_string&gt; .tempfile
&lt;string&gt; &lt;file&gt;</tt></b>
<dd>Creates and opens a temporary file
like the <b><tt>file</tt></b> operator, also returning the file name.  There
are three cases for the <b><tt>&lt;prefix_string|null&gt;</tt></b> operand:

<ul>
<p>
<li><b><tt>null</tt></b>: create the file in the same directory and with the
same name conventions as other temporary files created by the Ghostscript
implementation on this platform.  E.g., the temporary file might be named
<b><tt>/tmp/gs_a1234</tt></b>.
<p>
<li>A string that contains only alphanumeric characters, underline,
and dash: create the file in the standard temporary directory, but use
the
<b><tt>&lt;prefix_string&gt;</tt></b> as the first part of the file name.
E.g., if <b><tt>&lt;prefix_string&gt;</tt></b> is <b><tt>xx</tt></b>, the
temporary file might be named <b><tt>/tmp/xxa1234</tt></b>.
<p>
<li>A string that is the beginning of an absolute file name: use the
<b><tt>&lt;prefix_string&gt;</tt></b> as the first part of the file name.
E.g., if <b><tt>&lt;prefix_string&gt;</tt></b> is
<b><tt>/my/tmpdir/zz</tt></b>, the temporary file might be named
<b><tt>/my/tmpdir/zza1234</tt></b>.
<p>
When running in <b><tt>SAFER</tt></b> mode, the absolute path must
be one of the strings on the list given by the <b><tt>PermitFileWriting</tt></b>
userparameter. Temporary files created with <b><tt>.tempfile</tt></b> can
be deleted when in SAFER mode, and can be renamed to one of the paths
that is on <b>both</b> the PermitFileControl and PermitFileWriting
paths.
</ul>

</dl>

<dl>
<dt><b><tt>&lt;file&gt; &lt;integer&gt; .unread -</tt></b>
<dd>Pushes back the last-read character onto the front of the file.  If the
file is open only for writing, or if the integer argument is not the same
as the last character read from the file, causes an <b><tt>ioerror</tt></b>
error.  May also cause an <b><tt>ioerror</tt></b> if the last operation on
the file was not a reading operation.  This operator is now deprecated:
use <b><tt>.peekstring</tt></b> in new code.
</dl>
 
<p>
Ghostscript also supports the following <b><tt>IODevice</tt></b> in
addition to a subset of those defined in the Adobe documentation:
<ul>
<li>
<b><tt>%pipe%command</tt></b>, which opens a pipe on the given command.
This is supported only on operating systems that provide
<b><tt>popen</tt></b> (primarily Unix systems, and not all of those).
<p>
<li>
<b><tt>%disk#%</tt></b>, which emulates the %disk0
through %disk9 devices on some Adobe PostScript printers. This pseudo
device provides a flat filenaming system with a user definable location
for the files (/Root). These devices will only be present if the
diskn.dev feature is specified during the build.
<p>
This feature is intended to allow compatibility with font downloaders
that expect to store fonts on the %disk device of the printer.
<p>
Use of the %disk#% devices requires that the location of files be given
by the user setting the /Root device parameter. The syntax for setting
the /Root parameter is:<pre>
    mark /Root (directory_specification) (%disk#) .putdevparams
</pre>
For example, to store the files of the %disk0 device on the directory
/tmp/disk0, use:<pre>
    mark /Root (/tmp/disk0/) (%disk0) .putdevparams
</pre>
The files will be stored in the specified directory with arbitrary names.
A mapping file is used to store the association between the file
names given for the file operations on the %diskn# device and the file
that resides in the /Root directory.
</ul>

<h4><a name="Virtual_memory"></a>Virtual memory operators</h4>

<dl>
<dt><b><tt>&lt;save&gt; .forgetsave -</tt></b>
<dd>Cancels the effect of a save, making it as though the save never
happened.
</dl>

<h4><a name="Miscellaneous"></a>Miscellaneous operators</h4>

<dl>
<dt><b><tt>&lt;array&gt; bind &lt;array&gt;</tt></b>
<dd>Depending on the command line parameters <b><tt>bind</tt></b> is redefined as:
</dl>

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th valign=bottom align=left>Flag
	<td>&nbsp;&nbsp;&nbsp;
	<th valign=bottom align=left>Definition
<tr>	<td colspan=3><hr>
<tr valign=top>	<td>NOBIND
	<td>&nbsp;
	<td>/bind {} def ;
        no operation, returns the argument
<tr valign=top>	<td>DELAYBIND
	<td>&nbsp;
	<td>returns the argument, stores the argument for later use by <b><tt>.bindnow</b></tt>
</table></blockquote>


<dl>
<dt><b><tt>&lt;array&gt; .bind &lt;array&gt;</tt></b>
<dd>Performs standard <b><tt>bind</tt></b> operation as defined in PLRM regardless of
NOBIND or DELAYBIND flags.
</dl>

<a name="bindnow"></a>
<dl>
<dt><b><tt>- .bindnow -</tt></b>
<dd>Applies <b><tt>bind</tt></b> operator to all savad procedures after binding has been
deferred through -dDELAYBIND. Note that idiom recognition has no effect for the deferred
binding because the value returned from <b><tt>bind</tt></b> is discarded.
<p>
Since v. 8.12 <b><tt>.bindnow</tt></b> undefines itself and restores standard definition of
<b><tt>bind</tt></b> operator. In earlier versions after calling <b><tt>.bindnow</tt></b>,
the postscript <b><tt>bind</tt></b> operator needs to be rebound to the internal implementation
<b><tt>.bind</tt></b>, as in this fragment from the ps2ascii script:
<blockquote><pre><tt>DELAYBIND {
  .bindnow
  /bind /.bind load def
} if
</tt></pre></blockquote>
This is necessary for correct behavior with later code that uses the <b><tt>bind</tt></b> operator.
</dl>

<dl>
<dt><b><tt>&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; .execn ...</tt></b>
<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that
order, essentially equivalent to

<blockquote><pre>
&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; array astore {exec} forall
</pre></blockquote>

<p>
except that it doesn't actually create the array.
</dl>

<dl>
<dt><b><tt>&lt;string&gt; getenv &lt;string&gt; true</tt></b>
<dt><b><tt>&lt;string&gt; getenv false</tt></b>
<dd>Looks up a name in the shell environment.  If the name is found,
returns the corresponding value and true; if the name is not found, returns
false.
</dl>

<dl>
<dt><b><tt>&lt;name&gt; &lt;array&gt; .makeoperator &lt;operator&gt;</tt></b>
<dd>Constructs and returns a new operator that is actually the given
procedure in disguise.  The name is only used for printing.  The operator
has the executable attribute.

<p>
Operators defined in this way do one other thing besides running the
procedure: if an error occurs during the execution of the procedure, and
there has been no net reduction in operand or dictionary stack depth, the
operand or dictionary stack pointer respectively is reset to its position
at the beginning of the procedure.
</dl>

<dl>
<dt><b><tt>&lt;string&gt; &lt;boolean&gt; .setdebug -</tt></b>
<dd>If the Ghostscript interpreter was built with the <b><tt>DEBUG</tt></b>
flag set, sets or resets any subset of the debugging flags normally
controlled by <b><tt>-Z</tt></b> in the command line.  Has no effect
otherwise.
</dl>

<dl>
<dt><b><tt>- .oserrno &lt;errno&gt;</tt></b>
<dd>Returns the error code for the most recent operating system error.
</dl>

<dl>
<dt><b><tt>- .oserrorstring &lt;string&gt;</tt></b>
<dd>Returns the error string for the most recent operating system error.
</dl>

<a name="Runandhide"></a>
<dl>
<dt><b><tt>&lt;array&gt; &lt;procedure&gt; .runandhide ... &lt;array&gt;</tt></b>
<dd>Runs the <i><tt>&lt;procedure&gt;</tt></i> after removing the
<i><tt>&lt;array&gt;</tt></i> from the stack. As long as <i><tt>&lt;array&gt;</tt></i> 
is not contained in any readable dictionaries or elsewhere on stacks, it
will not be accessible to <i><tt>&lt;procedure&gt;</tt></i>.
<p>
This operator is intended to allow hiding a <i><tt>&lt;save&gt;</tt></i> object
during execution of procedures or files that run in <b>SAFER</b> mode.
If a <b><tt>save</tt></b> is performed prior to entering <b>SAFER</b> mode
with <b><tt>.setsafe</tt></b>, using the save object as the operand to
<b><tt>restore</tt></b> will return to <b>NOSAFER</b> mode. In order to
prevent the procedures running in <b>SAFER</b> mode from being able to
return to <b>NOSAFER</b> mode, this operator should be used.
Upon return from the file or procedure <b><tt>restore</tt></b> can be used
to return to <b>NOSAFER</b> mode.
<p>
<b>Note:</b> The array operand hidden during the execution of the file or
procedure will be placed at the top of the operand stack which may be on
top of objects that the file or procedure leaves on top of the stack.
Thus removing objects below the array may be needed to prevent an
<b><tt>invalidrestore</tt></b> error.
<p>
For example, in order for a script or job server to execute a file
<tt>somefile.ps</tt> with the <b>SAFER</b> mode restrictions in place, returning
to unrestricted <b>NOSAFER</b> mode when the procedure exits is as follows:
<pre>
	Start Ghostscript with <b>-dNOSAFER</b>

	...			% perform any device set up w/o restrictions
	[ save ]		% create a save object before SAFER
	(somefile.ps) (r) file cvx	% open the file to process
	.setsafe		% enter SAFER mode
	.runandhide		% run the file hiding the save object
	count 1 roll		% place array below anything left over
	count 1 sub { pop } repeat	% pop left over stuff
	cleardictstack		% prevent invalidrestore from dicts
	0 get restore		% go back to NOSAFER mode
</pre>
Another refinement on the above would be to execute <b><tt>.runandhide</tt></b>
using <b><tt>stopped</tt></b> in order to report errors but continue processing.
</dl>

<dl>
<dt><b><tt>- .setsafe -</tt></b>
<dd>If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or 
<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b>
mode (see <a href="Use.htm#Safer"><b>-dSAFER</b></a>)
<p>
Since <b>SAFER</b> mode is implemented with userparameters and device parameters,
it is possible to use <b><tt>save</tt></b> and <b><tt>restore</tt></b> before
and after <b><tt>.setsafe</tt></b> to return to <b>NOSAFER</b> mode, but care
should be taken to ensure that the <i><tt>save</tt></i> object is not
accessible to any procedures or file run in <b>SAFER</b> mode (see 
<a href="#Runandhide"><b>.runandhide</b></a> above).
<p>
<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page
will be erased as a side effect of this operator</b>
</dl>

<dl>
<dt><b><tt>- .locksafe -</tt></b>
<dd>
This operator sets the current device's <b><tt>.LockSafetyParams</tt></b>
and the <b><tt>LockFilePermissions</tt></b> userparameter true as well as
adding the paths on LIBPATH and FONTPATH and the paths given by the
system params /GenericResourceDir and /FontResourceDir to the current
PermitFileReading list of paths.
<p>
If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or 
<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b>
mode with the current set of <b><tt>PermitFile...</tt></b> user parameters
in effect. Since <b><tt>.setsafe</tt></b> sets the <b><tt>PermitFile...</tt></b>
user parameters to empty arrays, a script or job server that needs to
enable certain paths for file Reading, Writing and/or Control can use this
operator to perform the locking needed to enter <b>SAFER</b> mode.
<p>
For example, to enable reading everywhere, but disallow writing and file
control (deleting and renaming files), the following can be used:
<pre>
	{ << /PermitFileReading [ (*) ]
	     /PermitFileWriting [ ]
	     /PermitFileControl [ ]
	  >> setuserparams
	  .locksafe
	} stopped pop
</pre>
In the above example, use of stopped will allow the use of this sequence on
older versions of Ghostscript where <b><tt>.locksafe</tt></b> was not an operator.
<p>
<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page
will be erased as a side effect of this operator</b>
<p>
See also <a href="#LockSafetyParams">.LockSafetyParams</a> and
<a href="#User_parameters">User Parameters</a>.
<p>
</dl>

<h4><a name="Device"></a>Device operators</h4>

<dl>
<dt><b><tt>&lt;device&gt; copydevice &lt;device&gt;</tt></b>
<dd>Copies a device.  The copy is writable and installable.  The copy is
created in the current VM (local or global), usually local VM for executing
ordinary PostScript files.
</dl>

<dl>
<dt><b><tt>&lt;devicename&gt; finddevice &lt;device&gt;</tt></b>
<dd>Creates a default instance of a device specified by name.  The instance
is created in global VM.  If <b><tt>finddevice</tt></b> is called more than
once with the same device name, it creates the default instance the first
time, and returns the same instance thereafter.
</dl>

<dl>
<dt><b><tt>&lt;devicename&gt; findprotodevice &lt;device&gt;</tt></b>
<dd>Finds the prototype of a device specified by name.  A prototype can be
used with <b><tt>.getdeviceparams</tt></b> or other parameter-reading
operators, but it is read-only and cannot be set with
<b><tt>setdevice</tt></b>: it must be copied first.
</dl>

<dl>
<dt><b><tt>&lt;device&gt; &lt;x&gt; &lt;y&gt; &lt;width&gt; &lt;max_height&gt; &lt;alpha?&gt; &lt;std_depth|null&gt; &lt;string&gt; .getbitsrect &lt;height&gt; &lt;substring&gt;</tt></b>
<dd>Reads a rectangle of rendered bits back from a device.  This is only
guaranteed to be implemented for image devices (see below).
<b><tt>alpha?</tt></b> is 0 for no alpha, -1 for alpha first, 1 for alpha
last.  <b><tt>std_depth</tt></b> is null for native pixels, number of bits
per component for a standard color space.
</dl>

<dl>
<dt><b><tt>&lt;index&gt; .getdevice &lt;device&gt;</tt></b>
<dd>Returns a device from the set of devices known to the system.  The
first device, which is the default, is numbered 0.  If the
<b><tt>index</tt></b> is out of range, causes a <b><tt>rangecheck</tt></b>
error.  This device is actually a prototype, not a directly usable device,
and is marked read-only; it cannot have its parameters changed or be
installed as the current device.
</dl>

<dl>
<dt><b><tt>&lt;matrix&gt; &lt;width&gt; &lt;height&gt; &lt;palette&gt; makeimagedevice &lt;device&gt;</tt></b>
<dd>Makes a new device that accumulates an image in memory. <b><tt>
matrix</tt></b> is the initial transformation matrix: it must be orthogonal
(that is, [a&nbsp;0&nbsp;0&nbsp;b&nbsp;x&nbsp;y] or
[0&nbsp;a&nbsp;b&nbsp;0&nbsp;x&nbsp;y]).  <b><tt>palette</tt></b> is a
string of 2^<small><sup><b>N</b></sup></small> or
3&nbsp;&times;&nbsp;2^<small><sup><b>N</b></sup></small> elements,
specifying how the 2^<small><sup><b>N</b></sup></small> possible pixel
values will be interpreted.  Each element is interpreted as a gray value,
or as RGB values, multiplied by 255.  For example, if you want a monochrome
image for which 0=white and 1=black, the palette should be
<b><tt>&lt;ff&nbsp;00&gt;</tt></b>; if you want a 3-bit deep image with
just the primary colors and their complements (ignoring the fact that 3-bit
images are not supported), the palette might be <b><tt>&lt;000000 0000ff
00ff00 00ffff ff0000 ff00ff ffff00 ffffff&gt;</tt></b>.  At present, the
palette must contain exactly 2, 4, 16, or 256 entries, and must contain an
entry for black and an entry for white; if it contains any entries that
aren't black, white, or gray, it must contain at least the six primary
colors (red, green, blue, and their complements cyan, magenta, and yellow);
aside from this, its contents are arbitrary.

<p>
Alternatively, palette can be 16, 24, 32, or null (equivalent to 24).
These are interpreted as:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th valign=bottom align=left>Palette
	<td>&nbsp;&nbsp;&nbsp;
	<th valign=bottom align=left>Bits allocated per color
<tr>	<td colspan=3><hr>
<tr valign=top>	<td>16
	<td>&nbsp;
	<td>5 red, 6 green, 5 blue
<tr valign=top>	<td>24
	<td>&nbsp;
	<td>8 red, 8 green, 8 blue
<tr valign=top>	<td>32
	<td>&nbsp;
	<td>8C, 8M, 8Y, 8K
</table></blockquote>

<p>
Note that one can also make an image device (with the same palette as an
existing image device) by copying a device using the
<b><tt>copydevice</tt></b> operator.
</dl>

<dl>
<dt><b><tt>&lt;matrix&gt; &lt;width&gt; &lt;height&gt; &lt;palette&gt; &lt;word?&gt; makewordimagedevice &lt;device&gt;</tt></b>
<dd>Makes an image device as described above.  <b><tt>word?</tt></b> is a
Boolean value indicating whether the data should be stored in a
word-oriented format internally.  No ordinary PostScript programs should
use this operator.
</dl>

<dl>
<dt><b><tt>&lt;device&gt; &lt;index&gt; &lt;string&gt; copyscanlines &lt;substring&gt;</tt></b>
<dd>Copies one or more scan lines from an image device into a string,
starting at a given scan line in the image.  The data is in the same format
as for the <b><tt>image</tt></b> operator.  It is an error if the device is
not an image device or if the string is too small to hold at least one
complete scan line.  Always copies an integral number of scan lines.
</dl>

<dl>
<dt><b><tt>&lt;device&gt; setdevice -</tt></b>
<dd>
<p>
Sets the current device to the specified device.  Also resets the
transformation and clipping path to the initial values for the device.
Signals an <b><tt>invalidaccess</tt></b> error if the device is a
prototype or if <a href="Language.htm#LockSafetyParams">.LockSafetyParams</a>
is true for the current device.
<p>
Some device properties may need to be set with <tt>putdeviceprops</tt> before 
<b><tt>setdevice</tt></b> is called. For example, the pdfwrite device will try
to open its output file, causing an <tt>undefinedfilename</tt> error if 
<tt>OutputFile</tt> hasn't been set to a valid filename. Another method in such
cases is to use the level 2 operator instead: 

  <tt>&lt;&lt;&nbsp;/OutputDevice /pdfwrite /OutputFile (MyPDF.pdf)&nbsp;&gt;&gt;    <b>setpagedevice</b></tt>.

</dl>

<dl>
<dt><b><tt>- currentdevice &lt;device&gt;</tt></b>
<dd>Gets the current device from the graphics state.
</dl>

<dl>
<dt><b><tt>&lt;device&gt; getdeviceprops &lt;mark&gt; &lt;name1&gt; &lt;value1&gt; ... &lt;namen&gt; &lt;valuen&gt;</tt></b>
<dd>Gets the properties of a device.  See the section on
<a href="#Device_parameters">device parameters</a> below for details.
</dl>

<dl>
<dt><b><tt>&lt;mark&gt; &lt;name1&gt; &lt;value1&gt; ... &lt;namen&gt; &lt;valuen&gt; &lt;device&gt; putdeviceprops &lt;device&gt;</tt></b>
<dd>Sets properties of a device.  May cause <b><tt>undefined</tt></b>,
<b><tt>invalidaccess</tt></b>, <b><tt>typecheck</tt></b>, <b><tt>rangecheck</tt></b>, or
<b><tt>limitcheck</tt></b> errors.
</dl>

<dl>
<dt><b><tt>- flushpage -</tt></b>
<dd>On displays, flushes any buffered output, so that it is guaranteed to
show up on the screen; on printers, has no effect.
</dl>

<hr>

<h2><a name="Filters"></a>Filters</h2>

<h3><a name="Standard_filters"></a>Standard filters</h3>

<p>
In its usual configuration, Ghostscript supports all the standard PostScript
LanguageLevel 3 filters, both encoding and decoding, except that it does not
currently support:

<ul>

<li>the <b><tt>EarlyChange</tt></b> key in the <b><tt>LZWEncode</tt></b>
filter.

</ul>

<p>
Ghostscript also supports additional keys in the optional dictionary
operands for some filters.  For the <b><tt>LZWDecode</tt></b> filter:

<dl>
<dt><b><tt>InitialCodeLength &lt;integer&gt;</tt></b> (default 8)
<dd>An integer between 2 and 11 specifying the initial number of data bits
per code.  Note that the actual initial code length is 1 greater than this,
to allow for the reset and end-of-data code values.
</dl>

<dl>
<dt><b><tt>FirstBitLowOrder &lt;boolean&gt;</tt></b> (default false)
<dd>If true, codes appear with their low-order bit first.
</dl>

<dl>
<dt><b><tt>BlockData &lt;boolean&gt;</tt></b> (default false)
<dd>If true, the data is broken into blocks in the manner specified for the
GIF file format.
</dl>

<p>
For the <b><tt>CCITTFaxEncode</tt></b> and <b><tt>CCITTFaxDecode</tt></b>
filters:

<dl>
<dt><b><tt>DecodedByteAlign &lt;integer&gt;</tt></b> (default 1)
<dd>An integer <b>N</b> with the value 1, 2, 4, 8, or 16, specifying that
decoded data scan lines are always a multiple of <b>N</b> bytes.  The
encoding filter skips data in each scan line from Columns to the next
multiple of <b>N</b> bytes; the decoding filter pads each scan line to a
multiple of <b>N</b> bytes.
</dl>

<h3><a name="Non_standard_filters"></a>Non-standard filters</h3>

<p>
In addition to the standard PostScript LanguageLevel 3 filters, Ghostscript
supports the following non-standard filters.  Many of these filters are used
internally to implement standard filters or facilities; they are almost
certain to remain, in their present form or a backward-compatible one, in
future Ghostscript releases.

<dl>
<dt><b><tt>&lt;target&gt; /BCPEncode filter &lt;file&gt;</tt></b>
<dt><b><tt>&lt;source&gt; /BCPDecode filter &lt;file&gt;</tt></b>
<dd>Create filters that implement the Adobe Binary Communications Protocol.
See Adobe documentation for details.
</dl>

<dl>
<dt><b><tt>&lt;target&gt; &lt;seed_integer&gt; /eexecEncode filter &lt;file&gt;</tt></b>
<dd>Creates a filter for encrypting data into the encrypted format described
in the Adobe Type 1 Font Format documentation.  The
<b><tt>seed_integer</tt></b> must be 55665 for the <b><tt>eexec</tt></b>
section of a font, or 4330 for a <b><tt>CharString</tt></b>.  Note that for
the <b><tt>eexec</tt></b> section of a font, this filter produces binary
output and does not include the initial 4 (or <b><tt>lenIV</tt></b>) garbage
bytes.
</dl>

<dl>
<dt><b><tt>&lt;source&gt; &lt;seed_integer&gt; /eexecDecode filter &lt;file&gt;</tt></b>
<dt><b><tt>&lt;source&gt; &lt;dict&gt; /eexecDecode filter &lt;file&gt;</tt></b>
<dd>Creates a filter for decrypting data encrypted as described in the Adobe
Type 1 Font Format documentation.  The <b><tt>seed_integer</tt></b> must be
55665 or 4330 as described just above.  Recognized dictionary keys are:

<blockquote>
<b><tt>seed &lt;16-bit integer&gt;</tt></b> (required)<br>
<b><tt>lenIV &lt;non-negative integer&gt;</tt></b> (default=4)<br>
<b><tt>eexec &lt;bool&gt;</tt></b> (default=<b><tt>false</b></tt>)
</blockquote>
</dl>

<dl>
<dt><b><tt>&lt;target&gt; /MD5Encode filter &lt;file&gt;</tt></b>
<dd>Creates a filter that produces the 16-byte MD5 digest of the input.
Note that no output is produced until the filter is closed.
</dl>

<dl>
<dt><b><tt>&lt;source&gt; &lt;hex_boolean&gt; /PFBDecode filter &lt;file&gt;</tt></b>
<dd>Creates a filter that decodes data in <b><tt>.PFB</tt></b> format, the
usual semi-binary representation for Type 1 font files on IBM PC and
compatible systems.  If <b><tt>hex_boolean</tt></b> is true, binary packets
are converted to hex; if false, binary packets are not converted.
</dl>

<dl>
<dt><b><tt>&lt;target&gt; &lt;dict&gt; /PixelDifferenceEncode filter &lt;file&gt;</tt></b>
<dt><b><tt>&lt;source&gt; &lt;dict&gt; /PixelDifferenceDecode filter &lt;file&gt;</tt></b>
<dd>Implements the Predictor=2 pixel-differencing option of the LZW
filters.  Recognized keys are:

<blockquote>
<b><tt>Colors &lt;integer&gt;</tt></b> (1 to 4, default=1)<br>
<b><tt>BitsPerComponent &lt;integer&gt;</tt></b> (1, 2, 4, or 8, default=8)<br>
<b><tt>Columns &lt;integer&gt;</tt></b> (&gt;= 0, required)
</blockquote>

<p>
See the Adobe <a
href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf"><em>Portable
Document Format Reference Manual</em></a> for details.
</dl>

<dl>
<dt><b><tt>&lt;target&gt; &lt;dict&gt; /PNGPredictorEncode filter &lt;file&gt;</tt></b>
<dt><b><tt>&lt;source&gt; &lt;dict&gt; /PNGPredictorDecode filter &lt;file&gt;</tt></b>
<dd>Implements the "filter" algorithms of the
<a href="http://www.libpng.org/pub/png/">Portable Network Graphics (PNG)
graphics format</a>.  Recognized keys are:

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Keys recognized in PNG filter algorithms</font><hr>
<tr valign=bottom>
	<th align=left>Key
	<td>&nbsp;&nbsp;
	<th align=left>Range
	<td>&nbsp;&nbsp;
	<th align=left>Default
<tr>	<td colspan=5><hr>
<tr valign=top>	<td><b><tt>Colors &lt;integer&gt;</tt></b>
	<td>&nbsp;&nbsp;&nbsp;
	<td>1 to 16
	<td>&nbsp;&nbsp;
	<td>16
<tr valign=top>	<td><b><tt>BitsPerComponent &lt;integer&gt;</tt></b>
	<td>&nbsp;
	<td>1, 2, 4, 8, or 16
	<td>&nbsp;&nbsp;
	<td>8
<tr valign=top>	<td><b><tt>Columns &lt;integer&gt;</tt></b>
	<td>&nbsp;
	<td>&gt;= 0
	<td>&nbsp;&nbsp;
	<td>1
<tr valign=top>	<td><b><tt>Predictor &lt;integer&gt;</tt></b>
	<td>&nbsp;
	<td>10 to 15
	<td>&nbsp;&nbsp;
	<td>15
</table></blockquote>

<p>
The <b><tt>Predictor</tt></b> is the PNG algorithm number + 10 for the
<b><tt>Encoding</tt></b> filter; the <b><tt>Decoding</tt></b> filter
ignores <b><tt>Predictor</tt></b>.  15 means the encoder attempts to
optimize the choice of algorithm.  For more details see the PNG
specification

<blockquote>
<a href="http://www.w3.org/TR/WD-png-960128.html">http://www.w3.org/TR/WD-png-960128.html</a>
</blockquote>
</dl>

<dl>
<dt><b><tt>&lt;target&gt; /TBCPEncode filter &lt;file&gt;</tt></b>
<dt><b><tt>&lt;source&gt; /TBCPDecode filter &lt;file&gt;</tt></b>
<dd>Create filters that implement the Adobe Tagged Binary Communications
Protocol.  See Adobe documentation for details.
</dl>

<dl>
<dt><b><tt>&lt;target&gt; /zlibEncode filter &lt;file&gt;</tt></b>
<dt><b><tt>&lt;source&gt; /zlibDecode filter &lt;file&gt;</tt></b>
<dd>Creates filters that use the data compression method variously known as
'zlib' (the name of a popular library that implements it), 'Deflate' (as in
<a href="http://www.ietf.org/rfc/rfc1951.txt">RFC 1951</a>, which is a
detailed specification for the method), 'gzip' (the name of a popular
compression application that uses it), or 'Flate' (Adobe's name).  Note that
the PostScript <b><tt>Flate</tt></b> filters are actually a combination of
this filter with an optional predictor filter.
</dl>

<h3><a name="Unstable_filters"></a>Unstable filters</h3>

<p>
Some versions of Ghostscript may also support other non-standard filters for
experimental purposes.  The current version includes the following such
filters, which are not documented further.  No code should assume that these
filters will exist in compatible form, or at all, in future versions.

<dl>
<dt><b><tt>&lt;target/source&gt; &lt;string&gt; ByteTranslateEncode/Decode filter &lt;file&gt;</tt></b>
<dd><b><tt>string</tt></b> must be a string of exactly 256 bytes.  Creates a
filter that converts each input byte <em>b</em> to
<b><tt>string</tt></b>[<em>b</em>].  Note that the <b><tt>Encode</tt></b>
and <b><tt>Decode</tt></b> filters operate identically: the client must
provide a <b><tt>string</tt></b> for the <b><tt>Decode</tt></b> filter that
is the inverse mapping of the <b><tt>string</tt></b> for the
<b><tt>Encode</tt></b> filter.
</dl>

<dl>
<dt><b><tt>&lt;target/source&gt; &lt;dict&gt; BoundedHuffmanEncode/Decode filter &lt;file&gt;</tt></b>
<dd>These filters encode and decode data using Huffman codes.  Since these
filters aren't used anywhere, we don't document them further, except to note
the recognized dictionary keys, which must be set identically for encoding
and decoding:

<blockquote>
<b><tt>FirstBitLowOrder &lt;bool&gt;</tt></b> (default=false)<br>
<b><tt>MaxCodeLength &lt;int&gt;</tt></b> (default=16)<br>
<b><tt>EndOfData &lt;bool&gt;</tt></b> (default=true)<br>
<b><tt>EncodeZeroRuns &lt;int&gt;</tt></b> (default=256)<br>
<b><tt>Tables &lt;int_array&gt;</tt></b>
</blockquote>
</dl>

<dl>
<dt><b><tt>&lt;target/source&gt; &lt;dict&gt; BWBlockSortEncode/Decode filter &lt;file&gt;</tt></b>
<dd>This filter implements the Burroughs-Wheeler block sorting compression
method, which we've heard is also used in the popular <b><tt>bzip2</tt></b>
compression application.  See <a
href="http://sources.redhat.com/bzip2/">http://sources.redhat.com/bzip2/</a>
for more information.  The only recognized dictionary key is:

<blockquote>
<b><tt>BlockSize &lt;integer&gt;</tt></b> (default=16384)
</blockquote>
</dl>

<dl>
<dt><b><tt>&lt;target/source&gt; MoveToFrontEncode/Decode filter &lt;file&gt;</tt></b>

<dd>The <b><tt>Encode</tt></b> filter starts by initializing an internal
256-byte array <b><tt>a</tt></b> to the values 0 .. 255.  This array will
always hold a permutation of these values.  Then for each input byte
<em>b</em>, the filter outputs the index <em>i</em> such that
<b><tt>a</tt></b>[<em>i</em>] = <em>b</em>, and moves that element to the
front (element 0) of <b><tt>a</tt></b>, moving elements 0 .. <em>i-1</em> to
positions 1 .. <em>i</em>.  The <b><tt>Decode</tt></b> filter inverts this
process.
</dl>

<hr>

<h2><a name="Device_parameters"></a>Device parameters</h2>

Ghostscript supports the concept of device parameters for all devices, not
just page devices.  (For non-page devices, these are accessible through
<b><tt>getdeviceprops</tt></b> and <b><tt>putdeviceprops</tt></b>, as
indicated above.)  Here are the currently defined parameters for all
devices:

<dl>
<a name="LockSafetyParams"></a>
<dt><b><tt>.LockSafetyParams &lt;boolean&gt;</tt></b>
<dd>This parameter allows for improved system security by preventing
PostScript programs from being able to change potentially dangerous
device paramters such as OutputFile. This parameter cannot be set false
if it is already true.
<p>
If this parameter is true for the current device, attempt to set a new
device that has <b><tt>.LockSafetyParams</tt></b> false will signal an
<tt><b> invalidaccess</b></tt> error.
</dl>

<dl>
<dt><b><tt>BitsPerPixel &lt;integer&gt; (usually read-only)</tt></b>
<dd>Number of bits per pixel.
</dl>

<dl>
<dt><b><tt>.HWMargins [&lt;four floats&gt;]</tt></b>
<dd>Size of non-imageable regions around the edges of the page, in points
(units of 1/72in; see the <a href="Devices.htm#Measurements">notes on
measurements</a> in the documentation on devices).
</dl>

<dl>
<dt><b><tt>HWSize [&lt;integer&gt; &lt;integer&gt;]</tt></b>
<dd>X and Y size in pixels.
</dl>

<dl>
<dt><b><tt>Name &lt;string&gt; (read-only)</tt></b>
<dd>The device name.  Currently the same as <b><tt>OutputDevice</tt></b>.
</dl>

<dl>
<dt><b><tt>Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues (usually read-only)</tt></b>
<dd>As for the <b><tt>deviceinfo</tt></b> operator of Display PostScript.
<b><tt>Red</tt></b>, <b><tt>Green</tt></b>, <b><tt>Blue</tt></b>, and
<b><tt>ColorValues</tt></b> are only defined if
<b><tt>Colors</tt></b>&nbsp;&gt;&nbsp;1.
</dl>

<dl>
<dt><b><tt>TextAlphaBits, GraphicsAlphaBits (usually read-only)</tt></b>
<dd>The number of bits of anti-aliasing information for text or graphics
respectively.  Legal values are 1 (no anti-aliasing, the default for most
devices), 2, or 4.
</dl>

<p>
Ghostscript also supports the following read-only parameter that is not a
true device parameter:

<dl>
<dt><b><tt>.EmbedFontObjects &lt;integer&gt</tt></b>
<dd>If non-zero, indicates that the device may embed font objects (as
opposed to bitmaps for individual characters) in the output.  The purpose of
this parameter is to disable third-party font renderers for such devices.
(This is zero for almost all devices.)
</dl>

<p>
In addition, the following are defined per Adobe's documentation for the
<b><tt>setpagedevice</tt></b> operator:

<blockquote>
<b><tt>Duplex</tt></b> (if supported)<br>
<b><tt>HWResolution</tt></b><br>
<b><tt>ImagingBBox</tt></b><br>
<b><tt>Margins</tt></b><br>
<b><tt>NumCopies</tt></b> (for printers only)<br>
<b><tt>Orientation</tt></b> (if supported)<br>
<b><tt>OutputDevice</tt></b><br>
<b><tt>PageOffset</tt></b> (write-only)<br>
<b><tt>PageSize</tt></b><br>
<b><tt>ProcessColorModel</tt></b> (usually read-only)<br>
</blockquote>

<p>
Some devices may only allow certain values for <b><tt>HWResolution</tt></b>
and <b><tt>PageSize</tt></b>.  The null device ignores attempts to set
<b><tt>PageSize</tt></b>; its size is always <b><tt>[0&nbsp;0]</tt></b>.

<p>
It should be noted that calling <tt>setpagedevice</tt> with one of the above keys may reset the effects of any <b><tt>pdfmark</tt></b> commands up to that point. In particular this is true of HWResolution, a behavior that differs from Adobe Distiller.

<p>
For printers these are also defined:

<dl>
<dt><b><tt>BufferSpace &lt;integer&gt;</tt></b>
<dd>Buffer space for band lists, if the bitmap is too big to fit in memory.
</dl>

<dl>
<dt><b><tt>MaxBitmap &lt;integer&gt;</tt></b>
<dd>Maximum space for a full bitmap in memory.
</dl>

<dl>
<dt><b><tt>OutputFile &lt;string&gt;</tt></b>

<dd>An empty string means "send to printer directly", otherwise specifies
the file name for output; <b><tt>%d</tt></b> is replaced by the page number
for page-oriented output devices;
on Unix systems <b><tt>%pipe%</tt></b><em>command</em> writes to a pipe.
(<b><tt>|</tt></b><em>command</em> also writes to a pipe, but is now
deprecated.)
<p>
Attempts to set this parameter if <tt><b>.LockSafetyParams</b></tt> is true
will signal an <tt><b>invalidaccess</b></tt> error.
</dl>

<dl>
<dt><b><tt>OpenOutputFile &lt;boolean&gt;</tt></b>
<dd>If true, open the device's output file when the device is opened,
rather than waiting until the first page is ready to print.
</dl>

<dl>
<dt><b><tt>PageCount &lt;integer&gt; (read-only)</tt></b>
<dd>Counts the number of pages printed on the device.
</dl>

<p>
The following parameters are for use only by very specialized applications
that separate band construction from band rasterization.  Improper use may
cause unpredictable errors.  In particular, if you only want to allocate
more memory for banding, to increase band size and improve performance, use
the <b><tt>BufferSpace</tt></b> parameter, not
<b><tt>BandBufferSpace</tt></b>.

<dl>
<dt><b><tt>BandHeight &lt;integer&gt;</tt></b>
<dd>The height of bands when banding.  0 means use the largest band height
that will fit within the BandBufferSpace (or BufferSpace, if
BandBufferSpace is not specified).
</dl>

<dl>
<dt><b><tt>BandWidth &lt;integer&gt;</tt></b>
<dd>The width of bands in the rasterizing pass, in pixels.  0 means use the
actual page width.
</dl>

<dl>
<dt><b><tt>BandBufferSpace &lt;integer&gt;</tt></b>
<dd>The size of the band buffer in the rasterizing pass, in bytes.  0 means
use the same buffer size as for the interpretation pass.
</dl>

<p>
Ghostscript supports the following parameter for
<b><tt>setpagedevice</tt></b> and <b><tt>currentpagedevice</tt></b> that is
not a device parameter per se:

<dl>
<dt><b><tt>ViewerPreProcess &lt;procedure&gt;</tt></b>
<dd>Specifies a procedure to be applied to the page device dictionary
before any other processing is done.  The procedure may not alter the
dictionary, but it may return a modified copy.  This "hook" is provided for
use by viewing programs such as GSview.
</dl>

<hr>

<h2><a name="User_parameters"></a>User parameters</h2>

Ghostscript supports the following non-standard user parameters:

<dl>
<dt><b><tt>ProcessDSCComment &lt;procedure|null&gt;</tt></b>
<dd>If not null, this procedure is called whenever the scanner detects a DSC
comment (comment beginning with <b><tt>%%</tt></b> or <b><tt>%!</tt></b>).
There are two operands, the file and the comment (minus any terminating
EOL), which the procedure must consume.
</dl>

<dl>
<dt><b><tt>ProcessComment &lt;procedure|null&gt;</tt></b>
<dd>If not null, this procedure is called whenever the scanner detects a
comment (or, if <b><tt>ProcessDSCComment</tt></b> is also not null, a
comment other than a DSC comment).  The operands are the same as for
<b><tt>ProcessDSCComment</tt></b>.
</dl>

<dl>
<dt><b><tt>LockFilePermissions &lt;boolean&gt;</tt></b>
<dd>If <tt>true</tt>, this parameter and the three <tt>PermitFile...</tt>
parameters cannot be changed. Attempts to change any of the values
when LockFilePermissions is <tt>true</tt> will signal <b><tt>invalidaccess</tt></b>.
Also, when this value is <tt>true</tt>, the <b><tt>file</tt></b> operator
will give <b><tt>invalidaccess</tt></b> when attempting to open files
(processes) using the <b><tt>%pipe</tt></b> device.
<p>
Also when <b><tt>LockFilePermissions</tt></b> is <tt>true</tt>, strings
cannot reference the parent directory (platform specific). For example
<b><tt>(../../xyz)</tt></b> is illegal on unix, Windows
and Macintosh, and <b><tt>([.#.#.XYZ])</tt></b> is illegal on VMS.
<p>
This parameter is set <tt>true</tt> by the <b><tt>.setsafe</tt></b> and
<b><tt>.locksafe</tt></b> operators.
</dl>

<dl>
<dt><b><tt>PermitFileReading &lt;array of strings&gt;</tt></b>
<dt><b><tt>PermitFileWriting &lt;array of strings&gt;</tt></b>
<dt><b><tt>PermitFileControl &lt;array of strings&gt;</tt></b>
<dd>These parameters specify paths where file reading, writing and the
'control' operations are permitted, respectively. File control
operations are <b><tt>deletefile</tt></b> and <b><tt>renamefile</tt></b>.
For <b><tt>renamefile</tt></b>, the filename for the current filename
must match one of the paths on the PermitFileControl list, and the
new filename must be on <b>both</b> the PermitFileControl and the
PermitFileWriting lists of paths.
<p>
The strings can contain wildcard characters as for the <b><tt>filenameforall</tt></b>
operator and unless specifying a single file, will end with a <b>*</b>
for directories (folders) to allow access to all files and sub-directories
in that directory.
<p>
<b>Note:</b> The strings are used for stringmatch operations similar
to <b><tt>filenameforall</tt></b>, thus on MS Windows platforms, use the '/'
character to separate directories and filenames or use '\\\\' to
have the string contain '\\' which will match a single '\' in the
target filename (use of '/' is strongly recommended).
<p>
The <a href=Use.htm#Safer><b>SAFER</b></a> mode and the
<b><tt>.setsafe</tt></b> operator set all three lists to empty arrays,
thus the only files that can be read are the <b><tt>%stdin</tt></b> device and
on LIBPATH or FONTPATH or the Resource paths specified by the /FontResourceDir
or /GenericResourceDir system params. Files cannot be opened for writing
anywhere and cannot be deleted or renamed except for files created with the
<a href=#Tempfile><b>.tempfile</b></a> operator).
<p>
<b>Note: </b>Limiting file reading as above is <b>NOT</b> compatible with
SAFER mode in release versions before 7.11 and corresponds to the use of
<b><tt>-dPARANOIDSAFER</tt></b> in version 7.04 (up to and not including
version 7.10) and GPL versions 6.53 (up to and not including 6.60).
</dl>

<dl>
<dt><b><tt>AlignToPixels &lt;integer&gt;</tt></b>
<dd>Control sub-pixel positioning of character glyphs (where
applicable). A value of 1 specifies alignment of text characters to
pixels boundaries. A value of 0 to subpixels where the division factor
is set by the device parameter <b><tt>TextAlphaBits</tt></b>. If the
latter is 1, the same rendering results regardless of the value of
<b><tt>AlignToPixels</tt></b>. The initial value defaults to 1, but this
may be overridden by the command line argument
<b><tt>-dAlignToPixels</tt></b>.
</dl>


<dl>
<dt><b><tt>GridFitTT &lt;integer&gt;</tt></b>
<dd>Control the use of True Type grid fitting.
Ghostscript implements a reduced True Type bytecode interpreter,
which can interpret the subset of True Type glyph instructions  
not covered by Apple's patents. This allows the Dynalab fonts to 
rasterize properly.
Fonts with patented instructions can't be properly grid fitted.
This parameter controls the action of the reduced interpreter:
a value of 0 disables grid fitting for all fonts;
a value of 1 enables the grid fitting for glyphs that don't involve 
patented instructions.
When set to 1 a warning is printed to stderr when a patented 
instruction is encountered, and the glyph is rendered ignoring the 
entire grid fitting program. This parameter defaults to 0, but this
may be overridden on the command line with
<b><tt>-dGridFitTT=1</tt></b>.
</dl>

<dl>
<dt><b><tt>UseWTS &lt;boolean&gt;</tt></b>
<dd>If <tt>true</tt>, and if AccurateScreens are specified (either as
a user parameter, or as a type 1 halftone dictionary parameter), then
the Well Tempered Screening algorithm is used for
halftoning. Otherwise, a rational tangent algorithm is chosen, which
will typically result in significant differences between the screen
angle and ruling requested, and actually rendered. Currently, the
performance of WTS is reasonably good when rendering to a full page
buffer, but not optimized for banded mode. Thus, when using WTS,
disable banding (setting
<b><tt>-dMaxBitmap=500000000</tt></b> should work). In a future
version, WTS will be optimized for banded mode, and
<b><tt>UseWTS</tt></b> will be <tt>true</tt> by default.

<p>
<b>Note:</b> Currently, <b><tt>UseWTS</tt></b> can only be set using
the PostScript user parameters mechanism, not on the command line with
a <b><tt>-d</tt></b> switch. Use this code to enable it:

<blockquote><pre>
&lt;&lt; /UseWTS true &gt;&gt; setuserparams
</pre></blockquote>
</dl>

<hr>

<h2><a name="Miscellaneous_additions"></a>Miscellaneous additions</h2>

<h3><a name="Extended_semantics_of_run"></a>Extended semantics of 'run'</h3>

<p>
The operator <b><tt>run</tt></b> can take either a string or a file as its argument.  In
the latter case, it just runs the file, closing it at the end, and trapping
errors just as for the string case.

<h3><a name="DecodingResources"></a>Decoding resources</h3>

<p>
<b><tt>Decoding</tt></b> is a Ghostscript-specific resource category. It contains
various resources for emulating PostScript fonts with other font technologies.
Instances of the <tt>Decoding</tt> category are tables which map PostScript glyph 
names to character codes used with TrueType, Intellifont, Microtype and other font formats.

<p>
Currently Ghostscript is capable of PostScript font emulation in 2 ways :
<li>
1. Through <a href="./Use.htm#FAPI_run">FAPI</a> plugins, and
</li>
<li>
2. With TrueType font files, using the native font renderer, by
specifying TrueType font names or files in <a href="../lib/Fontmap">lib/Fontmap</a>.
</li>
<p>
<b><tt>Decoding</tt></b> resources are not current used by the native font renderer.

<p>
An instance of the <b><tt>Decoding</tt></b> resource category is
a dictionary. The dictionary keys are PostScript glyph names and the
values are character codes. The name of the resource instance should
reflect the character set for which it maps. For example,
<b><tt>/Unicode</tt></b> <b><tt>/Decoding</tt></b> resource maps to
Unicode UTF-16.

<p>
The rules for using <b><tt>Decoding</tt></b> resources in particular
cases are specified in the configuration file
<a href="../lib/xlatmap">lib/xlatmap</a>. See the file itself for more
information.

<p>
The file format for <b><tt>Decoding</tt></b> resource files is
generic PostScript.
Users may want to define custom <b><tt>Decoding</tt></b> resources.
The <b><tt>ParseDecoding</tt></b> procset defined in 
<a href="../lib/gs_ciddc.ps">lib/gs_ciddc.ps</a> allows representation
of the table in a comfortable form.


<h3><a name="CIDDecodingResources"></a>CIDDecoding resources</h3>

<p>
<b><tt>CIDDecoding</tt></b> resources are similar to <b><tt>Decoding</tt></b>
resources, except they map Charaacter Identifiers (CIDs) rather than glyph names.
Another difference is that the native Ghostscript font renderer already uses 
<b><tt>CIDDecoding</tt></b> resources while emulate CID fonts with TrueType.

<p>
An instance of the <b><tt>CIDDecoding</tt></b> resource category is
a dictionary of strings. Keys in the dictionary are integers,
which correspond to high order byte of a CID. Values are
512-bytes strings. Each string represents 256 character codes,
corresponding various values of the lower byte of CID.
Each character code ocupies 2 bytes, high order byte first.
Two zero bytes represent mapping to the default character.

<p>
The Ghostscript library is capable of generating some <b><tt>CIDDecoding</tt></b>
instances automatically, using the appropriate <b><tt>CMap</tt></b> (character map)
resources. This covers most of practical cases if the neccessary <b><tt>CMap</tt></b>
resources  are provided. See the table <b><tt>.CMapChooser</tt></b> in
<a href="../lib/gs_ciddc.ps">lib/gs_ciddc.ps</a>
for the names of automatically gerenated resources and associated <b><tt>CMap</tt></b>s.
They allow to mapping CNS1, GB1, Japan1, Japan2 and Korea1 CID sets to TrueType
character sets known as Unicode (exactly UTF-16), Big5, 
GB1213, ShiftJIS, Johab and Wansung.

<p>
The file format for <b><tt>CIDDecoding</tt></b> resource file is
generic PostScript.
Users may want to define custom resources to <b><tt>CIDDecoding</tt></b>
resource category. 

<h3><a name="GlyphNames2Unicode"></a>GlyphNames2Unicode</h3>
<p>
<b><tt>GlyphNames2Unicode</tt></b> is an undocumented dictionary which Adobe 
PostScript printer driver uses to communicate with Adobe Distiller.
In this dictionary the keys are glyph names, the values are Unicode UTF-16 codes for them.
The dictionaly is stored in the <b><tt>FontInfo</tt></b> dictionary under
the key <b><tt>GlyphNames2Unicode</tt></b>. Ghostscript recognises it and uses
to generate <b><tt>ToUnicode</tt></b> CMaps with pdfwrite.
<p>

<h3><a name="MultipleResourceDirectories"></a>Multiple Resource directories</h3>

<p>
Since 8.10 release Ghostscript maintains multiple resource directories.

<p>
Ghostscript does not distinguish <b><tt>lib</b></tt> and <b><tt>Resource</b></tt> directories.
There is no file name conflicts because
<b><tt>lib</b></tt> does not contain subdirectories, but <b><tt>Resource</b></tt>
always store files in subdirectories.

<p>
The search method with multiple resource directories
appears not fully conforming to PLRM. We cannot unconditionally call
<b><tt>ResourceFileName</b></tt> while executing <b><tt>findresource</b></tt>
or <b><tt>resourcestatus</b></tt>, <b><tt>resourceforall</b></tt>, because per PLRM it always
returns a single path. Therefore Ghostscript implements
an extended search method in <b><tt>findresource</b></tt>,
<b><tt>resourcestatus</b></tt> and <b><tt>resourceforall</b></tt>, which first calls
<b><tt>ResourceFileName</b></tt> and checks whether the returned path
points to an existing file. If yes, the file is used,
othervise Ghostscript searches all directories specified in
<b><tt>LIB_PATH</tt></b>. With a single resource directory
it appears conforming to PLRM and equivalent to Adobe implementations.

<p>
<b><tt>ResourceFileName</b></tt> may be used for obtaining a path
where a resource file to be installed. In this case
Ghostscript to be invoked with <b><tt>-sGenericResourceDir=path</b></tt>,
specifying an absolute path. The default value for
<b><tt>GenericResourceDir</b></tt> is a relative path. Therefore
a default invocation with a PostScript installer
will install resource files into <b><tt>/gs/Resource</tt></b>.

<p>

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1996-2003 artofcode LLC.  All rights
reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Ghostscript library</title>
<!-- $Id: Lib.htm,v 1.32 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: lib.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>The Ghostscript Library</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#GS_library">The Ghostscript library</a>
<li><a href="#PS_operator_API">PostScript operator API</a>
<ul>
<li><a href="#Patterns">Patterns</a>
<li><a href="#Lower_level_API">Lower-level API</a>
</ul>
<li><a href="#Visual_trace">Visual Trace instructions</a>
<li><a href="#Full_example">A full example</a>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="GS_library"></a>The Ghostscript library</h2>

<p>
This document describes the Ghostscript library, a set of procedures
to implement the graphics and filtering capabilities that are primitive
operations in the PostScript language and in Adobe Portable Document Format
(PDF).

<p>
Ghostscript is actually two programs: a language interpreter, and a
graphics library.  The library provides, in the form of C procedures, all
the graphics functions of the language, that is, approximately those
facilities listed in section 8.1 of the <cite>PostScript
Language Reference Manual</cite>, starting with the
graphics state operators.  In addition, the library provides some
lower-level graphics facilities that offer higher performance in exchange
for less generality.

<hr>

<h2><a name="PS_operator_API"></a>PostScript operator API</h2>

<p>
The highest level of the library, which is the one that most clients will
use, directly implements the PostScript graphics operators with procedures
named <b><tt>gs_XXX</tt></b>, for instance <b><tt>gs_moveto</tt></b> and
<b><tt>gs_fill</tt></b>.  Nearly all of these procedures take graphics
state objects as their first arguments, such as

<blockquote><b><tt>
int gs_moveto(gs_state *, double, double);
</tt></b></blockquote>

<p>
Nearly every procedure returns an integer code which is &gt;= 0 for a
successful return or &lt;0 for a failure.  The failure codes correspond
directly to PostScript errors, and are defined in
<b><tt>gserrors.h</tt></b>.

<p>
The library implements all the operators in the following sections of the
<cite>PostScript Language Reference Manual</cite>, with the indicated
omissions and with the APIs defined in the indicated <b><tt>.h</tt></b>
files.  A header of the form <b><em>A.h(B.h)</em></b> indicates that
<b><em>A.h</em></b> is included in <b><em>B.h</em></b>, so
<b><em>A.h</em></b> need not be included explicitly if <b><em>B.h</em></b>
is included.  Operators marked with * in the "omissions" column are not
implemented directly; the library provides lower-level procedures that can
be used to implement the operator.

<p>
There are slight differences in the operators that return multiple values,
since C's provisions for this are awkward.  Also, the control structure for
the operators involving callback procedures (<b><tt>pathforall</tt></b>,
<b><tt>image</tt></b>, <b><tt>colorimage</tt></b>,
<b><tt>imagemask</tt></b>) is partly inverted: the client calls a procedure
to set up an enumerator object, and then calls another procedure for each
iteration.  The <b><tt>...show</tt></b> operators,
<b><tt>charpath</tt></b>, and <b><tt>stringwidth</tt></b> also use an
inverted control structure.

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Section<br>(operators)
	<td>&nbsp;&nbsp;
	<th align=left>Headers
	<td>&nbsp;&nbsp;
	<th align=left>Omissions
<tr>	<td colspan=5><hr>
<tr valign=top>	<td>Graphics state -- device-independent
	<td>&nbsp;
	<td><b><tt>gscolor.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gscolor1.h</tt></b><br><b><tt>gscolor2.h</tt></b><br><b><tt>gscspace.h</tt></b><br><b><tt>gshsb.h</tt></b><br><b><tt>gsline.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gsstate.h</tt></b>
	<td>&nbsp;
	<td>&nbsp;
<tr>	<td>&nbsp;
<tr valign=top>	<td>Graphics state -- device-dependent
	<td>&nbsp;
	<td><b><tt>gscolor.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gscolor1.h</tt></b><br><b><tt>gscolor2.h</tt></b><br><b><tt>gsht.h</tt></b>(<b><tt>gsht1.h</tt></b>,<b><tt>gsstate.h</tt></b>)<br><b><tt>gsht1.h</tt></b><br><b><tt>gsline.h</tt></b>(<b><tt>gsstate.h</tt></b>)
	<td>&nbsp;
	<td>&nbsp;
<tr>	<td>&nbsp;
<tr valign=top>	<td>Coordinate system and matrix
	<td>&nbsp;
	<td><b><tt>gscoord.h</tt></b><br><b><tt>gsmatrix.h</tt></b>
	<td>&nbsp;
	<td><b><tt>*matrix</tt></b>, <b><tt>*identmatrix</tt></b>, <b><tt>*concatmatrix</tt></b>, <b><tt>*invertmatrix</tt></b>
<tr>	<td>&nbsp;
<tr valign=top>	<td>Path construction
	<td>&nbsp;
	<td><b><tt>gspath.h</tt></b><br><b><tt>gspath2.h</tt></b>
	<td>&nbsp;
	<td><b><tt>*arct</tt></b>, <b><tt>*pathforall</tt></b>, <b><tt>ustrokepath</tt></b>, <b><tt>uappend</tt></b>, <b><tt>upath</tt></b>, <b><tt>ucache</tt></b>
<tr>	<td>&nbsp;
<tr valign=top>	<td>Painting
	<td>&nbsp;
	<td><b><tt>gsimage.h</tt></b><br><b><tt>gspaint.h</tt></b><br><b><tt>gspath2.h</tt></b>
	<td>&nbsp;
	<td><b><tt>*image</tt></b>, <b><tt>*colorimage</tt></b>, <b><tt>*imagemask</tt></b>, <b><tt>ufill</tt></b>, <b><tt>ueofill</tt></b>, <b><tt>ustroke</tt></b>
<tr>	<td>&nbsp;
<tr valign=top>	<td>Form and pattern
	<td>&nbsp;
	<td><b><tt>gscolor2.h</tt></b>
	<td>&nbsp;
	<td><b><tt>execform</tt></b>
<tr>	<td>&nbsp;
<tr valign=top>	<td>Device setup and output
	<td>&nbsp;
	<td><b><tt>gsdevice.h</tt></b>
	<td>&nbsp;
	<td><b><tt>*showpage</tt></b>, <b><tt>*set</tt></b>/<b><tt>currentpagedevice</tt></b>
<tr>	<td>&nbsp;
<tr valign=top>	<td>Character and font
	<td>&nbsp;
	<td><b><tt>gschar.h</tt></b><br><b><tt>gsfont.h</tt></b>
	<td>&nbsp;
	<td>*(all the <b><tt>show</tt></b> operators), <b><tt>definefont</tt></b>, <b><tt>undefinefont</tt></b>, <b><tt>findfont</tt></b>, <b><tt>*scalefont</tt></b>, <b><tt>*makefont</tt></b>, <b><tt>selectfont</tt></b>, <b><tt>[Global]FontDirectory</tt></b>, <b><tt>Standard</tt></b>/<b><tt>ISOLatin1Encoding</tt></b>, <b><tt>findencoding</tt></b>
</table></blockquote>

<p>
The following procedures from the list above operate differently from their
PostScript operator counterparts, as explained here:

<dl>
<dt><b><tt>gs_makepattern(gscolor2.h)</tt></b>
<dd>Takes an explicit current color, rather than using the current color in
the graphics state.  Takes an explicit allocator for allocating the pattern
implementation.  See below for more details on
<b><tt>gs_makepattern</tt></b>.
</dl>

<dl>
<dt><b><tt>gs_setpattern(gscolor2.h)</tt></b>
<dt><b><tt>gs_setcolor(gscolor2.h)</tt></b>
<dt><b><tt>gs_currentcolor(gscolor2.h)</tt></b>
<dd>Use <b><tt>gs_client_color</tt></b> rather than a set of color
parameter values.  See below for more details on
<b><tt>gs_setpattern</tt></b>.
</dl>

<dl>
<dt><b><tt>gs_currentdash_length/pattern/offset(gsline.h)</tt></b>
<dd>Splits up <b><tt>currentdash</tt></b> into three separate procedures.
</dl>

<dl>
<dt><b><tt>gs_screen_init/currentpoint/next/install(gsht.h)</tt></b>
<dd>Provide an "enumeration style" interface to <b><tt>setscreen</tt></b>.
(<b><tt>gs_setscreen</tt></b> is also implemented.)
</dl>

<dl>
<dt><b><tt>gs_rotate/scale/translate(gscoord.h)</tt></b>
<dt><b><tt>gs_[i][d]transform(gscoord.h)</tt></b>
<dd>These always operate on the graphics state CTM.  The corresponding
operations on free-standing matrices are in <b><tt>gsmatrix.h</tt></b> and
have different names.
</dl>

<dl>
<dt><b><tt>gs_path_enum_alloc/init/next/cleanup(gspath.h)</tt></b>
<dd>Provide an "enumeration style" implementation of
<b><tt>pathforall</tt></b>.
</dl>

<dl>
<dt><b><tt>gs_image_enum_alloc(gsimage.h)</tt></b>
<dt><b><tt>gs_image_init/next/cleanup(gsimage.h)</tt></b>
<dd>Provide an "enumeration style" interface to the equivalent of
<b><tt>image</tt></b>, <b><tt>imagemask</tt></b>, and
<b><tt>colorimage</tt></b>.  In the <b><tt>gs_image_t</tt></b>,
<b><tt>ColorSpace</tt></b> provides an explicit color space, rather than
using the current color space in the graphics state;
<b><tt>ImageMask</tt></b> distinguishes <b><tt>imagemask</tt></b> from
<b><tt>[color]image</tt></b>.
</dl>

<dl>
<dt><b><tt>gs_get/putdeviceparams(gsdevice.h)</tt></b>
<dd>Take a <b><tt>gs_param_list</tt></b> for specifying or receiving the
parameter values.  See <b><tt>gsparam.h</tt></b> for more details.
</dl>

<dl>
<dt><b><tt>gs_show_enum_alloc/release(gschar.h)</tt></b>
<dt><b><tt>gs_xxxshow_[n_]init(gschar.h)</tt></b>
<dt><b><tt>gs_show_next(gschar.h)</tt></b>
<dd>Provide an "enumeration style" interface to writing text.  Note that
control returns to the caller if the character must be rasterized.
</dl>

<p>
This level of the library also implements the following operators from other
sections of the Manual:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Section<br>(operators)
	<td>&nbsp;&nbsp;
	<th align=left>Headers
	<td>&nbsp;&nbsp;
	<th align=left>Operators
<tr>	<td colspan=5><hr>
<tr valign=top>	<td>Interpreter parameter
	<td>&nbsp;
	<td><b><tt>gsfont.h</tt></b>
	<td>&nbsp;
	<td><b><tt>cachestatus</tt></b>, <b><tt>setcachelimit</tt></b>, <b><tt>*set/currentcacheparams</tt></b>
<tr valign=top>	<td>Display PostScript
	<td>&nbsp;
	<td><b><tt>gsstate.h</tt></b>
	<td>&nbsp;
	<td><b><tt>set/currenthalftonephase</tt></b>
</table></blockquote>

<p>
In order to obtain the full PostScript Level 2 functionality listed above,
<b><tt>FEATURE_DEVS</tt></b> must be set in the makefile to include at least the following:

<blockquote><b><tt>
FEATURE_DEVS=patcore.dev cmykcore.dev psl2core.dev dps2core.dev ciecore.dev path1core.dev hsbcore.dev
</tt></b></blockquote>

<p>
The <b><tt>*lib.mak</tt></b> makefiles mentioned below do not always
include all of these features.

<p>
Files named <b><tt>gs*.c</tt></b> implement the higher level of the
graphics library.  As might be expected, all procedures, variables, and
structures available at this level begin with "<b><tt>gs_</tt></b>".
Structures that appear in these interfaces, but whose definitions may be
hidden from clients, also have names beginning with "<b><tt>gs_</tt></b>",
that is, the prefix, not the implementation, reflects at what level the
abstraction is made available.

<h3><a name="Patterns"></a>Patterns</h3>

<p>
Patterns are the most complicated PostScript language objects that the
library API deals with.  As in PostScript, defining a pattern color and
using the color are two separate operations.

<p>
<b><tt>gs_makepattern</tt></b> defines a pattern color.  Its arguments are as follows:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=top>	<td><b><tt>gs_client_color *</tt></b>
	<td>&nbsp;&nbsp;&nbsp;
	<td>The resulting <b><tt>Pattern</tt></b> color is stored here.  This is different from PostScript, which has no color objects <em>per se</em>, and hence returns a modified copy of the dictionary.
<tr valign=top>	<td><b><tt>const gs_client_pattern *</tt></b>
	<td>&nbsp;
	<td>The analogue of the original <b><tt>Pattern</tt></b> dictionary, described in detail just below.
<tr valign=top>	<td><b><tt>const gs_matrix *</tt></b>
	<td>&nbsp;
	<td>Corresponds to the matrix argument of the <b><tt>makepattern</tt></b> operator.
<tr valign=top>	<td><b><tt>gs_state *</tt></b>
	<td>&nbsp;
	<td>The current graphics state.
<tr valign=top>	<td><b><tt>gs_memory_t *</tt></b>
	<td>&nbsp;
	<td>The allocator to use for allocating the saved data for the
	    <b><tt>Pattern</tt></b> color.  If this is
	    <b><tt>NULL</tt></b>, <b><tt>gs_makepattern</tt></b> uses the
	    same allocator that allocated the graphics state.  Library
	    clients should probably always use <b><tt>NULL</tt></b>.

</table></blockquote>

<p>
The <b><tt>gs_client_pattern</tt></b> structure defined in
<b><tt>gscolor2.h</tt></b> corresponds to the <b><tt>Pattern</tt></b>
dictionary that is the argument to the PostScript language
<b><tt>makepattern</tt></b> operator.  This structure has one extra member,
<b><tt>void&nbsp;*client_data</tt></b>, which is a place for clients to
store a pointer to additional data for the <b><tt>PaintProc</tt></b>; this
provides the same functionality as putting additional keys in the
<b><tt>Pattern</tt></b> dictionary at the PostScript language level.  The
<b><tt>PaintProc</tt></b> is an ordinary C procedure that takes as
parameters a <b><tt>gs_client_color&nbsp;*</tt></b>, which is the
<b><tt>Pattern</tt></b> color that is being used for painting, and a
<b><tt>gs_state&nbsp;*</tt></b>, which is the same graphics state that
would be presented to the <b><tt>PaintProc</tt></b> in PostScript.
Currently the <b><tt>gs_client_color&nbsp;*</tt></b> is always the current
color in the graphics state, but the <b><tt>PaintProc</tt></b> should not
rely on this.  The <b><tt>PaintProc</tt></b> can retrieve the
<b><tt>gs_client_pattern&nbsp;*</tt></b> from the
<b><tt>gs_client_color&nbsp;*</tt></b> with the
<b><tt>gs_getpattern</tt></b> procedure, also defined in
<b><tt>gscolor2.h</tt></b>, and from there, it can retrieve the
<b><tt>client_data</tt></b> pointer.

<p>
The normal way to set a <b><tt>Pattern</tt></b> color is to call
<b><tt>gs_setpattern</tt></b> with the graphics state and with the
<b><tt>gs_client_color</tt></b> returned by <b><tt>gs_makepattern</tt></b>.
After that, one can use <b><tt>gs_setcolor</tt></b> to set further
<b><tt>Pattern</tt></b> colors (colored, or uncolored with the same
underlying color space); the rules are the same as those in PostScript.
Note that for <b><tt>gs_setpattern</tt></b>, the
<b><tt>paint.values</tt></b> in the <b><tt>gs_client_color</tt></b> must be
filled in for uncolored patterns; this corresponds to the additional
arguments for the PostScript <b><tt>setpattern</tt></b> operator in the
uncolored case.

<p>
There is a special procedure <b><tt>gs_makebitmappattern</tt></b> for creating bitmap-based
patterns.  Its API is documented in <b><tt>gscolor2.h</tt></b>; its implementation, in
<b><tt>gspcolor.c</tt></b>, may be useful as an example of a pattern using a particularly
simple <b><tt>PaintProc.</tt></b>

<h3><a name="Lower_level_API"></a>Lower-level API</h3>

<p>
Files named <b><tt>gx*.c</tt></b> implement the lower level of the graphics
library.  The interfaces at the <b><tt>gx</tt></b> level are less stable,
and expose more of the implementation detail, than those at the
<b><tt>gs</tt></b> level: in particular, the <b><tt>gx</tt></b> interfaces
generally use device coordinates in an internal fixed-point representation,
as opposed to the <b><tt>gs</tt></b> interfaces that use floating point
user coordinates.  Named entities at this level begin with
<b><tt>gx_</tt></b>.

<p>
Files named <b><tt>gz*.c</tt></b> and <b><tt>gz*.h</tt></b> are internal to
the Ghostscript implementation, and are not designed to be called by
clients.

<hr>

<h2><a name="Visual_Trace"></a>Visual Trace instructions</h2>

<p>
Visual Trace instructions may be inserted in code to provide debug output in
a graphical form. Graphics Library doesn't provide a rasterisation of the
output, because it is platform dependent. Instead this, client application
shpuld set <b><tt>vd_trace0</tt></b> external variable to Graphics Library,
passing a set of callbacks which provide the rasterization.

<p>
Visual Trace instructions are defined in <b><tt>vdtrace.h</tt></b>.
Debug output must be opened with <b><tt>vd_get_dc</tt></b> instruction,
which obtains a drawing context for the debug output, and must be closed
with <b><tt>vd_release_dc</tt></b> instruction. After opening the output,
scale, origin and shift to be set for mapping the debugee coordinate space
to window coordinate space. Than painting instructions to be used.
Painting may be either immediate or indirect.

<p>
Indirect painting uses <b><tt>vd_beg_path</b></tt> before
line output and <b><tt>vd_end_path</b></tt> after line output,
to store a path into a temporary storage. After this 
<b><tt>vd_stroke</b></tt> may be used for stroking the path,
or <b><tt>vd_fill</b></tt> may be used for filling the region inside the path.

<p>
Immediate painting happens when path construction instructions are
involved without <b><tt>vd_beg_path</b></tt> and <b><tt>vd_end_path</b></tt>.
In this case lines and curves are being drawed immediately, when a path construction
instruction is executed.

<p>
The following table explains the semantics of Visual Trace instructions.
<p>

<table cellpadding=0 cellspacing=0>
<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Visual Trace instructions</font><hr>
<tr>	<th align=left>Instruction
        <td>&nbsp;&nbsp;
	<th align=left>Function
        <td>&nbsp;&nbsp;
	<th align=left>Parameters
<tr>	<td colspan=5><hr>
<tr>	<td><b><tt>vd_get_dc</tt></b>
        <td>&nbsp;&nbsp;
	<td>Obtain drawing context
        <td>&nbsp;&nbsp;
	<td><b><tt>-T</tt></b> option flag value, for which the subsequent output is enabled.
<tr>	<td><b><tt>vd_release_dc</tt></b>
        <td>&nbsp;&nbsp;
	<td>Release drawing context
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_enabled</tt></b>
        <td>&nbsp;&nbsp;
	<td>Is trace currently enabled ?
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_size_unscaled_x</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the horizontal size of the output window in pixels.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_size_unscaled_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the vertical size of the output window in pixels.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_size_caled_x</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the horizontal size of the output window in debuggee coordinate units.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_size_caled_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the vertical size of the output window in debuggee coordinate units.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_scale_x</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the horizontal scale.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_scale_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the vertical scale.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_origin_x</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the horizontal position of the draft origin in debuggee coordinate space.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_get_origin_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get the vertical position of the draft origin in debuggee coordinate space.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_set_scale(s)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set isotripic scale.
        <td>&nbsp;&nbsp;
	<td>Debugee space to window space mapping scale, same for both dimentions.
<tr>	<td><b><tt>vd_set_scaleXY(sx,sy)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set anisotripic scale.
        <td>&nbsp;&nbsp;
	<td>Debugee space to window space mapping scale, one for each dimention.
<tr>	<td><b><tt>vd_set_origin(x,y)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set the draft origin.
        <td>&nbsp;&nbsp;
	<td>Origin of the draft in debugee space.
<tr>	<td><b><tt>vd_set_shift(x,y)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set the draft position.
        <td>&nbsp;&nbsp;
	<td>Position of the draft origin in window space (in pixels).
<tr>	<td><b><tt>vd_set_central_shift</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set the draft position to window center.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_erase(c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Fill entire window.
        <td>&nbsp;&nbsp;
	<td>Color to fill.
<tr>	<td><b><tt>vd_beg_path</tt></b>
        <td>&nbsp;&nbsp;
	<td>Begin path construction.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_end_path</tt></b>
        <td>&nbsp;&nbsp;
	<td>End path construction.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_moveto(x,y)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Path construction : Set the draft current point.
        <td>&nbsp;&nbsp;
	<td>Debugee coordinates.
<tr>	<td><b><tt>vd_lineto(x,y)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Path construction : Line from current point to specified point.
        <td>&nbsp;&nbsp;
	<td>Debugee coordinates.
<tr>	<td><b><tt>vd_lineto_mupti(p,n)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Path construction : Poliline from current point to specified points.
        <td>&nbsp;&nbsp;
	<td>Array of points and its size, debugee coordinates.
<tr>	<td><b><tt>vd_curveto(x0,y0,x1,y1,x2,y2)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Path construction : Curve (3d order Bezier) from current point to specified point, with specified poles.
        <td>&nbsp;&nbsp;
	<td>2 poles and the curve ending point, debuggee coordinates.
<tr>	<td><b><tt>vd_closepath</tt></b>
        <td>&nbsp;&nbsp;
	<td>Path construction : Close the path (is necessary for filling an area).
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_bar(x0,y0,x1,y1,w,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Bar from point to point.
        <td>&nbsp;&nbsp;
	<td>2 points (debugee coordinates), width (in pixels) and color.
<tr>	<td><b><tt>vd_square(x0,y0,w,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Square with specified center and size.
        <td>&nbsp;&nbsp;
	<td>The center (debugee coordinates), size (in pixels) and color.
<tr>	<td><b><tt>vd_rect(x0,y0,x1,y1,w,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Canonic rectangle with specified coordinites.
        <td>&nbsp;&nbsp;
	<td>Coordinates of boundaries (debugee coordinates), line width (in pixels) and color.
<tr>	<td><b><tt>vd_quad(x0,y0,x1,y1,x2,y2,x3,y3,w,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Quadrangle with specified coordinites.
        <td>&nbsp;&nbsp;
	<td>Coordinates of vertices (debugee coordinates), line width (in pixels) and color.
<tr>	<td><b><tt>vd_curve(x0,y0,x1,y1,x2,y2,x3,y3,c,w)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Curve with width.
        <td>&nbsp;&nbsp;
	<td>4 curve poles (debugee coordinates), color, and width (in pixels).
<tr>	<td><b><tt>vd_circle(x,y,r,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Circle.
        <td>&nbsp;&nbsp;
	<td>Center (debugee coordinates), radius (in pixels) and color.
<tr>	<td><b><tt>vd_round(x,y,r,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Filled circle.
        <td>&nbsp;&nbsp;
	<td>Center (debugee coordinates), radius (in pixels) and color.
<tr>	<td><b><tt>vd_stroke</tt></b>
        <td>&nbsp;&nbsp;
	<td>Stroke a path constructed with vd_beg_path, vd_moveto, vd_lineto,
	    vd_curveto, vd_closepath, vd_end_path.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_fill</tt></b>
        <td>&nbsp;&nbsp;
	<td>Fill a path constructed with vd_beg_path, vd_moveto, vd_lineto,
	    vd_curveto, vd_closepath, vd_end_path.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>vd_setcolor(c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set a color.
        <td>&nbsp;&nbsp;
	<td>Color (an integer consisting of red, green, blue bytes).
<tr>	<td><b><tt>vd_setlinewidth(w)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set line width.
        <td>&nbsp;&nbsp;
	<td>Width (in pixels).
<tr>	<td><b><tt>vd_text(x,y,s,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Paint a text.
        <td>&nbsp;&nbsp;
	<td>Origin point (debugee coordinates), a string, and a color.
<tr>	<td><b><tt>vd_wait</tt></b>
        <td>&nbsp;&nbsp;
	<td>Delay execution until a resuming command is entered through user interface.
        <td>&nbsp;&nbsp;
	<td>
</table>


<p>
Graphics Library doesn't provide a rasterization of the debug output.
Instead it calls callbacks, which are specified by a client, and which may
have a platform dependent implementation. The implementation must not
use Graphics Library to exclude recursive calls to it from Visual Trace
instructions. The callbacks and auxiliary data are collected in
the structure <b><tt>vd_trace_interface</b></tt>, explained in the table below.
<p>

<table cellpadding=0 cellspacing=0>
<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">vd_trace_interface structure</font><hr>
<tr>	<th align=left>Field
        <td>&nbsp;&nbsp;
	<th align=left>Purpose
        <td>&nbsp;&nbsp;
	<th align=left>Parameters
<tr>	<td colspan=5><hr>
<tr>	<td><b><tt>host</tt></b>
        <td>&nbsp;&nbsp;
	<td>A pointer to the rasterizer control block - to be provided by client application.
	    The type of the fild is client dependent.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>scale_x, scale_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Scale of debugee coordinate to window coordinate mapping - internal work data, don't change.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>orig_x, orig_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Draft origin in debugee coordinates - internal work data, don't change.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>shift_x, shift_y</tt></b>
        <td>&nbsp;&nbsp;
	<td>Draft shift in window coordinates - internal work data, don't change.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>get_size_x(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get window width in pixels.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>get_size_y(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Get window height in pixels.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>get_dc(I,I1)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Obtain drawing context.
        <td>&nbsp;&nbsp;
	<td>Pointer to interface block, and pointer to copy of the pointer.
	    Implementation must set *I1 if it succeeds to get a drawing context.
<tr>	<td><b><tt>release_dc(I,I1)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Release drawing context.
        <td>&nbsp;&nbsp;
	<td>Pointer to interface block, and pointer to copy of the pointer.
	    Implementation must reset *I1 if it succeeds to release the drawing context.
<tr>	<td><b><tt>erase(I,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Erase entire window.
        <td>&nbsp;&nbsp;
	<td>Background color.
<tr>	<td><b><tt>beg_path(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Begin path construction.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>end_path(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>End path construction.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>moveto(I,x,y)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set current point.
        <td>&nbsp;&nbsp;
	<td>A point in window coordinates.
<tr>	<td><b><tt>lineto(I,x,y)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Line from current point to specified point.
        <td>&nbsp;&nbsp;
	<td>A point in window coordinates.
<tr>	<td><b><tt>curveto(I,x0,y0,x1,y1,x2,y2)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Curve from current point with specified poles to specified point.
        <td>&nbsp;&nbsp;
	<td>3 points in window coordinates.
<tr>	<td><b><tt>closepath(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Close the path.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>circle(I,x,y,r)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Circle.
        <td>&nbsp;&nbsp;
	<td>Center and radius, window coordinates.
<tr>	<td><b><tt>round(I,x,y,r)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Filled circle.
        <td>&nbsp;&nbsp;
	<td>Center and radius, window coordinates.
<tr>	<td><b><tt>fill(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Fill the path.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>stroke(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Stroke the path.
        <td>&nbsp;&nbsp;
	<td>
<tr>	<td><b><tt>setcolor(I,c)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set color.
        <td>&nbsp;&nbsp;
	<td>An integer, consisting of red, green, blue bytes.
<tr>	<td><b><tt>setlinewidth(I,w)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Set line width.
        <td>&nbsp;&nbsp;
	<td>Line width in pixels.
<tr>	<td><b><tt>text(I,x,y,s)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Draw a text.
        <td>&nbsp;&nbsp;
	<td>Coodrinates in pixels, and a string.
<tr>	<td><b><tt>wait(I)</tt></b>
        <td>&nbsp;&nbsp;
	<td>Delay execution untill resume command is inputted from user.
        <td>&nbsp;&nbsp;
	<td>
</table>



<p>
<hr>

<h2><a name="Full_example"></a>A full example</h2>

<p>
The file <b><tt>gslib.c</tt></b> in the Ghostscript fileset is a complete
example program that initializes the library and produces output using it;
files named <b><tt>*lib.mak</tt></b> (such as <b><tt>ugcclib.mak</tt></b>
and <b><tt>bclib.mak</tt></b>) are makefiles using <b><tt>gslib.c</tt></b>
as the main program.  The following annotated excerpts from this file are
intended to provide a roadmap for applications that call the library.

<blockquote><pre>/* Capture stdin/out/err before gs.h redefines them. */
#include &lt;stdio.h&gt;
static FILE *real_stdin, *real_stdout, *real_stderr;
static void
get_real(void)
{       real_stdin = stdin, real_stdout = stdout, real_stderr = stderr;
}</pre></blockquote>

<p>
Any application using Ghostscript should include the fragment above at the
very beginning of the main program.

<blockquote><pre>#include "gx.h"</pre></blockquote>

<p>
The <b><tt>gx.h</tt></b> header includes a wealth of declarations related
to the Ghostscript memory manager, portability machinery, debugging
framework, and other substrate facilities.  Any application file that calls
any Ghostscript API functions should probably include <b><tt>gx.h</tt></b>.

<blockquote><pre>/* Configuration information imported from gconfig.c. */
extern gx_device *gx_device_list[];

/* Other imported procedures */
        /* from gsinit.c */
extern void gs_lib_init(P1(FILE *));
extern void gs_lib_finit(P2(int, int));
        /* from gsalloc.c */
extern gs_ref_memory_t *ialloc_alloc_state(P2(gs_memory_t *, uint));</pre></blockquote>

<p>
The externs above are needed for initializing the library.

<blockquote><pre>        gs_ref_memory_t *imem;
#define mem ((gs_memory_t *)imem)
        gs_state *pgs;
        gx_device *dev = gx_device_list[0];

        gp_init();
        get_real();
        gs_stdin = real_stdin;
        gs_stdout = real_stdout;
        gs_stderr = real_stderr;
        gs_lib_init(stdout);
        ....
        imem = ialloc_alloc_state(&amp;gs_memory_default, 20000);
        imem-&gt;space = 0;
        ....
        pgs = gs_state_alloc(mem);</pre></blockquote>

<p>
The code above initializes the library and its memory manager.  <b><tt>pgs</tt></b> now
points to the graphics state that will be passed to the drawing routines in
the library.

<blockquote><pre>        gs_setdevice_no_erase(pgs, dev);    /* can't erase yet */
        {   gs_point dpi;
            gs_screen_halftone ht;
            gs_dtransform(pgs, 72.0, 72.0, &amp;dpi);
            ht.frequency = min(fabs(dpi.x), fabs(dpi.y)) / 16.001;
            ht.angle = 0;
            ht.spot_function = odsf;
            gs_setscreen(pgs, &amp;ht);
        }</pre></blockquote>

<p>
The code above initializes the default device and sets a default halftone
screen.  (For brevity, we have omitted the definition of odsf, the spot
function.)

<blockquote><pre>        /* gsave and grestore (among other places) assume that */
        /* there are at least 2 gstates on the graphics stack. */
        /* Ensure that now. */
        gs_gsave(pgs);</pre></blockquote>

<p>
The call above completes initializing the graphics state.  When the program
is finished, it should execute:

<blockquote><pre>        gs_lib_finit(0, 0);</pre></blockquote>

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
All rights reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>AFPL Ghostscript maintenance procedures</title>
<!-- $Id: Maintain.htm,v 1.40 2003/12/08 23:17:15 giles Exp $ -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>AFPL Ghostscript maintenance procedures</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Introduction">Introduction</a>
<li><a href="#Problem_reporting">Problem reporting</a>
<ul>
<li><a href="#Uploading_test_data">Uploading test data</a>
</ul>
<li><a href="#CVS">Rules for CVS commits</a>
<li><a href="#Adding_or_removing_files">Adding or Removing Files</a>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a> and the instructions on how to <a href="Make.htm">build
Ghostscript</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Introduction"></a>Introduction</h2>

<p>
This document describes various maintenance procedures associated with AFPL
Ghostscript.  It is only meant for developers actively working on AFPL
Ghostscript; some parts of it are only relevant to developers who have 
commit access to the source repository.

<hr>

<h2><a name="Problem_reporting"></a>Problem reporting</h2>

<h3><a name="#Uploading_test_data"></a>Uploading test data</h3>

<p>
If a test file can't be attached to the report in the public 
bug tracking system, put it in <tt>casper:/home/support/<bug number>/</tt>.
This is a good place to collect test files of all kinds.

<hr>

<h2><a name="CVS"></a>Rules for CVS Commits</h2>

<p>
The primary repository for Ghostscript code is
<a href="http://cvs.ghostscript.com" class="offsite">cvs.ghostscript.com</a>
This section describes a few rules intended to make life easier
for people working with this code base.

<p>
At any given time, there are usually two active branches: a stable
branch and a development branch. The development branch is HEAD, which
is the default when doing a checkout without a -r flag. The stable 
branch is tagged after the previous major release. For example:
GS_8_0x, GS_7_0x, GS_6_5.

<p>
A concise and useful document for working with CVS branches is Jeff
Semke's <a href="http://www.psc.edu/~semke/cvs_branches.html"
class="offsite">CVS
Branch and Tag Primer</a>. A
somewhat more detailed explanation is the <a
href="http://www.loria.fr/~molli/cvs/doc/cvs_5.html"
class="offsite">Branching and
merging</a> section from the CVS documentation by Pascal Molli.

<p>
For new development commits, you can basically ignore the
branches. Just commit to the HEAD branch. For bug fixes for the stable
branch, it is your responsibility to commit to both the stable branch
and, if appropriate, HEAD.

<p>
When modifying a number of files for a single issue, please group them
together as a single commit. For two separate sets of changes dealing
with two different issues, there should be two commits.

<p>
You should strive not to introduce any new bugs with your
commit. Always make sure the code compiles before committing. Test the
changes with several files, including the problem file in the case of
a bug fix, and other files that may have been affected by the
changes.

<p>
Always supply a descriptive log message for your commits. These log
messages are used to automatically generate the <a
href="News.htm">News.htm</a> file and History changelogs, and are also
crucial for navigating the change history. Please try to
keep the style of the descriptions similar to those in the current
History#.htm files.

<p>
Log messages beginning with 'Fix' are treated specially. Such messages are
put under the "Fixes problems" heading when the History files are
generated. Additionally, if the first four characters are 'Fix:' this is removed
(i.e., "Fix: The xyz" becomes "The xyz", but "Fixes xyz" is copied unchanged). 
This feature is intended for explicit bugfixes and should be avoided for 
enhancements or commits with long explanations.

<p>
Information about who changed what, when, and why is maintained in the
CVS logs. In general, a file should be a clean representation of the
current version rather than a history trail of how it got
there. Keeping old code around for reference is usually not necessary,
as it is stored in the CVS diffs. When necessary, use #if / #endif, or
descriptive conditionals such as #ifdef OLD_CMAP_TABLES. Do not
comment out old code. (A very few files that are distributed separate
from Ghostscript have a change log at the beginning, which should be
maintained: currently, only ansiknr.c and md5.[ch].)

<p>
Additionally, if your patch removes a feature, changes an interface or
otherwise creates an incompatibility with the last release, you
must add an entry to the "Incompatible changes" section of <tt>News.htm</tt>
as this information can only be generated manually.
This admonition applies to api changes that might
affect other developers as well as user issues like switch behavior.
Upon release, the accumulated incompatible changes will be moved to the 
relevant History file, and the News collection in cvs will be wiped clean 
for the next version.

<p>
All patches should be reviewed before being committed. Please email your
patch to <a
href="mailto:gs-code-review@ghostscript.com">gs-code-review@ghostscript.com</a>.
Make sure to include your commit comment and any other information
that would be helpful for the review. Also, please identify which
branches the patch is intended for. The code review list is also
a good place to put extensive documentation on changes (motivation and
associated reasoning for example) that are too verbose for the cvs
changelog.

<p>
If you are not an employee or consultant of Artifex or artofcode, then
we need a copyright assignment form so we can incorporate your
changes. Please email Raph Levien &lt;<a
href="mailto:raph@artofcode.com">raph@artofcode.com</a>&gt; and
include your snailmail address for a hardcopy assignment form.

<h2><a name="Adding_or_removing_files"></a>Adding or removing files</h2>

<p>
When adding or removing files, don't forget to invoke <b><tt>cvs
add</tt></b> or <b><tt>cvs rm</tt></b>.

<p>
When adding files, update the file roadmap in
<b><tt>doc/Develop.htm</tt></b>.

<p>
When adding or removing files other than .c or .h: If the files will be
used at runtime, check the install list in <b><tt>unixinst.mak</tt></b>.

<p>
When adding .c files, update the relevant <b><tt>.mak</tt></b> file
(usually <b><tt>devs.mak</tt></b>, <b><tt>int.mak</tt></b>, or
<b><tt>lib.mak</tt></b>).

<p>
When adding new documentation, add a link to <tt>doc/Readme.htm</tt> and
a short blurb describing the contents of the file.

<p>
When adding or changing fonts, update <b><tt>lib/Fontmap.GS</tt></b>,
<b><tt>fonts.mak</tt></b>, and possibly the compiled fonts in
<b><tt>gs.mak</tt></b> and the examples in
<b><tt>doc/Fonts.htm</tt></b>.

<p>
When adding .ps files, update <b><tt>doc/Psfiles.htm</tt></b>.

<p>
Likewise, you will want to delete any references for a file you
remove from Ghostscript.

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 2000-2002 artofcode LLC.
All rights reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>How to build Ghostscript from source code</title>
<!-- $Id: Make.htm,v 1.70 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: make.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>How to build Ghostscript from source code</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#General_overview">General overview</a>
<li><a href="#Acquiring">How to acquire the source code</a>
<ul>
<li><a href="#Ghostscript_source">Ghostscript source code</a>
<li><a href="#Third-party_libraries">Third-party library source code</a>
</ul>
<li><a href="#Unpack">How to unpack the source code</a>
<ul>
<li><a href="#Tarfiles">How to unpack compressed tar files generally</a>
<li><a href="#Zipfiles">How to unpack zip files generally</a>
<li><a href="#Unpack_Ghostscript">How to unpack Ghostscript itself</a>
<li><a href="#Unpack_libraries">How to unpack the third-party libraries</a>
</ul>
<li><a href="#Bug_check">How to check for post-release bug fixes</a>
<li><a href="#Makefile_overview">How to prepare the makefiles</a>
<ul>
<li><a href="#Preparing_makefiles">Changes for your environment</a>
<li><a href="#Features_and_devices">Selecting features and devices</a>
<ul>
<li><a href="#Precompiled_data">Precompiled run-time data</a>
<li><a href="#GNU_readline">GNU readline</a>
</ul>
<li><a href="#Makefile_setup">Setting up "makefile"</a>
<li><a href="#Invoke_make">Invoking "make"</a>
<li><a href="#Cross-compiling">Cross-compiling</a>
</ul>
<li><a href="#PC_build">How to build Ghostscript from source (PC version)</a>
<ul>
<li><a href="#Borland_build">Borland/Inprise environment</a>
<li><a href="#Microsoft_build">Microsoft environment</a>
<li><a href="#Self-extracting_executables">Making self-extracting executables</a>
<li><a href="#Watcom_build">Watcom environment</a>
<li><a href="#Cygwin32_build">Cygwin32 gcc</a>
<li><a href="#IntelWin32_build">Intel C/C++ compiler</a>
</ul>
<li><a href="#Mac_build">How to build Ghostscript from source (MacOS version)</a>
<ul>
<li><a href="#MacOS">Traditional MacOS</a>
<li><a href="#MacOSX">MacOS X</a>
</ul>
<li><a href="#Unix_build">How to build Ghostscript from source (Unix version)</a>
<ul>
<li><a href="#Multi_architecture_makefile">The multi-architecture makefile</a>
<li><a href="#UNIX_makefile">Setting up "makefile"</a>
<li><a href="#Shared_object">Shared object</a>
<li><a href="#Tool_specific_issues">Tool-specific issues</a>
<ul>
<li><a href="#gcc_27x">gcc 2.7.*</a>
<li><a href="#GNU_make">GNU make</a>
</ul>
<li><a href="#OS_specific_issues">OS-specific issues</a>
<ul>
<li><a href="#386_Unix">386 Unix</a>
<li><a href="#BSDI">BSDI</a>
<li><a href="#Digital_Unix">Digital Unix (Alpha)</a>
<li><a href="#Linux">Linux</a>
<li><a href="#NeXTSTEP">NeXTSTEP / OpenSTEP</a>
<li><a href="#SCO">SCO Unix/Xenix</a>
<li><a href="#SVR4">SVR4 Unix</a>
<li><a href="#System_V">System V Unix platforms</a>
<li><a href="#Unixware">Unixware</a>
</ul>
<li><a href="#Hardware_specific_issues">Hardware-specific issues</a>
<ul>
<li><a href="#Alpha_with_gcc">Alpha with gcc</a>
<li><a href="#Apollo">H-P Apollo</a>
<li><a href="#ATT_7040">AT&amp;T 7040 R3</a>
<li><a href="#Convex">Convex</a>
<li><a href="#DECStations">DECStations with Ultrix</a>
<li><a href="#HP_RISC">H-P RISC workstations</a>
<li><a href="#Intergraph">Intergraph Clipper</a>
<li><a href="#MIPS">MIPS</a>
<li><a href="#NCR_3550">NCR 3550</a>
<li><a href="#Pyramid">Pyramid MIServer-S</a>
<li><a href="#RS6000">IBM RS/6000 with AIX</a>
<li><a href="#Silicon_Graphics">Silicon Graphics</a>
<li><a href="#Sun">Sun</a>
<li><a href="#SunOS">SunOS</a>
<li><a href="#Solaris">Solaris</a>
<li><a href="#VAX_Ultrix">VAX with Ultrix</a>
</ul>
</ul>
<li><a href="#OS2_build">How to build Ghostscript from source (OS/2 version)</a>
<li><a href="#VMS_build">How to build Ghostscript from source (OpenVMS version)</a>
<ul>
<li><a href="#GNU_make_VMS">Building with GNU make on OpenVMS</a>
<li><a href="#MMK_MMS_VMS">Building with MMK or MMS on OpenVMS</a>
</ul>
<li><a href="#Other_environments">Other environments</a>
<ul>
<li><a href="#No_multi_thread">Environments lacking multi-threading</a>
<li><a href="#Plan_9">Plan 9</a>
<li><a href="#QNX">QNX</a>
</ul>
<li><a href="#UFST_build">How to build Ghostscript with UFST</a>
<li><a href="#FT_build">How to build Ghostscript with Free Type</a>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a> and the instructions on how to <a href="Install.htm">install
Ghostscript</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="General_overview"></a>General overview</h2>

<p>
This document describes how to build a Ghostscript executable from source
code.  There are four major steps to building Ghostscript:

<ol>
<li>Acquire the compressed archive files of source code for Ghostscript and
the required third-party libraries.
<li>Unpack the archive files into the Ghostscript directory and correctly
named subdirectories.
<li>Configure the build to match your system and desired configuration options.
<li>Invoke "<b><tt>make</tt></b>" to build the software.
</ol>

<p>
The remainder of this document describes each of these steps in detail.
Note that some of this process is platform-dependent.  After building
Ghostscript you must then install it; for that, see the
<a href="Install.htm">installation instructions</a>.

<hr>

<h2><a name="Acquiring"></a>How to acquire the source code</h2>

<p>
Building Ghostscript requires the Ghostscript source code itself, and also
the source code for some third-party libraries that Ghostscript uses.

<h3><a name="Ghostscript_source"></a>Ghostscript source code</h3>

<p><a name="Authoritative_distribution_site"></a>
There are two kinds of Ghostscript distributions available, called "AFPL
Ghostscript" and "GNU Ghostscript"; the distinction between them is
explained in the <a href="Commprod.htm">conditions for distributing
Ghostscript</a>.  The authoritative distribution site for AFPL
Ghostscript is

<blockquote>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/</a>gs###
</blockquote>

<p>
where "###" is the unpunctuated version number.  GNU Ghostscript should be
available on all GNU sites, such as

<blockquote>
<a href="ftp://ftp.gnu.org/pub/gnu/"
class="offsite">ftp://ftp.gnu.org/pub/gnu/</a>
</blockquote>

<p>
Ghostscript source code is packaged in two different formats:
gzip-compressed tar files (*<b><tt>.tar.gz</tt></b>) and zip files
(*<b><tt>.zip</tt></b>).  For all versions there are gzip-compressed tar
files:

<blockquote>
<b><tt>ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b><br>
<b><tt>ghostscript-fonts-std-</tt></b>#.##<b><tt>.tar.gz</tt></b><br>
<b><tt>ghostscript-fonts-other-</tt></b>#.##<b><tt>.tar.gz</tt></b>
</blockquote>

<p>For recent versions of Ghostscript there are also zip files

<blockquote>
<b><tt>gs</tt></b>###<b><tt>src.zip</tt></b><br>
<b><tt>gs</tt></b>###<b><tt>w32.exe</tt></b>
</blockquote>

<p>
("#.##" and "###" are version numbers in punctuated and unpunctuated form.)
Software to decompress and extract both formats is available for almost
every platform for which Ghostscript is available -- including Unix, DOS,
MS Windows, and VMS -- so you can choose the format most convenient for
you; but it's up to you to locate that software.  See the section on <a
href="#Unpack">unpacking the source code</a>.

<h3><a name="Third-party_libraries"></a>Third-party library source code</h3>

<p>
To build Ghostscript you need the source code for the <a
href="http://www.ijg.org/">Independent JPEG Group</a> (IJG) library, the
<a href="http://www.libpng.org/pub/png/">Portable Network Graphics</a>
(PNG)
library, and the <a
href="http://www.gzip.org/zlib/">zlib</a>
compression and decompression library. The default build also expects source
for the <a href="http://jbig2dec.sourceforge.net">jbig2dec</a> JBIG2 decompression
library.

<p>
On Windows and MacOS, the .zip and .sit source archives include the appropriate 
source versions of these libraries, so no additional downloads are necessary.
Unix tarballs may also contain appropriate library source; the configure script
will tell you if it cannot find the appropriate libraries.

<p>
Here are authoritative distribution points for these libraries, should you need
to obtain the source yourself. As elsewhere, "#" is used for version
numbers.  The JPEG source code is quite stable, so the reference
here includes the latest version number.  The zlib references are
version-independent and should always provide the latest version.

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Third-party libraries: authoritative sources</font><hr>
<tr>	<td valign=top>JPEG
	<td>&nbsp;&nbsp;&nbsp;
	<td><a href="ftp://ftp.uu.net/graphics/jpeg/" 
class="offsite">ftp://ftp.uu.net/graphics/jpeg/</a><a
href="ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz" 
class="offsite">jpegsrc.v6b.tar.gz</a><br>
	<a href="ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/" 
class="offsite">ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/</a><a
href="ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/jpegsr6b.zip">jpegsr6b.zip</a>

<tr>	<td valign=top>PNG
	<td>&nbsp;
	<td><a href="http://www.libpng.org/pub/png/src/" 
class="offsite">http://www.libpng.org/pub/png/src/</a>libpng-#.#.#.tar.gz<br>
	<a href="http://www.libpng.org/pub/png/src/" 
class="offsite">http://www.libpng.org/pub/png/src/</a>lpng###.zip<br>
	<a href="ftp://swrinde.nde.swri.edu/pub/png/src/" 
class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/</a>libpng-#.#.#.tar.gz<br>
	<a href="ftp://swrinde.nde.swri.edu/pub/png/src/" 
class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/</a>lpng###.zip

<tr>	<td valign=top>zlib (latest)
	<td>&nbsp;
	<td>	<a href="http://www.gzip.org/zlib/zlib.tar.gz" 
class="offsite">http://www.gzip.org/zlib/zlib.tar.gz</a><br>
	<a href="http://www.gzip.org/zlib/zlib.zip" 
class="offsite">http://www.gzip.org/zlib/zlib.zip</a><br>
	<a href="ftp://swrinde.nde.swri.edu/pub/png/src/" class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/zlib-#.#.#.tar.gz</a><br>
	<a href="ftp://swrinde.nde.swri.edu/pub/png/src/" class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/zlib###.zip</a>

<tr>	<td valign=top>jbig2dec
	<td>&nbsp;
	<td>	<a href="http://sourceforge.net/project/showfiles.php?group_id=28301" 
class="offsite">http://sourceforge.net/project/showfiles.php?group_id=28301</a><br>
</table></blockquote>

<p>
On DOS or MS Windows one ordinarily uses the zip file kits, in other
environments the compressed tar files, but this is simply a matter of
convenience, since for the same version of the software the compressed tar
file has the same contents as the zip file.  Note that each of these
libraries has <b><em>its own version number</em></b> that has
<b><em>nothing to do with Ghostscript's version number</em></b>; you should
get the highest numbered version.  (If you encounter difficulties in the
build process you might have to use a lower-numbered version, but don't
worry about this yet.)  If you're running Linux, you might check whether
these libraries are already available in source form on your system, since
many Linux distributors include them; but we advise you to get the highest
version from the Net if you can.

<hr>

<h2><a name="Unpack"></a>How to unpack the source code</h2>

<p>
Unfortunately there are no generally accepted standards for how to package
source code into archives, so the instructions for unpacking Ghostscript are
longer than they should be.  We begin with a brief explanation of how to
extract the two kinds of archive files.

<h3><a name="Tarfiles"></a>How to unpack compressed tar files generally</h3>

<p>
Tar (<b><tt>.tar</tt></b>) files are the <em>de facto</em> standard for
archiving files on Unix (every Unix system has the <b><tt>tar</tt></b>
program), and programs to extract their contents are also widely available
for DOS, MS Windows, and VMS. To economize on space and downloading time,
Ghostscript's tar files are compressed with GNU <b><tt>gzip</tt></b>, which
adds the suffix "<b><tt>.gz</tt></b>" to the file name, giving
"<b><tt>.tar.gz</tt></b>".

<p>
To unpack a compressed tar file <b><tt>MyArchive.tar.gz</tt></b> you
must both decompress it and extract the contents.  You can do this in two
steps, one to decompress the file and another to unpack it:

<blockquote>
<b><tt>gzip -d MyArchive.tar.gz</tt></b>
<br><b><tt>tar -xf MyArchive.tar</tt></b>
</blockquote>

<p>
or in a pipeline:

<blockquote>
<b><tt>gzip -d -c MyArchive.tar.gz | tar -xf -</tt></b>
</blockquote>

<p>
or, if you have a program like GNU <b><tt>tar</tt></b> that can handle
compressed tar files, with a single command:

<blockquote>
<b><tt>tar -zxf MyArchive.tar.gz</tt></b>
</blockquote>

<p>
The <b><tt>tar</tt></b> program automatically preserves directory structure
in extracting files.  The Ghostscript source archive puts all files under a
directory <b><tt>gs</tt></b>#.##, so using <b><tt>tar</tt></b> to unpack a
compressed archive should always properly create that directory, which we
will call the "gs directory".  Make sure you're positioned in the
<b><em>parent</em></b> of the gs directory <b><em>before</em></b> unpacking
the files.  If a subdirectory doesn't already exist, <b><tt>tar</tt></b>
creates it.

<p>
Some other programs -- under MS Windows, for instance -- can also unpack
compressed tar files, but they may not automatically preserve directory
structure nor even extract files into the current directory.  If you use
one of these, you must

<ul>
<li>set the program's options to "Use folder names" or the equivalent, and
<li>check that it is extracting files into the right place.
</ul>

<h3><a name="Zipfiles"></a>How to unpack zip files generally</h3>

<p>
Zip files are the <em>de facto</em> standard for archiving files on DOS and
MS Windows, and programs to extract their contents are widely available for
DOS, MS Windows, Unix, VMS, and other platforms.  Zip files are at once an
archive format and a compressed format, so an unzipping program
decompresses and extracts archived files as a single step.

<p>
One common 16-bit DOS program is <b><tt>pkunzip</tt></b>, which comes in
the <b><tt>pkzip</tt></b> package. If you use this, you should ensure that
you have at least version 2.04g, because with its <b><tt>-d</tt></b>
switch, that version of <b><tt>pkunzip</tt></b> preserves the directory
structure of archived files when extracting them; see below.  Another
popular free program to unpack zip archives, available for DOS and MS
Windows (16-bit and 32-bit), Unix, VMS, and other platforms, is InfoZIP
<b><tt>unzip</tt></b>:

<blockquote>
<a href="http://www.info-zip.org/pub/infozip/UnZip.html" 
class="offsite">http://www.info-zip.org/pub/infozip/UnZip.html</a>
</blockquote>

<p>
Unlike <b><tt>pkunzip</tt></b>, InfoZIP <b><tt>unzip</tt></b> automatically
preserves the directory structure of extracted files.  So if you have a zip
archive <b><tt>MyArchive.zip</tt></b>:

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Extracting zipped files</font><hr>
<tr valign=bottom>
	<th align=left>Command
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>Preserves directory structure
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>pkunzip MyArchive.zip</tt></b>
	<td>&nbsp;
	<td>Does <b><em>NOT</em></b>
<tr valign=top>	<td><b><tt>pkunzip -d MyArchive.zip</tt></b>
	<td>&nbsp;
	<td><b><em>DOES</em></b> (note the <b><tt>-d</tt></b> switch)
<tr valign=top>	<td><b><tt>unzip MyArchive.zip</tt></b>
	<td>&nbsp;
	<td><b><em>DOES</em></b>
</table></blockquote>

<p>
As with the compressed tar files, make sure you're positioned in the
<b><em>parent</em></b> of the gs directory <b><em>before</em></b> unpacking
the files.  If a subdirectory doesn't already exist, <b><tt>zip</tt></b> or
<b><tt>pkunzip&nbsp;-d</tt></b> creates it.

<h3><a name="Unpack_Ghostscript"></a>How to unpack Ghostscript itself</h3>

<p>
At this point you have <a href="#Acquiring">acquired all the source code</a>
and are ready to unpack it according to the preceding guidelines for <a
href="#Tarfiles">tar files</a> or <a href="#Zipfiles">zip files</a>.  To
unpack the Ghostscript source, make the <b><em>parent</em></b> of the (new)
gs directory the current directory.

<blockquote><table cellpadding=0 cellspacing=0>
<tr>	<th align=left valign=top>2-step:
	<td>&nbsp;&nbsp;&nbsp;
	<td><b><tt>gzip -d ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b><br><b><tt>tar -xf ghostscript-</tt></b>#.##<b><tt>.tar</tt></b>
<tr><td>
<tr>	<th align=left valign=top>Pipe:
	<td>&nbsp;
	<td><b><tt>gzip -d -c ghostscript-</tt></b>#.##<b><tt>.tar.gz | tar -xf -</tt></b>
<tr><td>
<tr>	<th align=left valign=top>GNU <b><tt>tar</tt></b>:
	<td>&nbsp;
	<td><b><tt>tar -zxf ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b>
<tr><td>
<tr>	<th align=left valign=top><b><tt>pkunzip</tt></b>:
	<td>&nbsp;
	<td><b><tt>pkunzip -d gs</tt></b>###<b><tt>sr1.zip</tt></b><br><b><tt>pkunzip -d gs</tt></b>###<b><tt>sr2.zip</tt></b><br>...
<tr><td>
<tr>	<th align=left valign=top><tt>unzip</tt>:
	<td>&nbsp;
	<td><b><tt>unzip gs</tt></b>###<b><tt>src.zip</tt></b>
</table></blockquote>

<p>
All the Ghostscript source files are now in subdirectories of the gs
directory.

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Source subdirectories</font><hr>
<tr>	<th valign=bottom align=left>Subdirectory
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th valign=bottom align=left>Contents
<tr>	<td colspan=5><hr>
<tr>	<td><b><tt>src/</tt></b>
	<td>&nbsp;
	<td>C source code and makefiles
<tr>	<td><b><tt>lib/</tt></b>
	<td>&nbsp;
	<td>PostScript files and scripts used when running Ghostscript
<tr>	<td><b><tt>doc/</tt></b>
	<td>&nbsp;
	<td>Documentation
<tr>	<td><b><tt>man/</tt></b>
	<td>&nbsp;
	<td>Unix <b><tt>man</tt></b> pages
<tr>	<td><b><tt>examples/</tt></b>
	<td>&nbsp;
	<td>Sample PostScript files
</table></blockquote>

<h3><a name="Unpack_libraries"></a>How to unpack the third-party libraries</h3>

<p>
The Ghostscript makefiles expect to find the JPEG, PNG, and zlib source code
in specific subdirectories of the <b><tt>gs</tt></b> directory, and this
means you must pay careful attention to unpacking the source code for these
packages.  Use the same method for all of them, no matter how they're
packaged:

<ol>
<li>Make the gs directory current.
<li>Unpack the archive file, creating a subdirectory (which will include a
version number).
<li>Whatever the subdirectory's original name, rename it to the versionless
name shown just below.
</ol>

<p>
If you're uncertain how to unpack an archive, review the sections on <a
href="#Tarfiles">compressed tar files</a> and <a href="#Zipfiles">zip
files</a>.

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">3d-party software subdirectories</font><hr>
<tr>	<th valign=bottom align=left>Package
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th valign=bottom align=left>Possible<br>original name
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th valign=bottom align=left>Rename to
<tr>	<td colspan=5><hr>
<tr>	<td>JPEG
	<td>&nbsp;
	<td><b><tt>./jpeg-6b</tt></b>
	<td>&nbsp;
	<td><b><tt>./jpeg</tt></b>
<tr>	<td>PNG
	<td>&nbsp;
	<td><b><tt>./libpng-</tt></b>#.##
	<td>&nbsp;
	<td><b><tt>./libpng</tt></b>
<tr>	<td>zlib
	<td>&nbsp;
	<td><b><tt>./zlib-</tt></b>#.#.#
	<td>&nbsp;
	<td><b><tt>./zlib</tt></b>
</table></blockquote>

<hr>

<h2><a name="Bug_check"></a>How to check for post-release bug fixes</h2>

<p>
Bug information and fixes are tracked on Ghostscript Bugzilla.
For more information, please visit

<blockquote>
<a href="http://bugs.ghostscript.com">
http://bugs.ghostscript.com</a>
</blockquote>

<hr>

<h2><a name="Makefile_overview"></a>How to prepare the makefiles</h2>

<p>
The Ghostscript makefiles are very large and complex in order to deal with
the diverse requirements of all the different systems where they may be
used.

<p>
Ghostscript has an automatic configuration script. If you're on unix or
a system that supports unix shell scripts, this is the easiest option to use.
Simply type:

<blockquote><pre>
./configure
</blockquote>

from the top level of the ghostscript source directory. It should configure
itself based on what's available on your system, warn you of any missing
dependencies, and generate a Makefile. At this point you can skip to the
section <a href="#Invoke_make">invoking make</a> below. Also, many common 
configuration options (like install location) can be set through options 
to the configure script. Type '<tt>./configure --help</tt>' for a complete
listing. Note that the configuration option is only available with the 
unix .tar distributions of the source.

<p>
If your system doesn't support the configure script or you don't wish to
use it, you can use the traditional ghostscript makefile system, editing
the options by hand to match your system as described below.
Fortunately, the only makefiles you're likely to want to change are
relatively small ones containing platform-specific information.

<blockquote><a name="Platform-specific_makefiles"></a><table cellpadding=0 cellspacing=0>
<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-specific makefiles</font><hr>
<tr>	<th align=left>Makefile
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<th align=left>Used for
<tr>	<td colspan=3><hr>
<tr>	<td><b><tt>Makefile.in</tt></b>
	<td>&nbsp;
	<td>Template makefile for the autoconf build
<tr>	<td><b><tt>bcwin32.mak</tt></b>
	<td>&nbsp;
	<td>MS Windows with Borland/Inprise compilers
<tr>	<td><b><tt>msvc32.mak</tt></b>
	<td>&nbsp;
	<td>MS Windows with Microsoft Visual C++ version 4 to 7.
<tr>	<td><b><tt>openvms.mak</tt></b>
	<td>&nbsp;
	<td>OpenVMS
<tr>	<td><b><tt>os2.mak</tt></b>
	<td>&nbsp;
	<td>OS/2 with the gcc/emx compiler
<tr>	<td><b><tt>unix-gcc.mak</tt></b>
	<td>&nbsp;
	<td>Unix with gcc
<tr>	<td><b><tt>unixansi.mak</tt></b>
	<td>&nbsp;
	<td>Unix with ANSI C compilers other than gcc
<tr>	<td><b><tt>watcw32.mak</tt></b>
	<td>&nbsp;
	<td>MS Windows with Watcom compilers
<tr>	<td>&nbsp;
<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-independent makefiles</font><hr>
<tr>	<td><b><tt>contrib.mak</tt></b>
	<td>&nbsp;
	<td>Contributed device drivers
<tr>	<td><b><tt>devs.mak</tt></b>
	<td>&nbsp;
	<td>Maintained device drivers
<tr>	<td><b><tt>gs.mak</tt></b>
	<td>&nbsp;
	<td>Documentation and miscellany
<tr>	<td><b><tt>icclib.mak</tt></b>
	<td>&nbsp;
	<td>ICC color correction library
<tr>	<td><b><tt>ijs.mak</tt></b>
	<td>&nbsp;
	<td>IJS raster driver library
<tr>	<td><b><tt>int.mak</tt></b>
	<td>&nbsp;
	<td>Main makefile for the PostScript &amp; PDF interpreter
<tr>	<td><b><tt>jpeg.mak</tt></b>
	<td>&nbsp;
	<td>JPEG library
<tr>	<td><b><tt>lib.mak</tt></b>
	<td>&nbsp;
	<td>Graphics engine
<tr>	<td><b><tt>libpng.mak</tt></b>
	<td>&nbsp;
	<td>PNG library
<tr>	<td><b><tt>version.mak</tt></b>
	<td>&nbsp;
	<td>Version and release date
<tr>	<td><b><tt>zlib.mak</tt></b>
	<td>&nbsp;
	<td>zlib library
</table></blockquote>

<p>
Since these files change from one Ghostscript version to another, sometimes
substantially, and since they all include documentation for the various
options, here we don't duplicate most of that documentation: we recommend
strongly that you review the entire makefile specific for your operating
system and compiler before building Ghostscript.

<h3><a name="Preparing_makefiles"></a>Changes for your environment</h3>

<p>
You must edit the platform-specific makefile to change any of these:

<ul>
<li>The name of the makefile itself (<b><tt>MAKEFILE</tt></b> macro)
<li>The locations to install Ghostscript files (<b><tt>prefix</tt></b> etc.)
<li>The default search paths for the initialization and font files
(<b><tt>GS_LIB_DEFAULT</tt></b> macro)
<li>The debugging options (<b><tt>DEBUG</tt></b> and <b><tt>TDEBUG</tt></b>
macros)
<li>Which optional features to include (<b><tt>FEATURE_DEVS</tt></b>)
<li>Which device drivers to include (<b><tt>DEVICE_DEVS</tt></b> and
<b><tt>DEVICE_DEVS</tt></b>{<em>1--20</em>} macros)
<li>Default resolution parameters for some printer drivers
(<b><tt>devs.mak</tt></b> or <b><tt>contrib.mak</tt></b>, whichever defines
the driver)

</ul>

<p>
The <a href="#Platform-specific_makefiles">platform-specific makefiles</a>
include comments describing all these except the
<b><tt>DEVICE_DEVS</tt></b> options.  These are described in
<b><tt>devs.mak</tt></b> and <b><tt>contrib.mak</tt></b>, even though the
file that must be edited to select them is the <a
href="#Platform-specific_makefiles">platform-specific makefile</a>.  Check
also the <b><tt>JVERSION</tt></b> and <b><tt>PVERSION</tt></b> macros in
the platform-specific makefile, and adjust them if they don't match the
JPEG and PNG library versions you're using: see <b><tt>jpeg.mak</tt></b>
and <b><tt>libpng.mak</tt></b> for more information.

<p>
Some platform-specific options are described in the sections for individual
platforms.  See the "Options" section near the beginning of the relevant
makefile for more information.

<h3><a name="Features_and_devices"></a>Selecting features and devices</h3>

<p>
You may build Ghostscript with any of a variety of features and with any
subset of the available device drivers.  The complete list of features is
in a comment at the beginning of <b><tt>gs.mak</tt></b>, and the complete
list of drivers in comments at the beginning of <b><tt>devs.mak</tt></b>
and <b><tt>contrib.mak</tt></b>.  To find what devices a platform-specific
makefile selects to include in the executable, look in it for all lines of
the form

<blockquote>
<b><tt>FEATURE_DEVS=</tt></b><em>{list of features}</em><br>
<b><tt>DEVICE_DEVS</tt></b>*<b><tt>=</tt></b><em>{list of devices}</em>
</blockquote>

<p>
For example, if the makefile has

<blockquote><b><tt>
FEATURE_DEVS=$(PSD)level2.dev
</tt></b></blockquote>

<p>
indicating that only the PostScript Level 2 facilities should be included,
you might make it

<blockquote><b><tt>
FEATURE_DEVS=$(PSD)level2.dev $(PSD)pdf.dev
</tt></b></blockquote>

<p>
to add the ability to interpret PDF files.  (In fact,
<b><tt>FEATURE_DEVS</tt></b> in the current Unix makefiles already includes
<b><tt>$(PSD)pdf.dev</tt></b>.)  The Unix makefile also defines

<blockquote><b><tt>
DEVICE_DEVS=$(DD)x11.dev
</tt></b></blockquote>

<p>
indicating that the X Windows driver should be included, but since
platform-specific makefiles as distributed normally include many of the
possible features and drivers, you will probably rather remove from the
makefile the features and drivers you don't want.  It does no harm to
include unneeded features and devices, but the resulting executable will be
larger than needed.

<p>
You may edit the <b><tt>FEATURE_DEVS</tt></b> line to select or omit any of
the features listed near the beginning of <b><tt>gs.mak</tt></b>, and the
<b><tt>DEVICE_DEVS</tt></b>* lines to select or omit any of the device
drivers listed near the beginning of <b><tt>devs.mak</tt></b> and
<b><tt>contrib.mak</tt></b>.  The first device listed in the definition of
<b><tt>DEVICE_DEVS</tt></b> becomes the default device for this executable;
see the usage documentation for <a href="Use.htm#Output_device">how to
select an output device</a> at run time using the
<a href="Use.htm#DEVICE_switch"><b><tt>-sDEVICE=</tt></b></a> switch.  If
you can't fit all the devices on a single line, you may add lines defining

<blockquote>
<b><tt>DEVICE_DEVS1=$(DD)</tt></b><em>{dev11}</em><b><tt>.dev</tt></b> ... <b><tt>$(DD)</tt></b><em>{dev1n}</em><b><tt>.dev</tt></b>
<br><b><tt>DEVICE_DEVS2=$(DD)</tt></b><em>{dev21}</em><b><tt>.dev</tt></b> ... <b><tt>$(DD)</tt></b><em>{dev2n}</em><b><tt>.dev</tt></b>
</blockquote>

<p>
etc., up to <b><tt>DEVICE_DEVS15</tt></b>.  Don't use continuation lines --
on some platforms they don't work.

<p>
Note that if you want to include a driver named <em>xxx</em>, you must put
<b><tt>$(DD)</tt></b><em>xxx</em><b><tt>.dev</tt></b> in
<b><tt>DEVICE_DEVS</tt></b>*.  Similarly, if you want to include a feature
related to the PostScript or PDF language interpreters (PostScript level
1 .. 3, or other language features such as the ability to read EPSF files or
TrueType font files), you must represent it as
<b><tt>$(PSD)</tt></b><em>xxx</em><b><tt>.dev</tt></b>.  If you are linking
only the graphics library -- not the language interpreter(s) -- with an
application and want to include optional graphics library features such as
CIE color, you represent them as
<b><tt>$(GLD)</tt></b><em>xxx</em><b><tt>.dev</tt></b>.

<h4><a name="Precompiled_data"></a>Precompiled run-time data</h4>

<p>
Ghostscript normally reads a number of external data files at run time:
initialization files containing PostScript code, fonts, and other resources
such as halftones.  By changing options in the top-level makefile for the
platform, you can cause some of these files to be compiled into the
executable: this simplifies installation, improves security, may reduce
memory requirements, and may be essential if you are planning on putting
Ghostscript into ROM.

<p>
To compile the initialization files (<b><tt>lib/gs_init.ps</tt></b>, etc.)
into the executable, change the <b><tt>0</tt></b> to a <b><tt>1</tt></b> in
the line

<blockquote><b><tt>
COMPILE_INITS=0
</tt></b></blockquote>

<p>
Compiled initialization includes the default font map.
It is used only if Ghostscript cannot find or open the default font
map file at run time. 

<p>
To compile fonts into the executable, see <a
href="Fonts.htm#Precompiling">Precompiling fonts</a>. 

<p>
To compile threshold-array halftones into the executable, see the "Compiled
halftone" section of <b><tt>int.mak</tt></b> for a sample makefile fragment,
<b><tt>genht.c</tt></b> for the syntax of halftone data files, and
<b><tt>lib/ht_ccsto.ps</tt></b> for a sample data file.  Note that even
though the data files use PostScript syntax, compiled halftones do not
require the PostScript interpreter and may be used with the graphics library
alone.

<h4><a name="GNU_readline"></a>GNU readline</h4>

<p>
AFPL Ghostscript does not include an interface to GNU readline.  A user
contributed code for this purpose, which we spent significant time debugging
and then updating to track internal architectural changes in Ghostscript.
The contributor was willing to assign the copyright to Aladdin Enterprises
(the copyright holder of Ghostscript at the time), and to allow the code to
be distributed with the Aladdin Free Public License (AFPL) as well as the
GNU License (GPL).  However, even though the GPL allows linking GPLed code
(such as the GNU readline library package) with non-GPLed code (such as all
the rest of AFPL Ghostscript) if one doesn't distribute the result, the Free
Software Foundation, creators of the GPL, have told us that in their
opinion, the GPL forbids distributing non-GPLed code that is merely
<em>intended</em> to be linked with GPLed code.  We understand that FSF
takes this position in order to prevent the construction of software that is
partly GPLed and partly not GPLed, even though the text of the GPL does not
actually forbid this (it only forbids <em>distribution</em> of such
software).  We think that FSF's position is legally questionable and not in
the best interest of users, but we do not have the resources to challenge
it, especially since FSF's attorney apparently supports it.  Therefore, even
though we added the user-contributed interface to GNU readline in internal
Aladdin Ghostscript version 5.71 and had it working in version 5.93 (one of
the last beta versions before the 6.0 release), we removed it from the
Aladdin Ghostscript 6.0 distribution.

<p>
GNU Ghostscript distributions will include support for GNU readline.  As
with other GNU Ghostscript components that are not included in AFPL
Ghostscript, the maintainers of Ghostscript will not attempt to run, link,
or even compile this code, or keep it current across changes in the rest of
Ghostscript.  We will, however, welcome bug fixes or updates, and distribute
them with subsequent releases of GNU Ghostscript.

<p>
The first GNU Ghostscript distribution that will include GNU readline
support will be GNU Ghostscript 6.0, currently scheduled for release along
with AFPL Ghostscript 7.0 in the first or second quarter of 2001.  Before
that time, we may return the copyright of Ghostscript's GNU readline
interface module, which the original author assigned to Aladdin Enterprises,
to the author, so that users of GNU Ghostscript will have have access to it.
However, since it requires internal changes not available in any released
GNU Ghostscript version before 6.0, any user who gets this code and links it
with Aladdin Ghostscript 6.0 will, according to FSF, be violating the intent
(though not the letter) of the GPL.

<p>
We put considerable work into making it possible for Ghostscript to use GNU
readline, including the creation and adjustment of internal software
interfaces specifically to serve this purpose.  In principle, we should have
undone this work in AFPL Ghostscript, lest FSF object to it too as
intended to facilitate linking AFPL Ghostscript with GNU readline (as the
U.S. government has been said to do for code that merely provides APIs where
encryption may be added).  However, we are willing to take this risk rather
than spend the time to undo the interface changes.

<p>
If you have comments or questions about this situation, please feel free to
contact the Free Software Foundation, authors of the GPL and copyright
holders of GNU readline, at <a href="mailto:gnu@gnu.org">gnu@gnu.org</a>,
and/or artofcode LLC, copyright holder of Ghostscript, at <a
href="mailto:raph@artofcode.com">raph@artofcode.com</a>.

<h3><a name="Makefile_setup"></a>Setting up "makefile"</h3>

<p>
After going through the steps just described to <a href="#Unpack">unpack
the
sources</a>, configure the build and make any desired
<a href="#Preparing_makefiles">changes to the
makefiles</a>, and unpack or create links to the <a
href="#Unpack_libraries">third party libraries</a>, as the final step in
preparing to build Ghostscript you must usually associate the name
"<b><tt>makefile</tt></b>" with the correct makefile for your environment so
the <b><tt>make</tt></b> command can find it.  See the section on your
particular platform for how to do that if necessary.

<h3><a name="Invoke_make"></a>Invoking "make"</h3>

<dl>
<dt><b><tt>make</tt></b>
<dd>Builds Ghostscript without debugging options.
</dl>

<dl>
<dt><a name="Debugging"></a><b><tt>make debug</tt></b>
<dd>Builds Ghostscript with debugging options and additional internal error
checks.  The program will be somewhat larger and slower, but it will behave
no differently unless you actually turn on debugging options at execution
time with the <b><tt>-DDEBUG</tt></b> or
<a href="Use.htm#Debugging"><b><tt>-Z</tt></b> command line switches</a>
described in the usage documentation.
</dl>

<dl>
<dt><b><tt>make pg</tt></b>
<dd>On Unix platforms, builds with the <b><tt>-pg</tt></b> compiler
switch, creating an executable for time profiling.
</dl>

<dl>
<dt><b><tt>make begin</tt></b>
<dd>On PC platforms, attempts a quick and dirty compilation of all the
<b><tt>.c</tt></b> files in the current directory.  See the
<a href="#Make_begin">more detailed explanation</a>.
</dl>

<dl>
<dt><b><tt>make install</tt></b>
<dd>After building, installs the Ghostscript executables, support files,
and documentation, but does <b><em>not</em></b> install fonts.  See the
<a href="Install.htm">installation documentation</a>.
</dl>

<dl>
<dt><b><tt>make clean</tt></b>
<dd>Deletes all the files created by the build process (relocatables,
executables, and miscellaneous temporary files).  If you've built an
executable and want to save it, move it first to another place, because
"<b><tt>make clean</tt></b>" deletes it.
</dl>

<p>
<b><em>Note:</em></b> on most platforms some of these simple instructions don't
quite work in one way or another. Read the section on your specific
platform.

<h3><a name="Cross-compiling"></a>Cross-compiling</h3>

<p>
If you are compiling Ghostscript on machines <b>X1</b> ... <b>X</b><em>n</em> with
cross-compilers that generate code for machine <b>Y</b>, you must first
perform several extra steps on some machine <b>Z</b> (not necessarily of the
same type as either <b>X</b><em>i</em> or <b>Y</b>).  First of all, choose a makefile
appropriate for <b>Z</b> and edit it to reflect the run-time options you
wish to include (<b><tt>FEATURE_DEVS</tt></b>, <b><tt>DEVICE_DEVS*</tt></b>,
and any other relevant options), just as for non-cross-compilation.

<p>
If <b>Z</b> runs Unix, perform the following steps:
<ol>
<li>On <b>Z</b>,
<blockquote>
<b><tt>make clean</tt></b><br>
<b><tt>make obj/arch.h obj/genconf obj/echogs</tt></b>
</blockquote>

<li>Edit <b><tt>obj/arch.h</tt></b> to reflect the architecture of <b>Y</b>.

<li>On <b>Z</b>,
<blockquote>
<b><tt>make CC=: CCLD=:</tt></b>
</blockquote>

<li>Copy the files <b><tt>obj/*.h</tt></b> from <b>Z</B> to the directory on
each <b>X</b><em>i</em> that will be used for compilation.

<li>Extract from the file <b><tt>obj/ldt.tr</tt></b> (on <b>Z</b>) the list
of <b><tt>.o</tt></b> files that will be linked: this gives the list of
source files that must be compiled.

<li>Do the compilations on <b>X</b><em>i</em>.
</ol>

<p>
If <b>Z</b> runs some version of Microsoft Windows with Microsoft Visual
C++, use the following steps.  <em>NOTE: We have not actually tested
this.</em>

<ol>
<li>On <b>Z</b>,
<blockquote>
<b><tt>nmake clean</tt></b><br>
<b><tt>nmake obj\arch.h obj\genconf.exe obj\echogs.exe</tt></b>
</blockquote>

<li>Edit <b><tt>obj\arch.h</tt></b> to reflect the architecture of <b>Y</b>.

<li>On <b>Z</b>,
<blockquote>
<b><tt>nmake CC=rem LINK=rem</tt></b>
</blockquote>

<li>Copy the files <b><tt>obj\*.h</tt></b> from <b>Z</B> to the directory on
each <b>X</b><em>i</em> that will be used for compilation.

<li>Extract from the file <b><tt>obj\ldt.tr</tt></b> (on <b>Z</b>) the list
of <b><tt>.obj</tt></b> files that will be linked: this gives the list of
source files that must be compiled.

<li>Do the compilations on <b>X</b><em>i</em>.
</ol>

<hr>

<h2><a name="PC_build"></a>How to build Ghostscript from source (PC version)</h2>

<p>
All Ghostscript builds in PC (DOS and MS Windows) environments are 32- or
64-bit: 16-bit builds are not supported.  The relevant makefiles are

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">PC makefiles</font><hr>
<tr>	<th align=left>Makefile
	<td>&nbsp;&nbsp;
	<th align=left>Construction tools
	<td>&nbsp;&nbsp;
	<th align=left>For environment
<tr>	<td colspan=5><hr>
<tr>	<td valign=top><b><tt>bcwin32.mak</tt></b>
	<td>&nbsp;
	<td valign=top><a href="#Borland_build">Borland/Inprise C++ 4.x</a>
	<td>&nbsp;
	<td valign=top>32-bit MS Windows 3.1 + Win32s, 95, 98, NT
<tr>	<td valign=top><b><tt>msvc32.mak</tt></b>
	<td>&nbsp;
	<td valign=top><a href="#Microsoft_build">Microsoft Visual C++ 4 to 7</a>
	<td>&nbsp;
	<td valign=top>MS Windows 32-bit
<tr>	<td valign=top><b><tt>watcw32.mak</tt></b>
	<td>&nbsp;
	<td valign=top><a href="#Watcom_build">Watcom C/386 or C++</a>
	<td>&nbsp;
	<td valign=top>MS Windows 32-bit
<tr>	<td valign=top><b><tt>unix-gcc.mak</tt></b>
	<td>&nbsp;
	<td valign=top><a href="#Cygwin32_build">Cygnus gcc</a>
	<td>&nbsp;
	<td valign=top><a href="http://sourceware.cygnus.com/cygwin/">Cygnus gnu-win32</a>
</table></blockquote>

<p>
To build Ghostscript you need MS-DOS version 3.3 or later and
Borland/Inprise C/C++ (4.0 or later); Microsoft Visual C++ (version 4.0 or
later); Watcom C/386 (version 8.5 or later) or C++ (any version); or the
free djgpp + go32 development system.  The options in the makefiles are
chosen to strike a balance between RAM consumption and likely usefulness.
If you run <b><tt>make</tt></b> in directory <em>{dir}</em>, the default
configuration generates an executable that assumes the Ghostscript
initialization and font files are in directory
<em>{dir}</em><b><tt>\lib</tt></b>.

<p>
Note that the <b><tt>make</tt></b> program supplied with each PC compiler
has a different name.  We refer to this program generically as
<b><tt>make</tt></b> everywhere else in this document, but you will find the
correct name for each compiler in the relevant section below that discusses
that compiler.

<p>
You must have <b><tt>COMMAND.COM</tt></b> in your path to build Ghostscript.
After making the changes needed to choose features and devices to build into
the executable, you must create the directory where the compiler will do its
work (normally the <b><tt>obj</tt></b> subdirectory of the current
directory) and the directory where the compiled code will be placed
(normally the <b><tt>bin</tt></b> subdirectory).  Then to build the
Ghostscript executable all you need do is give the <b><tt>make</tt></b>
command.

<p><a name="Make_begin"></a>
A special make target "<b><tt>begin</tt></b>" attempts to compile all the
<b><tt>.c</tt></b> files in the current directory.  Some of these
compilations will fail, but the ones that succeed will go considerably
faster because they don't individually pay the overhead of starting up the
compiler.  So a good strategy for building the executable for the first
time, or after changing a widely used <b><tt>.h</tt></b> file, is to do the
fast compilation of everything possible, then the controlled compilation of
everything that failed in the first step:

<blockquote><b><tt>
make begin<br>
make
</tt></b></blockquote>

<p>
<b><em>Note:</em></b> if you unpack the Ghostscript sources on a DOS or MS Windows
system from a Unix tar file, the unpacked files have linefeed alone as the
line terminator (the Unix convention) instead of carriage return + linefeed
(the Microsoft convention), which may make the C compiler unhappy.  One
simple way to fix this, if you have the InfoZIP <b><tt>zip</tt></b> and
<b><tt>unzip</tt></b> programs, is

<blockquote><table cellpadding=0 cellspacing=0>
<tr>	<td><b><tt>zip -l CVTEMP.zip *.bat *.c *.h *.def *.rc</tt></b>
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<td>(Letter "l", not the digit "1")
<tr>	<td><b><tt>unzip -o CVTEMP.zip</tt></b>
	<td>&nbsp;
	<td>(Rewrite all the same files correctly)
<tr>	<td><b><tt>del CVTEMP.zip</tt></b>
	<td>&nbsp;
	<td>(Delete the temporary zip file)
</table></blockquote>

<h3><a name="Borland_build"></a>Borland/Inprise environment</h3>

<p>
To compile Ghostscript with the Borland/Inprise environment (hereafter
referred to as just "Borland"), you need Borland C++ (version 4.0 or later);
specifically the compiler, <b><tt>make</tt></b> utility, and linker.  You
also need either the Borland assembler (version 1.0 or later) or the
Microsoft assembler (version 4.0 or later).

<p>
To create "<b><tt>makefile</tt></b>", give the command

<blockquote><b><tt>
echo !include "src\bcwin32.mak" &gt;makefile
</tt></b></blockquote>

<p>
To run the <b><tt>make</tt></b> program, give the commmand

<blockquote><b><tt>
make
</tt></b></blockquote>

<p>
Besides the source files and the makefiles, you need:

<blockquote><table cellpadding=0 cellspacing=0>
<tr valign=top>	<td>*<b><tt>.bat</tt></b>
	<td>&nbsp;
	<td>(a variety of batch files used in the build process)
</table></blockquote>

<p>
Comments in the makefiles describe the configuration parameters.  If your
configuration is different from the following, you should definitely read
those comments and see if you want or need to change any of this:
<ul>
<li>The compiler files are in <b><tt>C:\BC</tt></b> and its subdirectories.
<li>You are using the Borland assembler <b><tt>tasm</tt></b>.
<li>You want an executable that will run on any 32-bit PC-compatible,
regardless of processor type (80386, 80486, Pentium, or compatible) and
regardless of whether a math coprocessor (80x87) is present -- an issue only
with 80386 processors.
</ul>

<p>
<b>Notes</b>

<ul>
<li>A user reports that the Borland C++ 4.00 with patch 1-6 doesn't
produce a working executable of Ghostscript 5.03.  We can't test this,
since we no longer have this compiler.

<li>Borland C++ 4.5 has a bug or bugs that cause(s) the 32-bit Windows
executable to crash if you give any @-files on the command line.  Among
other things, this makes the uniprint driver unusable, because it references
the .upp configuration files this way.  This problem may possibly be fixed
by one or more of the patch files on

<blockquote>
<a href="ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/" 
class="offsite">ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/</a>
</blockquote>

<li>Borland C++ 4.52 has a bug that causes the 32-bit Windows executable to
fail during startup.  Borland provides a patch for this bug in

<blockquote>
<a
href="ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/bc45xp1.zip" 
class="offsite">ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/bc45xp1.zip</a>
</blockquote>

<li>Borland C++ 5.0 and 5.01 have a code generator bug that generates
incorrect code for the construct <b><tt>!file_is_valid()</tt></b>.  Do not
attempt to compile Ghostscript with these compilers.  If you want to report
this bug to Borland, send them the result of compiling
<b><tt>ziodev.c</tt></b> and tell them to look at the code generated for
<b><tt>file_is_valid()</tt></b> and <b><tt>!file_is_valid()</tt></b>.  We
don't know whether Borland C++ 5.02 still has this problem. The problem 
does not appear to exist in Borland C++Builder 4 or 5.</li>

<li>When building for the MS Windows Win32s environment, the make
process will stop after it has created <b><tt>genarch.exe</tt></b>.
You should then run "<b><tt>_genarch.bat</tt></b>", wait until
<b><tt>genarch</tt></b> has finished and then exit MS Windows.  Then type
"<b><tt>make</tt></b>" again to restart the make process.

<li>Borland C++Builder 5 and above require <strong><tt>BUILDER_VERSION</tt></strong>
to be set explicitly&nbsp; to 5 in the make file because the version of MAKE which ships
with this product (Version 5.2) is the same as that shipped with Version 4.5. Therefore,
there is no way to automatically establish the compiler version that is in use. Note that
because a 16 bit compile does not ship with Version 5.5, conditionals have been added to
prevent attempts to compile 16 bit code when <tt><strong>BUILDER_VERSION = 5</strong></tt></li>
<li>Note that under Borland C++Builder 5,&nbsp; MAKE
does not stop when <tt><strong>_genarch.bat</strong></tt> should be run as described
above. It is necessary for the user to Abort the make by pressing Control-C. You should
then run &quot;<b><tt>_genarch.bat</tt></b>&quot;, wait until <b><tt>genarch</tt></b> has
finished and then exit MS Windows. Then type &quot;<b><tt>make</tt></b>&quot; again to
restart the make process. All targets are built succesfully if this step is ignored. <tt><strong>I
don't know if the targets are correct although they seem to run OK.</strong></tt></li>
<li>To prevent the compiler terminating because too
many warning messages have been generated, copy the file&nbsp; file <tt><strong>bcc32.cfg </strong></tt>to
the top level directory using the following command:</li>

</ul>

<h3><a name="Microsoft_build"></a>Microsoft Environment</h3>

<p> NOTE: We have received reports that the Microsoft Visual C++ 5.0 and 6.0 compilers 
  produce incorrect code for Ghostscript version 6.0 and later, from the same 
  source code that compiles and runs correctly with other compilers. In spite 
  of these reports, several members of the Artifex staff use version 6.0 of the 
  MSVC compiler on a regular basis and we have not found any problems. You may 
  also want to try out the <a href="#IntelWin32_build">Intel&nbsp;C/C++ compiler</a>, 
  which can be integrated into the Microsoft Visual C++ environment.
<p>To compile Ghostscript using the Microsoft environment, you need Microsoft 
  Visual C++ 4.0 or later with its associated "<b><tt>nmake</tt></b>" utility 
  and linker.
<h4><a name="Using_the_MS_Development_Environment"> </a>Using Microsoft Developer 
  Studio</h4>
<p>Microsoft Developer Studio is the Microsoft Visual C++ integrated development 
  environment. To use it to build Ghostscript: it is first necessary to create 
  a new workspace/project. To create the workspace/project, open Microsoft Developer 
  Studio and select <b><tt>File/New</tt></b>. In the dialog window that is opened, 
  select 'Makefile' as the type of project. Specify a name for the project. (Microsoft 
  does not allow special characters such as ., *, ?, /, or \ as part of project 
  names.) Also specify the location of the master directory for your Ghostscript 
  files. Then select OK. 
<p> In the next dialog window, specify the build command line as <b><tt>nmake 
  /f src/msvc32.mak DEVSTUDIO= </tt></b> Note the value for <b><tt>DEVSTUDIO</tt></b> 
  is empty. Then select <b><tt>Finish</tt></b>. 
<p>At this point, it is now possible to build Ghostscript using Developer Studio. 
  To build, press F7 or select the build icon. Note: multiple warnings will also 
  given about things like double to float data conversions. Ignore them. We have 
  not found a way to create a single set of sources that does not create warnings 
  with the different compilers and operating systems supported by Ghostscript. 
  We are working to reduce the number of the warning messages. 
<p>To run Ghostscript inside of Developer Studio, it is necessary to specify the 
  name of the executable program . Select <b><tt>Project/Settings</tt></b>. Select 
  the <b><tt>Debug</tt></b> tab. Then for <b><tt>Executable for debug session:</tt></b> 
  specify <b><tt>bin/gswin32.exe</tt></b> 
<p>To use all of the features of Microsoft Developer Studio for debugging, and 
  modifying Ghostscriptt, you need to finish the remaining steps. 
<p>To add the Ghostscript DLL to the project, select <b><tt>Project/Settings</tt></b>. 
  Select the <b><tt>Debug</tt></b> tab. Change the <b><tt>Category</tt></b> to 
  <b><tt>Additional DLLs</tt></b>. Then specify <b><tt>bin/gsdll32.dll</tt></b>. 
<p> To specify the Ghostscript program arguments, select <b><tt>Project/Settings</tt></b>. 
  Select the <b><tt>Debug</tt></b> tab. Change the <b><tt>Category</tt></b> to 
  <b><tt>General</tt></b>. Then specify the desired program arguments. For example, 
  specifying: <b><tt>examples/tiger.eps</tt></b> will result in the tiger example 
  file being displayed when Ghostscript is executed. . 
<p> A final note: it is possible to create a command file (build.bat) to be used 
  for the build command line. If many different workspaces/projects are created, 
  it is simpler to use a build batch command file rather than retyping the build 
  command line for each new project. Here is an example used by one of Artifex's 
  staff members. This file is one line:
<blockquote><b><tt> nmake -f src/msvc32.mak DEVSTUDIO= DEBUG=1 GS_LIB_DEFAULT="./lib/;./font;$(GSROOTDIR)/lib;$(AROOTDIR)/fonts" 
  </tt></b></blockquote>
<p> The <b><tt>DEBUG=1</tt></b> enables many debugging features built into Ghostscript. 
  Please note the double quotes around the value for <b><tt>GS_LIB_DEFAULT</tt></b> 
  and the addition of <b><tt>./lib;./fonts;</tt></b> to its definition. This uses 
  the local (within the project) copy of the <b><tt>lib</tt></b> and <b><tt>fonts</tt></b> 
  directories. This is convenient if any changes need to be made in these directories. 
<h4><a name="Using_the_command_line"></a>Using the command line</h4>
<p>Ghostscript can be made using either the DOS shell or one one of the various 
  command line shells made for Windows.
<p>In order for the makefiles to work properly, two items may have to be changed. 
  If you are not using version 6.x then before building, in <b><tt>src\msvc32.mak</tt></b> 
  find the line "<b><tt>MSVC_VERSION=6</tt></b>" and change it to "<b><tt>MSVC_VERSION=4</tt></b>", 
  "<b><tt>MSVC_VERSION=5</tt></b>" or "<b><tt>MSVC_VERSION=7</tt></b>". 
<p>In some cases the location of the Microsoft Developer Studio, needs to be changed. 
  The location of Microsoft Developer Studio is defined by the value of <b><tt>DEVSTUDIO</tt></b>. 
  There are four different definitions of <b><tt>DEVSTUDIO</tt></b> in src\msvc32.mak. 
  There is one for each of the currently supported versions of Microsoft Visual 
  C++ (4, 5, 6 and 7). 
<p>The normal installation process for Microsoft Visual C++ includes setting the 
  location of the Microsoft Visual C++ executables (cl.exe, link.exe, nmake.exe, 
  rc.exe) in your PATH definition and the LIB and INCLUDE environment variables 
  are set to point to the Microsoft Visual C++ directories. If this is true then 
  the value for <b><tt>DEVSTUDIO</tt></b> can be changed to empty. I.e. <b><tt>DEVSTUDIO=</tt></b>
<p> If PATH, LIB, and INCLUDE are not correctly set then the value for <b><tt>DEVSTUDIO</tt></b> 
  needs to be defined. For example, for version 6.0, the default definition for 
  the location for the Microsoft Developer Studio is: <b><tt>DEVSTUDIO=C:\Program 
  Files\Microsoft Visual Studio </tt></b> If the path to Microsoft Developer Studio 
  on your system differs from the default then change the appropriate definition 
  of <b><tt>DEVSTUDIO</tt></b>. (Remember that there is a separate definition 
  of <b><tt>DEVSTUDIO</tt></b> for each version of MSVC, so be sure to change 
  the correct definition.) 
<p>To run the <b><tt>make</tt></b> program, give the command 
<blockquote><b><tt>
nmake -f src\msvc32.mak
</tt></b></blockquote>

<p>
Rather than changing src/msvc32.mak, these values can be specified on the make
command line,  I.e.

<blockquote><b><tt> nmake -f src\msvc32.mak MSVC_VERSION=6 DEVSTUDIO="C:\Program Files\Microsoft Visual Studio" <br>
nmake -f src\msvc32.mak MSVC_VERSION=7 DEVSTUDIO="C:\Program Files\Microsoft Visual Studio .NET"
 </tt></b></blockquote>

<p> Note that double quotes have been added around the path for <b><tt>DEVSTUDIO</tt></b> 
  due to the spaces in the path value.
<p>
This command line can also be put into a batch file.

<p> You may get warning messages during compilation about <b><tt>/QI0f</tt></b> 
  being an undefined switch, or the message "dwmain32.def: EXETYPE not supported 
  for platform; ignored" during linking. Multiple warnings will also given about 
  things like double to float data conversions. Ignore them. We have not found 
  a way to create a single set of sources that does not create warnings with the 
  different compilers and operating systems supported by Ghostscript. 
<p>
The Microsoft VC++ 5.0 compiler locks up when compiling
<b><tt>gxi12bit.c</tt></b> with <b><tt>/O2</tt></b>.  Compile this file
without <b><tt>/O2</tt></b>.

<p> The Microsoft VC++ 5.0 compiler produces a non-working executable if compiling 
  without stack checking. Don't change the setting <b><tt>TDEBUG=1</tt></b> in 
  <b><tt>msvc32.mak</tt></b>. 


<h4><a name="Self-extracting_executables"></a>Making self-extracting executables</h4>

<p>
You can build self-extracting Windows executables of Ghostscript.  (This is
not needed to use Ghostscript.)  Currently this requires both the
Borland/Inprise and the Microsoft compilers, and also two pieces of
third-party software:

<ul>
<li><b><tt>WinZipSE</tt></b>, available from <a
href="http://www.winzip.com/winzipse.html" 
class="offsite">http://www.winzip.com/winzipse.html</a>.
This is not free.
<li><b><tt>zip</tt></b>, available from <a
href="http://www.info-zip.org/pub/infozip/Zip.html" class="offsite">
http://www.info-zip.org/pub/infozip/Zip.html</a>.  This is free.
</ul>

<p>
You will have to edit <b><tt>src/winint.mak</tt></b> to define
<b><tt>WINZIPSE_XE</tt></b> and <b><tt>ZIP_XE</tt></b> respectively as the
path names of these programs.  See <a href="Release.htm">Release.htm</a> for
the detailed procedure.

<h3><a name="Watcom_build"></a>Watcom environment</h3>

<p>
To use the Watcom compiler, add to <b><tt>AUTOEXEC.BAT</tt></b> the line
"<b><tt>set&nbsp;DOS4G=quiet</tt></b>".  Check that
<b><tt>AUTOEXEC.BAT</tt></b> also contains a line of the form
"<b><tt>set&nbsp;WATCOM=</tt></b><em>{wcdir}</em>" where <em>{wcdir}</em> is
the directory where you installed the Watcom tools, and that the setting of
<b><tt>PATH</tt></b> includes <em>{wcdir}</em><b><tt>\binnt</tt></b> (or
<b><tt>%WATCOM%\binnt</tt></b>) before <em>{wcdir}</em><b><tt>\binw</tt></b>
(or <b><tt>%WATCOM%\binw</tt></b>).  Then to create
"<b><tt>makefile</tt></b>":

<blockquote><table cellpadding=0 cellspacing=0>
<tr>	<th align=left>For
	<td>&nbsp;&nbsp;&nbsp;
	<th align=left>Give the command
<tr>	<td colspan=3><hr>
<tr>	<td>MS Windows
	<td>&nbsp;
	<td nowrap><b><tt>echo&nbsp;!include&nbsp;src\watcw32.mak&nbsp;&gt;makefile</tt></b>
</table></blockquote>

<p>
Before compiling, change the definition of the <b><tt>WCVERSION</tt></b>
macro in the makefile (<b><tt>watcw32.mak</tt></b>) to the version of the Watcom compiler you are
using.  This is necessary to handle some minor incompatibilities between
versions.

<p>
To run the <b><tt>make</tt></b> program, give the commmand

<blockquote>
<b><tt>wmake -u</tt></b>
</blockquote>

<h3><a name="Cygwin32_build"></a>Cygwin32 gcc</h3>

<p>
A user reports that it is possible to compile Ghostscript for MS Windows NT
using the Cygwin32 gcc compiler, GNU <b><tt>make</tt></b>, and the
<b><tt>unix-gcc.mak</tt></b> makefile, with only two small source code
changes:

<ul>
<li>Add "<b><tt>b</tt></b>" to the call to <b><tt>fopen</tt></b> in <b><tt>gp_open_scratch</tt></b>
<li>Mirror the <b><tt>gp_ntfs</tt></b> logic for <b><tt>gp_pathstring_not_bare</tt></b>
</ul>

<p>
Information about this compiler and environment is at the Cygnus site:

<blockquote>
<a href="http://sources.redhat.com/cygwin/">http://sources.redhat.com/cygwin/</a>
</blockquote>

<p>
Please note that Cygnus's licensing terms aren't quite as liberal about
redistribution as either the GNU
<a href="http://www.gnu.org/copyleft/gpl.html">General Public License</a>
or the Aladdin <a href="Public.htm">Free Public License</a>, so read their
license carefully if you want to redistribute the results of using their
compiler.

<h3><a name="IntelWin32_build"></a>Intel C/C++ environment</h3>

<p>
Intel provides a C/C++ compiler that is compatible with the <a
href="#Microsoft_build">Microsoft Visual&nbsp;C++ environment</a>. The main
advantage of this compiler over MSVC&nbsp;5.0 and 6.0 is that it produces
working code even when all optimizations are enabled and when stack checking
is disabled.

<p>
To build Ghostscript using the Intel C/C++ compiler, you have to make the
following small changes in the makefiles:

<ul>
<li>Find and change the second occurrence of
"<b><tt>COMPILE_FULL_OPTIMIZED</tt></b>" to "<b><tt>/O2</tt></b>" in file
<b><tt>msvccmd.mak</tt></b>.  <li>Override "<b><tt>TDEBUG</tt></b>",
"<b><tt>COMP</tt></b>", and "<b><tt>COMPAUX</tt></b>" when invoking
<b><tt>nmake</tt></b>.
</ul>

<p>
More specifically, use "<b><tt>TDEBUG=0</tt></b>" and set both
"<b><tt>COMP</tt></b>" and "<b><tt>COMPAUX</tt></b>" to the full path of
<b><tt>icl</tt></b> (for example
"<b><tt>COMP=C:\intel\compiler45\bin\icl</tt></b>" if the Intel&nbsp;C/C++
compiler V4.5 was installed to <b><tt>C:\intel</tt></b>). It is suggested
that you use a batch file to launch <b><tt>nmake</tt></b>, since the command
line processes the "<b><tt>=</tt></b>" on its own. Also, you may need to
execute <b><tt>vcvars32.bat</tt></b> and <b><tt>iccvars.bat</tt></b> to
register the proper paths for the compiler, its include files and its
libraries.

<p>
You can buy or download a 30-day evaluation version of the Intel&nbsp;C/C++
compiler from Intel's Software Performance Tools web site:

<blockquote>
<a href="http://www.intel.com/vtune/">http://www.intel.com/vtune/</a>
</blockquote>

<hr>

<h2><a name="Mac_build"></a>How to build Ghostscript from source (MacOS version)</h2>

<h3><a name="MacOS"></a>Traditional MacOS</h3>

<p>
The Macintosh version of Ghostscript requires the <a href="http://www.metrowerks.com/"
class="offsite">Metrowerks Codewarrior</a> development suite. Download the 
<tt>macgs-7xx-src.sit</tt> source archive from the location listed
below. This includes a Codewarrior .mcp project file than can be used to build both 
Carbon and CFM versions of the ghostscript shared library component.

<blockquote>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/currenti/"
 class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/current/</a>
</blockquote>

<p>
If your system doesn't automatically unpack the source archive, you can
download the free <a href="http://stuffit.com/download.html"
class="offsite">Stuffit Expander</a> to open it.

<p>
This archive includes appropriate versions of the jpeg, zlib and libpng 3rd party
library source for convenience. You must still download the fonts and place them in an
appropriate location, along with the contents of the <tt>lib</tt> directory from the source
archive.

<p>
Note that since this is just a library component, you will need a front-end application, such as
MacGSView, to actually view or convert postscript and pdf documents.


<h3><a name="MacOSX"></a>MacOS X</h3>

<p>
The unix source distribution (.tar.gz) builds fine on Darwin/MacOS X,
albeit without a display device. You can generally just use the <tt>Makefile</tt>
generated by ./configure or <tt>macosx.mak</tt>
as your top-level makefile and get a reasonable default build. This will
allow you to use Ghostscript from the command line as a BSD-layer tool
to rasterize postscript and pdf to image files, and convert between the 
high-level formats supported by Ghostscript. See the instructions for the
unix build below for details of how to customize this build.

<p>
There is also a support for building Ghostscript as a framework. This is
a special encapsulated shared library format specific to MacOS X. To build
the framework, copy <tt>macosx.mak</tt> to the top-level directory, rename it to
<tt>makefile</tt> and issue 'make framework' from Terminal.app. This will result
in a <tt>Ghostscript.framework</tt> in the <tt>sobin</tt> directory. It must be 
manually copied to /Library/Frameworks/ before applications
can use it. You may need to create the Frameworks/ directory on some systems.

<p>
Finally, there is a <tt>macos-mcp.mak</tt> makefile that can be
used to set up the Codewarrior shared library component build described
in the section on <a href="#MacOS">Classic MacOS</a> above. Currently
this makefile is distributed only with the MacOS-specific <tt>.sit</tt>
source archive, but with be included generally in future releases.

<p>
To set up the shlib build, download and uncompress the Ghostscript source.
If the archive doesn't contain the 3rd party jpeg, png, and zlib source,
you must download them as described at the beginning of this document and
unpack them under the macgs-###-src directory under the specific names
<tt>jpeg</tt>, <tt>zlib</tt> and <tt>libpng</tt>. You cannot use symlinks as
Codewarrior will not be able to follow them for some of the needed header
files.

<p>
Copy <tt>src/macos-mcp.mak</tt> to the top-level directory and rename
it <tt>makefile</tt>. Then run 'make' in that directory, either from
within Terminal.app or through Project Builder. This will set up the
generated code required for the build and run a shell script to generate
<tt>ghostscript.mcp.xml</tt>. Launch Metrowerks Codewarrior, and select
'Import Project...' from the File menu, and open the xml project file.
When asked, save the results as <tt>ghostscript.mcp</tt> in the same 
directory and you should be ready to build the shared library component.

</p>
Tradtional ('PPC') applications based on the Code Fragment Manager
will not be able to open the shlib linked with CarbonLib, so two
targets are provided, one with carbon and one without.

<hr>

<h2><a name="Unix_build"></a>How to build Ghostscript from source (Unix version)</h2>

<p>
Ghostscript now ships with a build system for unix-like operating systems 
based on GNU Autoconf. In general the following should work to configure
and build Ghostscript:

<blockquote><pre>
./configure
make
</pre></blockquote>

Please report any problems with this method on your system as a bug.

<p>
For the convenience of those already familiar with Ghostscript, the old method 
based on hand-edited makefiles is still supported. It may also be helpful in
getting Ghostscript to build on very old platforms. This section deals exclusively
with that older method and includes numerous pointers regarding legacy systems.

<p>
Before issuing the <b><tt>make</tt></b> command to build Ghostscript, you
have to make some choices, for instance
<ul>
<li>which compiler to use;
<li>what features and devices to include;
<li>whether to use system libraries for PNG and zlib;
<li>and how to handle issues for your particular platform.
</ul>

<p>
Be sure to check the sections on <a
href="#Tool_specific_issues">tool-</a>, <a
href="#OS_specific_issues">OS-</a>, and <a
href="#Hardware_specific_issues">hardware-</a>specific issues for notes
on your particular platform and compiler.  In fact, that is the
<b><em>first</em></b> place to check if you build Ghostscript and it crashes
or produces obviously incorrect results.

<h3><a name="Multi_architecture_makefile"></a>The multi-architecture makefile</h3>

<p>
Especially if you are working in a Unix environment with multiple CPU types,
operating systems, and/or C compilers, you may find the file
<b><tt>all-arch.mak</tt></b> useful.  This user-contributed file includes
"wrappers" for the Unix makefiles for many different common environments.
The author of this file notes:

<blockquote>

<p>
This makefile allows you to execute

<pre>
	 make `hostname`
</pre>

<p>
on any machine on a network, without having to examine the Makefile for a
specific target name. Also, some of the targets in the Makefile incorporate
special changes in compiler options for certain files, to work around
compiler bugs that Ghostscript has been so good at exposing.  Having that
special handling written down in a Makefile proves very convenient.

<p>
I don't do "make install" until I've done

<pre>
	cd ...build-directory.../gs-x.yz
	cd lib
	../bin/gs ../examples/tiger.eps
</pre>

<p>
and verified that the famous tiger can be correctly displayed.  Also, the
"make install" step is careful to first remove any existing
<b><tt>$(BINDIR)/gs</tt></b>, then install a new gs there with a hard link
to gs-x.yz.

<p>
That way, each installation makes gs a synonym for the latest release,
but earlier ones remain in place in case backtracking is needed, which
I've fairly often wanted to do when investigating changed behavior, or
a suspected bug.

<p>
When I've been experimenting with a new feature, such as GNU readline
support, I change the setting of GS from gs to ngs (new gs), so as not
to break any existing programs by the installation of an experimental
version.

</blockquote>

<h3><a name="UNIX_makefile"></a>Setting up "makefile"</h3>

<p>
The files <b><tt>src/unix</tt></b>*<b><tt>.mak</tt></b> are the makefiles for
Unix platforms, and you choose one based on what compiler you use.  To
build Ghostscript, however, you must use the simple command
"<b><tt>make</tt></b>", which must find the file "<b><tt>makefile</tt></b>"
(or "<b><tt>Makefile</tt></b>").  If your system supports symbolic links,
set up "<b><tt>makefile</tt></b>" like this.

<blockquote><table cellpadding=0 cellspacing=0>
<tr>	<td>GNU gcc:
	<td>&nbsp;&nbsp;&nbsp;&nbsp;
	<td nowrap><b><tt>ln -s src/unix-gcc.mak makefile</tt></b>
<tr>	<td>Non-gcc ANSI C compiler:
	<td>&nbsp;
	<td nowrap><b><tt>ln -s src/unixansi.mak makefile</tt></b>
</table></blockquote>

<p>
If your system doesn't support symbolic links, first finish all changes to
the compiler-specific makefile, then make a hard link, omitting the
<b><tt>-s</tt></b> switch.

<p>
The makefile distributed with Ghostscript selects the following devices
to include in the build:

<blockquote><table cellpadding=0 cellspacing=0>
<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Devices included as distributed</font><hr>
<tr valign=bottom>
	<th align=left>Type
	<td>&nbsp;&nbsp;
	<th align=left>Devices
<tr>	<td colspan=3><hr>
<tr valign=top>	<td>Display
	<td>&nbsp;
	<td>X Windows
<tr valign=top>	<td>Printers
	<td>&nbsp;
	<td>H-P DeskJets, LaserJets, and color DeskJets and PaintJets; Canon BubbleJets
<tr valign=top>	<td>File formats
	<td>&nbsp;
	<td>Group 3 &amp; Group 4 fax; JPEG; PCX; PBM, PGM, PKM, &amp; PPM; TIFF; PostScript images; PNG; distilled PDF, PostScript, and EPS; PCL XL ("PCL 6")
</table></blockquote>

<p>
The <b><tt>unix</tt></b>*<b><tt>.mak</tt></b> files explicitly compile and
link the JPEG, PNG, and zlib libraries into the executable.  If your Unix
system already includes the PNG and zlib libraries -- probably in
<b><tt>/usr/lib/libpng.</tt></b>{<b><tt>a</tt></b>,<b><tt>so</tt></b>} and
<b><tt>/usr/lib/libz.</tt></b>{<b><tt>a</tt></b>,<b><tt>so</tt></b>} -- and
you would rather use those copies, change the definition of
<b><tt>SHARE_LIBPNG</tt></b> and <b><tt>SHARE_ZLIB</tt></b> from 0 to 1 in
the relevant <b><tt>unix</tt></b>*<b><tt>.mak</tt></b> file before
compiling.  Note that if you do this, you will get non-debug versions of
these libraries even if you selected <b><tt>DEBUG</tt></b> in the makefile.
At the insistence of some users, we have also provided the ability to do
this with the JPEG library (<b><tt>SHARE_JPEG</tt></b>), but should not use
it: in order to be compatible with Adobe interpreters (which do not follow
the JPEG standard exactly), Ghostscript has to compile the IJG code with
the non-standard definition

<blockquote><b><tt>
#define D_MAX_BLOCKS_IN_MCU 64
</tt></b></blockquote>

<p>
and since shared versions of this library will not have been compiled this
way, you will get errors on some valid PostScript and PDF input files.  Note
also that because not all the JPEG library header files that Ghostscript
uses are normally installed in <b><tt>/usr/include</tt></b>, you must have
the source code for this library available even if you set
<b><tt>SHARE_JPEG</tt></b> to 1.

<p>
If the X11 client header files are located in some directory which your
compiler does not automatically search, you must change the
<b><tt>XINCLUDE</tt></b> macro in the makefile to include a specific
<b><tt>-I</tt></b> switch.  See the comment preceding
<b><tt>XINCLUDE</tt></b> in the makefile.

<p>
Currently Ghostscript is set up to compile and link in a generic Unix
environment.  Some Unix environments may require changing the
<b><tt>LDFLAGS</tt></b> macro in the makefile; be sure to check the <a
href="#Unix_build">Unix section</a> for your specific tools, operating
system, and hardware.

<h3><a name="Shared_object"></a>Shared object</h3>
To build Ghostscript as a shared object with gcc 
(instead of as a single large executable) use:
<pre>
	ln -s src/unix-gcc.mak makefile
	make so
</pre>
<p>
This will build <b><tt>libgs.so</tt></b> and two programs which use the 
shared object, <b><tt>gsx</tt></b> which uses Gtk+ and <b><tt>gsc</tt></b> 
which does not.

<p>
Do not use <tt>make -f src/unix-gcc.mak</tt> because this will
break the recursive make used in building the shared object.
<p>
To install the shared object and these two programs:
<pre>
	make soinstall
</pre>
To delete files created by the build process:
<pre>
	make soclean
</pre>
<p>
For more details see <a href="../src/unix-dll.mak">unix-dll.mak</a>.

<h3><a name="Tool_specific_issues"></a>Tool-specific issues</h3>

<h4><a name="gcc_27x"></a>gcc 2.7.*</h4>

<p>
Some of the issues in using gcc are very specific to the particular
computer, the particular version of the operating system, and the
particular version of gcc available to you.  You can check the version of
gcc with the <b><tt>gcc&nbsp;--version</tt></b> command.

<p>
An optimizer bug in gcc versions 2.7.0, 2.7.1, and 2.7.2 causes the
compiler to generate incorrect code.  The makefile works around this, but
we recommend that if possible you use either an earlier or a later version
of gcc; for instance, gcc 2.5.8, gcc 2.6.3, 2.7.2.1 or later which don't
have this bug.  Note, however, that gcc has other problems on some
platforms, so please read the section for your specific platform.

<h4><a name="GNU_make"></a>GNU make</h4>

<p>
Current versions of GNU <b><tt>make</tt></b> have no problems, but GNU
<b><tt>make</tt></b> 3.59 can't handle the final linking step in some
cases; if this happens, use the platform's standard <b><tt>make</tt></b>,
typically <b><tt>/bin/make</tt></b>.

<h3><a name="OS_specific_issues"></a>OS-specific issues</h3>

<h4><a name="386_Unix"></a>386 Unix</h4>

<ul>
<li>gcc versions older than 1.38 on Intel 80386 systems do not compile
Ghostscript correctly with the <b><tt>-O</tt></b> option.

<li>gcc 1.39 under <b><tt>386BSD</tt></b> has a bug that causes
float-to-integer conversions to compile incorrectly, rendering the
executable unusable.

<li>X11R5 may need "<b><tt>#include &lt;stddef.h&gt;</tt></b>" in <b><tt>x_.h</tt></b>.

<li>Also see regarding <a href="#System_V">System V</a> platforms.
</ul>

<h4><a name="BSDI"></a>BSDI</h4>

<ul>

<li>Use <b><tt>unix-gcc.mak</tt></b> and set<blockquote><b><tt>
STDLIBS=-lm<br>
XINCLUDE=-I/usr/X11R6/include<br>
XLIBDIRS=-L/usr/X11R6/lib<br>
XLIBS=Xt SM ICE Xext X11<br></tt></b></blockquote>

<li>If you want to use the shared versions of the PNG and zlib libraries, set
<b><tt>SHARE_LIBPNG=1</tt></b> and <b><tt>SHARE_ZLIB=1</tt></b>
as discussed <a href="#UNIX_makefile">previously</a>.

<li>BSD <b><tt>make</tt></b> uses a different syntax for its
<b><tt>include</tt></b> directive than Ghostscript;
use <b><tt>gmake</tt></b> instead.
</ul>

<h4><a name="Digital_Unix"></a>Digital Unix (Alpha)</h4>

<ul>

<li>Use <b><tt>unixansi.mak</tt></b> for all Digital Unix compilers.

<li>For versions of Digital Unix before 4.0, set

<p>
<b><tt>CFLAGS=-std -migrate -Olimit 1000 -g3 -O2 $(XCFLAGS)<br>
LDFLAGS=-lots $(XLDFLAGS)</tt></b>

<p>
You may be able to omit <b><tt>-g3</tt></b>.  For later versions of Digital
Unix, users have reported that the proper flags are

<p>
<b><tt>CFLAGS=-std1 -Olimit 1000 -g3 -O2 $(XCFLAGS)</tt></b>

<p>
again, optionally omitting the <b><tt>-g3</tt></b>.

<li>If you get compiler error messages about "ANSI aliasing rules", please
see the section about <a href="#VMS_build">building under OpenVMS</a> below.

</ul>

<h4><a name="Linux"></a>Linux</h4>

<ul>
<li>If you build on Linux with X11 R6 or later, you may get link-time error
messages about undefined references to various functions beginning with
"SMC" and "ICE".  If this happens, make sure that <b><tt>XLIBS</tt></b> in
the makefile is set to
"<b><tt>Xt&nbsp;SM&nbsp;ICE&nbsp;Xext&nbsp;X11</tt></b>" rather than
"<b><tt>Xt&nbsp;Xext&nbsp;X11</tt></b>".

<li>On very old systems (circa gcc version 2.6.3), you may encounter an incompatibility
in object formats (a.out vs. ELF) with the XFree86 library.
Typically, <b><tt>ld</tt></b> complains that some X library is not found,
or that many <b><tt>Xlib</tt></b> or <b><tt>Xt</tt></b> functions are not
found in the library (similar to the messages for omitting
<b><tt>SM</tt></b> and <b><tt>ICE</tt></b> from <b><tt>XLIBS</tt></b>).  Or
you get a message when you start Ghostscript that the program or the shared
library is an unrecognized format.
If this happens, edit your top-level makefile to add the switches
"<b><tt>-b i486-linuxaout</tt></b>" to both <b><tt>CFLAGS</tt></b> and
<b><tt>LDFLAGS</tt></b>, then "<b><tt>make clean</tt></b>" followed by
"<b><tt>make</tt></b>").  If this doesn't help, or if other strange things
happen, contact your Linux supplier or support resource.

<li>A few of Ghostscript's drivers are multi-threaded. None of them are
in the default build. Currently the only ones are the "bmpa" series.
These drivers require <b><tt>libc</tt></b>
version 6 or higher. Most distributions include this, but it may be
an issue on very old systems.
</ul>


<h4><a name="NeXTSTEP"></a>NeXTSTEP / OpenSTEP</h4>

<ul>
<li>If you are using a NeXTSTEP version before 3.3, please get a no-cost
upgrade (along with Y2K patches) from Apple.

<li>If '<tt>./configure && make</tt>' fails, then for all NeXTSTEP systems, use 
<b><tt>unix-gcc.mak</tt></b> and make the following changes:

<ul>
<li>In <b><tt>unix-aux.mak</tt></b> (and <b><tt>ugcclib.mak</tt></b>, if you
are using only the library) change the definition of <b><tt>INCLUDE</tt></b>
to "<b><tt>INCLUDE=/usr/include/bsd</tt></b>";

<li>in <b><tt>unix-gcc.mak</tt></b>:

<ul>
<li>change <b><tt>CC=gcc</tt></b> to <b><tt>CC=cc</tt></b>;

<li>change the definition of <b><tt>STDLIBS</tt></b> to only
<b><tt>-lm</tt></b>;

<li>change <b><tt>SYNC=posync</tt></b> to <b><tt>SYNC=nosync</tt></b>;

<li>add <b><tt>-D_POSIX_SOURCE</tt></b> to <b><tt>CFLAGS</tt></b> and remove
<b><tt>-g</tt></b>;

<li>remove <b><tt>-Wstrict-prototypes</tt></b> from <b><tt>GCFLAGS</tt></b>,
and if you are using NeXTSTEP 3.3 (with gcc 2.5.8), also remove
<b><tt>-Wmissing-declarations</tt></b>;
</ul>

<li>to the end of <b><tt>Fontmap.GS</tt></b> add the line
"<b><tt>/Ohlfs&nbsp;/Courier&nbsp;;</tt></b>".
</ul>

<li>If you are running the Pencom co-Xist X server (development version),
the X headers and libraries are in the default places, so change the
makefile definitions of <b><tt>XINCLUDE</tt></b> and
<b><tt>XLIBDIRS</tt></b> to empty strings.
</ul>

<h4><a name="SCO"></a>SCO Unix/Xenix</h4>

<ul>
<li>See also "<a href="#386_Unix">386 Unix</a>" and
"<a href="#System_V">System V Unix platforms</a>".

<li>The standard cc compiler on SCO OpenServer v5 has optimizer bugs.
Compile without -O.

<li>The SCO Unix C compiler apparently can't handle the
<b><tt>P</tt></b><em>n</em> macros in <b><tt>std.h</tt></b>.  If you get
strange compilation errors on SCO Unix, ask SCO for a compiler fix.

<li>Meanwhile, to use gcc with SCO ODT, see <b><tt>unix-gcc.mak</tt></b>
for the appropriate switch settings.

<li>Because of a bug in SCO's floating point emulator, gcc 2.3.3 produces
code that causes crashes on machines without hardware floating point.  Use
a different compiler on these machines.

<li>If you aren't using the X11 driver, you must add
<b><tt>-lsocket</tt></b> to the value of <b><tt>EXTRALIBS</tt></b> to link
the date and time functions.

<li>If you want to use direct frame buffer addressing instead of X Windows,
include the relevant frame buffer devices (<b><tt>$(DD)ega.dev</tt></b>,
<b><tt>$(DD)vga.dev</tt></b>, etc.) and change the definition of
<b><tt>EGAVGA</tt></b> to <b><tt>$(EGAVGA_SCO)</tt></b> as indicated in
<b><tt>devs.mak</tt></b>.  <b>Note</b>: this works with SuperVGA displays
only for 800x600x16 mode.

<li>If the display looks "smeared", try recompiling
<b><tt>gdevpcfb.c</tt></b> with <b><tt>-O0</tt></b>.

<li>If Ghostscript crashes, use the <b><tt>-q</tt></b> switch or redirect
console output to a file.

<li>If your compiler accepts both the <b><tt>-Xt</tt></b> and
<b><tt>-Xa</tt></b> switches, use <b><tt>-Xt</tt></b>.  Even though this
causes the compiler to use incorrect rules for computing the result types
of "<b><tt>&lt;&lt;</tt></b>" and "<b><tt>&gt;&gt;</tt></b>",
<b><tt>-Xa</tt></b> enables optimizations that produce incorrect code.

<li>For SCO ODT 2.0, in addition to <b><tt>-D__SVR3</tt></b> and
<b><tt>-DSYSV</tt></b>, you need to specify <b><tt>-Dsco</tt></b>,
<b><tt>-DUSG</tt></b>, and <b><tt>-DMALLOC_0_RETURNS_NULL</tt></b>.  For
SCO ODT, you need
"<b><tt>EXTRALIBS=-lX11&nbsp;-lsocket&nbsp;-lmalloc</tt></b>", or maybe
only <b><tt>-lsocket</tt></b> depending on the version), and for SCO ODT
2.0, you must also specify <b><tt>-lc_s</tt></b>.  For SCO Xenix, you need
"<b><tt>EXTRALIBS=-lmalloc</tt></b>".

<li>For SCO OpenServer 5.0.5, add <b><tt>-L/usr/local/lib</tt></b> to
<b><tt>LDFLAGS</tt></b>.

<li>For all SCO systems, set "<b><tt>XINCLUDE=</tt></b>" and
"<b><tt>XLIBDIRS=</tt></b>".
</ul>

<h4><a name="SVR4"></a>SVR4 Unix</h4>

<ul>
<li>You may need to set <b><tt>EXTRALIBS=-lnsl</tt></b>.

<li>Do <b><em>not</em></b> change <b><tt>PLATFORM=unix_</tt></b> to <b><tt>PLATFORM=sysv_</tt></b>.

<li>On SVR4 Unix platforms with dynamic linking, you may need to define
<b><tt>XLIBDIR</tt></b> as the name of the directory that holds the X
Windows libraries.  Do <b><em>not</em></b> prefix the name with
"<b><tt>-L</tt></b>".

<li>For SVR4.0 systems, set <b><tt>-DSVR4</tt></b> and
<b><tt>-DSVR4_0</tt></b> in the makefile; do <b><em>not</em></b> set
<b><tt>-DSYSV</tt></b>.  For SVR4.2 (or later) and Solaris 2.<em>n</em>
systems, set only <b><tt>-DSVR4</tt></b> (<b><em>not</em></b>
<b><tt>-DSVR4_0</tt></b> nor <b><tt>-DSYSV</tt></b>).
</ul>

<h4><a name="System_V"></a>System V Unix platforms</h4>

<ul>
<li>If you are using a stock System V platform that lacks
<b><tt>rename</tt></b> and <b><tt>gettimeofday</tt></b>, in the makefile
change "<b><tt>PLATFORM=unix_</tt></b>" to
"<b><tt>PLATFORM=sysv_</tt></b>".

<li>You will probably need to change the definition of
<b><tt>INSTALL</tt></b> from "<b><tt>install</tt></b>" to
"<b><tt>/usr/ucb/install</tt></b>".
</ul>

<h4><a name="Unixware"></a>Unixware</h4>

<ul>
<li>The standard cc compiler has optimizer bugs.  Compile without
<b><tt>-O</tt></b>.
</ul>

<h3><a name="Hardware_specific_issues"></a>Hardware-specific issues</h3>

<h4><a name="Alpha_with_gcc"></a>Alpha with gcc</h4>

<ul>
<li>You don't have to use gcc on Alpha systems, because the bundled
compiler works.

<li>The Alpha code generator in gcc 2.7.2.1 is broken.  gcc 2.5.8 and 2.6.3
are probably usable.  Versions before 2.5.0 are believed not to work.  We
suggest you use a recent version.
</ul>

<h4><a name="Apollo"></a>H-P Apollo</h4>

<ul>

<li>You must run the compiler in ANSI-compatible mode (that is, set <b><tt>AK=</tt></b>{null string} in the makefile); otherwise it gives incorrect error
messages for any function declared as returning a float value.

<li>The H-P Apollo compiler may not compile Ghostscript correctly.  If you
get unexpected crashes at run time, use gcc.
</ul>

<h4><a name="ATT_7040"></a>AT&amp;T 7040 R3</h4>

<ul>
<li>If Ghostscript crashes on startup, recompile with <b><tt>-O0</tt></b>
to work around compiler bugs.
</ul>

<h4><a name="Convex"></a>Convex</h4>

<ul>

<li>Use <b><tt>unixansi.mak</tt></b>.  Do not invoke optimization
(<b><tt>-O1</tt></b>) because the compiler will produce incorrect code.

<li>Set <b><tt>CFLAGS</tt></b> to
"<b><tt>-no&nbsp;-fn&nbsp;-tm&nbsp;c1</tt></b>".
</ul>

<h4><a name="DECStations"></a>DECStations with Ultrix</h4>

<ul>

<li>If you get the compiler message "cfe: Fatal: _temp_19086.c:
Segmentation violation" or a similar one, try compiling with the
<b><tt>-oldc</tt></b> switch.

<li>You may wish to set

<p>
<b><tt>GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts</tt></b>

<p>
in the makefile to add the Display PostScript font directory to the font
search path.

<li>Set

<p>
<b><tt>CFLAGS="-Olimit&nbsp;2500"</tt></b>

<p>
to make the optimizer allocate enough table space.

<li>The Ultrix 4.4 C compiler compiles <b><tt>gdevm1.c</tt></b>
incorrectly.  Insert the following line in the makefile rule for
"<b><tt>gdevm1.$(OBJ)</tt></b>" (the body of the rule is empty in the
standard distribution):

<p>
<b><tt>$(CCC) -oldc gdevm1.c</tt></b>
</ul>

<h4><a name="HP_RISC"></a>H-P RISC workstations</h4>

<ul>

<li>HP-UX versions before 11.0 do not support POSIX threads.  Set
<b><tt>SYNC=nosync</tt></b> in the makefile before building.

<li>Ghostscript builds on H-P machines with either GNU gcc or H-P's
ANSI-capable <b><tt>cc</tt></b>.  The minimal, non-ANSI-capable
<b><tt>cc</tt></b> that shiped with some basic HPUX system does <em>not</em>
work.  If <b><tt>cc</tt></b> on your system doesn't accept the
<b><tt>-Aa</tt></b> switch, then you need to get the full
<b><tt>cc</tt></b> or gcc.

<li>If you use H-P's compiler, be sure you have upgraded to a recent
release.  Many bizarre symptoms have been reported trying to build
Ghostscript with older, buggier compilers, for example:
<ul>
<li>The link step fails with a message about "<b><tt>max</tt></b>" not being defined.
<li>The build succeeds, but the resulting executable fails to start up,
with an error message like "Initializing... Unrecoverable error: typecheck
in .registerencoding".
<li>The build succeeds, but the resulting executable produces a black
background on the first page of output.
</ul>

<li>It is reported that On HPUX 9.* you need at least compiler patch
PHSS_5723 and dld.sl patch PHSS_5734 to build Ghostscript.  (As of late
1997, those patches are long obsolete; the current patches are compiler
PHSS_10357 and dld.sl PHSS_11246.  It is unknown whether current
Ghostscript releases work with compiler/dld.sl versions older than these.)

<li>On HPUX 10.*, we don't know what combinations of compiler version and
switches work.  It is reported that On HPUX 10.20, setting
"<b><tt>CC=c89</tt></b>" and "<b><tt>CFLAGS=+O3&nbsp;$(XCFLAGS)</tt></b>"
works, contradicting the information in the next paragraph, but this may be
dependent on the specific compiler version.

<li>In either HPUX version, you need to set
"<b><tt>CC=cc&nbsp;-Aa</tt></b>" (or use <b><tt>-Ae</tt></b> if you
prefer), and set
"<b><tt>CFLAGS=-D_HPUX_SOURCE&nbsp;-O&nbsp;$(XCFLAGS)</tt></b>".  Higher
levels of optimization than <b><tt>-O</tt></b> may work depending on your
compiler revision; some users have reported success with
<b><tt>+O3</tt></b>, some have not.

<li>Some users have reported needing <b><tt>-DNOSYSTIME</tt></b> and
<b><tt>-D_POSIX_SOURCE</tt></b> in <b><tt>CFLAGS</tt></b>, but recent tests
do not show these to be necessary.

<li>If you use gcc, it's a good idea to have a recent release -- at the
very least 2.7.2.1 or later.You may be able to get a working
executable with an older gcc by removing <b><tt>-O</tt></b> from
<b><tt>CFLAGS</tt></b>.
</ul>

<h4><a name="Intergraph"></a>Intergraph Clipper</h4>

<ul>
<li>Recommended settings are:

<p>
<b><tt>XCFLAGS=-w -Q -DSYSV -D__SVR3<br>
EXTRALIBS=-lbsd -lc_s<br>
CC=acc -knr<br>
PLATFORM=sysv_</tt></b><br>&nbsp;

<li>You will probably need to change the value of <b><tt>XLIBS</tt></b> from
"<b><tt>XLIBS=Xt X11 Xext</tt></b>" to "<b><tt>XLIBS=Xt_s X11_s Xext</tt></b>".
</ul>

<h4><a name="MIPS"></a>MIPS</h4>

<ul>
<li>There is apparently a bug in older versions of the MIPS C compiler
which causes <b><tt>gxdither.c</tt></b> to compile incorrectly if
optimization is enabled (<b><tt>-O</tt></b>).  However, this bug is
definitely fixed in MipsPRO C version 6.00; with this version, compiling
with "<b><tt>-O2 -mips2</tt></b>" produces good output.
</ul>

<h4><a name="NCR_3550"></a>NCR 3550</h4>

<ul>
<li>With the NCR C Development Toolkit you must use <b><tt>-O0</tt></b>.
</ul>

<h4><a name="Pyramid"></a>Pyramid MIServer-S</h4>

<p>
See "<a href="#ATT_7040">AT&amp;T 7040 R3</a>".

<h4><a name="RS6000"></a>IBM RS/6000 with AIX</h4>

<ul>

<li>Many versions of the AIX C compiler have bugs that have prevented
Ghostscript from compiling and linking properly.  We believe that the
current Ghostscript release works around these bugs, and that
<b><tt>unixansi.mak</tt></b> with <b><tt>CC=cc</tt></b> should work.

<li>You must also edit the makefile (<b><tt>unixansi.mak</tt></b>) to change
<b><tt>INSTALL</tt></b> to <b><tt>/usr/ucb/install</tt></b>.

<li>AIX doesn't use a separate library for multi-thread support: set
<b><tt>STDLIBS=-lm</tt></b> in the makefile.

<li>If <b><tt>-DSYSV</tt></b> produces a complaint about the functions
<b><tt>index</tt></b> and <b><tt>rindex</tt></b> not being defined, try
removing it.

<li>If the xlc 1.2.1 optimizer runs out of memory, you may need to add
<b><tt>-qmaxmem=4000</tt></b> to <b><tt>CFLAGS</tt></b>.

<li>A user reports that the AIX C compiler shipped with AIX 3.2.5 compiles
Ghostscript only if invoked with "<b><tt>c89&nbsp;-D_POSIX_SOURCE</tt></b>"
and <b><em>without</em></b> <b><tt>-O</tt></b>.  On the other hand, another
user reports successful compilation using <b><tt>unix-ansi.mak</tt></b> and
the command line

<p>
<b><tt>make&nbsp;CC=c89&nbsp;XCFLAGS="-DOSY_AIX&nbsp;-D_ALL_SOURCE&nbsp;-qnoro&nbsp;-qmaxmem=3000&nbsp;-bfl"&nbsp;$*</tt></b><br>&nbsp;

<li>Apparently some (but not all) releases of the C library declare the
<b><tt>hypot</tt></b> function: if the declaration in
<b><tt>math_.h</tt></b> produces an error message, try removing it.

<li>The IBM X11R3 server is known to be buggy: use the MIT X server if
possible.

<li>The xlc 1.3.0.x compiler provided in AIX 3.2.5+ definitely will not
compile Ghostscript correctly if <b><tt>-O</tt></b> is used on all files.
A user reports that compiling <b><tt>z</tt></b>*<b><tt>.c</tt></b>,
<b><tt>gsmatrix.c</tt></b>, <b><tt>gxstroke.c</tt></b> without
<b><tt>-O</tt></b> is sufficient to produce a working executable:.

<li>Some installations of AIX 3.2.5 have what appears to be an incorrect or
inconsistent version of <b><tt>libXt.a</tt></b> in
<b><tt>/usr/lpp/X11/lib</tt></b>.  If linking shows
<b><tt>XtShellStrings</tt></b> and <b><tt>XtStrings</tt></b> as unresolved
externals, set
"<b><tt>XLIBDIRS=-L/usr/lpp/X11/lib/R5&nbsp;-L/usr/lpp/X11/lib</tt></b>"
rather than just "<b><tt>XLIBDIRS=-L/usr/lpp/X11/lib</tt></b>".

<li>Ghostscript has been successfully compiled and runs under AIX 4.3.3 and
the IBM C compiler version 5.  The following changes were required in
unixansi.mak:

<p>
<b><tt>CC=xlc</tt></b>
<br>
<b><tt>XCFLAGS=-qalign=natural</tt></b>

</ul>

<h4>
<a NAME="Silicon_Graphics"></a>Silicon Graphics</h4>

<p>
Users have had a lot of problems with the MIPSpro compilers on SGI systems.
We recommend using gcc.  If you do choose to use the MIPSpro compiler,
please read the following carefully.

<ul>
<li>
To make the optimizer allocate enough table space, set

<p><b><tt>CFLAGS="-Olimit 2500"</tt></b> (for older compilers)
<br><b><tt>CFLAGS="-OPT:Olimit=2500"</tt></b> (for newer compilers)

<p>
MIPSpro compiler version 3.19 is "older", and 7.1 is "newer"; we aren't
sure at what point in between the latter syntax was introduced.

<li>
With the compiler shipped with Irix 5.2, use the <b><tt>-ansi</tt></b>
option.

<li>
The SGI C compiler may produce warnings about "Undefined the ANSI standard
library defined macro stdin/stdout/stderr". To suppress these warnings, add
"<b><tt>-woff 608</tt></b>" to the definition of <b><tt>CFLAGS</tt></b>.

<li>
The SGI C compiler shipped with Irix 6.1 and 6.2 will not compile
<b><tt>zlib/deflate.c</tt></b> properly with optimization. Compile this file
separately without <b><tt>-O</tt></b>.

<li>
With IRIX 6.5.x and the MIPSpro 7.x compilers there have been reports about
incorrect output and binaries that cause segmentation faults.&nbsp; Various
solutions have been suggested and you may want to try them in this order,
until you get a working binary:

<ul>
<li>
Compile <b><tt>idict.c</tt></b> and <b><tt>isave.c</tt></b> separately
without optimization after doing a normal compile; then relink.e.g.:

<p>
<b><tt>cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/idict.o -c ./idict.c</tt></b><br>
<b><tt>cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/isave.o -c ./isave.c</tt></b>

<li>
Set <b><tt>CFLAGS=</tt></b> (no optimization).

<li>
Use only <b><tt>-O2</tt></b>.&nbsp;&nbsp; Compiler produces incorrect output
with <b><tt>-O3</tt></b> or "<b><tt>-Ofast=ip32 -show</tt></b>".

<li>
Irix 6.5.1m with MIPSpro compiler 7.2.1.1m, Irix 6.5.3m with MIPSpro
compiler 7.2.1, and probably other 6.5x / 7.2x combinations require
compiling with the <b><tt>-o32</tt></b> option. Compiling with the (default)
<b><tt>-n32</tt></b> option produces non-working executables.
<b><tt>-O2</tt></b> is OK (possibly except for <b><tt>idict.c</tt></b>), but
not <b><tt>-O3</tt></b>.
</ul>
</ul>

<h4><a name="Sun"></a>Sun</h4>

<ul>
<li>The Sun unbundled C compiler (SC1.0) doesn't compile Ghostscript
properly with the <b><tt>-fast</tt></b> option: Ghostscript core-dumps in
<b><tt>build_gs_font</tt></b>.  With that compiler use <b><tt>-g</tt></b>,
or use gcc instead.

<li>The Sun version of <b><tt>dbx</tt></b> often gives up with an error
message when trying to load Ghostscript.  If this happens, use GNU
<b><tt>gdb</tt></b> instead.  (<b><tt>gdb</tt></b> is more reliable than
<b><tt>dbx</tt></b> in other ways as well.)

<li>A bug in some versions of <b><tt>zlib</tt></b> results in an undefined
symbol <b><tt>zmemcmp</tt></b> when compiling with Sun cc.  Use gcc
instead.
</ul>

<h4><a name="SunOS"></a>SunOS</h4>

<ul>
<li>The <tt><b>tar</b></tt> program provided with SunOS 4.1.3 may not be
able to unpack the archives in the standard Ghostscript distribution.
Get a more recent version of <tt><b>tar</b></tt>, such as GNU
<tt><b>tar</b></tt>.

<li>In SunOS 4.1.[23], you may get undefined symbols
<b><tt>_get_wmShellWidgetClass</tt></b> and
<b><tt>_get_applicationShellWidgetClass</tt></b> when linking.  Compiling
"<b><tt>-Bstatic&nbsp;-lXmu&nbsp;-Bdynamic</tt></b>" appears to work for
SC1.0.  For gcc, try adding <b><tt>-static</tt></b> to
<b><tt>CFLAGS</tt></b>.  To solve the problem if you are using OpenWindows
3.0 (X11R4-based Xt), ask Sun for patches 100512-02 and 100573-03.
</ul>

<h4><a name="Solaris"></a>Solaris</h4>

<ul>
<li>Solaris 2.2 may require setting "<b><tt>EXTRALIBS=-lsocket</tt></b>".
Solaris 2.3 and later seem to require "<b><tt>EXTRALIBS=-lnsl&nbsp;-lsocket&nbsp;-lposix4</tt></b>".

<li>For Solaris 2.6 (and possibly some other versions), if you set
<b><tt>SHARE_LIBPNG=1</tt></b>, <b><tt>SHARE_ZLIB=1</tt></b>, or
<b><tt>SHARE_JPEG=1</tt></b>, you may need to set

<p>
<b><tt>XLDFLAGS=-R /usr/local/</tt></b>xxx<b><tt>/lib:/usr/local/lib</tt></b>

<p>
using the full path names of the relevant directories.

<li>Solaris 2.<em>n</em> uses <b><tt>/usr/openwin/share/include</tt></b>
for the X11 libraries rather than <b><tt>/usr/local/X/include</tt></b>.

<li>Solaris 2.<em>n</em> typically has Type 1 fonts in
<b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>.

<li>For Solaris 2.<b><tt>n</tt></b> in the makefile you must change
the definition of <b><tt>INSTALL</tt></b> from "<b><tt>install&nbsp;-c</tt></b>" to
"<b><tt>/usr/ucb/install&nbsp;-c</tt></b>".

<li>You may need to set <b><tt>XLIBDIR</tt></b> to the directory that holds
the X11 libraries, as for other SVR4 systems.  Set <b><tt>-DSVR4</tt></b>
in <b><tt>CFLAGS</tt></b>.

<li>If you are using the SunPRO C compiler, don't use optimization level
<b><tt>-xO3</tt></b>.  On SPARC platforms the compiler hangs; on Intel
platforms the generated code is incorrect.  With this compiler on Intel, do
not use the <b><tt>-native</tt></b> flag: floating point computations
become unacceptably inaccurate.  You can use <b><tt>-xcg92</tt></b> (SPARC
V8) and <b><tt>-dalign</tt></b> for better performance.
</ul>

<h4><a name="VAX_Ultrix"></a>VAX with Ultrix</h4>

<ul>
<li>You may wish to set

<p>
<b><tt>GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts</tt></b>

<p>
in the makefile to add the Display PostScript font directory to the font
search path.
</ul>

<hr>

<h2><a name="OS2_build"></a>How to build Ghostscript from source (OS/2 version)</h2>

<p>
<em>Note: This section was contributed by a user: please e-mail Hermann
Ulrichsktter &lt;<a
href="mailto:ulrichsk@t-online.de">ulrichsk@t-online.de</a>&gt; if you have
questions or problems.</em>

<p>
The following instructions are for building with emx 0.9d/Fix2.  Be warned
that with this version of gcc/emx, compiler optimization flags '-O' or '-O1'
will produce non-working output.

<ul>
<li>The relevant makefile is <b><tt>os2.mak</tt></b> The gcc/emx 0.9b (or
later) compiler and IBM <b><tt>NMAKE.EXE</tt></b> are required.

<li>For gcc/emx versions 0.9c and later, the <b><tt>LINK386</tt></b>
command must <b><em>include</em></b>
"<b><tt>$(COMPBASE)\lib\end.lib</tt></b>"; version 0.9b requires
<b><em>omitting</em></b> it.  The current <b><tt>os2.mak</tt></b> file does
include this file in the <b><tt>LINK386</tt></b> command, so if you are
using 0.9b, delete this file reference before building.

<li>Be sure you are using the standard OS/2 shell, <b><tt>CMD.EXE</tt></b>.
Some other shells have bugs or differences that cause the makefile not to
work.

<li>Make sure you followed the instructions in "How to unpack the source
code" and "How to unpack the third-party libraries".

<li>Use jpegsrc_v6b.tar.gz, zlib.tar.gz and libpng-1.0.3.tar.gz.  Earlier
versions may not work.

<li>If you wish to include support for XFree86, edit the makefile
to change <b>BUILD_X11=0</b> to <b>BUILD_X11=1</b>.  
XFree86 for OS/2 can be obtained from
<a href="http://borneo.gmd.de/~veit/os2/xf86os2.html">
http://borneo.gmd.de/~veit/os2/xf86os2.html</a>
You must use emx 0.9d.
</ul>

<p>
Before compiling or linking, execute <b><tt>md bin</tt></b> and <b><tt>md
obj</tt></b> in the <b><tt>gs</tt></b> directory to create the directories
for the binaries.

<p>
First, build the standard configuration:

<ul>
<li>Edit gs/src/os2.mak: find line with 'CO=-O' (Optimizer flag) and edit
this line to 'CO=-O2' (-O or -O1 do not work!).

<li>To start the make process, type <b><tt>nmake -f .\src\os2.mak</tt></b>,
from the gs-directory.

<li>One DLL and two EXEs will be produced in <b><tt>gs/bin</tt></b>:
<b><tt>gsdll2.dll</tt></b> (the Ghostscript DLL), <b><tt>gsos2.exe</tt></b>
(the Ghostscript executable) and <b><tt>gspmdrv.exe</tt></b> (the
Presentation Manager display driver).  All other newly generated files will
be produced in <b><tt>gs/obj</tt></b>.
</ul>

<p>
Now, if you wish, you can edit OS2.MAK to suit your needs, and then perform
<b><tt>nmake -f .\src\os2.mak clean</tt></b> and then <b><tt>nmake -f
.\src\os2.mak</tt></b>.

<hr>

<h2><a name="VMS_build"></a>How to build Ghostscript from source (OpenVMS version)</h2>

<p>The DECC6.2-003 compiler has an optimization problem that may lead to
warnings about the "ANSI aliasing rules".  DEC (Compaq) can provide a fix
for this problem.  The DECC6.2-006 compiler apparently does not have the
problem.

<p>
DEC C runtime library versions 5.5 and newer have an <b><tt>exit</tt></b>
function that is compatible with all other C systems, but some older ones
don't.  If you get error messages from VMS when auxiliary programs such as
<b><tt>genarch</tt></b> or <b><tt>echogs</tt></b> finish executing, find the
line in stdpre.h that reads

<blockquote><b><tt>
/*#define&nbsp;OLD_VMS_C*/
</tt></b></blockquote>

and remove the <b><tt>/*</tt></b> and <b><tt>*/</tt></b>, changing it to

<blockquote><b><tt>
#define&nbsp;OLD_VMS_C
</tt></b></blockquote>

<p>
Some versions of DEC's X server have bugs that produce broad bands of color
where dither patterns should appear, or characters displayed white on top
of black rectangles or not displayed at all.  If this happens, consult the
usage documentation for how to <a href="Use.htm#X_server_bugs">work around
X server bugs</a> using X resources; also report the problem to DEC, or
whomever supplied your X server.

<p>
You may also wish to turn off the use of a backing pixmap with Ghostscript,
either to work around X server memory limitations or bugs, or to obtain
faster displaying at the expense of no redrawing when a Ghostscript window
is restored from an icon or exposed after being occluded by another window.
Again, the <a href="Use.htm">usage documentation</a> tells how to do this.

<p>
You can <a href="Fonts.htm#Precompiling">precompile any Type 1 font</a>
into C, then compile and build it into Ghostscript, as described in the
<a href="Fonts.htm">fonts documentation</a>.  If you do this, then add
"<b><tt>$(PSD)ccfonts.dev</tt></b>" to <b><tt>FEATURE_DEVS</tt></b> in
<b><tt>OPENVMS.MAK</tt></b>:

<blockquote><b><tt>
$&nbsp;FEATURE_DEVS&nbsp;=&nbsp;"$(PSD)psl3.dev&nbsp;$(PSD)pdf.dev&nbsp;$(PSD)dpsnext.dev&nbsp;$(PSD)ttfont.dev&nbsp;$(PSD)ccfonts.dev"
</tt></b></blockquote>

<p>
Specify the font names with <b><tt>ccfonts1</tt></b>:

<blockquote><b><tt>
$&nbsp;ccfonts1&nbsp;=&nbsp;"Courier&nbsp;Courier_Oblique&nbsp;Courier_Bold&nbsp;Courier_BoldOblique"
</tt></b></blockquote>

<p>
If this makes the line too long, add another line of the same form, such as

<blockquote><b><tt>
$&nbsp;ccfonts1&nbsp;=&nbsp;"Courier&nbsp;Courier_Oblique&nbsp;Courier_Bold&nbsp;Courier_BoldOblique"
$&nbsp;ccfonts2&nbsp;=&nbsp;"Times_Roman&nbsp;Times_Italic&nbsp;Times_Bold&nbsp;Times_BoldItalic"
</tt></b></blockquote>

<h3><a name="GNU_make_VMS"></a>Building with GNU make on OpenVMS</h3>

<p>
<em>Note: GNU make on OpenVMS apparently has bugs that make it stop with an
error when building Ghostscript version 5.80 or later.  Until further
notice, use MMS or MMK for building Ghostscript on OpenVMS.  See <a
href="#MMK_MMS_VMS">below</a> for details.</em>

<p>
As of Ghostscript version 5.0 you can use GNU make -- with the file
<b><tt>OPENVMS.MAK</tt></b> and some auxiliary <b><tt>.COM</tt></b> files
-- to build Ghostscript on OpenVMS.  Use the command:

<blockquote>
<b><tt>make&nbsp;-fopenvms.mak&nbsp;"DECWINDOWS=</tt></b><em>[</em><b><tt>1.2</tt></b><em>]</em><b><tt>"</tt></b>
</blockquote>

<p>
That is, specify either "<b><tt>1.2</tt></b>" or nothing (blank) as the
value of <b><tt>DECWINDOWS</tt></b>.  In Europe and other parts of the world
where ISO standard paper sizes are used, append "<b><tt>A4_PAPER=1</tt></b>"
to that line to make A4 the default paper size at run time.

<p>
If you haven't a prebuilt copy of GNU make, you'll have to build it
yourself; as of Version 3.76 (but not earlier) it is said to build properly
under OpenVMS on both VAX and Alpha.  The kit is available at the
<a href="http://www.gnu.org/">Free Software Foundation's</a> ftp site and
its mirrors.  See

<blockquote>
<a href="ftp://ftp.gnu.org/pub/gnu/"
class="offsite">ftp://ftp.gnu.org/pub/gnu/</a>
</blockquote>

<h3><a name="MMK_MMS_VMS"></a>Building with MMK or MMS on OpenVMS</h3>

<p>
As of Ghostscript version 5.68 you can use MMK or MMS to build Ghostscript on
OpenVMS.  MMS is a utility available from Compaq (Digital);
MMK is a free program largely compatible with MMS.

<p>
Building Ghostscript with MMK or MMS uses the file
<b><tt>OPENVMS.MMK</tt></b> and some auxiliary <b><tt>.COM</tt></b> files.
To build Ghostscript with MMK or MMS, use the command:

<blockquote>
<b><tt>###/descrip=[.src]openvms.mmk/macro=("DECWINDOWS1_2=</tt></b><em>{</em><b><tt>0</tt></b>,<b><tt>1</tt></b><em>}</em><b><tt>")</tt></b>
</blockquote>

where <b><tt>###</tt></b> is either <b><tt>mmk</tt></b> or <b><tt>mms</tt></b>.

<p>
Specify <b><tt>DECWINDOWS1_2=1</tt></b> for DECWINDOWS 1.2,
<b><tt>DECWINDOWS1_2=0</tt></b> for other DECWINDOWS versions.  In Europe
and other parts of the world where ISO standard paper sizes are used, add
<b><tt>,"A4_PAPER=1"</tt></b> just before the final closing parenthesis to
make A4 the default paper size at run time.

<p>
To download MMK (source code, and VAX and Alpha executables), visit

<blockquote>
<a href="http://www.madgoat.com/mmk.html">http://www.madgoat.com/mmk.html</a>
</blockquote>

<hr>

<h2><a name="Other_environments"></a>Other environments</h2>

<h3><a name="No_multi_thread"></a>Environments lacking multi-threading</h3>

<p>
All environments mentioned here by name have multi-threading capability.
However, if your environment doesn't, you can remove all need for
multi-threading by setting <b><tt>SYNC=nosync</tt></b> in the top-level
makefile.  Note that you will not be able to use any so-called "async"
drivers (drivers that overlap interpretation and rasterization) if you do
this.  No such drivers are in the <b><tt>DEVICE_DEVS*</tt></b> lists of any
makefile that we distribute.

<h3><a name="Plan_9"></a>Plan 9</h3>

<p>
Use <b><tt>unix-gcc.mak</tt></b>, editing it to define

<blockquote><b><tt>
CC=cc
GCFLAGS=-D_BSD_EXTENSION -DPlan9
</tt></b></blockquote>

<p>
You will also probably have to edit many path names.

<h3><a name="QNX"></a>QNX</h3>

<p>
David J. Hawkey Jr. writes that he built Ghostscript 4.03 and 5.0 under QNX
4.22, 4.23, and 4.24 using Watcom C 10.6 and that "it works quite well,
after figuring out the <b><tt>/etc/config/lpsrvr</tt></b> directives,
except for color printing to my HP DeskJet some-number-or-another".  Here
is a concise presentation of changes based on the ones he made for
Ghostscript 4.03.

<dl>
<dt><b><tt>unixansi.mak</tt></b>
<dd><table cellpadding=0 cellspacing=0>
<tr valign=bottom>
	<th align=left>Original lines
	<td>&nbsp;&nbsp;
	<th align=left>Change to
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>INSTALL = install -c<br>INSTALL_PROGRAM = $(INSTALL) -m 755<br>INSTALL_DATA = $(INSTALL) -m 644</tt></b>
	<td>&nbsp;
	<td><b><tt>INSTALL = cp<br>INSTALL_PROGRAM = $(INSTALL)<br>INSTALL_DATA = $(INSTALL)</tt></b>
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>datadir = $(prefix)/share</tt></b>
	<td>&nbsp;
	<td><b><tt>datadir = $(prefix)/lib</tt></b>
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>CFLAGS_STANDARD=-O</tt></b>
	<td>&nbsp;
	<td><b><tt>CFLAGS_STANDARD=-Otx -zp1 -mf</tt></b>
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>LDFLAGS=$(XLDFLAGS)</tt></b>
	<td>&nbsp;
	<td><b><tt>LDFLAGS=-mf -N32k $(XLDFLAGS)</tt></b>
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>EXTRALIBS=</tt></b>
	<td>&nbsp;
	<td><b><tt>EXTRALIBS=-lXqnx_s -lsocket</tt></b>
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>XINCLUDE=-I/usr/local/X/include</tt></b>
	<td>&nbsp;
	<td><b><tt>#XINCLUDE=-I/usr/local/X/include</tt></b>
<tr>	<td colspan=3><hr>
<tr valign=top>	<td><b><tt>XLIBDIRS=-L/usr/local/X/lib<br>XLIBDIR=<br>XLIBS=Xt Xext X11</tt></b>
	<td>&nbsp;
	<td><b><tt>#XLIBDIRS=-L/usr/local/X/lib<br>#XLIBDIR=<br>XLIBS=Xt_s Xext X11_s</tt></b>
<tr>	<td colspan=3><hr>
</table>
</dl>

<dl>
<dt><b><tt>gp_unifs.c</tt></b>
<dd>After the line

<blockquote>
<b><tt>#include&nbsp;&lt;sys/param.h&gt;</tt></b>
</blockquote>

<p>
add these lines:

<blockquote>
<b><tt>#if&nbsp;defined(__QNX__)<br>
#include&nbsp;&lt;unix.h&gt;<br>
#endif</tt></b><br>
</blockquote>
</dl>

<dl>
<dt><b><tt>gp_unix.c</tt></b>
<dd>After the line

<blockquote>
<b><tt>#include&nbsp;"time.h"</tt></b>
</blockquote>

<p>
add these lines:

<blockquote>
<b><tt>#if&nbsp;defined(__QNX__)<br>
#include&nbsp;&lt;sys/time.h&gt;<br>
#endif</tt></b><br>
</blockquote>
</dl>

<dl>
<dt><b><tt>time_.h</tt></b>
<dd>Modify the line beginning

<blockquote>
<b><tt>#&nbsp;&nbsp;if&nbsp;defined(Plan9)&nbsp;||</tt></b>
</blockquote>

<p>
to begin

<blockquote>
<b><tt>#&nbsp;&nbsp;if&nbsp;defined(__QNX__)&nbsp;||&nbsp;defined(Plan9)&nbsp;||</tt></b>
</blockquote>
</dl>

<dl>
<dt><b><tt>/etc/config/lpsrvr</tt></b>
<dd>Here is Hawkey's <b><tt>lpsrvr</tt></b> as an example.

<blockquote>
<pre># lpsrvr
#
# Defines the print queues and their devices
#
# Queues

# ink-jet: Ghostscript interpreter for mono DeskJet - LaserJet works
#          better than DeskJet!

[ij-monops]
        ta=lpt1
        co=/usr/local/bin/gs -q -sDEVICE=laserjet -sOutputFile=- -dNOPAUSE $(spfile) quit.ps | cat &gt; $(device)

# Devices

[-lpt1]
        dv=/dev/par1

[-lpt2]
        dv=/dev/par2
</pre></blockquote>
</dl>


<h2><a name="UFST_build"></a>How to build Ghostscript with UFST</h2>

<p>
<em>Note: This section is only for customers who have licensed Agfa's UFST.
Other users please skip this section.
</em>

<p>
Ghostscript sources do not include UFST sources. You need to obtain them from Agfa.
Ghostscript includes only some source modules that provide a bridge to UFST.

<p>
Ghostscript makefiles do not include any script for building UFST libraries.
Refer to Agfa's manual how to build them. UFST object libraries must be built
before building Ghostscript with the UFST bridge.

<p>
To build Ghostscript with UFST, specify additional options for "make":

<dl>
<dt><b><tt>UFST_BRIDGE=1</tt></b>
<dd>forces the UFST bridge to build.

<dt><b><tt>UFST_ROOT=path</tt></b>
<dd>specifies the path to UFST root directory or folder.

<dt><b><tt>UFST_CFLAGS=options</tt></b>
<dd>specifies C compiler options for UFST library. Refer to Agfa's manual for information about them.

<dt><b><tt>UFST_LIB_EXT=extension</tt></b>
<dd>sets the file name extension for object libraries. You must use the appropriate one for your platform and linker.
</dl>

<p>An example for Unix/GCC :
<blockquote>
<tt>UFST_BRIDGE=1 UFST_ROOT=../Agfa UFST_CFLAGS=-DGCCx86 UFST_LIB_EXT=.a</tt>
</blockquote>

<p>For Windows/MSVC you need only specify UFST_ROOT.
msvc32.mak sets the other options automatically.

<p>

<h2><a name="FT_build"></a>How to build Ghostscript with Free Type</h2>

<p>
<em>Note: This section is only for users who wish to use Ghostscript with Free Type font renderer.
Other users please skip this section.
</em>

<p>
Ghostscript sources do not include Free Type sources. You need to obtain them from Free Type group.
Ghostscript includes only some source modules that provide a bridge to Free Type.

<p>
Ghostscript makefiles do not include any script for building Free Type libraries.
Refer to Free Type manual how to build them. Free Type object libraries must be built
before building Ghostscript with the Free Type bridge.

<p>
To build Ghostscript with Free Type, specify additional options for "make":

<dl>
<dt><b><tt>FT_BRIDGE=1</tt></b>
<dd>forces the Free Type bridge to build.

<dt><b><tt>FT_ROOT=path</tt></b>
<dd>specifies the path to Free Type root directory or folder.

<dt><b><tt>FT_CFLAGS=options</tt></b>
<dd>specifies C compiler options for Free Type library. Refer to Free Type manual for information about them.

<dt><b><tt>FT_LIB_EXT=extension</tt></b>
<dd>sets the file name extension for object libraries. You must use the appropriate one for your platform and linker.
</dl>

<p>An example for Unix/GCC :
<blockquote>
<tt>FT_BRIDGE=1 FT_ROOT=../FreeType FT_CFLAGS=-DGCCx86 FT_LIB_EXT=.a</tt>
</blockquote>

<p>For Windows/MSVC you need only specify FT_ROOT.
msvc32.mak sets the other options automatically.

<p>

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1996, 2000 Aladdin Enterprises.
All rights  reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Background information for new users of Ghostscript</title>
<!-- $Id: New-user.htm,v 1.49 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: new-user.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>Background information for new users of Ghostscript</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<ul>
<li><a href="#Overview">An overview of Ghostscript</a>
<ul>
<li><a href="#Find_Ghostscript">How is Ghostscript licensed?  Where can I find it?</a>
<ul>
<li><a href="#AFPL_gs">AFPL Ghostscript (formerly Aladdin Ghostscript)</a>
<li><a href="#GNU_gs">GNU Ghostscript</a>
<li><a href="#Commercial_gs">Commercial versions</a>
</ul>
<li><a href="#Third-party_libraries">Libraries obtained from other parties</a>
<li><a href="#Support">What if I want support?</a>
<li><a href="#Commercial_use">What about commercial use?</a>
<li><a href="#Platforms">What platforms does Ghostscript run on?</a>
<ul>
<li><a href="#Third-party_platforms">Ports done by users</a>
</ul>
</ul>
<li><a href="#Related_work">Related work</a>
<ul>
<li><a href="#Drivers">Drivers</a>
<li><a href="#Previewers">Previewers</a>
<ul>
<li><a href="#Previewer_X">Previewers for X Windows</a>
<li><a href="#Previewer_DOS-Win">Previewers for DOS and MS Windows</a>
<li><a href="#Previewer_Linux">A previewer for Linux</a>
</ul>
<li><a href="#Fonts">Fonts</a>
<li><a href="#Related_programs">Related programs</a>
</ul>
<li><a href="#Need_help">If you need help</a>
<ul>
<li><a href="#Reporting_problems">Reporting problems</a>
</ul>
<li><a href="#Contacting_us">Contacting Ghostscript headquarters</a>
<li><a href="#How_to_help">How you can help improve Ghostscript</a>
<li><a href="#Acknowledgments">Acknowledgements</a>
</ul>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Overview"></a>An overview of Ghostscript</h2>

<p>
Ghostscript is the name of a set of software that provides:

<ul>
<li>An interpreter for the <b>PostScript</b><small><sup>TM</sup></small>
language and the Adobe <b>Portable Document Format</b> (<b>PDF</b> --
sometimes confused with Acrobat, Adobe's PDF browser and editor product);

<li>Input modules (utilities) for reading a variety of raster formats,
including <b>CMYK</b>, <b>GIF</b>, <b>JFIF</b> (<b>JPEG</b>), <b>MIFF</b>,
<b>PBM</b>/<b>PGM</b>/<b>PPM</b>, and <b>PCX</b>;

<li>Output modules (drivers) for a wide variety of window systems (including
X Windows and Microsoft Windows), raster file formats, and printers, as well
as a PDF output module that implements functions similar to Adobe's
Acrobat<small><sup>TM</sup></small> Distiller<small><sup>TM</sup></small>
product; and

<li>The Ghostscript library, a set of procedures to implement the graphics
and filtering capabilities that are primitive operations in the PostScript
language and in PDF.
</ul>

<p>
In simple terms, this means that Ghostscript can read a PostScript or PDF
file and display the results on the screen or convert them into a form you
can print on a non-PostScript printer. Especially together with several
popular <a href="#Previewers">previewers</a>, with Ghostscript you can view
or print an entire document or even isolated pages, even if your computer
doesn't have Display PostScript and your printer doesn't handle PostScript
itself.

<h3><a name="Find_Ghostscript"></a>How is Ghostscript licensed?  Where can I find it?</h3>

<p>
Ghostscript is a copyrighted work (artofcode LLC owns the copyright);
it is not shareware or in the public domain.  Different versions of it are
distributed with three different licenses:

<h4><a name="AFPL_gs"></a>AFPL Ghostscript (formerly Aladdin
Ghostscript)</h4>

<p>
Versions entitled "AFPL Ghostscript", or older versions called "Aladdin
Ghostscript"), are distributed with a license called the <a
href="Public.htm">Aladdin Free Public License</a> that allows free use,
copying, and distribution by end users, but does not allow commercial
distribution.  For information on obtaining the current version of
Ghostscript with this license please visit our website at

<blockquote>
<a href="http://www.cs.wisc.edu/~ghost/" 
class="offsite">http://www.cs.wisc.edu/~ghost/</a>
</blockquote>

<p>
AFPL ghostscript is also available directly from our ftp mirrors as

<blockquote>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/</a>gs###/ghostscript#.##
</blockquote>

<p>
where "#.##" and "###" are the version number with and without punctuation, for instance "5.50" and "550",
or under AFS by direct reference to

<blockquote>
/afs/cs.wisc.edu/p/mirror/pub/mirrors/ghost/AFPL/
</blockquote>

<p>
Finally, you can search for other sites, perhaps nearer to your location, that 
provide ftp access to Ghostscript using an ftp search
service such as

<blockquote>
<a href="http://ftpsearch.lycos.com/"
class="offsite">http://ftpsearch.lycos.com/</a>
</blockquote>

<p>
General search engines like

<blockquote>
<a href="http://www.google.com/"
class="offsite">http://www.google.com/</a>
<br>
<a href="http://www.altavista.com/"
class="offsite">http://www.altavista.com/</a>
</blockquote>

<p>
may also be useful, but in searching for files they are likely to provide
many unusable references mixed in among the useful ones.

<p>
If you haven't convenient access to the Internet, you can order AFPL
Ghostscript on a CD along with some useful related programs and
documentation.  <b>Please note</b> that this is not "commercial licensing":
you are still getting freely redistributable software, with no support and
no warranty.  For more information write to <a href="#GSview">Russell
Lang</a> or see

<blockquote>
<a href="http://www.ghostgum.com.au/cd.htm" class="offsite">http://www.ghostgum.com.au/cd.htm</a>
</blockquote>

<h4><a name="GNU_gs"></a>GNU Ghostscript</h4>

<p>
Versions entitled "GNU Ghostscript" are distributed with the GNU <a
href="http://www.gnu.org/copyleft/gpl.html">General Public License</a>,
which allows free use, and free copying and redistribution under certain
conditions (including, in some cases, commercial distribution).  GNU
Ghostscript versions are usually released shortly after the <em>next</em>
AFPL Ghostscript version; for example, GNU Ghostscript 5.10 was released
shortly after Aladdin Ghostscript 5.50.  You can always get the current
version of GNU Ghostscript by Internet FTP from

<blockquote>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/</a>
</blockquote>

<p>
or under AFS by direct reference to

<blockquote>
/afs/cs.wisc.edu/p/mirror/pub/mirrors/ghost/gnu/current/
</blockquote>

<p>
or from any of the many GNU distribution sites.  The GNU home ftp site is

<blockquote>
<a href="ftp://ftp.gnu.org/pub/gnu/"
class="offsite">ftp://ftp.gnu.org/pub/gnu/</a>
</blockquote>

<p>
For a more complete list of sites, including sites outside the U.S., write
to <a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.  The
<a href="Commprod.htm#FSF-address">Free Software Foundation</a> makes GNU
Ghostscript available on tape and CD-ROM.

<p><a name="CTAN"></a>
Both AFPL and GNU versions are also available from sites in the
Comprehensive TeX Archive Network (CTAN), in a tree based at
/tex-archive/support/ghostscript/, which you can find at these principal
CTAN distribution sites ("participating hosts") as of mid-1998:

<blockquote><table cellpadding=0 cellspacing=0>
<tr>	<td><a
href="ftp://ctan.tug.org/tex-archive/support/ghostscript/"
class="offsite">ftp://ctan.tug.org/tex-archive/support/ghostscript/</a>
	<td>&nbsp;&nbsp;
	<td>Massachusetts, U.S.A.
<tr>	<td><a href="ftp://ftp.dante.de/tex-archive/support/ghostscript/"
class="offsite">ftp://ftp.dante.de/tex-archive/support/ghostscript/</a>
	<td>&nbsp;
	<td>Deutschland
<tr>	<td><a
href="ftp://ftp.tex.ac.uk/tex-archive/support/ghostscript/"
class="offsite">ftp://ftp.tex.ac.uk/tex-archive/support/ghostscript/</a>
	<td>&nbsp;
	<td>United Kingdom
</table></blockquote>

<p>
CTAN has more than fifty mirror sites around the world.  For information
about CTAN sites, including how to use them over the World Wide Web, visit
<a href="http://www.ctan.org/" class="offsite">ctan.org</a> or get
the file <b><tt>CTAN.sites</tt></b> from any CTAN server, for
instance

<blockquote>
<a href="ftp://ctan.tug.org/tex-archive/CTAN.sites" 
class="offsite">ftp://ctan.tug.org/tex-archive/CTAN.sites</a>
</blockquote>

<h4><a name="Commercial_gs"></a>Commercial versions</h4>

<p>
Finally, Ghostscript is also available for commercial licensing.  See
"<a href="#Commercial_use">What about commercial use?</a>" for details.

<p>
AFPL Ghostscript and GNU Ghostscript come with <b>NO WARRANTY</b> and
<b>NO SUPPORT</b>.  If you have a question or a problem to report, please
see "<a href="#Need_help">If you need help</a>" for information about what
to do.

<hr>

<h3><a name="Third-party_libraries"></a>Libraries obtained from other parties</h3>

<p>
The Ghostscript source code distribution, and the Ghostscript executable
code, include libraries obtained from other parties.  All the source files
mentioned in this section are in the Ghostscript and third-party library
source kits.  The documentation of <a href="Make.htm">how to build
Ghostscript</a> tells <a href="Make.htm#Acquiring">where to get these
libraries</a> and <a href="Make.htm#Unpack">how to unpack them</a>.

<blockquote><dl>
<dt>The <a href="http://www.ijg.org/" class="offsite">Independent JPEG
Group</a> (IJG)
library
<dd>The executable versions of Ghostscript are based in part on the work of
the Independent JPEG Group.  For more information, see
<b><tt>jpeg.mak</tt></b> in the main Ghostscript source directory and
<b><tt>README</tt></b> in the <b><tt>jpeg</tt></b> subdirectory of the
Ghostscript source code

<dt>The <a href="http://www.libpng.org/pub/png/"
class="offsite">Portable Network
Graphics</a> (PNG) library created by Dave Martindale, Guy Eric Schalnat,
Paul Schmidt, and Tim Wegner, of Group 42, Inc.
<dd>For more information, see <b><tt>libpng.mak</tt></b> in the main
Ghostscript source directory, and <b><tt>README</tt></b> and
<b><tt>png.h</tt></b> in the <b><tt>libpng</tt></b> subdirectory of the
Ghostscript source code.

<dt>The <a href="http://www.gzip.org/zlib/"
class="offsite">zlib</a> library
created by Jean-loup Gailly and Mark Adler
<dd>For more information, see <b><tt>zlib.mak</tt></b> in the main
Ghostscript source directory, and <b><tt>README</tt></b> in the
<b><tt>zlib</tt></b> subdirectory of the Ghostscript source code.
</dl></blockquote>

<p>
These libraries do <b>NOT</b> fall under either the GNU License or the
Aladdin Free Public License; they come with their own licenses,
which also allow free use and redistribution under appropriate
circumstances and which appear in the files mentioned just above.  These
libraries are entirely original works of their respective authors, and are
provided <strong>AS IS</strong> with <strong>NO WARRANTY</strong> and 
<strong>NO SUPPORT</strong>.

<hr>

<h3><a name="Support"></a>What if I want support?</h3>

<p>
Neither artofcode LLC nor any organization known to us currently offers
Ghostscript support for end-users -- that is, for people or companies who
just want to use Ghostscript and not redistribute it as part of a product.
Companies that include Ghostscript in their products under a commercial
license (see next section) may offer support to end-users, but it would be
support for the company's own product, not for Ghostscript <em>per se</em>.

<p>
Nothing in the GNU or AFPL licenses prevents anyone from providing
support for Ghostscript, either free or commercial.  We would be happy to
include in the Ghostscript documentation the contact information for anyone
who wants to offer such support.

<hr>

<h3><a name="Commercial_use"></a>What about commercial use?</h3>

<p>
GNU Ghostscript may not be incorporated into commercial products which
forbid copying or for which customers cannot obtain source code for no more
than the cost of reproduction, although it may be distributed ("aggregated")
with commercial products; AFPL Ghostscript may not be incorporated into
commercial products at all, and may be distributed commercially only under
extremely limited circumstances.  However, Ghostscript is also available for
commercial licensing, which in addition to the right to incorporate
Ghostscript into commercial products includes support, a limited warranty,
high-quality fonts, and other benefits.  For more information about
commercial licensing of Ghostscript, please contact our commercial
distribution partner, the only entity legally authorized to distribute
Ghostscript <em>per se</em> on any terms other than the GNU or AFPL
licenses:

<blockquote><address>
Licensing Information<br>
Artifex Software Inc.<br>
101 Lucas Valley Road, Suite 110<br>
San Rafael, CA 94903  U.S.A.<br>
+1-415-492-9861 Voice<br>
+1-415-492-9862 Fax<br>
<a href="mailto:info@artifex.com">info@artifex.com</a><br>
<a href="http://www.artifex.com/">http://www.artifex.com/</a>
</address></blockquote>

<p>
Artifex does not offer commercial support as a separate service; support is
available only to OEM licensees (that is, licensees who redistribute
Ghostscript in a product).

<hr>

<h3><a name="Platforms"></a>What platforms does Ghostscript run on?</h3>

<p>
Ghostscript is written entirely in C (with some optional assembly-language
accelerators for DOS platforms), with special care taken to make it run
properly on systems of either byte order ("low-endian" and "high-endian")
and of various word lengths.  GNU Ghostscript is known to run on the
following platform families:

<ul>
<li>A wide variety of Unix systems using X Windows version 11, releases 4, 5,
and 6, including

<ul compact>
<li>Sun-3, Sun-4, Sun-386i, Sun SPARCStation with SunOS 4 and Solaris 2.[56]
<li>Generic Intel-based systems running Linux, 386/ix, 386BSD, FreeBSD, ISC Unix, SCO Unix, and Solaris
<li>H-P 9000/300 and 9000/800
<li>DECStation 2100, 3100, and 5xxx
<li>Alpha systems running Digital Unix
<li>VAX running Ultrix
<li>Sequent Symmetry
<li>Convex C1 and C2
<li>Tektronix 4300
<li>SGI Iris Indigo
<li>4.4BSD Unix systems (FreeBSD on Intel)
<li>NetBSD on Intel, Sun SPARC, Motorola M68K (Apple, Amiga, Sun, H-P), and VAX
</ul>

<li>Sun workstations running SunView

<li>VAX and Alpha systems running OpenVMS with X11 compiled with
either DEC C or gcc
</ul>

<p>
AFPL Ghostscript is known to run on all of the above, and additionally
on the following platform families:

<ul>
<li>IBM PC and compatibles with EGA, VGA, SuperVGA, or compatible graphics
under MS-DOS 3.1, 3.3, 5.0, or 6.22, and Microsoft Windows 3.1, NT, 95, or
98;

<li>IBM PC and compatibles under DR DOS 6.0;

<li>IBM PC and compatibles under OS/2 2.0, 2.1 and Warp 3.0.

<li>Apple Macintosh with System 7 or later, both Motorola 680x0 and PowerPC
native. For specific information on the Macintosh implementation, see

<blockquote>
<a href="http://www.cs.wisc.edu/~ghost/macos/" 
class="offsite">http://www.cs.wisc.edu/~ghost/macos/</a>
</blockquote>
</ul>

<p>
It is very likely that Ghostscript will run under other versions of DOS,
and other versions of Unix that support X11, but it has not been tested in
these environments.  (Ghostscript does not run well on PC-compatibles with
Hercules display cards, since text and graphics output interfere with each
other, but you can work around this by redirecting the text output to a file.)

<h4><a name="Third-party_platforms"></a>Ports done by users</h4>

<p>
Ghostscript has been ported to a number of platforms by users, who are
willing to be contacted about problems on those specific platforms:

<dl>
<dt><b>NeXT</b>
<dd>For information and possibly precompiled binaries for NeXT machines,
contact Alan Barclay in the U.K. at +44-1224-591779 (voice and fax).
</dl>

<dl>
<dt><b>Amiga</b>
<dd>For information on a port to the Amiga, contact Andreas Maschke
&lt;<a href="mailto:epgbc@cluster6.urz.uni-halle.de">epgbc@cluster6.urz.uni-halle.de</a>&gt;.
This port includes drivers by Andreas Heitmann for

<blockquote><table cellpadding=0 cellspacing=0>
<tr><td>IFF<td>&nbsp;&nbsp;<td>file format
<tr><td>RETINA<td>&nbsp;<td>graphics board
<tr><td>INTUI<td>&nbsp;<td>Amiga window system
</table></blockquote>
</dl>

<dl>
<dt><b>SMS/QDOS</b>
<dd>For information on a port to the SMS/QDOS operating system, contact
<blockquote><address>
Jonathan R. Hudson<br>
+44-1703-867843 telephone and fax<br>
<a href="mailto:jrh@jrhudson.demon.co.uk">jrh@jrhudson.demon.co.uk</a><br>
http://www.jrhudson.demon.co.uk/
</address></blockquote>

<p>
The Web site has precompiled binaries, and the port includes includes drivers for:

<blockquote><table cellpadding=0 cellspacing=0>
<tr>	<td>pic:
	<td>&nbsp;&nbsp;
	<td>native graphics format
	<td>&nbsp;&nbsp;
	<td>(PIC, 1-, -2, 4-, 8-colour formats)
<tr>	<td>qfax:
	<td>&nbsp;
	<td>fax files
	<td>&nbsp;
	<td>(1D, 2D normal and fine)
</table></blockquote>
</dl>

<dl>
<dt><b>Plan 9</b>
<dd>For source boddles and precompiled binaries for the operating system
Plan 9 from Bell Labs, contact Nigel Roles
&lt;<a href="mailto:ngr@cotswold.demon.co.uk">ngr@cotswold.demon.co.uk</a>&gt;.
or check

<blockquote>
<a href="http://www.cotswold.demon.co.uk/dist/gs/" 
class="offsite">http://www.cotswold.demon.co.uk/dist/gs/</a>
</blockquote>
</dl>

<dl>
<dt><b>MS-DOS</b> <dd>For information on compiling Ghostscript for MS-DOS
with the Watcom C++ compiler and GNU make (which avoids the severe
limitations in Watcom's wmake program), contact Boguslaw Jackowski &lt;<a
href="mailto:B.Jackowski@gust.org.pl">B.Jackowski@gust.org.pl</a>&gt;.
</dl>

<hr>

<h2><a name="Related_work"></a>Related work</h2>

<h3><a name="Drivers"></a>Drivers</h3>

<p>
A number of people have created Ghostscript drivers that they prefer to
distribute directly, rather than including them in the AFPL Ghostscript
distributions.  For a current list, please see the Ghostscript home page at
<a
href="http://www.cs.wisc.edu/~ghost/" 
class="offsite">http://www.cs.wisc.edu/~ghost/</a>.


<h3><a name="Previewers"></a>Previewers</h3>

<p>
The Ghostscript user interface is very primitive, so several people have
contributed screen previewers with better user interfaces.

<h4><a name="Previewer_X"></a>Previewers for X Windows</h4>

<p>
We know of three freely available X Windows screen previewers based on
Ghostscript: <b><tt>Ghostview</tt></b>, <b><tt>gv</tt></b>, and
<b><tt>GSPreview</tt></b>.  Most users who have expressed an opinion prefer
<b><tt>gv</tt></b> over <b><tt>Ghostview</tt></b>.

<dl>
<dt><b><tt>gv</tt></b>
<dd>gv, which is derived from Ghostview, is available from CTAN sites and
through the site of its author, Johannes Plass
&lt;<a href="mailto:plass@thep.physik.uni-mainz.de">plass@thep.physik.uni-mainz.de</a>&gt;:

<blockquote>
<a href="http://wwwthep.physik.uni-mainz.de/~plass/gv/" 
class="offsite">http://wwwthep.physik.uni-mainz.de/~plass/gv/</a>
</blockquote>

A copy of gv (but perhaps not the most recent version)
can also be found at:

<blockquote>
<a href="http://www.cs.wisc.edu/~ghost/gv/" 
class="offsite">http://www.cs.wisc.edu/~ghost/gv/</a><br>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/gv/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/gv/</a>
</blockquote>

<p>
gv is available for OpenVMS (both VAX and Alpha), called GhostView-VMS or
gv-vms.  Some places you can find it are:

<blockquote>
<a href="ftp://axp.psl.ku.dk/decwindows/xaw3d/" 
class="offsite">ftp://axp.psl.ku.dk/decwindows/xaw3d/</a><br>
<a href="ftp://ftp.wku.edu/vms/fileserv/x11kit.zip" 
class="offsite">ftp://ftp.wku.edu/vms/fileserv/x11kit.zip</a>
</blockquote>
</dl>

<dl>
<dt><b><tt>Ghostview</tt></b>
<dd>For information on Ghostview, contact Tim Theisen
&lt;<a href="mailto:ghostview@cs.wisc.edu">ghostview@cs.wisc.edu</a>&gt;.
You can get Ghostview from

<blockquote>
<a
href="http://www.cs.wisc.edu/~ghost/gv/" 
class="offsite">http://www.cs.wisc.edu/~ghost/gv/</a>
</blockquote>
</dl>

<dl>
<dt><b><tt>GSPreview</tt></b>
<dd>For information on GSPreview, contact Richard Hesketh
&lt;<a href="mailto:rlh@ukc.ac.uk">rlh@ukc.ac.uk</a>&gt;.
</dl>

<h4><a name="Previewer_DOS-Win"></a>Previewers for DOS and MS Windows</h4>

<dl>
<dt><a name="GSview"></a><b><tt>GSview</tt></b>
<dd>GSview, a popular freely available MS Windows and OS/2 screen previewer
based on Ghostscript, is available from

<blockquote>
<a href="http://www.cs.wisc.edu/~ghost/gsview/" 
class="offsite">http://www.cs.wisc.edu/~ghost/gsview/</a>
</blockquote>

<p>
For technical information on GSview for Windows or PM GSview, please contact
Russell Lang &lt;<a
href="mailto:gsview@ghostgum.com.au">gsview@ghostgum.com.au</a>&gt;.  These
programs are also available for <a href="#Commercial_use">commercial
licensing</a> from Artifex Software Inc.
</dl>

<dl>
<dt><b><tt>ps_view</tt></b>
<dd>GUST, the Polish TeX Users Group, has created <b><tt>ps_view</tt></b>,
a public-domain DOS package that provides "an interactive environement for
previewing PostScript documents. The current version can drive the current
version of the Ghostscript interpreter; enables scaling, rotating, restart,
on-line help, printing the screen, etc."  <b><tt>ps_view</tt></b> is
available from its home site and from CTAN:

<blockquote>
<a href="ftp://ftp.pg.gda.pl/pub/TeX/support/ps_view/" 
class="offsite">ftp://ftp.pg.gda.pl/pub/TeX/support/ps_view/</a><br>
<a href="ftp://ftp.dante.de/tex-archive/support/ps_view/" 
class="offsite">ftp://ftp.dante.de/tex-archive/support/ps_view/</a>
</blockquote>

<p>
<b><tt>ps_view's</tt></b> authors are Boguslaw Jackowski and Piotr
Pianowsky
&lt;<a href="mailto:P.Pianowski@gust.org.pl">P.Pianowski@gust.org.pl</a>&gt;.
</dl>

<dl>
<dt><b><tt>psv</tt></b>
<dd><b><tt>PSV</tt></b>, another keyboard-based PostScript viewing package
for DOS, appears to be redistributable with no restrictions.  It was once
available from

<blockquote>
ftp://puccini.ujf-grenoble.fr/pub/contrib-ps/DOS-PSV/
</blockquote>
</dl>

<h4><a name="Previewer_Linux"></a>A previewer for Linux</h4>

<dl>
<dt><b><tt>BMV</tt></b> <dd>Jan Kybic has created a Ghostscript-based
bitmap previewing program for Linux called <b><tt>BMV</tt></b>, which
doesn't use X Windows but is based on <b><tt>svgalib</tt></b>.  He says
there is a port of <b><tt>BMV</tt></b> for SCO Unix by William Bader.
<b><tt>BMV</tt></b> is available from

<blockquote>
<a
href="ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz" 
class="offsite">ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz</a>
</blockquote>
</dl>

<hr>

<h3><a name="Fonts"></a>Fonts</h3>

<p>
The <a href="Fonts.htm">fonts available for Ghostscript</a>, and how to use
and add fonts in general, are extensively documented.  See
<a href="Fonts.htm">that documentation</a> for (almost) all information
about fonts.  Nelson Beebe maintains a useful set of information about
PostScript Type 1 fonts, including sources for freely distributable and
commercially licensed fonts and an extensive list of Unix systems and the
fonts available for them:

<blockquote>
<a
href="http://www.math.utah.edu/~beebe/fonts/postscript-type-1-fonts.html" 
class="offsite">http://www.math.utah.edu/~beebe/fonts/postscript-type-1-fonts.html</a>
</blockquote>

<hr>

<h3><a name="Related_programs"></a>Related programs</h3>

<dl>
<dt><b><tt>genscript</tt></b>
<dd><b><tt>genscript</tt></b> is a free replacement for the
<b><tt>enscript</tt></b> program.  <b><tt>genscript</tt></b> converts plain
text files to PostScript and sends the generated PostScript output to the
specified printer or to a file.  <b><tt>genscript</tt></b> can be easily
extended to handle different output media, and it has many options which can
be used to customize printouts, including 2-up printing, pagination, complex
headers, and many more.  You can find the current version at

<blockquote>
<a href="http://www.iki.fi/~mtr/genscript/" 
class="offsite">http://www.iki.fi/~mtr/genscript/</a> (home page)<br>
<a href="ftp://ftp.gnu.org/pub/gnu/" 
class="offsite">ftp://ftp.gnu.org/pub/gnu/enscript/</a>enscript-*.tar.gz
</blockquote>

<dt><b><tt>pdf2html</tt></b>
<dd><b><tt>pdf2html</tt></b> is a free utility that converts PDF to PNG
images wrapped in HTML files.  It doesn't preserve the text of the PDF, only
the appearance.  You can find the current version at

<blockquote>
<a href="ftp://atrey.karlin.mff.cuni.cz/pub/local/clock/pdf2html"
class="offsite">
ftp://atrey.karlin.mff.cuni.cz/pub/local/clock/pdf2html</a>
</blockquote>

<dt><b><tt>pstotext</tt></b>
<dd>A good free utility <b><tt>pstotext</tt></b> uses Ghostscript to extract
plain text from PostScript files.  It is much better than the
<b><tt>ps2ascii</tt></b> utility distributed with Ghostscript.  You can read
the <b><tt>pstotext</tt></b> documentation at

<blockquote>
<a
href="http://www.research.digital.com/SRC/virtualpaper/manpages/pstotext.1.html" 
class="offsite">http://www.research.digital.com/SRC/virtualpaper/manpages/pstotext.1.html</a>
</blockquote>

<p>
and download the <b><tt>pstotext</tt></b> kit from

<blockquote>
<a href="http://www.research.digital.com/SRC/virtualpaper/pstotext.html" 
class="offsite">http://www.research.digital.com/SRC/virtualpaper/pstotext.html</a>
</blockquote>

<p>
<b><tt>pstotext</tt></b> is unsupported, but the authors,
Paul McJones
&lt;<a href="mailto:paul.mcjones@acm.org">paul.mcjones@acm.org</a>&gt;
and Andrew Birrell
&lt;<a href="mailto:birrell@pa.dec.com">birrell@pa.dec.com</a>&gt;, are
happy to have your questions and comments either by e-mail or <a href="http://www.research.digital.com/SRC/virtualpaper/comments.html" 
class="offsite">here</a>

<p>
For more information about the authors' Virtual Paper project, which
attempts to make on-line reading of lengthy material (like research
reports, manuals, or entire books) comfortable, read:

<blockquote>
<a href="http://www.research.digital.com/SRC/virtualpaper" 
class="offsite">http://www.research.digital.com/SRC/virtualpaper</a>
</blockquote>

<dt><b><tt>PreScript</tt></b>
<dd>This is another good free utility that uses Ghostscript to extract text
from PostScript or PDF files.  It can also generate very simple HTML,
keeping some of the formatting.  It is unsupported, but is the product of an
active research project.  Its home page is:

<blockquote>
<a href="http://www.nzdl.org/html/prescript.html" 
class="offsite">http://www.nzdl.org/html/prescript.html</a>
</blockquote>

</dl>

<hr>

<h2><a name="Need_help"></a>If you need help</h2>

<p>
The list of Frequently Asked Questions (FAQ) isn't updated very often, so
it may be somewhat out of date.  It's available from

<blockquote>
<a href="http://www.cs.wisc.edu/~ghost/doc/faq.htm" 
class="offsite">http://www.cs.wisc.edu/~ghost/doc/faq.htm</a><br>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/faq.htm" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/faq.htm</a>
</blockquote>

<p>
or by AFS from

<blockquote>
/afs/cs.wisc.edu/p/mirror/pub/mirrors/ghost/faq.htm
</blockquote>

<p>
CompuServe announced in December 1995 that the Graphics Support Forum offers
Message Section and Library 21, "Ghostscript", for technical assistance with
Ghostscript.  Ghostscript is available for downloading in Library 21,
"Ghostscript." To access the Graphics Support Forum, <b><tt>GO
GRAPHSUP</tt></b>.  This service has no connection with the main Ghostscript
developers.

<p>
artofcode LLC doesn't respond to questions from users of the freely
available versions of Ghostscript.  (Responding to questions and problem
reports is one of the benefits that <a href="#Commercial_use">Artifex
Software</a> provides to commercial users in exchange for the licensing
fee.)  If you have problems with Ghostscript and you have access to the
Internet, we suggest to post your question to one of these Usenet
newsgroups:

<dl>
<dt><b><tt><a href="news:gnu.ghostscript.bug">gnu.ghostscript.bug</a></tt></b>
<dd>if your question is about <b>GNU Ghostscript</b> (currently versions
7.07 and below).  If you have access to email, but not Usenet 
news,
write to <b><tt>bug-ghostscript@gnu.org</tt></b>, which is equivalent to
posting to that newsgroup.

<dt><b><tt><a href="news:comp.lang.postscript">comp.lang.postscript</a></tt></b>
<dd>if your question is about <b>AFPL Ghostscript</b> (currently
versions 8.00 and above).
  We hope to establish a separate
newsgroup for AFPL Ghostscript in the future, since
<b><tt>comp.lang.postscript</tt></b> was not intended for Ghostscript
discussion <em>per se</em>.
</dl>

<p>
There are hundreds of Ghostscript user sites all over the world, and another
user will often be able to help you.  If you have trouble with a specific
device driver, look at <b><tt>devs.mak</tt></b> and
<b><tt>contrib.mak</tt></b> in the Ghostscript source directory to see in
which file the driver is defined.  If it's defined in
<b><tt>contrib.mak</tt></b>, the list of contributed drivers, please contact
the author directly: the maintainers of Ghostscript can't help you with
user-maintained drivers.

<h3><a name="Reporting_problems"></a>Reporting problems</h3>

<p>
Please read <a href="Bug-info.htm">Bug-info.htm</a> for information about
reporting problems.

<hr>

<h2><a name="Contacting_us"></a>Contacting Ghostscript headquarters</h2>

<p>
As of mid-September 2000, artofcode LLC is responsible for the future
development of Ghostscript.  Please do not contact us if all you want is
help with the freely distributed versions of Ghostscript!  Ghostscript is
free, but our time is not.  If you call for help, we will tell you politely
that we cannot answer your question.  Ghostscript's documentation, while not
of commercial end-user quality, has been adequate for thousands of users
(for many of whom English is a foreign language), so the answer to your
question is very likely in it somewhere.

<p>
Here is our contact information:

<blockquote><address>
Raph Levien<br>
artofcode LLC<br>
940 Tyler St. Studio 6<br>
Benicia, CA 94510<br>
tel/fax +1 707 746 6398<br>
<a href="mailto:raph@artofcode.com">raph@artofcode.com</a><br>
<a href="http://www.ghostscript.com/" class="offsite">http://www.ghostscript.com/</a>
</address></blockquote>

<h3>Aladdin Enterprises</h3>

<p>
We at Aladdin Enterprises, the original authors of Ghostscript, are no
longer responsible for Ghostscript, and cannot answer general questions
about it, but we may be available for small contract projects.  Here is our
contact information:

<blockquote><address>
Aladdin Enterprises<br>
203 Santa Margarita Avenue<br>
Menlo Park, CA 94025 U.S.A.<br>
+1-650-322-1734 fax<br>
<a href="mailto:ghost@aladdin.com">ghost@aladdin.com</a>
</address></blockquote>

<p>
If you just want help with Ghostscript, or want to report a problem, please
do not contact us.  We will not be able to help you.

<hr>

<h2><a name="How_to_help"></a>How you can help improve Ghostscript</h2>

<p>
The most valuable thing you can do to help improve Ghostscript is to help
test it.  We make three different grades of release available, each of
which needs a different kind of testing.

<ul>
<li><em>Stable</em> releases are made available about every 9 months, after
a beta test period.  Reporting problems as described <a
href="#Reporting_problems">above</a> often results in a fix being posted on
our Web site.
</ul>

<ul>
<li><em>Beta</em> releases are posted starting about 6 weeks before a
planned public release.  These are candidates for public release, and need
intensive testing.
</ul>

<ul>
<li><em>Development</em> releases are posted every few weeks.  These are not
supposed to be good enough for general use, but testing them is still very
helpful, since it gets problems corrected before the intensive beta test
period.
</ul>

<p>
You can always find the current public release and the current beta or
tester release on our <a href="http://www.cs.wisc.edu/~ghost/">Web
site</a>.  If you would like to be notified when new beta or tester releases
are posted, please <a href="#Contacting_us">contact us</a>.

<p>
There are also some useful projects that we don't have enough resources to
work on, and with which we would appreciate help.  See <a
href="Projects.htm">this list</a> for details.

<hr>

<h2><a name="Acknowledgments"></a>Acknowledgements</h2>

<p>
Ghostscript was originally created, and through the year 2000 was primarily
developed and maintained, by L. Peter Deutsch, President of Aladdin
Enterprises (not to be confused with Peter J. Deutsch, founder of Bunyip
Information Systems Inc.).

<p>
Special thanks are due to Russell Lang, for the
<b><tt>GSview for Windows</tt></b> and
<b><tt>PM GSview</tt></b> programs, and for contributing most of the code for
the Microsoft Windows and OS/2 environments; to Tim Theisen, for the
<b><tt>Ghostview</tt></b> program for X Windows and for major contributions
to, and assistance with support of, the code for the X Windows
environment; to Martin Fong and Mark Lentczner, for the first Macintosh
ports; to Pete Kaiser
&lt;<a href="mailto:kaiser@acm.org">kaiser@acm.org</a>&gt;, for redoing all
of the documentation in HTML;
and to the <a href="http://www.ijg.org/">Independent
JPEG Group</a>, to Group 42, Inc., and to Jean-loup Gailly and Mark Adler,
for creating the freely available libraries that Ghostscript uses.

<p>
Special thanks are due to URW++ Design and Development Incorporated, of
Hamburg, Germany (<a href="http://www.urwpp.de/">http://www.urwpp.de/</a>)
for making a commercial-quality set of the 35 standard PostScript Type 1
fonts available for free distribution under the GNU and Aladdin licenses,
and for updating them to include Adobe's expanded PostScript 3 character
set.

<p>
Special thanks are due to Richard Stallman and the
<a href="http://www.gnu.org/" class="offsite">Free Software
Foundation</a> for originating
the <a href="http://www.gnu.org/copyleft/gpl.html" class="offsite">GNU
General Public
License</a>, for originally motivating Aladdin's interest in creating free
software, and for being the primary distributor of GNU Ghostscript on the
Internet.

<p>
See also the <a href="Helpers.htm">list of the many other people</a> who have
contributed significantly to improving Ghostscript.

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1996, 2000 Aladdin Enterprises.  All rights
reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Recent changes in Ghostscript</title>
<!-- $Id: News.htm,v 1.138 2003/12/09 03:05:28 giles Exp $ -->
<!-- Originally: NEWS -->
<!--
	WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
	re-create the table of contents here, because it will replace the
	hand-edited TOC subheads with a separate subhead for each H2 in
	the body of the file.  Or if you do, first look at the original
	TOC to see how to edit it for visual conciseness.
-->
<link rel="stylesheet" type="text/css" href="gs.css">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>Changes in the most recent release of Ghostscript</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>
This document is news about the most recent Ghostscript release.  For
earlier versions, see the history documents:

<blockquote>
<a href="History8.htm">History of Ghostscript versions 8.n</a><br>
<a href="History7.htm">History of Ghostscript versions 7.n</a><br>
<a href="History6.htm">History of Ghostscript versions 6.n</a><br>
<a href="History5.htm">History of Ghostscript versions 5.n</a><br>
<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
<a href="History1.htm">History of Ghostscript versions 1.n</a>
</blockquote>

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h3><a name="Version8.12"></a>Version 8.12 (2003-12-08)</h3>

<p>
This is the second stable release in the 8.1x series. It contains numerous bug 
fixes; other highlights include improved font rendering and colorspace handling,
and unicode text support for high-level devices.

<p>
The following <a href="http://bugs.ghostscript.com/">bug</a> numbers were open at
the time of the last release:
<blockquote>
405501,
414947,
430175,
446344,
456692,
458261,
458780,
463688,
465936,
487460,
487953,
493348,
509829,
526099,
526491,
530011,
535366,
535932,
542629,
553187,
555072,
558151,
563287,
572865,
578865,
592160,
592837,
601336,
602263,
603934,
604722,
605830,
607425,
607850,
610478,
611898,
614298,
617077,
617523,
626295,
628110,
629335,
634036,
634358,
645316,
651644,
656414,
667301,
669654,
674241,
674417,
674418,
677324,
677383,
677430,
680301,
681469,
685335,
686747,
686750,
686752,
686778,
686816,
686819,
686824,
686833,
686834,
686841,
686842,
686843,
686850,
686852,
686853,
686860,
686863,
686865,
686867,
686873,
686877,
686889,
686892,
686896,
686897,
686902,
686904,
686909,
686919,
686930,
686933,
686936,
686937,
686938,
686944,
686946,
686949,
686951,
686954,
686956,
686957,
686958,
686959,
686963,
686975,
686980,
686996,
686999,
687007,
687011,
687012,
687013,
687014,
687020,
687021,
687029,
687038,
687039,
687050,
687059,
687063,
687066,
687072,
687079,
687084,
687085,
687086,
687088,
687090,
687093,
687095,
687102,
687105,
687108,
687110,
687114,
687120,
687123,
687125,
687137,
687142,
687145,
687146,
687151,
687154,
687157,
687163,
687168,
687169,
687171,
687172,
687173,
687174,
687177,
687181,
687182,
687184,
687185,
687186,
687187,
687189,
687190,
687191.
</blockquote>

<h3><a name="8.12_Incompatible_changes"></a>Incompatible changes</h3>

<p>Type 1 font hints are no longer applied to charpaths. This is generally an improvement,
but will generate a different outline from previously.

<p>A new virtual functions <tt>can_handle_hl_color()</tt> is required for high-level 
devices derived from <tt>gx_device_vector</tt>.

<p>The library client api now propagates <tt>device_close</tt> errors to the return 
value of <tt>gsapi_exit()</tt>.

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
Copyright &copy; 2003 artofcode LLC.  All rights
reserved.

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ghostscript projects</title>
<!-- $Id: Projects.htm,v 1.56 2003/12/08 23:17:15 giles Exp $ -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>Ghostscript projects seeking developers</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<ul>
<li><a href="#Platforms">Platforms</a>
<li><a href="#Driver_architecture">Driver architecture</a>
<li><a href="#Specific_drivers">Specific drivers</a>
<li><a href="#Graphics_functionality">Graphics functionality</a>
<li><a href="#Performance">Performance</a>
<li><a href="#Other_functionality">Other functionality</a>
<li><a href="#Other_implementation">Implementation improvements</a>
</ul>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<p>
There are many projects that would improve Ghostscript and that we would
like to do, but for which we don't have enough resources.  If you would like
to take responsibility for any of these projects, please <a
href="mailto:raph@artofcode.com">contact us</a>.  Additional comments on
implementation approaches or project goals are in <I>italic type like
this</I>.

<h2><a name="Platforms"></a>Additional platforms</h2>

<h3>DOS, Windows and OS/2 builds using gcc.</h3>

<p>
We would like Ghostscript to work with the free <b><tt>emx/gcc</tt></b> and
<b><tt>rsx</tt></b> libraries, to provide an alternative DOS, Windows
95/98/NT, and OS/2 implementation that requires no proprietary, commercial
compilers.  We think Ghostscript's existing OS/2 makefile already includes
most of what is needed.  If someone is willing to do the work, we will be
happy to include this in our list of supported platforms and to distribute
the makefiles.

<h3>Windows driver using Ghostscript as a language monitor.</h3>

<p>
MS Windows has a "language monitor" capability which would allow Ghostscript
to be invoked seamlessly to process input files in any language Ghostscript
could handle (currently PostScript and PDF) and for any printer for which
Ghostscript had a driver.  Doing this properly would require integrating
Ghostscript with Windows' "Add Printer" dialog, and would also require
creating a PPD for Ghostscript.  <I>Russell Lang's RedMon program provides
some, but not all, of this capability.</I>

<h3>Netscape browser plug-in.</h3>

<p>
Currently, Ghostscript can work as a "helper application" for the Netscape
browser, but not as a plug-in; the latter would integrate it more closely
with the browser.  We aren't sure what doing this would involve; we've also
heard by rumor that it's already been done.

<h3>Ghostscript as an Active-X COM Object.</h3>

<p>
In order to integrate Ghostscript into XMetaL and other applications it
would be convenient for Ghostscript to be distributed as a COM object
along with the current gswin32.exe, gswin32c.exe and gsdll32.dll files.

<h3>Visual Trace window for X.</h3>

<p>
Currently Ghostscript implements Visual Trace window for Windows only
(see <I>wdtrace.c</I>). An implementation for X would be useful. 

<p>
<hr>

<h2><a name="Driver_architecture"></a>Driver Architecture</h2>

<h3>Improved multi-threaded rendering support.</h3>

<p>
Currently, drivers can be written so that converting PostScript to a list of
graphical objects can run in one thread, and rasterizing the objects can run
in another thread.  However, drivers must be written specially if they are
going to do this.  We would like to change the architecture so that any
driver can work this way.  We would also like to support dual-threaded
operation for drivers that produce high-level output, such as the PDF
writer.  <I>Doing this would require separating banding from
the multithreaded logic.  Also, currently each thread has its own allocation
pool: this is unnecessary in the normal case, since Ghostscript now supports
properly locked access to the C heap, but embedded systems still need to use
a fixed-size area for the rasterizing thread.  With a locked, shared
allocator, the rasterizing thread could use the full set of band list
functions; with a fixed-size area and a separate allocator, only a subset is
available, as is the case now for dual-threaded drivers.
</I>

<h3>Dynamic run-time loadable devices.</h3>

<p>
Currently, drivers must be linked into the executable.  We would like to be
able to load drivers dynamically.  Doing this requires defining a
platform-independent API (presumably extending the current gp_* APIs) that
would work at least on Linux, vendor Unix, MS Windows, and Macintosh.  Unix
systems should include Sun, HP, AIX, IRIX, DEC; Linux ELF and a.out formats
should both be supported.  <I>Consider the Netscape plug-in
architecture.</I>

<h3>Moving 'setpagedevice' into C.</h3>

<p>
The PostScript 'setpagedevice' function implements matching of media and
page size requests to available media, page orientation, and paper handling
(duplex, etc.)  Currently it is implemented in PostScript code, which means
it is not available for use with other input languages.  (It is available
for PDF, which Ghostscript implements on top of PostScript, but not for the
not-yet-freely-available PCL interpreters that use the Ghostscript library,
or for possible future SVG or similar interpreters).  We would like to move
this function into C.  <I>The device driver will be required to
send page parameters up to PostScript to be stored in a resource.  To be
included in this project are handling policy implementations in the device
drivers.  DeferredMediaSelection should also be implemented.</I>

<h3>Adding 'tee' for output to multiple devices.</h3>

<p>
In a few cases, it would be desirable to provide a 'tee' capability for
drivers: specifically, for generating small, low-resolution 'thumbnail'
images concurrently with other output.  <I>Probably the
simplest way to do this is to generate a band list and then process it
twice.  This is not completely trivial, since the band list does include
device resolution information and scaling would be required for some
constructs.</I>

<h3><b><tt>OutputDevice</tt></b> resource category</h3>

<p>
Each available output device should provide an instance of the
<b><tt>OutputDevice</tt></b> resource category, which gives the available
page sizes, resolutions, media classes, process color models, and other
information about the device.  <I>This would replace the current
non-standard use of a 4-element <b><tt>PageSize</tt></b> in the
<b><tt>InputAttributes</tt></b> entry of the page device dictionary.</I>

<h3>Removing the limit on the length of OutputFile.</h3>

<p>
Currently, the maximum length of the <b><tt>OutputFile</tt></b> parameter is
a compile-time constant, <b><tt>gp_file_name_sizeof</tt></b>.  This is
appropriate for ordinary file names, since this constant is the platform's
limit on the length of a file name.  However, if <b><tt>OutputFile</tt></b>
is a pipe, the length should not be limited in this way.  <I>This is
probably a small project: it requires allocating the file name dynamically,
and freeing it in the finalization routine that gets called when a driver
instance is freed.</I>.

<h2><a name="Specific_drivers"></a>Specific drivers</h2>

<h3>PrintGear and PPA output drivers.</h3>

<p>
We would like to provide (Adobe) PrintGear and (H-P) PPA output drivers for
Ghostscript, but the specifications for these protocols are not published.
If you can provide them to us without violating any agreements, please let
us know.  (Some work has already been done on reverse-engineering these
protocols, but we don't have references to it.)

<h3>Improve 'pswrite' up to the level of 'pdfwrite'.</h3>

<p>
We would like to improve the high-level PostScript-writing
<b><tt>pswrite</tt></b> driver to bring it up to parity with the PDF-writing
driver (including the many improvements in the latter being implemented in
Ghostscript 7.xx).  Specifically, we want it to write text as text rather
than bitmaps, and to consistently write images in their original high-level
form.  <I>We have already started to factor out code that
should be common to these two drivers, specifically for writing embedded
fonts and compressed data streams.</I>

<p>
There is one small part of this project that would be especially valuable
and could be done independently (although it might have to be partly or
entirely redone later): compressing images.  Currently the driver only
compresses character bitmaps, and doesn't compress other images at all.
<I>It should use the <b><tt>CCITTFaxEncode</tt></b> filter for 1-bit-deep
images, and plane-separated <b><tt>LZWEncode</tt></b> compression for color
images, using the <b><tt>miGIF</tt></b> algorithms that are believed to be
free of the Welch patent for the latter.  When generating LL3 PS, the
<b><tt>Flate</tt></b> compression will work better than miGIF. It may be
worth trying several methods on each image and use the one that works best.</I>

<h3>High level graphics and text for PCL 5 and PCL XL drivers.</h3>

<p>
Currently, the PCL 5 drivers produce only bitmaps; the PCL XL driver
produces high-level graphics and sometimes high-level images, but low-level
text.  We would like to improve these drivers to produce higher-level,
smaller output.  <I>This was a very low-priority project; it has become more
important now that H-P's laser printers are shipping with less memory.</I>

<h3>Improved high level GDI driver for Windows.</h3>

<p>
We would like a "GDI driver" for MS Windows that would implement more
higher-level constructs (specifically for text).  <I> The
<b><tt>mswin</tt></b> and <b><tt>mswinprn</tt></b> drivers both do some of
this.  Some of the the 'xfont' support code for MS Windows should be useful.
We were frustrated in the past because the GDI calls for getting font sizes
and metrics consistently returned incorrect information and provided no way
to get the correct information; perhaps this has been fixed in 32-bit
Windows.  We believe that H-P, Russell Lang, and perhaps others are working
in this area, but we can always use more help.</I>

<h3>PDF thumbnail generation.</h3>

<p>
The PDF writer needs to be able to generate thumbnails (small previews).  We
might do this through the 'tee' capability mentioned above.  However, we
currently prefer the idea of implementing a completely separate program to
add thumbnails to an arbitrary, existing PDF file: this would allow
Ghostscript to add thumbnails to PDF files generated by other programs.
<I>Much of the code needed to do this has already been written
for Ghostscript's PDF linearizer: see
<b><tt>lib/pdfwrite.ps</tt></b>.  A user has implemented this as well,
using a separate program that calls Ghostscript: see
<a href="http://www.uni-giessen.de/~g029/eurotex99/oberdiek/">
http://www.uni-giessen.de/~g029/eurotex99/oberdiek/</a>.
</I>

<h3>Consolidate inkjet drivers into a single family.</h3>

<p>
In addition to factoring out the error diffusion code as described below, we
would like to see another attempt at reducing the enormous volume of code
for color inkjet drivers.  There are three sets of drivers (gdevcdj.c,
gdevstc.c, gdevupd.c) with much overlapping functionality.  The latter two
driver families make good attempts at factoring out things like head
geometry and canned control strings, but we think this problem deserves
another pass, especially in the hope of consolidating these drivers into a
single family.

<h3>Download glyph bitmaps (with glyph decaching notification).</h3>

<p>
See below under "Notification for glyph decaching."

<h3>Preserve compression when writing PDF images.</h3>

<p>
Currently, all images are decompressed by the interpreter before being
passed to the graphics library; the PDF writer may then compress them again.
Ordinarily, this only slows things down a little, but in the case of
DCT-encoded images that are being DCT-encoded in the output, image
degradation may occur.  Ideally, the implementation should be smart enough
to not decode and re-encode the image.  However, making this work properly
is difficult.  <I>This would probably involve extending the library APIs for
images so that they could pass a stream, possibly including filters, instead
of the (fully decoded) data rows.</I>

<h3>Emit warnings when producing PDF output.</h3>

<p>
Currently, the PDF writer has no way to emit warnings.  Users would like to
see warnings when fonts cannot be embedded (this is actually required when
the value of CannotEmbedFontPolicy is set to /Warning), and for some other
questionable situations like non-existent Dests (Feature request
<a href="http://bugs.ghostscript.com/show_bug.cgi?id=480853"
class="offsite">#480853</a>).
Probably the right way to handle this is with a pseudo device parameter
called "Warnings" that is a list of strings: the pdfwrite driver would add
strings to this list, and the ps2pdf script (lib/gs_pdfwr.ps) would read
them out, print them, and reset them at the end of each page.

<hr>

<h2><a name="Graphics_functionality"></a>Graphics functionality</h2>

<h3>Support for 64-bit colors on 64-bit platforms.</h3>

<p>
Currently, the library supports a maximum of 32 bits of data per pixel; we
would like to raise this limit to 64 bits on systems where the 'long' data
type is 64 bits wide.  <I>The <b><tt>gx_color_index</tt></b>
type is already defined as 'long', but there are many places where the type
<b><tt>bits32</tt></b> is used for pixel values; there is a 32-bit
stored-image "device", but there is no 64-bit device; a few algorithms and
tables have knowledge of the 32-bit width built into them, only because the
C preprocessor doesn't have any kind of loop or repetition
capability.</I>

<h3>In-RIP trapping.</h3>

<p>
The PostScript specification includes an option for the interpreter to
implement trapping (adjustments of object boundaries to prevent visual
anomalies caused by slight misregistration of different ink layers): we
would like to implement this.  <I>This is a complex and
difficult area; even many Adobe RIPs don't do it.</I>

<h3>Improve the font grid fitting and antialiasing.</h3>

<p>
Ghostscript includes a reduced True Type bytecode interpreter branched from FreeType 1.
It performs a grid fitting for True Type glyphs except ones involving
instructions patented by Apple. A wanted improvement is to implement
a stem recognition algorithm similar to Free Type autohinting.
It also would help to poorly designed Type 1 fonts, which have misplaced or missed hints. 

<p>
Another useful improvement is to implement a font antialiasing with 
<b><tt>TextAlphaBits</tt></b> other than 1,2,4.

<h3>ICC profile support for output.</h3>

<p>
Ghostscript 7.00 and later supports ICCBased color spaces of PDF
using the icclib package from
<a href="http://web.access.net.au/argyll/color.html ">
http://web.access.net.au/argyll/color.html</a> 
but there is no facility to use ICC output (printer) profiles that
may be embedded in the PDF. Also it would be useful for PostScript
to be able to directly use a specific Intent from ICC profile to
convert output colors (as CRD's are now used).
<I>The primary difficulty is that the graphics library and PostScript
always use CIE XYZ as the connection space, but ICC profiles may
use CIELAB as the connection space, requiring conversion for use
with the graphics library. </I>

<h3>Making halftones into "objects" and adding new types.</h3>

<p>
Currently, knowledge of the specific data formats and algorithms for
halftoning permeates too many places in the library.  We would like
halftoning to be more "object oriented" (using virtual procedures) so that
we could support other halftoning methods such as direct use of threshold
arrays, or the double-rectangle approach added in newer PostScript versions.
<I>Threshold arrays take much less space than the current
representation, generally at the expense of longer rendering time for
black-and-white images; double-rectangle representation would give us a
better implementation of AccurateScreens.  We might want store both
threshold arrays and the current representation.</I>

<h3>Factor out error diffusion routines, integrate ETS.</h3>

<p>
Currently, several different inkjet drivers implement their own, very
similar but slightly differing error diffusion methods.  This has caused
severe code bloat as well as tempting future driver writers to contribute to
it further.  We want to factor out error diffusion into a common set of
facilities that drivers can use.  <I>We would like to design
these facilities so that they can easily interface to the Even-Toned
Screening algorithms from artofcode (Raph Levien), to the extent that these
will be Open Source.</I>

<h3>Improve, or generalize, linearization for stochastic threshold
data.</h3>

<p>
The Ghostscript distribution includes a stochastic threshold array.  This
array has some gamma correction built into it, which works well for some
output devices and not for others.  We would like to provide a version of
this array without (or with less) gamma correction.  <I>We have
original data available from which this could be done fairly easily.</I>

<h3>Change sampled functions to use new interpreted functions.</h3>

<p>
The PostScript language defines many functions relevant to graphics
rendering as being implemented by arbitrary PostScript procedures: transfer
(gamma correction), black generation, undercolor removal, several stages of
CIE color space and rendering, and color mapping for Separation and DeviceN
spaces.  Since the graphics library can't call PostScript procedures,
Ghostscript currently samples these procedures at a fixed number of points
and interpolates linearly between the samples.  As of Ghostscript 6.20, the
library can interpret a restricted subset of PostScript procedures directly
(basically those that only use arithmetic and comparisons: no loops,
sub-procedures, or data structures).  Changing the rendering functions to
use this approach when possible would greatly improve output quality when
the functions are very non-linear (which we have actually seen in practice).
<I>This should only be done if the function is, in fact,
severely non-linear, since interpreting the function definition will almost
always be much slower than interpolating in the table.</I>

<h3>Replace PostScript procedures with Function objects.</h3>

<p>
Currently, there is a lot of tiresome code for doing callbacks with
continuations for loading the caches that hold sampled values for the
procedures listed under "Change sampled functions ..." above.  For the
Separation and DeviceN tint transform functions, and only for these,
PostScript code associated with the setcolorspace operator actually converts
the PostScript procedure to a Function object -- to a FunctionType 4
(PostScript subset) Function if possible, or to a FunctionType 0 (sampled)
Function if not.  This approach should be used for all the other sampled
functions.  Doing this would reduce the amount of C code significantly,
while only increasing PostScript code slightly.

<p>
This change would require touching (and slightly changing) all PostScript
operators that currently do such callbacks: for example, rather than a
setblackgeneration operator that takes a PostScript procedure as its
operand, we would have a .setblackgeneration operator that takes as operands
both the PostScript procedure (so that currentblackgeneration can return it)
*and* a Function derived from it (which will actually be used when loading
the cache, or for sampling directly if desired).

<p>
In some cases, this approach has a non-negligible space cost.  If the
PostScript procedure cannot be represented as a FunctionType 4 Function, it
must be sampled and represented as a FunctionType 0 Function.  Then the BG /
UCR / transfer / ... cache will essentially just hold a copy of the Function
data.  While it is likely that this situation will be rare in practice, it
might be worth looking into changing the internal representation of these
caches so that they were the same as the representation of a FunctionType 0
Function with a particular choice of parameters.  Then the PostScript code
that called .buildsampledfunction when necessary could arrange the
parameters to have the same values as the internal representation of the
cache, and the cache could use the Function data directly.  This is probably
not worth the trouble.

<h3>Add optional cubic interpolation to RenderTable and other table
lookup.</h3>

<p>
Currently, if a CIE rendering dictionary uses a lookup table for the final
step, Ghostscript always interpolates linearly between the entries.  Cubic
interpolation should be supported as an option.  A cubic interpolation
option is also needed for general table-lookup Functions.

<h3>Add better (SVG-like) alpha channel and compositing to library.</h3>

<p>
Ghostscript has partial support for alpha channel and for alpha and RasterOp
compositing.  There is some architectural support for general compositing,
but it postdates the RasterOp implementation, and most of the RasterOp code
doesn't use it.  We expect that the more extensive compositing and alpha
capabilities of SVG will find their way into PDF (and probably PostScript as
well) in the course of 2000 and 2001, and we will need to implement them.

<hr>

<h2><a name="Performance"></a>Performance</h2>

<h3>Change band list logic to defer halftoning until rendering.</h3>

<p>
Currently, when Ghostscript uses a band list, it does halftoning before
banding.  It should do halftoning after banding: this produces smaller band
lists and shifts more work to the rasterizer (which is good because the
rasterizer can be multi-threaded internally for higher performance on
multiprocessors: see the next topic.)

<h3>Reduce redundant data for smoothed banded images.</h3>

<p>
When smoothed ("interpolated") images are written in the band list, extra
rows must be written above and below each band in order to provide the data
for interpolation.  Currently, the number of such rows is computed very
conservatively; instead, the final interpolation algorithm should be
consulted to provide the correct value.  <i>This is a small task.</i>

<h3>Multi-threaded rasterizing</h3>

<p>
For high-resolution devices, rasterization dominates execution time.  On
multiprocessor systems, Ghostscript can do tasks in parallel:

<ul>

<li>Rasterize multiple bands simultaneously;

<li>Rasterize multiple color planes of a single band simultaneously (if a
planar representation is being used);

<li>For some computation-intensive tasks like smoothing images or filling
large regions, partition the task (possibly buffering more data to allow
larger-grain partitioning) and execute several partitions simultaneously.

</ul>

<p>
We would want these facilities implemented so that no conditional
compilation was involved: on uniprocessor systems, the locking API would
simply have a vacuous implementation.

<h3>Notification for glyph decaching.</h3>

<p>
Currently, drivers can't do a very good job of downloading rendered
character bitmaps to the device they manage, because they can't find out
when a bitmap is being deleted from Ghostscript's cache and therefore will
never be referenced again.  Here is a sketch of how we would add this
capability to the graphics library:

<ul>

<li>The driver would implement the <b><tt>text_begin</tt></b> call, simply
to get access to a <b><tt>gs_imager_state</tt></b> that references the
rendered character cache.  (The driver could always simply call the default
implementation of <b><tt>text_begin</tt></b>.)

<li>In the <b><tt>text_begin</tt></b> procedure, the driver would call

<blockquote><pre>
gs_glyph_decache_register(imager_state, notify_proc, proc_data)
</pre></blockquote>

<p>
where <b><tt>proc_data</tt></b> was, or pointed to a structure that
included, a pointer to the driver.

<li><b><tt>gs_glyph_decache_register</tt></b> would use the general
notification mechanism defined in <b><tt>gsnotify.h</tt></b> to call

<blockquote><pre>
notify_proc(proc_data, pchar_data)
</pre></blockquote>

<p>
whenever a bitmap was removed from the character cache.
<b><tt>pchar_data</tt></b> would point to some identification of the
character; perhaps just the bitmap ID, but possibly a
<b><tt>gx_cached_bits_common</tt></b> or even a <b><tt>cached_char</tt></b>.

<li>The <b><tt>char_cache</tt></b> structure would be need an additional
member, a <b><tt>gs_notify_list_t</tt></b>.  It would also need to add
finalization so that when it was freed, it would notify and unregister all
clients, using <b><tt>gs_notify_all(list, NULL)</tt></b> and then
<b><tt>gs_notify_release</tt></b>.

</ul>

<p>
<I>This facility was requested by the Display Ghostscript project, but it
could also be used to improve the output of the PCL XL driver and possibly
the X and PCL5 drivers.</I>

<hr>

<h2><a name="Other_functionality"></a>Other functionality</h2>

<h3>OpenStep (Display PostScript + NeXT) extensions to Ghostscript.</h3>

<p>
There is a project to create a GNU implementation of the OPENStep API, which
involves extending Ghostscript to provide the full functionality of Adobe's
Display PostScript system with some of the NeXT extensions.  For more
information, please contact Net-Community &lt;<a
href="mailto:scottc@net-community.com">scottc@net-community.com</a>&gt;.

<h3>Job Server implementation.</h3>

<p>
For full Adobe PostScript compatibility, Ghostscript needs a real "job
server" to encapsulate the execution of PostScript files. 
<I>See the section on "Job Execution Environment" in the PostScript
Language Reference Manual for details.</I>

<h3>SVG (XML Structured Vector Graphics) interpreter.</h3>

<p>
Ghostscript could be adapted with some work to read SVG.  This would be an
interesting and challenging project because SVG's graphics model would
require extending the library (see above).  <I>If SVG turns out to be an
important standard, it is important that there be a good free implementation
of it.</I>

<h3><b><tt>%font%</tt></b> and other IODevices.</h3>

<p>
Currently, the <b><tt>%font%</tt></b> IODevice is not implemented.  We would
like to see this implemented using a general framework for implementing
IODevices (%xxxx%) entirely in PostScript, in an "object oriented" manner
very similiar to the way Resource categories are implemented.  An IODevice
would be implemented as a dictionary with the following keys, whose values
would be procedures that implemented the corresponding operation:

<blockquote><pre>
/File
/DeleteFile
/RenameFile
/Status
/FileNameForAll
/GetDevParams
/PutDevParams
</pre></blockquote>

<p>
There would only be global IODevices, no local ones; the dictionary keeping
track of them would be stored in global VM.

<p>
<I>This is an obscure feature that matters only because some PostScript code
uses <b><tt>filenameforall</tt></b> with this IODevice, rather than
<b><tt>filenameforall</tt></b> with the <b><tt>/Font</tt></b> Resource
category, to enumerate available fonts.</I>

<h3>Repairing damaged or EOL-converted PDF files.</h3>

<p>
Adobe Acrobat Reader can scan a PDF file that has had its end-of-lines
converted by careless users transferring the file across operating systems
as text rather than binary across, and reconstruct the cross-reference table
which the PDF interpreter requires.  This only works if the file has no
binary data in it, which with PDF 1.3 is rarely the case.  However, users
occasionally receive PDF files that have been damaged in this way, and it
might be useful to have a program that can repair them.  <I>We think this
should probably be done as a separate program, possibly in PostScript,
similar to Ghostscript's PDF linearizer.</I>

<h2><a name="Other_implementation"></a>Implementation improvements</h2>

<h3>Fully re-entrant code.</h3>

<p>
Currently, neither the PostScript interpreter nor the graphics library is
fully re-entrant (no writable globals).  Making them fully re-entrant would
make Ghostscript usable in multi-threaded environments, and more easily
usable in embedded environments.  Note that this is necessary, but far from
sufficient, for Ghostscript to allow simultaneous execution of a single
Ghostscript interpreter instance by multiple threads: that is probably
permanently out of the question.  <I>Almost all drivers, including all of
the drivers in devs.mak which are maintained as part of the main Ghostscript
code, are already fully re-entrant; making the remaining ones re-entrant
should really be up to the driver author.</I>

<h3>Ghostscript has no %ram% device.</h3>

<p>
The %ram% device is documented in PS Supplement 3010 and 3011 dated August 30, 1999.
This is probably not a major impediment to portability, but it would be handy.
<p><I>
On Unix, the suggested implementation would be to create a subdirectory
of the temporary directory (usually /tmp), with the name chosen and the
directory created in such a way as to avoid /tmp races and similar
problems. Ghostscript should delete the subdirectory when it exits.
</I>

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 2000 Aladdin Enterprises.  All rights
reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ghostscript PostScript coding guidelines</title>
<!-- $Id: Ps-style.htm,v 1.27 2003/12/08 23:17:15 giles Exp $ -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>Ghostscript PostScript coding guidelines</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Summary">Summary of the coding guidelines</a>
<li><a href="#Introduction">Introduction</a>
<li><a href="#PS_features">Use of PostScript language features</a>
<ul>
<li><a href="#Restrictions">Restrictions</a>
<li><a href="#Protection">Protection</a>
<li><a href="#Standard_constructions">Standard constructions</a>
</ul>
<li><a href="#File_structuring">File structuring</a>
<li><a href="#Commenting">Commenting</a>
<li><a href="#Formatting">Formatting</a>
<ul>
<li><a href="#Indentation">Indentation</a>
<li><a href="#Spaces">Spaces</a>
</ul>
<li><a href="#Naming">Naming</a>
<li><a href="#Miscellany">Miscellany</a>
<ul>
<li><a href="#Non_standard_operators">Some useful non-standard operators</a>
<li><a href="#Useful_procedures">Some useful procedures</a>
<li><a href="#Other">Other</a>
</ul>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>
For other information, see the <a href="Readme.htm">Ghostscript
overview</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Summary"></a>Summary of the coding guidelines</h2>

<ul>

<li>Don't store into literals.

<li>Use <b><tt>loop</tt></b> to create a block with multiple exits.

<li>Use a dictionary or an array for multi-way switches.

<li>Start every file with a copyright notice, the file name, and a one-line
summary.

<li>Comment every procedure with the arguments and result, and with the
function of the procedure unless it's obvious.

<li>Comment the stack contents ad lib, and particularly at the beginning of
every loop body.

<li>Indent every 2 spaces.

<li>Always put { at the end of a line, and } at the beginning of a line,
unless the contents are very short.

<li>Always put spaces between adjacent tokens.

<li>Use only lower-case letters and digits for names, or Vienna style names,
except for an initial "." for names only used within a single file.

<li>Don't allocate objects in heavily used code.

<li>Consider factoring out code into a procedure if it is used more than
once.

</ul>

<hr>

<h2><a name="Introduction"></a>Introduction</h2>

<p>
The many rules that Ghostscript's code follows almost everywhere are meant
to produce code that is easy to read.  It's important to observe them as
much as possible in order to maintain a consistent style, but if you find a
rule getting in your way or producing ugly-looking results once in a while,
it's OK to break it.

<hr>

<h2><a name="PS_features"></a>Use of PostScript language features</h2>

<h3><a name="Restrictions"></a>Restrictions</h3>

<p>
If you need to store a value temporarily, don't write into a literal in the
code, as in this fragment to show a character given the character code:

<blockquote><pre>
( ) dup 0 4 -1 roll put show
</pre></blockquote>

<p>
Instead, allocate storage for it:

<blockquote><pre>
1 string dup 0 4 -1 roll put show
</pre></blockquote>

<h3><a name="Protection"></a>Protection</h3>

<p>
If an object is never supposed to change, use <b><tt>readonly</tt></b> to
make it read-only.  This applies especially to permanently allocated objects
such as constant strings or dictionaries.

<p>
During initialization, and occasionally afterwards, it may be necessary to
store into a read-only dictionary, or to store a pointer to a dictionary in
local VM into a dictionary in global VM.  The operators
<b><tt>.forceput</tt></b> and <b><tt>.forceundef</tt></b> are available for
this purpose.  To make these operators inaccessible to ordinary programs,
they are removed from <b><tt>systemdict</tt></b> at the end of
initialization: system code that uses them should always use
<b><tt>bind</tt></b> and <b><tt>odef</tt></b> (or
<b><tt>executeonly</tt></b>) to make uses of them inaccessible as well.

<h3><a name="Standard_constructions"></a>Standard constructions</h3>

<h4>Multi-way conditionals</h4>

<p>
If you write a block of code with more than about 3 exit points, the usual
way to do it would be like this:

<blockquote><pre>
{
  ... {
    ...1
  } {
    ... {
      ...2
    } {
      ... {
        ...3
      } {
        ...4
      } ifelse
    } ifelse
  } ifelse
}
</pre></blockquote>

<p>
However, this causes the 4 logically somewhat parallel code blocks to be
indented differently, and as the indentation increases, it becomes harder to
see the structure visually.  As an alternative, you can do it this way:

<blockquote><pre>
{       % The loop doesn't actually loop: it just provides a common exit.
  ... {
    ...1
    exit
  } if
  ... {
    ...2
    exit
  } if
  ... {
    ...3
    exit
  } if
  ...4
  exit
} loop
</pre></blockquote>

<p>
Don't forget the final exit, to prevent the loop from actually looping.

<h4>Switches</h4>

<p>
Use a dictionary or an array of procedures to implement a 'switch', rather
than a series of conditionals, if there are more than about 3 cases.  For
example, rather than:

<blockquote><pre>
dup /a eq {
  pop ...a
} {
  dup /b eq {
    pop ...b
  } {
    dup /c eq {
      pop ...c
    } {
      ...x
    } ifelse
  } ifelse
} ifelse
</pre></blockquote>

<p>
(or using the loop/exit construct suggested above), consider:

<blockquote><pre>
/xyzdict mark
  /a {...a} bind
  /b {...b} bind
  /c {...c} bind
.dicttomark readonly def
...
//xyzdict 1 index .knownget {
  exch pop exec
} {
  ...x
} ifelse
</pre></blockquote>

<hr>

<h2><a name="File_structuring"></a>File structuring</h2>

<p>
Every code file should start with comments containing

<ol>
<li>a copyright notice;
<li>the name of the file in the form of an RCS Id:

<blockquote><pre>
% Id$: filename.ps $
</pre></blockquote>

<li>a very brief summary (preferably only one line) of what the file
contains.
</ol>

<p>
If you create a file by copying the beginning of another file, be sure to
update the copyright year and change the file name.

<hr>

<h2><a name="Commenting"></a>Commenting</h2>

<p>
If a file has well-defined functional sections, put a comment at the
beginning of each section to describe its purpose or function.

<p>
Put a comment before every procedure to describe what the procedure does,
unless it's obvious or the procedure's function is defined by the PLRM.  In
case of doubt, don't assume it's obvious.  If the procedure may execute a
deliberate 'stop' or 'exit' not enclosed in 'stopped' or a loop
respectively, that should be mentioned.  However, information about the
arguments and results should go in the argument and result comment
(described just below) if possible, not the functional comment.

<p>
Put a comment on every procedure to describe the arguments and results:

<blockquote><pre>
/hypot {	% &lt;num1&gt; &lt;num2&gt; hypot &lt;real&gt;
  dup mul exch dup mul add sqrt
} def
</pre></blockquote>

<p>
There is another commenting style that some people prefer to the above:

<blockquote><pre>
/hypot {	% num1 num2 --> realnum
  dup mul exch dup mul add sqrt
} def
</pre></blockquote>

<p>
We have adopted the first style for consistency with Adobe's documentation,
but we recognize that there are technical arguments for and against both
styles, and might consider switching some time in the future.  If you have
strong feelings either way, please make your opinion known to
<b><tt>gs-devel@ghostscript.com</tt></b>.

<p>
Put comments describing the stack contents wherever you think they will be
helpful; put such a comment at the beginning of every loop body unless you
have a good reason not to.

<p>
When you change a piece of code, do <em>not</em> include a comment with your
name or initials.  Also, do <em>not</em> retain the old code in a comment,
unless you consider it essential to explain something about the new code; in
that case, retain as little as possible.  (CVS logs do both of these things
better than manual editing.)  However, if you make major changes in a
procedure or a file, you may put your initials, the date, and a brief
comment at the head of the procedure or file respectively.

<hr>

<h2><a name="Formatting"></a>Formatting</h2>

<h3><a name="Indentation"></a>Indentation</h3>

<p>
Indent 2 spaces per indentation level.  You may use tabs at the left margin
for indentation, with 1 tab = 8 spaces, but you should not use tabs anywhere
else, except to place comments.

<p>
Indent { } constructs like this:

<blockquote><pre>
... {
  ...
} {
  ...
} ...
</pre></blockquote>

<p>
If the body of a conditional or loop is no more than about 20 characters,
you can put the entire construct on a single line if you want:

<blockquote><pre>
... { ... } if
</pre></blockquote>

rather than

<blockquote><pre>
... {
  ...
} if
</pre></blockquote>

<p>
There is another indentation style that many people prefer to the above:

<blockquote><pre>
...
{ ...
}
{ ...
} ...
</pre></blockquote>

<p>
We have adopted the first style for consistency with our C code, but we
recognize that there are technical arguments for and against both styles,
and might consider switching some time in the future.  If you have strong
feelings either way, please make your opinion known to
<b><tt>gs-devel@ghostscript.com</tt></b>.

<h3><a name="Spaces"></a>Spaces</h3>

<p>
Always put spaces between two adjacent tokens, even if this isn't strictly
required.  E.g.,

<blockquote><pre>
/Halftone /Category findresource
</pre></blockquote>

<p>
not

<blockquote><pre>
/Halftone/Category findresource
</pre></blockquote>

<hr>

<h2><a name="Naming"></a>Naming</h2>

<p>
All names should consist only of letters and digits, possibly with an
initial ".", except for names drawn from the PostScript or PDF reference
manual, which must be capitalized as in the manual.  In general, an initial
"." should be used for those and only those names that are not defined in a
private dictionary but that are meant to be used only in the file where they
are defined.

<p>
For edits to existing code, names made up of multiple words should not use
any punctuation, or capitalization, to separate the words, again except for
names that must match a specification.  For new code, you may use this
convention, or you may use the "Vienna" convention of capitalizing the first
letter of words, e.g., <b><tt>readSubrs</tt></b> rather than
<b><tt>readsubrs</tt></b>.  If you use the Vienna convention, function names
should start with an upper case letter, variable names with a lower case
letter.  Using the first letter of a variable name to indicate the
variable's type is optional, but if you do it, you should follow existing
codified usage (****** WE NEED A REFERENCE FOR THIS ******).

<hr>

<h2><a name="Miscellany"></a>Miscellany</h2>

<h3><a name="Non_standard_operators"></a>Some useful non-standard
operators</h3>

<dl>

<dt><b><tt>&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; .execn ...</tt></b>
<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that
order, essentially equivalent to

<blockquote><pre>
&lt;obj1&gt; &lt;obj2&gt; ... &lt;objn&gt; &lt;n&gt; array astore {exec} forall
</pre></blockquote>

<p>
except that it doesn't actually create the array.

<dt><b><tt>&lt;dict&gt; &lt;key&gt; <b>.knownget</b> &lt;value&gt; true</tt></b>
<dt><b><tt>&lt;dict&gt; &lt;key&gt; <b>.knownget</b> false</tt></b>

<dd>This combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the
obvious way.

<dt><b><tt>&lt;name&gt; &lt;proc&gt; odef -</tt></b>

<dd>This defines <b><tt>name</tt></b> as a "pseudo-operator".  The value of
<b><tt>name</tt></b> will be executable, will have type
<b><tt>operatortype</tt></b>, and will be executed if it appears directly in
the body of a procedure (like an operator, unlike a procedure), but what
will actually be executed will be <b><tt>proc</tt></b>.  In addition, if the
execution of <b><tt>proc</tt></b> is ended prematurely (by
<b><tt>stop</tt></b>, including the <b><tt>stop</tt></b> that is normally
executed when an error occurs, or <b><tt>exit</tt></b>) and the operand and
dictionary stacks are at least as deep as they were when the "operator" was
invoked, the stacks will be cut back to their original depths before the
error is processed.  Thus, if pseudo-operator procedures are careful not to
remove any of their operands until they reach a point in execution beyond
which they cannot possibly cause an error, they will behave just like
operators in that the stacks will appear to be unchanged if an error occurs.

</dl>

<h3><a name="Useful_procedures"></a>Some useful procedures</h3>

<dl>

<dt><b><tt>&lt;object&gt; &lt;errorname&gt; signalerror -</tt></b>

<dd>Signal an error with the given name and the given "current object".
This does exactly what the interpreter does when an error occurs.

</dl>

<h3><a name="Other"></a>Other</h3>

<p>
If you can avoid it, don't allocate objects (strings, arrays, dictionaries,
gstates, etc.) in commonly used operators or procedures: these will need to
be garbage collected later, slowing down execution.  Instead, keep values on
the stack, if you can.  The <b><tt>.execn</tt></b> operator discussed above
may be helpful in doing this.

<p>
If you find yourself writing the same stretch of code (more than about half
a dozen tokens) more than once, ask yourself whether it performs a function
that could be made into a procedure.


<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 2000 Aladdin Enterprises.  All rights
reserved.</small>

<p>
<small>This file is part of AFPL Ghostscript.  See the <a
href="Public.htm">Aladdin Free Public License</a> (the "License") for full
details of the terms of using, copying, modifying, and redistributing AFPL
Ghostscript.</small>

<p>
<small>Ghostscript version 8.12, 8 December 2003

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
