lity to specify
in the op_def list the dictionary in which operators will be defined.  (See
opdef.h for more details.)  This is an internal change only.

</pre><h3><a name="V2.9.7b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- viewgif.ps got an error on interlaced GIF files whose height
wasn't a multiple of 8.

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

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

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

</pre><h3><a name="V2.9.7b_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- time_.h, gp_unix.c, and gp_sysv.c didn't do the right thing on
SVR4 platforms, where gettimeofday only takes 1 argument.
	- The final linking command on Turbo C platforms didn't specify the
COMPDIR directory for the linker.

</pre><h3><a name="V2.9.7b_Fonts"></a>Fonts</h3><pre>

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

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

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

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

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

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

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

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

</pre>

<h2><a name="Version2.9.6b"></a>Version 2.9.6-beta (5/23/94, not
distributed to the public)</h2>

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

<h3><a name="V2.9.6b_Documentation"></a>Documentation</h3>

<pre>
Documents the standard location of Type 1 fonts on AIX.

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

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

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

</pre>
<h3><a name="V2.9.6b_Procedures"></a>Procedures</h3>

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

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

</pre><h3><a name="V2.9.6b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- The viewgif.ps utility didn't handle local color tables.

Updates ps2ai.ps to version 1.81.

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

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

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

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

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

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

</pre><h3><a name="V2.9.6b_Fonts"></a>Fonts</h3><pre>

Adds a fontmap suitable for use with Adobe Type Basics.

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

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

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

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

Adds oversampling for better character rasterizing.

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

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

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

Adds oversampling for better character rasterizing.

</pre>

<h2><a name="Version2.9.5b"></a>Version 2.9.5-beta (4/11/94)</h2>

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

<h3><a name="V2.9.5b_Documentation"></a>Documentation</h3>

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

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

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

</pre><h3><a name="V2.9.5b_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The IJG files didn't compile properly by themselves, because they
didn't have $(AK) in their dependency list.

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

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

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

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

</pre><h3><a name="V2.9.5b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- bench.ps didn't switch back to local VM properly before running
the program being benchmarked.

Adds a ppmsetpagesize command to the pstoppm utility.

</pre><h3><a name="V2.9.5b_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The PCX and GIF drivers used an incorrect algorithm for computing
the blue component of the color palette, which could cause colors to come
out with not quite enough blue.
	- The SPARCprinter driver wouldn't compile with non-ANSI compilers.

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

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

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

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

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

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

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

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

Factors out Type 1 font capability as a separate feature.

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

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

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

Factors out Type 1 font capability as a separate feature.

</pre>

<h2><a name="Version2.9.4b"></a>Version 2.9.4-beta (2/19/94)</h2>

<h3><a name="V2.9.4b_Procedures"></a>Procedures</h3>

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

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

</pre><h3><a name="V2.9.4b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- impath.ps (used by bdftops) computed the starting X coordinate
incorrectly, typically causing characters to be displaced slightly to the
right.
	- pstoppm.ps didn't handle local and global VM properly.

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

</pre><h3><a name="V2.9.4b_Drivers"></a>Drivers</h3><pre>

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

</pre><h3><a name="V2.9.4b_Platforms"></a>Platforms</h3><pre>

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

Adds support for Win32 and Win32s.

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

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

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

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

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

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

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

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

Refactors mem_mapped8_copy_mono because of limitations in the bcc32
compiler.

</pre>

<h2><a name="Version2.9.3b"></a>Version 2.9.3-beta (1/19/94)</h2>

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

<h3><a name="V2.9.3b_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The description of psview and xpsview was incorrect.

</pre><h3><a name="V2.9.3b_Procedures"></a>Procedures</h3><pre>
Changes the installation directories for Unix and similar systems to put
Ghostscript data in $(datadir)/ghostscript/gs-NN.NN.NN rather than directly
in $(datadir)/ghostscript.  (Fonts still go in $(datadir)/ghostscript/fonts.)

</pre><h3><a name="V2.9.3b_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- Some spaces were incorrectly replaced with tabs in the help
message in the 3B1 display driver.
	- The BMP driver wrote a spurious scan line at the beginning
of its output.
	- The monochrome PCX driver had the two palette elements
interchanged.

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

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

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

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

Adds Desqview/X makefiles that actually work.

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

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

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

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

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

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

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

</pre><h3><a name="V2.9.3b_Library"></a>Library</h3><pre>
Fixes bugs:
	- The software floating multiply code used with USE_FPU=-1 only
worked on little-endian platforms.
	- Specifying a left side bearing to .type1addpath produced an
inappropriate offset.

</pre>

<h2><a name="Version2.9.2b"></a>Version 2.9.2-beta (1/2/94)</h2>

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

<h3><a name="V2.9.2b_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- make.doc still referred to use_* variables in gdevx.c, and
use.doc didn't explain the use* X resources.

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

</pre>

<h3><a name="V2.9.2b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- viewgif.ps did not work with interlaced images.
	- font2c.ps omitted gsmemory.h from the #include list in compiled
fonts.

</pre><h3><a name="V2.9.2b_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The MS Windows driver hadn't been updated to work with the
new additions to the gx_device structure.
	- The BMP file driver wrote one scan line too many.
	- The cdj driver omitted an important cast to int in the error
diffusion code (FSdither macro).

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

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

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

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

</pre><h3><a name="V2.9.2b_Fonts"></a>Fonts</h3><pre>
Fixes bugs:
	- The X11 .pfa fonts replaced their .gsf requirements in the
fontmap, but not distributed with the previous (beta) release.

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

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

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

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

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

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

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

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

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

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

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

</pre>

<h2><a name="Version2.9.1b"></a>Version 2.9.1-beta (12/7/93)</h2>

<p>This version was distributed only to beta testers.

<h3><a name="V2.9.1b_Utilities"></a>Utilities</h3><pre>
Adds a viewgif.ps utility to view GIF files.  The current version does not
work with interlaced data, local color tables, or files containing more
than one image.

</pre><h3><a name="V2.9.1b_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- putinterval and copy didn't do the right thing if the source and
destination were aliases for overlapping sections of the same array or
string.
	- The DCT filter stub didn't allow the dictionary to be omitted.
(The Adobe documentation doesn't allow this, but Adobe implementations
do.)

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

</pre><h3><a name="V2.9.1b_Library"></a>Library</h3><pre>
Fixes bugs:
	- setdash produced inverted output if the pattern had an odd
number of elements and the offset O had the property that L &lt;= O mod
2*L, where L was the sum of the pattern elements.

</pre>

<h2><a name="Version2.9b"></a>Version 2.9-beta (12/6/93)</h2>

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

<h3><a name="V2.9b_Documentation"></a>Documentation</h3><pre>
Notes that Ghostscript runs on IBM PCs and compatibles under DR DOS
6.0.

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

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

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

</pre><h3><a name="V2.9b_Procedures"></a>Procedures</h3><pre>
Changes the distribution script so that it stores all text files in the
main source archive with Unix end-of-line conventions, but with DOS
end-of-line conventions in the MS-DOS-specific archive.

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

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

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

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

</pre><h3><a name="V2.9b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- If there were no unencoded characters, prfont.ps would get
an error.

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

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

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

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

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

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

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

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

Adds a user-contributed OS-9 platform.

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

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

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

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

Adds the last OS error number to the error printout.

Removes the obsolete framedevice operator.

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

Changes the name of the getdevice operator to .getdevice.

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

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

</pre>

<hr>

<h2><a name="Version2.8b"></a>Version 2.8-beta (11/10/93)</h2>

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

<h3><a name="V2.8b_Documentation"></a>Documentation</h3>

<pre>
Notes the change in X11 foreground/background handling.

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

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

</pre><h3><a name="V2.8b_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- echogs wasn't always invoked with ./ on Unix systems.

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

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

</pre><h3><a name="V2.8b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- the ps2image utility didn't put a %! on the first line of the
output.

</pre><h3><a name="V2.8b_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The Hercules display driver didn't include definitions for
outport2 and PAGE_HEIGHT_INCHES, which it uses.
	- The BGI driver didn't call setactivepage or setvisualpage,
which it needs to do in general.
	- The Apple DMP driver declared dmp_print_page rather than
appledmp_print_page, causing a compilation error.

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

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

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

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

</pre><h3><a name="V2.8b_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- The meaning of the -p switch for the Watcom compile-and-link
program was changed between Watcom C/386 versions 8.5 and 9.5, causing the
make process to malfunction.
	- The SCFTAB and SCFDTAB modules were omitted from the VMS link
list.

Adds user-contributed code for OS/2.

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

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

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

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

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

Adds an eexecEncode filter.

Implements setcolorscreen, which was accidentally omitted from 2.7.

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

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

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

</pre>

<hr>

<h2><a name="Version2.7.2b"></a>Version 2.7.2-beta (10/11/93)</h2>

<p>This version was distributed only to alpha testers.

<h3><a name="V2.7.2b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- prfont.ps didn't print unencoded characters.

Improves mergeini.ps to remove embedded comments.

</pre><h3><a name="V2.7.2b_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- An error occurring within the scope of an internal .stopped
didn't pop the command and error name off the stack.
*	- The = and == procedures weren't re-entrant.

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

</pre><h3><a name="V2.7.2b_Library"></a>Library</h3><pre>
Fixes bugs:
	- grestore freed the path and the clip path in an order that
was likely to lead to memory sandbars.
	- moveto + closepath didn't actually close the path.
	- moveto + reversepath produced an empty path (no moveto).
	- moveto + closepath + reversepath produced an extra lineto.
	- reversepath didn't set the current point to the end (i.e., the
former beginning) of the last subpath.

Adds a "planar" memory device.

</pre>

<h2><a name="Version2.7.1b"></a>Version 2.7.1-beta (10/4/93, not distributed to the public)</h2>

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

<h3><a name="V2.7.1b_Documentation"></a>Documentation</h3><pre>
Documents the GS_OPTIONS environment variable.

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

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

</pre><h3><a name="V2.7.1b_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- wrfont didn't wrap a systemdict begin / end around the body of
the font.
	- wrfont wrote out the Symbol and ZapfDingbats encodings in a way
that only worked if the encoding was known by name.

Changes bdftops to include an XUID if desired.

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

</pre><h3><a name="V2.7.1b_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The PCL drivers sent a printer reset (&lt;ESC&gt;E) at the beginning
of every page, instead of only before the first page.
	- The PCX driver didn't round up the scan line width in the
header, even though it produced scan lines with the correct (rounded)
number of bytes.

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

</pre><h3><a name="V2.7.1b_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- On Unix platforms, the value of the TEMP environment variable
had to end with a '/'.
	- On MS-DOS systems, printer output to devices other than PRN
(specifically, LPTn) didn't put the device into binary mode.

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

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

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

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

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

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

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

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

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

</pre><h3><a name="V2.7.1b_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
*	- imagemask interpreted the Decode array incorrectly (inverted).
	- Running out of memory when constructing a path incorrectly
signalled a limitcheck rather than a VMerror.
	- restore didn't purge uncached scaled fonts properly.

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

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

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

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

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

Redefines gs_erasepage to call gs_fillpage.

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

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

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

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

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

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

</pre>

<h2><a name="Version2.7b"></a>Version 2.7-beta (9/20/93, not distributed to the public)</h2>

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

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

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

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

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

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

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

Documents the fact that X11R3 is no longer supported.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* Adds a LaserJet 4 driver.

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

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

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

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

Changes the LaserJet margins again.

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

Adds wildcard matching capability to filenameforall under Unix.

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

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

Removes the S3 driver from the standard PC configurations.

Adds documentation for compiling Ghostscript on the Intergraph Clipper.

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

</pre><h3><a name="V2.7b_Fonts"></a>Fonts</h3><pre>

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

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

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

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

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

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

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

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

Implements black generation and undercolor removal.

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

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

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

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

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

* Adds time slicing capability to the interpreter.

Implements setcolorscreen/currentcolorscreen.

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

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

Implements black generation and undercolor removal.

Removes gdev_mem_ensure_byte_order, which was no longer used or useful.

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

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

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

Implements gs_setcolorscreen/currentcolorscreen.

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

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

</pre>

<hr>

<h2><a name="Version2.6.1"></a>Version 2.6.1 (5/28/93)</h2>

<p>This is primarily a bug-fix release for 2.6, with a couple of minor
additions.

<h3><a name="V2.6.1_Documentation"></a>Documentation</h3><pre>

Adds proper `man' pages ansi2knr.1 and gs.1.

</pre><h3><a name="V2.6.1_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The Unix makefile produced an incorrect linker command if
EXTRALIBS was not empty.
	- The Unix install commands didn't copy devices.doc,
ps2epsi.doc, and xfonts.doc to the documentation directory.
	- echogs.c didn't include &lt;sys/types.h&gt;, which is needed for
time_t on some systems.
	- malloc_.h used &lt;malloc.h&gt; rather than &lt;stdlib.h&gt; on
NeXTStep systems.

Changes the configuration procedure to use a C program rather than
complex shell scripts.

</pre><h3><a name="V2.6.1_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- The boilerplate produced by ps2image used the 'max'
operator, which is not a standard PostScript operator.
	- The winmaps.ps utility had 'floring' instead of 'florin' in
the OEMEncoding table.
	- quit.ps was omitted from the PC distribution.

Changes the name of the dicttomark procedure to .dicttomark.

Renames gs_2asc.ps as ps2ascii.ps, so it matches the names of the
script files.

</pre><h3><a name="V2.6.1_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The pbmraw driver was writing out RGG instead of RGB values.
	- The X11 driver used NULL in a place where it should have
used None.
	- For multi-file output, the GIF driver didn't write a header
at the beginning of each file.
	- The Epson driver didn't honor the -A4 compilation switch,
didn't put (0,0) at the physical corner of the page, and was too
liberal about using tabs instead of spaces.

Replaces the color handling algorithms in the X Windows driver with
new, much better ones.

Makes the PC display drivers recognize the -A4 compilation switch,
like the printer drivers.

Adds new user-contributed drivers:
	- A driver for Epson printers that use the ESC/P 2 control
language, such as the Stylus 800.
	- A driver for the Apple Dot Matrix Printer and Imagewriter.

Adds a new get_xfont_device driver procedure.  This is a
backward-compatible change, since there is a sensible default.

</pre><h3><a name="V2.6.1_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- On VMS, gconfig.h didn't have #include "gsconfig.h" as its
first line.
	- gconfig.c compiled incorrectly on the RS/6000 because the
compiler evaluated a constant of the form (x&lt;&lt;y)+z incorrectly.
	- Quite a few files that used the mem... functions didn't
include memory_.h, which caused trouble on some bsd4.2 systems.
	- The definition of zfont_char_xglyph confused one of the AIX
compilers.
	- On VMS, DEC C allows extra arguments for fopen, but gcc doesn't.
	- On the MS Windows platform, 2.6 used gdevwddb rather than
gdevwdib; the latter is almost always faster.
	- The PC .zip files didn't include the Windows .ICO and .RES
files in either GSEXE.ZIP or GSFILES.ZIP.

On PC platforms, adds an option (FPU_TYPE=-1) to optimize for
machines lacking a floating point processor.

</pre><h3><a name="V2.6.1_Fonts"></a>Fonts</h3><pre>

Adds 4 new fonts contributed by URW.  These have a URW copyright and
are governed by the GNU License.

Documents the fact that font names in Fontmap can be strings, not
only names.

Adds DingbatsEncoding as a predefined encoding (in addition to
Standard, ISOLatin1, and Symbol).

</pre><h3><a name="V2.6.1_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- memchr (used in zfile.c) isn't available on all platforms.
	- languagelevel was defined as an operator rather than an
integer.
	- iccfont.c referred to name_StandardEncoding instead of
#include'ing font.h and referring just to StandardEncoding.
	- The CCITTFaxDecode filter didn't work on 32- (or 64-) bit
machines, because of a bug in more_bits().
	- The structures recording an allocation within the scope of
a save could get allocated unnecessarily, because they weren't
properly marked as free when an array was freed.

Renames the following Ghostscript-specific operators by adding a '.'
at the front: makeoperator, setdebug, setmaxlength, stringmatch,
type1decrypt, type1encrypt.

Adds a real implementation of glyphshow.

</pre><h3><a name="V2.6.1_Library"></a>Library</h3><pre>
Fixes bugs:
	- Discarding fractional character coordinates in the Type 1
rasterizer led to some rendering anomalies (e.g., characters 1 pixel
too high).
	- If a font had a non-standard encoding (i.e., not
StandardEncoding, ISOLatin1Encoding, or SymbolEncoding), Ghostscript
would never invoke the platform font code.
	- The RGB to HSB color conversion algorithms produced
nonsensical values.
	- struct cached_char_s was defined redundantly in gxcdir.h,
causing compilation problems on some systems.
	- 32-bit color devices didn't work properly on little-endian
machines (arrange_bytes in gdevmem2 was wrong).
	- The scaled font cache could confuse two fonts with the same
UniqueID and different Encodings.
	- Under many common circumstances (first use of a character
was with stringwidth, the font was renamed, the font encoding was
changed), xfonts would not be used.

Adds gs_glyphshow.

</pre>

<h2><a name="Version2.6"></a>Version 2.6 (5/9/93)</h2>

<p>The main new feature in this release is the ability to use platform
fonts.  It also adds many more Level 2 PostScript facilities.

<h3><a name="V2.6_Documentation"></a>Documentation</h3><pre>

Corrects some errors in the documentation of the makeimagedevice operator.

Adds operand and result types to the comments at the beginning of all the
operators.

Adds new sections on installation in use.doc.

Reinstates history.doc as a repository for old and no longer interesting
history information.

Adds a new file, devices.doc, with documentation for specific devices.

Points out that font2c must be run with a Fontmap that includes the fonts
being converted, and that its arguments must be quoted with "" on VMS
systems.

Notes that the font name in the Fontmap must be the same as the FontName
in the font.

Adds a list of the Level 2 facilities not provided by Ghostscript.

Identifies bug-ghostscript@prep.ai.mit.edu as an alias for the
gnu.ghostscript.bug newsgroup.

Points out explicitly that -sOutputFile=- sends output to stdout, and
requires using the -q switch.

Documents the use of tar_cat to construct the Unix makefiles.

Adds a new file, xfonts.doc, that describes the external font interface.

Documents the fact that drivers must use gs_malloc and gs_free rather than
malloc and free.

Documents the *.sh (shell script) files.

Adds brief documentation on some additional development tool .ps files.

Documents the TEMP and GS_OPTIONS environment variable.

Points out the need to run Windows in 386 Enhanced mode on machines
that have less than 6 Mb of RAM.

Consolidates documentation on compiler switches in make.doc (some of
it had been in the unix*.mak files).

</pre><h3><a name="V2.6_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- \'s in arguments following -- were doubled.

Includes the full set of filters automatically if the level2 feature
is selected.

Extends DEVICE_DEVS... up to DEVS9.  Adds DEVICE_DEVS1 as well.

Renames turboc.mak and tbcplus.mak as tc.mak and bc.mak.

Makes @-files use the library path (GS_LIB, -I).

Changed the Unix install script to use install &lt;file&gt; &lt;destfile&gt;
rather than install &lt;file&gt; &lt;directory&gt;.

Adds a GS_OPTIONS environment variable that acts like an implicit @-file
at the beginning of the command line (i.e., may contain switches and
initialization files).

Renames sym__enc.ps as gs_sym_e.ps.

Adds a user-contributed shell script for using Ghostscript with an
H-P printer spooler.

Adds level1.ps to the set of installed utility files.

Extends the TEMP environment variable (the directory for scratch
files) to work on Unix as well as MS-DOS.

Changes the MS Windows makefile to generate gswin.exe rather than
gs.exe, and the Watcom makefile to generate gs386.exe.

Moves the "product" string from gs_init.ps to iinit.c.

Adds a GS macro to the makefiles, to allow choosing the name of the
executable.

</pre><h3><a name="V2.6_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
*	- font2c did the wrong thing (still) for fonts that didn't
use StandardEncoding, ISOLatin1Encoding, or SymbolEncoding.
*	- impath.ps had a fatal bug (wrong operand order for
charstack_write) that caused bdftops to fail.
	- gslp didn't wrap or truncate lines.
	- gslp didn't handle tabs in a second or subsequent column
properly.
	- The definition of ashow in gs_2asc.ps incorrectly undid the
increment following the last character.
	- The definition of awidthshow in gs_2asc.ps failed to pop
two entries from the stack, and also tested the character against the
wrong value.

Adds a shell script (sysvlp.sh) that interfaces Ghostscript with the
System V 3.2 lp interface.

Adds ps2ascii and ps2epsi script/batch files.

Adds a new utility, mergeini.ps, for concatenating all the
Ghostscript initialization files into a single file, optionally
removing comments and blank lines.

Adds new switches to gslp:
	-q: suppress all printed output.
	--detect: check whether the file begins with %!, and if so,
	    interpret it directly as a PostScript file.
	--first-page &lt;page#&gt;: replaces the former -P switch.
	--last-page &lt;page#&gt;: replaces the former -Q switch.
	--(heading|footing)-(left|center|right) &lt;string&gt;: define
	    headers/footers.  # inserts the page number.
	--margin-(top|bottom|left|right) &lt;inches&gt;: define margins.
	--spacing &lt;n&gt;: for double, triple, etc. spacing.
Also makes gslp ignore all the enscript flags it doesn't implement.

Adds an option to wrfont.ps to do encryption at read-in time.  (This
allows much better compression of the standard Ghostscript fonts.)
Changes bdftops to use this option.

Changes gslp to accept wild cards in file names.

Replaces landscap.ps with a new one contributed by a user.

Changes the compression scheme used in ps2image to a much more
effective one.  Writing images is much slower than with the previous
scheme, but reading is not.

</pre><h3><a name="V2.6_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- SCFDTAB and SCFTAB were omitted from the VMS module lists.
	- Function prototypes were not being used with the Watcom
compiler.
	- On MS-DOS platforms, if the value of the TEMP variable had
a trailing : or \, Ghostscript appended a \ anyway.
	- Under Windows, changing the size or resolution of the image
closed and reopened the window.
	- Ghostscript would not build correctly with the Watcom compiler
if DOS4G=quiet was not set, because the DOS4GW copyright message was sent
to stdout.
*	- Finally gets Ghostscript to run properly on the RS/6000, by
adding a compiler bug workaround to arc_add and arc_either.
*	- Finally gets Ghostscript to compile properly on Sun SPARC
systems, by adding a compiler bug workaround in scan_number.

Changes the default MS-DOS configuration from 8086/8088 to 80286.

Adds all the SuperVGA drivers to the BC++ and Watcom executables
(except for the VESA driver in the Watcom executable).

Adds a makefile (msc.mak) for the Microsoft C/C++ 7.0 platform.  This
is currently a MS-DOS, not a MS Windows, platform.

Changes gp_enumerate_files_init so it takes a gs_memory_procs *, not
separate proc_alloc_t and proc_free_t arguments; also, it must
enumerate precisely the requested set of files, not a superset.  THIS
IS A NON-BACKWARD-COMPATIBLE CHANGE.  It affects all gp_*.c files.

Adds the P*M drivers and bit.dev to the standard configuration on
Unix platforms.

Changes the Watcom makefile so it uses the WATCOM environment variable (by
default) as the base directory for the Watcom executables.

Adds the MS Windows COMMDLG.DLL and SHELL.DLL files to the set of
files incorporated in GSEXE.ZIP, since the new MS Windows code uses
them, and they aren't provided with Windows 3.0.

Makes major revisions to the MS Windows platform and driver code, to
support the gsview front end, and also to remove the dependence on the
Borland EasyWin library.  NOTE: Compiling the MS Windows code now requires
Borland C++ 3.1 (not 3.0).

Changes time_.h so that Ghostscript will compile and run on A/UX.

Changes the MS-DOS implementation of file enumeration so it always
treats \s in the file name as literal characters, not escapes, unless
there are two \\s in a row.  This does the most sensible thing given
the DOS file naming conventions.

Adds a %pipe% file device under Unix.

Adds a makefile for Watcom C under MS Windows.  This is very preliminary;
in particular, NO display output is supported.

</pre><h3><a name="V2.6_Fonts"></a>Fonts</h3><pre>
Fixes bugs:
	- fonts.mak referred to ncri and puti rather than ncrri and
putri.
	- cyr and cyri had the wrong protection.
	- The Hershey fonts left the font on the stack when they were
loaded.
*	- The FontName of an aliased font was the original FontName
from the file, not the alias.
*	- Fontmap.BTS had incorrect entries for AvantGarde-Demi and
AvantGarde-DemiOblique.
	- Ghostscript pushed userdict, rather than an empty writable
dictionary, onto the stack when loading a font, leading to name clashes.

Adds a new cfonts.mak with a full set of rules for compiling all the
standard Ghostscript fonts (except the Hershey fonts) into C.

Adds UniqueIDs to the Hershey fonts, and removes the UniqueIDs from
the Hershey entries in the Fontmap.

Adds a new Fontmap for VAX/VMS with DECWindows/Motif.

Changes MakeHersheyFont so it takes the encoding as an additional
parameter, and changes the Hershey-Symbol font to use SymbolEncoding.

</pre><h3><a name="V2.6_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The !@*&amp;^%#@$ PCL drivers *still* didn't do the right thing
about vertical spacing: the &lt;ESC&gt;*p+&lt;n&gt;Y command works on all PCL 3,
4, and 5 printers *except* the LaserJet IIp.
	- The cdj driver used recursive macros (height, t_margin,
b_margin) that not all compilers handled correctly.
	- The djtc driver used some assignments including =*, which
some compilers dislike.
	- The S3 driver wouldn't compile correctly with the Watcom
compiler.
	- The makefile entry for the S3 driver was wrong.
	- The SuperVGA drivers returned an error, rather than using
the highest available resolution, if a too-high resolution was
requested.
	- The GIF driver produced an incorrect header for images
wider or taller than 32K pixels.
	- The GIF driver wasn't able to handle multi-page documents
correctly.
	- The margins on the DeskJet were still not correct.
	- Some ANSI C compilers rejected a complex expression in
gdevpccm.c.
	- Printer drivers didn't recover cleanly from problems in
opening the scratch files.
	- The BJ-10e driver used the same name `out' for a label and
a variable.
	- The SCO ODT compiler couldn't handle sizeof(ppdev-&gt;fname).
	- The Epson driver used the wrong value for ESC in the
initialization string.

Adds new drivers:
	- Drivers to produce MS Windows .BMP format output.
	- A new ATI Wonder display driver (800x600, 16 colors) and a
1024x768 mode for the existing driver.

Adds new user-contributed drivers:
	- A driver for the Tektronix 4693d color printer.  This carries a
university copyright.
	- A driver for the SPARCprinter.
	- A driver for the Canon BJ200 printer.
	- A driver for the IBM ProPrinter.
	- A driver for the DEC LJ250 printer, which has a
PaintJet-compatible mode.
	- A replacement driver for the Sony NWP533.
	- A driver that writes TIFF/F (Group 3 fax) files.  This carries
an external copyright.
	- A driver for the C.Itoh M8510 printer.
	- A driver for the Okidata MicroLine 182 9-pin dot-matrix printer.
	- A Hercules Graphics driver.
	- A driver for printers under MS Windows.
	- A driver for direct frame buffer addressing under SCO Unix
and Xenix and AT&amp;T SVR4.

Changes the get_bits driver procedure so it always reads a single
scan line, and optionally does not copy the data.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE.  However, this change does not affect
any existing printer driver, since these all go through intermediate
routines in gdevprn.c.

Changes gdevprn.h, and the relevant printer drivers, so that -DA4
will change the default paper size for any printer driver.

Allows the use of NULL or 0 for default procedures in the driver
procedure vector.

Adds an optional map_cmyk_color procedure to the driver procedure
vector.

Changes the Epson driver so that the minimum amount of white space
required to use a tab is an easily changed parameter.

Changes the BGI driver to use separate segments for the Borland
device drivers, to reduce the risk of overflowing a segment.

Adds an optimization option (normally enabled) to the PGM and PPM drivers
such that they revert to PBM or (for PPM) PGM if the page can be
represented that way.

Adds a new (optional) driver procedure to get the procedure vector
for external fonts.

Adds an argument to gp_open_printer to indicate whether the file should be
opened in binary or text mode.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
However, this change does not affect any existing printer driver, since
these all go through intermediate routines in gdevprn.c.

Changes the LN03/LA50/LA75 driver so it uses a text record mode to open
the output file under VMS (by adding an argument to gp_open_printer to
indicate this.)

Allows (indeed, encourages) drivers to use far_data to declare the device
structure, primarily to avoid overflowing the 64K data segment under MS
Windows.  Changes the file output drivers and many of the printer drivers
to declare their device structures as far_data.

Replaces the AT&amp;T 3B1 driver with an updated version (from the same
contributor).

Changes the Epson BJ driver and the SPARCprinter driver so they align
the (0,0) point of the page with the physical corner of the paper
rather than with the origin of the printable area.

Removes the EIZO MDB-10 driver, since it caused complications for the
EGA and VGA drivers and is not a widely used device.

</pre><h3><a name="V2.6_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- The entry for the copydevice operator in the operator table
was initialized incorrectly.
	- printobject and writeobject didn't handle nested arrays.
	- restore didn't properly close the current file (if
appropriate), causing an invalidaccess error.
	- buildfont required the presence of a valid, 4-element
FontBBox.  (The Red Books say it's required, but Adobe interpreters
don't require it; some DEC software generates a 3-element FontBBox.)
	- resourceforall had several bugs; it didn't do even
approximately the right thing.  There were quite a few other problems
with the implementation of resources.
	- setfont, makefont, and scalefont would accept a font with
no FID entry.
*	- Loading a .PFB font left the file open (until the next
restore or quit).
	- The default (null) font didn't include a PaintType entry,
which some PostScript files expected.
*	- The ASCIIHexDecode filter sometimes thought the underlying
stream was at EOF even when there was (at most one buffer's worth of)
data left.
	- iscan.c included &lt;ctype.h&gt; before std.h, causing type name
clashes on some systems.
*	- save and restore didn't handle the pointers in the graphics
state correctly; for example, the current font wasn't restored
properly.
	- Binary object sequences at the top interpreter level didn't
get executed immediately.
	- On high-resolution devices, the default transfer function
converted almost-white grays to very light grays rather than white.
	- The `string' operator was checking the string length
against max_uint rather than max_ushort, which could cause invalid
lengths to be accepted.
*	- deviceinfo caused a stackunderflow error.
*	- idiv could give incorrect results for quotients or
remainders that didn't fit in 24 bits.
*	- The ASCII85Encode filter padded trailing bytes with 1's
rather than 0's.
*	- The ASCII85Decode filter had a typo that produced incorrect
results if there were exactly 2 trailing bytes.
	- findlibfile didn't push a copy of the file name if it was
the name of a special (%) file.
	- setduplexmode was not defined in statusdict, causing
/undefined errors from some poorly designed input files.
*	- The CCITTFaxDecode filter had several bugs in 2-D decoding.
*	- The ASCII85Decode filter didn't read ahead to detect EOD if
it fell precisely on a buffer boundary.
	- If a file mentioned on the command line redefined `start',
Ghostscript would run the new definition rather than the built-in one
after processing all the files on the command line.
	- The SCO ODT compiler couldn't handle the conditionals in the
ngetc (iscan.c) and sgetc* (stream.h) macros.
	- makefont and scalefont didn't cache the PostScript dictionaries
for scaled fonts.
	- Changing the elements of the Encoding of a font dynamically
didn't take effect if the character was already cached.
	- makefont and scalefont didn't add the (undocumented) OrigFont
and ScaleMatrix entries to the new font.
*	- findfont insisted that the font name be a string or a name.
	- filenameforall could cause an incorrect transfer of control
if no files matched the pattern.
*	- ISOLatin1Encoding had hyphen instead of minus at code 45.
	- restore didn't reset saved_cbot and saved_ctop correctly;
as a result, some freed blocks could get abandoned rather than put on
the free list.
	- Some numerical constants in zarith.c assumed that longs
occupied 32 bits.

Implements additional Level 2 features:
	- %device%file names (only the "os" device is provided).
	- &lt;~ ~&gt; for ASCII-85 strings.
	- Binary error messages.
	- BuildGlyph.
	- CCITTFaxDecode filter entries EndOfBlock, Rows, and
	(undocumented) FirstBitLowOrder.
	- {set/current}{color/colorspace/overprint/colorrendering/
	blackgeneration/undercolorremoval}.  (See below under library
	for limitations.)
	- Decode for the dictionary form of image.
	- File access modes a, r/w/a+.
	- Font entries CDevProc, Metrics2, and WMode.
	- Font operators cshow, findencoding, rootfont, and
	setcachedevice2.
	- glyphshow (emulated with PostScript code).
	- languagelevel.
	- realtime.
	- setbbox.
	- (Subset of) system and user parameters.
	- xshow, yshow, and xyshow.
	- XUIDs for fonts.

Moves the installation of systemdict and the initial allocation of
globaldict (if relevant) and userdict from gs_init.ps to iinit.c.

Makes Level 2 features dynamically selectable through the
.setlanguagelevel operator; disables all Level 2 features
(specifically including automatic dictionary expansion) unless the
level2 feature is included and active.

Adds the .knownget operator for speeding up system procedures.

Renames the type1addpath operator as .type1addpath; adds an optional
left side bearing argument; changes it so it does not do the
setcachedevice, fill, or stroke, but does do a moveto for the
character width.  Changes Type1BuildChar appropriately.  (All this is
needed to make WMode work.)

Removes the .setmetrics operator, which is no longer needed.

* Changes the meaning of the user_errors argument to gs_run_file and
gs_run_string so that -1 means always return on an error, 0 means
only return on an error not within a `stopped'.

Adds all the necessary checks and operators for local/global VM, but
doesn't actually implement local/global mode.

Changes setcachedevice back so that it requires 4 numbers on the
stack rather than a 4-element array.  (It was changed to be the other
way in release 2.0, but that was because I didn't realize that fonts
had to have an executable FontBBox, and some of the Ghostscript fonts
didn't.)

Changes all the filter operators from .filterxxx to .filter_xxx, and
removes the need to enumerate them in gs_init.ps.

Adds .oserrno and .oserrorstring operators for getting the last OS
error (in the current context).

Changes gs_finit similarly to gp_exit.  Adds gs_exit_with_code that
takes both an exit status and a Ghostscript error code.

Changes the name of name.h to iname.h.

Adds support for the `interrupt' error (but doesn't provide any standard
way of generating one, other than through the gp_check_interrupts polling
function).

Adds copyright to systemdict.

Changes the spot halftone screen to an elliptical screen supplied by
Berthold K. P. Horn.

Adds a check that the first token in gs_init.ps is an integer.  In
conjunction with other code in gs_init.ps, this should catch all attempts
to run Ghostscript with a gs_init.ps that doesn't match the executable.

Changes all relevant occurrences of sizeof to size_of in order to
work with the buggy SVR4.2 C compiler.

Changes gp_exit so it is passed both the Ghostscript error code and
the exit status code as arguments.  This is backward-compatible for
all but the pickiest compilers.

Adds a call on gp_check_interrupts() after fwrite calls in the stream
machinery.  This prevents lengthy console output from locking out
other programs.

Changes a couple of occurrences of op_def_ptr in iinit.c to work around a
`const' bug in Sun's SC1.0 compiler.

Adds a special hack in the 'where' operator to work around a bug in Aldus
Freehand 2.x.

Changes all empty argument lists from () to (void), which is the ANSI
C syntax.

Adds a hack to ignore ^[ and ^D^[ tokens, to work around the prologue
and epilogue emitted by the MS Windows LaserJet IV driver.

Defines the processcolors operator, which should not be needed, but
is required because of bugs in Lotus 1-2-3 and Adobe PhotoShop.

Changes the allocator (ialloc) to fill all allocated and/or freed
blocks with a marker if gs_alloc_debug is set, as gs_malloc and
gs_free already do.

</pre><h3><a name="V2.6_Library"></a>Library</h3><pre>
Fixes bugs:
	- 16-bit memory devices stored the bytes of each pixel in the
wrong order.
	- copy_mono did the wrong thing when copying 1 source chunk
to 2 destination chunks with polarity inverted.  (This probably
didn't affect any actual uses of Ghostscript.)
*	- The compile-time check for ints being 2 or 4 bytes used the
#error directive, which most compilers don't recognize.
	- arc and arcn didn't do the right thing for degenerate
(single-point) arcs, or for arcs drawn in the "wrong" direction that
were multiples of 360 degrees.
	- charpath did the wrong thing with Type 3 fonts.
	- copyscanlines gave an error if the buffer was too large.
	- The copy_mono procedure (used for text and halftones) for
2- and 4-bit-per-pixel memory and printer devices incorrectly
incremented the destination pointer after every pixel, instead of
only after every byte.
	- The fill_rectangle procedure (used for graphics) for 2- and
4-bit-per-pixel memory and printer devices, if given any color other
than all 0's or all 1's, multiplied the X coordinate and width by 2
or 4, thereby filling the wrong area.
	- The use of 'data' in both gs_type1_data and gs_font upset
the VMS compiler.
	- The `Flex' feature wasn't implemented for Type 1 fonts,
which caused serious errors in rendering some fonts that use it.
(Unfortunately, some Adobe fonts violate the specification, so we had
to implement Flex to always use a curve.)
*	- Stem width adjustment was too eager, producing very strange
effects on small characters with tight curves (a curve point could
get snapped to the other side of the open area).
	- The allocator didn't align structures adequately on
machines where sizeof(long) or sizeof(char *) was 8 bytes.
	- The test for IEEE floating point gave an incorrect
(negative) result on machines where sizeof(long) was 8 bytes.
	- genarch.c assumed that the result of subtracting two
pointers was an int, leading to a garbage arch.h file on systems
where this was false.
*	- The Type 1 font interpreter incorrectly reset the adjusted
path position to be the same as the unadjusted path position whenever
it returned control to the client (in particular, for callothersubr),
leading to discontinuities and distortions in the character shapes.
*	- Accented characters in Type 1 fonts often misplaced the
accent to the left.
	- gsmisc.c wouldn't compile on machines with 64-bit pointers,
because _pad was 0, and ANSI compilers don't accept 0-length arrays.
	- pathforall got confused if the client procedures modified
the path.
	- The command list file representation limited X and Y
coordinates to 15 bits.
*	- stroke could produce spikes or other garbage for mitered
joins as a result of stroke adjustment.
	- The params_size field of the null device was wrong, so
scaling the null device produced unpredictable results.

Changes monobit memory devices to always store data big-endian.  This
eliminates byte-swapping, at the cost of slightly slower rendering.

Removes the memswab* routines, since they are no longer needed.

Implements gs_cshow_[n_]init, which provides support for cshow, and
gs_xyshow_[n_]init, which provides support for {x,y,xy}show.

Adds an optional left side bearing argument to gs_type1_interpret.

Changes gs_type1_interpret so it does not do a setcachedevice, fill,
or stroke, but only appends the character outline to the path
(including a moveto for the character width.)

Removes gs_setmetrics, which is no longer needed.

Implements gs_setcachedevice2, which provides support for
setcachedevice2.

Speeds up gsave/grestore by allocating, deallocating, and copying as
much as possible of the graphics state in a single operation.

Implements gs_{set/current}{color/colorspace/overprint/colorrendering/
blackgeneration/undercolorremoval}.  Device, indexed (with table, not
with procedure), CIE, and (substituted) separation colors are
supported; some of the setup code for patterns is also present.

Increases the size of temporary file names in gdevprn.h from 30
characters to 60.

Changes the character cache to be allocated dynamically in chunks.

Splits gxcache.c into gxccache.c (fast "hit" code) and gxccman.c (all
other code).

Changes all occurrences of sizeof to size_of in order to work with the
buggy SVR4.2 C compiler.

Adds a new concept of "external fonts", which allow a driver to
substitute its own fonts for the ones obtained through the normal
font machinery.

Changes all empty argument lists from () to (void), which is the ANSI
C syntax.

</pre>

<hr>

<h2><a name="Version2.5.2"></a>Version 2.5.2 (9/20/92)</h2>

<p>This is yet another bug fix release to (finally!) get the PCL drivers
working again.

<h3><a name="V2.5.2_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The comment in devs.mak for cdjcolor said it used 8 bits
per pixel, rather than the correct 24.

Adds gsbj/dj/lj/lp and gslp.ps to the installed files on Unix
systems.

Removes dps.dev and level2.dev from the standard configurations on
all platforms, since the presence of the setcolor operator was
causing the output of some common applications to fail.

</pre>

<h3><a name="V2.5.2_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- font2c produced invalid output for any font that didn't use
StandardEncoding or ISOLatin1Encoding.

</pre>

<h3><a name="V2.5.2_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- gp_sysv.c required an extern long timezone.

</pre>

<h3><a name="V2.5.2_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The PCL drivers were *still* doing the wrong thing about
zeroing the seed row for Mode 3 compression.
	- Setting the resolution with -r didn't work under Windows.
	- The Windows driver got a stack overflow if it was ever
asked to display a bit image wider than 32 pixels.
	- The Tseng driver didn't sense the model (ET3000 vs. ET4000)
correctly.

Adds the eps9high device to the standard MS-DOS makefiles.

</pre>

<h3><a name="V2.5.2_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- gs_run_string used gs_user_errors (a global) rather than
user_errors (its argument) to control error handling.  (This does not
affect normal operation of Ghostscript, only use as a server.)
	- eexec popped the top element of the dictionary stack
afterwards even if the encrypted code had pushed something onto it.
This caused problems for some badly written PostScript code.
	- The printed form of real numbers didn't always include a
decimal point, causing compatibility problems.

Makes -s and -d work for device properties.

Increases the cache limit on large-memory systems.

Adds a check to ensure that the revision of gs_init.ps matches that
of the interpreter.

Adds the .knownget operator.

</pre><h3><a name="V2.5.2_Library"></a>Library</h3><pre>
Fixes bugs:
	- The raster computation in clist_render_init, and the
computation of state_size in clist_open, didn't widen an operand to
long, leading to possibly incorrect operation for 24-bit-per-pixel
printers on MS-DOS systems.
	- The flatness was set too large for Type 1 characters,
leading to visible straight edges instead of curves at large sizes.
	- Type 1 fonts that contained out-of-range coordinates would
produce garbled output.  (This was not a problem with the standard
Ghostscript fonts, or with Adobe Type Manager fonts.)
	- gschar0.c wouldn't compile, because it referred to a
non-existing structure member penum-&gt;chr.  (This had no effect on
Ghostscript's operation.)
	- The curve flattener required line segments to be no more
than 8 x the flatness in length, leading to an enormous number of
segments.
	- pathforall would cause an addressing fault if the path
consisted of only a moveto.

Refactors some header files so that std.h is always included before
any system header file that might include sys/types.h.

Adds logic for removing top and bottom blank rows in cached
characters.  (This is the beginning of compression for the cache.)

Changes the arguments of memswab2/4 from char * to byte *, for more
accurate type conformance.

</pre>

<h2><a name="Version2.5.1"></a>Version 2.5.1 (9/11/92)</h2>

<p>This is the usual bug fix re-release.

<h3><a name="V2.5.1_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The makefile rules for compiled fonts had a circular
dependency.
	- `make begin' didn't work properly on all platforms.

Ensures that all batch files end with a newline.  (The absence of the
newline was confusing the GNU diff program.)

Documents the fact that the -dASCIIOUT switch no longer exists.

</pre><h3><a name="V2.5.1_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- pstoppm didn't `bind' its internal procedures.
	- grestoreall would undo the output device selected by
pstoppm.

Changes the utilities for reading and writing Type 1 character
outlines so they can work with stack representations as well as
arrays.

Removes the pfbtogs.ps, phonbook.ps, and showpbm.ps utilities from
the distribution.

Adds a gslj utility to parallel gslp and gsdj.

</pre><h3><a name="V2.5.1_Platforms"></a>Platforms</h3>

<pre>
Adds the DeskJet 500C drivers (cdeskjet/cdj*) to the MS-DOS / Borland
C++, MS-DOS / Watcom C/386, and MS-Windows configurations.

Removes the PCX file driver from the MS Windows executable, because
the static data segment exceeded 64K.

Makes some changes in the Unix System V platform file (gp_sysv.c) and
in time_.h and unixtail.mak to accommodate the 3B1.

</pre><h3><a name="V2.5.1_Fonts"></a>Fonts</h3><pre>
Fixes bugs:
	- The Charter-Italic font was named bchi.pfa rather than
bchri.pfa.
	- The Cyrillic fonts (cyr.gsf, cyri.gsf) were omitted from
the fileset.
	- Ghostscript incorrectly assumed that all Type 1 fonts had a
FontInfo dictionary.
	- .loadfont used false PFBDecode, so a few .PFB fonts would
get errors because the first eexec byte would be whitespace.

Changes font2c and its supporting code so that compiled fonts are
location-independent.

</pre><h3><a name="V2.5.1_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The margins for the H-P printers were still wrong.
	- The H-P drivers accidentally cleared the compression seed
row when switching compression modes.
	- Some of the H-P drivers used the wrong control codes for
skipping blank lines.

Adds user-supported drivers for the AT&amp;T 3B1 console device, and for
the NEC P6+ printer.

Updates the SunView driver with a new version supplied by a(nother)
user.

Changes the X Windows driver so the Ghostscript window doesn't get
input focus.

Changes the common code for the printer drivers so that if it can
allocate a full bitmap but there isn't at least a minimum amount of
memory left afterwards, it switches to banding.

Changes the Windows driver so it handles devices with more than 8
bits per pixel.  (We haven't been able to test this.)

Adds a read-only PageCount device property (for printer devices
only).

Changes all Aladdin-supported drivers to clip drawing requests to the
((0,0), (width,height)) rectangle of device space.

</pre><h3><a name="V2.5.1_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- Closing a NullEncode filter always gave an ioerror.
	- If a single-character name occurred 1 character before the
end of an input buffer, the character would be doubled.
	- The procedures in gs_statd.ps didn't use "bind".
	- Setting the page size didn't work properly with devices
with rotated coordinate systems.
	- If an error occurred, and the error object wasn't the last
element of its procedure, the interpreter would re-execute the error
object after running the error handler.
	- Memory devices didn't get resized if HWSize was changed,
leading to out-of-bounds memory accesses.

Moves revision and revisiondate from gs_init.ps to iinit.c.  Adds a
-v switch that just prints these out.

Arranges things so that if Ghostscript is reading from a pipe (`-'
switch on the command line) and encounters an error, it exits with
status 1 rather than 0.

Changes the interpreter interface so the caller explicitly passes a
pointer for storing an error object.

</pre><h3><a name="V2.5.1_Library"></a>Library</h3><pre>
Fixes bugs:
	- The automatic adjustment of the scaling for variant paper
sizes caused the image to get expanded when it should have been
contracted, and vice versa.
	- The curve flattener insisted that each line segment be no
more than 2 x the flatness in length, leading to an enormous number
of segments even when not necessary for accuracy.
	- flattenpath and strokepath discarded a trailing moveto.
	- strokepath treated "0-width" lines as really having a width
of zero, rather than one pixel.
	- Buffered devices weren't closed and reopened if the amount
of buffer space was changed.
	- stroke used the line cap at the beginning of each subpath
even if the subpath was closed.

Removes the requirement that the clipping rectangle fall in the
non-negative quadrant of device space.  (This was causing problems
for Ghostview, but removing it required adding the extra clipping
step to the drawing routines in the drivers.)

</pre>

<h2><a name="Version2.5"></a>Version 2.5 (8/18/92)</h2>

<p>This version adds Type 1 hinting, CCITTFax encoding and decoding, and
Microsoft Windows support, as well as the usual minor improvements
and bug fixes.

<h3><a name="V2.5_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- GSIMPATH, SLZWD, and SLZWE were omitted from the VMS
makefiles, and GSIM2OUT was not removed.
	- landscap.ps messed up the current path.

Adds new switches:
	-dSAFER disables file writing and directory modification.
	-dESTACKPRINT causes errors to print the execution stack with
== instead of =.
	-sOutputFile=&lt;string&gt; replaces -sOUTPUTFILE (which is still
recognized) for setting the output file or pipe for the default
(printer) device.
	-sPAPERSIZE=&lt;sizename&gt; initializes the paper size.
	-dBufferSpace=&lt;number&gt; sets the buffer size for the default
(printer) device.

For Unix systems, changes the directories in GS_LIB_DEFAULT from
`pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
datadir is normally /usr/local/lib.

Adds a note in the header file to the effect that the X Windows
driver expects to find header files in $(XINCLUDE)/X11, not in
$(XINCLUDE).

Changes -q so it defines QUIET as true instead of null (so it can be
used in the middle of the command line as well as at the beginning).

Renames the history.doc file as NEWS.

</pre>

<h3><a name="V2.5_Utilities"></a>Utilities</h3>

<h3><a name="V2.5_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- The stack size was not getting increased on the Watcom
platform.

Removes "b" from the scratch file opening modes in gp_unix.c and
(conditionally) in gdevprn.c, to pacify the DECstation Ultrix system.

Adds a makefile (bcwin.mak) and a platform file (gp_mswin.c) for
Microsoft Windows.

On MS-DOS platforms (including Windows), uses the TEMP environment
variable to designate the directory for scratch files.

Changes std.h so that the VMS C compiler uses function prototypes and
'const'.

Changes the VMS cc makefile so it doesn't use ansi2knr.

</pre><h3><a name="V2.5_Fonts"></a>Fonts</h3><pre>
Fixes bugs:
	- findfont left an extra entry on the stack if it couldn't
find the default font.

Renames bchi, ncri, and puti as bchri, ncrri, and putri, to conform
with the naming scheme for other fonts.

Adds $(CCFLAGS) to the command line used for compiling fonts.

Converts the .pfa fonts (CharterBT, IBM Courier, and Utopia) to .gsf,
by removing eexec encryption and also removing some mysterious
unmapped characters from Courier.  This makes these fonts work with
DISKFONTS.

Changes the implementation of compiled fonts so they are read-only
and sharable (no external references).  (They are, however, not
position-independent.)

Provides a way to use compiled fonts on platforms that limit the
number of characters in an identifier.

Adds public-domain Cyrillic and Cyrillic-Italic fonts.

Adds a 'userdict begin' to .loadfont, because Type 3 fonts produced
by Fontographer expect a writable dictionary on the top of the stack.

Changes definefont for Type 1 fonts to insert UnderlinePosition and
UnderlineThickness entries in FontInfo if they are absent, because
many word processors incorrectly assume these entries are present.

</pre><h3><a name="V2.5_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The documentation in use.doc said that the densities for
9-pin Epson printers were 60x60 to 240x60, rather than 60x72 to
240x72.
	- gdevprn.c smashed one byte beyond the end of the string
given as the OutputFile device property.
	- The X11 driver used XVisualIDFromVisual, which is not
defined in X11R3.
	- The SunView driver modified the input data, which was
declared as const.
	- The LaserJet IIP and III drivers shifted the page 185
pixels to the left and 0.25" down, because the initialization string
was incorrect.
	- The PCX driver wrote 16-bit values using the byte ordering
of the platform, rather than always LSB first.
	- For vertical spacing, the LaserJet and DeskJet drivers used
a command that spaces N/300", rather than N scan lines, but gave it a
parameter in scan lines.
	- The VESA driver didn't allocate a full 256-byte buffer for
reading the mode information from the BIOS, causing the stack to get
smashed by newer VESA implementations.
	- The VESA driver didn't use the scan line length returned by
the BIOS, causing garbage output for some cards and some resolutions.
	- The generic printer driver didn't free the bitmap when
closing the device, if it fit entirely in memory.
	- The PaintJet driver allocated its data areas on the stack
instead of with gs_malloc.
	- The generic printer driver didn't attempt to increase the
buffer size if it was too small.
	- The band list driver didn't split large bitmaps properly,
leading to garbled characters at high resolutions.
	- The GIF and PCX drivers used a color map that often turned
gray colors into non-grays.

Changes the default put_props procedure so that if the device is
open, setting HWSize and/or HWResolution closes the device and
reopens it.

Adds a driver for Microsoft Windows 3.n.

Updates the 'cdj' and 'dj500c' DeskJet 500C drivers with new versions.
(This are user-contributed drivers.)

Changes gdev_prn_put_props so OutputFile can be changed dynamically.

Updates the DEC LN03 driver to also handle the LA50 and LA75.  (This
is a user-contributed driver with a FSF copyright.)

Changes the LaserJet/DeskJet driver so that -DA4 in the makefile
makes A4 paper the default.  The driver now also sends an appropriate
page size selection command to the printer if the printer supports it.

Changes all the Aladdin-supported drivers to return appropriate error
codes rather than -1.

Adds a driver for the S3 86C911, a PC graphics accelerator used in
the popular Diamond Stealth board.  This is the first driver that
uploads character bitmaps to a device; others will probably follow.

Adds user-supplied code to the Epson driver so it will do triple
passes on 9-pin printers for higher resolution.

Adds user-supplied code for the PaintJet XL to the PaintJet driver.

</pre><h3><a name="V2.5_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- zdps1.c didn't include alloc.h.
	- On 32-bit systems, if maxlength of a dictionary was less
than the actual allocated space, length could become larger than
maxlength.
	- flushfile didn't actually flush data when reading.
	- The ASCII85Decode filter signalled EOF prematurely.
	- The scanner interpreted .3D.glorp as the number 0.3, rather
than as a name.
	- Closing a file freed the stream structure, creating
dangling references if there were other file objects pointing to the
same stream.
	- eexec called handleerror if an error occurred, instead of
letting the error propagate to an enclosing stopped.
	- gs.h made perror illegal, instead of defining it in terms
of strerror.
	- One-character names weren't being allocated at
initialization, so they could be left dangling after a restore.
	- Internal gsaves (i.e., the ones in show and setcachedevice)
didn't also save istate, so setfont inside a BuildChar procedure
might cause the font outside to get changed.
	- The allocator incorrectly freed objects in the current
chunk that were older than the current save.
	- mark was just an object, rather than an operator, so 'bind'
didn't bind it.  (This is theoretically a problem for null, true, and
false also, but even more unlikely to be a problem in practice.)
	- packed_get didn't cast packed integers to int, so negative
integer elements of packed arrays came out wrong.
	- quit just did a gs_exit, instead of returning to the driver
in an orderly way.
	- Because check_type_access checked for errors in the wrong
order, sometimes type errors were reported as access errors.
	- eq didn't check for stack underflow.
	- Some of the stream_procs structures weren't properly
declared const, leading to link errors on VMS.

Implements currentcolor, currentcolorspace, setcolor, and
setcolorspace (for DeviceGray, DeviceRGB, and DeviceCMYK only).

Implements the dictionary form of image and imagemask.  All the pairs
in the Decode array must be the same; Interpolate is ignored.  The
only supported color spaces are DeviceGray, DeviceRGB, and
DeviceCMYK.

Implements files as allowable sources for the image operators.

Removes the index field from the name structure, moving it to the
'size' field of name refs.

Changes the unread/sungetc operation to require that the character be
the same as the last one read from the file.

Adds fflush calls to some debugging printout routines, because Unix
sometimes buffers terminal output.

Implements the CCITTFaxEncode and CCITTFaxDecode filters.  Implements
the general case of the SubFileDecode filter.

Changes definefont to treat a UniqueID of 0 as equivalent to no
UniqueID, because Fontographer output apparently often violates the
specification in this way.

Changes the default printer screen from 32.5 to 46 cells/inch.  (The
old value was appropriate for a hand-rotated cell with two spots in
it.)

Changes the utility routines to allow an integral real wherever an
integer parameter is expected in a dictionary, because Fontographer
produces fonts that violate the Adobe specification in this way.

Adds a `dosio' feature that provides direct access to memory and to
I/O ports under MS-DOS.  (This feature is not included in the
standard executables, of course.)

Changes the default character cache limit to a 1/4" x 1/4" character
at the default resolution, rather than basing it on the preallocated
cache size.

Removes support for t_color objects, which haven't actually been used
for several releases.

Implements setcmykcolor and currentcmykcolor as operators, so they
will interact properly with setcolorspace and currentcolorspace.

Changes the name of the file.h header file to files.h, to work around
a bug in the VMS header library.

Adds command line switches @file (to treat file as more command line,
to get around the DOS 128-character command line limit) and -ffile
(so one can specify file names that begin with - or @).

Changes the PFBDecode filter so it takes an additional boolean that
says whether or not to convert binary packets to hex.  (Conversion to
hex and back to binary accounted for a substantial amount of the time
required to load .PFB fonts.)

Splits off `copydevice' as a separate operator again.

</pre><h3><a name="V2.5_Library"></a>Library</h3><pre>
Fixes bugs:
	- In the VMS environment, string_.h used its own prototypes
for the str... and mem... functions instead of &lt;string.h&gt;
	- gx_alloc_char_bits declared cdsize as long, but didn't
shorten it when passing it to shorten_cached_char.
	- Stroking didn't suppress fattening of the lines.
	- kshow didn't update the cached CTM information in the show
enumerator when returning from the callout, so further characters
could get drawn in the wrong place.
	- When a memory device returned its initial matrix, it
smashed the padding fields, which contained the interpreter's type
information.
	- setcachedevice didn't set the initial matrix in the cache
memory device.
	- image_set_rgb (in the image operators) didn't do a
gx_color_from_rgb, so in principle one could sometimes get incorrect
colors in an image.
	- The decision about whether or not to cache a character
bitmap incorrectly compared the character size against cmax rather
than cdata_size.
	- show didn't reset the in_cachedevice flag in the graphics
state, so characters rendered by a recursive show were never cached.
	- clip and eoclip didn't release the intermediate flattened
clip path, causing memory to be lost.
	- The tile_diff routine didn't handle the case of two
identical tiles properly; this produced garbage in the band list
file.
	- stringwidth didn't round the character origin to an
integral pixel; this interacted badly with hinting, causing
improperly hinted characters to wind up in the cache.
	- Bitmaps (including characters) were displaced, as well as
being clipped, if they intersected the top of a clipping region.
	- In gxclist and gdevmem1, the raster computation (although
not the result) could overflow an int on 16-bit machines.

Implements decoding (sample mapping) for image and imagemask.

Implements hinting for Type 1 fonts, based on (but not copying) the
algorithms from the X11R5 tape.

Changes curve rasterizing to use sampling, rather than recursive
subdivision, for characters.  This produces noticeably better output.
Speed penalty for non-cached characters is less than 10% at display
resolutions, up to 50% for 300 dpi printers.

Implements gs_setcmykcolor and gs_currentcmykcolor.  These are
semi-fake, since they simply convert the color to and from RGB, but
the former does set the current color space properly.

Changes clipping regions so they use the any-part-of-pixel rule
rather than the center-of-pixel rule.  This helps avoid dropouts when
using very small regions.

Implements stroke adjustment.

</pre>

<hr>

<h2><a name="Version2.4.2"></a>Version 2.4.2 (5/8/92)</h2>

<p>
This is another quick release.  It finally fixes rotated halftone
screens, and cleans up a few minor problems from 2.4.1.

<p>
This release is being distributed only to beta testers and commercial
licensees, since I don't want to be distracted from working on 2.5.

<h3><a name="V2.4.2_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- UTRACE still appeared in the VMS makefiles.
	- The support files (*.bat, *.doc, *.gsf, *.ps, Fontmap,
COPYING, README) weren't included in the MS-DOS tar file.
	- The Unix install script didn't install landscap.ps.

Replaces the type1imagepath operator with PostScript code (impath.ps,
type1ops.ps) based on the new .imagepath operator.

Renames LICENSE as COPYING.

</pre><h3><a name="V2.4.2_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- pcharstr.ps had an occurrence of Subrs rather than /Subrs,
causing it to not print the Subrs, or to get an error if there were
none.
	- font2c.ps didn't get the const declarations for string
dictionaries quite right.
	- The missing newline at the end of gsbj.bat confused GNU
diff.
	- ansi2knr would go into an infinite loop if a statement
exceeded its internal buffer size.
	- Compiled fonts would get processed by ansi2knr, which
messed them up.

</pre><h3><a name="V2.4.2_Platforms"></a>Platforms</h3><pre>
Fixes bugs:
	- Ghostscript didn't supply equivalents for rename and
gettimeofday, which some System V platforms lack.
	- The missing newline at the end of gp_dosfb.c confused GNU
diff.

Changes the Borland makefiles so that stack checking is only enabled
if DEBUG or TDEBUG is set.

</pre><h3><a name="V2.4.2_Fonts"></a>Fonts</h3>

<pre>
Changes the names of the Utopia fonts from utrg/utb/utbi/uti to
putr/putb/putbi/puti, for consistency with the rest of the font names.
Changes cour/courb/courbi/couri to ncrr/ncrb/ncrbi/ncri likewise.

Replaces the Charter fonts with the CharterBT fonts donated by
Bitstream to the X11R5 distribution.

Adds font aliasing capability to Fontmap.  Replaces
Courier-[Bold]Oblique and ZapfChancery-MediumItalic by aliases.

Changes the FontBBox of the Hershey fonts to be an executable, rather
than a literal, array.

</pre><h3><a name="V2.4.2_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The GIF driver omitted a `private' on the definition of
gif_print_page.
	- The GIF driver wrote 16-bit values using the byte ordering
of the platform, rather than always LSB first.
	- George Cameron's DeskJet 500C driver had an incorrect
control sequence for skipping blank lines.

Adds 'const' in many places, including the tile and bitmap arguments
of the tile_rectangle, copy_mono, and copy_color driver routines.
THIS IS A DRIVER INTERFACE CHANGE.  (Printer drivers are not
affected, since they don't implement these routines.)

Adds a driver for the Trident TVGA.

</pre><h3><a name="V2.4.2_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- alloc_free sometimes incorrectly chose to put an unaligned
block in an old segment on a freelist.
	- The default undercolor removal function returned its
argument rather than returning 0.

Adds NullEncode and SubFileDecode to the standard filters, since
bdftops uses the latter.

Adds RunLengthEncode and RunLengthDecode to the optional filters.

Removes the type1imagepath operator.  (It is still available as
PostScript code, impath.ps.)  Replaces it with a simpler outline
tracing operator .imagepath.

Adds 'const' in many places.

Makes fileposition (but not setfileposition) legal for NullEncode
filters.

Changes the default transfer function for high-resolution devices
from the identity function to the square root function.

Moves array_get from zgeneric.c to iutil.c.

Changes uses of fopen to add a "b" to the access mode, rather than
relying on the _fmode global variable on MS-DOS platforms.

Allows use of the -Z switch even when gsmain.c wasn't compiled with
-DDEBUG, since other modules might have been.

Reorganizes gs.c and gsmain.c so that the latter can be used in
server environments.

Replaces all uses of stdin/out/err with gs_stdin/out/err.

Makes the number of permanent entries on the dictionary stack a
parameter, to allow inserting globaldict in the future.

Changes BlueShift in the Type 1 font Private dictionary to allow real
numbers.  (This differs from the Adobe specification, but at least
one commercial font has a real number for BlueShift.)

</pre><h3><a name="V2.4.2_Library"></a>Library</h3><pre>
Fixes bugs:
	- The doubling check in init_ht (gxht.c) still sometimes
thought there was enough room to double the tile when there actually
wasn't.
	- Rotated halftone screens didn't work.
	- gxarith.h used #ifdef vax, rather than #if
!arch_floats_are_IEEE, to test whether IEEE floats were being used.
	- pathforall didn't report a trailing moveto.

Replaces gs_type1imagepath with gs_imagepath.

Allows sOUTPUTFILE=-, meaning output to stdout.

Adds 'const' in many places.

Replaces all uses of stdin/out/err with gs_stdin/out/err.

</pre>

<h2><a name="Version2.4.1"></a>Version 2.4.1 (4/21/92)</h2>

<p>This is a quick release to fix minor problems discovered in 2.4, and
to add a few improvements that didn't quite make it into 2.4.  It
also adds GIF and PCX file support.

<h3><a name="V2.4.1_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- Some makefile dependencies, and the ccgs script, caused trouble
for parallel versions of `make'.
	- Compiling genarch with -O with gcc on the RS/6000 produced a
buggy executable.

Fixes some minor problems in make.doc.

Adds DEVICE_DEVS2..5 to handle long device lists.

Removes the need to set GS_RUN_EXE when using the Watcom compiler on
MS-DOS systems.

Gets rid of gs_ccfnt.ps, merging its function into gs_fonts.ps.

Gets rid of gconfig.ps; this information is now compiled in gconfig.c.

</pre><h3><a name="V2.4.1_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- The palette for pstoppm in 8-bit mode didn't contain all 8
primary colors.
	- font2c used just values_ to mean &amp;values_[0]; some compilers
couldn't handle this.

Makes font2c insert `const' in many appropriate places.

</pre><h3><a name="V2.4.1_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The SunView driver had not been updated properly for 2.4 and was
pretty thoroughly broken.
	- None of the printer drivers worked properly with the Watcom
compiler, because stdprn was doing \n -&gt; \r\n substitution.
	- If the generic printer driver couldn't allocate the requested
size command list buffer, it gave up rather than trying to allocate a
smaller buffer.
	- The SuperVGA drivers (except for the VESA driver) didn't
work with the Watcom compiler, because a couple of places in the
drivers weren't truncating the offset of "segmented" pointers
properly.
	- Some of the H-P used &lt;esc&gt;*b#Y rather than &lt;esc&gt;*p+#Y for
vertical positioning; this apparently is wrong, at least for the
LJIIp.

Removes the dependence of the X Windows driver on Xt, Xext, and Xmu.  As a
result, Ghostscript will not install a standard colormap itself, but it
will use one if one is already installed.

Adds a set of drivers for Portable Bitmap, Graymap, and Pixmap file
formats.

Adds drivers for monochrome, EGA/VGA-style, and SuperVGA-style PCX
file formats.

Adds drivers for monochrome and 256-color GIF file formats.

</pre><h3><a name="V2.4.1_Fonts"></a>Fonts</h3><pre>
Adds ZapfChancery-MediumItalic as a copy of ZapfChancery-Oblique.

</pre><h3><a name="V2.4.1_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- A value with l_new set could 'escape' to save level 0 on a
stack; if stored, it prevented the slot from being saved and restored
properly.
	- 16#7fffffff + 1 gave the floating point equivalent of -2^31, not
2^31.
	- The PFBDecode filter computed the packet length incorrectly if
the 0x8000-bit of the length was set.
	- 5-byte numbers in Type 1 CharStrings complained of a rangecheck
if they exceeded 16 bits, rather than if they exceeded the integer part of
a fixed.
	- (, ), and \ appearing in file name arguments in the command
line did not work properly.

Adds 'const' in many places.

Changes the random number generator to be the same as the one used in
Level 2 PostScript (as reported by Ed Taft on comp.lang.postscript).

Exits with code 1 rather than code 0 on an unrecoverable error detected at
the PostScript level.

Makes dictionaries expand automatically when they fill up.

Adds gp_exit to complement gp_init.

Changes dictionaries to always allocate a power of 2 entries on
32-bit machines.  Changes the name table to allocate indices
scattered, so dictionary lookup doesn't have to do a multiply to
scramble the index.

Changes the handling of currentfile to do "shallow binding" so stack
searching is almost never required.

</pre><h3><a name="V2.4.1_Library"></a>Library</h3><pre>
Fixes bugs:
	- arc and arcn got a numeric exception if the radius was zero.
	- The undocumented 15 opcode in Type 1 fonts wasn't ignored.
	- PaintType 3 wasn't allowed.  (It isn't clear what it should
mean; we treat it as equivalent to 0.)
	- The VAX/VMS C compiler was generating incorrect code for the
chi_bits and cmask macros in gdevmem, producing incorrect output.
	- If the result of the slow algorithm for intersecting clipping
paths was a rectangle, the wrong thing happened (cbox didn't get set).
	- gx_path_is_rectangle didn't recognize open rectangles.
	- clist_change_tile didn't check properly whether the tile
size had changed, so changing the screen could produce invalid band
files.
	- The image operators did the wrong thing in the 1-for-1
case, interleaving N bytes of data with 7*N bytes of garbage.
	- stroke sometimes handled bevel and miter joins wrong in
reflected coordinate systems.
	- init_ht checked incorrectly whether there was enough room
to Y-replicate tiles, so sometimes it did it when it shouldn't have.
	- stroke sometimes thought lines were thin when they weren't.

Adds 'const' in many places.

Adds support for 2- and 4-bit-per-pixel memory devices.

</pre>

<h2><a name="Version2.4"></a>Version 2.4 (3/25/92)</h2>

<p>This is a major release that adds SuperVGA support, support for
Metrics,
settable device properties, and incremental font loading.  It also
includes important performance improvements, based on rewrites of some key
algorithms, and quite a few new Level 2 / Display PostScript facilities.

<h3><a name="V2.4_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The rule for compiling gconfig.c didn't include the -I switches.
	- .bat files were being distributed with a \n line terminator
rather than \r\n.
	- A CLOSE MODULE_LIST was needed after END_COMPILE: in the VMS
command files.
	- Unix systems couldn't handle multiple drivers with overlapping
sets of files.
	- -s&lt;name&gt; defined &lt;name&gt; as a null, rather than as an empty string.

Adds gconfig.ps to the list of needed configuration files.

Changes the way that the makefile handles nested .h files, so that it
doesn't have to `touch' them.

Adds the loadallfonts procedure to gs_fonts.ps.

Changes the standard DOS configuration to include VGA, EGA, VESA, Epson,
BubbleJet, and H-P printer drivers.

Renames ghost.mak as gs.mak, and gdevs.mak as devs.mak.

Adds a USE_ASM flag so that one can build a DOS version of Ghostscript
without having an assembler.

Splits off common code from the two MS-DOS makefiles into tccommon.mak.

Replaces the COPYING and LICENSE files with a new LICENSE file containing
version 2 of the GNU General Public License.

Removes DEVICES and DEVICE_OBJS from the makefiles, since they are no
longer needed.

Adds a GS_DEVICE environment variable to supply a default device name if
desired.

Adds ansihead.mak and unix-ansi.mak, to parallel [g]cc-head.mak and
unix-[g]cc.mak, for other ANSI C compilers.

Changes the way that optional features are defined in the makefiles, so
that they actually work.

Adds support for the Watcom C/386 compiler.

Allows # in the command line as equivalent to =, to compensate for
brain-damaged MS-DOS shell.

Adds -sOUTPUTFILE= to set the output file or pipe.

Adds -dWRITESYSTEMDICT to leave systemdict writable.

</pre><h3><a name="V2.4_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- pcharstr.ps insisted on having Subrs be present in the font.
	- pcharstr.ps decoded negative numbers between -108 and -1131
incorrectly.
	- pfbtogs.ps didn't handle packets longer than 64K correctly.

Changes the bdftops utility so that it makes entries for UnderlinePosition
and UnderlineThickness in FontInfo, and so that it always records a
FullName (the FontName if no other is provided).

Changes the name of the pfbtops utility to pfbtogs, because groff already
includes a program called pfbtops.

Adds the gslp utility for doing "line printing" of text files, similar to
enscript + lpr.

Adds a new variable DITHERPPI that enables a different dither pattern,
claimed to be better for printers.

Adds the font2c utility for compiling Type 1 fonts into C, so they can be
linked into an executable rather than loaded dynamically.

</pre><h3><a name="V2.4_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- gdev_prn_copy_scan_lines was erroneously masking the last byte
of data even on color printers, as was paintjet_print_page.
	- The TruFax driver had a couple of compilation errors, since it
hadn't been compiled in a while.
	- The BGI driver sometimes didn't consult BGIPATH when looking for
.BGI files.
	- initclip did the wrong thing with memory devices.
	- The BGI driver didn't look in BGIDIR for .BGI files.
	- The Epson driver didn't set the right margin properly with
ESC+Q.
	- The BJ-10e driver was badly broken.
	- gdev_prn_open/close_printer didn't reset the command list file,
so it was taking quadratic time to print multi-page documents.

Adds color to the SunView driver.

Adds selectable resolution (75, 100, 150, or 300 DPI) to the
DeskJet/LaserJet driver.

Changes gssetdev so that drivers can specify special libraries to be
loaded, as well as object files.

Adds a driver for VESA-compliant SuperVGA displays.  This driver handles
all resolutions from 640 x 400 up to 1280 x 1024, in 256-color mode.  The
default is VGA resolution (640 x 480).

Adds a driver for the ATI Wonder SuperVGA card, and for SuperVGA cards
using the Tseng Labs ET3000 or ET4000 chip such as the STB VGA EM-16 and
the Orchid ProDesigner II (256-color modes only).

Adds a driver for Trident and Tseng Labs SuperVGA cards in 800 x 600,
16-color modes (for cards with only 256K of memory).

Adds user-contributed drivers for the Ricoh 4081, DEC LN03, Canon LBP-8II,
and H-P DeskJet 500C printers.

Adds Tim Theisen's Ghostview changes to the X11 driver.

MAKES NON-BACKWARD-COMPATIBLE CHANGES TO THE DRIVER PROCEDURE INTERFACE as
follows:

	- Changes map_rgb_color and map_color_rgb to always work in a
	    16-bit color value space, rather than a space defined by the
	    maximum number of distinct colors provided by the device.

	- Adds an argument to the output_page procedure to indicate
	    whether the procedure is being called for copypage or
	    showpage, and a num_copies argument.

	- Adds a gx_bitmap_id to the copy_ and tile_ procedures, so that
	    drivers can cache bitmaps in the server or device if they want
	    to.

	- Removes fill_trapezoid and tile_trapezoid.

	- Adds a new get_bits procedure for reading the bits back from the
	    driver buffer (when possible), replacing copy_scan_lines.
	    This procedure takes a new argument describing padding and
	    byte swapping, and returns a different value from
	    copy_scan_lines.

	- Adds get_props and put_props procedures for accessing arbitrary
	    additional properties of devices.  The interface is quite
	    complex, but provides a great deal of flexibility.

See drivers.doc for details.

Changes gdev_mem_bytes_per_scan_line to gdev_prn_bytes_per_scan_line.

Adds a user-contributed driver for DigiBoard, Inc.'s fax software.

</pre><h3><a name="V2.4_Fonts"></a>Fonts</h3>

<pre>
Changes Type1BuildChar so it uses the information from the Metrics
dictionary in the font, if Metrics is present.

Changes findfont (.loadfont) so it recognizes .PFB fonts and can load them
directly.  Also changes .loadfont to disable packing temporarily, because
some fonts rely on procedures being writable (!).

</pre><h3><a name="V2.4_Interpreter"></a>Interpreter</h3><pre>
Fixes bugs:
	- The hypot function is not available on some Unix systems.
	- Ghostscript didn't flush and close files when exiting.
	- In statusdict, the /margins procedure used .leftmargin, but
/setmargins used .lmargin.
	- An out-of-range putinterval would simply do nothing, rather than
reporting an error.
	- If an attempt to allocate a block larger than the allocator's
chunk size (20K) failed, the allocator would erroneously think it had
succeeded.
	- The bind operator made the top-level procedure read-only, as
well as interior procedures.
	- gs.c copied 1 extra character for the value of strings defined
on the command line with -s...=, which could smash the first byte of the
next object in memory.
	- copying a dictionary erroneously required the maxlength of the
destination to be greater than or equal to the maxlength of the source,
rather than the length of the source.
	- undef didn't correctly decide when to mark a deleted entry as
deleted vs. free; as a result, some keys couldn't be looked up properly
after an undef.
	- type1encrypt and type1decrypt didn't set the size of the result
properly.
	- cvi and cvr didn't allow leading or trailing whitespace in
strings.
	- cvs didn't cause an error if the destination string was too
short.
	- Many operators didn't check correctly for stack underflow (off
by 1).
	- `for' used reals, rather than integers, if the limit was a real,
even if the initial value and increment were integers.
	- `restore' didn't properly invalidate copies of the save object
being restored from; `save dup restore restore' would crash.
	- `restore' sometimes didn't undo stores into matrices that were
stored into by operators.  (The identity matrix always had l_new set.)
	- readline gave a rangecheck if the input line exactly filled the
string.
	- `--' as the last switch on the command line caused a crash
rather than an error message.
	- On MS-DOS systems, filenameforall didn't handle patterns with a
drive or directory specifier properly.
	- stroke sometimes called gz_draw_line_fixed even if the line went
outside the clipping box by 1 pixel.

Changes the loop that binds procedure "operators" to entirely disable the
handling of the typecheck error, rather than to use stopped.  This cuts
initialization time significantly, and also eliminates about 35K of wasted
space (for saving the stacks).

Changes the version "operator" so it returns 47.0.  Adds "revision" to
define the Ghostscript version # x 100.

Adds gscurrentresolution and gssetresolution procedures for getting and
setting the device resolution.

Adds -r&lt;res&gt; and -r&lt;xres&gt;x&lt;yres&gt; as command line options for setting
device resolution.

Adds a facility for incrementally loading the individual CharStrings of a
Ghostscript font from the disk.  This can save a lot of memory, at the
expense of slower rendering.  (It is intended primarily for MS-DOS
systems.)

Changes findlibfile to return the name of the file that was actually
opened, as well as the file itself, when the operation succeeds.

Changes the name of the main entry to the interpreter from interpret to
gs_interpret, because of a conflict with a Data General library procedure.

Adds the .setmetrics operator to set the metrics for the current
character for Type 1 fonts.

Adds more LaserWriter-specific entries to statusdict.

Gives names to all the internal `operators', so they will print out
reasonably when an error occurs.

Extends the status operator to accept a string and return file
information, as defined for Level 2 PostScript.

Adds the filter operator and some specific filters: ASCII85Encode,
ASCII85Decode, ASCIIHexEncode, ASCIIHexDecode, eexecDecode, NullEncode,
PFBDecode, and the null case of SubFileDecode.

Extends the scanner to recognize the Level 2 &lt;&lt; and &gt;&gt; tokens.

Adds a facility for extracting the text strings from a PostScript file and
writing them out in a simple format (selected by -dASCIIOUT, implemented
by gs_2asc.ps).

Implements all of the remaining Display PostScript facilities that are
also in Level 2 (i.e., everything in section A.1.3 of the PostScript
Language Reference Manual, Second Edition, that is not also in section
A.1.2).  The virtual memory operations are all stubs; the new halftone
options are not fully implemented.

Changes makeimagedevice to use a string of gray or RGB values, rather than
an array of color objects, to specify the palette.  Removes
currentgscolor and setgscolor from the interpreter, but leaves t_color
objects in, since they may be useful later.

Adds getdeviceprops and putdeviceprops for manipulating device properties.
Currently defined properties for all devices: InitialMatrix, HWResolution,
HWSize, Name.  Currently defined properties for printers: BufferSpace,
MaxBitmap, OutputFile.  OutputFile allows |command for piping on Unix
systems.

Removes deviceparams and makedevice.  Adds devicedefaultmatrix.

Implements reversepath.

Makes copy work on devices.

MS-DOS specific
- - - - - - - -

Fixes bugs:
	- iutilasm.asm wouldn't assemble with newer versions of MASM if
CPU_TYPE was set to 286 or above.
	- CPU_TYPE=386 didn't properly substitute the faster
multiply/divide routines under Turbo C++ or Borland C++, only under the
original Turbo C.

</pre><h3><a name="V2.4_Library"></a>Library</h3><pre>
Fixes bugs:
	- A curve whose first and last points were the same wouldn't get
drawn at all.
	- A bug in the Turbo C++ compiler generated bad code when shifting
a long right by 1 bit.
	- If stroking a dashed line ever encountered a segment that was
completely blank, Ghostscript would indirect through a null pointer.
	- arc and arcn gave an error if the radius was negative.
	- stroke always used the general algorithm, even if the line was
guaranteed to be thin.
	- arc and arcn erroneously reduced the angles mod 360.
	- Very large or negative 32-bit numbers in Type 1 fonts didn't
work properly on MS-DOS systems (the ff0000 bits got set to zero).
	- Color printer devices rendering entirely in memory only
allocated a monochrome-sized bitmap.
	- clip and eoclip didn't intersect the paths properly in the
general case.
	- charpath erroneously rounded the current point to an integral
value, causing characters to be spaced improperly.
	- The definition of max_color_param got some compilers confused.
	- charpath always used quadratic time and space, and dropped all
but the last character when used with a Type 3 font.
	- Stroking a path with a 180 degree angle would incorrectly miter
instead of beveling.
	- Type 1 fonts used the current flatness for curves, which could
produce bad (and inconsistent) results.
	- Stroking a degenerate line segment produced incorrect results.

Changes the character cache to use the UniqueID as the key, when
available, instead of the font pointer.  This dramatically improves
performance when fonts are getting removed and reloaded because of page
isolation with save/restore.

Removes some unnecessary casts to (float) from gsmatrix.c and gscoord.c.

Changes the Type 1 interpreter so that it rounds line and curve endpoints
to the center of the nearest half-pixel, and omits null line segments.
This both speeds up rendering at small sizes and improves output quality.

Changes gs_deviceparams to return resolution as well as extent; changes
gs_makedevice to accept resolution as well as extent.

Replaces the algorithm for approximating circular arcs with curves with a
more accurate one.

Changes gs_point and gs_rect to use doubles rather than floats.

Adds gs_setmetrics, for overriding Type 1 font metrics for the current
character.

Changes clipping to use lists of rectangles rather than path intersection.
 This makes a big difference when clipping bitmaps (including characters).

Changes the character cache to discard entries incrementally, rather than
clearing the entire cache when it fills up.

Changes the implementation of transfer functions to use a cached map,
built when the transfer function is set.  This makes transfer functions
work properly in all situations, including images.

Defines a .quit operator that takes an exit code, and redefines quit in
terms of it.

Adds support for 16-bit-per-pixel devices in gdevmem.

Adds gs_copydevice and gs_deviceinitialmatrix; removes gs_deviceparams and
gs_makedevice.

Changes setscreen to ensure that the cell is always at least 4x4 pixels in
size.

</pre>

<h2><a name="Version2.3"></a>Version 2.3 (8/28/91)</h2>

<p>This is a minor release to fix two bugs and add the PaintJet driver,
which
didn't make it into 2.2.

<h3><a name="V2.3_Utilities"></a>Utilities</h3><pre>
Changes the pstoppm utility so it counts pages correctly even in the
presence of arbitrary saves and restores.

</pre><h3><a name="V2.3_Drivers"></a>Drivers</h3><pre>
Adds a new, "supported" PaintJet driver.

Changes the Epson driver to use ESC+D rather than ESC+\ for horizontal
positioning, since many printers don't support the latter.

Adds horizontal double-density (two-pass) printing to the Epson driver, so
it can do 240 x 60 and 360 x 180 densities.  (Vertical double density is
not supported yet.)

</pre>

<hr>

<h2><a name="Version2.2"></a>Version 2.2 (6/1/91)</h2>

<p>
The purpose of this release is to add save/restore, and a few
miscellaneous Level 2 P*stScr*pt features such as undef.  It also includes
major improvements in graphics quality and in handling of high-resolution
printers.

<h3><a name="V2.2_Procedures"></a>Procedures</h3><pre>
Changes the version numbering to M.mpp rather than M.m.p, so that
`version' can be a real number for those programs that insist on it.

Renames ghost.ps as gs_init.ps, gfonts.ps as gs_fonts.ps, and statusd.ps
as gs_statd.ps.  The initialization files now all are named gs_*.ps.

Renames gdevs.{c,h,tl} as gconfig.{c,h,tl}.

Changes the relevant makefiles and command files so that a single build
can contain several drivers that share code, e.g., the Epson driver and
the DeskJet driver.

Changes gs_init.ps so it relies on an external gconfig.ps file rather than
making a specific test for the presence of Level 2 features.

Adds an entry for uglyr.gsf to the makefile.

Removes the distinction between CCA and CCNA, since most of the files now
contain constructs that require non-ANSI compilation on MS-DOS platforms.

Adds a `man' page for the ansi2knr utility.

Changes the documentation (use.doc) to show how to use -sDEVICE=&lt;device&gt;,
or the selectdevice procedure, to select devices by name.

Adds DEVICE_DEVS to the makefiles (analogous to DEVICES and DEVICE_OBJS).
This finally makes the make procedure fully automatic.

Adds the name of the initialization file (gs_init.ps) as a
platform-specific makefile parameter, GS_INIT.

Removes the test program gt.{c,tr} from the fileset, since it is not
useful to users.

Moves the Symbol encoding vector to a separate file (symbol_e.ps), from
which it is loaded when first used.

Changes the error handler so it can handle errors that occur while reading
the initialization files.

Extends ansi2knr so it can handle `void' and `...' in parameter lists.

Adds quit.ps to the set of installed files.

MS-DOS-specific changes
- - - - - - - - - - - -

Adds the VGA and BGI drivers to the standard MS-DOS configuration, and
makes VGA the default.

Adds a `+' and a newline at the end of gs.tr, to avoid problems with file
transfer programs or editors that add a newline at the end of files.

Changes the name of msdos.mak to turboc.mak, and creates a new tbcplus.mak
makefile for use with Turbo C++ and Borland C++.

Changes the extension of the loader response files from .tl to .tr.

Changes the default search path from c:/ghost and c:/ghost/fonts to c:/gs
and c:/gs/fonts.

Changes the directory separator from `|' back to ';', since it appears
that DOS can handle a ; in a command line if it is prefixed with \.

Unix-specific changes
- - - - - - - - - - -

Changes the uses of install in unixtail.mak so they only install a single
file at a time, which is all that the standard Unix install allows.

Removes the duplicate files (README/readme, LICENSE/license,
COPYING/copying, Fontmap/fontmap).

Changes the ld flags from LDPLAT to LDFLAGS.

Adds XCFLAGS and XLDFLAGS.  These are concatenated with CFLAGS and LDFLAGS
respectively.  The intention is that they be set from the `make' command
line if desired.

VMS-specific changes
- - - - - - - - - -

Repairs the omission of ZPACKED from the VMS build lists.

</pre>

<h3><a name="V2.2_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The SunView driver produced semi-garbage on little-endian
platforms (Sun-386i) because it didn't swap the bit order.
	- The X driver would dump core if it couldn't open the display and
the DISPLAY environment variable wasn't set.
	- The X driver relied on white = 0, black = ones in a couple of
places;
	- The X driver would return an error, instead of clipping, if
asked to display outside the window.
	- The X driver would create inappropriately sized windows, because
it believed the server's report of the screen resolution.

Adds Fran Taylor's Private Eye driver to gdevs.mak and the fileset (not
supported by Aladdin Enterprises).

Adds Neil Ostroff's TruFax driver to gdevs.mak and the fileset (not
supported by Aladdin Enterprises).

Makes the scratch file template for the printer drivers a per-platform
quantity (gp_scratch_file_name_template).  Puts the default scratch files
for Unix in /usr/tmp rather than /tmp.

Changes the SunView driver to prevent the Ghostscript window from being
destroyed (which badly confuses the interpreter).

Extends the Epson driver to handle a variety of print densities in both X
and Y, to handle 24-pin as well as 8-pin graphics, and to allow optional
specification of default density in the makefile (gdevs.mak).

Refactors the printer drivers so that a single driver handles both DeskJet
and LaserJet.  Adds LaserJet drivers that use the new compression modes on
the LJ IId/IIp and LJ III.

Changes all the printer drivers to use band lists rather than bitmap
paging as the buffering method.  (The individual drivers need only a
one-line change to replace mem_copy_scan_lines with
gdev_prn_copy_scan_lines with a different argument.)

Adds the halftone phase as additional arguments to tile_rectangle and
tile_trapezoid.

Adds an entirely new and much simpler PaintJet driver, using the new band
list interface.

Adds margin information to the device structure.  This is currently only
relevant for printer devices.

Adds BGIPATH and BGIUSER environment variables, allowing additional
control of the BGI driver.

Changes the x/y_pixels_per_inch member of the device structure from int to
float.

</pre>

<h3><a name="V2.2_Fonts"></a>Fonts</h3>

<pre>
Patches gs_fonts.ps so definefont will add an isFixedPitch entry to
FontInfo if there isn't one there.

Removes the old "type 7 path" encoding code from gs_fonts.ps.

Changes bdftops so it puts isFixedWidth and ItalicAngle entries in the
FontInfo dictionary of the fonts it creates, since some P*stScr*pt
programs rely on this.

Changes bdftops so it synthesizes as many missing characters as possible
out of the ones that are there (in particular: synthesizes accents out of
punctuation marks, and accented characters using seac.)  The results
aren't all that good, but they're a lot better than having characters
missing out of the font.

</pre><h3><a name="V2.2_Utilities"></a>Utilities</h3><pre>
Adds a pfbtops utility for converting .PFB fonts to standard Ghostscript
fonts.

Fixes bugs:
	- ps2image didn't reset things properly between pages for
multi-page documents.

</pre><h3><a name="V2.2_Interpreter"></a>Interpreter</h3><pre>
Makes Ghostscript recognize `-' alone as meaning that it should read from
standard input as though it were a file.  This allows Ghostscript to
accept a pipe as input.

Fixes bugs:
	- seac in type1addpath used the current font's encoding, not
StandardEncoding.
	- type1decryptfile (eexec) didn't recognize binary (as opposed to
hex) representation.
	- Mentioning a name whose value was a no-access object caused an
invalidaccess error.
	- There was a bogus definition of `run' in zfile.c.
	- The interpreter didn't handle end-of-file on stdin properly.
	- Real numbers with an 'e' or 'E' but no decimal point were not
recognized.
	- On MS-DOS systems, inside strings, \ followed by a newline was
not discarded properly.
	- On MS-DOS systems, the long unsigned divide routine sometimes
gave incorrect answers.  Among other things, this caused alternate-radix
numbers sometimes to crash the interpreter.
	- cvrs didn't do the right thing about reals or negative integers.
	- .echo.mode was being reset with def instead of store, and was
defined in systemdict rather than userdict.
	- setgray and settransfer didn't interact properly.
	- 16#80000000 was being interpreted as a signed integer (and
converted to a real) rather than an unsigned one.
	- atan returned 0 sometimes when it should have returned 180.
	- currentcmykcolor was defined wrong.

Removes the filename operator, since no standard Ghostscript code used it,
and it caused problems with some P*stScr*pt files.

Implements new operators: filenameforall, selectfont (as a procedure),
stringmatch, undef.

Adds new standard procedures: selectdevice.

For MS-DOS, requires that the operand and execution stacks be located in
the data segment, and uses short pointers to address them.  This produces
significantly smaller and faster code.  (These changes are not visible to
users or library clients.)

Changes the assignment of attribute bits, and adds new bits for
save/restore and the garbage collector.  Changes many of the macros in
store.h to support save/restore.  (These changes are not visible to users
or library clients.)  Implements save and restore.

Moves type names from gs_init.ps to ghost.h and ztype.c.

Moves error names from gs_init.ps to errors.h and iinit.c.

Introduces gp.h as a documented interface to the platform-specific files.

Adds the -- switch, which allows Ghostscript programs to take arguments
from the command line.

Changes many uses of the name `name' to something else, to avoid upsetting
the Microsoft C compiler.

Really implements packed arrays -- they took the same amount of space as
ordinary arrays in previous versions.

Changes exitserver in serverdict so that it just clears the stacks.  (This
isn't the correct fix, but it will do as a workaround.)

Makes many miscellaneous small changes to pacify various compilers.

Changes gs_fonts.ps so that when "quiet" mode is selected (-q switch),
Ghostscript doesn't print anything when loading fonts or when substituting
for undefined characters.

Defines the name consisting of just a control-D as a no-op, because some
P*stScr*pt-generating applications put control-Ds in their output.

Implements halftone phase (sethalftonephase and currenthalftonephase
operators).

Removes the -E switch, since it is no longer useful.

Changes the -w and -h switches to a single -g (geometry) switch, with
usage -g&lt;width&gt;x&lt;height&gt;.  Makes the -h switch, and a new -? switch, print
usage help.

Implements correct handling of stack overflow errors (makes an array out
of the contents of the overflowing stack, and resets the stack, before
invoking the error handler).

Adds t_oparray (`operators' defined as procedures) and the makeoperator
operator.  This is so that programs like the Distillery that rely on all
operators being bound by `bind' will work properly.

Adds a new NOPAUSE flag to suppress the prompt and pause at copypage and
showpage.

</pre><h3><a name="V2.2_Library"></a>Library</h3><pre>
Fixes bugs:
	- gs_type1_interpret didn't store the encryption state or the skip
count before returning to let the client handle a seac or an endchar in
the middle of a seac.
	- The definition of the Type 1 operator ce_testadd was based on
wrong information; the operator takes only 2 operands and does something
unknown.
	- mem_true24_copy_mono wasn't incrementing the destination pointer
if the color was transparent, leading to garbled characters.
	- gx_lookup_fm_pair would sometimes look at one entry beyond the
end of the cached font/matrix pair area.  (This probably had no practical
effect.)
	- gs_type1_interpret didn't save the current point when returning
to the client for a callothersubr, causing some characters to be rendered
displaced (such as some of the chess pieces in chess.ps).
	- gs_setgray, gs_sethsbcolor, gs_setrgbcolor, gs_setflat, and
gs_setlinewidth gave errors for out-of-range operands rather than forcing
them into range.
	- Transfer functions were not actually supported.
	- The area fill algorithm failed on certain complex paths.
	- The current point was sometimes defined when a BuildChar
procedure was called.
	- Stroking a degenerate line didn't display anything for round
caps or joins.
	- If the ends of a curve had exactly the same X coordinate, the
curve sometimes wouldn't be displayed.
	- Very thin lines that went outside the clipping region would
sometimes be displayed as dashed, or not at all.
	- The translation in a FontMatrix was ignored.
	- Very wide, shallow lines would color extraneous pixels when
using bevel or miter joins.
	- Dashed lines didn't join properly at the beginning of a closed
path.
	- 0-degree arcs didn't add the appropriate line (possibly
degenerate) to the path.
	- gs_type1_interpret didn't reset the callsubr stack when starting
the base character of a seac, which caused confusion if the accent's
endchar fell inside a Subr.
	- Non-monochrome memory memory devices weren't checking the
arguments of the drawing procedures properly.
	- The initial clipping rectangle for memory devices was being
computed wrong.
	- Null devices had a semi-infinite clipping rectangle instead of
an empty one.
	- gs_setlinewidth was treating negative arguments as zero, instead
of taking the absolute value.
	- imagemask with a dithered color used a solid color rather than
the dithered one.

Tweaks the area fill and image rendering algorithms to be a little more
liberal with paint when being used to render characters.

Changes the name of the 8-bit mapped color memory device from
mem_mapped_color_device to mem_mapped8_color_device.

Changes the memory devices so that on little-endian platforms, they can
store the bytes within a word in either order.  (Little-endian order
allows efficient 32-bit updating, big-endian is required when displaying
or writing to a printer or a file.)

Implements halftone phase.

Replaces the trapezoid fill algorithm with a much more accurate one
inspired by a contribution from Paul Haeberli.  This also changes the
graphics convention back to filling only pixels whose center falls within
the region to be filled.

Changes the character cache to allocate headers and bits contiguously out
of a single ring buffer.

Changes gs_imagemask and gs_imagemask_init to take a thickness adjustment
parameter.

Changes gs_setcachedevice and gs_setcharwidth to take the graphics state
as a parameter.

Renames gx_device_memory_bitmap_size as gdev_mem_bitmap_size,
mem_copy_scan_lines as gdev_mem_copy_scan_lines, and
mem_bytes_per_scan_line as gdev_mem_bytes_per_scan_line.

</pre>

<hr>

<h2><a name="Version2.1.1"></a>Version 2.1.1 (1/15/91)</h2>

<p>This is a sub-release distributed to fix a few early bugs in 2.1,
just in
time for the new GNU master tape.

<h3><a name="V2.1.1_Build_procedures"></a>Build procedures</h3><pre>
Removes all of the (undebugged) Level 2 code from the fileset, as well as
the (unused) file gdevvga.c.

Changes the tar file so that the files are stored in the directory
gs&lt;version&gt; rather than simply gs, e.g., gs211.

</pre><h3><a name="V2.1.1_Interpreter"></a>Interpreter</h3><pre>
Changes the scanner so that \ is recognized within strings regardless of
whether the scanner is reading from a string or from a file.  This is
compatible with newer P*stScr*pt interpreters, and with the newer
P*stSc*pt language specification, but not with the older specification in
the original PostScript Language Reference Manual.

</pre><h3><a name="V2.1.1_Drivers"></a>Drivers</h3><pre>
Fixes the max_value macro in gdevmem.c so that compilers won't complain
about a left shift by 32.

Adds 'byte' to the list of types that gdevx.c must sidestep because header
files use them.

</pre><h3><a name="V2.1.1_Library"></a>Library</h3><pre>
Changes the computation of penum-&gt;unpack in gsimage.c so as not to upset
compilers that don't treat procedures and pointers to procedures as
compatible types for conditional expressions.

</pre>
<h2><a name="Version2.1"></a>Version 2.1 (12/31/90)</h2>

<p>This is primarily a bug fix release to clean up problems in 2.0.  It
also implements a first cut at the new color operators.

<h3><a name="V2.1_Build_procedures"></a>Build procedures</h3><pre>
Changes the separator for multiple directories in MS-DOS from ';' to '|',
since there is no way to include a ';' in a command line.

Adds &lt;dir&gt;/fonts to the default search path, where &lt;dir&gt; is c:/ghost for
MS-DOS systems and `pwd` for Unix systems.

Adds new documentation describing how to direct output to the printer.

Changes the PROCTYPE and USE8087 options in MSDOS.MAK to CPU_TYPE and
FPU_TYPE.  The latter now indicates the type of FPU to generate code for,
if any.

</pre>

<h3><a name="V2.1_Drivers"></a>Drivers</h3>

<pre>
Adds a driver for the Canon BubbleJet BJ10e.

Modifies the EGA driver to handle (non-standard) frame buffers larger than
64K.  Adds drivers for the VGA and for the EIZO MDB-10 (a 1024 x 768 frame
buffer).

Changes the X driver so that it clips to the window dimensions, rather
than reporting an error.

Notes that the H-P LaserJet driver, like the DeskJet driver, works under
Unix as well as MS-DOS.

Adds support for 120 X DPI mode, and for the LQ-1500, to the Epson driver.

</pre><h3><a name="V2.1_Fonts"></a>Fonts</h3><pre>
Fixes bugs in bdftops:
	- It was using /UniqueId instead of /UniqueID as the key for the
font unique ID.  This effectively disabled the font cache.
	- The definition for .notdef was bogus -- an invalid CharString.

Changes ghost.ps and gfonts.ps so that NullFont is the initial font,
rather than Ugly.

Arranges things so that when attempting a font substitution, if the
default font is not found, NullFont is used instead.

Extends bdftops so that if certain easily synthesized characters are
missing from a font, it will attempt to synthesize them using available
characters.

</pre><h3><a name="V2.1_Interpreter"></a>Interpreter</h3><pre>
Extends the -T switch to allow specifying a printf template for the
arguments of the procedure being traced.

Fixes bugs:
	- /0 was interpreted as equivalent to 0 (a number) rather than a
literal name.
	- packedarray was defined as being like array, instead of like
array followed by astore.
	- Many minor and harmless type mismatches (and a couple of very
minor genuine bugs) were upsetting the Apollo C compiler.
	- exp was incorrectly failing in certain cases with a negative
first argument.
	- copyscanlines incorrectly required at least 4 elements on the
operand stack, although it correctly only used the top 3.
	- readhexstring incorrectly read 1 byte even if the string length
was zero.
	- Not every place that expected an array would accept a packed
array.
	- Very complex paths (and infrequently other things) could produce
a 'memory leak'.
	- / alone would skip following whitespace and gather following
characters, rather than creating an empty name.
	- ghost.ps left newerror defined as true in $error, which resulted
in an erroneous error report if a program executed a 'stop'.
	- The definition of exitserver in serverdict didn't clear the
stack.
	- currentfile returned an executable file, rather than a literal
one.
	- setfont for Type 1 fonts didn't check the UniqueID in the font
dictionary against the one in the font's Private dictionary.
	- A value stored in a dictionary under the key /xxx couldn't be
retrieved using the key (xxx), and vice versa.
	- charpath with a Type 1 font on a string containing a 'space'
would produce garbage (it released the parent path inappropriately).
	- bytesavailable did not work properly for terminal input.

Changes the interface to the memory allocator so that it always takes an
element size and an element count, like calloc instead of malloc (but note
that alloc does *not* clear just-allocated blocks).  Gets rid of the
special 'dynamic' allocation procedures.

Changes the random number operators to use a better implementation.

Changes the idiv operator so it will accept any numbers, not just
integers, as arguments.  (The PostScript manual doesn't allow this, but
implementations apparently do.)

Provides semi-fake but usable definitions for all of the color PostScript
extensions, including a real implementation of colorimage.

No longer uses the name 'null', which is apparently reserved by Microsoft
C.  Makes a number of other minor changes required to pacify the Microsoft
C compiler.

Implements %statementedit and %lineedit.  (%statementedit is equivalent to
%lineedit, which is wrong.)  Changes the interactive interpreter to use
%statementedit.

Changes the scanner to accept null, ctrl-K (vertical tab), and ctrl-L
(form feed) as whitespace.  Ctrl-L terminates a comment, null and ctrl-K
do not.

Allows a literal string as the 'proc' argument(s) for image, imagemask,
and colorimage.

Adds the following operators/procedures: arct, cleardictstack, deletefile,
renamefile.

Defines =print as a synonym for =, for the benefit of LaserPrep.

Implements non-zero PaintType for the show operators (but not for
charpath) for Type 1 fonts.

Adds the ISOLatin1Encoding encoding vector.

Renames currentcolor and setcolor as currentgscolor and setgscolor, to
avoid conflict with the Level 2 PostScript names.  Removes colorhsb,
colorrgb, hsbcolor, and rgbcolor.

</pre><h3><a name="V2.1_Library"></a>Library</h3><pre>
Fixes bugs:
	- In a couple of places, a 0 was being passed as a pointer
argument without casting, which confused the Microsoft C compiler.
	- Image devices were not recognized properly in debugging
configurations.
	- Inverted-color monochrome image devices were not recognized
properly.
	- Images that exactly fill the drawing area rendered very slowly,
because they erroneously used the general clipping algorithm.
	- Images that are 1-for-1 with the device were incorrectly scaled
by a factor of 8 in X.
	- Rounding artifacts sometimes caused characters to be unevenly
offset vertically by 1 pixel.
	- Type 1 fonts that used the Flex feature resulted in garbled
images.
	- The show operator routines would incorrectly fill or stroke a
path that existed at the time the show was started.
	- setscreen truncated the cell size instead of rounding, which
could produce off-by-1 anomalies.
	- stroke would sometimes produce garbage (or nothing at all) for
very narrow lines.
	- path filling would only color the pixels whose centers fell
inside the path: the Adobe specification requires coloring a pixel if any
part of it falls inside the path.

Changes the Epson printer driver so that it drives the printer directly
rather than writing to a file.

Changes pathbbox so that if the path is empty but there is a current
point, it returns a null rectangle at the current point.

Changes gs_image_init to take an additional parameter (after bps) giving
the number of samples per pixel (1, 3, or 4), and an indication of whether
the samples for each pixel are together or separated (-3 or -4).

Renames the gs_image_data and gs_imagemask_data procedures as gs_image and
gs_imagemask, and removes the old versions of the latter.

Adds gs_colorimage.

Replaces Snoopy's color dithering algorithm with one contributed by Paul
Haeberli.

Changes gs_setgray, gs_[set]hsbcolor, and gs_[set]rgbcolor so that they
coerce arguments outside the range [0..1] back into the range, instead of
signalling an error.

Makes a number of minor changes required to pacify the Microsoft C
compiler.

Changes gs_arcto so that if the last argument is a null pointer, the
tangent points are not returned.

Removes gs_type1addpath, which is not useful.  (Clients must call
gs_type1_init and gs_type1_interpret directly.)

Implements the 'seac' opcode for Type 1 fonts, allowing fonts with accented
characters to display properly.

Implements the undocumented 'testadd' opcode for Type 1 fonts, which is
used by some Adobe fonts.

Renames gs_currentcolor and gs_setcolor as gs_currentgscolor and
gs_setgscolor.  Removes gs_colorhsb, gs_colorrgb, gs_hsbcolor, and
gs_rgbcolor.

</pre>

<hr>

<h2><a name="Version2.0"></a>Version 2.0 (9/12/90)</h2>

<p>The main purpose of this release is to add fonts, support for
multiple
devices, and imaging into memory.  It also fixes a number of miscellaneous
bugs.  (Unfortunately, accurate records of the bugs fixed are not
available.)  The changes were so extensive that we chose to increment the
major version number.

<h3><a name="V2.0_Miscellaneous"></a>Miscellaneous</h3><pre>
Doesn't attempt to open the .MAP file on Unix systems.

Adds mention of statusd.ps to interp.doc.

Notes that Turbo C 2.0, not 1.5, is required for building the MS-DOS
version.

Adds a DEVICES= line to the makefile, and allows multiple devices.

Documents, in interp.doc, the X Windows resources that Ghostscript
recognizes.

Adds three PostScript masters to the fileset: chess.ps (+ cheq.ps),
golfer.ps, and escher.ps.

</pre><h3><a name="V2.0_Drivers"></a>Drivers</h3><pre>
Changes the names of all the device drivers.  See gdevs.mak for the
updated list.

Adds a (working) driver for SunView.

Adds drivers for the Sony NeWS frame buffer, and the Sony Microsystems
NWP533 printers.  These drivers were contributed by users, so we aren't
prepared to answer questions about them.

Adds a driver for the Borland Graphics Interface (BGI) for MS-DOS systems.
Note that to use this driver with a non-EGA/VGA display, you need a .BGI
file appropriate for your hardware.  (The Ghostscript executable includes
the EGA/VGA driver.)

Adds a driver for Epson printers.  The driver has only been tested on an
LX-800, and on an H-P DeskJet in FX-80 emulation mode, but may work on
other models.  The driver could be adapted to work on Unix systems, but as
distributed, it only works on MS-DOS systems.

Adds a driver for the Hewlett-Packard DeskJet printer.  The driver could
be adapted to work on Unix systems, but as distributed, it only works on
MS-DOS systems.

The X Windows driver no longer waits for the user to type a character
before bringing up the initial display.

Adds information to drivers.doc describing how to change the definition of
the device structure and procedure table.

Extends the tile_rectangle and tile_trapezoid driver procedures to
interpret color0 = color1 = gx_no_color_index as meaning that the tile is
actually colored, not a mask.

</pre><h3><a name="V2.0_Build_procedures"></a>Build procedures</h3><pre>
Changes the tar file so it puts everything in a directory called gs.

Removes the -ansi switch for gcc (this was causing problems with &lt;math.h&gt;
on some systems).

Changes LDPLAT to the string -X, which is appropriate for most Unix
systems (but not for SunOS 4.n).

Adds EXTRALIBS to the makefile, for specifying additional libraries to be
linked in.

Adds a 'clean' target for 'make', to get rid of all temporary files, the
binaries, and the executable.

Changes names of system-specific files from gp-xxx.c to gp_xxx.c.

Adds support for VMS (gp_vms.c and ghost.dcl).

Creates a new file gdevs.mak, and reorganizes the other makefiles, so that
the choice of which device driver(s) to include is isolated in a single
line in the platform-specific makefile.

Changes the standard MS-DOS makefile so it builds for 8088/86 (not 80386),
with neither -DNOPRIVATE nor -DDEBUG.

Changes the name of the MS-DOS makefile from dos-ega.mak to msdos.mak, and
the Unix makefiles from ux-[g]cc-x.mak to unix-[g]cc.mak.

Updates drivers.doc to describe how to add new drivers in gdevs.mak.

Removes gdevs.ps: the drivers are now responsible for specifying the size
of the imaging region.

</pre><h3><a name="V2.0_Interpreter"></a>Interpreter</h3><pre>
Adds a makefile macro GS_LIB_DEFAULT and an environment variable GS_LIB to
define a search path for the library (initialization and font) files, and
implements the -I switch for the same purpose (replacing -sLIB=, which was
never actually implemented).  See interp.doc for details.

No longer clears the operand stack between interactive inputs.  No longer
prints the contents of the operand stack after every input in debug mode.

Doesn't "eat" the character that the user types to proceed after a
showpage, unless it's an isolated &lt;return&gt;.

Changes the prompt so that it says
	GS&gt;
if the operand stack is empty, or
	GS&lt;n&gt;
if there are n &gt; 0 elements on the operand stack.

Adds -w and -h switches to the command line, equivalent to -dWIDTH= and
-dHEIGHT= except that they require numeric arguments.

Adds -q (quiet startup) switch to the command line, which suppresses some
initial messages and also has an effect equivalent to -dQUIET.

Fixes bugs:
	- = and == caused an error on some kinds of objects if the object
didn't have read access.
	- cvs didn't print operator names.
	- The definition of dynamic_begin in iscan.c caused the DEC VMS C
compiler to produce incorrect code.
	- mul didn't return a correct (real) result when multiplying a
very large integer by an integer that wasn't very large.
	- eq and ne didn't work on files, fonts, save objects, and some
operators.
	- The scanner would sometimes blow up on floating point numbers
beginning with a '.'.
	- flushfile didn't pop its argument from the stack.
	- put and putinterval would store into a packed array.
	- a few operators didn't check properly for stack underflow.
	- cvrs produced wrong output for radix values greater than 10.
	- The scanner would convert upper-case letters in alternate-radix
numbers wrong on Unix systems.
	- String comparisons other than equality often produced the wrong
result if the strings were of different lengths.
	- An ifelse as the last thing inside a forall would confuse the
execution stack.
	- There were some omitted casts and 'private' declarations that
made the GNU compiler unhappy.
	- There was a memory leak in the image[mask] operators that caused
516 bytes to be permanently lost each time one of them was used.
	- Quoted strings of length greater than 50 and less than 100 would
get mangled when being read in.
	- The scanner didn't consume the whitespace character following a
token, so programs that read data out of the program file could get
confused.
	- Under rare circumstances, an object of size between 249 and 255
bytes could get allocated on top of another object.

Allows bind to bind packed arrays, even though they aren't normally
writable.

Changes the length operator to allow a name as the argument.  (The
PostScript manual doesn't allow this, but implementations apparently do.)

Changes the setcachedevice operator to allow the bounding box to be
specified as a 4-element array instead of 4 scalars.  (The PostScript
manual doesn't allow this, but implementations apparently do.)

Removes a line from ghost.ps that accidentally disabled the font cache.

Implements memory devices (makeimagedevice, copyscanlines, and makedevice
for image devices).  makeimagedevice is implemented only for 1, 8, 24, and
32 bits per pixel.

Changes the deviceparams operator so it pushes a mark on the stack below
the parameters.  This is to allow for devices that have more than the
standard set of parameters.

Replaces defaultdevicename with two new operators, getdevice and
devicename.

Adds a flushpage operator that flushes any outstanding buffered output to
the screen.  This is not the same as copypage: on printers, copypage
actually prints a page, whereas flushpage may do nothing; on displays,
flushpage and copypage may both flush output to a server.

Adds an unread operator for pushing back a character into a file.

Adds a description of proposed grayimage and colorimage operators to
ghost.doc, even though they aren't implemented yet.

Changes the name of the currentfileposition operator to fileposition.

Removes the framedevice operator, since the new device operators supersede
it.

Adds a writeppmfile operator, for writing the contents of a memory device
to a ppm file.

Makes Ghostscript work even when the &gt;&gt; operator doesn't sign-extend
negative numbers.  (This has not been tested.)

Adds the Symbol encoding to ghost.ps.

Adds two new file-related operators, filename and findlibfile.  See
ghost.doc and interp.doc for details.

Adds type1encrypt and type1decrypt operators for manipulating Adobe Type 1
encoded fonts.

Changes the imagecharpath and addcharpath operators to type1imagepath and
type1addpath.  These operators now work with the Adobe Type 1 font
encoding.

Adds the type1decryptfile operator for reading Adobe Type 1 encrypted
fonts.

</pre><h3><a name="V2.0_Library"></a>Library</h3><pre>
Fixes bugs:
	- curveto and lineto didn't check for the current point being
defined.
	- stringwidth would fail if there was no current point.
	- There were omitted casts that made the GNU compiler unhappy.
	- Line caps and joins didn't always work.
	- Dashed lines didn't work at all.
	- If you read out the current matrix while inside a BuildChar
procedure, the result was garbage.
	- image[mask] would crash if you gave it a single string with more
than 64K-1 pixels (MS-DOS only).
	- Filling with a gray pattern sometimes wrote into pixels beyond
the right edge of the region (MS-DOS only).
	- The font cache would mistake fonts for each other if both fonts
had a default (unsupplied) "unique ID".
	- When a character was entered into the font cache for the first
time, sometimes it would display as garbage and/or displaced vertically
from its proper position.

Implements gs_makeimagedevice, gs_copyscanlines, gs_getdevice,
gs_devicename, gs_flushpage, gs_writeppmfile, gs_type1encrypt,
gs_type1decrypt, gs_type1imagepath, and gs_type1addpath procedures
corresponding to the new operators in the interpreter (see preceding
section).

Changes [gs_]setdevice so that it does an erasepage when it first opens
the device.

Changes definition of gx_device structure as follows.  NOTE: THIS AFFECTS
ALL DRIVERS.

	- Removes bits_from_MSB (which wasn't actually used, in any case).
	    Ghostscript now assumes officially, as it always did in
	    practice, that device bitmaps are stored MSB first, i.e., X=0
	    corresponds to the 0x80 bit in the first byte.

	- Removes the initial_matrix member, which wasn't actually being
	    set up.

	- Adds a new member 'name', a string giving the device name.

	- Adds new members 'x_pixels_per_inch' and 'y_pixels_per_inch'.
	    These are only used by the default initial_matrix procedure
	    (see below).

	- Adds a new procedure 'output_page'.  The default implementation
	    (gx_default_output_page) just calls the sync_output procedure.

	- Adds a new procedure 'get_initial_matrix'.  The default
	    procedure uses the width, height, and x/y_pixels_per_inch
	    members to compute the matrix, assuming that X values run from
	    right to left, and Y values run from top to bottom.

Changes the names of the allocation procedure types gs_proc_alloc and
gs_proc_free to proc_alloc_t and proc_free_t, and moves them from gs.h to
std.h.

Makes Ghostscript work even when the &gt;&gt; operator doesn't sign-extend
negative numbers.  (This has not been tested.)

</pre>

<!-- [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>History of Ghostscript versions 3.n</title>
<!-- $Id: History3.htm,v 1.29 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: history3.txt -->
<!--
	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] ================================================== -->

<h1>History of Ghostscript versions 3.n</h1>

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

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

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Version3.70p1">Version 3.70 patch 1 (6/24/96)</a>
<ul>
<li><a href="#V3.70p1_Procedures">Procedures</a>,
    <a href="#V3.70p1_Drivers">Drivers</a>
</ul>
<li><a href="#Version3.70">Version 3.70 (limited) (6/23/96)</a>
<ul>
<li><a href="#V3.70_Documentation">Documentation</a>,
    <a href="#V3.70_Procedures">Procedures</a>,
    <a href="#V3.70_Drivers">Drivers</a>,
    <a href="#V3.70_Platforms">Platforms</a>,
    <a href="#V3.70_Fonts">Fonts</a>,
    <a href="#V3.70_Interpreter">Interpreter</a>,
    <a href="#V3.70_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.70_Streams">Streams</a>,
    <a href="#V3.70_Library">Library</a>
</ul>
<li><a href="#Version3.69">Version 3.69 (limited) (6/14/96)</a>
<ul>
<li><a href="#V3.69_Documentation">Documentation</a>,
    <a href="#V3.69_Procedures">Procedures</a>,
    <a href="#V3.69_Utilities">Utilities</a>,
    <a href="#V3.69_Drivers">Drivers</a>,
    <a href="#V3.69_Platforms">Platforms</a>,
    <a href="#V3.69_Fonts">Fonts</a>,
    <a href="#V3.69_Interpreter">Interpreter</a>,
    <a href="#V3.69_Library">Library</a>
</ul>
<li><a href="#Version3.68p4">Version 3.68 patch 4 (5/23/96)</a>
<ul>
<li><a href="#V3.68p4_Documentation">Documentation</a>,
    <a href="#V3.68p4_Procedures">Procedures</a>,
    <a href="#V3.68p4_Drivers">Drivers</a>,
    <a href="#V3.68p4_Platforms">Platforms</a>,
    <a href="#V3.68p4_Fonts">Fonts</a>,
    <a href="#V3.68p4_Interpreter">Interpreter</a>,
    <a href="#V3.68p4_Library">Library</a>
</ul>
<li><a href="#Version3.68p3">Version 3.68 patch 3 (5/17/96)</a>
<ul>
<li><a href="#V3.68p3_Procedures">Procedures</a>,
    <a href="#V3.68p3_Utilities">Utilities</a>,
    <a href="#V3.68p3_Drivers">Drivers</a>,
    <a href="#V3.68p3_Platforms">Platforms</a>,
    <a href="#V3.68p3_Interpreter">Interpreter</a>,
    <a href="#V3.68p3_Library">Library</a>
</ul>
<li><a href="#Version3.68p2">Version 3.68 patch 2 (5/13/96)</a>
<ul>
<li><a href="#V3.68p2_Documentation">Documentation</a>,
    <a href="#V3.68p2_Procedures">Procedures</a>,
    <a href="#V3.68p2_Drivers">Drivers</a>,
    <a href="#V3.68p2_Interpreter">Interpreter</a>,
    <a href="#V3.68p2_Streams">Streams</a>,
    <a href="#V3.68p2_Library">Library</a>
</ul>
<li><a href="#Version3.68p1">Version 3.68 patch 1 (5/10/96)</a>
<ul>
<li><a href="#V3.68p1_Procedures">Procedures</a>
</ul>
<li><a href="#Version3.68">Version 3.68 (limited) (5/9/96)</a>
<ul>
<li><a href="#V3.68_Documentation">Documentation</a>,
    <a href="#V3.68_Procedures">Procedures</a>,
    <a href="#V3.68_Utilities">Utilities</a>,
    <a href="#V3.68_Drivers">Drivers</a>,
    <a href="#V3.68_Platforms">Platforms</a>,
    <a href="#V3.68_Fonts">Fonts</a>,
    <a href="#V3.68_Interpreter">Interpreter</a>,
    <a href="#V3.68_Streams">Streams</a>,
    <a href="#V3.68_Library">Library</a>
</ul>
<li><a href="#Version3.67">Version 3.67 (limited) (4/12/96)</a>
<ul>
<li><a href="#V3.67_Documentation">Documentation</a>,
    <a href="#V3.67_Procedures">Procedures</a>,
    <a href="#V3.67_Platforms">Platforms</a>,
    <a href="#V3.67_Interpreter">Interpreter</a>,
    <a href="#V3.67_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.67_Library">Library</a>
</ul>
<li><a href="#Version3.66">Version 3.66 (limited) (4/8/96)</a>
<ul>
<li><a href="#V3.66_Documentation">Documentation</a>,
    <a href="#V3.66_Procedures">Procedures</a>,
    <a href="#V3.66_Utilities">Utilities</a>,
    <a href="#V3.66_Drivers">Drivers</a>,
    <a href="#V3.66_Platforms">Platforms</a>,
    <a href="#V3.66_Fonts">Fonts</a>,
    <a href="#V3.66_Interpreter">Interpreter</a>,
    <a href="#V3.66_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.66_Streams">Streams</a>,
    <a href="#V3.66_Library">Library</a>
</ul>
<li><a href="#Version3.65">Version 3.65 (limited) (3/9/96)</a>
<ul>
<li><a href="#V3.65_Documentation">Documentation</a>,
    <a href="#V3.65_Procedures">Procedures</a>,
    <a href="#V3.65_Utilities">Utilities</a>,
    <a href="#V3.65_Drivers">Drivers</a>,
    <a href="#V3.65_Platforms">Platforms</a>,
    <a href="#V3.65_Interpreter">Interpreter</a>,
    <a href="#V3.65_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.65_Streams">Streams</a>,
    <a href="#V3.65_Library">Library</a>
</ul>
<li><a href="#Version3.64">Version 3.64 (limited, incremental) (1/27/96)</a>
<ul>
<li><a href="#V3.64_Documentation">Documentation</a>,
    <a href="#V3.64_Procedures">Procedures</a>,
    <a href="#V3.64_Utilities">Utilities</a>,
    <a href="#V3.64_Drivers">Drivers</a>,
    <a href="#V3.64_Platforms">Platforms</a>,
    <a href="#V3.64_Interpreter">Interpreter</a>,
    <a href="#V3.64_Streams">Streams</a>,
    <a href="#V3.64_Library">Library</a>
</ul>
<li><a href="#Version3.63">Version 3.63 (limited, incremental) (1/14/96)</a>
<ul>
<li><a href="#V3.63_Documentation">Documentation</a>,
    <a href="#V3.63_Procedures">Procedures</a>,
    <a href="#V3.63_Utilities">Utilities</a>,
    <a href="#V3.63_Drivers">Drivers</a>,
    <a href="#V3.63_Platforms">Platforms</a>,
    <a href="#V3.63_Interpreter">Interpreter</a>,
    <a href="#V3.63_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.63_Streams">Streams</a>,
    <a href="#V3.63_Library">Library</a>
</ul>
<li><a href="#Version3.62">Version 3.62 (limited, incremental) (12/26/95)</a>
<ul>
<li><a href="#V3.62_Documentation">Documentation</a>,
    <a href="#V3.62_Procedures">Procedures</a>,
    <a href="#V3.62_Interpreter">Interpreter</a>,
    <a href="#V3.62_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.62_Library">Library</a>
</ul>
<li><a href="#Version3.61">Version 3.61 (limited) (12/10/95)</a>
<ul>
<li><a href="#V3.61_Documentation">Documentation</a>,
    <a href="#V3.61_Procedures">Procedures</a>,
    <a href="#V3.61_Utilities">Utilities</a>,
    <a href="#V3.61_Drivers">Drivers</a>,
    <a href="#V3.61_Platforms">Platforms</a>,
    <a href="#V3.61_Fonts">Fonts</a>,
    <a href="#V3.61_Interpreter">Interpreter</a>,
    <a href="#V3.61_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.61_Streams">Streams</a>,
    <a href="#V3.61_Library">Library</a>
</ul>
<li><a href="#Version3.60">Version 3.60 (limited) (11/20/95)</a>
<ul>
<li><a href="#V3.60_Documentation">Documentation</a>,
    <a href="#V3.60_Procedures">Procedures</a>,
    <a href="#V3.60_Utilities">Utilities</a>,
    <a href="#V3.60_Drivers">Drivers</a>,
    <a href="#V3.60_Platforms">Platforms</a>,
    <a href="#V3.60_Fonts">Fonts</a>,
    <a href="#V3.60_Interpreter">Interpreter</a>,
    <a href="#V3.60_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.60_Streams">Streams</a>,
    <a href="#V3.60_Library">Library</a>
</ul>
<li><a href="#Version3.53">Version 3.53 (1/10/96)</a>
<ul>
<li><a href="#V3.53_Documentation">Documentation</a>,
    <a href="#V3.53_Procedures">Procedures</a>,
    <a href="#V3.53_Utilities">Utilities</a>,
    <a href="#V3.53_Drivers">Drivers</a>,
    <a href="#V3.53_Platforms">Platforms</a>,
    <a href="#V3.53_Fonts">Fonts</a>,
    <a href="#V3.53_Interpreter">Interpreter</a>,
    <a href="#V3.53_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.53_Streams">Streams</a>,
    <a href="#V3.53_Library">Library</a>
</ul>
<li><a href="#Version3.52">Version 3.52 (limited) (10/6/95)</a>
<ul>
<li><a href="#V3.52_Procedures">Procedures</a>,
    <a href="#V3.52_Interpreter">Interpreter</a>,
    <a href="#V3.52_Library">Library</a>
</ul>
<li><a href="#Version3.51">Version 3.51 (9/27/95)</a>
<ul>
<li><a href="#V3.51_Documentation">Documentation</a>,
    <a href="#V3.51_Procedures">Procedures</a>,
    <a href="#V3.51_Utilities">Utilities</a>,
    <a href="#V3.51_Drivers">Drivers</a>,
    <a href="#V3.51_Platforms">Platforms</a>,
    <a href="#V3.51_Interpreter">Interpreter</a>,
    <a href="#V3.51_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.51_Library">Library</a>
</ul>
<li><a href="#Version3.50">Version 3.50 (limited) (9/24/95)</a>
<ul>
<li><a href="#V3.50_Procedures">Procedures</a>,
    <a href="#V3.50_Utilities">Utilities</a>,
    <a href="#V3.50_Drivers">Drivers</a>,
    <a href="#V3.50_Interpreter">Interpreter</a>,
    <a href="#V3.50_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.50_Library">Library</a>
</ul>
<li><a href="#Version3.49">Version 3.49 (limited) (9/20/95)</a>
<ul>
<li><a href="#V3.49_Documentation">Documentation</a>,
    <a href="#V3.49_Procedures">Procedures</a>,
    <a href="#V3.49_Drivers">Drivers</a>,
    <a href="#V3.49_Platforms">Platforms</a>,
    <a href="#V3.49_Interpreter">Interpreter</a>,
    <a href="#V3.49_Library">Library</a>
</ul>
<li><a href="#Version3.48">Version 3.48 (limited) (9/17/95)</a>
<ul>
<li><a href="#V3.48_Documentation">Documentation</a>,
    <a href="#V3.48_Procedures">Procedures</a>,
    <a href="#V3.48_Drivers">Drivers</a>,
    <a href="#V3.48_Platforms">Platforms</a>,
    <a href="#V3.48_Interpreter">Interpreter</a>,
    <a href="#V3.48_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.48_Library">Library</a>
</ul>
<li><a href="#Version3.47">Version 3.47 (limited) (9/14/95)</a>
<ul>
<li><a href="#V3.47_Documentation">Documentation</a>,
    <a href="#V3.47_Procedures">Procedures</a>,
    <a href="#V3.47_Utilities">Utilities</a>,
    <a href="#V3.47_Drivers">Drivers</a>,
    <a href="#V3.47_Platforms">Platforms</a>,
    <a href="#V3.47_Fonts">Fonts</a>,
    <a href="#V3.47_Interpreter">Interpreter</a>,
    <a href="#V3.47_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.47_Streams">Streams</a>,
    <a href="#V3.47_Library">Library</a>
</ul>
<li><a href="#Version3.46">Version 3.46 (limited) (9/4/95)</a>
<ul>
<li><a href="#V3.46_Documentation">Documentation</a>,
    <a href="#V3.46_Procedures">Procedures</a>,
    <a href="#V3.46_Utilities">Utilities</a>,
    <a href="#V3.46_Drivers">Drivers</a>,
    <a href="#V3.46_Platforms">Platforms</a>,
    <a href="#V3.46_Interpreter">Interpreter</a>,
    <a href="#V3.46_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.46_Library">Library</a>
</ul>
<li><a href="#Version3.45">Version 3.45 (limited) (8/27/95)</a>
<ul>
<li><a href="#V3.45_Documentation">Documentation</a>,
    <a href="#V3.45_Procedures">Procedures</a>,
    <a href="#V3.45_Utilities">Utilities</a>,
    <a href="#V3.45_Drivers">Drivers</a>,
    <a href="#V3.45_Platforms">Platforms</a>,
    <a href="#V3.45_Interpreter">Interpreter</a>,
    <a href="#V3.45_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.45_Streams">Streams</a>,
    <a href="#V3.45_Library">Library</a>
</ul>
<li><a href="#Version3.44">Version 3.44 (limited) (8/21/95)</a>
<ul>
<li><a href="#V3.44_Documentation">Documentation</a>,
    <a href="#V3.44_Procedures">Procedures</a>,
    <a href="#V3.44_Utilities">Utilities</a>,
    <a href="#V3.44_Drivers">Drivers</a>,
    <a href="#V3.44_Platforms">Platforms</a>,
    <a href="#V3.44_Interpreter">Interpreter</a>,
    <a href="#V3.44_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.44_Library">Library</a>
</ul>
<li><a href="#Version3.43">Version 3.43 (limited) (8/10/95)</a>
<ul>
<li><a href="#V3.43_Documentation">Documentation</a>,
    <a href="#V3.43_Procedures">Procedures</a>,
    <a href="#V3.43_Platforms">Platforms</a>,
    <a href="#V3.43_Fonts">Fonts</a>,
    <a href="#V3.43_Interpreter">Interpreter</a>,
    <a href="#V3.43_Streams">Streams</a>,
    <a href="#V3.43_Library">Library</a>
</ul>
<li><a href="#Version3.42">Version 3.42 (limited) (8/2/95)</a>
<ul>
<li><a href="#V3.42_Documentation">Documentation</a>,
    <a href="#V3.42_Procedures">Procedures</a>,
    <a href="#V3.42_Platforms">Platforms</a>,
    <a href="#V3.42_Interpreter">Interpreter</a>,
    <a href="#V3.42_Streams">Streams</a>,
    <a href="#V3.42_Library">Library</a>
</ul>
<li><a href="#Version3.41">Version 3.41 (limited) (7/27/95)</a>
<ul>
<li><a href="#V3.41_Documentation">Documentation</a>,
    <a href="#V3.41_Procedures">Procedures</a>,
    <a href="#V3.41_Utilities">Utilities</a>,
    <a href="#V3.41_Drivers">Drivers</a>,
    <a href="#V3.41_Platforms">Platforms</a>,
    <a href="#V3.41_Fonts">Fonts</a>,
    <a href="#V3.41_Interpreter">Interpreter</a>,
    <a href="#V3.41_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.41_Streams">Streams</a>,
    <a href="#V3.41_Library">Library</a>
</ul>
<li><a href="#Version3.40">Version 3.40 (limited) (6/28/95)</a>
<ul>
<li><a href="#V3.40_Documentation">Documentation</a>,
    <a href="#V3.40_Procedures">Procedures</a>,
    <a href="#V3.40_Utilities">Utilities</a>,
    <a href="#V3.40_Platforms">Platforms</a>,
    <a href="#V3.40_Interpreter">Interpreter</a>,
    <a href="#V3.40_Streams">Streams</a>,
    <a href="#V3.40_Library">Library</a>
</ul>
<li><a href="#Version3.39">Version 3.39 (limited) (6/24/95)</a>
<ul>
<li><a href="#V3.39_Documentation">Documentation</a>,
    <a href="#V3.39_Procedures">Procedures</a>,
    <a href="#V3.39_Utilities">Utilities</a>,
    <a href="#V3.39_Platforms">Platforms</a>,
    <a href="#V3.39_Fonts">Fonts</a>,
    <a href="#V3.39_Interpreter">Interpreter</a>,
    <a href="#V3.39_Streams">Streams</a>,
    <a href="#V3.39_Library">Library</a>
</ul>
<li><a href="#Version3.38">Version 3.38 (limited) (6/18/95)</a>
<ul>
<li><a href="#V3.38_Documentation">Documentation</a>,
    <a href="#V3.38_Procedures">Procedures</a>,
    <a href="#V3.38_Utilities">Utilities</a>,
    <a href="#V3.38_Drivers">Drivers</a>,
    <a href="#V3.38_Platforms">Platforms</a>,
    <a href="#V3.38_Fonts">Fonts</a>,
    <a href="#V3.38_Interpreter">Interpreter</a>,
    <a href="#V3.38_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.38_Streams">Streams</a>,
    <a href="#V3.38_Library">Library</a>
</ul>
<li><a href="#Version3.37">Version 3.37 (limited) (5/11/95)</a>
<ul>
<li><a href="#V3.37_Documentation">Documentation</a>,
    <a href="#V3.37_Procedures">Procedures</a>,
    <a href="#V3.37_Utilities">Utilities</a>,
    <a href="#V3.37_Drivers">Drivers</a>,
    <a href="#V3.37_Fonts">Fonts</a>,
    <a href="#V3.37_Interpreter_PostScript">Interpreter (PostScript)</a>,
    <a href="#V3.37_Interpreter_PDF">Interpreter (PDF)</a>
</ul>
<li><a href="#Version3.36">Version 3.36 (limited) (5/4/95)</a>
<ul>
<li><a href="#V3.36_Documentation">Documentation</a>,
    <a href="#V3.36_Procedures">Procedures</a>,
    <a href="#V3.36_Drivers">Drivers</a>,
    <a href="#V3.36_Interpreter">Interpreter</a>,
    <a href="#V3.36_Library">Library</a>
</ul>
<li><a href="#Version3.35">Version 3.35 (internal) (5/2/95)</a>
<ul>
<li><a href="#V3.35_Documentation">Documentation</a>,
    <a href="#V3.35_Procedures">Procedures</a>,
    <a href="#V3.35_Utilities">Utilities</a>,
    <a href="#V3.35_Drivers">Drivers</a>,
    <a href="#V3.35_Platforms">Platforms</a>,
    <a href="#V3.35_Fonts">Fonts</a>,
    <a href="#V3.35_Interpreter">Interpreter</a>,
    <a href="#V3.35_Library">Library</a>
</ul>
<li><a href="#Version3.34">Version 3.34 (internal) (4/18/95)</a>
<ul>
<li><a href="#V3.34_Documentation">Documentation</a>,
    <a href="#V3.34_Procedures">Procedures</a>,
    <a href="#V3.34_Interpreter">Interpreter</a>,
    <a href="#V3.34_Library">Library</a>
</ul>
<li><a href="#Version3.33">Version 3.33 (4/13/95)</a>
<ul>
<li><a href="#V3.33_Documentation">Documentation</a>,
    <a href="#V3.33_Procedures">Procedures</a>,
    <a href="#V3.33_Utilities">Utilities</a>,
    <a href="#V3.33_Drivers">Drivers</a>,
    <a href="#V3.33_Platforms">Platforms</a>,
    <a href="#V3.33_Fonts">Fonts</a>,
    <a href="#V3.33_Library">Library</a>
</ul>
<li><a href="#Version3.32">Version 3.32 (4/7/95)</a>
<ul>
<li><a href="#V3.32_Documentation">Documentation</a>,
    <a href="#V3.32_Procedures">Procedures</a>,
    <a href="#V3.32_Utilities">Utilities</a>,
    <a href="#V3.32_Drivers">Drivers</a>,
    <a href="#V3.32_Platforms">Platforms</a>,
    <a href="#V3.32_Interpreter">Interpreter</a>,
    <a href="#V3.32_Streams">Streams</a>,
    <a href="#V3.32_Library">Library</a>
</ul>
<li><a href="#Version3.31">Version 3.31 (4/2/95)</a>
<ul>
<li><a href="#V3.31_Documentation">Documentation</a>,
    <a href="#V3.31_Procedures">Procedures</a>,
    <a href="#V3.31_Utilities">Utilities</a>,
    <a href="#V3.31_Drivers">Drivers</a>,
    <a href="#V3.31_Platforms">Platforms</a>,
    <a href="#V3.31_Interpreter">Interpreter</a>,
    <a href="#V3.31_Streams">Streams</a>,
    <a href="#V3.31_Library">Library</a>
</ul>
<li><a href="#Version3.30">Version 3.30 (beta) (3/21/95)</a>
<ul>
<li><a href="#V3.30_Documentation">Documentation</a>,
    <a href="#V3.30_Utilities">Utilities</a>,
    <a href="#V3.30_Drivers">Drivers</a>,
    <a href="#V3.30_Interpreter_PostScript">Interpreter (PostScript)</a>,
    <a href="#V3.30_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.30_Library">Library</a>
</ul>
<li><a href="#Version3.29">Version 3.29 (internal) (3/8/95)</a>
<ul>
<li><a href="#V3.29_Documentation">Documentation</a>,
    <a href="#V3.29_Procedures">Procedures</a>,
    <a href="#V3.29_Utilities">Utilities</a>,
    <a href="#V3.29_Fonts">Fonts</a>,
    <a href="#V3.29_Drivers">Drivers</a>,
    <a href="#V3.29_Interpreter_PostScript">Interpreter (PostScript)</a>,
    <a href="#V3.29_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.29_Streams">Streams</a>,
    <a href="#V3.29_Library">Library</a>
</ul>
<li><a href="#Version3.28">Version 3.28 (beta) (2/13/95)</a>
<ul>
<li><a href="#V3.28_Documentation">Documentation</a>,
    <a href="#V3.28_Procedures">Procedures</a>,
    <a href="#V3.28_Utilities">Utilities</a>,
    <a href="#V3.28_Drivers">Drivers</a>,
    <a href="#V3.28_Interpreter">Interpreter</a>,
    <a href="#V3.28_Library">Library</a>
</ul>
<li><a href="#Version3.27">Version 3.27 (beta)(withdrawn) (2/8/95)</a>
<ul>
<li><a href="#V3.27_Documentation">Documentation</a>,
    <a href="#V3.27_Procedures">Procedures</a>,
    <a href="#V3.27_Utilities">Utilities</a>,
    <a href="#V3.27_Drivers">Drivers</a>,
    <a href="#V3.27_Platforms">Platforms</a>,
    <a href="#V3.27_Fonts">Fonts</a>,
    <a href="#V3.27_Interpreter">Interpreter</a>,
    <a href="#V3.27_Streams">Streams</a>,
    <a href="#V3.27_Library">Library</a>
</ul>
<li><a href="#Version3.26">Version 3.26 (beta) (2/1/95)</a>
<ul>
<li><a href="#V3.26_Documentation">Documentation</a>,
    <a href="#V3.26_Procedures">Procedures</a>,
    <a href="#V3.26_Utilities">Utilities</a>,
    <a href="#V3.26_Drivers">Drivers</a>,
    <a href="#V3.26_Platforms">Platforms</a>,
    <a href="#V3.26_Interpreter">Interpreter</a>,
    <a href="#V3.26_Streams">Streams</a>,
    <a href="#V3.26_Library">Library</a>
</ul>
<li><a href="#Version3.25">Version 3.25 (beta) (1/24/95)</a>
<ul>
<li><a href="#V3.25_Documentation">Documentation</a>,
    <a href="#V3.25_Procedures">Procedures</a>,
    <a href="#V3.25_Drivers">Drivers</a>,
    <a href="#V3.25_Platforms">Platforms</a>,
    <a href="#V3.25_Interpreter">Interpreter</a>,
    <a href="#V3.25_Library">Library</a>
</ul>
<li><a href="#Version3.24">Version 3.24 (beta) (1/17/95)</a>
<ul>
<li><a href="#V3.24_Documentation">Documentation</a>,
    <a href="#V3.24_Procedures">Procedures</a>,
    <a href="#V3.24_Drivers">Drivers</a>,
    <a href="#V3.24_Platforms">Platforms</a>,
    <a href="#V3.24_Fonts">Fonts</a>,
    <a href="#V3.24_Interpreter">Interpreter</a>,
    <a href="#V3.24_Interpreter_PostScript">Interpreter (PostScript)</a>,
    <a href="#V3.24_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.24_Streams">Streams</a>,
    <a href="#V3.24_Library">Library</a>
</ul>
<li><a href="#Version3.23">Version 3.23 (beta) (1/5/95)</a>
<ul>
<li><a href="#V3.23_Documentation">Documentation</a>,
    <a href="#V3.23_Procedures">Procedures</a>,
    <a href="#V3.23_Utilities">Utilities</a>,
    <a href="#V3.23_Drivers">Drivers</a>,
    <a href="#V3.23_Platforms">Platforms</a>,
    <a href="#V3.23_Fonts">Fonts</a>,
    <a href="#V3.23_Interpreter_PostScript">Interpreter (PostScript)</a>,
    <a href="#V3.23_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V3.23_Streams">Streams</a>,
    <a href="#V3.23_Library">Library</a>
</ul>
<li><a href="#Version3.22">Version 3.22 (beta) (11/30/94)</a>
<ul>
<li><a href="#V3.22_Procedures">Procedures</a>,
    <a href="#V3.22_Drivers">Drivers</a>,
    <a href="#V3.22_Platforms">Platforms</a>,
    <a href="#V3.22_Fonts">Fonts</a>,
    <a href="#V3.22_Interpreter">Interpreter</a>,
    <a href="#V3.22_Streams">Streams</a>,
    <a href="#V3.22_Library">Library</a>
</ul>
<li><a href="#Version3.21">Version 3.21 (beta) (11/17/94)</a>
<ul>
<li><a href="#V3.21_Documentation">Documentation</a>,
    <a href="#V3.21_Procedures">Procedures</a>,
    <a href="#V3.21_Utilities">Utilities</a>,
    <a href="#V3.21_Drivers">Drivers</a>,
    <a href="#V3.21_Platforms">Platforms</a>,
    <a href="#V3.21_Fonts">Fonts</a>,
    <a href="#V3.21_Interpreter">Interpreter</a>,
    <a href="#V3.21_Streams">Streams</a>,
    <a href="#V3.21_Library">Library</a>
</ul>
<li><a href="#Version3.20">Version 3.20 (beta) (10/31/94)</a>
<ul>
<li><a href="#V3.20_Documentation">Documentation</a>,
    <a href="#V3.20_Procedures">Procedures</a>,
    <a href="#V3.20_Utilities">Utilities</a>,
    <a href="#V3.20_Drivers">Drivers</a>,
    <a href="#V3.20_Platforms">Platforms</a>,
    <a href="#V3.20_Fonts">Fonts</a>,
    <a href="#V3.20_Interpreters">Interpreters</a>,
    <a href="#V3.20_Library">Library</a>
</ul>
<li><a href="#Version3.13">Version 3.13(private) (10/3/94)</a>
<ul>
<li><a href="#V3.13_Documentation">Documentation</a>,
    <a href="#V3.13_Procedures">Procedures</a>,
    <a href="#V3.13_Utilities">Utilities</a>,
    <a href="#V3.13_Drivers">Drivers</a>,
    <a href="#V3.13_Platforms">Platforms</a>,
    <a href="#V3.13_Fonts">Fonts</a>,
    <a href="#V3.13_Interpreter">Interpreter</a>,
    <a href="#V3.13_Streams">Streams</a>,
    <a href="#V3.13_Library">Library</a>
</ul>
<li><a href="#Version3.12">Version 3.12 (9/29/94)</a>
<ul>
<li><a href="#V3.12_Documentation">Documentation</a>,
    <a href="#V3.12_Procedures">Procedures</a>,
    <a href="#V3.12_Drivers">Drivers</a>,
    <a href="#V3.12_Platforms">Platforms</a>,
    <a href="#V3.12_Interpreter">Interpreter</a>,
    <a href="#V3.12_Streams">Streams</a>,
    <a href="#V3.12_Library">Library</a>
</ul>
<li><a href="#Version3.1.1">Version 3.1.1 (9/25/94)</a>
<ul>
<li><a href="#V3.1.1_Documentation">Documentation</a>,
    <a href="#V3.1.1_Procedures">Procedures</a>,
    <a href="#V3.1.1_Drivers">Drivers</a>,
    <a href="#V3.1.1_Platforms">Platforms</a>,
    <a href="#V3.1.1_Interpreter">Interpreter</a>
</ul>
<li><a href="#Version3.1">Version 3.1 (9/20/94)</a>
<ul>
<li><a href="#V3.1_Documentation">Documentation</a>,
    <a href="#V3.1_Procedures">Procedures</a>,
    <a href="#V3.1_Drivers">Drivers</a>,
    <a href="#V3.1_Interpreter">Interpreter</a>,
    <a href="#V3.1_Streams">Streams</a>,
    <a href="#V3.1_Library">Library</a>
</ul>
<li><a href="#Version3.0.3">Version 3.0.3 (9/16/94)</a>
<ul>
<li><a href="#V3.0.3_Documentation">Documentation</a>,
    <a href="#V3.0.3_Procedures">Procedures</a>,
    <a href="#V3.0.3_Utilities">Utilities</a>,
    <a href="#V3.0.3_Drivers">Drivers</a>,
    <a href="#V3.0.3_Platforms">Platforms</a>,
    <a href="#V3.0.3_Fonts">Fonts</a>,
    <a href="#V3.0.3_Streams">Streams</a>,
    <a href="#V3.0.3_Interpreter">Interpreter</a>,
    <a href="#V3.0.3_Library">Library</a>
</ul>
<li><a href="#Version3.02">Version 3.02 (8/30/94)</a>
<ul>
<li><a href="#V3.02_Documentation">Documentation</a>,
    <a href="#V3.02_Procedures">Procedures</a>,
    <a href="#V3.02_Utilities">Utilities</a>,
    <a href="#V3.02_Drivers">Drivers</a>,
    <a href="#V3.02_Platforms">Platforms</a>,
    <a href="#V3.02_Fonts">Fonts</a>,
    <a href="#V3.02_Interpreter">Interpreter</a>,
    <a href="#V3.02_Streams">Streams</a>,
    <a href="#V3.02_Library">Library</a>
</ul>
<li><a href="#Version3.01">Version 3.01 (8/14/94)</a>
<ul>
<li><a href="#V3.01_Documentation">Documentation</a>,
    <a href="#V3.01_Procedures">Procedures</a>,
    <a href="#V3.01_Utilities">Utilities</a>,
    <a href="#V3.01_Drivers">Drivers</a>,
    <a href="#V3.01_Platforms">Platforms</a>,
    <a href="#V3.01_Fonts">Fonts</a>,
    <a href="#V3.01_Interpreter">Interpreter</a>,
    <a href="#V3.01_Streams">Streams</a>,
    <a href="#V3.01_Library">Library</a>
</ul>
<li><a href="#Version3.0">Version 3.0 (8/1/94)</a>
<ul>
<li><a href="#V3.0_Documentation">Documentation</a>,
    <a href="#V3.0_Procedures">Procedures</a>,
    <a href="#V3.0_Utilities">Utilities</a>,
    <a href="#V3.0_Drivers">Drivers</a>,
    <a href="#V3.0_Platforms">Platforms</a>,
    <a href="#V3.0_Fonts">Fonts</a>,
    <a href="#V3.0_Interpreter">Interpreter</a>,
    <a href="#V3.0_Streams">Streams</a>,
    <a href="#V3.0_Library">Library</a>
</ul>
</ul></blockquote>

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

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

<p>
This document is a history of Ghostscript releases numbered 3.n.  For more
recent changes, see the the other history documents and, for the latest
versions, the news:

<blockquote>
<a href="News.htm">News</a><br>
<a href="History4.htm">History of Ghostscript versions 4.n</a><br>
History of Ghostscript versions 3.n (this document)<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] ============================================== -->

<h2><a name="Version3.70p1"></a>Version 3.70 patch 1 (6/24/96)</h2>

<p>
This contains a few last-minute patches before the release.

<h3><a name="V3.70p1_Procedures"></a>Procedures</h3><pre>
Comments out the color inkjet drivers in the cc-based makefile, because a
bug in Sun's cc prevents them from compiling.  (cc-head.mak)

</pre><h3><a name="V3.70p1_Drivers"></a>Drivers</h3><pre>
Fixes bugs:
	- The os2prn driver smashed memory.  (gdevos2p.c)
	- Some initialized structures weren't declared 'static'.
(gdevpdf.c, gdevpdfm.c)
	- The PNG driver wouldn't compile with some older versions of the
PNG library.  (gdevpng.c)

</pre>

<h2><a name="Version3.70"></a>Version 3.70 (limited) (6/23/96)</h2>

<p>
This is the candidate fileset for 4.0.  Aside from one optimization
for the PDF writer, the only changes are bug fixes.

<h3><a name="V3.70_Documentation"></a>Documentation</h3><pre>

Renames all the documentation files from *.doc to *.txt, since the .doc
extension didn't give any information about the format of the file.
(readme, *.doc, *.txt)

Notes that IJG JPEG library v6[a] is now required.  (jpeg.mak)

Brings ps2pdf.1 up to date.  (ps2pdf.1)

Adds a new file describing Aladdin's C coding practices.  (c-style.txt)

Updates the man pages to refer to version 4.0.  (gs.1, pdf2ps.1, ps2ascii.1,
ps2pdf.1)

</pre><h3><a name="V3.70_Procedures"></a>Procedures</h3><pre>

Changes some file names to fit within the MS-DOS 8.3 limit.  (gs.mak)

Adds the PDF writer to the remaining 32-bit configurations (Watcom, OS/2,
MSC).  (watc.mak, watcwin.mak, os2.mak, msc.mak, msvcwint.mak)

Changes the -sFONTMAP= switch so it can take a list of font names, like a
search path.  (use.txt)

</pre><h3><a name="V3.70_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- Signed and unsigned values were mixed inconsistently.  (gdevcdj.c)
	- PDF files could contain e-format floating point numbers, which the
PDF specification doesn't allow.  (gdevpdfx.h, gdevpdf*.c)
	- The PDF writer didn't handle glyphshow properly.  (gs_pdfwr.ps)
	- The PDF writer did the wrong thing with fonts whose FontMatrix had
a non-zero translation component.  (gs_pdfwr.ps, gdevpdft.c)
	- The stand-alone bounding box device could crash when setting
parameters.  (gdevbbox.c)
	- The mswinpr2 driver smashed memory.  (gdevwpr2.c)

Changes the PDF writer so that if it encounters a re-encoded character, it
tries to map it to an encoded character in the standard (ISO Latin-1)
encoding rather than converting the entire string containing it to a bitmap.
This dramatically improves output file size for files with a few divergently
encoded characters, but it may cause the text in the PDF file to differ from
the text in the PostScript input.  (gdevpdft.c)

Disallows BitsPerPixel=16 in the MS Windows and OS/2 drivers, since this bit
depth is not supported by Windows and would require special extra buffering.
(install.txt, dwtext.h, dwtext.cpp, gdevmswn.c, gdevpm.c, gdevwpr2.c)

</pre><h3><a name="V3.70_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- On the PC platforms, file names weren't changed to reflect the
value of CONFIG.  (gs.mak, bc*.mak, ms*.mak, os2.mak, tc*.mak, watc*.mak,
wccommon.mak)

Modifies some makefiles for greater reusability.  (bclib.mak, watclib.mak)

</pre><h3><a name="V3.70_Fonts"></a>Fonts</h3><pre>

Changes the font searching rules in the following NON-BACKWARD-COMPATIBLE
way: (gs_fonts.ps, gs_res.ps)
	- -sFONTMAP=files specifies a list of files containing fontmaps;
previously, it specified only a single fontmap file.
	- If -sFONTMAP= is not used, the interpreter reads the Fontmaps from
*all* directories on the search path, and does so even if FONTPATH or
GS_FONTPATH is set; previously, it read only the first Fontmap, and only if
[GS_]FONTPATH was not set.
	- Fontmap(s) take precedence over [GS_]FONTPATH; previously,
[GS_]FONTPATH caused Fontmap to be ignored.  (You can still force Fontmap to
be ignored with -dNOFONTMAP.)
	- Earlier [GS_]FONTPATH entries take precedence over later;
previously, later entries took precedence over earlier.  Note that this is
different from Fontmap: earlier Fontmaps in the search path take precedence
over later, but within a single Fontmap, later entries take precedence over
earlier (for backward compatibility).
	- [GS_]FONTPATH is consulted only if there is no Fontmap entry for a
font, or no Fontmap entry leads to successful loading; previously,
[GS_]FONTPATH was always consulted at startup.
	- If loading a font fails, the interpreter tries the next Fontmap
entry; previously, it fell back to font substitution.

</pre><h3><a name="V3.70_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Filters didn't peek ahead for an EOD (see Streams below).
(zfileio.c, zpaint.c)

Splits up a file to allow internal access to user and system parameters even
in Level 1.  (zmisc2.c, zusparam.c)

Adds LIBPATH as a predefined name in systemdict.  Its value is an array of
strings comprising the library search path.  (imain.c)

</pre><h3><a name="V3.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- A Dests dictionary entry with an array (rather than a dictionary)
value caused an error.  (pdf_main.ps)
	- Rotated pages could have incorrect translation and/or clipping.
(pdf_main.ps)

</pre><h3><a name="V3.70_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- If a buffer boundary fell just before an EOD, and the client read
exactly as much data as was present before the EOD, filters didn't consume
the EOD.  (This is required as a tricky consequence of the Adobe
specification.)  (stream.h, strimpl.h, stream.c)

</pre><h3><a name="V3.70_Library"></a>Library</h3><pre>

Fixes bugs:
	- An extra column of bits could get turned on at the right edge of
masked or monochrome images.  (gximage2.c)
	- Rasterizing very long curves could cause arithmetic errors or
floating point overflows.  (gxpcopy.c)
	- Banding with large line widths could truncate curves or introduce
spurious lines.  (gxclpath.c)

</pre>

<hr>

<h2><a name="Version3.69"></a>Version 3.69 (limited) (6/14/96)</h2>

<p>
More bug fixes, plus one irresistible new feature: the ability to use
TrueType fonts as freely as Type 1 fonts.  Also, one new feature (outside
clipping) that was needed for Aladdin's PCL XL project.  We incremented the
version number because of the change in trapezoid and path filling (see
under Library below).

<h3><a name="V3.69_Documentation"></a>Documentation</h3><pre>
Brings documentation about fonts up to date.  (fonts.doc)

Updates current.doc to reflect changes since 3.53.  (current.doc)

Updates the DLL documentation to reflect recent changes.  (dll.doc)

Documents a workaround for the code generation bug in gcc 2.7.x.  (make.doc)

Changes the contact information for potential commercial customers in
Europe.  (new-user.doc)

Updates the OS/2 documentation to make it current.  (install.doc, make.doc)

Documents -dCOLORSCREEN=0.  (use.doc)

</pre><h3><a name="V3.69_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- 'make clean' didn't work in the Watcom environment.
(wmakebat.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak, tccommon.mak,
unixhead.mak, wccommon.mak)
	- The X11 libraries were listed in an incorrect order.
(ansihead.mak, cc-head.mak, gcc-head.mak, ugcclib.mak, unix-end.mak)
	- The OS/2 makefile didn't ignore errors from `erase' commands.
(os2.mak)

Adds the PDF writer to the 32-bit MS Windows configuration.  (bcwin32.mak)

Adds the PNG drivers to the 32-bit MS Windows platform, since they now
compile properly.  (bcwin32.mak)

Changes the ttfont feature so that it refers to support for direct usage of
TrueType fonts; puts support for Type 42 fonts into a separate feature
(type42).  (gs.mak, int.mak)

Adds direct TrueType font support to the Windows platforms.  (bcwin.mak,
bcwin32.mak)

Rewrites vms.mak to be structured more like the other makefiles.  (vms.mak,
modules.lis)

Makes the device lists in vms-*.mak the same as those for the Unix
configurations.  (vms-cc.mak, vms-decc.mak, vms-gcc.mak)

Changes the default X library directory for gcc to /usr/X11/lib.
(gcc-head.mak)

Adds the list of devices to --help, since HylaFax depends on this.
(imainarg.c)

Adds -dCOLORSCREEN=0 to indicate use of 4 separate color screens with the
same frequency and angle.  (gs_init.ps)

</pre><h3><a name="V3.69_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- When ps2epsi encountered a blank page, it called the
(undocumented) .quit operator with only one argument, causing a stack
underflow.  (ps2epsi.ps)
	- An extraneous file was included in the fileset.  (checkacc.ps)
	- A file was omitted from the fileset.  (bench.c)
	- Images in PostScript files produced by pdf2ps were processed about
50 times slower than they should have been.  (gs_pdf.ps)

</pre><h3><a name="V3.69_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- An #include was omitted.  (gdevpdfi.c)
	- The BJC driver could get into an inconsistent state.  (gdevcdj.c)
	- Braces were omitted around the values for two initialized byte
arrays.  (gdevpcx.c)
	- A function used 'float' in its argument list, causing problems in
mixed ANSI/non-ANSI compilation.  (gdevcdj.c)
	- signed and unsigned char pointers were used inconsistently.
(gdevcdj.c, gdevcgml.c)
	- Some header files weren't protected against double inclusion.
(gdevprn.h, gdevtifs.h)
	- The 24-bit PNG driver included unnecessary copies of the color
mapping procedures.  (gdevpng.c)

Fixes bugs in the PDF writer:
	- The PDF writer sometimes produced a double // in front of a filter
name.  (gdevpdfi.c)
	- The PDF writer produced zero-width, zero-height images for
non-standard fonts.  (bug introduced since 3.68) (gdevpdfi.c)
	- The PDF writer got confused if the input file invoked
setpagedevice.  (gdevpdfp.c)
	- The PDF writer put annotations on the page after the one they were
supposed to be on.  (gdevpdf.c)
	- The PDF writer sometimes failed to set the font when needed.
(gdevpdf.c)
	- The PDF writer could produce in-line images that were too large.
(gdevpdfi.c)
	- The PDF writer didn't scale explicit character and word spacing
(ashow/widthshow/awidthshow) properly.  (gdevpdft.c)
	- The PDF writer didn't copy named destination or article title
strings, possibly leading to dangling pointers.  (gdevpdf.c, gdevpdfm.c)
	- The PDF writer produced incorrect output for re-encoded fonts.
(It now converts any string containing characters in non-standard positions
to bitmaps; this will be fixed in a later release.)  (gs_pdfwr.ps,
gdevpdfx.h, gdevpdfp.c, gdevpdft.c)

Updates a few drivers for the change in the handling of band device
procedures.  (gdevcp50.c, gdevdjet.c)

Updates the X Windows driver for strip halftones.  (gdevx.c)

Adds anti-aliasing capability to the os2pm device.  (gdevpm.c)

Increases the sizes of some tables in the PDF writer.  (gdevpdfx.h)

</pre><h3><a name="V3.69_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- A patch for the MS Windows platform was accidentally omitted.
(gp_mswin.c)
	- A block of code was accidentally duplicated.  (dwmain.cpp)
	- An identifier exceeded VAX VMS C's limit of 31 characters.
(gscspace.h)
	- File name enumeration didn't work properly on Unix systems
(still/again).  (gp_unifs.c)
	- On MS Windows, If you closed Ghostscript with the system menu, you
only closed the text window; Ghostscript kept running and you had to use the
task manager to kill it.  (dwmain.cpp, dwmainc.cpp, dwtext.cpp)
	- Some DLL-related typedefs were not consistent.  (dwdll.h, gsdll.h,
dpmainc.c, dwdll.cpp)
	- Attempts to call the DLL before it was initialized were not
detected.  (gsdll.c)
	- Bitmap line lengths were rounded up even on 32-bit Windows, which
doesn't want this.  (gdevwdib.c)

Further improves the handling of attempts to use the DLL when it is already
in use.  (dwdll.cpp, gsdll.c)

Adds a DLL-compatible main program for OS/2.  (dpmainc.c, gp_os2.c, gsdll.c)

</pre><h3><a name="V3.69_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- The WingDings TrueType font wasn't loaded properly.  (gs_ttf.ps)

Makes changes so that TrueType fonts can appear in the Fontmap and can be
loaded directly.  (gs_fonts.ps, gs_ttf.ps)

</pre><h3><a name="V3.69_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Executing a .quit with only 1 element on the operand stack caused
an invalid access.  (zcontrol.c)
	- The usage help message contained incorrect double %%s.
(imainarg.c)
	- If an initialization file tried to use any Encodings other than
the 4 registered ones, it couldn't find them.  (gs_init.ps, gs_res.ps)
	- Places that expected arrays of coordinates (rectangles,
x/y/xyshow) didn't accept packed arrays.  (ibnum.c, zdps1.c)
	- filterdict was still visible after initialization.  (gs_init.ps)
	- The usage error message wasn't terminated by a newline.
(imainarg.c)
	- setcacheparams (or setting the MaxFontCache user parameter) didn't
actually affect the size of the character cache.  (zfont.c, zmisc2.c)
	- The main interpreter loop declared iref as a ref *, even though it
may only be a ref_packed *.  (iref.h, interp.c)

Changes the character cache so it ignores absurd FontBBox values.  Nothing
in the Adobe spec suggests doing this, but it is necessary for handling
questionable output produced by PageMaker 5.0 (an Adobe product!).
(zchar1.c)

Changes some type declarations slightly to reduce the number of 'discarding
const' compiler warnings.  (igc.h, igc.c, igcref.c)

Adds .setclipoutside and .currentclipoutside operators for accessing the new
outside clipping capability.  (zpath.c)

Adds the dictionary stack to the information printed in case of a fatal
problem.  (imain.c)

Adds .set/currentrenderalgorithm operators for testing.  (zrop.c)

</pre><h3><a name="V3.69_Library"></a>Library</h3><pre>

Fixes bugs:
	- The TrueType rasterizer didn't map quadratic to cubic splines
well, and didn't handle off-curve points at the end of a contour properly.
(gstype42.c)
	- An #include was omitted.  (gsimage.c, gxclimag.c)
	- Some compilers complained about statements with no effect, or
comma operators with no effect on the left.  (gschar.c, gxcpath.c, gxfill.c)
	- TrueType or Type 42 glyphs with a repeat count that crossed a
contour boundary produced incorrect output.  (gstype42.c)
	- TrueType / Type 42 composite glyphs involving rotation were placed
incorrectly.  (gstype42.c)
	- Type 42 fonts with an absent or incorrect FontBBox could fail to
produce output.  (gstype42.c)
	- Some header files weren't protected against double inclusion.
(gsio.h, gdebug.h)
	- Decoding filters didn't "look ahead" to detect EOD, so if the last
read operation before closing the filter ended just before the EOD mark, the
EOD mark might not be absorbed.  (stream.h, stream.c)
	- Filling paths consisting of multiple subpaths that overlap in Y
produced slightly inaccurate output.  We were unable to find a way to fix
this without making a NON-BACKWARD-COMPATIBLE change in the interface for
the recently introduced fill_trapezoid device procedure.  (gxdevice.h,
gdevbbox.c, gdevddrw.c, gdevnfwd.c, gxfill.c)
	- When banding, get_bits didn't detect calls with out-of-range Y
values.  (gxclread.c)
	- setcacheparams didn't actually affect the size of the character
cache.  (gsfont.h, gxbcache.h, gxfcache.h, gschar.c, gsfont.c, gxbcache.c,
gxccman.c, gxclbits.c)
	- When banding, colored halftones could be mangled.  (gxclread.c)

Fixes bugs in the bounding box device:
	- The bounding box device could give bizarre results if any objects
crossed the lower edge of the page.  (gdevbbox.c)
	- The bounding box device could get a memory access error when
processing image data.  (gdebbox.c)
	- The bounding box device ran the default drawing algorithms even if
it had no target (performance bug only).  (gdevbbox.c)
	- The bounding box device computed an incorrect (too small) box for
partially clipped bitmap images.  (gdevbbox.c)
	- The bounding box device got confused by files that filled the
entire page with a background color.  (gdevbbox.c)
	- The bounding box device produced infinite-height boxes for certain
kinds of data.  (gdevbbox.c)

Changes some type declarations slightly to reduce the number of 'discarding
const' compiler warnings.  (gsmemory.h, gsstruct.h)

Adds the capability of clipping to the outside rather than the inside of the
clipping path.  This is required for emulating an obscure feature of the
Microsoft Windows GDI.  (gspath.h, gxclpath.h, gxpath.h, gxcpath.h,
gzcpath.h, gspath.c, gxacpath.c, gxclpath.c, gxclread.c, gxcpath.c.)

Makes it possible for band devices to select the underlying memory device
used to accumulate the actual bits.  This is required for (at least) PCL5
emulation.  This requires adding a procedure to the gx_device_printer
structure, which, for devices that initialize the structure without using
the macros in gdevprn.h or access the printer-specific procedures directly,
is a NON-BACKWARD-COMPATIBLE change.  (gdevprn.h, gxclist.h, gxdevice.h,
gdevdflt.c, gdevprn.c, gxclread.c)

Speeds up handling of rotated or halftoned masked images.  (gximage2.c)

Adds an output_page procedure to the bounding box device, for testing.
(gdevbbox.c)

Adds a sample device that keeps track of the "render algorithm", for PCL5c
emulation.  (gdevrrgb.c)

</pre>

<h2><a name="Version3.68p4"></a>Version 3.68 patch 4 (5/23/96)</h2>

<p>
More minor bug fixes, mostly related to the MS Windows implementation.

<h3><a name="V3.68p4_Documentation"></a>Documentation</h3><pre>
Further updates various doc files to make them more useful to new users.
(NEWS, README, current.doc, helpers.doc, new-user.doc)

Adds user-contributed documentation for ps2pdf.  (ps2pdf.doc, unix-end.mak)

Documents a bug in the Borland C++ 4.52 compiler, and where to find the
patch for it.  (make.doc)

</pre><h3><a name="V3.68p4_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- A command line exceeded the MS-DOS 120 character limit.
(devs.mak)

A file was accidentally omitted from the fileset.  (wmakebat.bat)

</pre><h3><a name="V3.68p4_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- Many of the 'show' operators didn't work properly if the PDF
writer was included in the configuration.  (gs_pdfwr.ps)
	- x_wrap_get_bits was ridiculously slow.  (It still is, but not
quite as ridiculously.)  (gxcindex.h, gdevxalt.c)
	- The PDF writer generated CR instead of CalRGB, which is legal per
the Adobe spec but not compatible with some Adobe Acrobat products.
(gdevpdfi.c)
	- Some signed/unsigned discrepancies caused compilation warnings.
(gdevpdfm.c, gdevpdfp.c, gdevpdft.c)

Fixes bugs in the Windows driver:
	- An accidentally opened tiny window didn't get closed.
(gdevwdib.c)
	- The name DllInit was misleading, and this procedure wasn't being
called whtn the DLL was loaded, so the DLL couldn't know the instance
handle.  (gp_mswin.c)
	- The code didn't recognize Win32s (vs. Windows 95) correctly.
(dwmain.cpp, gdevwdib.c, gp_mswin.h, gp_mswin.c, gsdll16.rc)
	- Some compiler warnings needed fixing.  (gdevwdib.c)
	- gsdll16.def and gsdll32.def were different.  (gsdll32.def)
	- A GPF leaving the 16-bit DLL loaded could make the DLL permanently
unusable.  (dwmain.cpp)
	- Two obsolete files were still included in the fileset.
(gswin.def, gswin32.def)

Adds a compile-time option to the 'bit' drivers to expand 4-bit pixels to
32-bit.  This was required for tracking down customer problems, because the
only tools we have available for displaying CMYK images require 32 bits per
pixel.  (gdevbit.c)

</pre><h3><a name="V3.68p4_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- In DEC C, &lt;time.h&gt; does define the timeval struct.  (time_.h)

Changes gsdll_init() to take an additional argument, a window handle.  This
is a NON-BACKWARD-COMPATIBLE change.  (dll.doc, dwdll.h, gsdll.h, dwdll.cpp,
dwmain.cpp, dwmainc.cpp, gsdll.c)

</pre><h3><a name="V3.68p4_Fonts"></a>Fonts</h3><pre>

Updates more Fontmaps to include the new URW++ fonts.  (Fontmap.OS2,
Fontmap.ATM)

</pre><h3><a name="V3.68p4_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The default operator array table wasn't big enough.  (iinit.c)
	- Some signed/unsigned discrepancies caused compilation warnings.
(imain.c, imainarg.c, zfile.c)

Adds encoding vectors for Windows 3.1 Latin 1, Latin 2, and Latin 5
encodings.  None of these are loaded in the standard configuration.
(gs_wl{1,2,5}_e.ps)

</pre><h3><a name="V3.68p4_Library"></a>Library</h3><pre>

Fixes bugs:
	- Some tracing output was incorrect or missing.  (gxdither.c)
	- Resized objects in the C heap had incorrect bookkeeping
information (bug introduced in 3.68).  (gsmemory.c)
	- Image pixels that fell exactly on device half-pixel boundaries
could get discarded.  (gximage0.c)
	- The bounding box device didn't set a variable properly and didn't
implement end_image, leading to invalid memory accesses.  (gdevbbox.c)
	- Fonts with BuildChar routines written in C didn't work properly
with kshow or xyshow.  (gschar.c)

Adds some additional tracing output for Patterns.  (gxpcmap.c)

Adds tracing output for freeing malloc'ed blocks at the end of execution.
(gsmemory.c)

Adds a gs_dashpath procedure that expands dashes in the same way that
gs_flattenpath expands curves.  (gspath.h, gspath1.c)

</pre>

<h2><a name="Version3.68p3"></a>Version 3.68 patch 3 (5/17/96)</h2>

<p>
More bug fixes during the beta test period.  AccurateScreens now works
properly.

<h3><a name="V3.68p3_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The help message was too long to fit on a PC screen or standard
terminal.  (imainarg.c)
	- Failure to run tar_cat wasn't detected.  (unix-end.mak,
unixtail.mak)

</pre><h3><a name="V3.68p3_Utilities"></a>Utilities</h3><pre>
Fixes bugs:
	- In the PostScript files produced by pdf2ps, images using ASCII85
encoding would cause a typecheck error.  (gs_pdf.ps)
	- pdf2ps wrote out strings longer than 200 characters incorrectly.
(pdf_2ps.ps)

</pre><h3><a name="V3.68p3_Drivers"></a>Drivers</h3><pre>

Fixes bugs in gdevcdj.c (according to the author, we have no way to test
this):
	- The driver used to use Colors as well as ProcessColorModel to
define the process color model.  (devices.doc, gdevbjc.h, gdevcdj.c)
	- Incorrect or inconsistent settings of BitsPerPixel and
ProcessColorModel, or setting one but not the other, could leave the driver
in an inconsistent state.  (gdevcdj.c)

Fixes bugs in the MS Windows driver:
	- Insufficient memory for the backing bitmap could cause a GPF.
(gdevmswn.c, gdevwdib.c)
	- Invalid parameters could cause a crash within the DLL code.
(gdevwdib.c)

Adds a user-contributed driver for the CalComp Raster Format.  (devs.mak,
gdevccr.c)

Adds an anti-aliasing option for MS Windows.  (gdevmswn.c, gdevwdib.c)

</pre><h3><a name="V3.68p3_Platforms"></a>Platforms</h3><pre>

Fixes bugs in the Windows platform:
	- One had to type "quit" twice to exit.  (dwdll.h, dwdll.cpp)

</pre><h3><a name="V3.68p3_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Platform fonts didn't work properly if the document's primary
encoding was the standard MS Windows encoding.  (ifont.h, gs_wan_e.ps)
	- stringwidth with a Type 1 font could give a spurious typecheck
error (bug introduced in 3.65).  (zcharout.c)
	- If a DOS editor added a ^Z to the end of the Fontmap file, an
error occurred during initialization.  (gs_fonts.ps)
	- Halftones that didn't specify a value for AccurateScreens
sometimes ignored the setting of the AccurateScreens user parameter.
(zht2.c)

</pre><h3><a name="V3.68p3_Library"></a>Library</h3><pre>

Fixes bugs:
	- gs_join_none was defined, but not implemented.  (gxstroke.c)
	- A bookkeeping list for fonts could get confused, causing invalid
memory accesses.  (gsfont.c)
	- An I/O error or internal error would cause the band list
rasterizer to go into an infinite loop.  (gxclread.c)
	- The algorithm for choosing screen angles and frequencies produced
poor results.  (gshtscr.c)
	- Color screens were broken (bug introduced in 3.68).  (gxdht.h,
gzht.h, gsht.c, gshtscr.c)

</pre>

<h2><a name="Version3.68p2"></a>Version 3.68 patch 2 (5/13/96)</h2>

<p>
This is another set of patches for the next general release.

<h3><a name="V3.68p2_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- Windows NT and Windows 95 implementations were identified as
"under development" rather than available.  (README)
	- There were several other minor errors in the README file.
(README)
	- The claimed current IJG JPEG version was incorrect.  (jpeg.mak)

Splits off information for new users into a separate file.  (README,
new-user.doc)

</pre><h3><a name="V3.68p2_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- gettimeofday takes 2 arguments on SVR4 systems more recent than
SVR4.0.  (make.doc, ansihead.mak, cc-head.mak, gcc-head.mak, time_.h)

Changes the default Unix data installation directory from /usr/local/lib to
/usr/local/share, which seems to be favored by more recent Unix systems
(except for some Linux versions, which still use /usr/local/lib, and BSD/OS,
which puts Ghostscript in /usr/contrib/lib.)  (ansihead.mak, cc-head.mak,
gcc-head.mak, ugcclib.mak)

Changes the unset commands in the Unix script to assignments, because a few
older Unix shells don't provide unset.  (unixtail.mak)

</pre><h3><a name="V3.68p2_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- An #include incorrectly referred directly to a system header.
(gdevpdft.c)
	- CMYK devices took an excessive amount of time clearing the page to
white.  (gdevm32.c)

Adds a compile-time option to the 'bit' drivers to remove top and bottom
whitespace.  This change was required in order to track down a customer bug.
(gdevbit.c)

</pre><h3><a name="V3.68p2_Interpreter"></a>Interpreter</h3><pre>

Updates the interpreter for the split in the gstate API.  (igstate.h)

</pre><h3><a name="V3.68p2_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Some compilers don't define NULL widely enough.  (spngp.c)

</pre><h3><a name="V3.68p2_Library"></a>Library</h3><pre>

Fixes bugs:
	- There was a minor typo (&amp; for &amp;&amp;) that didn't affect execution.
(gxccman.c)
	- There was a trailing comma in an enumeration.  (gsiparam.h)
	- Internal and public interfaces weren't separated properly.  THIS
IS A NON-BACKWARD-COMPATIBLE CHANGE for clients using certain undocumented
interfaces to the graphics state.  (gsstate.h, gxstate.h, gzstate.h,
gsstate.c)
	- A 'private' declaration was missing (yet again).  (gxclimag.c)

</pre>

<h2><a name="Version3.68p1"></a>Version 3.68 patch 1 (5/10/96)</h2>

<p>
This is the first bug fix (patch) incremental release for the next
general release.

<h3><a name="V3.68p1_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- Many Windows-specific files were omitted from the previous
fileset: dw*.rc, dw*.cpp.

</pre>

<h2><a name="Version3.68"></a>Version 3.68 (limited) (5/9/96)</h2>

<p>
This release cleans up the new Windows files, mostly implements the
high-level driver API for bitmap images, and adds practical strip
(AccurateScreens) halftoning.  This is the first "serious beta" fileset for
the next general release.  It still has more problems than I would have
liked.

<h3><a name="V3.68_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The names of the executable files for MS Windows were out of date.
(make.doc)
	- gxcindex.h still referred to "drawing color".  (gxcindex.h)
	- The name of the default font directory for Unix systems was
incorrect.  (make.doc)

Moves the list of files required for installation, and some other
installation instructions, from make.doc to install.doc.  (install.doc,
make.doc)

Adds a description of the PNGPredictor filters.  (language.doc)

Updates the documentation of the higher-level driver procedures to match the
specification changes.  (drivers.doc)

Documents the change in the Watcom build procedure.  (make.doc)

Improves the documentation of bitmap IDs.  (gxbitmap.h)

Adds documentation for the new strip_tile_rectangle and strip_copy_rop
driver procedures.  (drivers.doc)

Changes the few remaining direct FTP addresses in README to URLs.  (README)

Notes that zlib does not compile correctly on IRIX 6.n with optimization.
(make.doc)

Adds references to PDF and TrueType fonts to language.doc.  (language.doc)

Updates fonts.doc to remove references to fonts.mak.  (fonts.doc)

Describes how to substitute an LZW compressor for the LZW-compatible
compressor provided in the standard release.  (make.doc)

</pre><h3><a name="V3.68_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- Some lines had exceeded the 120-character limit of the
MS-DOS shell.  (int.mak)
	- The configuration files weren't generated correctly when CONFIG
wasn't an empty string.  (unixhead.mak)

Factors out shared DLL makefile rules into a new file.  (bcwin.mak,
bcwin32.mak, dwcommon.mak)

Makes the cp and rm commands into makefile parameters, allowing automatic
generation of build scripts even in the MS-DOS and MS Windows environments
where the shell requires the CALL command for sub-scripts.  (*.mak,
genconf.c)

Adds the PDF writer to the default Unix configurations.  (ansihead.mak,
cc-head.mak, gcc-head.mak)

Adds TrueType support to all Level 2 configurations.  (int.mak)

Removes fonts.mak, which is no longer relevant.  (fonts.mak)

Brings the font compilation procedures up to date.  (cfonts.mak, int.mak)

</pre><h3><a name="V3.68_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- There was an extra 'show' in one file.  (align.ps)

</pre><h3><a name="V3.68_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The bit devices were missing the map_color_rgb procedure.
(gdevbit.c)
	- The MS Windows driver sent a redundant message. (gdevmswn.c)

Adds a device that keeps track of the page bounding box.  This device is not
included in any standard configuration.  (drivers.doc, gdevbbox.h,
gsmatrix.h, gsstruct.h, gxdevice.h, gdevbbox.c, gdevnfwd.c, gsmatrix.c)

Updates the PDF writer to track the changes in the high-level driver API,
and to write out images in a reasonable way.  NOTE: the current
implementation doesn't write out CIE color space parameters, so CIE-color
images won't be colored accurately.  (gdevpdf.c, gdevpdfi.c)

Adds a forwarding procedure for tile_rectangle.  (gxdevice.h, gdevnfwd.c)

Changes the copyright notices on the PDF writer to be the same as on the
rest of Ghostscript.  (gdevpdf*.[ch])

Updates Gunther Hess's Epson Stylus Color driver from 1.21 to 1.90.  (Aladdin
Enterprises takes no responsibility for this driver: if you have questions,
contact the author.)  (devices.doc, devs.mak, gdevstc*.c, gdevstc.h)

</pre><h3><a name="V3.68_Platforms"></a>Platforms</h3><pre>

Removes some obsolete MS Windows files and #defines.  (gp_mswtx.h,
gp_mswtx.c, gp_mswin.h)

Works around a memory limitation in the Watcom make utility.  (wmakebat.bat)

</pre><h3><a name="V3.68_Fonts"></a>Fonts</h3><pre>

Changes the standard Fontmap from using the low-quality fonts converted from
bitmaps to using high-quality fonts recently contributed by URW++.
(Fontmap, Fontmap.GS)

</pre><h3><a name="V3.68_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- A macro containing an if-else, and a macro generating a compound
statement, could cause incorrect grouping of 'if' statements.  (files.h,
ostack.h)
	- .setrasterop didn't pop its operand.  (zrop.c)
	- A rounding inaccuracy could cause bounding box rangecheck errors.
(gsdps1.c)
	- CIE-based images in PDF files didn't work.  (gs_pdf.ps)
	- The page parameter .MediaSize didn't get updated when PageSize was
set.  (This is just the most recent manifestation of the setpagedevice
morass.)  (gs_setpd.ps)
	- %lineedit and %statementedit were limited to 160 characters.
(zfileio.c, ziodev.c)
	- Compiled initialization files didn't work properly.  (geninit.c,
gs_l2img.ps)
	- Attempting to parse a command line with argc = 0 caused a crash.
(imainarg.c)

Renames some files to allow separating the non-DLL 'main' procedure into a
separate file, and to make the file naming more consistent:
	gs.c (except for 'main') =&gt; imainarg.c
	gsmain.c =&gt; imain.c
gs.c now consists only of 'main'.  The name gs.c is still inconsistent (it
should be i- something), but at least it's consistent with the name of the
executable.  (*.mak, imain.h, iminst.h, imainarg.h, gs.c, gsmain.c, imain.c,
imainarg.c)

Adds PNGPredictorEncode/Decode filters, and increases the size of filterdict
slightly to make room for them.  (iinit.c, zfpngp.c)

Makes zwrite external, per a customer request.  (opextern.h, zfileio.c)

Updates clients to work with the new API-based bitmap imaging calls.
(iimage.h, zcolor1.c, zimage2.c, zpaint.c)

Updates clients for the split in gscspace.h.  (zcie.c, zcolor1.c, zcolor2.c,
zcsindex.c, zcssepr.c, zimage2.c, zpaint.c, zpcolor.c)

Updates clients for strip-based halftones.  (zpcolor.c)

Updates the initialization code to pass the correct (system) allocator to
the library initialization.  (imain.c)

</pre><h3><a name="V3.68_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- If a filter reached EOD exactly at the end of reading data for
certain operations, it didn't get closed automatically.  (stream.c)
	- The LZW-compatible encoding filter reset procedure had an
incorrect return type.  (slzwce.c)

Changes the ASCIIHexEncode filter to insert \ns in fewer places, to be
somewhat more compatible with the Adobe implementation.  (sstring.c)

Adds PNGPredictorEncode/Decode filters that implement the pixel prediction
algorithms in the PNG specification.  (We'd like to use the code in the PNG
library, but it's too deeply embedded in the rest of the PNG machinery, and
it also doesn't provide for suspendable I/O.)  (spngpx.h, spngp.c)

</pre><h3><a name="V3.68_Library"></a>Library</h3><pre>

Fixes bugs:
	- A test for pure color was backwards, causing garbage output or
possible address or floating point exceptions.  (gxclpath.c)
	- A macro containing an if-else could cause incorrect grouping of
'if' statements.  (gsrefct.h)
	- The default implementation of RasterOp didn't handle the device
depth correctly.  (gdevmrop.c)
	- The memory device implementation of RasterOp truncated 24-bit
constant source or texture values to 8 bits.  (gdevmrop.c)
	- A typo caused the garbage collector to miss an internal buffer
used when rendering images.  (gximage.h)
	- gs_debug_out was only defined if DEBUG was set.  (gdebug.h)
	- The raster of horizontally replicated tiles was incorrect.
(gxht.c)
	- A data type might not be declared, causing a compilation error.
(gscoord.h)
	- Empty TrueType glyphs weren't handled properly.  (gstype42.c)
	- Fonts with a build procedure written in C could cause an invalid
memory access.  (gschar.c)
	- The initial point of a band list path sometimes didn't get
written, causing excess or missing filled regions.  (gxclpath.c)
	- Characters between 49 and 56 bits wide were rendered incorrectly
when banding.  (gxclbits.c)

Renames gsimage*.c as gximage*.c, to reflect more accurately the position of
these files in the architecture.  (gsimage*.c, gximage*.c)

Fully implements the high-level bitmap image calls in the driver API.  This
includes some driver API changes; however, this part of the API was clearly
documented as not stable enough to rely on.  (gxdevice.h, gximage.h,
gdevbbox.c, gdevddrw.c, gdevnfwd.c, gsimage.c, gximage*.c)

Splits the color space header into client and implementation, as with many
others.  (gscspace.h, gxcspace.h, gximage.h, gscie.c, gscolor.c, gscolor1.c,
gscolor2.c, gscsepr.c, gsimage.c, gspcolor.c, gsstate.c, gxcmap.c,
gxpcmap.c)

Extends band lists to handle high-level images.  NOTE: This facility is
patched out because there is not yet a way to pass the necessary color
rendering information through the band list.  (gxcldev.h, gxclist.h,
gxclpath.h, gxclimag.c, gxclist.c, gxclpath.c, gxclread.c)

Implements fixed2float and float2fixed more efficiently on machines with
slow floating point.  (gxfixed.h, gscoord.c, gsmisc.c)

Makes one further NON-BACKWARD-COMPATIBLE change in the existing
higher-level driver procedures (fill_path, stroke_path, fill_mask): we make
the imager state pointer an explicit argument, rather than a member of the
gx_fill/stroke_params structure.  We now consider the specification of these
procedures stable, and have removed the "subject to change" notice from the
documentation.  (gxdevice.h, gxpaint.h, gdevbbox.c, gdevnfwd.c, gxacpath.c,
gxclpath.c, gxclread.c, gxfill.c, gxpaint.c, gxstroke.c)

Extends halftone bitmaps to include "strip" and "shift" information,
allowing halftone cells with arbitrary angles to be stored in space
proportional to the number of bits in the cell rather than the square of the
number of bits.  This requires adding new (optional) strip_tile_rectangle
and strip_copy_rop driver procedures that are like tile_rectangle and
copy_rop respectively but accept a strip bitmap rather than an ordinary
tile; these procedures supersede tile_rectangle and copy_rop (although these
also remain, defined in terms of the new ones).  This also requires making
small but NON-BACKWARD-COMPATIBLE changes in several internal interfaces.
(gdevmem.h, gdevprn.h, gsdcolor.h, gxbcache.h, gxbitmap.h, gxcldev.h,
gxclip2.h, gxclist.h, gxdevice.h, gxdevrop.h, gxdht.h, gxfcache.h,
gxhttile.h, gxpcolor.h, gzht.h; gdevabuf.c, gdevbbox.c, gdevdflt.c,
gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c, gsht.c, gsht1.c, gshtscr.c,
gspcolor.c, gsstate.c, gxcht.c, gxclbits.c, gxclip2.c, gxclist.c,
gxclpath.c, gxclread.c, gxcpath.c, gxdcolor.c, gxdither.c, gxht.c,
gximage2.c, gxpcmap.c, ...)

Adds "no join" as a line join type.  NOTE: this is not actually implemented
yet.  (gslparam.h)

Changes the initialization code so that it passes the system allocator as an
argument to module initialization procedures.  While this is theoretically a
NON-BACKWARD-COMPATIBLE change, module initialization procedures are not
documented and presumably are not used by any code outside the
implementation.  (gscdefs.h, gconf.c, gdevmrop.c, gsinit.c, gxclimag.c,
gxclpath.c)

Splits up gs_lib_init into two procedures, allowing specification of a
different default allocator for the library.  (gslib.h, gsinit.c)

Adds a resize_object operation to the allocator API.  (gsmemory.h,
gsalloc.c, gsmemory.c)

</pre>

<h2><a name="Version3.67"></a>Version 3.67 (limited) (4/12/96)</h2>

<p>
This release restructures the MS Windows and OS/2 code to be primarily DLL-
rather than EXE-based.  See under Platforms below for more news.  This
release was put out in a hurry in order to get the new DLL code into
testers' hands; it has more rough edges than usual.

<h3><a name="V3.67_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- A definition &amp; use comment was incorrect.  (scanchar.h)
	- William Bader's e-mail address was wrong.  (README)

Adds documentation for the new begin_image, image_data, and end_image
procedures.  THIS INTERFACE IS STILL SUBJECT TO CHANGE.  (drivers.doc)

</pre><h3><a name="V3.67_Procedures"></a>Procedures</h3><pre>

Renames all the *core.dev modules as *lib.dev.  (int.mak, *lib.mak, vms.mak,
gdevmrop.c)

Updates all the remaining makefiles to IJG JPEG version 6a.  (*.mak)

Moves the configuration parameter definitions from gconf.c to a new file
gscdefs.c.  (bcwin*.mak, *lib.mak, gs.mak, int.mak, lib.mak, unixtail.mak,
vms.mak, gconf.c, gscdefs.c)

</pre><h3><a name="V3.67_Platforms"></a>Platforms</h3><pre>

Restructures the MS Windows and OS/2 code to be primarily DLL- rather than
EXE-based.  This involves two minor NON-BACKWARD-COMPATIBLE changes to the DLL
interface, documented near the end of dll.doc:

	- Adding argv and argc as arguments to gsdll_init.

	- Adding a new message type, GSDLL_POLL, to the callback procedure.

(bcwin*.mak, devs.mak, os2.mak, dll.doc, install.doc, dw*.*, gsdll*.*,
gdevms*.*, gdevpm.c, gdevw*.c, gp_mswin.c, gp_os2.c, gsos2.def, gswin.rc)

Adds the BMP drivers to the Watcom platform.  (watc.mak)

</pre><h3><a name="V3.67_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- gs.c assumed the presence of stdio.  (gs.c)

Defines a new API entry point that is the equivalent of command line
invocation.  (imain.h, imainarg.h, gs.c)

Changes clients to conform to the changes in gsimage.h.  (zimage2.c,
zpaint.c)

Speeds up the search operator slightly.  (zstring.c)

</pre><h3><a name="V3.67_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- If the PDF interpreter was present, running a PostScript file
didn't close the file properly if it caused an error.  (pdf_main.ps)

Speeds up embedded font loading by making an internal buffer bigger.
(pdf_font.ps)

</pre><h3><a name="V3.67_Library"></a>Library</h3><pre>

Fixes bugs:
	- There could be some non-zero garbage between the width and the
next multiple of bitmap_align_mod for copy_alpha.  (The driver API
specification explicitly allows this, but it upset one customer.)
(gxccman.c)
	- Nibble-swapped alpha values could be displaced in memory by one
pixel, damaging the output.  (gdevabuf.c)

Makes further changes towards adding high-level bitmap image calls to the
driver API.  This includes the following minor NON-BACKWARD-COMPATIBLE
changes to the interface defined in gsimage.h:

	- changing MultipleDataSources from a member of the gs_image_t
	structure to an argument of gs_image_init;

	- changing the default image parameter values from constant
	structures to procedures that initialize the structure.

As far as we know, this doesn't affect any existing client code.
(gsimage.h, gsiparam.h, gxdevice.h, gdevddrw.c, gdevnfwd.c, gsimage.c,
gspcolor.c, gxccache.c)

Removes an unnecessary level of call for path filling.  (gxpaint.h,
gxfill.c, gxpaint.c)

</pre>

<h2><a name="Version3.66"></a>Version 3.66 (limited) (4/8/96)</h2>

<p>
This release adds support for TrueType fonts and Type 42 (encapsulated
TrueType) PostScript fonts.  The MS Windows driver now interacts properly
with the garbage collector.  This release also includes a new, high-quality
set of free fonts.

<h3><a name="V3.66_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The list of generic makefiles had gotten out of date.  (make.doc)

Adds a mention of the bmv program, created by a user and available under the
GPL.  (README)

Notes that a bug in gcc 2.7.x prevents these versions from compiling
Ghostscript.  (make.doc)

Clarifies the meaning of "inverted" masks.  (gsimage.h)

Improves the documentation of the stack sizing parameters.  (interp.c)

Improves the documentation of the copy_rop driver procedure.
(drivers.doc)

Notes that all subclasses of gx_device must explicitly include the
device_finalize finalization procedure.  (gxdevice.h)

Updates the documentation of the high-level driver API to reflect the change
in gx_drawing_color, and the addition of the new polygon and image drawing
procedures.  (drivers.doc)

Updates the documentation for building zlib and libpng.  (make.doc)

</pre><h3><a name="V3.66_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The environment space overflowed on some inferior Unix systems.
(unixtail.mak)

Adds a ttfont.dev "feature" for including the TrueType interpreter and the
ability to handle Type 42 fonts.  A new procedure, .loadttfont, allows
loading a TrueType font directly (by converting it to a Type 42 on the fly).
(gs.mak, int.mak, lib.mak)

Updates the makefiles and procedures to libpng 0.88 and zlib 1.0.
(libpng.mak, zlib.mak)

</pre><h3><a name="V3.66_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- pdf2ps could produce lines longer than 255 characters.
(pdf_2ps.ps)

Removes some unnecessary and error-inviting code from pdf2dsc.  (pdf2dsc.ps)

Updates lines.ps to test the new stroke code more fully.  (lines.ps)

Allows omitting the second argument of ps2pdf, as for ps2epsi.  (ps2pdf)

</pre><h3><a name="V3.66_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A routine was incorrectly declared "private".  (I wish gcc caught
this!)  (gdevpdf.c)
	- A 'const' was omitted in a parameter list.  (gdevpdfp.c)
	- Some imported procedures didn't have prototypes declared.
(gdevpdft.c)
	- The ProcSet list for PDF files didn't include Text when it was
needed.  (gdevpdfx.h, gdevpdf.c, gdevpdft.c)
	- Text in PDF output ignored the color setting.  (gs_pdfwr.ps,
gdevpdft.c)
	- Text in PDF output could be positioned incorrectly.  (gdevpdft.c)
	- pdfmarks could produce an error when producing PDF output.
(gs_pdfwr.ps)

Slightly improves the text output of the PDF writer.  (gs_pdfwr.ps,
gdevpdft.c)

Defines driver procedures for filling trapezoids (with the parallel edges
parallel to a coordinate axis), parallelograms (with arbitrary orientation),
triangles (ditto), and minimum-width lines (ditto).  (Note that the last of
these obsoletes the former draw_line procedure.)  (gdevmem.h, gdevprn.h,
gxdevice.h, gxdraw.h (deleted), gdevddrw.c, gdevdflt.c, gdevht.c,
gdevnfwd.c, gsimage[12345].c, gxacpath.c, gxclist.c, gxclip2.c, gxcpath.c,
gxdraw.c (deleted), gxfill.c, gxpcmap.c, gxstroke.c)

Adds "sketched" driver procedures for high-level bitmap / pixmap image
drawing.  In this release, the argument lists are incomplete, and the
procedures are stubs: don't try to use them!  [see previous entry]

Changes the screen update strategy for the X Windows driver from a
compile-time option to a settable run-time variable.  (gdevx.c)

Patches around a problem with libpng 0.88 that can't be fixed without
editing a configuration file.  (gdevpng.c)

</pre><h3><a name="V3.66_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- %g formats with sscanf don't work on NeXT systems.  (gdevpdft.c,
iutil.c, zdouble.c)
	- getenv could be declared inconsistently.  (gp_unix.c)

</pre><h3><a name="V3.66_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- The Type 1 font interpreter sometimes set the flatness too large.
(gstype1.c)
	- Fonts defined by definefont could never be garbage collected.
(gsstruct.h, gxfcache.h, gxfont.h, gxfont0.h, gxfont1.h, gsfont.c,
gsfont0.c)
	- Type 0 fonts weren't garbage collected properly.  (gsfont0.c)
	- Compiled fonts caused a compilation error (bug introduced in
3.65).  (ifont.h)
	- If a Type 1 font used hint replacement, hints could be applied
more than once, distorting the character shape.  (gxtype1.h, gxhint3.c)
	- Oversampling wasn't applied to large enough characters.
(gschar.c)

</pre><h3><a name="V3.66_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The scanner accepted /[, /], /&lt;&lt;, and /&gt;&gt; as literal names (and
similarly for //).  It isn't obvious from the Red Book, but the Adobe
implementations don't accept these.  What a nuisance!  (gs_btokn.ps,
gs_init.ps, pdf_2ps.ps, pdf_base.ps, pdf_main.ps, iscan.c)
	- A spurious stackoverflow could occur under unusual conditions.
(istack.c)
	- The values of OrigFont and ScaleMatrix in scaled fonts reflected
only the most recent scaling operation, not the original font and the
combined scaling operation.  (zfont.c)
	- The default size of systemdict had become slightly too small.
(iinit.c)
	- Type 1 characters defined by PostScript procedures were called
incorrectly.  (zcharout.c)

Removes the papersize operator from statusdict, since it is not documented
anywhere in the Adobe literature and didn't interact properly with the
various ways of setting the page size.  (gs_statd.ps)

Changes the one client of sskip to match the changed API.  (zpaint.c)

Changes clients to reflect the creation of sstring.h.  (iscan.h, zfilter.c)

Adds PSStringEncode as an accessible filter.  (zfilter.c)

Adds support for TrueType and Type 42 fonts.  (gs_fonts.ps, gs_ttf.ps,
gs_typ42.ps, bfont.h, icharout.h, ifont.h, zchar1.c, zchar42.c, zcharout.c,
zfont1.c, zfont2.c, zfont42.c)

Adds a few ANSI sheet sizes (commented out, for documentation only).
(gs_statd.ps)

</pre><h3><a name="V3.66_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Clients who called pdfopen/close rather than runpdf could get an
error (PSLevel1 undefined).  (pdf_main.ps)
	- Some masked images were displayed with black and white inverted.
(gs_pdf.ps)
	- In Level 1 output produced by pdf2ps, images caused a syntaxerror.
(gs_pdf.ps)
	- If a PDF file had multiple xref sections and later sections added
new objects, an error occurred.  (pdf_main.ps)
	- Some very old Level 1 interpreters couldn't deal with a file
object embedded in a procedure.  (gs_pdf.ps)

</pre><h3><a name="V3.66_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The PSStringEncode filter didn't always produce printable 7-bit
output.  (sstring.c)
	- The CCITTFaxDecode filter didn't implement DamagedRowsBeforeError.
(scfx.h, scfd.c)
	- Interpolated images displayed nothing if the data stream ended
before the image height was reached.  (siscale.h, gsimage5.c, siscale.c)

Changes the sskip stream procedure so that it takes an additional argument
where it returns the actual number of bytes skipped.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE in the API.  However, as far as we know,
there are no external clients of this procedure.  (stream.h, stream.c)

Splits up sfilter.h so that the headers correspond more directly with the
implementations.  (sfilter.h, sstring.h, sstring.c)

</pre><h3><a name="V3.66_Library"></a>Library</h3><pre>

Fixes bugs:
	- The default device in the library configuration was device 1, not
device 0.  (bclib.mak, ugcclib.mak, watclib.mak, gslib.c)
	- Patterns could be rendered with small gaps between them.
(gspcolor.c)
	- Large characters could render inaccurately because of a numerical
boundary condition.  (gxpcopy.c)
	- The show_gstate pointer in the graphics state was not managed
properly, possibly leading to dangling pointers or GC errors.  (gsstate.c)
	- Bitmaps could get shifted to the left if ALPHA_LSB_FIRST was
selected (bug introduced in 3.53).  (gsbitops.c)
	- The garbage collector could move devices in memory, causing
problems with command list devices.  (gxdevice.h, gsdevice.c)

Continues restructuring the image handling code in preparation for adding a
high-level driver operation.  (gsimage[12345].c)

Starts to implement passing color mapping information (transfer function,
black generation, undercolor removal, CRD, halftoning) in the band list.
(gxfmap.h, gscolor.c, gscolor1.c, gsht1.c, gsstate.c)

Speeds up the path filling code a little more.  (gxdraw.c)

Removes the workaround for the gcc 2.7.0/1/2 optimizer bug, since this
turned out to cause more trouble than it was worth.  (stdpre.h)

Speeds up stroking dramatically for the case of butt or square caps, bevel
or beveled miter joins, and no fill adjustment, by filling parallelograms
and triangles directly rather than constructing and filling paths.  This is
an important common case for CAD drawings.  (gxdraw.h, gxdraw.c, gxstroke.c)

Adds support for TrueType and Type 42 fonts.  (gxfont.h, gxfont42.h,
gstype42.c)

Extends the memory manager to allow allocating objects that the garbage
collector won't move.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for
implementors of memory managers, but clients aren't supposed to have any of
these.  (gsmemory.h, gsmemory.c, gsalloc.c)

Makes dynamically created instances of registered devices immovable.
(gsdevice.c)

Unifies gx_drawing_color with (makes it equivalent to) gx_device_color.
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for implementors of the
higher-level driver procedures (fill_path, stroke_path, fill_mask).  We
regret that this was necessary, but the documentation in drivers.doc does
warn the reader: "DO NOT ASSUME THESE OPERATIONS WILL REMAIN UNCHANGED IN
FUTURE RELEASES."  These three procedures, at least, should now be stable.
(gsdcolor.h, gxcindex.h, gxdcolor.h, gxdevice.h, gximage.h, gxpaint.h,
gxpcolor.h, gdevdflt.c, gdevpdf.c, gdevpdfi.c, gdevxalt.c, gsimage.c,
gsimage2.c, gspcolor.c, gxacpath.c, gxccache.c, gxcht.c, gxclpath.c,
gxclread.c, gxdcconv.c, gxdither.c, gxfill.c, gxdraw.c, gxht.c, gxpaint.c,
gxpcmap.c, gxstroke.c)

</pre>

<h2><a name="Version3.65"></a>Version 3.65 (limited) (3/9/96)</h2>

<p>
This release adds garbage collection for device instances.  ****** NOTE:
Because of changes in memory management, if you are using the MS Windows
driver (mswin), you must run with -dNOGC.  This is a temporary problem which
will be fixed before the next beta release.

<h3><a name="V3.65_Documentation"></a>Documentation</h3><pre>
Documents the C API equivalent of a -d switch for setting a flag like
NOPAUSE.  (imain.h)

Splits off the NEWS entries for versions 3.0 through 3.33 into a new
file.  (history3.doc)

Adds a man page for ps2pdf.  (ps2pdf.1)

Documents the new memory management aspects of device drivers, and corrects
many other aspects of driver documentation that had become inaccurate.
(drivers.doc)

Updates the documentation for the gs_*.ps files.  (psfiles.doc)

Replaces .type1addpath with .type1execchar.  (language.doc)

Adds some more documentation on how band lists do read/write switching.
(gxclist.h)

Adds a reference to the new Genscript program, a free Ghostscript-based
replacement for enscript.  (README)

Notes that no further changes will be accepted for the gdevcdj.c file, which
has gotten completely out of hand.  (gdevcdj.c).

Documents the TextAlphaBits and GraphicsAlphaBits device parameters.
(language.doc)

</pre><h3><a name="V3.65_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- gs_pdfwr.ps and pdf2ps.1 weren't installed on Unix systems.
(unix-end.mak)
	- The pdf2ps shell script didn't accept any options.  (pdf2ps)
	- The rule for srle.$(OBJ) incorrectly specified a dependency on
srld.c.  (lib.mak)
	- The rule for command lists didn't include stream.$(OBJ).
(lib.mak)
	- The stack size for one configuration was set too small.
(watclib.mak)

Speeds up genconf by eliminating redundant file reading and processing.
(genconf.c)

Moves the pixel-difference filters from int.mak to lib.mak.  (int.mak,
lib.mak)

Moves the library parts of the HSB color and Level 1 path (arcs, pathbbox,
path enumeration) options from int.mak to lib.mak, and adds them to the
library makefiles.  (int.mak, lib.mak; bclib.mak. ugcclib.mak, watclib.mak)

</pre><h3><a name="V3.65_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- pdf2ps would fail if it encountered a font with a standard
encoding.  (pdf_2ps.ps)

Adds new switches to pdf2ps:
	-dPSBinaryOK allows writing binary image data in the output.
(pdf_2ps.ps)
	-dPSLevel1 forces Level 1 compatible output.  (int.mak,
unix-end.mak, gs_l2img.ps, gs_pdf.ps, pdf_2ps.ps, pdf_main.ps)
	-dPSNoProcSet causes the ProcSet to be loaded at run time, not at
conversion time -- primarily useful for debugging.  (pdf_2ps.ps)

Adds a utility for viewing PCX files, so we can preview high-resolution
output in a reasonable compressed format.  (unix-end.mak, viewpcx.ps)

</pre><h3><a name="V3.65_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- Some compilers require an extra #include to define structures even
if they are only referenced by pointers.  (int.mak, gdevpdf.c, gdevpdfp.c)
	- A procedure name was duplicated.  (gdevpdfi.c)
	- A pdfmark between a gsave and a grestore could cause a
rangecheck error.  (gdevpdfp.c)
	- A pdfmark between a gsave and a grestore could cause the
grestore to do an inappropriate initgraphics.  (gs_pdfwr.ps)
	- The pdfwrite driver could reinitialize the output file
unpredictably.  (gdevpdfp.c)
	- The PCX drivers didn't clear padding bytes at the ends of scan
lines.  (gdevpcx.c)
	- The PCX drivers didn't set the "version" field correctly (this was
OK in 2.6.1, bug introduced sometime since then).  (gdevpcx.c)
	- Whoever last touched the color inkjet drivers completely broke the
handling of the BitsPerPixel parameter, again.  We were able to half-fix it,
but the code is impossible to understand, let alone modify safely.
(gdevcdj.c)
	- Anti-aliased characters didn't work with banding.  (gxclpath.c)
	- The PGM/PPM drivers didn't recognize black-and-white pages for
optimization to PBM, only gray or colored.  (gdevpbm.c)
	- The color inkjet drivers initialized the params_size field of the
static instance incorrectly, resulting in garbage in the last few structure
members when instances were copied.  (gdevcdj.c)
	- The 24-bit PCX driver didn't pad each scan line to an even number
of bytes.  (gdevpcx.c)
	- The svga16 driver initialized its procedures incorrectly.
(gdevpcfb.c)

Adds text writing capability to the PDF writer.  In its present form, this
is a very bad hack: it only works for the 14 built-in fonts with their
standard encodings.  (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, gdevpdft.c)

Adds garbage collection and finalization for device instances (gscdefs.h,
gsdevice.h, gxdevice.h, gconf.c, gdevmrop.c, gsdevice.c, gslib.c, gsmain.c).
(See the "Driver instance allocation" section of drivers.doc for more
details about what is required to make this work.)

	- When an open device is freed (explicitly, by garbage collection,
or by 'restore'), if the device was allocated dynamically by Ghostscript's
standard allocator, the device's close procedure will be called.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE for dynamically created devices, which
formerly were not closed automatically, even when Ghostscript exited.

	- Device instances allocated in GC-able space will be traced
like other objects, assuming they have proper structure descriptors.

Provides a (very slow but correct) default implementation of copy_alpha.
(gxcindex.h, gdevdflt.c, gsimage4.c)

Removes the implementation of copy_alpha in gdevpbm.c, since this is now
implemented (more efficiently) in gdevm24.c.  (gdevpbm.c)

Adds TextAlphaBits and GraphicsAlphaBits as readable parameters for all
devices.  (gsdparam.c, gdevpbm.c, gdevsvga.c)

</pre><h3><a name="V3.65_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- There were some attempts to coerce long to short pointers
on segmented platforms.  (gsdparam.c, gstype1.c)
	- The stack could overflow on the 16-bit MS Windows platform.
(gxfill.c, gxclread.c)
	- The DLL callback parameter for window resize events was computed
incorrectly on 16-bit systems.  (gdevwdib.c)
	- A file included gxdevice.h unnecessarily.  (bcwin.mak,
bcwin32.mak, msvcwint.mak, gp_mswin.c)

</pre><h3><a name="V3.65_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Storing into a read-only dictionary with def or store was
allowed.  (dstack.h)
	- If the interpreter allocated extra space for a dictionary
to round its storage size up to a power of 2, it was possible for
length to exceed maxlength.  (idict.c, iinit.c)
	- The if and ifelse operators didn't check that their
'procedure' arguments were actually procedures.  (interp.c, zcontrol.c)
	- The undef operator was defined even in Level 1
configurations.  (We need this capability for all configurations, so
we always define .undef.)  (zdict.c, gs_*.ps, pdf_*.ps)
	- In Level 1 configurations, copying a dictionary should copy the
access attributes, but it didn't.  We have to work around this
compatibility quirk in a lot of places.  (gs_cidfn.ps, gs_cmap.ps,
gs_dps1.ps, gs_fonts.ps, gs_init.ps, gs_l2img.ps, gs_lev2.ps, gs_pdf.ps,
gs_pfile.ps, gs_res.ps, gs_setpd.ps, gs_type1.ps, zdict.c)
	- DSC comments that crossed a buffer boundary didn't call the
scan_dsc_proc.  (iscan.c)
	- "statusdict /setpage get exec" caused an error.  (gs_statd.ps)
	- The default size of systemdict had become slightly too small.
(iinit.c)
	- Doing a showpage or copypage would cause the equivalent of a
setpagedevice at the next restore or grestore.  We aren't entirely sure that
the fix we made doesn't have bad side-effects.  (gs_setpd.ps)
	- Not all filters accepted (and ignored) an optional dictionary
parameter on the stack.  (ifilter.h, zfbcp.c, zfdecode.c, zfilter.c,
zfilterx.c, zfzlib.c, zmisc1.c)
	- The PixelDifference filters required a Columns parameter, rather
than defaulting it to 1.  (spdiffx.h, zfdecode.c)
	- Contrary to the NEWS entry for release 3.60, the LZW filters did
not implement pixel differencing.  (zfdecode.c, zfilter2.c)
	- readstring with a 0-length string didn't signal a rangecheck.
This doesn't make a lot of sense to me, but it's what the Adobe
documentation specifies.  Unfortunately, we have to work around this in a
number of places that assumed the sensible definition (return () true
without reading anything).  (gs_l2img.ps, pdf_font.ps, zfileio.c)
	- Encoded number strings didn't work (bug introduced in 3.64).
(ibnum.c)
	- The allocator could produce spurious "free large 0x...... chunk
not found" messages.  (These didn't cause any harm, but they were
disturbing.)  (gsalloc.c)

Changes the default transfer function for high-resolution devices so
that it is the identity function if the device is continuous-tone.
(gs_init.ps)

Undoes the "subversion" of zgetdevice noted in release 3.61, since it
is now possible to copy devices safely.  (zdevice.c)

Changes the implementation of the garbage collector and restore so that
object finalization code may safely free objects.  (igc.c, isave.c)

Reimplements essentially all of Type 1 BuildChar in C.  (gs_init.ps,
gs_type0.ps (deleted), gs_type1.ps, ifont.h, zchar.c, zchar1.c, zfont.c)

Reimplements DISKFONTS as a separate feature (diskfont.dev), and changes it
to use Type 4 fonts rather than special machinery.  Currently this feature
is included only in the makefiles for 16-bit architectures.  (bc.mak,
bcwin.mak, int.mak, tc.mak, gs_diskf.ps, gs_fonts.ps, gs_type1.ps)

Converts the library search path from a list of strings to a (PostScript)
array of strings, one string per directory.  (iminst.h, main.h, gs.c,
gsmain.c, zfile.c)

Adds a hook procedure scan_comment_proc for processing all comments,
similar to scan_dsc_proc.  If both are set, scan_comment_proc is used only
for non-DSC comments.  (iscan.h, iscan.c)

</pre><h3><a name="V3.65_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Encrypted PDF files produced a random error (usually ioerror in
--token--) rather than a meaningful message.  (pdf_main.ps)
	- Color space setting didn't work.  (gs_pdf.ps)
	- The algorithm for skipping a possible blank line following the
'stream' keyword wasn't robust enough.  (We aren't sure the new algorithm is
exactly right, either.)  (pdf_base.ps)

Gets rid of the special handling of the LZW decoding filter, since the
filter itself now handles the Predictor facility.  (pdf_base.ps)

</pre><h3><a name="V3.65_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Configurations with LZW encoding but not decoding had an
undefined reference.  (lib.mak, slzwc.c, slzwd.c)
	- The LZW-compatible encoder didn't provide a 'reset' procedure.
(slzwce.c)
	- The PixelDifference filters didn't work for most parameter
combinations in which each pixel took up more than 1 byte.  (spdiff.c)
	- Temporary write streams could cause an infinite loop.  (We only
need such streams for the Predictor = 2 case of LZWEncode: this is why the
bug never showed up before.)  (stream.c)

Adds an optional reinitialization procedure to the stream template.  Note
that this is not the same as the PostScript 'reset' operation or the stream
resetting operation invoked by sreset: the reinit procedure in the template
reinitializes any internal state of the encoder or decoder without affecting
buffered data.  (scommon.h, strimpl.h, sbcp.c, sbhc.c, slzwce.c, slzwd.c,
slzwe.c, smtf.c, spdiff.c, srle.c) ****** NOT DONE YET: sbwbs.c, szlibd.c,
szlibe.c

Adds a decoding stream for the run-length compression used in PCX.
(spcxx.h, spcxd.c)

</pre><h3><a name="V3.65_Library"></a>Library</h3><pre>

Fixes bugs:
	- A recent edit introduced an extraneous right parenthesis.
(gpcheck.h)
	- A minor nit in a macro could cause incorrect grouping of 'if'
statements under implausible conditions.  (gsmdebug.h)
	- The first data plane buffer of an image enumerator didn't get
marked during garbage collection.  (gsimage.c)
	- The Watcom C compiler required splitting up a declaration.
(gxcmap.h)
	- The extern declarations for the tables in gconf.c weren't gathered
together in one place.  (gscdefs.h, gxiodev.h, gconf.c, gsdevice.c, gslib.c,
gsinit.c, gsiodev.c)
	- charpath and show produced different output.  We fixed this by
undoing a "bug fix", introduced in version 2.9, which suppressed hinting and
coordinate rounding for charpath; we aren't sure this won't cause some
obscure problems to reappear.  (gstype1.c)
	- Clipping with a rectangle usually created a 3-rectangle clipping
list, slowing down all drawing operations (performance bug only).
(gxacpath.c)
	- stroking in a rotated coordinate system sometimes thought lines
were always thin when they actually weren't.  (gxstroke.c)
	- An unsigned quantity wasn't properly converted to signed, possibly
causing band path coordinates to get mangled.  (gxclread.c)
	- A bug in the Borland compiler caused an unsigned quantity to be
interpreted as signed, causing band path coordinates to get mangled.
(gxclread.c)

Changes structure type pointers on 16-bit segmented systems to full
32-bit pointers.  This will increase time and space requirements very
slightly on these systems.  (gsmemory.h, gxobj.h)

Changes the memory manager so that object finalization code may safely free
objects.  (gsmemory.h, gsstruct.h, gsalloc.c, gsmemory.c)

Refactors the Type 1 CharString interpreter so it can be included in
the imager library.  (gstype1.h, gxtype1.h, gstype1.c)

Starts to refactor the implementation of band lists in memory so that it can
use any encoding/decoding filter.  Currently this choice is made at compile
time, but it could easily be made dynamic.  (gxclmem.h, gxclmem.c)

Starts to refactor image rendering so that, like path filling and stroking,
it only uses imager state and can be done after banding.  (gxcmap.h,
gxdraw.h, gximage.h, gsimage*.c, gxcmap.c)

Speeds up copy_mono for 2-bit-per-pixel devices a little.  (gdevm2.c)

Implements an optimized copy_alpha for 24-bit memory devices.  (gdevmem.h,
gdevm24.c)

Speeds up filling rectangles significantly.  (gsbitops.c)

Changes the band list rasterizer to use the memory space of the device
rather than the C heap: our allocator is considerably faster than malloc.
(gxclread.c)

Speeds up stroking a little, especially in 90 degree rotated coordinate
systems.  (gxstroke.c)

</pre>

<h2><a name="Version3.64"></a>Version 3.64 (limited, incremental) (1/27/96)</h2>

<p>
This release fixes a few more bugs, including some serious bugs in band
lists, and adds pdfmark processing to the PDF writer.  The PDF writer is
still not fit for real use, since it converts all text characters into 720
dpi bitmaps and turns images into zillions of tiny rectangles (!), but it
should be producing legal output.

<h3><a name="V3.64_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- Frans van Hoesel's e-mail address was incorrect.  (gdevdjet.c)
	- The man page for ansi2knr was out of date.  (ansi2knr.1)
	- The description of a procedure was out of date.  (gxdcolor.h)

Notes that several "optional" features are required in order to obtain the
full PostScript Level 1 functionality at the library level.  (lib.doc)

Documents the top-level interpreter API.  (imain.h)

Adds details on differences between the imager API and the PostScript
graphics operators.  (lib.doc)

Notes (here, in NEWS) that the change for device prototypes in 3.61 made the
protection attributes of a device significant for the first time.  Only the
writable attribute is significant so far.  (news)

</pre><h3><a name="V3.64_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The .dev rules in the library makefiles didn't list echogs as a
dependency.  (jpeg.mak, libpng.mak, zlib.mak)
	- The install rule tried to install gs.1.1 etc. rather than gs.1
etc.  (unix-end.mak)
	- The install rule tried to install some nonexistent *.1 files.
(unix-end.mak)

Adds 'help' and '?' procedures to assist users who don't read the
documentation.  (gs_init.ps)

Adds -A-, -E-, and -Z-... to turn off debugging flags.  (gs.c)

Adds a -dDELAYBIND switch to delay binding operators, to allow special
packages like pstotext to redefine them.  (gs_init.ps)

</pre><h3><a name="V3.64_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- Fonts produced by rollconv.ps left a couple of items on the
operand stack, and left array packing set to true.  (rollconv.ps)

Makes ansi2knr require that the first token after a function header be a
left brace on the next line, so it can cope with some macros in IJG release
6a.  Also updates it to work better without the GNU configure machinery, and
on some old compilers.  (ansi2knr.c)

Changes align.ps so it can be used directly to determine the margin
parameters.  (align.ps, psfiles.doc)

</pre><h3><a name="V3.64_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The TIFF/F (G3 and G4) drivers were broken (bug introduced in
3.60).  (gdevtfax.c)
	- The PDF writer produced invalid output for 0-width, 0-height
images.  (gdevpdfi.c)
	- The PDF writer wasn't a page device.  (gdevpdf.c)
	- The PDF writer assigned the Contents node rather than the Pages
node as the Parent of each page.  (gdevpdfx.h, gdevpdf.c)

Corrects the margin information for the DeskJet printers to be the actual
values observed on a printer; all of the values in the file were wrong.
(gdevdjet.c)

Adds pdfmark recognition and conversion to the PDF writer.  All documented
pdfmarks (ANN, ARTICLE, DEST, DOCINFO, DOCVIEW, LNK, OUT, PAGE, PAGES, PS)
are recognized and converted, but some of them are not converted correctly.
(gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfm.c)

Adds recognition of all Distiller parameters, except *ImageDict, to the PDF
writer.  Currently only ASCII85EncodePages actually has any effect.
(gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c)

Ensures that PDF output files include at least a default Info dictionary.
(gdevpdf.c)

Changes the handling of coordinates in PDF output files so that the scale is
always 72 dpi, and so that each graphics operator is on a line by itself,
for compatibility with Adobe Illustrator.  (gdevpdfx.h, gdevpdf*.c)

Adds a driver for ImageMagick's MIFF format.  The driver currently only
produces 24-bit, direct color, RLE compressed output.  (gdevmiff.c)

</pre><h3><a name="V3.64_Platforms"></a>Platforms</h3><pre>

Changes the gp_check_interrupts platform procedure so that instead of just
returning a Boolean, it can now also return a negative error code.  THIS IS
(THEORETICALLY) A NON-BACKWARD-COMPATIBLE CHANGE.  However, since all
implementations of this procedure should only have been returning 0 or 1 up
to now, no existing code should need to be changed.  (gpcheck.h, gsmisc.c)

</pre><h3><a name="V3.64_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- devicenames was accidentally deleted.  (gs_init.ps)
	- -dFAKEFONTS could cause the memory manager to waste a lot of time.
(gs_dps1.ps)
	- Using -r or -dFIXEDMEDIA with a non-page device caused an error.
(gs_init.ps)
	- A VMS compiler reserves the word "readonly", which was used as a
parameter name.  (imain.h, gsmain.c)
	- A garbage collection during the execution of x/y/xyshow with an
array providing the values could get confused.  (ibnum.h, ichar.h, stream.h,
ibnum.c, iscanbin.c, zchar.c, zchar2.c, zdps1.c, zupath.c)
	- Errors in encoded number strings produced a typecheck rather than
a rangecheck error.  (ibnum.c, zupath.c)

Updates the DCT filters for IJG release 6a.  (zfdctc.c)

Provides an API call for getting the real stdio files.  (imain.h,
gs.c, gsmain.c)

</pre><h3><a name="V3.64_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- If the CCITTFaxEncode stream encountered an output buffer boundary
while processing the last scan line of input, it could fail to process some
the scan line.  (scfe.c)
	- A couple of pointers weren't always initialized, possibly
confusing the garbage collector.  (stream.c)
	- The weighting coefficient structures used for image scaling
weren't declared properly for the garbage collector.  (siscale.h, siscale.c)

</pre><h3><a name="V3.64_Library"></a>Library</h3><pre>

Fixes bugs:
	- Unrotated patterns always used the bounding box size as the step,
rather than XStep/YStep.  (gspcolor.c)
	- Alpha computations for graphics could be seriously incorrect (bug
introduced in 3.6x).  (gdevabuf.c)
	- The length of the next_data_x command for the fill_mask operation
was incorrect, causing the band list to become confused (bug introduced in
3.63).  (gxclpath.c)
	- An extern was omitted, causing linker warnings.  (gxdevice.h)
	- RasterOps could cause an invalid access because the palette
for a memory device wasn't set.  (gdevmrop.c)
	- gximage.h was included unnecessarily.  (gspaint.c)
	- Color screens caused a segmentation fault (bug introduced in
3.6x).  (gxcht.c)
	- cshow returned the width in an incorrect coordinate system.
(gscoord.h, gschar.c)
	- Filling or stroking a path that lay entirely off the page in the
+X or +Y direction could corrupt memory (bug introduced in 3.6x).
(gxclpath.c)
	- When banding, painting characters with halftones produced random
results (bug introduced in 3.6x).  (gxclpath.c)
	- When banding, characters could get clipped when they shouldn't be
(bug introduced in 3.6x).  (gxclpath.c)
	- The default implementation of fill_mask could discard clipped
bitmaps (bug introduced in 3.6x).  (gdevdflt.c)
	- Non-halftoned 24-bit colors could get garbled when banding (bug
introduced in 3.6x).  (gxclist.c)
	- When banding, if a stroked path had subpaths that fell entirely
outside the current band, the rest of the path was drawn in the wrong place
(bug introduced in 3.6x).  (gxclpath.c)

Speeds up image interpolation on machines with slow floating point.
(siscale.h, siscale.c)

Speeds up interpolated images when using device color spaces.  (gxcvalue.h,
gxfrac.h, gdevht.c, gxcmap.c, gsimage.c, gsimage3.c)

Speeds up color mapping a little by removing tests and calls in favor of
code copying.  (gxcmap.c)

Implements RasterOp for 24-bit RGB devices.  (gdevm8.c, gdevm24.c,
gdevmrop.c)

</pre>

<h2><a name="Version3.63"></a>Version 3.63 (limited, incremental) (1/14/96)</h2>

<p>
This release has the usual collection of bug fixes, and two significant
additions: AccurateScreens, and the first draft of a PostScript-&gt;PDF
converter ("distiller").

<h3><a name="V3.63_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- Some documentation for pstoppm.ps was out of date.  (psfiles.doc)
	- Documentation for acctest.ps, view*.ps, and zeroline.ps was
missing.  (psfiles.doc)
	- The documentation for rollconv.ps omitted the .CSR file.
(rollconv.ps)

Removes an inappropriate RCS Id line.  (gs.1)

Adds a list of paper sizes to the man page.  (gs.1)

Suggests that driver authors use parameterization rather than copying when
possible.  (drivers.doc)

Adds an announcement of Ghostscript support on CompuServe.  (README)

Documents the new -dCOLORSCREEN switch and the existing -dDITHERPPI=lpi
switch.  (use.doc)

Notes that the OS/2 implementation now requires EMX/GCC 0.9b rather than
0.9a.  (install.doc)

Adds some new man pages.  (pdf2ps.1, ps2ascii.1)

Greatly expands lib.doc.  (lib.doc)

</pre><h3><a name="V3.63_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The pg target for Unix platforms didn't include some necessary
additional X11 libraries.  (unix-end.mak)
	- The Unix library makefile didn't define CCAUX or CCLEAF.
(ugcclib.mak)
	- Unix systems didn't `install' some .ps files.  (unix-end.mak)

Extends genconf so that features at the library level can have
initialization procedures.  (gconf.c, genconf.c, gsinit.c)

Adds a -dCOLORSCREEN[=false] switch to force enabling or disabling of
4-color screens.  (gs_init.ps, gs_setpd.ps)

</pre><h3><a name="V3.63_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The prfont utility didn't leave enough of a margin on the left.
(prfont.ps)
	- The ps2ascii utility still created files _temp_.out and _temp_.err
even though they are no longer used.  (ps2ascii.ps)
	- The acctest.ps file was empty, rather than including a test
program.  (acctest.ps)

Adds ps2pdf[.bat] scripts for invoking the new pdfwrite driver.  (ps2pdf,
ps2pdf.bat, unix-end.mak)

</pre><h3><a name="V3.63_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The x11alpha driver had a patch that suppressed output in many
cases.  (gdevxalt.c)
	- The X driver set up a parameter incorrectly in copy_color.
(gdevx.c)
	- An explicit cast was needed to handle a 'const' problem.
(gdevpng.c)

Adds a pdfwrite driver that creates syntactically correct PDF output.  The
output is only reasonable for fill/stroke graphics, not for text or images.
(iscan.h, sa85x.h, sfilter.h, gdevpdf.c, sfilter2.c, zfdecode.c)

</pre><h3><a name="V3.63_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The test for WinExec failure on Win32 was incorrect.  (gp_mswin.c)
	- getenv was declared redundantly on OS/2.  (gp_os2.c)
	- gs16spl.c was missing &lt;string.h&gt;.  (gs16spl.c)

</pre><h3><a name="V3.63_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Images read data in smaller and smaller increments (performance
bug only).  (zpaint.c)
	- Images with MultipleDataSources=true and two or more DataSources
referencing the same stream could get confused.  (zpaint.c)
	- Invoking setpagedevice with an undefined key, even with Policy =
1, caused an error.  (gs_setpd.ps)
	- IEEE floats in binary tokens or encoded number strings were read
incorrectly on CPUs that use non-IEEE floating point.  (ibnum.c)

Adds a 'const' to the second parameter of zimage_setup.  (zimage2.c,
zpaint.c)

Encapsulates the filling of free memory blocks in a macro.  (igc.c,
igcstr.c)

</pre><h3><a name="V3.63_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- If the first line of a file began with % but the line was longer
than 255 characters, an error occurred.  (pdf_main.ps)
	- Masked images didn't set the color before drawing.  (gs_pdf.ps)
	- Extraneous blank lines in the trailer or cross-reference region
caused an error.  (pdf_base.ps, pdf_main.ps)

</pre><h3><a name="V3.63_Streams"></a>Streams</h3><pre>

Speeds up image interpolation a little.  Much more could be still be done.
(siscale.c)

</pre><h3><a name="V3.63_Library"></a>Library</h3><pre>

Fixes bugs:
	- An error in handling a boundary condition could cause a horizontal
streak of pixels to be turned on or off when it shouldn't be.  (gxfill.c)
	- The new scan-line-based filling loop could write pixels twice.
(The old trapezoid-based loop still does write pixels twice.)  (gxfill.c)
	- For multi-plane images, gs_image_next only sets *pused for the
last plane; this wasn't documented.  (gsimage.h)
	- Images with MultipleDataSources=true and two or more DataSources
referencing the same stream could get confused.  (gsimage.h, gsimage0.c)
	- 12-bit gray images caused an invalid memory access.  (gsimage.c)
	- Nearly-zero-thickness lines didn't get filled, because the hack
that compensates for this peculiarity of the MS Windows PostScript driver
accidentally got disabled.  (gxfill.c)
	- Some casts to remove 'const' were omitted.  (gxclread.c)
	- 1-line-high bitmaps could get written in the band list with an
inconsistent number of bytes, causing errors when reading.  (gxcldev.h,
gxclbits.c, gxclist.c, gxclpath.c, gxclread.c)
	- Isolated dots produced by round caps usually disappeared.  (They
still disappear sometimes.)  (gxstroke.c)
	- On 16-bit platforms, the computation of t2 and t3 in
gx_curve_x_at_y could overflow, leading to incorrect output.  (gxpcopy.c)
	- Stroking horizontal or vertical lines could produce variations of
1 pixel in the line width.  (gxstroke.c)
	- The default clipping region for band rendering was too large,
leading to wasted work.  (gxclread.c)
	- Guarantees no double pixel writing when necessary, i.e., when a
non-idempotent RasterOp is selected.  (gsropt.h, gxfill.c)
	- For unrotated black-and-white images, one column of pixels at the
right edge of the image might be incorrect.  (gsimage1.c)
	- A const pointer was passed inappropriately.  (gxistate.h,
gscoord.c)
	- CIE color conversion could address 1 element beyond the end of an
array, with unpredictable results.  (gscie.c)

Separates out the higher-level band list facilities, so they can be an
optional feature.  (lib.mak, gxcldev.h, gxclpath.h, gxclbits.c, gxclist.c,
gxclpath.c, gxclread.c)

Implements bitmap (fill_mask) clipping in the band list.  (gxcldev.h,
gxclpath.h, gxclist.c, gxclpath.c, gxclread.c)

Starts to separate out the RasterOp facility as an optional feature.
(lib.mak, gxdevice.h, gxdevrop.h, gdevdflt.c, gdevmrop.c)

Encapsulates the filling of free memory blocks in a macro, at the request of
a licensee.  (gdebug.h, gsmdebug.h, gsmemory.h, gs.c, gsalloc.c, gsmemory.c,
gxbcache.c)

Speeds up fill_rectangle for 32-bit devices.  (gdevm32.c)

Speeds up path writing in band lists a little.  (gxclpath.c)

Implements AccurateScreens along the lines described in the Adobe
documentation.  The current implementation can produce very large
super-cells, so it will not always be able to actually increase the screen
accuracy.  (gxdht.h, gsht.c, gshtscr.c)

</pre>

<h2><a name="Version3.62"></a>Version 3.62 (limited, incremental) (12/26/95)</h2>

<p>
This release makes some licensee-requested improvements in the garbage
collector and fixes a couple of minor bugs.  It also constitutes a
checkpoint for the forthcoming forked 3.53 release.

<h3><a name="V3.62_Documentation"></a>Documentation</h3><pre>
Notes that for Win32s, gs16spl.exe must be in the same directory as
gswin32.exe.  (install.doc)

Changes `3.N' to a real version number in the man page.  (gs.1)

Adds a reference to dos-psv, another "dumb terminal" user interface for
Ghostscript intended for MS-DOS users.  (README)

</pre><h3><a name="V3.62_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The stack size for some of the PC platforms was set too small.
(watc.mak, watcwin.mak)

Changes the default value of ORIENT1 from false to true, i.e., assumes that
a value of 1 for the orientation parameter of setpageparams indicates
portrait orientation.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.  It only
affects files created for roll-media imagesetters.  (gs_init.ps, use.doc)

</pre><h3><a name="V3.62_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The definition of the op_index_op_array_table macro had an
incorrect trailing semicolon.  (opdef.h)
	- Setting the PageSize policy to 1 and then trying to set the page
size caused an error if FIXEDMEDIA was selected.  (gs_setpd.ps)

Changes the garbage collector marking phase so that instead of just using a
single block (allocated, free, or default) for the mark stack, it can chain
all three types of block together.  (igc.h, igc.c, igcstr.c, ilocate.c)

Refactors the garbage collector slightly to reduce inter-module
dependencies.  (int.mak, igc.h, igcstr.h, igcstr.c)

Changes the garbage collector to keep track of ranges within each chunk that
must be scanned if the mark stack overflows.  (gxalloc.h, igc.c)

Adds [write]===[only] procedures, which act like == but also print the
contents of dictionaries, and ppstack, which acts like pstack but uses ===.
Changes ESTACKPRINT and OSTACKPRINT to use === rather than ==.  (gs_init.ps,
gs_setpd.ps)

</pre><h3><a name="V3.62_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- If a PDF file substituted a calibrated color space for the
DeviceGray or DeviceRGB color space using a ColorSpace resource, the
PostScript file that pdf2ps produced from that PDF file caused an error.
(gs_pdf.ps)

</pre><h3><a name="V3.62_Library"></a>Library</h3><pre>

Fixes bugs:
	- The debugging code for checking the sorting of line lists didn't
check for an empty list.  (gxfill.c)

</pre>

<h2><a name="Version3.61"></a>Version 3.61 (limited) (12/10/95)</h2>

<p>
This limited release fixes a few bugs (including a couple that significantly
affected character quality) and also includes some substantial performance
improvements.

<h3><a name="V3.61_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The directory name for the PNG library was incorrect.
(libpng.mak)
	- The analysis of curve monotonocity in gxpcopy.c had an error.
(gxpcopy.c)

Changes the subdirectory names for zlib and libpng to be consistent.
(make.doc)

Documents a possible problem with object file format incompatibilities in
certain versions of Linux.  (make.doc)

Documents the new distinction between devices and device prototypes.
(language.doc)

Adds a pointer to DEC's free pstotext utility.  (README)

</pre><h3><a name="V3.61_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- zlib.mak omitted some files in the encoding module dependencies.
(zlib.mak)
	- os2.mak referred to png.mak rather than libpng.mak.  (os2.mak)
	- The png devices didn't include gdevpccm.$(OBJ) as a required file.
(devs.mak)
	- Some modules in lib.mak referred to stream.h, which was defined in
int.mak.  (int.mak, lib.mak)
	- Quite a few dependencies on header files were missing from the
makefiles.  (int.mak, lib.mak, *.mak)

Adds a 'pg' target to the Unix makefiles, for building profiling
configurations.  (unix-end.mak)

</pre><h3><a name="V3.61_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- Type 1 fonts in which some characters are defined by PostScript
procedures couldn't be compiled.  (ccfont.h, iccfont.c, font2c.ps)
	- pdf2ps didn't write Widths or Encoding in the converted file,
producing incorrect spacing and incorrect characters.  (pdf_2ps.ps)
	- markhint.ps didn't handle the Type 1 'div' operator, causing
typecheck errors.  (markhint.ps)
	- markhint.ps ignored the hstem3 and vstem3 hints.  (markhint.ps)

Changes the rollconv.ps utility to produce files whose names conform to the
8.3 length restriction, and to reduce the fixed RAM overhead for Kanji
fonts.  (rollconv.ps)

Adds a utility for detecting compiler problems that affect Ghostscript.
(bughunt.sh)

</pre><h3><a name="V3.61_Drivers"></a>Drivers</h3><pre>

Adds anti-aliasing capability (-dTextAlphaBits and -dGraphicsAlphaBits) to
the PGM and PPM drivers.  (gdevpbm.c)

Declares the static_procs member of the device structure as const *.  This
should have been done a long time ago!  (drivers.doc, gxdevice.h)

</pre><h3><a name="V3.61_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- Printing didn't work in 32-bit MS Windows environments.
(bcwin32.mak, gdevmswn.c, gp_mswin.c)
	- There were some compatibility problems with IBM C.  (os2.mak,
gsdll.h, gdevpm.c, gp_os2.c)

Adds the PNG drivers to the 32-bit MS Windows and OS/2 makefiles.
(bcwin32.mak, os2.mak)

Adds a conditional to work around a bug in gcc 2.7.x (it didn't recognize
that the target of a const T * might still be mutable through aliasing).
(stdpre.h)

</pre><h3><a name="V3.61_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Rasterizing a character in a Type 1 font with an invalid FontBBox
left some garbage on the operand stack (bug introduced in 3.52 or 3.60).
(gs_type1.ps)
	- The font substitution algorithm could fail or loop.  (gs_fonts.ps)

Adds a little more support for CID fonts and CMaps.  (gs_cidfn.ps,
gs_cmap.ps)

</pre><h3><a name="V3.61_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- An #include &lt;memory_.h&gt; was missing.  (ziodev.h)
	- Scanner-detected errors (primarily syntaxerror) didn't report the
file position.  (gs_init.ps)
	- Rotated characters were rendered incorrectly (bug introduced in
3.52).  (gstype1.c)
	- Some compilers got upset about the use of 'dict' as a variable
name.  (zdict.c)
	- Operand stack overflows sometimes didn't set the "requested" field
correctly.  (interp.c)
	- Using -dBufferSpace= with a non-printer device caused an error.
(gs_init.ps)

Adds zlibEncode/Decode filters.  (int.mak, zfzlib.c)

Separates devices from device prototypes.  Prototypes, which lack the
writable attribute, cannot be installed as the current device or have their
parameters changed.  This change allows Ghostscript to be exited and
restarted without being reloaded, which solves some problems with DLL
usage.  ****** WE HAD TO SUBVERT THIS CHANGE BECAUSE OF MEMORY MANAGER
PROBLEMS, by making zgetdevice return a writable reference to the
prototype.  (We finally fixed this in release 3.65.)  (gs_init.ps, iref.h,
opcheck.h, zdevice.c, ztype.c, zwppm.c)

Extends the client API to allow for pushing values onto the operand stack.
(imain.h, gs.c, gsmain.c)

Defines a .setdefaultscreen procedure that sets the default halftone screen,
transfer function, and stroke adjustment for the current device.  Changes
selectdevice and setpagedevice so that they call .setdefaultscreen;
setpagedevice calls .setdefaultscreen before calling the Install procedure,
so that Install can set different parameters if it wishes.  Note that
setdevice does not do this.  (gs_init.ps, gs_setpd.ps)

</pre><h3><a name="V3.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Tf set the current text font twice, and interacted with pdf2ps in
an awkward way.  (gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)
	- If a font had variant Widths, it could get confused in the cache
with the underlying font.  (pdf_font.ps)
	- If a character appeared twice in an encoding and the font
specified different Widths values for the two occurrences, the last Width
would be used.  We patched this to ignore zero Widths, which is not the
correct solution but which almost always produces correct output.
(pdf_font.ps)
	- Arrays containing nulls didn't print out correctly (bug introduced
in 3.60).  (gs_init.ps)
	- Some PDF files contain very large dictionaries, which caused a
stackoverflow.  (pdf_base.ps)

Speeds up the initial processing of PDF files by caching the map from page
numbers to page objects, and by not scanning the outlines if we aren't
producing PostScript output.  (pdf_2ps.ps, pdf_base.ps, pdf_main.ps)

</pre><h3><a name="V3.61_Streams"></a>Streams</h3><pre>

Adds zlibEncode/Decode filters.  (lib.mak, szlibx.h, szlibc.c, szlibd.c,
szlibe.c)

</pre><h3><a name="V3.61_Library"></a>Library</h3><pre>

Fixes bugs:
	- glyphshow displayed a character with code 0 rather than the
requested character (bug introduced in 3.60.)  (gschar.c)
	- If trimming white space around a character reduced its raster, the
character was garbled in the cache (bug introduced in 3.60.)  (gxccman.c)
	- colorimage would incorrectly convert white pixels to black if the
image color space was CMYK, the current color space was not CMYK, and the
number of bits per pixel was 4 or 8.  (gsimage2.c)
	- One of the clipping tests for images was backwards (bug introduced
in 3.60).  (gsimage.c)
	- Type 1 fonts that used the Flex feature applied hints to the path
multiple times, causing dropouts, uneven stems, and other problems (bug
probably introduced in 3.21).  (gstype1.c)
	- If a Type 1 font used the Flex feature within the accent of an
accented character defined with seac, the shape of the accent could be
distorted.  (gxtype1.h, gstype1.c)
	- If a Type 1 font changed hints using the hint replacement facility
when the last operation was a closepath, the old hints would be applied a
second time, distorting the shape.  (gxhint3.c)
	- Band lists could read garbage beyond the end of data for a band,
causing unpredictable errors (bug introduced in 3.60).  (gxclread.c)
	- If the bounding box of the path for fill_path or stroke_path went
outside the device page boundary when banding, out-of-bounds memory
references occurred (bug introduced in 3.60).  (gxdevice.h, gxclpath.c)

Adds an alternative implementation of the core path filling algorithm that
is much faster on objects with curves but doesn't handle Y fattening.  This
is the implementation that will normally be used for rasterizing characters.
This implementation rasterizes curves directly, without flattening them.
(gxfixed.h, gxpath.h, gzpath.h, gsdps1.c, gxfill.c, gxpcopy.c, gxpdash.c)

Speeds up the flattening of curves substantially by omitting more redundant
points.  (gxpcopy.c)

Speeds up character bitmap compression a little more.  (gsbitops.h,
gdevabuf.c, gsbitops.c, gxccman.c)

Speeds up anti-aliased graphics a bit by computing a bounding box before
converting from oversampling to alpha values, and by speeding up the
bounding box computation itself.  (gsbitops.h, gdevabuf.c, gsbitops.c,
gxccman.c)

</pre>

<h2><a name="Version3.60"></a>Version 3.60 (limited) (11/20/95)</h2>

<p>
(Note: release numbers 3.54 through 3.59 were deliberately skipped.)  This
internal release includes a major redesign of band lists in order to reduce
their size for embedded implementations, to move towards supporting "vector"
output formats, and to further separate the imager library from the language
interpreters.

<h3><a name="V3.60_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- A comment was incorrect.  (viewpbm.ps)
	- The PixelDifference filters were not documented.  (language.doc)
	- The change from currenttime to .currenttime wasn't documented.
(language.doc)
	- gs.1 incorrectly stated that the default font directory name
included the version number.  (gs.1)
	- The -g and -r switches didn't specify that the units for their
arguments are pixels and pixels per inch respectively.  (use.doc)
	- The PageOffset page device parameter wasn't listed.
(language.doc)

Changes copy_mono and copy_color to optional procedures.  (drivers.doc)

Adds a reference to ps_view.ps, a "dumb terminal" user interface for
Ghostscript intended for MS-DOS users.  (README)

Splits off the documentation on installing Ghostscript into a separate file.
(readme, install.doc, use.doc)

Adds documentation on the data format produced by the standard LZWEncode
filter.  (readme, lzwce.doc)

Clarifies XLIBDIR vs. XLIBDIRS.  (make.doc)

Adds user-contributed documentation on building Ghostscript under QNX.
(make.doc)

</pre><h3><a name="V3.60_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The rule for building dfaxhigh.dev had a typo.  (devs.mak)
	- The dependencies for gdevpipe.h were missing errno__h and
string__h.  (unixtail.mak)
	- The geninit program (the implementation of COMPILE_INITS=1) didn't
parse the command line properly, and didn't check for PostScript files
properly.  (geninit.c)
	- ccfontab.c was omitted from the fileset.  The easiest way to fix
this was to rename it to icfontab.c.  (gs.mak, int.mak, ccfontab.c)
	- The Unix makefiles installed caption.ls (a typo) rather than
caption.ps.  (unix-end.mak)
	- XLIBDIR, for dynamic library access, wasn't defined.  (*head.mak,
*tail.mak, ugcclib.mak)

Adds the PNG and ZLIB makefiles to the fileset.  (*.mak, png.mak, zlib.mak,
tar_cat)

Puts the PixelDifference filters in the standard Level 2 set, since the LZW
filters may invoke them (a post-Red Book addition to the PostScript language
definition).  (int.mak)

Adds -Wcast-qual to the gcc compiler flags.  (gcc-head.mak)

Adds the PNG drivers to the standard Unix configurations.
(ansi/cc-/gcc-head.mak)

Adds a -dNOFONTPATH switch to suppress any consultation of the FONTPATH
variable or the GS_FONTPATH environment variable.  (gs_fonts.ps, gs_init.ps)

</pre><h3><a name="V3.60_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The default scaling for viewing PBM files was computed
incorrectly.  (viewpbm.ps)
	- ps2ascii left a value on the stack for each unrecognized character
it processed, eventually causing a stackoverflow.  (ps2ascii.ps)

Changes viewpbm.ps so that it simply defines P1 through P6, allowing PBM
files to be executed with 'run'.  (viewpbm.ps)

Adds a small benchmark to crudely measure hardware/system performance.  The
same file can either be compiled as a C program or executed as a PostScript
program.  (bench.c)

Adds a few PPD files to the distribution.  There will probably be more as
time goes on.  (tar_gs, unix-end.mak)

Updates the Unix lpr scripts to handle a wider variety of device options.
(unix-lpr.doc, lprsetup.sh, unix-lpr.sh)

Adds a utility for converting files produced by Macromedia's Rollup program
to a Type 0 form directly usable by Ghostscript.  (rollconv.ps)

</pre><h3><a name="V3.60_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- Forwarding devices passed an incorrect first argument when
forwarding a copy_rop operation.  (gsdevice.c)
	- Because of a typo, the LaserJet drivers had incorrect margins.
This was probably a new bug in 3.5x.  (gdevdjet.c)
	- A private name was duplicated.  (gdevtfax.c)
	- The x11alpha driver passed invalid colors to the X library.
(gdevxalt.c)
	- The x11alpha driver set the blue component of colors incorrectly.
(gdevxalt.c)
	- Some `const' declarations were missing.  (gdevtifs.c, gdevtfnx.c,
gdevxxf.c)
	- The size of A4 paper was slightly inconsistent across drivers.
(gdevdjet.c, gdevl256.c)

Provides default implementations of copy_mono and copy_color in terms of
fill_rectangle.  (gxdevice.h, gsdevice.c)

Adds forwarders for sync_output and output_page.  (gxdevice.h, gsdevice.c)

Adds new optional procedures to the driver interface:
	- fill_path for filling a path with a color;
	- stroke_path for stroking a path;
	- fill_mask for painting a color through a mask.
The default implementations use the existing rasterizer algorithms.  This
involves a NON-BACKWARD-COMPATIBLE change to the parameters of a few
internal routines:
	gs_currentlineparams
	gx_fill_path, gx_fill_path_only, gx_path_expand_dashes, gx_path_flatten
and two externally visible routines not part of standard PostScript:
	gs_setfilladjust, gs_currentfilladjust
(gdevmem.h, gdevprn.h, gspath.h, gspenum.h, gxcpath.h, gxdevice.h, gxdraw.h,
gxpaint.h, gxpath.h, gscoord.c, gsdevice.c, gspaint.c, gsstate.c,
gxacpath.c, gxclist.c, gxclread.c, gxcpath.c, gxdraw.c, gxfill.c, gxpaint.c,
gxpcmap.c, gxpcopy.c, gxstroke.c)

Makes major changes to the dithering algorithm for the color DeskJet and
BubbleJet drivers, contributed by a user.  (gdevcdj.c)

Adds a contributed 12-bit RGB TIFF driver.  (gdevtfnx.c)

</pre><h3><a name="V3.60_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The printjob created by Ghostscript was called "Ghostscirpt"
instead of "Ghostscript".  (gp_os2.c)
	- An "export" declaration was omitted from DllInit.  (gp_mswin.c)

Removes gp_get_clock (its interface was changed from calendar
days/milliseconds to epoch seconds/nanoseconds in an undocumented,
NON-BACKWARD-COMPATIBLE change in 3.51), and adds a new gp_get_realtime
procedure that returns epoch seconds/nanoseconds.  This too is a
NON-BACKWARD-COMPATIBLE change; it is required because we overlooked the
prior change in a batch of user-contributed code.  (gp.h, gp_*.c)

</pre><h3><a name="V3.60_Fonts"></a>Fonts</h3><pre>

Adds Heavy as a synonym for Bold when doing intelligent font substitution.
(gs_fonts.ps)

</pre><h3><a name="V3.60_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The setup for the CCITTFax filters set the 'raster' element
redundantly.  (zfdecode.c)
	- currentscreen and currentcolorscreen could give an error if the
current screen was set with sethalftone (or, for currentscreen,
setcolorscreen).  (gs_dps1.ps)
	- The font operators didn't work properly if a PostScript file
redefined certain operator names.  (gs_res.ps)
	- The CCITTFax filters imposed a limit of 9999 Rows or Columns.  The
new limit is 32000.  (zfdecode.c)
	- Streams could get removed from a bookkeeping list prematurely, and
wind up dangling.  (zfile.c)
	- The garbage collector didn't ask for large enough a mark stack,
and only used half of what it got.  (This was only a performance problem.)
(igc.c)
	- Two private names duplicated names in a vendor library.  (zbseq.c)
	- Type 1 fonts didn't enforce the maximum value of BlueScale, which
caused some faulty fonts produced by Fontographer to produce incorrect
output.  (zfont1.c)
	- cvs / cvrs / = didn't produce Adobe-compatible output.
(gs_init.ps, iutil.h, iutil.c, zfileio.c)
	- Multiple -I switches set the search path incorrectly.  (gsmain.c)
	- Many `const' declarations were missing.  (icie.h, idparam.h,
iref.h, iutil.h, idparam.c, iinit.c, ilocate.c, iname.c, interp.c, iparam.c,
iutil.c, zcie.c, zfile.c, zgstate.c, ziodev.c, ztype.c)
	- Fonts could wind up with a pointer to the wrong VM space, causing
potential GC or save/restore confusion.  (zfont2.c)
	- upath could leave garbage on the stack if it failed.  (gs_dps1.ps)

Speeds up rasterizing characters into the cache a little.  (gs_type0.ps)

Changes the default limit on the size of cached characters from the maximum
of (18 points or 5 times the "average" character size) to (18 points or 1%
of the total cache size).  (gs_init.ps)

Adds the DecodedByteAlign parameter to the CCITTFax filters.  (zfdecode.c)

Updates some code for compatibility with the new fill_path driver procedure.
(zupath.c)

Replaces .set/currentfilladjust with .set/currentfilladjust2, and defines
the former in terms of the latter.  (gs_init.ps, zgstate.c)

Extends the make[word]imagedevice operators to accept palette values of 16,
24, and 32, for creating true-color image devices.  (zdevice.c)

Changes realtime to match the definition of gp_get_realtime.  (zmisc.c)

Removes the [.]currenttime operator.  realtime provides interval timing in
milliseconds; the %Calendar% IODevice provides calendar times.  (zmisc.c)

Extends the LZW filters to handle the PDF Predictor (pixel-differencing)
option.  (zfdecode.c, zfilter2.c, zfpdiff.c (deleted))

</pre><h3><a name="V3.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- The length of an image's data was sometimes calculated
incorrectly, causing an error when converting PDF to PostScript.
(pdf_draw.ps)
	- If word spacing and/or text spacing was non-zero, an error could
occur.  (gs_pdf.ps)
	- Text that was both filled and stroked caused an error.
(gs_pdf.ps)

</pre><h3><a name="V3.60_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- When closing an encoding filter stream whose target was also a
filter, the latter could get called incorrectly with last = 1, possibly more
than once, leading to premature EOD markers.  (stream.c)
	- The LZW-compatible encoder put out an incorrect end-of-data code.
(slzwce.c)
	- The LZW-compatible encoder didn't put out a reset code soon
enough.  (slzwce.c)
	- Some `const' declarations were missing.  (siscale.c)
	- Doing a sgets on a closed stream could call sreadbuf, possibly
causing an error.  (stream.c)

Adds a new (optional) set_defaults procedure to the stream template, which
sets the stream parameters to default values.  We only implement it for a
few stream types.  (scfx.h, scommon.h, slzwx.h, spdiffx.h, srlx.h,
strimpl.h, scfd.c, scfe.c, slzwce.c, slzwd.c, slzwe.c, spdiff.c, srld.c,
srle.c)

Adds a new parameter to the CCITTFax filters, DecodedByteAlign.  This is an
integer N, which must be a power of 2 between 1 (2^0) and 16 (2^4), that
specifies that decoded data scan lines are always a multiple of N bytes.
The encoding filter skips data in each scan line from Columns to the next
multiple of N bytes; the decoding filter pads each scan line to a multiple
of N bytes.  Default value: 1.  (scfx.h, scfd.c, scfe.c)

Increases the maximum width of a scan line for the CCITTFaxEncode filter to
32000 pixels.  (scf.h)

</pre><h3><a name="V3.60_Library"></a>Library</h3><pre>

Fixes bugs:
	- Cached characters sometimes had extra blank space on the left,
leading to some unnecessary bit-shuffling when imaging them.  (gxccman.c)
	- In rare cases, gray halftones called gx_color_load unnecessarily.
(gxdither.c)
	- The list of all-bands commands wasn't initialized/reset properly.
(gxclist.c, gxclread.c)
	- Rendering an anti-aliased character to a non-anti-aliased device
didn't free the temporary bitmap, causing memory to be lost.  (gxccache.c)
	- Dash patterns where the offset exactly reached a run of length 0
skipped over the 0-length run.  (gsline.c)
	- Rectangles closed with both lineto and closepath weren't
recognized as rectangles.  This is only a performance bug.  (gxpath2.c)
	- Because of a typo in a macro formal parameter list, a private name
was duplicated.  (gsstruct.h)
	- Text display operations didn't update the current character in the
enumerator structure during the fastest path through the code.  This only
matters to one very unusual commercial client.  (gschar.c)
	- Some `const' declarations were missing.  (gsparam.h, gxistate.h,
stdpre.h; gdevm1.c, gsalloc.c, gsfont.c, gsimage3.c, gsmemory.c, gsmisc.c,
gspcolor.c, gstype1.c, gxfill.c, gxpcopy.c)

Changes the header files to assume that gcc on Solaris defines
__svr4__ and that, in this case, &lt;string.h&gt; has the right stuff in it.
(memory_.h)

Refactors the character cache to share structures with a similar cache
used by band lists.  Eventually the band list may be able to reference
the character cache directly, saving a lot of copying.  (gxbcache.h,
gxfcache.h, gsfont.c, gxbcache.c, gxccache.c, gxccman.c)

Speeds up getting the side bearing and width of a Type 1 charstring a
little.  (gxtype1.h, gstype1.c)

Redesigns band lists so that they can cache character bitmaps as well as
halftone bitmaps.  Characters may be written for all bands, not just the
band(s) they appear in, depending on the setting of the CHAR_ALL_BANDS_COUNT
parameter in gxclbits.c.  (gxcldev.h, gxclist.h, gxclbits.c, gxclist.c,
gxclread.c)

Adds G4 fax compression for band list bitmaps.  (gxcldev.h, gxclist.c,
gxclread.c)

Incorporates the new set_defaults procedure into the memory-based band list
implementation.  (gxclmem.c)

Implements a halftoning device that can be used in a device pipeline.
(gdevht.h, gzht.h, gdevht.c, gxcht.c)

Factors out imager state from the full graphics state.  This division is
preliminary and subject to change.  (gxistate.h, gxop1.h, gzstate.h,
gsline.c, gsstate.c, gstype1.c, gxhint*.c)

Implements passing fill operations in the band list, except for pattern
color or colored halftones.  (gxcldev.h, gxclist.h, gxclist.c, gxclread.c)

Implements passing stroke operations in the band list, except for pattern
color or colored halftones.  (gsline.h, gslparam.h, gxline.h, gzline.h,
gsline.c; gxcldev.h, gxclist.h, gxclist.c, gxclread.c)

Implements the ability to represent halftoned characters in the band list.
(gxccache.c)

Starts to implement the ability to do halftoning during the rendering phase
rather than before writing the band list (currently for black-and-white
devices only).  Doing this required NON-BACKWARD-COMPATIBLE changes to the
interfaces of a few internal procedures:
	gx_check_tile_size, gx_render_device_{color,gray}
(gxdcolor.h, gxdht.h, gzht.h, gsht.c, gsimage1.c, gsmisc.c, gspcolor.c,
gsstate.c, gxcht.c, gxclbits.c, gxdither.c, gxht.c)

Implements passing clipping information in the band list.  (gzcpath.h,
gxacpath.c, gxclpath.c, gxclread.c, gxcpath.c)

Removes the gs_state * parameter from the device color fill_rectangle
procedures and many of their callers, since it is no longer needed.  This is
a non-backward-compatible change to an internal API.  (gdevmrop.h,
gxdcolor.h, gxdraw.h, gxpaint.h, gdevmrop.c, gsimage.c, gspcolor.c, gxcht.c,
gxclread.c, gxdraw.c, gxfill.c, gxht.c, gxpaint.c, gxstroke.c)

Removes gxdevice.h from gzstate.h, since not all modules requiring access to
the graphics state need to know the implementation of devices.  This entails
adding gxdevice.h to the include lists for some modules.  (gxchar.h,
gxcpath.h, gxcvalue.h, gxdevice.h, gxtype1.h, gzstate.h; gschar.c,
gscoord.c, gsdevice.c, gsimage1.c, gsimage2.c, gsimage3.c, gspaint.c,
gspath.c, gsstate.c, gstype1.c, gxccache.c, gxccman.c, gxhint1.c, gxhint2.c,
gxhint3.c, gxpaint.c)

Adds a compile-time option, ALPHA_LSB_FIRST, which causes alpha-sampled
characters to be nibble-reversed in the cache.  This was created for a
specialized application and does not interact well with the rest of the
code.  (gsbitops.c)

Substantially reduces the space required to represent 24- or 32-bit colors
in the band list, by using more aggressive color differencing.  (gxcldev.h,
gxclist.c, gxclread.c)

Changes the allocation of unique IDs for halftone tiles to use the gray
level rather than the number of 1-bits as the increment to a base ID; this
allows more efficient (delta) representation of halftone indices in the band
list.  (gxcldev.h, gxclist.c, gxclread.c, gxht.c)

Substantially speeds up entering anti-aliased characters in the cache, by
removing white space before compressing rather than vice versa.
(gsbitops.c, gxccman.c)

</pre>

<hr>

<h2><a name="Version3.53"></a>Version 3.53 (1/10/96)</h2>

<p>
This is an anomalous, out-of-sequence release requested by a commercial
licensee.  It consists of 3.52 plus the following retrofits from 3.60
through 3.63:
	- PDF interpreter and pdf2ps;
	- Type 1 rasterizer fixes;
	- Type 1 rasterizer and polygon fill performance improvements;
	- MS Windows and OS/2 fixes;
	- A few other important fixes.
It does NOT fix all problems reported since 3.52.

<p>
The list of changes below indicates which subsequent release was the source
of each change.  In several cases, minor editing of the change was required
to make it compatible with 3.52.

<h3><a name="V3.53_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	[3.61] The analysis of curve monotonocity in gxpcopy.c had an error.
(gxpcopy.c)

[3.63] Notes that the OS/2 implementation now requires EMX/GCC 0.9b rather
than 0.9a.  (use.doc)

[3.62] Notes that for Win32s, gs16spl.exe must be in the same directory as
gswin32.exe.  (use.doc)

[3.62] Adds a reference to dos-psv, another "dumb terminal" user interface
for Ghostscript intended for MS-DOS users.  (README)

[3.61] Adds a pointer to DEC's free pstotext utility.  (README)

[3.60] Adds a reference to ps_view.ps, a "dumb terminal" user interface for
Ghostscript intended for MS-DOS users.  (README)

</pre><h3><a name="V3.53_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	[3.60] The geninit program (the implementation of COMPILE_INITS=1)
didn't parse the command line properly, and didn't check for PostScript
files properly.  (geninit.c)
	[3.60] ccfontab.c was omitted from the fileset.  The easiest way to
fix this was to rename it to icfontab.c.  (gs.mak, int.mak, ccfontab.c)
	[3.60] The definition of pdfread.dev did an ADDMOD, not a SETMOD.
(int.mak)

[3.60] Adds a -dNOFONTPATH switch to suppress any consultation of the
FONTPATH variable or the GS_FONTPATH environment variable.  (gs_fonts.ps,
gs_init.ps)

</pre><h3><a name="V3.53_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	[3.61] pdf2ps didn't write Widths or Encoding in the converted file,
producing incorrect spacing and incorrect characters.  (pdf_2ps.ps)
	[3.60] ps2ascii left a value on the stack for each unrecognized
character it processed, eventually causing a stackoverflow.  (ps2ascii.ps)

[3.61] Changes the rollconv.ps utility to produce files whose names conform
to the 8.3 length restriction, and to reduce the fixed RAM overhead for
Kanji fonts.  (rollconv.ps)

[3.60] Adds a utility for converting files produced by Macromedia's Rollup
program to a Type 0 form directly usable by Ghostscript.  (rollconv.ps)

</pre><h3><a name="V3.53_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	[3.60] Because of a typo, the LaserJet drivers had incorrect
margins.  This was probably a new bug in 3.5x.  (gdevdjet.c)
	[3.60] A private name was duplicated.  (gdevtfax.c)
	[3.60] The x11alpha driver passed invalid colors to the X library.
(gdevxalt.c)
	[3.60] The x11alpha driver set the blue component of colors
incorrectly.  (gdevxalt.c)

</pre><h3><a name="V3.53_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	[3.63] The test for WinExec failure on Win32 was incorrect.
(gp_mswin.c)
	[3.63] getenv was declared redundantly on OS/2.  (gp_os2.c)
	[3.63] gs16spl.c was missing &lt;string.h&gt;.  (gs16spl.c)
	[3.61] Printing didn't work in 32-bit MS Windows environments.
(bcwin32.mak, gdevmswn.c, gp_mswin.c)
	[3.61] There were some compatibility problems with IBM C.  (os2.mak,
gsdll.h, gdevpm.c, gp_os2.c)
	[3.60] The printjob created by Ghostscript was called "Ghostscirpt"
instead of "Ghostscript".  (gp_os2.c)
	[3.60] An "export" declaration was omitted from DllInit.
(gp_mswin.c)

[3.61] Adds a conditional to work around a bug in gcc 2.7.x (it didn't
recognize that the target of a const T * might still be mutable through
aliasing).  (stdpre.h)

</pre><h3><a name="V3.53_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	[3.61] Rasterizing a character in a Type 1 font with an invalid
FontBBox left some garbage on the operand stack (bug introduced in 3.52 or
3.60).  (gs_type1.ps)
	[3.61] The font substitution algorithm could fail or loop.
(gs_fonts.ps)

[3.60] Adds Heavy as a synonym for Bold when doing intelligent font
substitution.  (gs_fonts.ps)

</pre><h3><a name="V3.53_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	[3.63] Invoking setpagedevice with an undefined key, even with
Policy = 1, caused an error.  (gs_setpd.ps)
	[3.62] Setting the PageSize policy to 1 and then trying to set the
page size caused an error if FIXEDMEDIA was selected.  (gs_setpd.ps)
	[3.61] Rotated characters were rendered incorrectly (bug introduced
in 3.52).  (gstype1.c)
	[3.60] currentscreen and currentcolorscreen could give an error if
the current screen was set with sethalftone (or, for currentscreen,
setcolorscreen).  (gs_dps1.ps)
	[3.60] Streams could get removed from a bookkeeping list
prematurely, and wind up dangling.  (zfile.c)
	[3.60] Multiple -I switches set the search path incorrectly.
(gsmain.c)
	[3.60] Fonts could wind up with a pointer to the wrong VM space,
causing potential GC or save/restore confusion.  (zfont2.c)
	[3.60] upath could leave garbage on the stack if it failed.
(gs_dps1.ps)

[3.61] Extends the client API to allow for pushing values onto the operand
stack.  (imain.h, gs.c, gsmain.c)

[3.61] Defines a .setdefaultscreen procedure that sets the default halftone
screen, transfer function, and stroke adjustment for the current device.
Changes selectdevice and setpagedevice so that they call .setdefaultscreen;
setpagedevice calls .setdefaultscreen before calling the Install procedure,
so that Install can set different parameters if it wishes.  Note that
setdevice does not do this.  (gs_init.ps, gs_setpd.ps)

[3.60] Speeds up rasterizing characters into the cache a little.
(gs_type0.ps)

[3.60] Changes the default limit on the size of cached characters from the
maximum of (18 points or 5 times the "average" character size) to (18 points
or 1% of the total cache size).  (gs_init.ps)

[3.60] Implements parts of the Type 1 BuildChar callout in C.  (gs_type1.ps,
zchar.c)

</pre><h3><a name="V3.53_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	[3.62] If a PDF file substituted a calibrated color space for the
DeviceGray or DeviceRGB color space using a ColorSpace resource, the
PostScript file that pdf2ps produced from that PDF file caused an error.
(gs_pdf.ps)
	[3.61] Tf set the current text font twice, and interacted with
pdf2ps in an awkward way.  (gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)
	[3.61] If a font had variant Widths, it could get confused in the
cache with the underlying font.  (pdf_font.ps)
	[3.61] If a character appeared twice in an encoding and the font
specified different Widths values for the two occurrences, the last Width
would be used.  We patched this to ignore zero Widths, which is not the
correct solution but which almost always produces correct output.
(pdf_font.ps)
	[3.61] Arrays containing nulls didn't print out correctly (bug
introduced in 3.60).  (gs_init.ps)
	[3.61] Some PDF files contain very large dictionaries, which caused
a stackoverflow.  (pdf_base.ps)
	[3.60] The length of an image's data was sometimes calculated
incorrectly, causing an error when converting PDF to PostScript.
(pdf_draw.ps)
	[3.60] If word spacing and/or text spacing was non-zero, an error
could occur.  (gs_pdf.ps)
	[3.60] Text that was both filled and stroked caused an error.
(gs_pdf.ps)

[3.61] Speeds up the initial processing of PDF files by caching the map from
page numbers to page objects, and by not scanning the outlines if we aren't
producing PostScript output.  (pdf_2ps.ps, pdf_base.ps, pdf_main.ps)

</pre><h3><a name="V3.53_Streams"></a>Streams</h3><pre>

Fixes bugs:
	[3.60] When closing an encoding filter stream whose target was also
a filter, the latter could get called incorrectly with last = 1, possibly
more than once, leading to premature EOD markers.  (stream.c)
	[3.60] The LZW-compatible encoder put out an incorrect end-of-data
code.  (slzwce.c)
	[3.60] The LZW-compatible encoder didn't put out a reset code soon
enough.  (slzwce.c)
	[3.60] Doing a sgets on a closed stream could call sreadbuf,
possibly causing an error.  (stream.c)

</pre><h3><a name="V3.53_Library"></a>Library</h3><pre>

Fixes bugs:
	[3.63] On 16-bit platforms, the computation of t2 and t3 in
gx_curve_x_at_y could overflow, leading to incorrect output.  (gxpcopy.c)
	[3.61] glyphshow displayed a character with code 0 rather than the
requested character (bug introduced in 3.60.)  (gschar.c)
	[3.61] If trimming white space around a character reduced its
raster, the character was garbled in the cache (bug introduced in 3.60.)
(gxccman.c)
	[3.61] colorimage would incorrectly convert white pixels to black if
the image color space was CMYK, the current color space was not CMYK, and
the number of bits per pixel was 4 or 8.  (gsimage2.c)
	[3.61] Type 1 fonts that used the Flex feature applied hints to the
path multiple times, causing dropouts, uneven stems, and other problems (bug
probably introduced in 3.21).  (gstype1.c)
	[3.61] If a Type 1 font used the Flex feature within the accent of
an accented character defined with seac, the shape of the accent could be
distorted.  (gxtype1.h, gstype1.c)
	[3.61] If a Type 1 font changed hints using the hint replacement
facility when the last operation was a closepath, the old hints would be
applied a second time, distorting the shape.  (gxhint2.c, gxhint3.c)
	[3.60] Cached characters sometimes had extra blank space on the
left, leading to some unnecessary bit-shuffling when imaging them.
(gxccman.c)
	[3.60] The list of all-bands commands wasn't initialized/reset
properly.  (gxclist.c)
	[3.60] Because of a typo in a macro formal parameter list, a private
name was duplicated.  (gsstruct.h)
	[3.60] Text display operations didn't update the current character
in the enumerator structure during the fastest path through the code.  This
only matters to one very unusual commercial client.  (gschar.c)

[3.61] Adds an alternative implementation of the core path filling algorithm
that is much faster on objects with curves but doesn't handle Y fattening.
This is the implementation that will normally be used for rasterizing
characters.  This implementation rasterizes curves directly, without
flattening them.  (gxfixed.h, gxpath.h, gzpath.h, gxdraw.c, gxfill.c,
gxpcopy.c)

[3.61] Speeds up the flattening of curves substantially by omitting more
redundant points.  (gxpcopy.c)

[3.61] Speeds up character bitmap compression a little more.  (gsbitops.h,
gdevabuf.c, gsbitops.c, gxccman.c)

[3.61] Speeds up anti-aliased graphics a bit by computing a bounding box
before converting from oversampling to alpha values, and by speeding up the
bounding box computation itself.  (gsbitops.h, gdevabuf.c, gsbitops.c,
gxccman.c)

[3.60] Speeds up getting the side bearing and width of a Type 1 charstring a
little.  (gxtype1.h, gstype1.c)

[3.60] Adds a compile-time option, ALPHA_LSB_FIRST, which causes
alpha-sampled characters to be nibble-reversed in the cache.  This was
created for a specialized application and does not interact well with the
rest of the code.  (gsbitops.c)

[3.60] Substantially speeds up entering anti-aliased characters in the
cache, by removing white space before compressing rather than vice versa.
(gsbitops.c, gxccman.c)

</pre>

<h2><a name="Version3.52"></a>Version 3.52 (limited) (10/6/95)</h2>

<p>
This is an incremental release to fix a few problems in 3.51.  Since it is
being made in an environment with no network connectivity, it will probably
not be released to the general public.  ****** THE CHANGES MARKED WITH ***
BELOW WERE LOST IN THE PROCESS OF SHUFFLING FILESETS BETWEEN ENVIRONMENTS.
THEY ARE INCORPORATED IN 3.60 BUT NOT IN 3.52. ******

<h3><a name="V3.52_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The fileset included a meaningless empty file.  (acctest.ps)
	*** The definition of pdfread.dev did an ADDMOD, not a SETMOD.
(int.mak)

</pre><h3><a name="V3.52_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The RunLengthEncode filter used with a dictionary argument could
give a spurious error.  (zfilter.c)
	- The fast form of the 'dup' operator failed to check for stack
overflow, which could lead to memory smashing.  (interp.c)
	*** Level 1 configurations gave errors during initialization.
(ialloc.c, iinit.c, ireclaim.c)
	*** Attempting to look up or insert a noaccess string as a
dictionary key converted the string to a name rather than giving an error.
(idict.h, idict.c)

Adds a C implementation of the .dicttomark (&gt;&gt;) procedure.  (gs_init.ps,
zdict.c)

*** Implements parts of the Type 1 BuildChar callout in C.  (gs_type1.ps,
ifont.h, zchar.c, zfont1.c, zfont2.c)

</pre><h3><a name="V3.52_Library"></a>Library</h3><pre>

Fixes bugs:
	- Braces were missing in an initializer.  (gxdcolor.h)
	- Composite fonts with a non-zero translation in the FontMatrix
positioned characters incorrectly.  (gschar.c)
	*** gsparam.c wouldn't compile with some versions of the Borland
compiler.  (gsparam.c)

Speeds up the handling of curve segments in Type 1 fonts a little.
(gstype1.c)

Speeds up displaying very short strings a little.  (gschar.c)

*** Implements parts of the Type 1 BuildChar callout in C.  (gxfont.h)

</pre>

<h2><a name="Version3.51"></a>Version 3.51 (9/27/95)</h2>

<p>
This is the first public release since 3.33.  Its main features are a
working setpagedevice, a working PDF interpreter, and a working PDF to PS
converter.

<h3><a name="V3.51_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- The -dSHORTERRORS switch wasn't documented in enough places.
(current.doc, use.doc)
	- The DLL documentation was internally inconsistent.  (dll.doc)
	- The %pipe% file name syntax wasn't documented.  (language.doc)

</pre><h3><a name="V3.51_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- caption.ps wasn't installed properly.  (unix-end.mak)
	- geninit depended on $(gconfig_h) in an improper way.  (geninit.c,
int.mak, *.mak)
	- One script lacked the #!/bin/sh header.  (gsdj500)

Adds the 24-bit color TIFF driver to all configurations that support
black-and-white TIFF.  (*.mak)

</pre><h3><a name="V3.51_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- align.ps was omitted from the fileset.  (psfiles.doc, align.ps,
unix-end.mak)

</pre><h3><a name="V3.51_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A driver had some \s in formal parameter lists.  (gdevcdj.c)
	- A driver had some improper &amp;s.  (gdevtifs.c)
	- The default MS Windows printer driver was very slow.  (gdevwpr2.c)
	- The (newly restructured) TIFF drivers could produce a memory
access error.  (gdevtifs.c)
	- The CGM drivers referred to an obsolete structure member.
(gdevcgm.c)
	- The black-and-white H-P drivers didn't set the margins properly
(again).  (gdevdjet.c)
	- Several of the most common printer drivers omitted some scan lines
at the bottom of the page.  (gdevprn.h, gdevprn.c)

At the request of the main OS/2 developer, adds a printer device for OS/2.
(gdevos2p.c, os2.mak)

Makes many changes to the stcolor driver, submitted by the developer just
before the release.  (devices.doc, unix-end.mak, gdevstc.h, gdevstc*.c,
stcinfo.ps, stcolor.ps, stcinfo.ps)

</pre><h3><a name="V3.51_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- usertime (and realtime) were broken on VMS.  (gp_vms.c)
	- The 32-bit MS Windows DLL control file had a typo.  (gsdll32.def)

Removes the color inkjet drivers from the 16-bit Windows executable, because
they overflow the 64K default data segment; adds PCX, TIFF, and BMP output
formats.  (bcwin.mak)

</pre><h3><a name="V3.51_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- A routine was declared 'private' inconsistently.  (zcie.c)
	- -dSHORTERRORS didn't remove enough non-Adobe error output.
(gs_init.ps)

</pre><h3><a name="V3.51_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- The ProcSet relied on the presence of NullFont.  (gs_pdf.ps)

</pre><h3><a name="V3.51_Library"></a>Library</h3><pre>

Fixes bugs:
	- There was an extraneous \ outside a macro.  (gsline.c)
	- Scaling up a black-and-white image could caused many scan lines to
be inverted.  (gsimage1.c)
	- The initial clipping path did not take Margins into account
properly.  (gxdevice.h, gdevxalt.c, gscoord.c, gsdevice.c, gsdevmem.c,
gsdparam.c, gspath.c)
	- If banding was required, characters could come out as solid black
rectangles.  (gxclist.c, gxclread.c)

</pre>

<h2><a name="Version3.50"></a>Version 3.50 (limited) (9/24/95)</h2>

<p>
This is the last limited bug-fix release during beta test.  The color
DeskJet drivers are broken (they sometimes produce black rectangles instead
of characters); we will fix this in the next release.
<p>
The following issues have been postponed to an unspecified future release:
<ul>
<li>	- Filling areas often writes pixels twice, causing incorrect
output
with certain unusual RasterOp values.  [1.814]
<li>	- The tar.gz archives should include a subdirectory like
gs-3.46/ in
the file names.
<li>	- The CCITTFaxDecode filter should skip initial junk if
EndOfLine =
true.  [1844 8/24/95, NRE]
</ul>

<h3><a name="V3.50_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- The name of the new 24-bit TIFF driver was incorrect in one place.
(vms.mak)

</pre><h3><a name="V3.50_Utilities"></a>Utilities</h3><pre>

Adds a new utility to put a caption in a box at the bottom of each page.
(caption.ps)

</pre><h3><a name="V3.50_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The PC display devices weren't page devices.  Probably all the
other display and window system devices should be made page devices too, but
we aren't going to bother tracking them down.  (gdevpcfb.c)
	- There was a lot of duplicated code in the TIFF drivers.
(gdevtifs.h, gdevtfax.c, gdevtfnx.c, gdevtifs.c)

Updates the bjc600 / bjc800 drivers with changes from the author.
(devices.doc, gdevbjc.h, gdevcdj.c)

</pre><h3><a name="V3.50_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Building with COMPILE_INITS=1 produced a stackunderflow error.
(gs_pdf_e.ps)
	- An internal operator didn't have a name.  (ztoken.c)
	- Some error and information messages weren't in the Adobe format.
(gs_fonts.ps, gs_init.ps)
	- Some common Adobe compatibility operators weren't implemented:
pagemargin, pageparams, setpagemargin.  (gs_statd.ps, gs_lev2.ps)
	- setpageparams set Margins rather than PageOffset.  (gs_lev2.ps)
	- setpage and setpageparams didn't set Orientation.  (gs_lev2.ps)
	- If the end of an input buffer fell just after the / of a literal
name, a memory access error could occur.  (iscan.c)
	- When the interpreter returned from gs_[main_]run_string_continue,
there could be an extra value on the operand stack.  (iscan.h, istream.h,
interp.c, iscan.c, zfileio.c, zfproc.c, zpaint.c, ztoken.c)
	- If the character cache was disabled, or if a character was too
large to be cached, returning from a font BuildChar procedure could do an
erasepage.  (zchar.c)

A minor change was required for compatibility with the library change for
image devices.  (zdevice.c)

Adds a -dSHORTERRORS switch that changes some of the common error and
warning messages for greater Adobe compatibility.  (gs_init.ps, gs_fonts.ps)

</pre><h3><a name="V3.50_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- If a CharProc for a Type 3 font did a BT/ET, the graphics state
could get confused.  (gs_pdf.ps)
	- If a Tf occurred inside a BT/ET, it didn't take effect on
subsequent BT/ETs.  (gs_pdf.ps)

</pre><h3><a name="V3.50_Library"></a>Library</h3><pre>

Fixes bugs:
	- There was no way to control whether an image device was a page
device.  Fixing this required a NON-BACKWARD-COMPATIBLE CHANGE to
gs_makewordimagedevice and gs_initialize_wordimagedevice to take a Boolean
page_device argument.  Fortunately, this change affects only a few obscure
library clients.  (gsdevice.h, gsdevmem.c)

Adds translation capability to clipping devices.  This isn't used anywhere
yet.  (gxcpath.h, gxcpath.c)

Adds procedures for doing unaligned copy_xxx operations.  These were added
for a customer.  (gxdevice.h, gsdevice.c)

Changes the (undocumented) return value of gs_setcachedevice[2]: they used
to return 1 if the current show operation was a non-displaying one
(stringwidth or cshow), and now return 1 if the cache device was just
installed.  This change was required to fix the BuildChar page clearing bug
in the interpreter.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, but as far as
I know, there aren't any external clients of these routines.  (gschar.h,
gschar.c)

</pre>

<hr>

<h2><a name="Version3.49"></a>Version 3.49 (limited) (9/20/95)</h2>

<p>
This is another bug-fix release during beta test.  There are other bugs
outstanding, but the ones I know about right now are all platform-specific.

<h3><a name="V3.49_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- make.doc didn't mention that the .def files are needed to build a
MS Windows executable.  (make.doc)

</pre><h3><a name="V3.49_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- There were some forward references to macro definitions in the
makefiles.  (int.mak, lib.mak)
	- The default device for library configurations was the null page
device, not the first device in DEVICE_DEVS.  (ugcclib.mak)

</pre><h3><a name="V3.49_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The BJC600 / BJC800 drivers were missing a header file.
(gdevbjc.h, gdevcdj.c)
	- A procedure name was used in two different files.  (gdevcdj.c)
	- The PCX driver didn't return an error code in case of failure.
(gdevpcx.c)
	- The X Windows driver produced some confusing warning messages.
(gdevxini.c)
	- Some names were duplicated between drivers.  (gdevepsc.c)
	- The X driver maintained its own, peculiar initial matrix even if
Ghostview wasn't involved.  (gdevx.c)

With the permission of the author, changes the 24-bit TIFF license from GNU
to Aladdin.  (gdevtfnx.c)

</pre><h3><a name="V3.49_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS build scripts were out of sync with the makefiles (again).
(modules.lis, vms.mak)

</pre><h3><a name="V3.49_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- When the requested media size matched an available size exactly
with a 90 degree rotation, Orientation was ignored.  (zmedia2.c)

Makes zcurrentdevice extern.  (opextern.h, zdevice.c)

</pre><h3><a name="V3.49_Library"></a>Library</h3><pre>

Fixes bugs:
	- A couple of places used memcpy instead of memmove.  (gxclread.c)
	- If a bitmap image was compressed with RLE compression in a band
list, it would cause an error on decompression.  (gxclread.c)
	- The representation of colors in the band list was needlessly
inefficient.  (gxcldev.h, gxclist.c, gxclread.c)
	- When using colored halftones, snowflak.ps crashed with an invalid
memory access.  More generally, any use of halftones could cause the garbage
collector to make an invalid access.  (gsstate.c)

Adds some more code for paths in band lists, but again doesn't activate it.
(gxcldev.h, gxpath.h, gzline.h, gsline.c, gspath1.c, gxclist.c, gxclread.c,
gxpath.c)

</pre>

<h2><a name="Version3.48"></a>Version 3.48 (limited) (9/17/95)</h2>

<p>
This is the second bug-fix release during beta test.  Among other things, it
fixes a bug introduced in 3.47 that caused all PDF files to give an error.

<p>
******NOTE: the BJC600 and BCJ800 drivers do not work in this release,
because we didn't get a file from the author in time.  They will compile,
but not run.  This will be fixed in the next round.

<h3><a name="V3.48_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- Alan Barclay's contact information was wrong.  (README)

</pre><h3><a name="V3.48_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The linker path for Watcom C++ 10.5 was wrong.  (wccommon.mak)
	- There was a syntax error in a batch file.  (pdf2ps.bat)
	- The VMS build script didn't have entries for some printers.
(vms.mak)

Adds the bjc600 and bjc800 devices on all platforms that already include the
color DeskJet devices.  (*.mak)

</pre><h3><a name="V3.48_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The H-P drivers didn't reposition the cursor properly at the
beginning of pages after the first page, causing the image to be shifted
down slightly and cut off at the bottom.  (gdevdjet.c)
	- The x11alpha driver was extremely slow.  (gdevxalt.c)
	- The -g switch by itself didn't work for the X Windows driver.
(gdevxini.c)
	- .installpagedevice can get a rangecheck on MS Windows because the
HWColorMap can change spontaneously.  (gs_setpd.ps)

Updates the bjc600 and bjc800 drivers with new versions from Yves Arrouye.
(gdevcdj.c)

Adds a user-contributed driver that writes uncompressed 24-bit RGB TIFF
images in a format that is standard on NeXT platforms.  This driver is
governed by the GNU license and is therefore separated from the rest of the
Aladdin distribution.  (gdevtfnx.c)

</pre><h3><a name="V3.48_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- There was an undefined reference to clock_gettime on some Unix
systems.  (gp_unix.c)
	- The new gp_fopen routine had several errors.  (gp_vms.c)

</pre><h3><a name="V3.48_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Some routines that should be main-instance-specific weren't.
(imain.h, main.h, gsmain.c)
	- sethalftone with a Type 2 or Type 4 halftone didn't work on CMYK
devices.  (zht2.c)
	- Setting A4 paper as the default in gs_init.ps, or specifying
-dPAPERSIZE, conflicted with -g.  (gs_init.ps)
	- The maximum value of a single-precision float wasn't correct on
VAX systems.  (math_.h, iscannum.c)
	- Some integer expressions were passed as floating point arguments.
(gs.c, zmedia2.c)
	- Media selection in setpagedevice was broken (again), as of 3.46.
(gs_setpd.ps, zmedia2.c)

</pre><h3><a name="V3.48_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Substituted color spaces caused an error.  (gs_pdf.ps,
pdf_draw.ps)

</pre><h3><a name="V3.48_Library"></a>Library</h3><pre>

Fixes bugs:
	- If a halftone had no non-default components that matched the
device's primary colors, the result would be a solid color rather than a
halftone using the default screen.  (gsht.c)
	- sethalftone with a Type 2 or Type 4 halftone didn't work on CMYK
devices.  (gxht.h, gsht.c, gsht1.c)
	- The new gp_fopen routine wasn't being used.  (gsiodev.c)
	- A mixing of float and fixed values caused a clipping region to be
possibly incorrect by up to 1 pixel.  (gspaint.c)
	- A function definition was inconsistent with the prototype.
(gspath1.c)

Adds preliminary code for including paths in band lists, but doesn't
activate any of it.  (lib.mak, gxcldev.h, gxclist.c, gxclread.c)

</pre>

<h2><a name="Version3.47"></a>Version 3.47 (limited) (9/14/95)</h2>

<p>
This is a bug-fix release during beta test.  It is meant to have no new
functionality, although in the case of setpagedevice that's stretching
things a little.

<h3><a name="V3.47_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The Mac documentation still referred to IJG JPEG v5a rather than
v6.  (make.doc)
	- The RasterOp texture device was identified incorrectly.
(gdevmrop.c)
	- use.doc and psfiles.doc didn't mention the PDF-related files.
(psfiles.doc, use.doc)
	- psview is no longer available.  (README)
	- current.doc didn't document the recognized setpagedevice keys.
(current.doc)

</pre><h3><a name="V3.47_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- Many utility programs weren't included in the Unix 'install' list.
(unix-end.mak)
	- It wasn't at all convenient to make configurations without the BCP
or other non-standard filters.  (*.mak, int.mak, modules.lis, zfilter2.c,
zfilterx.c)
	- The gconfig.c and iconfig.c files weren't deleted after
compilation.  (int.mak, lib.mak)
	- unix-end.mak referred to the nonexistent macros INT{1,2}_MAK.
(unix-end.mak)
	- The rules for building the dfax drivers were incorrect.  (devs.mak)
	- Omitting filter.dev produced an undefined reference.  (int.mak)

Adds a customer-contributed makefile for Microsoft Visual C++ 2.n under
Windows NT.  (msvcwint.mak)

</pre><h3><a name="V3.47_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The JPEG utility didn't support the new progressive JPEG modes,
and didn't invert Adobe Photoshop output as needed.  (viewjpeg.ps)
	- The printafm utility had a single font name wired in.  (printafm,
printafm.ps)
	- The CIE lookup simulation had several bugs.  (docie.ps)
	- pdf2ps[.bat] were missing from the fileset.
	- Files produced by pdf_2ps didn't include the GS_PDF ProcSet.
(gs_pdf.ps, pdf_2ps.ps, pdf_base.ps, pdf_main.ps)

</pre><h3><a name="V3.47_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- Bits read back from an EGA or VGA device were incorrect.
(gdevpcfb.c)
	- The 24-bit PCX run length compressor used a slow algorithm.
(gdevpcx.c)
	- gdevstc.c wouldn't compile with the Borland compiler.  (gdevstc.c)
	- There was a typo in the OS/2 PM driver.  (gdevpm.c)
	- .installpagedevice gets a rangecheck on X Windows because the
HWColorMap can change spontaneously.  (gs_setpd.ps)
	- The left margin for the DeskJet 500 was wrong.  (gdevdjet.c)
	- The two notions of "margin" (offset of 0,0 from physical page
corner vs. unprintable area around edges of physical page) were still
confused.  We've now fixed this for the H-P monochrome printers, but it's
probably still confused for all other printers.  (gdevprn.h, gdevdjet.c)

</pre><h3><a name="V3.47_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The Windows print spooler header file wasn't included when it
needed to be, and some other Win32-specific changes were missing.
(gsdll32.def, gp_mswin.c)
	- Windows DLLs didn't parse "s in the command "arguments" correctly.
(gsdll.c)

</pre><h3><a name="V3.47_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- FAKEFONTS could get the font directories into inconsistent states.
(gs_dps1.ps, gs_fonts.ps)
	- The substitutions for Adobe's Myriad and Minion fonts weren't
appropriate.  (gs_fonts.ps)

</pre><h3><a name="V3.47_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- If pathforall got an error computing the user-space points on a
path, it could cause an invalid access.  (zpath1.c)
	- A 'private' declaration were omitted.  (Why doesn't gcc catch
this??)  (zcie.c)
	- Setting GS_FONTPATH produced a stackunderflow error.
(gs_fonts.ps)
	- currentscreen caused a typecheck if the screen had been set by
setcolorscreen.  (gs_dps1.ps)
	- setcolorrendering tried to cache values computed from the color
space even if the current color space wasn't a CIE space.  (zcrd.c)
	- Out-of-range numbers like 10E38 caused a floating point exception.
(iscannum.c)
	- Giving a closed readable file as input for a filter caused an
invalidaccess.  (files.h, interp.c, zfilter.c)
	- setpagedevice opened the default device even with -dNODISPLAY.
(gs_init.ps, gs_setpd.ps)
	- realtime returned the same value as usertime.  (gs_lev2.ps,
zmisc.c)
	- Storing a local value into systemdict caused some redundant code
to be executed.  (zdict.c)
	- Files with a very long first line could cause a rangecheck error.
(gs_init.ps)
	- The PageOffset page device parameter was ignored.  (gs_setpd.ps)
	- The Orientation page device parameter wasn't handled properly.
(gs_setpd.ps, idparam.h, idparam.c, zmedia2.c)
	- setpagedevice could set device parameters twice, with an
incomplete update the first time.  (gs_setpd.ps)

</pre><h3><a name="V3.47_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Readers confused the internal pdfrun procedure with the public
runpdf procedure.  (pdf_*.ps)

</pre><h3><a name="V3.47_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Closed streams had a NULL state pointer, causing problems for some
clients.  (stream.c)
	- Group 4 decoding could get an ioerror if an end-of-buffer occurred
in a horizontal code sequence between a makeup code and the termination
code.  (scfd.c)

</pre><h3><a name="V3.47_Library"></a>Library</h3><pre>

Fixes bugs:
	- Some 'private' declarations were omitted.  (Why doesn't gcc catch
these??)  (gdevmrop.c, gxht.c)
	- Patterns could produce bad output in the band list.  (gxclist.c)
	- RasterOp wasn't implemented at all for 2- or 4-bit devices.  (In
this release, we implement only a subset, and without handling transparency
properly.)  (gdevm2.c, gdevm4.c, gdevmrop.c)
	- Drawing operations and text sometimes didn't apply the RasterOp
when they should, and vice versa.  (gxdcolor.h, gxdraw.c)
	- setcolorrendering tried to cache values computed from the color
space even if the current color space wasn't a CIE space.  (gscie.h,
gscie.c)
	- Some CIE color spaces produced very distorted colors.  (gscie.c)
	- setpagedevice opened a window even with -dNODISPLAY.  (gsdevice.c,
gsdparam.c)
	- realtime returned the same value as usertime.  (gp.h, time_.h,
gp_*.c)
	- The library level attempted to handle the Orientation page device
parameter.  (gxdevice.h, gdevbit.c, gsdevice.c, gsdparam.c, gspath.c)
	- Severely non-linear CIE encoding/decoding functions produced
seriously skewed colors near the ends of the color value range.  This
problem can now be alleviated, at a significant cost in performance, by
changing configuration parameters at the beginning of gscie.h.  (gscie.h,
gscie.c)
	- Files FTP'ed in binary mode weren't being opened properly on VMS.
(gp.h, gp_*.c, gsiodev.c)
	- A header file had an inconsistent declaration.  (math_.h)

Adds a new gp_get_usertime procedure to gp.h.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE, affecting only platform implementors.  It
was necessary to fix the realtime/usertime bug.  (gp.h, time_.h, gp_*.c)

Adds a new gp_fopen procedure to gp.h.  THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE, affecting only platform implementors.  It was necessary to fix the
binary file problem on VMS.  (gp.h, gp_*.c)

</pre>

<h2><a name="Version3.46"></a>Version 3.46 (limited) (9/4/95)</h2>

<p>
This is the "serious beta test" release for the next public release.  It
finishes implementing RasterOp in the graphics state, and the remaining
commonly used parts of setpagedevice.

<h3><a name="V3.46_Documentation"></a>Documentation</h3><pre>
Documents some possible problems when building with DJGPP v2.0-beta.
(make.doc)

Adds documentation on using Ghostscript as a PDF interpreter.  (use.doc)

Notes linking problems with the Watcom 10.0 environment.  (make.doc)

</pre><h3><a name="V3.46_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The rule for $(ccfonts).dev was wrong.  (gs.mak)

Makes some additional filters into 'features'.  (devs.mak, gs.mak)

Splits off 2 new makefiles from gs.mak, which had gotten very large: lib.mak
(graphics library) and int.mak (interpreters).  (tar_cat, tar_cat.bat,
*.mak)

Adds a new 'config-clean' target that may be helpful in changing
configuration definitions.  (gs.mak)

Notes in the relevant makefiles that on Unix and DVX systems, one should not
edit 'makefile' or the concatenated makefile, but should edit the individual
subfile and run tar_cat.  (ansihead.mak, cc-head.mak, dgc-head.mak,
gcc-head.mak, devs.mak)

Updates the Watcom makefiles to handle Watcom release 10.5, in which many
executables moved to different directories.  (watc.mak, watcwin.mak,
wccommon.mak)

Adds a pdf2ps shell script.  (pdf2ps, pdf2ps.bat)

Adds a -sFONTMAP= switch to specify the name of the Fontmap file.
(gs_fonts.ps)

Adds a -u&lt;name&gt; switch to undefine a name from systemdict.  (interp.h, gs.c,
iinit.c)

Adds a -dFIXEDRESOLUTION switch to parallel -dFIXEDMEDIA.  Makes -g set
FIXEDMEDIA and -r set FIXEDRESOLUTION.  (gs_init.ps, gs_setpd.ps, gs.c)

Changes some build procedures to avoid problems with read-only source files.
(gs.mak, int.mak, lib.mak)

</pre><h3><a name="V3.46_Utilities"></a>Utilities</h3><pre>

Adds a utility for emulating the CIE color mapping algorithms.  (docie.ps)

</pre><h3><a name="V3.46_Drivers"></a>Drivers</h3><pre>

Changes the x11alpha device so that it uses 32-bit pixels with 8 bits of
alpha.  (gdevxalt.c)

Updates the Epson Stylus Color driver to Gunther Hess's release 1.17.
(devs.mak, unix-end.mak, devices.doc, stcolor.ps, gdevstc.h, gdevstc*.c)

Updates the alternate X drivers for the change from PageSize to MediaSize.
(gdevxalt.c)

Makes Duplex an optional parameter of printer devices rather than of all
devices.  (gdevprn.h, gxdevice.h, gsdparam.c, gdevdjet.c, gdevprn.c)

</pre><h3><a name="V3.46_Platforms"></a>Platforms</h3><pre>

Makes pipes (%pipe% file syntax) a selectable option on Unix platforms,
rather than always being included.  (ansihead.mak, cc-head.mak,
gcc-head.mak, ugcclib.mak, unixtail.mak)

</pre><h3><a name="V3.46_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- colorimage, and the dictionary form of image with
MultipleDataSources = true, didn't check that all the data sources were of
the same type.  (zpaint.c)
	- colorimage, and dictionary-type images with MultipleDataSources =
true, usually didn't work properly with files.  (zpaint.c)
	- grestoreall left a dangling pointer to the transfer function
cache.  (gsstate.c)
	- Changes made by setpagedevice could get 'lost' and not installed
in the current page device dictionary.  (gs_setpd.ps)
	- The Install procedure was called before the new page device
dictionary had gotten installed.  (gs_setpd.ps)
	- If a grestore/grestoreall/restore/setgstate operation switched
page devices, the new page device didn't get installed properly.
(gs_setpd.ps, opextern.h, zdevice2.c, zdps1.c)
	- If the current screen was a Type 1 halftone, currentscreen and
currentcolorscreen returned frequency = 60, angle = 0 rather than the
Frequency and Angle from the halftone (see Adobe TN 5085).  (gs_dps1.ps,
gs_init.ps)
	- setscreen with a Type 1 halftone dictionary didn't insert the
frequency and angle into the dictionary (see Adobe TN 5085).  (gs_dps1.ps)
	- upath didn't include a trailing moveto in the bounding box.
(gs_dps1.ps, zpath1.c)
	- setpagedevice didn't automatically rotate or scale the image when
necessary.  (gs_setpd.ps, zmedia2.c)

Moves the RasterOp operators to a separate file.  (iutil.h, iutil.c,
zgstate.c, zrop.c)

Eliminates the unnecessary "wrapper" around .setdevice.  (zdevice2.c)

Establishes the convention that all interpreter callbacks into PostScript
code use procedure names that begin with %; documents this in gs_init.ps.
Changes Type1BuildChar and Type1BuildGlyph to %Type1BuildChar and
%Type1BuildGlyph.  (gs_init.ps, gs_type1.ps, zfont0.c, zfont1.c)

Changes image / imagemask / colorimage for the new library API.  (zimage2.c,
zpaint.c)

Reorganizes font loading to make compiled fonts and Fontmap interact better
with each other.  (gs_ccfnt.ps, gs_fonts.ps, gs_init.ps, gs_res.ps)

Implements parameter collection for the new CIEBasedDEF[G] color spaces, but
doesn't actually implement the color spaces themselves.  (icie.h, zcie.c,
zcrd.c)

Renames iconfig.c as iconf.c to avoid problems with read-only source files.
(iconf.c)

</pre><h3><a name="V3.46_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- PDF to PostScript conversion didn't work.  (pdf_main.ps)

Shifts most of the work in the PDF interpreter from the reader to the
ProcSet.  This simplifies the code considerably and also makes it easier to
modify.  (gs_pdf.ps, pdf_draw.ps, pdf_font.ps, pdf_main.ps)

</pre><h3><a name="V3.46_Library"></a>Library</h3><pre>

Fixes bugs:
	- 'static' was omitted in a place that some compilers require it.
(gxccman.c)
	- Some compilers don't allow a variable with the same name as a
preprocessor macro with arguments.  (gscie.c)
	- Some places did a "return -1" rather than a proper error return.
(gsdevice.c, gxclist.c)
	- An external declaration had a typo.  (gsrop.h)
	- An extra semicolon upset some compilers.  (gzpath.h)
	- Printer devices that didn't use the standard macros for generating
their procedure vector wound up being considered as non-page devices.
(gdevprn.c)
	- Some compilers truncated identifiers longer than 31 characters.
(gscspace.h, zcie.c, gscie.c)
	- upath didn't include a trailing moveto in the bounding box.
(gspath.h, gspath1.c)
	- RasterOp value 126 returned an incorrect result.  (gsroptab.c)

Finishes implementing RasterOp in the graphics state.  (gdevmrop.h, gsrop.h,
gsropt.h, gsstate.h, gxbitmap.h, gxcindex.h, gxdcolor.h, gxdevice.h,
gzstate.h, gdevmrop.c, gscolor.c, gsdevice.c, gsimage.c, gsimage1.c,
gsimage2.c, gsimage3.c, gspcolor.c, gsrop.c, gsstate.c, gxacpath.c,
gxccache.c, gxcht.c, gxcmap.c, gxdither.c, gxdraw.c, gxht.c)

Changes forwarding devices so they forward get_bits by default.  This
probably doesn't affect any existing code.  (gxdevice.h, gsdevice.c)

Changes the API for gs_image[mask]_init to pass a structure rather than a
very large number of scalars.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE,
motivated by the addition of further image parameters to support RasterOp.
Since there are no external clients of the library yet, it shouldn't matter.
(gsimage.h, gsimage.c, gslib.c, gxccache.c)

Redefines the device "page size" as being the size of the actual media,
changing the name of the gx_device PageSize member to MediaSize, the name of
the PageSize device parameter to .MediaSize (but keeping PageSize as
equivalent, for backward compatibility), and the name of the
gx_device_set_page_size procedure to gx_device_set_media_size (keeping the
old name as a macro).  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.  It is
necessary to make setpagedevice work, and to avoid confusion about what
"page size" means.  It potentially affects any device driver, but almost
none of the device drivers distributed with Ghostscript are affected, and
those have been updated.  (gsparam.h, gxdevice.h, gsdevice.c, gsdparam.c,
gspath.c)

Renames gconfig.c as gconf.c to avoid problems with read-only source files.
(gconf.c)

Adds an API procedure for setting a bitmap pattern.  (gscolor2.h,
gspcolor.c)

</pre>

<h2><a name="Version3.45"></a>Version 3.45 (limited) (8/27/95)</h2>

<p>
The purpose of this release is to fix some minor bugs reported by commercial
licensees, and to add two enhancements: optional RenderTable interpolation
for CIE color, and reducing the temporary space used during character
caching (also for a licensee).

<h3><a name="V3.45_Documentation"></a>Documentation</h3><pre>

Notes that the only valid return values from get_alpha_bits are 1, 2, and 4.
(drivers.doc)

Notes that the get_bits driver procedure will return a pointer to aligned
data, but does not require the caller's data area to be aligned.
(drivers.doc)

</pre><h3><a name="V3.45_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- Many of the printer and file output drivers in devs.mak still
included gdevprn.$(OBJ) in their dependencies.  (devs.mak)
	- PDEVH was used before it was defined.  (devs.mak)
	- GENCONF_XE was used before it was defined.  (unixhead.mak,
unix-end.mak)

Makes it possible to switch sfile implementations without editing gs.mak.
(gs.mak)

Makes it possible to specify alternate compiled font tables without editing
gs.mak.  (gs.mak)

Allows quoted arguments in @-files, e.g.,
	-sOutputFile="a file name with spaces"
(gs.c)

</pre><h3><a name="V3.45_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The ps2ascii script could fail to delete temporary files in case
of an abnormal exit.  (ps2ascii)

</pre><h3><a name="V3.45_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The MS Windows printer capability test was wrong.  (gdevwpr2.c)
	- The MS Windows and OS/2/PM displays weren't page devices.
(gdevwdib.c, gdevpm.c)

Gets rid of all direct references to dev-&gt;PageSize in drivers.  (gdevl256.c,
gdevvglb.c)

</pre><h3><a name="V3.45_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The 32-bit MS Windows configuration file for the Borland C++
compiler was missing from the fileset.  (bcc32.cfg, tar_gs)

Makes the printer devices in the OS/2 implementation capable of outputting
directly to the print spooler.  (use.doc, gp_os2.c)

Makes printing on Windows NT and Windows 95 use the printer queue.
(gp_mswin.c, gswin32.rc)

</pre><h3><a name="V3.45_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Copying a null device produced an uninitialized pointer.
(gsdevice.c)
	- The dictionary returned by deviceinfo wasn't read-only.
(gs_lev2.ps)
	- If a filter's init code failed, an entry on the operand stack
(usually the top) could be smashed.  (files.h, zfile.c, zfilter.c)

Adds const in a few places that needed it.  (zwppm.c)

Adds interpolation to the CIE RenderTable lookup.  (icie.h, zcie.c, zcrd.c)

</pre><h3><a name="V3.45_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Allows PDF files with control-character garbage at the end, and up to 250
characters of garbage at the beginning.  The latter is only supported by
runpdf, not by run.  (pdf_base.ps, pdf_main.ps)

</pre><h3><a name="V3.45_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- A 1-D CCITTFaxDecode stream could give an error if an input buffer
boundary fell just before a 0-length termination code.  (scfx.h, scfd.c)

</pre><h3><a name="V3.45_Library"></a>Library</h3><pre>

Fixes bugs:
	- A variable was used before being set, which could cause band
devices to become confused when processing colored halftones.  (gxclist.c)
	- Some of the color and tile bookkeeping for band lists was wrong
(as of 3.44), causing tiled areas to be filled with garbage.  (gxclist.c,
gxclread.c)
	- Colored Patterns showed up blank on devices whose native
representation of `black' was a non-zero value.  The fix removes the
'cached' member of the gx_device structure, and requires monobit memory
devices to have a palette; this is a NON-BACKWARD-COMPATIBLE CHANGE for
anyone who was foolish enough to statically initialize a gx_device structure
without using the macros in gxdevice.h or gdevprn.h.  (gdevmem.h,
gxdevice.h, gxdevmem.h, gdevm1.c, gdevmrop.c, gsdevice.c, gxcpath.c,
gxdither.c)

Provides the framework for band devices to implement alpha (anti-aliasing).
(gxcldev.h, gdevprn.c, gsdevice.c, gxclist.c, gxclread.c)

Implements an efficient API for enumerating paths using device coordinates.
(gspath.h, gxpath.h, gzpath.h, gspath1.c, gxpath2.c)

Changes the character cache logic so that when rasterizing large
anti-aliased characters, it converts the oversampled bits to alpha values on
the fly rather than waiting until it has rasterized the entire character.
This saves a lot of temporary space, at the expense of some extra time and
lower quality results for Type 3 characters that don't use a single fill or
imagemask operation to draw the character.  This enhancement requires adding
a member to the gx_device structure (max_fill_band), which is a
NON-BACKWARD-COMPATIBLE CHANGE for badly written drivers (see above).
(gxchar.h, gxdevice.h, gxpaint.h, gdevabuf.c, gschar.c, gspaint.c,
gxccache.c, gxccman.c, gxfill.c)

Changes the palette member of memory devices from gs_string to
gs_const_string.  (gdevmem.h, gxdevmem.h, gdevmem.c, gdevm1.c)

Starts to decouple halftoning from the graphics state machinery, so
it can be applied after banding rather than before.  (gxdcolor.h,
gxdht.h, gxdither.h, gzht.h, gxcmap.c, gxdither.c, gxdraw.c)

Starts to decouple path filling from the graphics state machinery, so
that we can pass paths through band lists.  (gxpaint.h, gxfill.c)

Adds interpolation to the CIE RenderTable lookup.  This is optional, enabled
by #define CIE_RENDER_TABLE_INTERPOLATE in gscie.h.  (gscie.h, gxctable.h,
gscie.c, gxctable.c)

</pre>

<h2><a name="Version3.44"></a>Version 3.44 (limited) (8/21/95)</h2>

<p>
This includes a few bug fixes, but its main purpose is to add two new
features: monobit and 8-bit gray-scale RasterOp (at the driver level, not at
the gstate level yet), and (compressed) band lists in RAM.  Of course, these
new features may have introduced new bugs!

<h3><a name="V3.44_Documentation"></a>Documentation</h3><pre>
Adds contact information for a user working on NeXT machines.  (README)

Notes that Ghostscript runs on FreeBSD.  (README)

Adds copy_rop (the RasterOp operation) to the driver interface.
(drivers.doc)

Adds FONTPATH information for more operating systems.  (use.doc)

</pre><h3><a name="V3.44_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The tar_cat script needed a #!/bin/sh to execute correctly on all
platforms.  (tar_cat)
	- There were a number of minor errors in the makefiles.  (gs.mak,
unixhead.mak)
	- Level 2 configurations without command lists had two undefined
references.  (gs.mak)
	- Some shells required an extra ';' to terminate an 'if' command.
(ugcclib.mak, unix-end.mak, unixtail.mak)

Updates the JPEG code to the officially released version 6 of the IJG
library.  See jpeg.mak for information on where to find this library.
(jpeg/*, jpeg.mak, *.mak, modules.lis)

Adds a definition of XEAUX to the makefiles to parallel CCAUX, primarily for
cross-compilation environments.  All references to &lt;some-program&gt;$(XE) must
be replaced by $(&lt;SOME-PROGRAM&gt;_XE), where some-program={$(GS), ansi2knr,
echogs, genarch, genconf, geninit}.  This is a NON-BACKWARD-COMPATIBLE
CHANGE, required in order for the makefiles to work in cross-compiled
environments.  (For non-cross-compiled environments, it currently doesn't
matter.)  (gs.mak, *.mak)

</pre><h3><a name="V3.44_Utilities"></a>Utilities</h3><pre>

Updates ps2ai.ps to version 2.13.  (ps2ai.ps)

Changes all the utility shell scripts to include #!/bin/sh, to use exec, and
to pass the original arguments using "$@".  (bdftops, font2c, gsbj, gsdj,
gslj, gslp, gsnd, wftopfa)

</pre><h3><a name="V3.44_Drivers"></a>Drivers</h3><pre>

Adds the requirement that all page-oriented devices (i.e., those that use
gdevprn.h and implement the print_page procedure) include page.dev in their
dependencies and use $(SETPDEV) rather than $(SETDEV) in their makefile rule
bodies.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.  Without this change, the
command list logic (over 25K of unnecessary object code) would have to be
included in every configuration.  (gs.mak, devs.mak, echogs.c)

Adds a user-contributed driver for the Okidata Microline (IBM compatible)
dot matrix printers.  (gdevokii.c)

Adds copy_rop (the RasterOp operation) to the driver interface.  Currently,
only monobit and 8-bit gray-scale devices implement it.  (gxdevice.h,
gsdevice.c)

Adds the ability to read back bits from the display to the x11 devices.
(x_.h, gdevx.c, gdevxalt.c)

</pre><h3><a name="V3.44_Platforms"></a>Platforms</h3><pre>

Makes some minor changes to support QNX.  (stat_.h)

Removes the mswinprn driver from the 16-bit Windows configuration, because
the 64K default data segment overflowed.  (bcwin.mak)

</pre><h3><a name="V3.44_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Type 1 fonts didn't accept packed arrays for Subrs or OtherSubrs.
(zchar1.c, zfont1.c)
	- TBCP-encoded files (yes, I know there isn't supposed to be any
such thing) didn't automatically activate TBCP decoding.  (gs_init.ps)
	- Fonts with invalid FID entries weren't detected.  (zfont.c)

Speeds up dictionary operations slightly by removing redundant checks for
nulls.  (zdict.c)

Starts adding support for the new CIEBasedDEF and CIEBasedDEFG color spaces.
(gs_l2img.ps, gs_lev2.ps, igstate.h, zcrd.c)

Adds access operators for RasterOp and transparency in the graphics state.
(They don't actually do anything yet.)  (zgstate.c)

</pre><h3><a name="V3.44_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- PDFDocEncoding was missing characters 24-31.  (gs_pdf_e.ps)

Moves the definition of pdfmark from systemdict to userdict so that Adobe
PostScript files won't think the interpreter is a distiller.  (gs_pdf.ps)

</pre><h3><a name="V3.44_Library"></a>Library</h3><pre>

Fixes bugs:
	- Some JPEG images had bands of garbage alternating with bands of
valid data.  IJG v6 fixed this -- see above.
	- With FPU_TYPE = -1, the cosine routine returned incorrect values
for angles above 270 degrees.  (gsmisc.c)
	- CIE color conversion didn't work on 16-bit systems.  (gscie.h,
gscie.c)

Partially implements reducing the intermediate space for rasterizing
anti-aliased characters by compressing the oversampled representation to an
alpha array incrementally.  (gdevmem.h, gxchar.h, gxdevmem.h, gdevabuf.c,
gschar.c, gspaint.c, gxccman.c)

Starts adding support for the new CIEBasedDEF and CIEBasedDEFG color spaces.
(gscie.h, gscspace.h, gscie.c)

Completes the implementation of band lists in RAM.  To select this feature,
change the definition of cl_impl in gs.mak from clfile to clmem.  (Someday
we'll make this easier.)  (gxclmem.h, gxclmem.c)

Finishes implementing RasterOp and transparency at the driver level for
monobit and 8-bit gray-scale devices, and implements some of the framework
for general multiple-bit-per-pixel devices.  See drivers.doc for
documentation.  (gsropt.h, gxcldev.h, gxclist.h, gdevm1.c, gdevm8.c,
gdevmem.c, gdevmrop.c, gschar.c, gxclist.c, gxclread.c)

Implements the ability to include commands applicable to all bands, rather
than an individual band, in the band list.  Eventually this will be used for
passing halftones through the band list.  (gxcldev.h, gxclist.h, gxclist.c)

Adds support for 2-bit-deep 'word' memory devices.  (gdevmem.h, gxdevmem.c,
gdevm2.c)

Changes the initialization for memory devices so that they determine their
polarity from the device for which they are buffering the image (if any).
This is a subtle change.  (gdevmem.h, gdevmem.c, gdevm1.c, gsdevmem.c)

</pre>

<h2><a name="Version3.43"></a>Version 3.43 (limited) (8/10/95)</h2>

<p>
Fixes a few more minor bugs, and changes FEATURE selection back to
essentially the way it was before 3.41.

<h3><a name="V3.43_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- A ~ was missing in a URL.  (README)

Adds information about an Amiga port of Ghostscript.  (README)

Removes a file called gs.1.c, which appears to be an obsolete version of
gs.1.

Adds DCX documentation to the PCX driver.  (We don't support DCX yet, but we
might in the future.)  (gdevpcx.c)

Adds information about getting Type 1 fonts from H-P if you have an H-P
PostScript printer.  (use.doc)

</pre><h3><a name="V3.43_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The auxiliary programs wouldn't compile with ANSI compilers that
don't accept K&amp;R syntax.  (ccgs, gs.mak, ugcclib.mak, *head.mak,
unixtail.mak, echogs.c, genarch.c, genconf.c, geninit.c)

Reinstates FEATURE_DEVS in the makefiles, getting rid of FEATURE1..10.  THIS
IS A NON-BACKWARD-COMPATIBLE CHANGE, but it puts things back the way they
were before 3.41, with one exception: compiling the PostScript
initialization code into the executable is now a separate macro
COMPILE_INITS with a definition of 0 or 1, instead of the ccinit 'feature'.
(gs.mak, *.mak, fonts.doc, make.doc)

Adds a CCLEAF macro to the makefiles, for optimizing the compilation of
modules containing only leaf procedures.  (gs.mak, *.mak)

Adds a CONFIG makefile variable that helps in maintaining multiple variants
in a single directory.  (gs.mak, *.mak)

</pre><h3><a name="V3.43_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- An extern for exit() (in &lt;stdlib.h&gt;) was omitted.  (gp_vms.c)

</pre><h3><a name="V3.43_Fonts"></a>Fonts</h3><pre>

Reorganizes the compiled font facility so that fonts can be compiled and
turned into a library by third parties.  (gs.mak, font2c.ps, gs_ccfnt.ps,
ccfont.h, iccfont.c, ccfontab.c)

</pre><h3><a name="V3.43_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- internaldict was implemented as a dictionary in systemdict and an
operator in userdict, rather than as an operator in systemdict.  This caused
a noaccess error when loading certain Type 1 fonts.  (gs_init.ps,
gs_type1.ps)
	- xfonts couldn't handle modified encodings.  (zfont2.c)

Changes the build date printout in the help message to YYYY-MM-DD.  (gs.c)

Adds native support for Multiple Master fonts (WeightVector).  (zfont1.c)

Implements sin and cos more efficiently (by table lookup with linear
interpolation) on machines with slow (or no) floating point.  (zmath.c)

Separates out the code for 'reading' the .ps initialization files, for the
new COMPILE_INITS arrangement.  (imain.h, gconfig.c, gsmain.c, iconfig.c,
iccinit0.c, iinit.c)

</pre><h3><a name="V3.43_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The CCITTFaxDecode filter could read up to 3 bytes beyond EOD.
This fix doesn't quite cover all cases, but at least it makes things better.
(ghc.h, sbhc.c, scfd.c)

</pre><h3><a name="V3.43_Library"></a>Library</h3><pre>

Fixes bugs:
	- After a nocurrentpoint error from a show operation with a
composite font, the bookkeeping was confused and could cause an access
error.  (gschar.c)
	- xfonts couldn't handle modified encodings.  (gsccode.h, gxchar.h,
gxfont.h, gxxfont.h, gschar.c, gxccache.c)

Makes .charboxpath able to use cached character information.  (gxchar.h,
gschar.c)

Adds native support for Multiple Master fonts (OtherSubrs 14-18).
(gxfont1.h, gstype1.c)

Improves the hashing functions for the character cache.  (gxfcache.h,
gxccman.c)

Adjusts the character oversampling algorithm to reduce thickening for
devices with alpha capability.  (gsbitops.c)

Improves the encoding of the band list for certain kinds of small
rectangles.  (gxcldev.h, gxclist.c, gxclread.c)

Implements sin and cos efficiently on machines with slow (or no) floating
point.  (gxfarith.h, gsmatrix.c, gsmisc.c, gspath1.c)

</pre>

<h2><a name="Version3.42"></a>Version 3.42 (limited) (8/2/95)</h2>

<p>
Fixes a few significant problems in 3.41, and brings the DLL code up to
date.

<h3><a name="V3.42_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- language.doc still referred to rectappend rather than .rectappend.
(language.doc)

Adds documentation on the Macintosh port.  (readme, make.doc)

Updates the DLL documentation.  (dll.doc)

Documents the BCP and TBCP filters as non-experimental.  (language.doc)

</pre><h3><a name="V3.42_Procedures"></a>Procedures</h3><pre>

Changes the build date printout to YYYY-MM-DD.  (gs_init.ps)

</pre><h3><a name="V3.42_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS build script had gotten out of sync with the makefiles
(again).  (vms.mak, modules.lis)

Brings the MS Windows and OS/2 platforms up to date with the rest of the
code, including DLL support for OS/2.  (os2.mak, gsdll*.def, gdevswn.c,
gdevpm.c, gdevwdib.c, gp_mswin.c, gp_os2.c, gsdll.c, gsmain.c)

Adds a new platform-specific routine gp_do_exit, as an alias for the C
library `exit' call.  (gp.h, gsdll.c, gsmain.c, gp_*.c)

</pre><h3><a name="V3.42_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- .forgetsave at the outermost level didn't clear the l_new bit,
causing changes to be undone improperly.  (isave.c)
	- A 'void' formal parameter list upset some compilers (as it should
have).  (gsmain.c)

Adds a .charboxpath operator that appends to the current path the bounding
boxes of the characters of a string.  (zchar.c, zchar1.c)

</pre><h3><a name="V3.42_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- A procedure was declared private inconsistently.  (siscale.c)

</pre><h3><a name="V3.42_Library"></a>Library</h3><pre>

Fixes bugs:
	- The library test program didn't do a necessary initial gsave.
(gslib.c)
	- The fix for landscape monobit images in 3.41 could smash memory.
(gsimage1.c)
	- 1-pixel-wide lines drawn with image or imagemask still disappeared
sometimes.  (gsimage.c)

Does some more preparatory work for the implementation of command lists in
RAM.  (gdevprn.h, gxclio.h, gxclist.h, gxclfile.c, gxclist.c, gxclread.c)

Adds a gs_charboxpath procedure that appends to the current path the
bounding boxes of the characters of a string.  (gschar.h, gscpm.h,
gstype1.h, gxchar.h, gxpath.h, gxtype1.h, gzstate.h, gschar.c, gspaint.c,
gstype1.c, gxpath.c)

</pre>

<h2><a name="Version3.41"></a>Version 3.41 (limited) (7/27/95)</h2>
<p>
Another incremental release with bug fixes and customer-requested
enhancements.  This release was intended to include the full setpagedevice
media matching and adjustment algorithm, but we discovered some
architectural problems during development, and have postponed it.

<h3><a name="V3.41_Documentation"></a>Documentation</h3><pre>

Replaces the build instructions for NeXTSTEP with more up-to-date and
accurate ones.  (make.doc)

Notes that some extra manual steps are required when cross-compiling.
(make.doc)

Documents how to define new 'features' in the makefile.  (gs.mak)

</pre><h3><a name="V3.41_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The build rule for ccinit.dev was circular.  Fixing this required
a small but NON-BACKWARD-COMPATIBLE change in the way that features are
selected in the makefiles (FEATURE_DEVS replaced by FEATURE1..10).  (*.mak,
fonts.doc, make.doc)

Changes the build rule for gconfig.h to be less likely to overrun MS-DOS's
command line length limit.  (gs.mak)

Adds a -dFIXEDMEDIA switch to indicate that the media size should be
considered fixed after initialization.  (gs_init.ps)

</pre><h3><a name="V3.41_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- traceimg.ps incorrectly referred to .stdout.  (traceimg.ps)
	- prfont.ps didn't display unencoded characters correctly.
(prfont.ps)
	- ps2epsi didn't give correct bounding box information.  (ps2epsi,
ps2epsi.ps)
	- ps2epsi produced DSC comments that didn't fully conform to the
Adobe standard.  (ps2epsi, ps2epsi.ps)

Allows viewpbm.ps to take multiple files on the command line.  (viewpbm.ps)

</pre><h3><a name="V3.41_Drivers"></a>Drivers</h3><pre>

Adds a preliminary, contributed PNG driver.  THIS IS NOT USABLE YET -- DON'T
TRY TO USE IT.  (png.mak, gdevpng.c)

Increases the maximum allowable scan line width for the TIFF drivers from
5183 pixels to 12863 pixels.  (scf.h)

</pre><h3><a name="V3.41_Platforms"></a>Platforms</h3><pre>

Updates the MS Windows DLL code to export the new, suspendable run_string
interface.  (gsdll.h, gsdll.c, dll.doc)

</pre><h3><a name="V3.41_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- There were several errors in cfonts.mak.  (cfonts.mak)
	- The compiled fonts option didn't offer both free and standard
configurations.  (gs.mak)
	- A bug in the handling of Encoding resources prevented compiled
fonts from working.  (gs_res.ps)

Adds a little more support for CID-keyed fonts.  They still aren't anywhere
near usable.  (gs_cidfn.ps, gs_type1.ps)

Adds a new Fontmap for Solaris 2.3.  (Fontmap.Solaris)

Adds support for Type 4 fonts (Type 1 fonts with their own BuildChar
procedures), including the CCRun procedure in internaldict.  (gs_fonts.ps,
gs_res.ps, gs_type1.ps)

</pre><h3><a name="V3.41_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- showpage and copypage didn't honor NumCopies in a page device.
(gs_setpd.ps, zdevice2.c)
	- currentpagedevice returned incorrect information if the current
device wasn't a page device.  (gs_setpd.ps)
	- currentpagedevice didn't guarantee the presence of InputAttributes
and OutputAttributes.  (gs_setpd.ps)
	- The l_new bit wasn't set properly when a dictionary changed from
packed to unpacked keys, leading to unnecessary saves.  (idict.c)
	- Streams requiring intermediate buffering could read ahead too far,
causing input data to be skipped.  (zfilter.c)
	- cshow didn't reset the font to the base font when calling the
procedure.  (zchar2.c)
	- The Install procedure in a page device didn't set the default CTM.
(gs_setpd.ps, zmatrix.c)
	- findlibfile didn't handle special files like %stdin correctly.
(zfile.c)
	- setpagedevice didn't implement media matching.  (gs_setpd.ps,
zdevice2.c, zmedia2.c, zmatrix.c)
	- Some floating point numbers didn't print out with enough digits to
read back in with the identical value.  (iutil.c)
	- Integers that overflowed 31 bits (but not 32 bits) were converted
to negative integers rather than correct positive reals.  (iscannum.c)

Removes an experimental operator that called the image scaling/interpolation
code.  (zimage2.c)

Adds a -sSUBSTFONT=&lt;fontname&gt; switch that substitutes the given font for all
unknown fonts, bypassing the normal intelligent substitution algorithm.
(gs_fonts.ps)

Adds the Revision system parameter.  (zmisc2.c)

Adds a .knownundef operator that does an undef and returns true iff the key
was formerly present.  (zdict.c)

Makes the maximum length of names be 256 if EXTEND_NAMES is being used, 16K
otherwise.  (inamedef.h, iname.c)

Adds internaldict.  (gs_init.ps, iinit.c)

Adds support for Type 4 fonts.  (bfont.h, zchar.c, zchar1.c, zfont1.c,
zfont2.c)

Changes .encodingdict to EncodingDirectory, for compatibility with Adobe
interpreters.  (gs_init.ps, gs_kanji.ps, gs_res.ps)

Adds superexec, an undocumented operator that is equivalent to exec but
suppresses all invalidaccess checks.  NOT COMPLETED YET; currently superexec
is equivalent to exec.  (zcontrol.c)

</pre><h3><a name="V3.41_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- .stderr was used but is no longer defined.  (pdf_base.ps)

</pre><h3><a name="V3.41_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Not all streams initialized their state pointer.  (stream.c,
sfile.c, sfileno.c)

Adds a filter for the smoothed image scaling algorithm.  Eventually this
filter will require very little intermediate storage; right now it still
needs to buffer the entire intermediate image.  (siscale.h, siscale.c)

Increases the maximum allowable scan line width for the CCITTFaxEncode
filter from 5183 pixels to 12863 pixels.  (scf.h)

</pre><h3><a name="V3.41_Library"></a>Library</h3><pre>

Fixes bugs:
	- setpagedevice didn't update NumCopies correctly.  (gdevprn.c,
gsdparam.c)
	- The newly optimized code for monobit bitmaps could cause an
out-of-bounds memory access and/or make unaligned references.  (gsimage1.c)
	- setpagedevice with unknown keys could cause an /undefined error.
(gsdparam.c)
	- cshow didn't reset the font to the base font when calling the
procedure.  (gschar.h, gschar.c)
	- The Install procedure in a page device didn't set the default CTM.
(gzstate.h, gschar.c, gscoord.c, gsdevice.c)
	- Very non-linear EncodeABC procedures in a color rendering
dictionary could produce very inaccurate results.  (gscie.h, gscie.c)
	- The line_ptrs pointer in memory devices didn't get relocated if
the bitmap was moved during garbage collection, leading to memory smashing.
(gdevmem.c)
	- setpagedevice didn't implement media matching.  (gsdparam.c,
gscoord.c)
	- 'word' memory devices weren't recognized as memory devices.
(gdevmem.c)
	- makeimagedevice allocated, and then didn't free, an unnecessary
palette for monobit devices.  (gsdevmem.c)
	- The hack for 1-bit-wide images didn't work consistently,
particularly in landscape orientation.  (gsimage.c, gsimage0.c)

Adds an .IgnoreNumCopies page device parameter that causes #copies and
NumCopies to be ignored.  (gxdevice.h, gsdevice.c, gsdparam.c)

Removes the .IsPageDevice device parameter.  (gsdparam.c)

Converts the image scaling/interpolation code to a filter.  (gximage.h,
gsimage.c, gsimage0.c, gsimage3.c)

Adds support for Type 4 fonts.  (gxfont.h)

Adds a default implementation of parameter lists, designed to be usable
easily from C code.  (gsparam.h, gsparam.c)

</pre>

<h2><a name="Version3.40"></a>Version 3.40 (limited) (6/28/95)</h2>

<p>
This is another incremental limited release for delivery of a couple of
important bug fixes (pixel 'holes' in rotated images, setpagedevice errors
on some platforms) and an enhancement (architectural support for band lists
in RAM).

<h3><a name="V3.40_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The FTP location of the EMX DLLs was incorrect.  (use.doc)

</pre><h3><a name="V3.40_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- A couple of build rules for IJG v6 were omitted.  (jpeg.mak)

</pre><h3><a name="V3.40_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- prfont.ps wouldn't print more than 128 unencoded characters.
(prfont.ps)

</pre><h3><a name="V3.40_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- setpagedevice often caused /undefined errors on MS Windows and
OS/2 platforms.  (gdevmswn.c, gdevpm.c)
	- The VMS module list had gotten out of sync with the makefiles
(again).  (modules.lis)

</pre><h3><a name="V3.40_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- A couple of casts betwen char * and byte * were omitted.
(gsmain.c)
	- gs_[main_]run_file_open wasn't exported properly.  (imain.h,
main.h, gsmain.c)

</pre><h3><a name="V3.40_Streams"></a>Streams</h3><pre>

Changes the DCTEncode filter to return an error if it wasn't supplied enough
data before being closed.  (sdcte.c)

</pre><h3><a name="V3.40_Library"></a>Library</h3><pre>

Fixes bugs:
	- The coordinate computations for all filling operations were
slightly inaccurate, leading to pixel 'holes' in rotated images.  (gxdda.h,
gximage.h, gsimage*.c, gxdraw.c, gxfill.c)

Undoes an "optimization" (inlining the normal, fast case of a procedure)
that actually hurt performance.  (gxclist.c)

Refactors the command list code so that it in the future it will be able to
store command lists either in RAM or in the file system.  (gdevprn.h,
gxcldev.h, gxclio.h, gxclist.h, gdevprn.c, gxclfile.c, gxclist.c,
gxclread.c)

Changes the interface to the path filling code to take separate X and Y
adjustment values.  (gxpaint.h, gspaint.c, gxfill.c)

Makes the command list allocate a small tile cache if the device doesn't
need halftones.  (gxclist.c)

</pre>

<hr>

<h2><a name="Version3.39"></a>Version 3.39 (limited) (6/24/95)</h2>

<p>
This is again an incremental release primarily for delivery of enhancements
(suspendable string input in particular) to commercial customers, and with a
few bug fixes.

<h3><a name="V3.39_Documentation"></a>Documentation</h3><pre>
Notes that PDF files and repositioning PostScript files do not work if
Ghostscript was compiled with VAX C.  (use.doc)

Notes the requirement for EOD lookahead in decoding filters.  (strimpl.h)

</pre><h3><a name="V3.39_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- There were a number of undefined or used-before-defined variables
in the makefiles.  (devs.mak, dvx-head.mak, unixhead.mak, gs.mak)
	- Some commands in the makefile exceeded the MS-DOS limit of 120
characters.  (gs.mak)

Adds a -P and -P- switch to control whether the search path automatically
includes `.' as its first element.  Moves the default value of this choice
(SEARCH_HERE_FIRST) from gsmain.c to iminst.h.  (iminst.h, gs.c, gsmain.c,
use.doc)

Makes some makefile changes in anticipation of the IJG v6 release.  (*.mak)

</pre><h3><a name="V3.39_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- font2c generated invalid C procedure names from font names that
contained non-alphanumerics other then '-'.  (font2c.ps)
	- font2c generated a single element of incorrect type for numeric
arrays of zero length.  (font2c.ps)

</pre><h3><a name="V3.39_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS build scripts had gotten out of sync (again).  (vms*.mak,
modules.lis)

</pre><h3><a name="V3.39_Fonts"></a>Fonts</h3><pre>

Makes the FONTPATH directory scanner accept fonts that begin with
%!PS-AdobeFont or %!FontType1 with no following `-'.  (gs_fonts.ps)

</pre><h3><a name="V3.39_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- eq and ne on arrays or dictionaries required read access.
(zrelbit.c)
	- An include was missing.  (zcsindex.c)
	- .forgetsave at the outermost level didn't reset the l_new flag in
changed slots, leading to an anomalous (although perhaps not harmful) state.
(isave.c)
	- Dictionary growing or unpacking would both save and free the old
keys array, leading to a dangling reference.  (idict.c)

Changes gs_interpret so that for .quit with a negative operand &lt;= -100,
gs_interpret returns e_Fatal rather than the operand.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE, but as far as we know, it doesn't affect
anyone.  (interp.c)

Adds an API to allow feeding string input to the interpreter in pieces.
(errors.h, imain.h, main.h, gs.c, gsmain.c, interp.c, zcontrol.c, zfilter.c)

Adds new predicates .identeq and .identne that test "pointer equality", even
for numbers and strings.  (iutil.h, iutil.c, zrelbit.c)

Changes a few uses of return_error to return in places that don't lead
directly to a PostScript error.  (idict.c)

</pre><h3><a name="V3.39_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The logic for skipping up to a 0xff byte when decoding JPEG data
could skip too much.  (sdctd.c, sjpegd.c)
	- If a buffer boundary fell in the middle of, or just before, an
EOD, some decoding filters could stop reading too soon.  (sbcp.c, smtf.c,
sstring.c)

Makes some minor changes in anticipation of the IJG v6 release.
(gsjmorec.h)

</pre><h3><a name="V3.39_Library"></a>Library</h3><pre>

Fixes bugs:
	- A declaration should have been removed.  (gsdll.c)
	- The library initialization/termination API wasn't declared.
(gslib.h, gsinit.c, gsmain.c)
	- A variable and a preprocessor macro with the same name confused
VAX C.  (gxclist.c)
	- Image devices with depth 2-8 and only gray shades in the palette
didn't set color_info correctly.  (gsdevice.c)

Speeds up unrotated black-and-white images further by making them render
directly into a memory device when possible.  (gxdevmem.h, gsimage1.c)

</pre>

<h2><a name="Version3.38"></a>Version 3.38 (limited) (6/18/95)</h2>

<p>
This release incorporates several customer-requested enhancements (cleaner
separation of the graphics library from the interpreter, option for &gt;64K
names, true garbage collection of names, better handling of halftones on
band devices).  It is intended primarily for those customers, but is
intended as a dry run for the next public release.

<h3><a name="V3.38_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- gx_bitmap had not been updated to gx_tile_bitmap.
(drivers.doc)

</pre><h3><a name="V3.38_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The man page extension in the Unix makefiles was still $(manext),
not $(man1ext).  (unix-end.mak)
	- 'make clean' didn't remove gs_init.c.  (gs.mak)

Restructures the makefiles to better separate the language interpreters from
the graphics core.  (gs.mak)

Adds a -dNOPROMPT switch to suppress the end-of-page prompts (but still wait
for the user to type a newline).  This is different from -dNOPAUSE, which
suppresses both the prompts and the wait.  (gs_init.ps)

</pre><h3><a name="V3.38_Utilities"></a>Utilities</h3><pre>

Replaces the mergeini.ps program with an equivalent (actually slightly
better) version written in C.  (gs.mak, *.mak, psfiles.doc, use.doc,
geninit.c)

</pre><h3><a name="V3.38_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The color DeskJet drivers wouldn't compile with a K&amp;R compiler,
because some of the procedure definitions weren't in the restricted syntax
that ansi2knr requires.  (gdevcdj.c)
	- The color DeskJet drivers wouldn't compile because of a bug in
Sun's cc.  (gdevcdj.c)

Changes the BJ-10e(x) margins to be identical to those of the BJ-200.
(gdevbj10.c)

Changes the LaserJet margins in response to a user's request.  (gdevdjet.c)

Changes the psmono driver to produce slightly larger files that execute
faster on typical Level 1 printers.  (gdevpsim.c)

Changes the psmono driver so that it does not scale the image to fit the
page size, but instead scales it to be the same physical size on the page.
THIS IS A NON BACKWARD COMPATIBLE CHANGE.  However, for full-page images, it
will not have any visible effect.  (gdevpsim.c)

</pre><h3><a name="V3.38_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- There were some problems associated with printing in 32-bit
Windows environments.  (gp_mswin.c)
	- The IBM RS/6000 needs both &lt;time.h&gt; and &lt;sys/time.h&gt;.  (time_.h)

Adds the PDF interpreter to the standard MS Windows configuration.
(bcwin.mak)

</pre><h3><a name="V3.38_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- The entry for Courier-BoldItalic in cfonts.mak incorrectly named
it as Courier-Italic.  (cfonts.mak)
	- The files for Courier-Italic in cfonts.mak were inconsistently
named ncrri instead of ncri.  (cfonts.mak)
	- The rules in cfonts.mak covered only the fonts distributed with
the free versions of Ghostscript, omitting some of the standard set of 35.
(cfonts.mak)
	- The maximum number of stem hints per character in Type 1 fonts
wasn't large enough for complex Asian characters. (gxtype1.h)

Adds a -dNOFONTMAP switch to suppress loading the Fontmap file.
(gs_init.ps, gs_fonts.ps)

</pre><h3><a name="V3.38_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- One of the GC marking routines for halftones had a typo,
possibly leading to an invalid access.  (zht2.c)
	- The GC could store beyond the end of the mark stack,
possibly smashing some characters of a string or name.  (igc.c)
	- If the allocator allocated a new ref object from a
freelist, the bookkeeping for the current ref object could get
confused.  (ialloc.c)
	- The GC didn't remove names properly from the hash table.
(iname.c)
	- If a DOS editor added a ^Z to the end of an initialization file,
an error occurred during initialization.  (gs_init.ps)
	- If an initialization file had any lines longer than 128
characters, .skipeof would get an error.  (gs_init.ps)
	- makepattern could create structures in global VM pointing to
structures in local VM.  (zpcolor.c)
	- The default color rendering dictionary didn't specify large enough
ranges for some intermediate values.  (gs_lev2.ps)
	- Files being freed by a restore weren't unlinked properly, leading
to dangling pointers.  (zfile.c)
	- The interpreter used strlen without a prototype.  (interp.c)
	- Indexed or Separation colors with a CIE base or alternate space
didn't work.  (zcie.c)
	- The Watcom C 10.0 compiler produced incorrect code for an
overlapping structure assignment.  (zcsindex.c)

Removes limit of 64K names, if EXTEND_NAMES is defined at compile
time.  (*.mak, idebug.h, iminst.h, iname.h, gs.c, gsmain.c, idebug.c,
iname.c)

Makes the garbage collector really collect names.  (iname.h, inamedef.h,
isstate.h, igc.c, iname.c, isave.c)

Restructures some files to better separate the language interpreters
from their support code.  (gconfig.c, iconfig.c, iinit.c)

Restructures some files to better separate the language interpreters
from the graphics core.  (iastate.h, iastruct.h, ialloc.c)

Allows the operands of cshow to be in either order on the stack.  Adobe
interpreters apparently allow this, even though it's not documented.
(zchar2.c)

Adds a hack in cvs to truncate non-standard operator names, rather than
giving a rangecheck, to work around the "max err string" problem in some
common error handlers.  (ztype.c)

Changes the print string for unregistered operators from operator_0x... to
@0x....  (iutil.c)

Changes the garbage collector so it tries to allocate a large mark stack, to
avoid going into its 'slow' mode if the mark stack overflows.  (igc.c)

</pre><h3><a name="V3.38_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Stroked text used the text matrix, rather than just the
CTM, for scaling the line width, which could lead to inappropriately
wide lines.  (gs_pdf.ps)
	- Fonts based on other than a 1000-unit scale (i.e., with a
FontMatrix other than [0.001 0 0 0.001 0 0]) didn't scale Widths to
match the font scaling.  (pdf_font.ps)

Implements the PDF 1.1 color space extensions, except for Lab space.
(gs_pdf.ps, pdf_draw.ps)

Implements the Rotate key for pages.  (pdf_main.ps)

</pre><h3><a name="V3.38_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- When the garbage collector closed a file stream, the stream
incorrectly attempted to free the buffer.  (stream.c)

Separates out some stream implementations to better distinguish the
graphics core from the language interpreters.  (smtf.h, sfilter1.c,
smtf.c, srld.c, srle.c)

</pre><h3><a name="V3.38_Library"></a>Library</h3><pre>

Fixes bugs:
	- Compressing characters being entered in the cache could cause an
invalid memory access.  (gsbitops.c)
	- The setbbox bounding box check was slightly inaccurate.
(gsdps1.c)
	- makepattern could create structures in global VM pointing to
structures in local VM.  (gscolor2.h, gspcolor.c)
	- Out-of-range values during CIE color conversion led to random
results.  (gscie.c)
	- On output devices with non-inverted Y axes (such as MS Windows),
Interpolated images would smash memory.  (gsimage.c)
	- 90 degree rotated zero-width images caused an invalid memory
access.  (gsimage1.c)
	- If #copies was zero, showpage could create bogus empty output
files.  (gdevprn.c)
	- PageCount didn't take #copies into account.  (gsdevice.c)
	- Indexed or Separation colors with a CIE base or alternate space
didn't work.  (gscie.h, gscie.c)

Implements triangular line caps and joins, in anticipation of adding
a PCL5 interpreter.  (gsline.h, gxstroke.c)

Moves some procedures around for better separation of library from
interpreter.  (gsinit.c, gslib.c, gsmain.c, gsmisc.c)

Moves the standard allocator from the interpreter to the library.
(gsalloc.h, gxalloc.h, gxobj.h, gsalloc.c)

Starts to change the representation of paths slightly to make it possible to
identify arcs.  This change is backward-compatible for all code except
callers of gx_path_add_arc.  (gxpath.h, gspath1.c, gxpath.c, gxstroke.c)

Adds some framework for keeping track of RasterOp and "transparency" in the
graphics state, although these don't actually have any effect yet.
(gsrop.h, gsropt.h, gsstate.h, gxcldev.h, gzstate.h, gsrop.c, gsstate.c,
gxclist.c, gxclread.c)

Adds a compile-time option for using the Adobe RGB&lt;-&gt;CMYK conversion rules.
(gxdcconv.c)

Adds a driver procedure for identifying band devices.  This change is
backward-compatible for all existing devices.  (gdevmem.h, gxdevice.h,
gsdevice.c, gxclip2.c, gxclist.c, gxcpath.c)

Speeds up gray-scale images on devices requiring banding, and enables
further optimizations, by reintroducing the distinction between banded and
non-banded devices.  (gxdevice.h, gdevprn.c, gsimage1.c)

Reduces the size of the band list for halftoned images by encoding tile
indices more compactly.  (gxcldev.h, gxclist.h, gxclist.c, gxclread.c)

Extends the band list so it can cache more than 256 halftone tiles, and to
make better decisions about tile caching.  (gxcldev.h, gxclist.h, gxclist.c,
gxclread.c)

</pre>

<h2><a name="Version3.37"></a>Version 3.37 (limited) (5/11/95)</h2>

<p>
Another bug fix release distributed only to customers.

<h3><a name="V3.37_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- Some documentation about parameter lists was incorrect.
(gsparam.h)
	- The documentation did not note that one cannot "pipe" PDF files
into the interpreter.  (use.doc)

Adds documentation for the BJC-600 to devices.doc.  (devices.doc)

</pre><h3><a name="V3.37_Procedures"></a>Procedures</h3><pre>

Changes the debugging switch for OS calls from -Z0 to -Ze, and adds -Z0 for
high-level GC tracing.  (use.doc, gp_unifs.c, ialloc.c, igc.c)

</pre><h3><a name="V3.37_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The ps2ascii shell script included an erroneous @d.  (ps2ascii)

Enhances ps2ascii to output color and rectangle fill/stroke information if
COMPLEX is defined.  (ps2ascii.ps)

</pre><h3><a name="V3.37_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- the BJC-600 driver didn't handle BitsPerPixel correctly.
(gdevcdj.c)

</pre><h3><a name="V3.37_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Some buggy Type 1 fonts confused the Type 1 font reader.
(gs_fonts.ps, gs_type1.ps, pdf_font.ps)

</pre><h3><a name="V3.37_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>

Fixes bugs:
	- .registerencoding didn't accept mixedarrays, which could cause an
error if an encoding was loaded long after initialization.  (zfont2.c)
	- If a program did a lot of saves and restores, the garbage
collector could get invoked much too often.  (iastate.h, ialloc.c, igc.c,
isave.c)

Changes the name of the rectappend operator to .rectappend, since it isn't a
standard PostScript operator.  (zdps1.c)

</pre><h3><a name="V3.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- PDF files didn't interact properly with ps2ascii.  (gs_pdf.ps)
	- setdash wouldn't accept a packed array.  (zgstate.c)
	- PDF files with incorrect generation numbers in object references
produced an error rather than a warning.  (pdf_base.ps)

</pre>

<h2><a name="Version3.36"></a>Version 3.36 (limited) (5/4/95)</h2>

<p>
This is a limited-distribution release for distributing bug fixes to a few
customers.

<h3><a name="V3.36_Documentation"></a>Documentation</h3><pre>
Adds some environment variables to the man page.  (gs.1)

</pre><h3><a name="V3.36_Procedures"></a>Procedures</h3><pre>

Adds the psmono device to all 32-bit configurations.  (*.mak)

Moves the psmono and 'bit' devices to DEVICE_DEVS12 to avoid exceeding the
120-character maximum length of the DOS command line.  (*.mak)

</pre><h3><a name="V3.36_Drivers"></a>Drivers</h3><pre>

Changes the pgm[raw] and ppm[raw] drivers so they do *not* automatically
switch to pbm or pgm/ppm respectively if this is possible for the particular
page being rendered; adds pgnm[raw] and pnm[raw] drivers that *do* do this.
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.  However, existing programs will
still work; they just won't produce the smallest and simplest possible
output.  (devs.mak, gdevpbm.c)

</pre><h3><a name="V3.36_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- A multi-level restore didn't free gstates allocated by
intermediate saves, causing some global VM to be lost until a garbage
collection.  (isave.h, isave.c, zvmem.c)

Speeds up restore by skipping the scan of the character cache if no new
names have been allocated since the save.  (zfont.c)

Extends the client API to allow for popping return values off the operand
stack.  (imain.h, gs.c, gsmain.c)

</pre><h3><a name="V3.36_Library"></a>Library</h3><pre>

Modifies the character oversampling algorithms to help prevent dropouts.
(gsbitops.c, gschar.c)

</pre>

<h2><a name="Version3.35"></a>Version 3.35 (internal) (5/2/95)</h2>

<p>
This is another internal "snapshot" version.

<h3><a name="V3.35_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- Some of the file names in the `man' page had gotten out of date.
(gs.1)
	- Two references to .PageCount hadn't been changed to PageCount.
(language.doc, devarch.doc)

</pre><h3><a name="V3.35_Procedures"></a>Procedures</h3><pre>

Puts writeppmfile back in the standard Unix and DV/X configurations, since
gsftopk uses it.  Also puts the PDF reader in all 32-bit configurations.
(*.mak)

Moves the BMP devices to DEVICE_DEVS11 to avoid exceeding the 120-character
maximum length of the DOS command line.  (bcwin.mak, bcwin32.mak, os2.mak)

</pre><h3><a name="V3.35_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- unix-lpr.sh didn't handle 32-bit devices.  (unix-lpr.sh)
	- unix-lpr.sh still used the name .PageCount rather than PageCount.
(unix-lpr.sh)
	- font2c gave an error when trying to write general procedures in
font dictionaries.  (font2c.ps)

Adds a pdf2dsc.ps utility for writing out fake DSC-compliant PostScript code
to invoke the PDF reader, for the benefit of viewer programs that aren't
PDF-aware.  (unix-end.mak, pdf2dsc.ps)

</pre><h3><a name="V3.35_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The TIFF drivers put out incorrect PageNumber values.
(gdevtfax.c)
	- Printer (and file output) devices got closed and reopened
unnecessarily when changing parameters.  (gdevprn.c)
	- Printer (and file output) devices didn't check for invalid formats
following a % in OutputFile.  (devs.mak, gdevprn.c)
	- 1-bit memory devices were not considered page devices, unlike all
other memory devices.  (gsdevice.c)
	- The black-and-white H-P printers didn't close the printer
properly, causing printing not to happen under MS Windows.  (gdevprn.c)
	- Some compilers didn't like initializing a const char * to NULL.
(gdevlbp8.c)

Changes the X Windows driver so that if Ghostview specifies a bounding box,
this also sets ImagingBBox.  (gdevxini.c)

At the request of a customer, adds 1-, 4-, 8-, 24-, and 32-bit-deep memory
devices that store bits in 32-bit units rather than byte units.  (gdevmem.h,
gxdevmem.h, gdevmem.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c,
gdevm24.c, gdevm32.c)

Adds a new MS Windows printer driver, mswinpr2, that uses a DIB rather than
a DDB.  (gdevwpr2.c)

</pre><h3><a name="V3.35_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- A routine wouldn't compile because of a bug in the SGI C compiler.
(zcsindex.c)
	- Some declarations were inconsistent when compiling for segmented
environments.  (gscie.c)
	- A routine wouldn't compile because of a bug in the VAX C compiler.
(gscie.c)

Turns on compiler optimization for OS/2; adds PDF support and more devices
for Win32 and OS/2.  (bcwin.mak, bcwin32.mak, os2.mak)

</pre><h3><a name="V3.35_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Font loading used 'setglobal' without binding it, which caused
some EPS files to signal errors.  (gs_fonts.ps)
	- A zero-length string with offset = 0 in a binary object sequence
caused an error.  (iscanbin.c)

Adds a LOCALFONTS switch that causes Ghostscript to load Type 1 fonts into
the current VM, rather than global VM.  According to Adobe, this is what
Adobe printers (but not other interpreters, such as DPS and CPSI) do.
(gs_init.ps, gs_fonts.ps)

</pre><h3><a name="V3.35_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The 'note' page size command caused pages to be clipped
improperly.  (gs_statd.ps)

Adds "word" image devices.  (gs_init.ps, zdevice.c)

Starts converting the interpreter to use an explicit instance pointer.  This
is very fragmentary so far and not really supported.  (main.h, gs.c,
gsmain.c, iccinit.c)

</pre><h3><a name="V3.35_Library"></a>Library</h3><pre>

Adds "word" image devices.  (gsdevice.h, gsdevice.c)

Removes the requirement that ImagingBBox[0] and [1] be non-negative.  (The
Adobe specification requires this, but Ghostscript supports more general
initial CTMs than the Adobe spec.)  (gsdparam.c)

</pre>

<h2><a name="Version3.34"></a>Version 3.34 (internal) (4/18/95)</h2>

<p>
This is a "snapshot" version made for internal purposes.  It was never
released to anyone.

<h3><a name="V3.34_Documentation"></a>Documentation</h3><pre>
Updates commprod.doc to be fully consistent with the AGFPL.  (commprod.doc)

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

Fixes bugs:
	- tar_x was out of date.  (tar_x)
	- tar_gs assumed that if any PC executables were present, gs.exe
would exist.  (tar_gs)
	- jpeg.mak said the current IJG version was 5b, but the makefiles
actually referred to version 5a.  (jpeg.mak)
	- The build rule for the LIPS III driver was incorrect.  (devs.mak)
	- Some definitions in the makefiles occurred out of order.
(ansihead.mak, cc-head.mak, gcc-head.mak, unixhead.mak, unixtail.mak)
	- The build rule for dvx-gcc.mak was incorrect.  (unix-end.mak)

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

Restructures the CIE caches to move much more of the computation from color
mapping time to cache loading time.  (zcie.c)

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

Fixes bugs:
	- Color conversion of 12-bit images was very slightly inaccurate.
(gxfrac.h)

Changes the transfer function, black generation, and undercolor removal
caches so that they sample at 1024 points and don't interpolate, rather than
sampling at 256 points and interpolating.  This significantly improves the
speed of colored image rendering.  ****** LIMITED TO 256 POINTS BECAUSE OF
O-STACK SIZE LIMIT. ****** (gxfmap.h, gxcmap.c)

Restructures the CIE caches to move much more of the computation from color
mapping time to cache loading time.  (gscie.h, gscie.c)

</pre>

<h2><a name="Version3.33"></a>Version 3.33 (4/13/95)</h2>

<p>
A few more last-minute bug fixes.  This is, finally, the first public
release since 3.12.

<h3><a name="V3.33_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- There was a reference to "VAX with OSF/1", which doesn't exist,
and an incorrect reference to VAX with Ultrix.  (make.doc)
	- The Unix makefiles incorrectly stated that gsdatadir was only
relevant to `make install'.  (ansihead.mak, cc-head.mak, dgc-head.mak,
gcc-head.mak)
	- Notes that DV/X users should use the zip version of the JPEG
library.  (jpeg.mak)

</pre><h3><a name="V3.33_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- A command line had gotten too long for the MS-DOS shell.
(gs.mak)
	- The VMS DEC C script didn't explicitly select DEC C.
(vms-decc.mak)
	- The VMS MODULES.LIS omitted SPDIFF and ZFPDIFF.  (modules.lis)
	- The VMS script had an incorrect entry.  (vms.mak)
	- The `if' fix in 3.31 broke some Unix systems with different
implementations of sh.  (unix-end.mak)
	- The makefile definition of gscspace_h was out of order.  (gs.mak)
	- An extra ; got written in gconfig_.h on DV/X platforms.
(dvx-tail.mak)
	- '.' was incorrectly prepended to the library search list on DV/X
platforms.  (dgc-head.mak)
	- The build rules for unix*.mak didn't work on DV/X.  (unix-end.mak)

Adds a description of the -c quit switch to the help message.  (gs.c)

For the DV/X platform, changes /usr/include to /djgpp/include as the place
to look for header files.  I'm not sure this is always correct.
(dvx-tail.mak)

</pre><h3><a name="V3.33_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- ps2ascii would cause an error if given a font that didn't have an
'X' character.  (ps2ascii.ps)
	- ps2ascii didn't intercept the Level 2 string display operators.
(ps2ascii.ps)

</pre><h3><a name="V3.33_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The Stylus Color driver had an incorrect type name.  (gdevstc.c)

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

Fixes bugs:
	- -dBitsPerPixel= didn't work properly for MS Windows or OS/2 PM.
(gdevmswn.c, gdevpm.c)
	- The Win32 platform didn't compile properly.  (memory_.h)

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

Improves the font substitution algorithm to take the face name into account
in more cases.  (gs_fonts.ps)

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

Fixes bugs:
	- Unrotated black-and-white bitmaps with an inverted device X axis
were displaced in X.  (gsimage1.c)

</pre>

<h2><a name="Version3.32"></a>Version 3.32 (4/7/95)</h2>

<p>
More bug fixes.  This is still not a public release.

<h3><a name="V3.32_Documentation"></a>Documentation</h3><pre>
Further clarifies the "two-phase commit" algorithm for device put_params
procedures.  (drivers.doc, gsparam.h)

Adds a note about a compiler bug under Ultrix 4.4.  (make.doc)

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

Fixes bugs:
	- Some installation scripts could fail because some implementations
of sh take the status of an `if' condition as the status of the `if'
command.  (unix-end.mak)

Adds "maintainer-clean" as a synonym for "real-clean".  (gs.mak)

Adds a -dORIENT1 switch that defines orientation = 1 as portrait for
setpage[params].  (use.doc, gs_init.ps, gs_lev2.ps, gs_statd.ps)

</pre><h3><a name="V3.32_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- ps2ascii didn't redirect %stdout completely.  (ps2ascii.ps)
	- ps2ascii didn't preserve the local/global VM mode.  (ps2ascii.ps)
	- ps2ascii didn't handle fonts with an all-zero or missing bounding
box correctly.  (ps2ascii.ps)
	- viewpbm didn't scale the image properly.  (viewpbm.ps)

</pre><h3><a name="V3.32_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The CGM driver wrote out an incorrect color precision value.
(gdevcgm.c)
	- The SGI bitmap driver was named "sgi" rather than "sgirgb".
(gdevsgi.c)
	- The PCX driver didn't round up an odd line length for gray-scale
output.  (gdevpcx.c)
	- The PCX driver produced incorrect output for gray-scale or 4- or
8-bit color.  (gdevpcx.c)

</pre><h3><a name="V3.32_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS MODULES.LIS file had gotten out of sync with the Unix
makefiles (again).  (modules.lis)

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

Fixes bugs:
	- Some compilers won't accept '\l', even in the false arm of a
preprocessor conditional.  (scanchar.h)
	- A procedure was declared with an incorrect argument type.
(zcsindex.c)
	- The scaled font cache didn't copy XUIDs properly.  (bfont.h,
zfont.c, zfont2.c)
	- status could return true even if the file was closed.  (zfile.c)

</pre><h3><a name="V3.32_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The LZW filters were factored improperly.  (modules.lis, gs.mak,
vms.mak, slzwx.h, slzwc.c, slzwd.c)

Changes the DCTDecode filter for compatibility with Adobe implementations:
	- Ignore bytes preceding the 0xff that marks the beginning of the
JPEG data.  (sdctd.c)
	- Set MAX_BLOCKS_IN_MCU to 64.  (jpeg.mak, gsjpglib.h)

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

Fixes bugs:
	- The "two-phase commit" for device parameters wasn't fully
implemented.  (gsiodev.c)
	- Asking for a device color map before the device was opened could
cause a crash.  (gsdparam.c)
	- The scaled font cache didn't copy XUIDs properly.  (gxfont.h,
gsfont.c)
	- 90 or 270 degree rotated black-and-white bitmaps (including
bitmapped fonts such as downloaded TrueType fonts) with an inverted device Y
axis were displaced in Y.  (gsimage1.c)
	- On high-resolution devices, parts of regions filled with halftones
could fail to be painted.  (gxclist.c)

</pre>

<h2><a name="Version3.31"></a>Version 3.31 (4/2/95)</h2>

<p>
A few final bug fixes for the release.  Includes significant speed
improvements for CIE color, and a first draft of a low-level CGM driver.

<h3><a name="V3.31_Documentation"></a>Documentation</h3><pre>
Notes that the BJC600 driver also works for the BJC4000.  (devs.mak)

</pre><h3><a name="V3.31_Procedures"></a>Procedures</h3><pre>

At the suggestion of a user, changes the default protections for installed
files on Unix and DV/X systems from 775/664 to 755/644.  (*head.mak)

At the suggestion of a user, adds a -dNOCIE switch to substitute DeviceGray
and DeviceRGB color spaces for CIEBasedA and CIEBasedABC spaces
respectively.  (gs_init.ps, gs_lev2.ps)

</pre><h3><a name="V3.31_Utilities"></a>Utilities</h3><pre>

Changes gslp and its relatives to use ISOLatin1Encoding for output, and to
send almost all printout to stderr rather than stdout (for use as a filter
under Unix).  (gslp.ps)

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

Fixes bugs:
	- The fax/TIFF driver no longer exported gdev_fax_print_page, which
the DigiFax driver needs.  (gdevtfax.c)
	- The color DeskJet drivers gave an error for BitsPerPixel=3.
(gdevcdj.c)
	- The "Windows printer" driver was setting its margins in points
rather than inches.  (gdevwprn.c)
	- The BJ10 and BJ200 drivers calculated vertical skip distances
wrong.  (gdevbj10.c)
	- The BJ10 and BJ200 drivers output two garbage bytes following the
initialization string.  (gdevbj10.c)

Adds a preliminary driver that produces low-level CGM output.  (gdevcgml.h,
gdevcgmx.h, gdevcgm.c, gdevcgml.c)

</pre><h3><a name="V3.31_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS files had gotten out of sync with the other makefiles
(again).  (modules.lis, vms.mak)
	- The MS Windows and OS/2-PM drivers hadn't been updated to handle
BitsPerPixel as a standard parameter.  (gdevmswn.c, gdevpm.c)

Removes the TIFF drivers from the Windows platform, and restores the BMP
drivers.  (bcwin.mak)

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

Fixes bugs:
	- The CIE color mapping cache could produce anomalous results
for the default (all zero values) color if some of the mapping
functions were non-linear.  (zcie.c)
	- MultiMaster font substitution got confused if substituted
fonts had their FontName changed.  (gs_fonts.ps)
	- A procedure was declared as private inconsistently.  (zdevcal.c)
	- Some pointer relocation procedures didn't work correctly on
systems with sizeof(T *) &gt; sizeof(int).  (istack.c)
	- The freelist vector wasn't large enough to handle graphics state
objects on 64-bit systems, leading to severe memory sandbars.  (iastate.h)
	- The debugging messages from the allocator had gotten inconsistent
and hard to use.  (ialloc.c)
	- Mixing save/restore with allocation could cause the GC never to
get run.  (isave.c)

Speeds up the mapping of CIE colors.  (zcie.c)

Adds a .namestring operator for getting the string of a name without having
to copy it.  (zstring.c)

</pre><h3><a name="V3.31_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The IJG code needed a couple more flags set for IJG v6.
(gsjmorec.h)
	- Some pointer relocation procedures didn't work correctly on
systems with sizeof(T *) &gt; sizeof(int).  (stream.c)

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

Fixes bugs:
	- The end-test for the fast case of monobit images was wrong,
leading to out-of-range memory accesses.  (gsimage1.c)
	- Monobit images rotated by 270 degrees displayed incorrectly.
(gsimage1.c)
	- If a Type 1 font used hint replacement, some parts of the outline
before the hint replacement ignored the old hints.  (gstype1.c)
	- Some compilers didn't accept a variable name that was the same as
a macro with parameters.  (gxht.c)
	- A procedure was declared as private inconsistently.  (gdevm1.c)
	- Some pointer relocation procedures didn't work correctly on
systems with sizeof(T *) &gt; sizeof(int).  (gdevmem.c, gsstate.c)
	- The test on FORCE_HINTS_TO_BIG_PIXELS was backwards.  This bug was
supposed to have been fixed in 3.30, but somehow the fix got lost.
(gstype1.c)
	- 90 degree rotated monobit images could drop some scan lines.
(gsimage*.c)

Speeds up the mapping of CIE colors.  (gscie.h, gxcmap.h, gscie.c, gxcmap.c)

Speeds up color images (non-interpolated, 1-8 bits per component) by adding
a cache for mapped color values.  (gximage.h, gsimage.c, gsimage1.c,
gsimage2.c)

Shrinks the band list file slightly by using only as many bytes as necessary
for writing out colors, rather than always using 4 bytes.  (gxclist.c,
gxclread.c)

</pre>

<h2><a name="Version3.30"></a>Version 3.30 (beta) (3/21/95)</h2>

<p>
More bug fixes.  The garbage collector and PDF interpreter finally appear to
work reliably.

<h3><a name="V3.30_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- language.doc had gotten out of date.  (language.doc)

</pre><h3><a name="V3.30_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- Changes in the handling of %stdout had broken ps2ascii.
(gs_dps1.ps, ps2ascii.ps)

Improves ps2ascii to skip empty strings and not output redundant font
changes.  (ps2ascii.ps)

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

Fixes bugs:
	- The fax and TIFF drivers didn't free all their working storage.
(This bug was fixed in 3.27, and the fix somehow got lost.)  (gdevtfax.c)

Adds new drivers:
	- sgirgb, to produce SGI RGB raster files.  (gdevsgi.c)
	- tiffcrle, to produce output in TIFF "CCITT 1-dimensional Huffman
RLE" format (Group 3 fax with no EOLs). (gdevtfax.c)
	- tifflzw, to produce output in TIFF LZW format (using the existing
CCITTFaxEncode filter code). (gdevtfax.c)
	- tiffpack, to produce output in TIFF PackBits format. (gdevtfax.c)

</pre><h3><a name="V3.30_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>

Fixes bugs:
	- If the current screen was set with a halftone, setcolorscreen
wouldn't accept what currentcolorscreen returned.  (gs_dps1.ps)
	- debug_print_full_ref didn't print t_oparray objects correctly.
(idebug.c)
	- The internal data for a font could be allocated in a different VM
space from the font dictionary, causing dangling pointers.  (zfont2.c)
	- definefont became confused if a program failed to delete the FID
from a re-encoded font.  (This is questionable PostScript, but dvips does
it.)  (zfont2.c)
	- If a BuildChar procedure did a save before the setcachedevice and
a restore afterwards, the memory manager would attempt to free the cache
device after it had already been freed by the restore, leading to damaged
freelists.  (gschar.c)
	- setresolution (in statusdict) was ignored.  (gs_lev2.ps,
gs_statd.ps)
	- If a string containing a string containing a \ was passed to the
token operator, the \ was not recognized properly in a Level 2 environment.
(iscan.c)
	- A couple of default dictionary sizes had become too small.
(iinit.c)

Makes DOS EOF (control-Z, 0x1a) a self-delimiting token, like left bracket.
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, but it should not have any adverse
effects.  (gs_init.ps, iscan.c, iscantab.c)

Distinguishes arch_small_memory from arch_ints_are_short, and adds a new
-Z. switch to force small-memory table sizes regardless of actual memory
size.  (dstack.h, idict.c, zpcolor.c, zvmem2.c)

</pre><h3><a name="V3.30_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- A page with no Contents caused an error.  (pdf_main.ps)
	- Executing a Form resource caused an error.  (pdf_draw.ps)
	- Outlines with open entries caused an error.  (pdf_main.ps)
	- Embedded Type 3 fonts caused an error.  (pdf_draw.ps, pdf_font.ps)
	- The Widths array of fonts was ignored.  (pdf_font.ps)

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

Fixes bugs:
	- Freeing an entry in the pattern cache didn't clear the pointers to
the raster data, producing a dangling reference that confused the garbage
collector.  (gxpcmap.c)
	- The test on FORCE_HINTS_TO_BIG_PIXELS was backwards.  (gstype1.c)
	- The pattern cache bookkeeping was incorrect.  (gxpcmap.c)
	- Depending on the order in which pointers were relocated, the
garbage collector could incorrectly relocate pointers from the character
cache.  (gxfcache.h, gsfont.c, gxccache.c, gxccman.c)

Changes the fast case of black-and-white images so it aligns scaled images
with the device coordinate system, to improve performance.  (gsimage1.c)

Extends the coordinate transformation routines to handle absurdly large
translation values in the CTM as long as the final device device coordinates
are within fixed-point range.  (gxmatrix.h, gxpath.h, gschar.c, gscoord.c,
gsmatrix.c, gxhint2.c, gxpath2.c)

Distinguishes arch_small_memory from arch_ints_are_short, and adds a new
-Z. switch to force small-memory table sizes regardless of actual memory
size.  (gdevprn.h, gxpcolor.h, gzht.h, std.h, gsfont.c, gsht1.c, gspaint.c,
gsstate.c, gxcht.c, gxht.c, gxpcmap.c)

</pre>

<hr>

<h2><a name="Version3.29"></a>Version 3.29 (internal) (3/8/95)</h2>

<p>
Another bug-fix release.  This release processes all but 7 of the 500+ files
on the Adobe Acrobat Sampler CD-ROM without giving an error.  The garbage
collector finally appears to be stable.  This version was created for a
customer; it was not released to the general public or even to the beta test
list.

<h3><a name="V3.29_Documentation"></a>Documentation</h3><pre>
Documents the possible need to set LD_RUN_PATH on SVR4 platforms.
(make.doc)

Expands the description of the device life cycle, and of the constraints on
put_params procedures.  (drivers.doc)

Adds an explicit copyright notice to the Aladdin Ghostscript Free Public
License.  (PUBLIC)

Clarifies that the Win32s documentation also applies to Windows NT.
(make.doc)

</pre><h3><a name="V3.29_Procedures"></a>Procedures</h3><pre>

Removes the obsolete writeppmfile operator from the standard configurations.
(gs.mak)

Changes the Watcom makefiles to work properly with Watcom C/C++ 10.0.
(make.doc, msc.mak, watc.mak, watcwin.mak, wccommon.mak)

</pre><h3><a name="V3.29_Utilities"></a>Utilities</h3><pre>

Adds a wftopfa utility for converting the Wadalab fonts to usable Type 0 and
Type 1 form.  (wftopfa)

</pre><h3><a name="V3.29_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Entries added automatically by definefont (FontInfo, ExactSize)
could cause a font dictionary to become full.  (gs_fonts.ps, gs_type1.ps)
	- wrfont.ps couldn't deal with very long CharStrings.  (wrfont.ps)

Makes the name of the Fontmap file an easily editable parameter.
(gs_fonts.ps)

Adds a utility for converting the Wadalab font to usable Type 0 and Type 1
form.  (wrfont.ps, wftopfa.ps)

</pre><h3><a name="V3.29_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The top margin for printer (and fax) devices was computed
incorrectly, using the X resolution rather than the Y resolution.
(gdevprn.h)
	- Changing the page size or resolution of a printer device closed
and reopened the device unnecessarily.  (gdevprn.c)
	- Changing the page size of the X11 device didn't change the initial
matrix, so (0,0) didn't wind up in the lower left corner.  (gdevx.c)
	- The bit devices didn't allow changing the number of bits per
pixel.  (gdevbit.c)

Adds a settable .IsPageDevice boolean device parameter to the X Windows
driver.  The default value is true.  (gdevx.h, gdevx.c)

Changes the PPM driver so that it chooses between PBM/PGM/PPM on a
page-by-page basis, rather retaining the most general format ever required
by any page.  (gdevpbm.c)

</pre><h3><a name="V3.29_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>

Fixes bugs:
	- The current page device could be null, rather than an empty
dictionary.  (igstate.h, zchar.c, zdevice.c, zdevice2.c, zgstate.c)
	- The scanner didn't signal an error for names or strings that were
too long.  (iscan.c)
	- A missing header file upset the VAX compilers.  (ztype.c)
	- Some places expecting dictionary operands didn't check the type,
because they incorrectly assumed that the dict_check_read/write macro did
this.  (idict.h, zdevice2.c, zht2.c, zmisc2.c)
	- The definition of quit in systemdict wasn't disabled within
encapsulated jobs.  (gs_lev2.ps)
	- resetfile gave an error if the file was closed, rather than doing
nothing.  (zfileio.c)
	- The scanner attempted to free an uninitialized pointer if it
reached EOF after a / or //.  (iscan.c)
	- A restore in a different file than the corresponding save caused
an invalidrestore error.  (gs_init.ps)
	- The default value of EndOfData in RunLengthDecode streams was set
to false.  (zfilter.c)
	- .registerencoding didn't invoke the save machinery correctly,
leading to GC problems.  (zfont2.c)
	- The facility for overriding .printerror didn't work correctly.
(gs_init.ps)
	- gs_run_file_open wasn't public.  (gsmain.c)
	- The interpreter returned e_undefined for undefined error names,
rather than the error code.  (interp.c)
	- Allocation in system memory (specifically, adding a block to a
stack) couldn't trigger automatic garbage collection.  (interp.c, igc.c,
zvmem2.c)
	- A restore in a different invocation of gs_run_string than the
corresponding save would stop reading the string.  (files.h, gsmain.c,
iccinit.c, zfile.c)
	- The Type 1 rasterizer state included a pointer into the middle of
an object, confusing the garbage collector.  (zchar1.c, zfont1.c)
	- When the garbage collector deleted a name, it didn't zero out the
string pointer.  (iname.c)
	- On platforms where obj_align_mod &gt; 4, the memory manager could
access 1 beyond the end of its freelists.  (iastate.h)
	- makefont and scalefont didn't check the type of their font operand
soon enough.  (zfont.c)
	- restore didn't finalize the objects it freed.  (isave.c)
	- restore didn't free system VM.  (isave.c)
	- Freeing a ref array that occupied an entire chunk didn't free the
chunk.  (ialloc.c)

Adds a .runexec operator which implements the 'close if error' function of
run.  (zfile.c, zfileio.c)

Moves the obsolete writeppmfile operator into a separate file.  (zfileio.c,
zwppm.c)

Makes the statistics returned by the memory manager more accurate.
(ialloc.c, zvmem.c)

Adds a (read-only) %Calendar% IODevice.  (zdevcal.c)

Adds a "hook" in the character operators to allow external code to
intervene; this is needed for a customer.  (ichar.h, zchar.c, zchar2.c)

Makes control-D (0x04) a self-delimiting token, like left bracket.  THIS IS
A NON-BACKWARD-COMPATIBLE CHANGE, but it should not have any adverse
effects.  (scanchar.h, iscan.c, iscantab.c)

Changes the error stack printout so that it puts line breaks between items
iff the items are being printed with ==.  (gs_init.ps)

Uses finalization to close streams being freed.  (igc.c, zfile.c, ziodev.c)

</pre><h3><a name="V3.29_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Embedded Type 1 fonts that invoked save and restore while being
read caused an error.  (pdf_font.ps)
	- Large files that referenced a non-alphabetic font for the first
time late in the file could cause an error.  (pdf_main.ps)

</pre><h3><a name="V3.29_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- SubFileDecode streams didn't copy partial matches of the EOD
string into their output.  (sfilter1.c)

Makes switching between read and write modes a stream procedure.  (stream.h,
sfile.c, sfileno.c, stream.c, zfileio.c)

Makes file streams close themselves when finalized.  (We can't do this for
other streams, because finalization procedures aren't allowed to free
storage explicitly.)  (stream.h, sfile.c, sfileno.c, stream.c)

</pre><h3><a name="V3.29_Library"></a>Library</h3><pre>

Fixes bugs:
	- The obsolete files gcdefs.h and gsfile.c were still included in
the fileset.
	- A number of places didn't deal with null patterns properly (p_tile
== 0).  (gxdcolor.h, gspcolor.c, gxpcmap.c)
	- The pattern tiling algorithm was numerically unstable, especially
if the X/YStep vectors were close to the axes.  (gxcolor2.h, gspcolor.c,
gxpcmap.c)
	- setdeviceparams checked the values of read-only byte array
parameters incorrectly.  (gsdparam.c)
	- The statistics macros in gxfill.c didn't use DO_NOTHING when
disabled.  (gxfill.c)
	- Changing the orientation of a device closed and reopened the
device unnecessarily.  (gsdparam.c)
	- ioerrors occurring when writing command lists weren't reported
properly.  (gxclist.h, gxclist.c)
	- Errors from device procedures weren't always propagated up to
clients.  (gsimage1.c, gsimage3.c, gxclip2.c, gxclist.c)
	- Overflowing the fixed-point translation values in the CTM caused a
floating point exception rather than a limitcheck.  (gxmatrix.h, gscoord.c)
	- charpath set the current point correctly, but didn't append a
moveto element to the path.  (This mostly affected Mathematica output.)
(gzpath.h)
	- Image devices mapped colors incorrectly.  (gdevmem.c, gdevm16.c)
	- On devices with color capability but fewer than 4 bits per pixel,
color halftones didn't work (and could cause an arithmetic exception).
(gxdither.c)
	- Black-on-white memory devices didn't map colors properly.
(gdevprn.h, gxdevice.h, gxdevmem.h, gdevmem.c, gdevm1.c, gsdevice.c)
	- Memory devices with a non-zero origin in their initial matrix
clipped the image improperly.  (gsdevice.c)
	- The Type 1 rasterizer state included a pointer into the middle of
an object, confusing the garbage collector.  (gstype1.h, gxfont1.h,
gxtype1.h, gstype1.c, gxhint2.c)
	- The band rasterizer could produce garbled output for images
(including characters) on 64-bit architectures.  (gxclread.c)
	- Bounding boxes (for pathbbox and setbbox) could be slightly
inaccurate.  (gsmatrix.c)
	- On 64-bit architectures, halftone tiles less than 16 bits wide
were handled incorrectly.  (gxclist.c)

Adds an .IsPageDevice boolean device parameter (normally read-only).
(gsdparam.c)

Removes the library code for implementing the obsolete writeppmfile
operator.  (gswppm.c)

Makes the default matrix (for initmatrix and defaultmatrix) a settable
parameter in the graphics state.  (gscoord.h, gzstate.h, gscoord.c,
gsdevice.c, gsdparam.c)

Makes the statistics returned by the memory manager more accurate.
(gsmemory.h)

Adds a compile-time flag to choose whether or not to force Type 1 hints to
"big pixel" boundaries when oversampling.  (gstype1.c)

Changes the .PageCount device parameter back to PageCount, because the
change broke some scripts.  (gsdparam.c)

Adds optimization for 90 degree rotated images with pure colors.
(gximage.h, gsimage.c, gsimage1.c)

Changes the band rasterizer so that replicated halftone tiles are written on
the band list in unreplicated form.  (gsbitops.h, gxcldev.h, gsbitops.c,
gxclist.c, gxclread.c, gxht.c)

Changes the .HWBitsPerPixel device parameter to BitsPerPixel.  (drivers.doc,
language.doc, gdevcdj.c, gdevstc.c, gsdparam.c)

</pre>

<h2><a name="Version3.28"></a>Version 3.28 (beta) (2/13/95)</h2>

<p>
Another bug-fix beta release.  The number of bugs being fixed in each of
these sub-releases does exceed the number of new bugs introduced, but the
latter number is discouragingly high.

<h3><a name="V3.28_Documentation"></a>Documentation</h3><pre>
Adds some information about handling VMS file attributes for files
transferred by FTP.  (use.doc)

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

Fixes bugs:
	- unix-gcc.mak said the static linkage switch for SunOS was -Bstatic
rather than -static.  (unix-gcc.mak)
	- Some dependency lists in gs.mak were out of date.  (gs.mak)

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

Fixes bugs:
	- markhint.ps didn't check for protected fonts.  (markhint.ps)

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

Fixes bugs:
	- The cdj driver had a byte/char agreement problem.  (gdevcdj.c)
	- The cdj driver attempted to initialize a dynamic array.
(gdevcdj.c)

Removes the setting of InputAttributes and OutputAttributes from the H-P
drivers, since this causes more problems than it solves.  (gdevdjet.c)

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

Fixes bugs:
	- makeoperator assigned incorrect attributes to operators. (bug
introduced in 3.27) (opdef.h, iinit.c, iutil.c, zmisc.c)

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

Fixes bugs:
	- gs_makeimagedevice didn't set the caller's pointer to the newly
created device.  (bug introduced in 3.27) (gsdevice.c)
	- There were still some mismatches between char * and byte * values.
(gsdparam.c)
	- The halftone replication algorithm could produce inappropriately
large replicated masks.  (gxht.c)
	- stroke usually did the wrong thing for degenerate (single-point)
subpaths.  (gxstroke.c)

</pre>

<h2><a name="Version3.27"></a>Version 3.27 (beta)(withdrawn) (2/8/95)</h2>

<p>
Yet another bug-fix beta release.  This release had so many serious problems
(the most serious being at least one changed file that the release tool
failed to include in the fileset) that it was withdrawn less than a day
after it was issued.

<h3><a name="V3.27_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The NEWS for 3.26 didn't mention the fact that the stdxxx stream
interface used by MS Windows, OS/2, and Macintosh implementations had
changed.  (NEWS)
	- The file public.doc wasn't distributed with the previous fileset.

Brings the NeXTSTEP documentation up to date for NeXTSTEP releases 3.2 and
subsequent.  (make.doc)

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

Fixes bugs:
	- Some dependency lists in gs.mak were out of date.  (gs.mak)
	- A 'fi;' was missing in the Unix install script.  (unix-end.mak)
	- There was no VMS build script for the PDF options.  (vms.mak)
	- The VMS script used CC_QUALI instead of CC_QUAL in several places.
(vms.mak)

</pre><h3><a name="V3.27_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- ps2epsi's usage prompt referred to "pstoepsi".  (ps2epsi)
	- ps2epsi set PATH and LOCALPATH unilaterally.  (ps2epsi)

Comments out the sample usage line at the end of viewjpeg.ps.  (viewjpeg.ps)

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

Fixes bugs:
	- The fax and tiff drivers didn't free all of their working storage.
(gdevtfax.c)

Adds user-contributed drivers for the BJC 600 and ESC/P printers.
(devs.mak, gdevcdj.c)

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

Fixes bugs:
	- Some necessary casts of string parameters to (const byte *) were
omitted.  (gp_mswin.c, gp_os2.c)

Adds the psmono and bit* drivers, and removes the p*m drivers, in the OS/2,
32-bit MS-DOS, and 32-bit Windows configurations.  (bcwin32.mak, os2.mak,
watc.mak)

</pre><h3><a name="V3.27_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- The Fontmap for Ultrix had somehow become slightly incorrect.
(Fontmap.Ult)

Removes the font file names from the dependency lists in cfonts.mak.  This
makes cfonts.mak readily usable with any set of fonts, but it also means
that it will always run font2c, rather than being able to avoid this if the
.c file is up to date.  (cfonts.mak)

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

Fixes bugs:
	- Some operators could fail if the stdxxx streams weren't currently
open.  (files.h, zfileio.c, ziodev.c)
	- setpagedevice didn't handle unrecognized keys properly.
(gs_setpd.ps)
	- The value returned for the HWColorMap device parameter was
allocated incorrectly, confusing the garbage collector.  (iparam.c)
	- Typing ahead at the &gt;&gt;showpage&lt;&lt; prompt no longer caused all
further pages to be processed without stopping.  (gs_init.ps)
	- Setting DEVICEWIDTHPOINTS or DEVICEHEIGHTPOINTS on the command
line caused a typecheck.  (gs_init.ps)
	- The garbage collector didn't handle halftone threshold arrays
properly.  (zht2.c)
	- setdefaulttimeouts caused an error on Level 2 systems.
(gs_lev2.ps)
	- cvi and cvr weren't equivalent to token followed by a type check.
(iscan.h, iscannum.h, iscan.c, iscannum.c, ztoken.c, ztype.c)
	- In Level 2 systems, image and colorimage didn't allow 12 bits per
sample.  (zpaint.c)
	- If debugging was enabled, the garbage collector printed spurious
error messages about the allocator objects not being in a chunk.  (ialloc.c)
	- restore didn't reset the count of operator procedures, so the
operator procedure table could fill up.  Fixing this required splitting the
op_array_table into a global table and a local table.  (opdef.h, iinit.c,
iutil.c, zmisc.c)
	- .forgetsave could leave a dangling pointer in the memory manager,
causing an access error.  (ialloc.c, isave.c)
	- Freed objects weren't always marked as freed, which could confuse
the memory validator.  (ialloc.c)
	- .forgetsave didn't mark inner chunk headers as free, leading to
access errors.  (isave.c)

Changes the representation of operator procedures so that they point
directly to their definition in the op_array_table.  (iref.h, opdef.h,
idebug.c, igc.c, igcref.c, interp.c, zmisc.c)

Removes .makeglobaloperator.  (zmisc.c)

Adds patches to discard some common garbage produced by H-P-oriented
applications and drivers.  (gs_init.ps)

Changes the &gt;&gt;showpage&lt;&lt; prompt so that if the input reaches EOF, the
interpreter still stops after the next &gt;&gt;showpage&lt;&lt;, rather than processing
all subsequent pages.  This is a consequence of the bug fix that
automatically reopens the stdxxx files.

Adds an optional dictionary parameter for the RunLengthEncode/Decode
filters, to allow specifying EndOfData.  The default is true.  (zfilter.c)

Adds ByteTranslateEncode/Decode filters.  (zfilter2.c)

</pre><h3><a name="V3.27_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The K &gt; 0 option of the CCITTFaxDecode filter switched back to 2-D
encoding if an output buffer boundary fell in the middle of a 1-D line, and
signalled an error if an input buffer boundary fell in the middle of an EOL.
(scfd.c)

Adds an EndOfData flag to the RunLengthEncode/Decode filters.  If true, RLE
generates 128 as EOD, and RLD recognizes it; if false, RLE does not mark
EOD, and RLD ignores 128.  (srlx.h, gxclist.c, gxclread.c, sfilter1.c)

Adds ByteTranslateEncode/Decode streams.  (sbtx.h, sfilter2.c)

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

Fixes bugs:
	- There were some mismatches between char * and byte * values.
(gsdparam.c)
	- Failure to round a scaling coordinate caused one-for-one
black-and-white images to render slower than they should.  (gsimage.c)
	- Setting PageSize without setting HWResolution could cause an
invalid memory access.  (gsdparam.c)
	- The garbage collector didn't handle halftone threshold arrays
properly.  (gxht.h, gsht.c, gsht1.c)

</pre>

<h2><a name="Version3.26"></a>Version 3.26 (beta) (2/1/95)</h2>

<p>
Yet another bug-fix beta release, still not ready for public release.

<h3><a name="V3.26_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The description of device properties had gotten out of sync with
the code.  (language.doc)

Splits off documentation specific to the Aladdin (non-GNU) release into a
separate file.  (readme, public.doc, unix-end.mak)

Adds a pointer to a collection of other free fonts (including some Cyrillic
ones) available on the net.  (public.doc)

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

Fixes bugs:
	- On VMS systems with both VAX C and DEC C installed, the build script
used VAX C rather than DEC C.  (vms.mak)
	- zfdecode.c didn't have a build rule.  (gs.mak)
	- Several macros in the makefile were used before they were defined.
(gs.mak)
	- Several macros in the makefile were used without being defined.
(gs.mak)

Replaces the gssetdev, gssetmod, and gsaddmod scripts with more variants of
echogs.  (echogs.c, gs.mak)

</pre><h3><a name="V3.26_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The ps2ascii shell script passed a -f flag to the shell, which not
all shells recognize.  (ps2ascii)

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

Fixes bugs:
	- Due to a typo in an initialization string, the H-P printers didn't
reset the top margin to zero.  (gdevdjet.c)

Adds InputAttributes and OutputAttributes entries to the H-P drivers.  (This
should probably be generic to all printers.)  (gdevdjet.c)

Replaces the contributed Epson Stylus Color driver with a newer version.
(devices.doc, gdevstc.c)

</pre><h3><a name="V3.26_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- DEC C complained about 'abs' and 'exit' not being declared.  (x_.h)
	- gp_mswin.c and gp_os2.c wouldn't compile.  (gp_mswin.c, gp_os2.c,
ziodev.c)

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

Fixes bugs:
	- The default CIE rendering dictionary gave everything a magenta tint.
(gs_lev2.ps)
	- Changing HWResolution and PageSize in the same call of
setpagedevice produced an incorrect HWSize.  (gsdparam.c)
	- .putdeviceparams didn't accept all the keys that .getdeviceparams
returned.  (gsdparam.c)
	- The default handler for interrupt and timeout errors didn't push a
current object (command) on the stack.  (gs_init.ps)
	- The garbage collector didn't handle strings larger than 64K
properly.  (iastate.h, ialloc.c, igcstr.c)

Adds media matching and Policy consultation to the implementation of
setpagedevice.  (gs_setpd.ps)

Adds a MaxGlobalVM system parameter.  (zmisc2.c)

</pre><h3><a name="V3.26_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The CCITTFaxEncode filter could access a byte beyond the end of
the allocated area.  (scfe.c)
	- The CCITTFaxDecode filter could get an ioerror if a buffer
boundary fell in exactly the wrong place.  (scfd.c)

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

Fixes bugs:
	- The garbage collector didn't trace colored halftones properly.
(gzht.h)
	- The garbage collector didn't relocate the bitmap pointers in
halftone caches properly.  (gzht.h, gxht.c)

Adds the ability to transmit dictionaries through the param_list mechanism
(specifically, as device parameters).  This change is
non-backward-compatible only for implementors of parameter lists, which only
exist within the Ghostscript core.  (gsparam.h, iparam.h, iparam.c)

Removes the InitialMatrix device property.  (gsdparam.c)

</pre>

<h2><a name="Version3.25"></a>Version 3.25 (beta) (1/24/95)</h2>

<p>
Yet another bug-fix beta release.  There are still at least half a dozen
significant known bugs to be fixed before a public release.

<h3><a name="V3.25_Documentation"></a>Documentation</h3><pre>
Notes that on Unix systems, one should not edit 'makefile', but should edit
the individual subfile and run tar_cat.  THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE.  (make.doc)

Adds information on the Macintosh implementation.  (readme)

</pre><h3><a name="V3.25_Procedures"></a>Procedures</h3><pre>
Fixes bugs:
	- make clean failed on Unix systems where rm -f requires at least one
file name.  (gs.mak)
	- math_.h was omitted from many dependency lists.  (gs.mak)

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

Fixes bugs:
	- The X Windows and MS Windows draw-line routines couldn't possibly
produce sufficiently correct output (since the interface only provides integer
coordinates).  (gdevx.c, gdevwddb.c)

In response to patent-related actions by Unisys and CompuServe, removes the
GIF driver.  (*.mak)

Changes dci_std_color (and std_device_std_color_* and prn_device_std_*) so
that if the number of bits per pixel is 32, the device is defined as CMYK
rather than RGB.  (gxdevice.h)

Removes the tseng8 device, which is no longer useful.  (devs.mak, gdevsvga.c)

Adds pseudo-alpha support to the SVGA drivers, via the TextAlphaBits and
GraphicsAlphaBits device parameters.  (gdevsvga.h, gdevsvga.c)

Adds a user-contributed driver for the Epson Stylus Color printer.  (devs.mak,
gdevstc.c, devices.doc)

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

Fixes bugs:
	- The VMS build scripts had gotten out of sync (again).  (vms*.mak)

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

Fixes bugs:
	- The emulator name array was incorrectly declared const in one place.
(gs.c)
	- A closed file could incorrectly appear to be 'eq' to another file
(open or closed).  (iutil.c)
	- If %stdin/%stdout/%stderr was ever closed, it couldn't be
reopened.  (gs_btokn.ps, gs_init.ps, files.h, zfile.c, zfileio.c, zfilter.c,
zfproc.c, ziodev.c)

Changes (almost) all the operator routines to 'static'.  (z*.c)

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

Fixes bugs:
	- The raster value for replicated tiles in the halftone cache was
incorrect, causing unaligned memory accesses.  (gxht.c)
	- stroke and strokepath could produce slightly inaccurate output
(leading to slight visible anomalies) as a result of stroke adjustment.
(gxstroke.c)
	- Attempting to draw an arc with zero radius could cause a numeric
exception.  (gspath1.c)
	- Setting the Orientation of a device to null resulted in actually
setting it to a random value.  (gsdparam.c)
	- charpath, stringwidth, and cshow attempted to remap the current
color unnecessarily.  (gschar.c)

Adds the ability to trace calls on the sqrt function (and possibly other math
functions in the future.)  (math_.h, gsmisc.c)

Adds additional interrupt checks in the banding code.  (gxclist.c, gxclread.c)

</pre>

<h2><a name="Version3.24"></a>Version 3.24 (beta) (1/17/95)</h2>

<p>
This was supposed to be a public release, but too many bugs showed up in 3.23,
so this is another bug-fix beta release.  This is the first release with a
working PDF reader.

<h3><a name="V3.24_Documentation"></a>Documentation</h3><pre>
Notes that Solaris requires using installbsd instead of install.  (make.doc)

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

Changes 'make mostlyclean' so that it doesn't delete the Ghostscript
executable (but deletes everything else that 'make clean' does).  (gs.mak)

Changes the link list generator so it eliminates duplicate library requests.
(genconf.c)

Factors the interpreter further so as to include less unnecessary PostScript
support in the PDF interpreter.  (gs.mak, zpath.c, zpath1.c)

Adds a printout of the available language interpreters to the -h message.
(genconf.c, gs.c, iinit.c, gs.mak)

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

Fixes bugs:
	- The alternate X drivers used a cast in an initializer, causing a
compilation error on some platforms.  (gdevxalt.c)

Adds a driver for the LaserJet IIID, including duplex printing if specified by
the Duplex page device parameter.  (gdevdjet.c)

Adds Orientation to the bit device.  (gdevbit.c)

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

Fixes bugs:
	- There was an extraneous pfen-&gt; in the NT file system module, causing
a compilation error.  (gp_ntfs.c)
	- The DLL code referred to an obsolete symbol a_foreign.  (gsdll.c)
	- The VMS build scripts omitted the LaserJet 4 driver.  (vms-*.mak)
	- The VMS build scripts had several other minor errors.  (vms.mak)

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

Fixes bugs:
	- Defining a font alias in global VM with a name that was a string in
local VM caused an error.  (gs_fonts.ps)
	- The font compiler referred to an obsolete symbol a_foreign.
(font2c.ps)

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

Fixes bugs:
	- There was an extraneous '#' before an extern declaration.
(gsmain.c)
	- The interpreter could (incorrectly) attempt to expand the e-stack.
(istack.h, interp.c, istack.c)
	- zfproc.c called memcpy but didn't include memory_.h.  (zfproc.c)
	- A garbage collection occurring within a 'save' would often smash
memory.  (igc.c)
	- If the last character returned by the procedure of a procedure-based
filter was \r, readline could get an endless loop.  (zfileio.c)
	- Saving a change to a ref member of a structure confused the garbage
collector.  (isave.h, isave.c, zdict.c)
	- The -Zu debugging printout could cause an access error under rare
circumstances.  (isave.c)
	- Save objects could get allocated in global VM, causing dangling
references.  (zvmem.c)
	- The vmsave object created by the interpreter for a save didn't get
freed properly if the memory manager created an invisible save level, which
could cause the next garbage collection to crash.  (zvmem.c)
	- 'run' always printed an error message, rather than letting the
top-level control loop do it.  (gs.c, gs_init.ps)

Adds support for duplex devices.  (gxdevice.h, gsdparam.c, gs_statd.ps,
gs_setpd.ps)

Adds the beginnings of support for CID-keyed fonts.  (gs_cidfn.ps)

Changes the format of the stack dump printed for errors, to make it easier to
read.  (gs_init.ps)

</pre><h3><a name="V3.24_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>

Fixes bugs:
	- The .local/global allocation operators always allocated in system
VM.  (zsysvm.c)
	- setpage[params] caused an error.  (gs_lev2.ps)
	- If an error occurred during a cshow or (x|y|xy)show, the interpreter
freed the enumerator twice.  (zchar.c, zchar2.c)

Changes setpageparams so that orientation = 0 means portrait.  This is not
compatible with AGFA's convention for roll-feed devices, but it is compatible
with the more common cut-sheet printers.  (gs_statd.ps)

Adds meaningful values for the Emulator resource.  (gsmain.c, gs_res.ps)

Makes -Z? validate the state of memory before and after save and restore.
(ialloc.h, igc.h, ialloc.c, igc.c, ilocate.c, zvmem.c)

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

Fixes bugs:
	- The Unix install script didn't install the PDF files if they were
present.  (unix-end.mak)
	- PDF to PostScript conversion didn't work at all.  (It still doesn't
work very well.)  (pdf_2ps.ps, pdf_main.ps)
	- Images with an Indexed color space and no Decode entry caused an
error.  (pdf_draw.ps)
	- The 'Page &lt;n&gt;' messages were printed even if QUIET was set.
(pdf_main.ps)

Changes the interpreter so that when it encounters an unknown operator, it
prints an error message and continues, rather than signalling an error.
(pdf_base.ps)

Makes F a synonym for f if there is nothing on the operand stack, to
compensate for a bug in some Adobe software.  (pdf_base.ps)

Changes pdfgetpage so it uses 1-origin rather than 0-origin indexing.  THIS IS
A NON-BACKWARD-COMPATIBLE CHANGE.  (pdf_main.ps)

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

Fixes bugs:
	- The Group 3 2-D and Group 4 encoders produced incorrect output if a
scan line beginning with a black pixel was followed by a scan line beginning
with a white pixel.  (scfe.c)
	- A SubFileDecode filter with a count of 1 and a non-empty EOD string
would smash memory.  (sfilter1.c)

Updates the DCT filters so they will work with the latest version (5a) of the
IJG library.  (*.mak, jpeg.mak, sjpegerr.c)

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

Fixes bugs:
	- A call with integer parameters to a procedure with floating point
arguments didn't work on non-ANSI compilers.  (gsimage.c)
	- Arcs could get turned into polygons if the scaling values in the CTM
were very large and the radius was (in user space coordinates) very small.
(gspath.c)
	- The current point was defined when a BuildChar procedure was called.
(This bug was documented as fixed in version 2.2!)  (gschar.c)

Adds support for Orientation and Duplex page device parameters, for those
devices that support these.  (gdevprn.h, gxdevice.h, gsdevice.c, gsdparam.c)

</pre>

<h2><a name="Version3.23"></a>Version 3.23 (beta) (1/5/95)</h2>

<p>
This is almost entirely a bug fix release.  It also includes a largely working
PDF reader.  This is intended as the beta test release for the next public
release.

<h3><a name="V3.23_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- COPYLEFT, COPYING, NEWS, PUBLIC, README, and the standard Fontmap
were omitted from the 3.22 fileset.

Documents the use of the -oldc switch to work around a compiler crash on
the DECstation.

Expands and clarifies the documentation for building the DesqView/X version
with djgcc.  (make.doc)

Adds documentation on the "600x300" H-P inkjet printers, explaining why
this alleged higher resolution is not available.  (devices.doc)

Adds to the PUBLIC license a warning that it is not a GNU License, and a
requirement to include a copy of or a pointer to the License in any written
material.  (PUBLIC)

Documents the fact that Ghostscript *does* attempt to look up files in the
current directory first.  (use.doc)

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

Fixes bugs:
	- In VMS.MAK, .JPEG should have been changed to .JPEG-5 in a few
places.  (vms.mak)

Adds the pjxl300 driver to all configurations that include the other color
DeskJet drivers.  Replaces pjet and pjetxl with pj and pjxl.  (*.mak)

Makes 'run' recognize PDF files if the PDF reader is included.
(pdf_main.ps)

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

Fixes bugs:
	- viewjpeg.ps needed the test for languagelevel = 2 at the
beginning of the file.  (viewjpeg.ps)
	- prfont.ps used 'min', which isn't a standard PostScript operator.
(prfont.ps)
	- prfont.ps created Encoding vectors that weren't 256 elements
long.  (prfont.ps)

Adds the gsdj500 script to the installation list.  (unix-end.mak)

Changes the Unix "line printer" shell scripts to add the date to the page
header.  (gsbj, gsdj, gsdj500, gslj)

Changes ansi2knr so that it will work properly on systems where the ctype
macros don't handle 8-bit characters correctly.  (ansi2knr.c)

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

Fixes bugs:
	- Some compilers don't allow casts in initialization expressions.
(gdevx.c, gdevxalt.c)
	- The cdj drivers didn't initialize the color_info structure
properly.  (gdevcdj.c)

Adds another alternate X Windows driver, x11mono, that is a black-and-white
device.  (devs.mak, gdevxalt.c)

Adds a user-contributed driver for the Apple Imagewriter LQ.  (devs.mak,
gdevadmp.c)

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

Fixes bugs:
	- The VMS MODULES.LIS file had gotten out of sync with the makefile
(again); GDEVABUF and GSBITOPS were missing.  (modules.lis)
	- The VMS script file had gotten out of sync with the makefile
(again).  (vms.mak)
	- The MS Windows platform code didn't recognize Windows 95 (Windows
4.0) as equivalent to Windows NT.  (gp_mswin.c)
	- File name enumeration didn't work on OS/2 or win32.  (gp_ntfs.c,
gp_os2.c)
	- -sOutputFile= didn't work under MS Windows.  (gp_mswin.c)

Changes the SCO Unix direct frame buffer driver so it generates in-line
instructions to access the frame buffer, for a dramatic speed improvement.
(gdevpcfb.h, gdevsco.c)

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

Fixes bugs:
	- If a font couldn't be found in the Fontmap, a recursion loop
sometimes occurred.  (gs_fonts.ps)
	- Aliases for global fonts weren't automatically created as global,
possibly leading to a recursion loop.  (gs_dps1.ps, gs_fonts.ps)
	- If a font was loaded into global VM within an inner save, the restore
deleted it from FontDirectory but not from SharedFontDirectory, causing a
possible recursion loop.  (gs_dps1.ps, gs_fonts.ps, idict.h, idict.c, zdict.c)

Further improves the algorithm for substituting for unknown fonts.
(gs_fonts.ps)

</pre><h3><a name="V3.23_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre>

Fixes bugs:
	- zcontrol.c had an assignment of const char * to const byte *,
which some compilers don't like.  (zcontrol.c)
	- Setting an Indexed color space based on a CIE space caused an
attempt to free a random block of memory.  (zcsindex.c)
	- Some compilers don't like mixing conditionals and casts in
initialization expressions.  (iref.h)
	- Some calculations of table sizes for string garbage collection
didn't work if sizeof(long) != 4, leading to smashed strings.  (iastate.h,
ialloc.c, igcstr.c)
	- Strings longer than about 7000 bytes smashed their chunk header
and confused the garbage collector.  (ialloc.c)
	- Some compilers needed iccfont.c to include strimpl.h.
(iccfont.c)
	- The obsolete file zcspace2.c was still included in the fileset.
	- If the command line included any @-files that required searching
the library path, a limitcheck would occur.  (zfile.c)
	- The insideness testing operators caused a memory access error,
because the procedure vector hadn't been updated to provide a default
get_alpha_bits procedure.  (zupath.c)
	- gcheck didn't check for stack underflow.  (zvmem2.c)
	- cleardictstack could fail to clear the dictionary stack if the
stack had overflowed into additional blocks.  (zdict.c)
	- If the '-' switch was selected, resources weren't released
properly on exit.  (gs.c)
	- Setting a Pattern color space based on a CIE space caused an
invalid memory access.  (zcsindex.c)
	- The garbage collector didn't treat refs properly on machines with
short ints.  (igcref.c)
	- Operators with more than 16 arguments could break the
interpreter.  (interp.h, iinit.c, interp.c)
	- save/restore didn't restore the setting of the current allocator
VM (local/global).  (isstate.h, isave.c)
	- stdpre.h declared exit as an extern, instead of letting gsmain.c
declare it.  (stdpre.h, gsmain.c)
	- gs.c used fputs to print help messages rather than fprintf.
(gs.c)
	- Interrupts failed to re-execute the operation that was
interrupted.  (interp.c)
	- Low-resolution CMYK devices didn't use separate screens for each
color plane as the default.  (gs_init.ps)
	- filterdict wasn't getting undef'ed at the end of initialization.
(gs_init.ps)
	- gstate operations were broken (bug introduced in 3.02).
(zdevice2.c)
	- resourceforall didn't remove the resource dictionary from the
dictionary stack when calling the client-supplied procedure.  (gs_res.ps)
	- currentcolor with an Indexed color space returned a real rather
than an integer.  (zcolor2.c)
	- setshared / setglobal left the stack in an unobvious state if
they were given a non-Boolean argument.  (gs_dps1.ps)
	- sethalftone followed by currenthalftone returned an invalid value.
(zht2.c)
	- Empty strings produced spurious garbage collector error messages.
(gsstruct.h, scommon.h, igc.c, igcstr.c, iname.c)
	- The garbage collector didn't trace Separation color spaces properly.
(gscsepr.c)

Changes defineresource so that it does not, by default, make instances
read-only.  (gs_res.ps)

Adds .{local,global}{array,dict,packedarray,string} operators for creating
objects in a specific VM space.  (zsysvm.c, gs_dps1.ps)

Adds definitions of setpage and setpageparams to statusdict.  (gs_setpd.ps,
gs_statd.ps)

Alleviates some performance problems in the garbage collector.  (igc.c)

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

Fixes bugs:
	- PDF files that used filters with parameters caused a typecheck
error because the arguments to 'filter' were reversed.  (pdf_base.ps)
	- The (undocumented) PDF 1.1 ability to specify link and annotation
destinations indirectly was not supported.  (pdf_main.ps)
	- The (undocumented) PDF ability to specify a null page in a link
destination was not supported.  (pdf_main.ps)
	- The PDF encodings weren't loaded properly in a system with both
PS Level 2 and PDF features.  (gs_res.ps, gs_init.ps)
	- If the next line after a stream keyword was blank, the line
wasn't skipped, which matters for binary data.  (pdf_base.ps)
	- A Q operator with no matching q operator caused an error.
(pdf_draw.ps)
	- The text position wasn't preserved across a fill or stroke
operator.  (gs_pdf.ps, pdf_draw.ps)
	- Embedded Type 3 fonts didn't work.  (pdf_base.ps, pdf_draw.ps,
pdf_main.ps)
	- Masked images with no Decode value had their polarity inverted.
(pdf_draw.ps)
	- Embedded Type 1 fonts referenced from within a stream didn't
work.  (pdf_font.ps)

Changes the PDF code so that it automatically recognizes PDF files as such.
(pdf_main.ps)

Splits out the PixelDifference filters as a separate "feature".  (gs.mak)

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

Fixes bugs:
	- Closing the primary input stream caused an invalid memory access.
(stream.c)
	- Increasing the size of a buffer within a save resulted in a
dangling reference after the restore.  (files.h, sfilter.h, zfile.c,
zfilter.c)
	- The garbage collector didn't properly trace streams that referenced
strings directly.  (stream.h, stream.c, ziodev.c)

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

Fixes bugs:
	- An extraneous \ upset some compilers.  (gdevabuf.c)
	- Uncolored Patterns that completely filled their bounding box
caused an invalid memory access.  (gspcolor.c)
	- If a color image required clipping, black or white pixels might
be rendered with incorrect (random) colors.  (gxcpath.c)
	- Reference counts for color spaces were sometimes set too high, so
they would only be freed by restore or garbage collection.  (gscolor.c)
	- The character cache could get confused if the Encoding for the
character wasn't a name.  (gschar.c)
	- Character outlines were always rendered with flatness = 0,
causing very bad performance for large characters.  (gzstate.h, gschar.c,
gsimage.c, gxfill.c, gxstroke.c)
	- If a device (presumably uninitialized) had a
color_info.num_components of zero, an invalid memory access could occur.
(gsdparam.c)
	- Intersecting clipping paths that are not both rectangular didn't
properly set the outer box of new clipping path, leading to unnecessary
computation.  (gxcpath.h, gxacpath.c, gxcpath.c)
	- A call passed false instead of NULL.  (gschar.c)
	- On machines where sizeof returns a long, genarch.c failed.
(genarch.c)
	- xfonts were consulted, incorrectly, even for stroked characters.
(gxccman.c)
	- gstate/currentgstate/setgstate didn't work properly.  (gsline.c,
gsstate.c)
	- On CMYK devices needing halftoning, colors with C = M = Y were
always converted to gray shades.  (gxcmap.c)
	- Isolated horizontal lines, or the horizontal edges of rectangles,
could get drawn with one or both end pixels missing.  (gxfill.c)

Changes the character cache back so it oversamples characters at small
sizes.  (gschar.c)

Changes all occurrences of (void)x to discard(x), and defines discard in
stdpre.h as a cast to void, to make it possible to pacify compilers that
don't accept this construct for some kinds of x.  (gpcheck.h, stdpre.h,
store.h, gdevmswn.c, gp_mswin.c, gscoord.c, gxclread.c, igc.c, sfile.c,
sfileno.c, zcie.c, zht2.c, ziodev.c, zmisc1.c)

Increases the size of the halftone cache on large-memory machines from 35K
to 100K.  This substantially improves halftoning performance at higher
resolutions.  (gxht.c)

</pre>

<h2><a name="Version3.22"></a>Version 3.22 (beta) (11/30/94)</h2>

<p>
This is primarily a bug fix release.  It also includes limited anti-aliased
graphics capability.  This release was not distributed to the public.

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

Fixes bugs:
	- The definition of ghost_h was misplaced, so changes in it or its
antecedents didn't force recompilation of its dependents.  (gs.mak)

Actually implements the -Z+ switch, for forcing small stack blocks.
(interp.c)

Makes the -dSAFER switch disable the %pipe syntax for file names, even for
reading.  (gs_init.ps)

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

Fixes bugs:
	- The dfax drivers incorrectly set EncodedByteAlign to false.
(gdevdfax.c)
	- softwareValue and dateTimeValue were declared as byte rather than
char.  (gdevtfax.c)

</pre><h3><a name="V3.22_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS DEC C compilers declare delete in unixio.h, and doesn't
declare unlink anywhere.  (stdio_.h)
	- The VMS compilers declare malloc and free in stdlib.h, which
wasn't being included in malloc_.h.  (malloc_.h)
	- The SCO Unix C compiler needs both &lt;sys/time.h&gt; and &lt;time.h&gt;.
(time_.h)
	- The VMS compilers declare abs in stdlib.h, which wasn't being
included anywhere.  (gshtscr.c)
	- The definition for A4 paper in VMS-AXP.MAK was incorrect.
(vms-axp.mak)

Renames VMS-AXP.MAK as VMS-DECC.MAK, with some changes that make it
appropriate for DEC C on both VAX and AXP platforms.  (vms-axp.mak =&gt;
vms.decc.mak)

</pre><h3><a name="V3.22_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- gs_kanji.ps got an invalidaccess error.  (gs_kanji.ps)

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

Fixes bugs:
	- An off-by-1 test in the roll operator caused it to smash the
stack if the operand stack had overflowed into additional blocks.
(zstack.c)
	- The default CIE color rendering dictionary didn't assume a
reasonable intermediate (XYZ) space.  (gs_lev2.ps)
	- CIE color mapping tables weren't traced properly by the garbage
collector.  (gscie.h, gscie.c, zcie.c)
	- If the very last character of a file was a ^M, the scanner
(incorrectly) signaled a syntaxerror.  (iscan.c)
	- If an operator could return both a typecheck and a
stackunderflow, it always returned a stackunderflow, which doesn't match
the behavior of Adobe interpreters.  (opcheck.h, idparam.c, interp.c,
iutil.c, z*.c)
	- astore, dictstack, and execstack could return a spurious
invalidaccess error (or fail to detect an invalid access) if the operand
stack had overflowed into additional blocks.  (istack.c)
	- The garbage collector didn't relocate pointers to names!  (Bug
introduced in 3.20.)  (iname.h)
	- If the dictionary stack overflowed into additional blocks, the
cached value pointer for a name could get set incorrectly, and also not get
relocated by the garbage collector.  (idict.c)
	- If the dictionary stack overflowed into additional blocks, the
post-GC fixup of cached value pointers in names could cause an addressing
error.  (igc.c)
	- With the -Z? switch set, the garbage collector could incorrectly
report that objects or strings weren't in any chunk.  (igc.c)
	- &lt;&lt; /a 1 /a 2 &gt;&gt; /a get gave the value 2 rather than 1.
(gs_init.ps)
	- Numbers in binary object sequences and encoded number arrays
didn't work properly on machines where sizeof(short) != 2 or sizeof(long)
!= 4.  (ibnum.c)
	- The put operator for dictionaries allowed null as a key.
(idict.h, idict.c)
	- &gt;&gt; didn't give an error if there were an odd number of values on
the stack above the next mark.  (gs_init.ps)
	- Operations that explicitly freed ref objects (setting a CIE
colorspace, resizing a dictionary, popping a block off a stack) could
corrupt storage.  (ialloc.c)
	- The -Z@ switch, which fills freed blocks with a recognizable bit
pattern, could incorrectly overwrite freed blocks in previous save levels,
causing invalid memory accesses.  (ialloc.c)
	- Since streams freed by a restore weren't marked as free, they
could confuse the garbage collector and lead to invalid memory accesses.
(zfile.c)
	- If one of the built-in dictionaries overflowed during
initialization, no error was reported -- entries were simply discarded.
(iinit.c)
	- If the level2.dev feature was combined with certain other
features, the current languagelevel was 2 when some gs_*.ps files were
loaded, causing them to load incorrectly.  (gs_btokn.ps, gs_setpd.ps)
	- If readline read a line that ended with only a CR (no LF)
followed by an end-of-file, it incorrectly closed the stream.  (zfileio.c)

Adds a .cond operator, similar to the Lisp multi-arm conditional.
(zcontrol.c)

Adds a .makeglobaloperator operator, allowing the definition of operator
procedures in local VM that turn into global operators, provided the save
level is zero.  (iref.h, opdef.h, iinit.c, interp.c, zmisc.c)

Note: the fix for returning typecheck vs. stackunderflow requires that all
operators (or other code) that uses return_error(e_typecheck) to indicate
an incorrect object type on the operand stack must change this to
return_op_typecheck(op), where op points to the operand.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE.

Implements string array and name array parameters for parameter lists.
(gsparam.h, iparam.c)

Brings filterdict inside the INITIAL_DICTIONARIES conditional.  (iinit.c)

Adds a .currentscreenlevels operator that returns the number of
distinguishable halftone levels.  (zht.c)

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

Fixes bugs:
	- The 2-D case of CCITTFaxDecode could get confused by an input
data buffer boundary that fell immediately after a horizontal code.
(scfd.c)
	- The LZW decoder didn't detect invalid data unless DEBUG was
selected at build time.  (slzwd.c)

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

Fixes bugs:
	- The clipping region accumulator could refer to a clipping
rectangle even after it had been freed.  (No effect on execution unless the
-Z@ switch was selected.)  (gxacpath.c)
	- setbbox expanded the bounding box, but didn't place a limit on
further path elements, if the current path wasn't empty.  (gsdps1.c)
	- setbbox didn't make sufficient allowance for rounding.
(gsdps1.c)

Implements the ProcessColorModel parameter (read-only) for all devices.
(gsdparam.c)

Adds a gs_currentscreenlevels procedure that returns the number of
distinguishable halftone levels.  (gsht.c)

</pre>

<h2><a name="Version3.21"></a>Version 3.21 (beta) (11/17/94)</h2>

<p>
This is primarily a bug fix release.  It also includes a substantial
improvement in the Type 1 font hinting algorithms.  This release was not
distributed to the public.

<h3><a name="V3.21_Documentation"></a>Documentation</h3><pre>
Fixes bugs:
	- The `man' page referred to gnu.ghostscript.bug rather than
comp.lang.postscript.  (gs.1)

Documents the special entries in operator definition tables that allow
switching dictionaries.  (opdef.h)

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

Moves the definition of JSRCDIR to the individual platform makefiles, to
make it easier to change on platforms that don't have file links.  (*.mak)

</pre><h3><a name="V3.21_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- ansi2knr didn't recognize that a line ending with } couldn't be a
function definition.  (ansi2knr.c)
	- ps2epsi always returned an empty bounding box.  (ps2epsi,
ps2epsi.bat)

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

Fixes bugs:
	- The bitrgb device had an invalid depth of 3.  (gdevbit.c)

Replaces the color mapping code in the X driver with a much faster
algorithm, courtesy of Tim Theisen.  (gdevx.h, gdevx.c, gdevxini.c)

</pre><h3><a name="V3.21_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- Two variable names were misspelled.  (gdevpm.c, gp_mswin.c)
	- It wasn't possible to compile a non-DLL configuration under OS/2.
(os2.mak)
	- Compilation under Microsoft C/C++ 8.0 gave errors.  (gp_mswin.h,
gp_mswin.c, gshtscr.c)

Adds some more devices to the OS/2 makefile.  (os2.mak)

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

Fixes bugs:
	- wrfont.ps, and hence bdftops, didn't write out the FontType or
PaintType.  (Bug introduced since 2.6.1)  (wrfont.ps)
	- wrfont.ps omitted a 'begin' and 'end', causing -! or -| to be
undefined when the font was loaded.  (Bug introduced since 2.6.1)
(wrfont.ps)

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

Fixes bugs:
	- make_tasv_old called make_tasv_new with extra arguments.
(store.h)
	- currentcacheparams only returned 2 values instead of 3.
(zfont.c)
	- ustroke popped one element too many off the stack if a matrix was
supplied.  (zupath.c)
	- inu[eo]fill popped one element too many off the stack.
(zupath.c)
	- The color rendering dictionary was initialized to null rather
than a valid dictionary.  (gs_lev2.ps)
	- An invalid IODevice resource named "9" got created.  (gs_res.ps)
	- bytesavailable often caused an error rather than returning -1.
(zfileio.c, stream.c)
	- The insideness testing operators always returned true if the
aperture was defined by a user path rather than a point.  (zupath.c)
	- If INITIAL_DICTIONARIES was defined in the makefile, the
definition of the initial_dictionaries array was missing a comma.
(iinit.c)
	- Even if userdict appeared in INITIAL_DICTIONARIES, gs_init.ps set
its maxlength to 200.  (gs_init.ps)
	- Setting a CIE color space left a garbage value on the stack.
(zcie.c)
	- If a file or filter was opened and then closed, opening a file
subsequently within a 'save' could lead to a memory access error in the
garbage collector.  (zfile.c)
	- Setting an Indexed or Separation color space could cause a crash
either in the garbage collector or when printing out the e-stack.
(icsmap.h, zcsindex.c, zcssepr.c)
	- Invoking a filter with an invalid data source or sink could cause
a memory access error (bug introduced in 3.20).  (zfilter.c)
	- Invoking stringwidth on a font whose BuildChar procedure did a
save could cause a memory manager error or infinite loop, because
stringwidth attempted to use an inapplicable shortcut.  (gschar.c)
	- The bounding box for rendering stroked Type 1 characters didn't
take square caps and miter joins into account.  (gs_type1.ps)
	- Invoking filter with DCTDecode or DCTEncode could cause an
addressing error if no dictionary argument was supplied.  (zfdctd.c,
zfdcte.c)
	- The Generic resource, the Font resource, and half a dozen
resources with no predefined instances all shared the same Instances
dictionary.  (gs_res.ps)
	- The temporary null device allocated for stringwidth was never
freed.  (gschar.h, gschar.c, zchar.c)
	- Internal operators, and structures that might be freed on stack
unwinding, could "escape" from the e-stack.  (zcontrol.c, ztype.c)
	- makefont and scalefont didn't properly handle a font whose
Encoding had been changed.  (bfont.h, zfont.c, zfont2.c)
	- Type 1 fonts with PaintType = 2 incorrectly checked for an xfont.
(gxfont.h, gschar.c, gsfont.c, zchar1.c, zfont1.c, zfont2.c)
	- Specifying a string argument with -d...=(...) or -d...=&lt;...&gt;
would cause an invalidaccess error.  (gs.c)
	- The environment for encapsulated jobs didn't rebind quit to stop
in userdict.  (gs_lev2.ps)
	- restore didn't deal properly with open files on the e-stack.
(zvmem.c)
	- Even with the '-' switch, Ghostscript would try to read ahead in
the input stream rather than processing input character-by-character.
(ziodev.c)
	- If an error occurred with a unreadable dictionary on any stack,
the standard error printer would get into an error loop and exit the
interpreter.  (gs_init.ps)
	- The for_roots macro in igc.c used ap rather than mem as its
second formal parameter.  (This typo had no effect on the executable
program.)  (igc.c)
	- If saving the stacks for an error caused a GC request, a value
could get stored into an improper variable on the C stack, causing havoc.
(interp.c)
	- setdash checked to make sure that the distance array had read
access; Adobe interpreters don't check this.  (zgstate.c)
	- The roots for gs_run_string and gs_interpret weren't registered
properly, which could cause a dangling reference in the case of a restore
whose save had been done earlier.  (gsmain.c, interp.c)

Adds an OpenOutputFile Boolean device parameter for printer devices; if
true, the device opens the OutputFile at the time the device is opened,
instead of waiting for the first showpage.  This helps with synchronization
when the OutputFile is a pipe.  (gdevprn.h, gdevprn.c)

Changes the BEGIN/END_OP_DEFS macros to require an explicit { and } at each
use.  (gsmain.c, interp.c, z*.c)

Arranges things so that the operators that the interpreter handles
specially are assigned the first N operator indices [internal change only].
(interp.h, iinit.c, interp.c)

Changes the operators max and min to .max and .min, to avoid conflicts with
PostScript programs that use these names for variables and also use 'bind'.
THIS IS A NON-BACKWARD-COMPATIBLE CHANGE from programs that depend on
'bind' binding in these operators; however, we have also defined procedures
max and min that just call the operators, which should take care of any
ordinary code.  (*.ps, zrelbit.c)

</pre><h3><a name="V3.21_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The pfb_state pointer in the eexecDecode filter state wasn't
marked as traceable for the garbage collector.  (sfilter.h)
	- The eexec decoding filter could access invalid memory or return
garbage under some conditions.  (Bug introduced in 3.12.)  (zmisc1.c)
	- The eexec decoding filter would incorrectly ask for more input if
the output buffer was full.  (seexec.c)

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

Fixes bugs:
	- Some compilers reserve the word 'try'.  (gshtscr.c)
	- Some compilers don't like line continuations (\) within a
preprocessor macro formal parameter list.  (gdevprn.h, gxdevice.h)
	- Memory devices created with an inverted palette (0=white,
1=black) interchanged white and black in fill operations.  (gdevmem1.c)
	- The 'bits' variable in mem_mono_copy_mono was unused on
little-endian machines.  (gdevmem1.c)
	- Some garbage collector procedures were declared 'private'
inconsistently.  (gscie.c)
	- The new anti-aliased text capability accidentally caused all
characters to be oversampled.  (gschar.c)
	- Type 1 fonts with PaintType = 2 and StrokeWidth = 0 came out with
many pixels missing because of oversampling.  (gschar.c)
	- Type 1 font stem hints were not being processed correctly.
(gstype1.h, gxtype1.h, gstype1.c, gxhint2.c, gxhint3.c, gxpath.c)
	- The tracing message for 9/7 composite fonts incorrectly
identified them as 1/7 fonts.  (gschar0.c)
	- If a 1/7 or 9/7 composite font was a child of a non-modal font,
the font number of the child font was computed incorrectly.  (gschar0.c)

Splits up the various memory devices into one file per depth [internal
change only].  (gdevm*.c)

</pre>

<h2><a name="Version3.20"></a>Version 3.20 (beta) (10/31/94)</h2>

<p>
This version contains some support for a PDF interpreter; however, the PDF
code itself is not ready for release yet.  It also includes anti-aliased text
capability.  This release was not distributed to the public.

<h3><a name="V3.20_Documentation"></a>Documentation</h3><pre>
Notes that the FAQ has moved to smallo.ruhr.de:pub/ghost/gs.faq.  (readme)

Documents various implementation limits.  (language.doc)

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

Fixes bugs:
	- bcp.dev wasn't included in the list of dependencies for
level1.dev.  (gs.mak)

Changes the printout of version numbers so that it is always A.BC,
rather than A.B if C is zero.  (gs.c, gs_init.ps)

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

Fixes bugs:
	- font2c didn't correctly handle Metrics or Metrics2 dictionaries
whose entries were arrays rather than scalars.  (font2c.ps, ccfont.h,
iccfont.c)
	- font2c didn't handle CDevProc.  (font2c.ps, ccfont.h, iccfont.c)
	- genconf could get a stack overflow on small machines.
(genconf.c)

Changes mergeini.ps so it can take arguments on the command line specifying
the input and output files.  (mergeini.ps)

Adds a gsdj500 shell script to parallel gsdj500.bat.  (gsdj500)

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

Fixes bugs:
	- The X driver didn't mask dynamically assigned colors properly, so
it could request the same color over and over again.  (gdevx.c)

Adds two alternate X Windows drivers, for helping debug drivers with other
color models:
	- x11alpha, an RGB device with 4-bit alpha capability (for
	  copy_alpha only);
	- x11cmyk, a 1-bit-per-component CMYK device.
(devs.mak, gdevxalt.c)

Changes the left margin of the lj4dith driver to 0.26".  (gdevcdj.c)

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

Fixes bugs:
	- If &lt;sys/time.h&gt; didn't exist, time_.h didn't always include
&lt;time.h&gt;.  (time_.h)
	- The OS/2 platform wouldn't compile.  (gdevpm.c)
	- The auxiliary VMS command files sometimes got blank lines
inserted when going through EOL conversion.  (vms.mak; delete gs_.com)
	- The VMS makefiles didn't include the Level 1 operators in
level1.dev.  (vms.mak)
	- The VMS gcc makefile didn't handle undefined DEVICE_DEVSn
variables properly.  (vms*.mak)
	- The VMS makefiles didn't recognize DEVICE_DEVS{1,2,5,7}.
(vms.mak)

At the request of a Unix expert, changes all the Unix shell scripts to use
exec gs ... "$@" rather than gs ... $*.  (gsnd, gsbj, gsdj, gslj, gslp)

Modifies the JPEG library so that it uses 4K less of the automatic data
segment in 16-bit environments.  (bcwin.mak, jpeg.mak, sjpeg.c, sjpegerr.c)

Adds the bmp drivers back into the 16-bit MS Windows executable, since they
will fit now.  (bcwin.mak)

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

Makes the font substitution algorithm recognize the word Roman as calling
for a serif font.  (gs_fonts.ps)

</pre><h3><a name="V3.20_Interpreters"></a>Interpreters</h3><pre>

Fixes bugs:
	- The fix in 3.13 for the inexact function values at 0 didn't work.
(zcontrol.c)
	- Level 1 configurations referenced an undefined procedure
gs_currenthalftone.  (gsht.c, gsht1.c)
	- Specifying any device properties (including -r and -g) on the
command line caused an error.  (gs_init.ps)
	- The forward declaration of cfont_name_array_create was
incorrect.  (iccfont.c)
	- save and restore could get called before the graphics state stack
had been initialized properly.  (gs_mex_e.ps)
	- Some encodings weren't loaded properly.  (gs.mak, gs_mex_e.ps,
gs_mro_e.ps, gs_pdf_e.ps, gs_wan_e.ps)
	- Zero-height images were allowed, but zero-width images
weren't.  (zpaint.c)
	- Neither zero-width nor zero-height images popped their
arguments from the operand stack.  (zpaint.c)
	- lib_file_fopen overwrote its file name argument, causing havoc
with @-files.  (gxiodev.h, gdevpipe.c, gsiodev.c, zfile.c)
	- The garbage collector got confused if there were any arrays or
dictionaries with 8K or more elements.  (igcref.c)
	- &gt;&gt; could leave the stacks in a questionable state if it failed.
(gs_init.ps)
	- The Category resource category didn't implement undefineresource.
(gs_res.ps)
	- When the token operator read the last token from a string, it
left an unchanged string on the stack instead of an empty string.
(stream.c)
	- noaccess didn't give an invalidaccess error when applied to the
permanent dictionaries.  (dstack.h, idict.c, ztype.c)
	- Overflowing the exec stack wasn't handled properly.  (istack.h,
istack.c)
	- The garbage collector cleared the cached value pointers in names,
causing interpretation to slow down substantially.  (idict.c, igc.c,
iname.c)
	- 0 dict created a dictionary with a maxlength of 1.  (idict.c)

Changes the default size of the execution stack from 150 to 250, to match
the Adobe "typical" value.  (interp.c)

Moves the operator definitions out of the automatic data segment.
(opdef.h, iinit.c, z*.c)

Adds operators that allow creation of objects in system space:
.systemvmstring, .systemvmarray, .systemvmpackedarray, .systemvmdict,
.systemvmcheck.  (zsysvm.c)

Renames gcdefs.h as gscdefs.h.

Allocates names in system space rather than global space.  (gsmain.c)

Changes the memory manager so that it allows programs to create objects in
system space.  (iref.h, iutil.h, ivmspace.h, ...)

Changes the implementation of filters so they appear in their own
dictionary named filterdict.  (gs_init.ps, z*.c)

Changes the implementation of color spaces so each one has its own
setcolorspace procedure, defined in a new dictionary named
colorspacedict.  (gs_lev2.ps, z*.c)

Adds a new debugging switch, $, that always initializes all fields in a
ref, in order to keep Purify happy.  (store.h)

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

Fixes bugs:
	- The page size for image devices was always set to (0, 0).
(gsdevice.c)
	- The PageSize computation in gx_default_put_params could overflow
on 16-bit machines.  (gsdparam.c)
	- An omitted 'static' on an initialized array caused a compiler
error.  (gxccman.c)
	- If interpolated image rendering was requested but not
actually carried out, gs_image_cleanup could attempt to free a random
pointer.  (gsimage.c)
	- Some compilers only retain 23 characters of procedure names, but
some procedure names weren't unique in the first 23 characters.  (gscie.c,
gscolor.c, gscolor1.c, gxcmap.c)
	- The garbage collector didn't trace device colors properly.
(gxdcolor.h, gzht.h, gsimage1.c, gspcolor.c, gxcht.c, gxcmap.c, gxdraw.c,
gxht.c)
	- For CMYK devices, the transfer functions were being applied to
the CMYK values rather than the complemented RGBW values.  (gxcmap.c)
	- Memory devices used their own color mapping procedures rather
than those of the target; this could cause incorrect colors for patterns on
devices with more than 1 bit per pixel.  (gxdevmem.h, gdevmem1.c, gdevpm.c,
gdevprn.c, gdevwdib.c, gschar.c, gsdevice.c, gxccache.c, gxccman.c,
gxclip2.c, gxclread.c, gxpcmap.c)
	- The garbage collector didn't trace image enumerators properly in
the image_render_simple case.  (gsimage.c)
	- stroke produced different-looking output for thin (zero-width)
lines depending on whether or not clipping was invoked.  (gxstroke.c)
	- If a clipping list changed from multiple rectangles to a single
rectangle, it could fail to clip properly thereafter.  (gxacpath.c)

Adds two new device procedures: alpha_bits and copy_alpha.  This change is
backward-compatible for all existing devices.  (gdevmem.h, gxdevice.h,
gsdevice.c, gxclip2.c, gxclist.c, gxcpath.c)

Changes the implementation of color halftones so that, when appropriate, it
generates a single cell and uses the device tile_rectangle procedure.
(gzht.h, gsht.c, gxcht.c, gxclist.c, gxclread.c)

Adds partial support for the Orientation page device parameter.
(gsdevice.c)

Adds support for anti-aliased characters using 2 or 4 bits of alpha.
(gxfcache.h, gschar.c, gxccache.c)

</pre>

<hr>

<h2><a name="Version3.13"></a>Version 3.13(private) (10/3/94)</h2>

<p>
This release was created for a customer; it was not distributed to the
public.

<h3><a name="V3.13_Documentation"></a>Documentation</h3><pre>
Notes in make.doc that the file names in the IJG archive distributed with
Ghostscript do not include the gsA.BC/ prefix.  (make.doc)

Adds a cross-reference to make.doc to the Watcom makefiles.  (watc.mak,
watcwin.mak, wccommon.mak)

</pre><h3><a name="V3.13_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The makefile rule for gconfig.h et al had a couple of blank lines
in the middle of it.  (gs.mak)

</pre><h3><a name="V3.13_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- wrfont.ps didn't add a lenIV entry to the Private dictionary if
it was needed.  (wrfont.ps)

Adds a packfile.ps utility that allows compressing multiple files into a
single file for environments with very little permanent storage.
(gs_pfile.ps, packfile.ps, wrfont.ps)

</pre><h3><a name="V3.13_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The {tiff,fax}{g32d,g4} devices could produce incorrect output.
See under Streams below.
	- The dfax drivers referred to the obsolete structure member
EncodedEOLAlign.  (gdevdfax.c)

Changes the default bit order for TIFF/F output to little-endian, which is
apparently what the majority of TIFF decoders like best.  The bit order for
the fax drivers is still big-endian.  (gdevdfax.c, gdevtfax.c)

</pre><h3><a name="V3.13_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The VMS build script used -a rather than -w for creating
gconfig_.h.  (vms.mak)
	- The VMS build script didn't create gconfigv.h.  (vms.mak)
	- The VMS Fontmap had incorrect entries for the Bitstream Charter
fonts.  (fontmap.vms)
	- The VMS MODULES.LIS file assumed the JPEG library files were in
directory JPEG rather than JPEG-5.  (modules.lis)

</pre><h3><a name="V3.13_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Using DISKFONTS resulted in an invalidaccess error.
(gs_fonts.ps)

</pre><h3><a name="V3.13_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The standard transfer function considered gray values above
roughly 0.994 equivalent to white; 0.999 is a better value.  (gs_init.ps)
	- The transfer, black generation, and undercolor removal functions
gave slightly inexact results for an input value of 0.  (zcolor.c,
zcontrol.c)
	- setpagedevice gave an /undefined error if it did not recognize a
key, rather than ignoring the key.  (zdevice.c, gs_init.ps, gs_lev2.ps,
gs_setpd.ps)

Changes .putdeviceparams to take an additional argument, a Boolean that
says whether or not unrecognized keys should be reported as /undefined
errors.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written
code should be calling .putdeviceparams.  (zdevice.c)

</pre><h3><a name="V3.13_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The Group 3 2-D and Group 4 fax encoders could emit incorrect
output.  (scfe.c)
	- The algorithm for constructing optimal Huffman codes could
produce invalid codes in some rare cases.  (shcgen.c)

</pre><h3><a name="V3.13_Library"></a>Library</h3><pre>

Fixes bugs:
	- Rectangles closed with lineto rather than closepath weren't
recognized as rectangles.  (This only affected performance, not
functionality.)  (gxpath2.c)
	- The xfont lookup_font procedure could get called with a matrix
whose translation components had never been initialized.  (gxccman.c)
	- Some compilers don't allow \ in the formal argument list of a
preprocessor macro.  (gdevprn.h, gxdevice.h)

</pre>

<h2><a name="Version3.12"></a>Version 3.12 (9/29/94)</h2>

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

<h3><a name="V3.12_Documentation"></a>Documentation</h3><pre>

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

</pre><h3><a name="V3.12_Procedures"></a>Procedures</h3><pre>

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

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

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

</pre><h3><a name="V3.12_Drivers"></a>Drivers</h3><pre>

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

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

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

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

</pre><h3><a name="V3.12_Platforms"></a>Platforms</h3><pre>

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

</pre><h3><a name="V3.12_Interpreter"></a>Interpreter</h3><pre>

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

</pre><h3><a name="V3.12_Streams"></a>Streams</h3><pre>

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

</pre><h3><a name="V3.12_Library"></a>Library</h3><pre>

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

</pre>

<h2><a name="Version3.1.1"></a>Version 3.1.1 (9/25/94)</h2>

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

<h3><a name="V3.1.1_Documentation"></a>Documentation</h3><pre>

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

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

</pre><h3><a name="V3.1.1_Procedures"></a>Procedures</h3><pre>

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

</pre><h3><a name="V3.1.1_Drivers"></a>Drivers</h3><pre>

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

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

</pre><h3><a name="V3.1.1_Platforms"></a>Platforms</h3><pre>

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

</pre><h3><a name="V3.1.1_Interpreter"></a>Interpreter</h3><pre>

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

</pre>

<h2><a name="Version3.1"></a>Version 3.1 (9/20/94)</h2>

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

<h3><a name="V3.1_Documentation"></a>Documentation</h3><pre>

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

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

</pre><h3><a name="V3.1_Procedures"></a>Procedures</h3><pre>

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

</pre><h3><a name="V3.1_Drivers"></a>Drivers</h3><pre>

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

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

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

</pre><h3><a name="V3.1_Interpreter"></a>Interpreter</h3><pre>

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

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

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

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

Removes the deviceinitialmatrix operator.  (zdevice.c)

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

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

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

</pre><h3><a name="V3.1_Streams"></a>Streams</h3><pre>

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

</pre><h3><a name="V3.1_Library"></a>Library</h3><pre>

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

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

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

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

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

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

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

</pre>

<hr>

<h2><a name="Version3.0.3"></a>Version 3.0.3 (9/16/94)</h2>

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

<h3><a name="V3.0.3_Documentation"></a>Documentation</h3><pre>

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

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

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

</pre><h3><a name="V3.0.3_Procedures"></a>Procedures</h3><pre>

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

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

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

</pre><h3><a name="V3.0.3_Utilities"></a>Utilities</h3><pre>

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

</pre><h3><a name="V3.0.3_Drivers"></a>Drivers</h3><pre>

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

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

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

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

</pre><h3><a name="V3.0.3_Platforms"></a>Platforms</h3><pre>

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

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

</pre><h3><a name="V3.0.3_Fonts"></a>Fonts</h3><pre>

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

</pre><h3><a name="V3.0.3_Streams"></a>Streams</h3><pre>

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

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

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

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

</pre><h3><a name="V3.0.3_Interpreter"></a>Interpreter</h3><pre>

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

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

</pre><h3><a name="V3.0.3_Library"></a>Library</h3><pre>

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

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

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

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

</pre>

<h2><a name="Version3.02"></a>Version 3.02 (8/30/94)</h2>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</pre><h3><a name="V3.02_Streams"></a>Streams</h3><pre>

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

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

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

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

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

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

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

</pre>

<h2><a name="Version3.01"></a>Version 3.01 (8/14/94)</h2>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</pre><h3><a name="V3.01_Fonts"></a>Fonts</h3><pre>

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

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

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

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

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

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

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

</pre><h3><a name="V3.01_Streams"></a>Streams</h3><pre>

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

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

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

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

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

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

</pre>

<h2><a name="Version3.0"></a>Version 3.0 (8/1/94)</h2>

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

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

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

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

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

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

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

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

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

</pre><h3><a name="V3.0_Utilities"></a>Utilities</h3><pre>

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

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

</pre><h3><a name="V3.0_Drivers"></a>Drivers</h3><pre>

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

Adds faxg32d and tiffg32d drivers.

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

</pre><h3><a name="V3.0_Platforms"></a>Platforms</h3><pre>

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

</pre><h3><a name="V3.0_Fonts"></a>Fonts</h3><pre>

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

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

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

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

</pre><h3><a name="V3.0_Streams"></a>Streams</h3><pre>

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

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

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

<!-- [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>History of Ghostscript versions 4.n</title>
<!-- $Id: History4.htm,v 1.29 2003/12/08 23:17:15 giles Exp $ -->
<!-- Originally: history4.txt -->
<!--
	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] ================================================== -->

<h1>History of Ghostscript versions 4.n</h1>

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

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

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Version4.81">Version 4.81 (6/1/97)</a>
<ul>
<li><a href="#V4.81_Documentation">Documentation</a>,
    <a href="#V4.81_Procedures">Procedures</a>,
    <a href="#V4.81_Utilities">Utilities</a>,
    <a href="#V4.81_Drivers">Drivers</a>,
    <a href="#V4.81_Platforms">Platforms</a>,
    <a href="#V4.81_Interpreter">Interpreter</a>,
    <a href="#V4.81_Library">Library</a>
</ul>
<li><a href="#Version4.80">Version 4.80 (limited) (5/28/97)</a>
<ul>
<li><a href="#V4.80_Documentation">Documentation</a>,
    <a href="#V4.80_Procedures">Procedures</a>,
    <a href="#V4.80_Utilities">Utilities</a>,
    <a href="#V4.80_Drivers">Drivers</a>,
    <a href="#V4.80_Platforms">Platforms</a>,
    <a href="#V4.80_Fonts">Fonts</a>,
    <a href="#V4.80_Interpreter">Interpreter</a>,
    <a href="#V4.80_Streams">Streams</a>,
    <a href="#V4.80_Library">Library</a>
</ul>
<li><a href="#Version4.74">Version 4.74 (limited) (5/5/97)</a>
<ul>
<li><a href="#V4.74_Documentation">Documentation</a>,
    <a href="#V4.74_Utilities">Utilities</a>,
    <a href="#V4.74_Drivers">Drivers</a>,
    <a href="#V4.74_Interpreter">Interpreter</a>,
    <a href="#V4.74_Streams">Streams</a>,
    <a href="#V4.74_Library">Library</a>
</ul>
<li><a href="#Version4.73">Version 4.73 (limited) (4/19/97)</a>
<ul>
<li><a href="#V4.73_Documentation">Documentation</a>,
    <a href="#V4.73_Procedures">Procedures</a>,
    <a href="#V4.73_Utilities">Utilities</a>,
    <a href="#V4.73_Drivers">Drivers</a>,
    <a href="#V4.73_Platforms">Platforms</a>,
    <a href="#V4.73_Interpreter">Interpreter</a>,
    <a href="#V4.73_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.73_Streams">Streams</a>,
    <a href="#V4.73_Library">Library</a>
</ul>
<li><a href="#Version4.72">Version 4.72 (limited) (4/14/97)</a>
<ul>
<li><a href="#V4.72_Documentation">Documentation</a>,
    <a href="#V4.72_Procedures">Procedures</a>,
    <a href="#V4.72_Drivers">Drivers</a>,
    <a href="#V4.72_Platforms">Platforms</a>,
    <a href="#V4.72_Interpreter">Interpreter</a>,
    <a href="#V4.72_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.72_Streams">Streams</a>,
    <a href="#V4.72_Library">Library</a>
</ul>
<li><a href="#Version4.71">Version 4.71 (limited) (3/31/97)</a>
<ul>
<li><a href="#V4.71_Documentation">Documentation</a>,
    <a href="#V4.71_Procedures">Procedures</a>,
    <a href="#V4.71_Drivers">Drivers</a>,
    <a href="#V4.71_Interpreter">Interpreter</a>,
    <a href="#V4.71_Streams">Streams</a>,
    <a href="#V4.71_Library">Library</a>
</ul>
<li><a href="#Version4.70">Version 4.70 (limited) (3/26/97)</a>
<ul>
<li><a href="#V4.70_Documentation">Documentation</a>,
    <a href="#V4.70_Procedures">Procedures</a>,
    <a href="#V4.70_Drivers">Drivers</a>,
    <a href="#V4.70_Platforms">Platforms</a>,
    <a href="#V4.70_Interpreter">Interpreter</a>,
    <a href="#V4.70_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.70_Streams">Streams</a>,
    <a href="#V4.70_Library">Library</a>
</ul>
<li><a href="#Version4.61">Version 4.61 (limited) (3/13/97)</a>
<ul>
<li><a href="#V4.61_Documentation">Documentation</a>,
    <a href="#V4.61_Procedures">Procedures</a>,
    <a href="#V4.61_Drivers">Drivers</a>,
    <a href="#V4.61_Platforms">Platforms</a>,
    <a href="#V4.61_Interpreter">Interpreter</a>,
    <a href="#V4.61_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.61_Streams">Streams</a>,
    <a href="#V4.61_Library">Library</a>
</ul>
<li><a href="#Version4.60">Version 4.60 (limited) (3/2/97)</a>
<ul>
<li><a href="#V4.60_Documentation">Documentation</a>,
    <a href="#V4.60_Procedures">Procedures</a>,
    <a href="#V4.60_Drivers">Drivers</a>,
    <a href="#V4.60_Platforms">Platforms</a>,
    <a href="#V4.60_Fonts">Fonts</a>,
    <a href="#V4.60_Interpreter">Interpreter</a>,
    <a href="#V4.60_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.60_Streams">Streams</a>,
    <a href="#V4.60_Library">Library</a>
</ul>
<li><a href="#Version4.51">Version 4.51 (limited) (2/9/97)</a>
<ul>
<li><a href="#V4.51_Procedures">Procedures</a>,
    <a href="#V4.51_Drivers">Drivers</a>,
    <a href="#V4.51_Platforms">Platforms</a>,
    <a href="#V4.51_Interpreter">Interpreter</a>,
    <a href="#V4.51_Streams">Streams</a>,
    <a href="#V4.51_Library">Library</a>
</ul>
<li><a href="#Version4.50">Version 4.50 (limited) (1/31/97)</a>
<ul>
<li><a href="#V4.50_Documentation">Documentation</a>,
    <a href="#V4.50_Procedures">Procedures</a>,
    <a href="#V4.50_Drivers">Drivers</a>,
    <a href="#V4.50_Platforms">Platforms</a>,
    <a href="#V4.50_Interpreter">Interpreter</a>,
    <a href="#V4.50_Streams">Streams</a>,
    <a href="#V4.50_Library">Library</a>
</ul>
<li><a href="#Version4.41">Version 4.41 (private) (1/21/97)</a>
<ul>
<li><a href="#V4.41_Procedures">Procedures</a>,
    <a href="#V4.41_Drivers">Drivers</a>,
    <a href="#V4.41_Fonts">Fonts</a>,
    <a href="#V4.41_Interpreter">Interpreter</a>,
    <a href="#V4.41_Streams">Streams</a>,
    <a href="#V4.41_Library">Library</a>
</ul>
<li><a href="#Version4.40">Version 4.40 (private) (1/13/97)</a>
<ul>
<li><a href="#V4.40_Documentation">Documentation</a>,
    <a href="#V4.40_Utilities">Utilities</a>,
    <a href="#V4.40_Drivers">Drivers</a>,
    <a href="#V4.40_Interpreter">Interpreter</a>,
    <a href="#V4.40_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.40_Library">Library</a>
</ul>
<li><a href="#Version4.39">Version 4.39 (limited) (1/1/97)</a>
<ul>
<li><a href="#V4.39_Documentation">Documentation</a>,
    <a href="#V4.39_Procedures">Procedures</a>,
    <a href="#V4.39_Utilities">Utilities</a>,
    <a href="#V4.39_Drivers">Drivers</a>,
    <a href="#V4.39_Interpreter">Interpreter</a>,
    <a href="#V4.39_Streams">Streams</a>,
    <a href="#V4.39_Library">Library</a>
</ul>
<li><a href="#Version4.38">Version 4.38 (limited) (12/20/96)</a>
<ul>
<li><a href="#V4.38_Interpreter">Interpreter</a>,
    <a href="#V4.38_Streams">Streams</a>,
    <a href="#V4.38_Library">Library</a>
</ul>
<li><a href="#Version4.37">Version 4.37 (limited) (12/10/96)</a>
<ul>
<li><a href="#V4.37_Fonts">Fonts</a>,
    <a href="#V4.37_Interpreter">Interpreter</a>,
    <a href="#V4.37_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.37_Library">Library</a>
</ul>
<li><a href="#Version4.36">Version 4.36 (limited) (12/3/96)</a>
<ul>
<li><a href="#V4.36_Documentation">Documentation</a>,
    <a href="#V4.36_Drivers">Drivers</a>,
    <a href="#V4.36_Interpreter">Interpreter</a>,
    <a href="#V4.36_Library">Library</a>
</ul>
<li><a href="#Version4.35">Version 4.35 (limited) (11/24/96)</a>
<ul>
<li><a href="#V4.35_Documentation">Documentation</a>,
    <a href="#V4.35_Procedures">Procedures</a>,
    <a href="#V4.35_Interpreter">Interpreter</a>,
    <a href="#V4.35_Streams">Streams</a>,
    <a href="#V4.35_Library">Library</a>
</ul>
<li><a href="#Version4.34">Version 4.34 (limited) (11/18/96)</a>
<ul>
<li><a href="#V4.34_Documentation">Documentation</a>,
    <a href="#V4.34_Procedures">Procedures</a>,
    <a href="#V4.34_Drivers">Drivers</a>,
    <a href="#V4.34_Interpreter">Interpreter</a>,
    <a href="#V4.34_Streams">Streams</a>,
    <a href="#V4.34_Library">Library</a>
</ul>
<li><a href="#Version4.33">Version 4.33 (limited) (11/6/96)</a>
<ul>
<li><a href="#V4.33_Documentation">Documentation</a>,
    <a href="#V4.33_Procedures">Procedures</a>,
    <a href="#V4.33_Interpreter">Interpreter</a>,
    <a href="#V4.33_Library">Library</a>
</ul>
<li><a href="#Version4.32">Version 4.32 (limited) (11/1/96)</a>
<ul>
<li><a href="#V4.32_Documentation">Documentation</a>,
    <a href="#V4.32_Drivers">Drivers</a>,
    <a href="#V4.32_Platforms">Platforms</a>,
    <a href="#V4.32_Fonts">Fonts</a>,
    <a href="#V4.32_Interpreter">Interpreter</a>,
    <a href="#V4.32_Library">Library</a>
</ul>
<li><a href="#Version4.31">Version 4.31 (limited) (10/27/96)</a>
<ul>
<li><a href="#V4.31_Documentation">Documentation</a>,
    <a href="#V4.31_Procedures">Procedures</a>,
    <a href="#V4.31_Platforms">Platforms</a>,
    <a href="#V4.31_Interpreter">Interpreter</a>,
    <a href="#V4.31_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.31_Streams">Streams</a>,
    <a href="#V4.31_Library">Library</a>
</ul>
<li><a href="#Version4.30">Version 4.30 (limited) (10/23/96)</a>
<ul>
<li><a href="#V4.30_Documentation">Documentation</a>,
    <a href="#V4.30_Drivers">Drivers</a>,
    <a href="#V4.30_Platforms">Platforms</a>,
    <a href="#V4.30_Fonts">Fonts</a>,
    <a href="#V4.30_Interpreter">Interpreter</a>,
    <a href="#V4.30_Library">Library</a>
</ul>
<li><a href="#Version4.21">Version 4.21 (limited) (10/17/96)</a>
<ul>
<li><a href="#V4.21_Documentation">Documentation</a>,
    <a href="#V4.21_Procedures">Procedures</a>,
    <a href="#V4.21_Drivers">Drivers</a>,
    <a href="#V4.21_Platforms">Platforms</a>,
    <a href="#V4.21_Fonts">Fonts</a>,
    <a href="#V4.21_Interpreter">Interpreter</a>,
    <a href="#V4.21_Library">Library</a>
</ul>
<li><a href="#Version4.20">Version 4.20 (limited) (10/13/96)</a>
<ul>
<li><a href="#V4.20_Documentation">Documentation</a>,
    <a href="#V4.20_Procedures">Procedures</a>,
    <a href="#V4.20_Utilities">Utilities</a>,
    <a href="#V4.20_Drivers">Drivers</a>,
    <a href="#V4.20_Interpreter">Interpreter</a>,
    <a href="#V4.20_Library">Library</a>
</ul>
<li><a href="#Version4.10">Version 4.10 (limited) (9/25/96)</a>
<ul>
<li><a href="#V4.10_Documentation">Documentation</a>,
    <a href="#V4.10_Utilities">Utilities</a>,
    <a href="#V4.10_Drivers">Drivers</a>,
    <a href="#V4.10_Interpreter">Interpreter</a>,
    <a href="#V4.10_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.10_Library">Library</a>
</ul>
<li><a href="#Version4.03">Version 4.03 (9/23/96)</a>
<ul>
<li><a href="#V4.03_Documentation">Documentation</a>,
    <a href="#V4.03_Procedures">Procedures</a>,
    <a href="#V4.03_Drivers">Drivers</a>,
    <a href="#V4.03_Fonts">Fonts</a>,
    <a href="#V4.03_Streams">Streams</a>
</ul>
<li><a href="#Version4.02">Version 4.02 (9/19/96)</a>
<ul>
<li><a href="#V4.02_Documentation">Documentation</a>,
    <a href="#V4.02_Procedures">Procedures</a>,
    <a href="#V4.02_Utilities">Utilities</a>,
    <a href="#V4.02_Drivers">Drivers</a>,
    <a href="#V4.02_Platforms">Platforms</a>,
    <a href="#V4.02_Interpreter">Interpreter</a>,
    <a href="#V4.02_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V4.02_Streams">Streams</a>,
    <a href="#V4.02_Library">Library</a>
</ul>
<li><a href="#Version4.01">Version 4.01 (7/10/96)</a>
<ul>
<li><a href="#V4.01_Documentation">Documentation</a>,
    <a href="#V4.01_Procedures">Procedures</a>,
    <a href="#V4.01_Utilities">Utilities</a>,
    <a href="#V4.01_Platforms">Platforms</a>,
    <a href="#V4.01_Platforms">Platforms</a>,
    <a href="#V4.01_Interpreter">Interpreter</a>,
    <a href="#V4.01_Library">Library</a>
</ul>
<li><a href="#Version4.0">Version 4.0 (6/28/96)</a>
<ul>
<li><a href="#V4.0_Documentation">Documentation</a>,
    <a href="#V4.0_Procedures">Procedures</a>,
    <a href="#V4.0_Utilities">Utilities</a>,
    <a href="#V4.0_Drivers">Drivers</a>,
    <a href="#V4.0_Platforms">Platforms</a>,
    <a href="#V4.0_Interpreter">Interpreter</a>,
    <a href="#V4.0_Streams">Streams</a>,
    <a href="#V4.0_Library">Library</a>
</ul>
</ul></blockquote>

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

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

<p>
This document is a history of Ghostscript releases numbered 4.n.  For more
recent changes, see the the other history documents and, for the latest
versions, the news:

<blockquote>
<a href="News.htm">News</a><br>
History of Ghostscript versions 4.n (this document)<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] ============================================== -->

<h2><a name="Version4.81"></a>Version 4.81 (6/1/97)</h2>

<p>
This is a last-minute set of bug fixes before the 5.0 release.

<h3><a name="V4.81_Documentation"></a>Documentation</h3><pre>

Adds some overlooked helpers to the list.  (helpers.txt)

</pre><h3><a name="V4.81_Procedures"></a>Procedures</h3><pre>

Makes a distinction between 2-part and 3-digit version numbers.
(version.mak, vms.mak)

</pre><h3><a name="V4.81_Utilities"></a>Utilities</h3><pre>

Develops the Type 1 to CFF converter a little further; it is still NOT
USABLE.  (t1tot2.ps)

Removes the pstoppm.ps script, since the p*m drivers supersede it.
(pstoppm.ps, unix-end.mak)

</pre><h3><a name="V4.81_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The PDF writer sometimes omitted an ET command before setting the
clip path.  (gdevpdf.c)
	- The PDF writer didn't initialize the "vector" state, leading to
some redundant output (performance bug only).  (gdevpdf.c)
	- The PDF writer wrote clip paths even when they included the entire
page (performance bug only).  (gdevpdf.c)

Changes the PDF writer so that it recognizes not only the 14 built-in fonts
but any font with the same UniqueID and metrics.  This covers some common
cases of re-registering a font with a variant Encoding.  (gs_pdfwr.ps)

</pre><h3><a name="V4.81_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- SEARCH_HERE_FIRST was accidentally set to 0 on MS Windows
platforms.  (bcwin32.mak, msvc4.mak, msvc5.mak, watcw32.mak)

Adds code to remove "" around arguments in the command line passed to
WinMain (MS Windows platforms).  (dwmain.cpp, dwmainc.cpp)

</pre><h3><a name="V4.81_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- setsystemparams was broken.  (gs_lev2.ps)
	- restore was broken if -dNOBIND was invoked.  (gs_dps1.ps)
	- deviceinfo returned much more information than it should.
(gs_dps.ps)
	- The fix for the default EndPage procedures not popping their page
count operand from the stack was wrong.  (gs_init.ps, gs_setpd.ps)

</pre><h3><a name="V4.81_Library"></a>Library</h3><pre>

Fixes bugs:
	- The saved character origin took the translation component of the
FontMatrix into account, which caused charpath on fonts with non-zero
translation in the FontMatrix to produce incorrect results.  (gschar.c)

Removes incorrect access attributes on a couple of files.  (gdevpdfm.c,
gxclist.h)

</pre>

<h2><a name="Version4.80"></a>Version 4.80 (limited) (5/28/97)</h2>

<p>
This is the candidate fileset for the 5.0 release.

<h3><a name="V4.80_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- The one-line description of the color image rendering module was
incorrect.  (gximage3.c)
	- Some of the VMS documentation was out of date.  (make.txt,
use.txt)
	- The description of the file name separator for -sFONTMAP= was
wrong.  (use.txt)
	- PSFile was misspelled PSfile.  (use.txt)
	- There were some minor typos.  (gstype1.h)
	- The build instructions had a lot of obsolete information for PC
environments, and didn't cover Microsoft Visual C++.  (make.txt)

Explains that -sPAPERSIZE= only specifies the default papersize, and that
forcing a particular paper size also requires -dFIXEDMEDIA.  (use.txt)

Adds information about building with GNU make on OpenVMS.  (make.txt)

Clarifies the meaning of EOFC for streams.  (strimpl.h)

Documents the new dictionary argument for the eexecDecode filter.
(language.doc)

</pre><h3><a name="V4.80_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- gs_epsf.ps didn't get installed on Unix systems.  (unix-end.mak)
	- The code wouldn't build with libpng 0.95b.  (libpng.mak)
	- One of the VMS scripts used CC_QUAL instead of CC_DEF.
(vms-cc.mak)
	- version.mak wasn't included in a dependency list.  (unix-end.mak)

Brings the VMS DCL script up to date again (for the last time, we hope).
(vms.mak)

Modifies all platform-independent uses of upper-case command line arguments
to deal properly with VMS, where the shell converts all command line
arguments to lower case, without requiring quotation.  (devs.mak, gs.mak,
int.mak, lib.mak, zlib.mak)

Moves the compilation rules for the third-party libraries into gs.mak, so
they can be used to compile the callers as well.  (gs.mak, jpeg.mak,
libpng.mak, zlib.mak)

Adds a set of files that allow building on OpenVMS using GNU make (slightly
patched).  The timing on this is unfortunate, but we've wanted this for a
very long time.  NOTE: be sure to look in the OpenVMS section of make.txt
for information on patching GNU make.  (openvms.mak, append_l.com,
rm_all.com, rm_one.com, copy_one.com)

Adds new makefiles for building on 32-bit Windows with Borland, Watcom, and
Microsoft Visual C++ (versions 4.x and 5.0).  The timing on this is
unfortunate too, but having this capability is so important that we couldn't
pass it up.  (bcwin32.mak, msvc4.mak, msvc5.mak, msvccom.mak, watcw32.mak,
wincom.mak)

Removes now-obsolete makefiles.  (dwcommon.mak, msc.mak, msvcwint.mak,
mscbegin.bat, watcwin.mak)

</pre><h3><a name="V4.80_Utilities"></a>Utilities</h3><pre>

Extends echogs to work in VMS environments, where the shell converts all
command line arguments to lower case, without requiring quotation.
(echogs.c)

Adds a sketch of a utility for converting Type 1 fonts to CFF.  DOESN'T WORK
YET: DON'T TRY TO USE IT.  (t1tot2.ps, type1ops.ps, writecff.ps)

</pre><h3><a name="V4.80_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A type declaration wasn't compatible with libpng 0.95.
(gdevpng.c)
	- kshow wasn't handled properly when producing PDF output.
(gs_pdfwr.ps)
	- The PDF writer put out unnecessary ET/BT commands.  (gdevpdfx.h,
gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c)
	- The PCL XL writer put out real numbers for the miter limit, which
are not allowed (!).  (gdevpx.c)
	- The PCL XL writer didn't combine successive curves into a single
curve command (performance bug only).  (gdevpx.c)
	- The PCL XL writer could write uncompressed images with a tag
saying they were compressed.  (gdevpx.c)
	- The PCL XL writer always selected U.S. letter paper, rather than
the requested size.  (gdevpxen.h, gdevpx.c)
	- The PCL XL writer reselected the paper size on every page, even if
it hadn't changed.  (gdevpx.c)
	- The PCL XL writer always used shorts for line and curve
coordinates, rather than using bytes when possible (performance bug only).
(gdevpx.c)
	- Because of a compiler bug, a macro with argument conflicted with a
variable name.  (gdevpdfx.h, gdevpdf.c)
	- A picky compiler objected to an extern for an undefined structure.
(gdevpsdf.h)
	- The PDF writer sometimes didn't reset the clipping path, causing
bitmaps or rectangle to disappear.  (gdevpdf.c, gdevpdfi.c)
	- The PDF writer produced invalid output if the first page was
blank.  (gdevpdf.c)
	- The AutoRotatePages parameter for PostScript and PDF output (which
doesn't actually do anything yet) incorrectly expected a Boolean value
rather than an enumeration.  (gdevpsdf.h, gdevpsdf.c)
	- Some places returned -1 for an error without calling gs_note_error
or gs_return_error.  (gdevm1.c, gdevmpla.c, gdevrun.c, gxclpath.c)
	- The PCL XL writer produced extremely large files because it didn't
download character bitmaps.  (OK, this isn't really a bug fix.)  (gdevpx.c)
	- The forwarding implementation of get_page_device didn't do the
right thing.  (gdevnfwd.c)
	- The x11alpha device didn't implement get_params properly, leading
to anomalous behavior.  (gdevxalt.c)
	- The PDF writer produced incorrect Count values for outlines: the
count only counted descendant leaves, omitting intermediate nodes.
(gdevpdfm.c)

Removes an assumption that images have at most 4 components.  (gdevpdfi.c)

Adds an x11gray2 device, primarily for debugging.  (devs.mak, gdevxalt.c)

Updates the unified printer driver with a newer version.  (uninfo.ps,
gdevupd.c, *.upp)

</pre><h3><a name="V4.80_Platforms"></a>Platforms</h3><pre>

Adds the P*M devices and the X11 devices (commented out) to the OS/2
makefile.  (os2.mak)

Updates the MS Windows platform to be compatible with Microsoft Visual C++
(as well as Watcom and Borland compilers).  (gsdll32.def, gdevmswn.h,
gp_mswin.h, gsdll.h, dwimg.cpp, dwmain.cpp, dwmainc.cpp, dwtext.cpp,
gdevwdib.c, gdevwprn.c, gdevwpr2.c, gp_mswin.c, gsdll.c)

</pre><h3><a name="V4.80_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Certain synthetic fonts incorrectly were loaded into local rather
than global VM.  (These fonts are not part of the standard distribution.)
(gs_fonts.ps, gs_pfile.ps, *ss*.ps)

</pre><h3><a name="V4.80_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The FAKEFONTS scan could leave junk on the stack.  (gs_fonts.ps)
	- Dynamically loading known encodings on demand left junk on the
stack, causing a typecheck error.  (gs_res.ps)
	- Some 'static' declarations were missing (gcc lossage).  (iname.c)
	- Some internal operators didn't have names, leading to unhelpful
error printout.  (zfileio.c)
	- The resource "operators" didn't always restore the stacks properly
on an error.  (gs_res.ps)
	- The CID font code left a garbage value on the stack during
loading.  (gs_cidfn.ps)
	- The defineresource implementation for built-in resources like
FMapType didn't leave the resource "value" on the stack.  (gs_res.ps)
	- If an operator defined by a procedure was bound into a packed
procedure, the stack-protection feature wasn't effective.  (interp.c)
	- findfont didn't restore the stack if it failed.  (gs_res.ps)
	- The showpage count passed to the BeginPage and EndPage procedures
was incremented only if a page was printed, rather than for every invocation
of showpage.  (gs_init.ps, zdevice2.c)
	- The default EndPage procedures didn't pop their page count operand
from the stack.  (gs_init.ps, gs_setpd.ps)
	- If the argument of findfont wasn't a name or a string, and no font
with that key had been registered, an error occurred.  (gs_fonts.ps,
gs_res.ps)

Updates most of the remaining pseudo-operators to take advantage of stack
protection.  (gs_btokn.ps, gs_cmap.ps, gs_dps1.ps, gs_dps2.ps, gs_fonts.ps,
gs_lev2.ps, gs_pdfwr.ps)

Splits the image operators into a separate file from the path painting
operators.  (This should have been done a long time ago.)  (iimage.h,
zimage.c, zpaint.c)

Adds more of the implementation of the NeXT alpha and compositing
operations, under an #ifdef DPNEXT.  (iimage.h, zcolor1.c, zdpnext.c,
zimage.c)

Adds more of the implementation of DPS contexts.  These are still not
usable.  (icontext.h, icontext.c, zcontext.c, zmath.c)

Changes the help message to describe -dBATCH instead of -c quit.
(imainarg.c)

Recognizes the dictionary argument for the eexecDecode filter.  (zmisc1.c)

</pre><h3><a name="V4.80_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The tracing message when starting to decode 1-D fax data reported
the run_color incorrectly.  (scfd.c)
	- In the CCITTFaxDecode filter, if a buffer boundary fell between a
makeup code and a final zero-length termination code, an ioerror could
occur.  (scfd.c)
	- Per Adobe, in the CCITTFaxDecode filter, EndOfBlock = true should
cause Rows to be ignored.  (scfd.c)
	- If an output stream returned EOFC, an infinite loop might result.
This problem (and the fix) are in the same fragile code as the EOD fix in
4.74, and we may again have introduced a new bug.  (stream.c)

Changes the eexecDecode filter so that instead of a number, it can take a
dictionary with two keys, seed and lenIV.  (Having eexecDecode skip initial
bytes at all was a design bug that is too late to fix.)  (sfilter.h,
seexec.c)

</pre><h3><a name="V4.80_Library"></a>Library</h3><pre>

Fixes bugs:
	- The default mapping from RGB+alpha to RGB didn't lighten
(premultiply) the color according to the alpha value.  (gxcmap.c)
	- The angle error metric for rational tangent screen parameters
should be simply the difference in angle, not a ratio.  (gshtscr.c)
	- gs_setcolorscreen and gs_sethalftone didn't initialize an
allocator pointer, leading to memory access errors.  (gsht1.c)
	- If a banded image was clipped, an invalid band list could be
produced.  (gxclimag.c)
	- A picky compiler wouldn't allow an enum to be &amp;&amp;'ed with a
boolean.  (gschar.c)
	- A short-sighted compiler didn't allow the use of actual procedure
names (as opposed to procedure variables) in a conditional expression.
(gxfill.c)
	- A compiler objected to a name longer than 31 characters.  (gzht.h,
gsht.c, gxclread.c)
	- The height computations for banded images were not consistent,
possibly leading to invalid band lists.  (gxclimag.c)
	- copypage didn't reset the band writer and band reader bookkeeping
consistently, leading to incorrect output and possible errors.  (gxcldev.h,
gxclist.c, gxclread.c)
	- When banding, changing the halftone could lead to accessing memory
after freeing it.  (gxclread.c)
	- When using disk files for band storage, showpage didn't actually
delete or truncate the band list file, possibly causing subsequent copypage
operations to become confused.  (gxclfile.c)
	- When banding, having more than one image operator in progress at a
time confused the rasterizing pass and could produce arbitrary errors.  From
PostScript, this can only happen in the case of an image whose data source
was a procedure-based stream that itself invoked an image operator: this is
a senseless and perverse thing to do, but it shouldn't break the code (and a
Genoa CET file actually does it).  (gxclist.h, gxclimag.c, gxclist.c)
	- Some picky compilers objected to negating unsigned values.
(gsuid.h, gsht.c, gsmemory.c, gxpcopy.c)
	- When banding, if a 90- or 270-degree rotated monobit image was
clipped, invalid memory accesses could occur.  (gximage.h, gximage1.c)
	- The showpage count passed to the BeginPage and EndPage procedures
was incremented only if a page was printed, rather than for every invocation
of showpage.  Fixing this requires removing the incrementing of the count
from the library level altogether.  (gsdevice.c)
	- When rendering a subrectangle of an image, the X DDA was
initialized incorrectly, causing possible errors.  We think this only
affected certain banded images.  (gxdda.h)

Adds a provision for images with an alpha component, under an #ifdef DPNEXT.
****** THE BANDING CODE HAS NOT BEEN UPDATED YET. ******  (gsiparam.h,
gxcmap.h, gxdither.h, gximage.h, gsimage.c, gxclimag.c, gxclread.c,
gxcmap.c, gximage.c, gximage3.c, gximage4.c ****** NOT DONE YET ******,
gximage5.c)

Adds a return_if_error macro to capture the common idiom of making a call
and then returning its value if that value is negative (error).  (gserror.h)

</pre>

<hr>

<h2><a name="Version4.74"></a>Version 4.74 (limited) (5/5/97)</h2>

<p>
This fileset is supposed to fix all remaining errors reported by the Genoa
CET, and is intended to be the last incremental test fileset before the 5.0
release.

<h3><a name="V4.74_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- Mark procedures are *not* executed in the normal return case.
(estack.h)
	- The line_params element of a gs_imager_state is *not* allocated
separately.  (gsstate.c)
	- The value passed to the PDF writer for text is a dictionary, not
an array.  (gdevpdft.c)

Improves the documentation of gstate memory management.  (gsstate.c)

Documents end_status = EOFC for writing streams.  (stream.h, strimpl.h)

Clarifies memory management for halftones and device halftones.  (gsht1.h,
gxdht.h, gxht.h, gzht.h)

Removes the "experimental" tag from the PostScript and EPS writers.
(devs.mak)

</pre><h3><a name="V4.74_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- The viewpcx utility scaled images improperly.  (viewpcx.ps)
	- If a PDF file used F instead of f for filling a path, pdf2ps
didn't output the fill operation.  (pdf_base.ps)

Changes the ps2pdf script so that, like pdf2ps, it allows debugging
switches.  (ps2pdf)

</pre><h3><a name="V4.74_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The vgalib driver didn't clip monobit images properly.
(gdevvglb.c)
	- The X driver asked for exposure events to be reported, but never
read them, causing the event queue to grow indefinitely.  (gdevxini.c)
	- The "vector" drivers and the PDF writer didn't properly keep track
of whether the current clipping region was the default one.  (gs_pdfwr.ps,
gdevvec.h, gdevvec.c, gdevpdf.c, gdevpdft.c)
	- The PDF writer had word and character spacing interchanged.
(gdevpdft.c)
	- The PDF writer scaled word and character spacing incorrectly.
(gdevpdft.c)

</pre><h3><a name="V4.74_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The user object operators didn't leave the stack in a clean state
if they failed.  (gs_dps2.ps)
	- UserObjects wasn't actually defined.  (gs_dps2.ps)
	- deviceinfo and set/currenthalftonephase were defined even if the
dps feature wasn't selected.  (int.mak, gs_dps.ps, gs_dps1.ps, gs_lev2.ps,
zdps.c, zdps1.c)
	- The dps feature didn't automatically include the level2 feature,
which it needs.  (int.mak)
	- The DPS user names mechanism didn't work, since the user names
array was subject to save and restore.  (It still doesn't really work --
there is no provision for expanding the user names array, which is created
with length 0.)  (gs_btokn.ps, ivmspace.h, zbseq.c, zdps.c)
	- The DPS context operators didn't do all the necessary error
checking.  (zcontext.c)
	- The debugging printout for names printed the name index in hex
without identifying it as such.  (idebug.c)
	- Adding the first non-name key (or name key with a name index
beyond 4K) to a dictionary that had any deleted entries could cause some
entries to apparently disappear.  (idict.c)
	- If a sub-table of the name table was freed during garbage
collection, memory could be left in an inconsistent state.  (iname.c, igc.c)
	- findfont didn't restore the stacks reliably if an error occurred.
(gs_fonts.ps)
	- definefont with an invalid Type 0 font sometimes added a FID entry
(with a dangling pointer) if it failed.  (Recovering properly from a VMerror
during font creation would require a much more complicated fix than this,
but since we expect a garbage collection to occur in that case, we aren't
concerned about it.)  (zfont0.c)
	- Reading parameter values from a dictionary could access beyond the
end of the array that keeps track of which entries had been referenced.
(idict.h, idict.c, iparam.c)
	- Halftone data was allocated in the current VM rather than in the
same VM as the halftone dictionary or procedure.  (Fixing this includes
updating code as necessary for the change in halftone and device halftone
allocation.)  (iht.h, ivmspace.h, zht.c, zht1.c, zht2.c)
	- Closed non-executable files on the e-stack could cause a restore
to be invalid.  (zvmem.c)

Adds skeleton code for the NeXT Display PostScript alpha and compositing
operators.  This is not ready for use yet!  (errors.h, gs_dpnxt.ps,
zdpsnext.c)

Implements more of state saving and restoring for Display PostScript
contexts.  This is not ready for use yet either.  (int.mak, icontext.h,
istack.h, icontext.c, zcontext.c)

Adds stub code for the Display PostScript view clip operators.  (gs_dps.ps,
zdps.c)

Removes the obsolete PPM-writing operator.  (int.mak, vms.mak, *.mak,
zwppm.c)

Makes the random number generator state public so it can be stored in the
context state.  (zmath.c)

Changes the flag for forcing global garbage collection to a run-time
variable, for debugging.  (igc.c)

Changes the handling of job control so that it doesn't use procedures that
produce an execstackoverflow when being printed.  (gs_init.ps)

Updates code as necessary for the change in reference counting.  (zcie.c,
zcrd.c)

Updates code as necessary for the change in off-stack gstate copying.
(zdps1.c)

Removes a small bit of obsolete code.  (interp.c)

</pre><h3><a name="V4.74_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- An output stream that was not the last one in a pipeline could
incorrectly be asked to write its EOD marker more than once.  (The fix is
very fragile and may have introduced new bugs.)  (stream.c)

</pre><h3><a name="V4.74_Library"></a>Library</h3><pre>

Fixes bugs:
	- The gx_device_halftone_release procedure was declared in two
different header files.  (gzht.h)
	- Off-stack copying of gstates could lead to a situation where
different parts of a single gstate were owned by different allocators; this
could cause them to be freed improperly, corrupting memory.  We fixed this
partly by making the mixed ownership situation work, and partly by copying
more of the gstate when off-stack gstates are involved.  Unfortunately, the
fixes are subtle and may have introduced new bugs.  (gsstate.h, gsht.c,
gsht1.c, gspcolor.c, gsstate.c)
	- If an error occurred while creating a Pattern instance, the
partially initialized instance structure wasn't freed.  (gspcolor.c)
	- Halftones and device halftones didn't allocate their clones or
their subsidiary structures with the correct allocator.  (gsht.c, gsht1.c)
	- The error statement when allocating a reference-counted object had
to be a control transfer.  (gsrefct.h)
	- Copying gstates incorrectly copied the memory and saved pointers,
and the pointer to the dash pattern.  (gsstate.c)
	- Flatness values less than 0.5 produced far more line segments than
necessary (roughly the square of the required number).  Fixing this may have
bad effects on character quality -- this remains to be seen.  (gxpflat.c)
	- An error during installation of a halftone could leave things in
an inconsistent state.  (gsht.c)
	- The API didn't provide enough flexibility with respect to memory
management for halftones, or guarantee consistent allocation of a halftone
and its subelements.  (gsht1.h, gsht.c, gsht1.c, gshtscr.c)
	- Releasing a path didn't clear enough pointers to ensure clean
garbage collection.  (gxpath.c)
	- Finalizing or discarding a (cached) scaled font didn't properly
unlink it from the scaled_fonts list.  (gsfont.c)
	- Invoking an image operator within the BuildChar procedure for a
charpath caused an infinite loop.  (gsimage.c)
	- The bookkeeping for the scaled font cache was incorrect: the count
didn't always get decremented when a scaled font was freed.  (gsfont.c)
	- "High level" masked images were written incorrectly in the band
list as black-and-white images.  (gxclimag.c)
	- For "high level" images with fewer than 4 samples per pixel,
non-standard Decode values were written incorrectly in the band list.
(gxclimag.c)
	- The color wasn't set correctly for "high level" masked images.
(gxclimag.c)
	- The fastest case of monobit image rendering could get a memory
access error if the image lay partly outside the page.  (gximage1.c)
	- Clipping with an empty path was a no-op, rather than clipping out
everything.  (gxcpath.c)

Makes reference-counted objects remember which allocator owns them: this
entails a NON-BACKWARD-COMPATIBLE change to some of the macros for reference
counting.  This was necessary to fix the off-stack gstate copying problem.
(gsrefct.h, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscsepr.c,
gsstate.c, gxclread.c)

Refactors the unpacking of image data, to make unpacking available as a
general facility.  (gximage.h, gxsample.h, gximage.c, gximage0.c,
gximage1.c, gximage4.c, gxsample.c)

Enhances -Z? so that before freeing an object, it checks that the object was
owned by the correct allocator.  (gsalloc.c)

</pre>

<h2><a name="Version4.73"></a>Version 4.73 (limited) (4/19/97)</h2>

<p>
This is an incremental bug fix release made primarily to provide a
synchronization point for an upcoming trip.

<h3><a name="V4.73_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- A reference to the uniprint documentation was incorrect.
(current.txt)
	- -Olimit 1000 is not enough now for DEC Ultrix, 1200 is required;
this is also required for SGI IRIX.  (make.txt)

Adds argument/result comments to all the operators defined in gs_lev2.ps.
(Eventually we will do this for all operators defined as PostScript
procedures.)  (gs_lev2.ps)

</pre><h3><a name="V4.73_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The makefiles didn't provide a default value for GCONFIG_EXTRAS.
(gs.mak)

</pre><h3><a name="V4.73_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- pdf2ps didn't work with TrueType or compressed Type 1 fonts.
(gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)

</pre><h3><a name="V4.73_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A cast from byte to char was omitted.  (gdevpdfm.c)

</pre><h3><a name="V4.73_Platforms"></a>Platforms</h3><pre>

Updates the VMS script (again).  (vms.mak)

</pre><h3><a name="V4.73_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- A module that used strlen didn't include string_.h.  (zdevice.c)
	- Because of some bad PostScript code in FrameMaker output, identity
rather than unity black generation and undercolor removal functions are
required on black-and-white devices.  (gs_init.ps)
	- A harmless internal error during initialization left bogus
information in $error.  (gs_cidfn.ps)
	- startjob didn't clear the execution stack.  Fixing this required
NON-BACKWARD-COMPATIBLE changes to the internal operators .instopped, .stop,
and .stopped, which are not supposed to be used by any external code.
(startjob will still give errors if executed in a file that isn't being
piped from stdin; this will take longer to fix.)  (gs_init.ps, gs_lev2.ps,
iref.h, imain.c, interp.c, zcontrol.c, zfile.c)

Adds a new .execn operator, part of the startjob changes, that allows
pushing multiple items on the exec stack.  Eventually this will allow us to
get rid of many dynamically created closures.  (zcontrol.c)

</pre><h3><a name="V4.73_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Landscape-mode PDF files weren't rotated properly.  (gs_pdf.ps,
pdf_main.ps)

Makes the default PDF configuration notify users more informatively when
encountering an encrypted file.  (pdf_sec.ps)

</pre><h3><a name="V4.73_Streams"></a>Streams</h3><pre>

Makes the RunLengthEncode filter always generate optimally compressed
output.  We did this because we thought one of the Genoa CET files loops
forever if this is not the case; but we were wrong.  (srle.c)

</pre><h3><a name="V4.73_Library"></a>Library</h3><pre>

Fixes bugs:
	- If one coordinate of a position or distance overflowed the
internal representable range, the other coordinate became garbage.  (bug
introduced in 4.70) (gspath.c)
	- The bounding box computation for strokes was slightly too large
(sometimes much too large).  (gxpaint.h, gdevbbox.c, gxclpath.c, gxstroke.c)

Adds (under an #if 0) an experimental alternate halftone cell choice
algorithm.  (gshtscr.c)

Adds a better comment to a particularly obscure line of C code.
(gxclimag.c)

</pre>

<h2><a name="Version4.72"></a>Version 4.72 (limited) (4/14/97)</h2>

<p>
This is another bug fix release, motivated mostly by Genoa testing.  It also
updates the new uniprint driver with a major revision, and upgrades CFF
support a little bit.

<h3><a name="V4.72_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- -dNOGC only disables default automatic garbage collection, not all
garbage collection.  (use.txt)
	- Apparently a different set of flags is needed for newer H-P
compilers.  (make.txt)

Replaces the tiny FAQ with a pointer to the on-line FAQ.  (use.txt)

Updates the documentation for the uniprint driver.  (devices.txt)

Clarifies the fact that Ghostscript reads Fontmap files from *all*
directories in the search list.  (use.txt)

Notes that building on Linux may require SM and ICE in the list of X
libraries.  (make.txt)

</pre><h3><a name="V4.72_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- An -include type42 was omitted from the level2 module description.
(int.mak)
	- A mention of $(ECHOGS) in the rule for sfile should have been
$(ECHOGS_XE).  (lib.mak)
	- The pcx2up sample device should have been put in devs.mak rather
than lib.mak.  (devs.mak, lib.mak)
	- scanchar.h and scantab.c belong in the library, not the
interpreter.  (devs.mak, int.mak, lib.mak)
	- Some _h definitions were used before being defined, or weren't
defined at all.  (devs.mak, lib.mak)
	- The JPEG driver was missing a dependency.  (devs.mak)
	- The PDF writer was missing a dependency.  (devs.mak)
	- Building Level 1 systems was no longer possible.  (int.mak)

Updates the VMS build scripts.  (vms.mak, vms-decc.mak)

Adds *.upp to the list of files installed under Unix.  (unix-end.mak)

Adds rules to the Unix makefiles to build two library files: gs.a,
consisting of the entire PostScript/PDF interpreter lacking only gs.c, and
gslib.a, consisting of the graphics library without the gslib.c test driver.
(ansihead.mak, cc-head.mak, gcc-head.mak, unixtail.mak)

</pre><h3><a name="V4.72_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The PS/EPS writers could generate a reference to an undefined
name.  (gdevps.c)
	- The PDF writer produced incorrect output for multi-level outlines.
(gdevpdfm.c)
	- The PDF writer didn't convert /Action to /A, and /Action/Subtype
to /S, in Annot dictionaries.  (gdevpdfm.c)
	- The PDF writer didn't work in Level 1 systems.  (gs_pdfwr.ps)
	- The PDF writer didn't transform /Rect and /R values to current
user coordinates.  (gs_pdfwr.ps, gdevpdfx.h, gdevpdfm.c)
	- The PNG writer could refer to the 3 predefined stdio files even in
environments where this was undesirable.  (gdevpng.c)
	- The PDF writer had a compiled-in limit of 100 pages of output.
(gdevpdfx.h, gdevpdf.c)

Updates the uniprint driver with a major revision that uses device
parameters that can be set from the command line, rather than PostScript
code, for configuration choices.  (gdevupd.c, *.upp)

</pre><h3><a name="V4.72_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- gp_enumerate_files_next had no way to return an error.  (gp.h,
gp_dosfe.c, gp_ntfs.c, gp_os2.c, gp_unifs.c, gp_vms.c) ****** NOT
IMPLEMENTED YET ******
	- On the Watcom platform, CPU_TYPE &gt;= 486 didn't automatically set
FPU_TYPE to 387.  (wccommon.mak)

</pre><h3><a name="V4.72_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Caching the current device in userdict could create dangling
references.  (gs_init.ps, gs_pdfwr.ps, zdevice.c)
	- If an error occurred in a BuildChar or BuildGlyph procedure, the
graphics state stack wasn't restored.  (ichar.h, zchar.c, zchar2.c)
	- There was an obsolete check for a structure when cleaning up after
a show operator.  (zchar.c)
	- Attempting to show a character with no associated glyph in a Type
3 font with a BuildGlyph procedure caused an error.  (zchar.c)
	- noaccess on a read-only dictionary didn't give an error.
(ztype.c)
	- The dictionary passed to a Pattern's PaintProc was the original
template, not the copy made by makepattern.  (gs_lev2.ps)
	- Invalid font parameters could result in partially constructed
fonts, which caused problems for restore.  (zfont0.c, zfont2.c)
	- Files run under job control caused an error when terminating.
(gs_init.ps)
	- setpagedevice didn't protect itself against malfunctioning
BeginPage or EndPage procedures.  (The protection is still not perfect.)
(gs_setpd.ps)
	- .type42execchar called font_param redundantly.  (zchar42.c)
	- The font operators didn't protect themselves well enough against
bogus font dictionaries.  (zfont.c, zfont0.c)
	- If an error occurred within a stringwidth, the graphics state
stack wasn't restored properly.  (zchar.c)
	- If an error occurred within the PaintProc of a form, the graphics
state stack was left with an extra entry.  (gs_lev2.ps)
	- Registering a font under a second name could corrupt data
structures.  (zfont2.c)
	- Different scalings of the same font should have "equal" fontIDs,
to match the Adobe implementations.  (iutil.c)
	- Errors detected by PostScript code during initialization either
allowed execution to continue or produced a hex stack dump, instead of just
producing a message and exiting.  (interp.c)
	- The memory validator didn't validate chunks at previous save
levels.  (ilocate.c)
	- The Level 1 size of systemdict was too small.  (iinit.c)
	- Attempting to define a Category resource in local VM gave a
typecheck error rather than an invalidaccess.  (gs_res.ps)
	- Building Level 1 systems was no longer possible.  (zusparam.c)

Rearranges the interpreter code slightly so that all operator invocations go
through a single procedure when debugging.  (interp.c)

Adds a -K&lt;numK&gt; switch to limit the total amount of memory that Ghostscript
can acquire.  (imainarg.c)

Makes the memory validator check packed refs more carefully.  (ilocate.c)

Makes the memory validator check explicitly for pointers to freed objects.
(igc.c, ilocate.c)

Makes the memory validator check dictionaries more carefully.  (ilocate.c)

Makes the memory validator check refs embedded in structures.  (ilocate.c)

Adds a debugging option that bypasses the garbage collector entirely.
(igc.c)

Adds debugging options to validate memory before/after save/restore.
(zvmem.c)

Removes the patch for the uniprint driver, since it is no longer needed.
(gs_init.ps)

Implements real-number operands in CFF fonts.  (gs_cff.ps)

Implements non-default charsets in CFF fonts.  (gs_cff.ps)

</pre><h3><a name="V4.72_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- The PDF 1.2 "marked content" operators weren't defined.
(pdf_main.ps)
	- Streams with binary data whose first character was an EOL (\n)
didn't parse properly.  Unfortunately, the way we fixed this may break some
other files.  (pdf_base.ps)
	- PDF 1.2 #nn escape syntax in names wasn't recognized.  ****** This
is implemented with an inefficient hack that should be moved down into C.
However, I don't want to risk introducing new bugs during the beta test
period. ****** (pdf_base.ps)
	- The interpreter had a limit of 64K objects.  Removing this limit
required changing a basic data structure -- admittedly a risky thing to do
during beta test.  (pdf_base.ps, pdf_main.ps)
	- TJ didn't multiply the offsets by the font size, causing incorrect
character positioning.  (gs_pdf.ps)

</pre><h3><a name="V4.72_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The ASCIIHexDecode filter read an extra character in case of
error.  (sstring.c)

Adds more tracing output to the CCITTFaxDecode stream.  (scfd.c)

</pre><h3><a name="V4.72_Library"></a>Library</h3><pre>

Fixes bugs:
	- The allocator client name for rendering bitmap patterns was
incorrect.  (Only affects tracing output.)  (gspcolor.c)
	- The check for exceeding the overall allocation limit was
incorrect, because of unsigned arithmetic.  (Only affects limitation of
total allocation, which is only used for debugging and benchmarking.)
(gsmemory.c)
	- The 0'th component of colored screens wasn't passed through the
band list, possibly causing access errors when rasterizing.  (gxclimag.c,
gxclread.c)
	- setbbox could get an overflow without detecting it.  (gsdps1.c)
	- Images with only one component but MultipleDataSources = true
could cause a memory access error.  (gximage.c)
	- The buffer for unpacking 12-bit-per-sample image data was too
small, causing memory corruption.  (gximage.c)
	- 12-bit-per-sample images with multiple data sources sometimes
didn't pass correct pointers to image_data.  (gsimage.c)
	- If an image data stream reached EOF before supplying enough data
for the entire image, memory corruption could occur.  (zpaint.c)
	- When a device halftone was freed, some pointers in the halftone
cache weren't cleared, leading to possible dangling references.  (gsstate.c)
	- Invalid font parameters could result in partially constructed
fonts, which caused problems for restore.  (gxfont0.h, gsfont.c)
	- If an error occurred within a stringwidth, the graphics state
stack wasn't restored properly.  (gschar.c)
	- The (static) limit on the size of a command line argument was too
small.  (gsargs.h)
	- Building Level 1 systems was no longer possible.  (gxdht.h,
gsht.c, gsht1.c)
	- Truncation instead of rounding caused colors on gray-scale devices
to come out very slightly too dark.  (gxcmap.c)
	- The Decode mapping table constructed for images was slightly
inaccurate for ranges other than [0 1] or [1 0].  (gximage.c)

</pre>

<h2><a name="Version4.71"></a>Version 4.71 (limited) (3/31/97)</h2>

<p>
This is a bug fix release during the beta test period.

<h3><a name="V4.71_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- A larger value of -Olimit is now needed to optimize gxclread.c.
(make.txt)
	- Some comments were incorrect.  (gdevbbox.h, sfilter1.c)

Updates the GPL with a newer version from FSF.  (COPYLEFT)

Notes that the gcc 2.7.x code generation bug is fixed in 2.7.2.1.
(make.txt)

</pre><h3><a name="V4.71_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- Some streams required by high-level drivers were incorrectly
grouped with the interpreter rather than the library.  (int.mak, lib.mak)
	- The choice of implementation for file streams was buried in an
obscure place, rather than being included in the configuration definitions
at the head of each makefile.  (We believe there are no more such buried
parameters.)  This involved a NON-BACKWARD-COMPATIBLE change in the way this
choice was specified.  (lib.mak, *.mak)
	- Some dependencies were missing.  (lib.mak)

</pre><h3><a name="V4.71_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A variable was used before being initialized, causing get_bits
(and raster ops) to fail when using alternate X devices.  (bug introduced in
4.70.)  (gdevxalt.c)
	- Some 'private' declarations were omitted.  (It is infuriating that
gcc doesn't check for this!)  (gdevps.c, gdevpx.c)
	- A few character strings were used as byte arrays without a cast.
(gdevpx.c)
	- The EPS writer didn't write a correct bounding box, and didn't
write it at the beginning of the file.  (gdevvec.h, gsstruct.h, gdevps.c,
gdevvec.c)
	- x_copy_color specified an incorrect (too large) image width.
Apparently this only mattered because it could cause invalid memory
accesses.  (gdevx.c)
	- x_copy_mono also specified too large an image width.  It's not
clear this made any difference.  (gdevx.c)
	- The default implementation of strip_copy_rop didn't clamp Y values
to legal values for get_bits.  (gdevmrop.c)

</pre><h3><a name="V4.71_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Some initialization files prematurely switched the interpreter
into Level 2 mode, causing some Level 2 operators not to be defined.  (bug
introduced in 4.60 or later.)  (gs_cff.ps, gs_cidfn.ps, gs_cmap.ps,
gs_init.ps, gs_res.ps)

</pre><h3><a name="V4.71_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The choice of procedure names for the file-descriptor-based
implementation of file streams was buried in a .c file, rather than being
chosen in the makefile.  (sfile.c[deleted], sfileno.c[deleted], sfxstdio.c,
sfxfd.c, sfxboth.c)

</pre><h3><a name="V4.71_Library"></a>Library</h3><pre>

Fixes bugs:
	- rcurveto was broken -- it drew curves to random points.  (bug
introduced in 4.61.)  (gspath.c)
	- A trailing comma in an enum definition upset some compilers.  (bug
introduced in 4.70.)  (gstype1.h)
	- Type 1 fonts with hint replacement could produce anomalous or
clipped output, or even missing lines.  (Also cleans up some out-of-date
formatting.)  (gxtype1.h, gstype1.c, gxhint2.c)
	- Removes some conditionals for choosing between old and new
algorithms.  (gxhint3.c)
	- makebitmappattern required that the bitmap consist of only a
single tile repetition.  (gspcolor.c)
	- Some computations on RasterOps didn't take transparency into
account properly.  (gdevmrop.c)
	- The structure definition for imager and graphics states had an
incorrect offset for line_params, causing the garbage collector not to mark
or relocate dash patterns, possibly causing memory faults, FPEs, or invalid
output.  (bug introduced since 4.03.)  (gsstate.c)
	- 'show' operators gave a limitcheck for unreasonable coordinates,
even if limit clamping was enabled.  (gschar.c)

Implements banded filling and stroking with colored halftones, in addition
to pure colors and binary halftones.  Since we are in a beta test period,
actual use of this feature (but *not* all the code implementing it) is
disabled under an #ifdef FUTURE.  (gsdcolor.h, gxcldev.h, gxclpath.h,
gxdht.h, gxhttype.h, gsht.c, gxclimag.c, gxclpath.c, gxclread.c)

</pre>

<h2><a name="Version4.70"></a>Version 4.70 (limited) (3/26/97)</h2>

<p>
This fileset fixes the one outstanding compilation problem on PC platforms
and the old problem of limitchecks for out-of-bounds coordinates, and adds a
variety of new features, including the ability to save away the band lists
for pages and rasterize them later and/or elsewhere in any order and
combination.  This is the first "serious beta" candidate for the next
general release.

<p>
Fileset numbers 4.62 through 4.69 were skipped deliberately.

<h3><a name="V4.70_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- The list of special -d and -s switches was out of date.  (use.txt)
	- The name of the zlibDecode filter was incorrectly written
zlibEncode.  (language.txt)

Documents where to find out how to install gcc 2.7.x on SGI IRIX 6.x.
(make.txt)

Documents a makefile patch required on NeXTStep.  (make.txt)

Documents how to patch gcc to fix the AXP code generation bug.  (make.txt)

Adds documentation for the new unified printer driver.  (devices.txt)

</pre><h3><a name="V4.70_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- 'make distclean' didn't remove a couple of files.  (gs.mak)
	- A library module didn't include a necessary dependency.  (lib.mak)
	- A new .ps file wasn't installed properly.  (unix-end.mak)
	- File write dates weren't updated properly on PC platforms, causing
unnecessary rebuilding.  (cp.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak,
tccommon.mak, wccommon.mak, zlib.mak)
	- An unnecessary explicit compilation line for gdevcdj.c caused
problems in the Mac environment.  (devs.mak)
	- The VMS scripts were out of sync again.  (vms.mak)
	- The VMS build scripts didn't include the new JPEG driver.
(vms-*.mak)
	- A number of makefile macros were referenced before being defined.
(devs.mak, lib.mak, int.mak, *.mak)
	- libpng.mak didn't work with PVERSION=90.  (libpng.mak, zlib.mak)

Separates install-scripts from install-exec and install-data.
(unix-end.mak)

Moves the definition of SEARCH_HERE_FIRST from iminst.h to the makefiles.
(*.mak, iminst.h, iconf.c, imain.c)

Adds a -dBATCH switch that causes Ghostscript to exit after processing the
files named on the command line.  (gs_init.ps)

Adds the PostScript, EPS, and PCL XL writers, and the color and gray-scale
JPEG drivers, to all Unix configurations.  (ansihead.mak, cc-head.mak,
gcc-head.mak)

</pre><h3><a name="V4.70_Drivers"></a>Drivers</h3><pre>

NOTE: because of a change in an internal interface (clist_output_page), the
cp50 driver no longer works.  This is a user-contributed driver for which we
take no responsibility.

Fixes bugs:
	- gdevcdj.c wasn't compatible with ansi2knr.  (gdevcdj.c)
	- 'private' was omitted from some declarations.  (gdevjpeg.c)
	- The PostScript writer didn't keep track of the current color
properly.  (gdevps.c)
	- RESOLUTION was misspelled in a header.  (gdevbjc.h)
	- Some compilers objected to the use of a floating point initial
resolution value.  (gdevbjc.h)
	- Some compilers didn't allow static initialization of a union.
(gsdcolor.h)
	- If a TIFF driver got an error when initializing the CCITTFax
encoder, it returned a bogus error code.  (gdevtfax.c)
	- The PDF writer produced incorrect output for Indexed color space
images.  (gdevpdfi.c)
	- For many fatal error conditions, the X driver called exit()
instead of returning an error.  (gdevx*.c)

Adds new drivers:
	- epswrite, an EPS-writing driver (instead of making EPS output a
parametric option of the PostScript-writing device).  (devs.mak, gdevps.c)
	- pcxcmyk, a 4-bit CMYK PCX driver.  This is probably only useful
for debugging CMYK color rendering.  (gdevpcx.c)
	- jpeggray, a JPEG driver that produces gray-scale rather than color
output.  Thanks to Tom Lane for contributing this.  (gdevjpeg.c)
	- uniprint, a unified printer driver for a wide variety of inkjet
printers.  Thanks to Gunther Hess for contributing this.  (gdevupd.c)

Adds the resolution (pHYs) to the output of the PNG drivers.  (gdevpng.c)

Adds recognition of the ASCII85EncodePages parameter to the PostScript and
EPS writers.  (gdevps.c)

Makes the new JPEG driver write a JFIF header, which contains the image
resolution.  (gdevjpeg.c)

Changes the "vector" device support interface so relative movement can be
detected easily.  THIS IS STILL SUBJECT TO CHANGE WITHOUT NOTICE.
(gdevvec.h, gdevpsdf.c, gdevps.c, gdevpx.c, gdevvec.c)

Changes the PostScript, EPS, and PDF writers to recognize curves and lines
that can be represented more efficiently.  (gdevpsdf.h, gdevpsdf.c,
gdevps.c)

Adds a new parameter to the PDF writer, FirstObjectNumber.  This defines the
first object number that will be used in the output.  The default, and
minimum, value is 1; the maximum value is approximately 2^31.  This is for
the benefit of dvipdf; we don't expect it to be used otherwise.  In fact,
using it appears to produce files that Adobe Acrobat Reader won't accept,
even though the files are perfectly compliant with the published PDF
specification.  (gdevpdfx.h, gdevpdf.c, gdevpdfp.c)

</pre><h3><a name="V4.70_Platforms"></a>Platforms</h3><pre>

Removes the makefile for the 16-bit Borland C++ platform.  This was the last
supported 16-bit platform; we expect to gradually drop all 16-bit
concessions from the code itself.  (bcwin.mak)

</pre><h3><a name="V4.70_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The initial size of systemdict was too small, causing the
interpreter to slow down substantially.  (iinit.c)
	- A library module depended on an interpreter module.  (zcsindex.c)
	- A logically necessary (but accidentally always available) #include
was missing.  (ifont.h)

Moves set/currentoverprint to a more appropriate module.  (zcolor2.c,
zcssepr.c)

Changes the default transfer functions so that they do something reasonable
when given operands outside the legal [0..1] range.  We only do this to work
around a bug in FrameMaker output, which uses the transfer function as the
screen function (!).  (gs_init.ps)

Changes the CMap construction algorithm to use the new, more compact
representation.  (zfcmap.c)

Adds support for Adobe's Compact Font Format.  Many individual features are
not implemented yet: see the comment in the source code for details.
(gs_cff.ps)

Adds support for Type 2 charstrings in Type 1 fonts.  (ifont.h, zfont1.c)

Changes the Type 1 character rendering operator for the library change in
Type 1 fonts.  (zchar1.c, zfont1.c)

Initializes the graphics state limit clamp flag to true.  (zgstate.c)

Temporarily adds a configuration file for the new unified printer driver,
and arranges for it to be read at startup.  This arrangement will be
replaced very soon by a different one based on command line parameters.
(gs_init.ps, uniprint.ps)

</pre><h3><a name="V4.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Adds support for Compact Font Format fonts.  (pdf_font.ps)

</pre><h3><a name="V4.70_Streams"></a>Streams</h3><pre>

Adds a glue procedure needed for the new jpeggray driver.  (sjpeg.h,
sjpege.c)

Removes the width limit of 32K in the CCITTFaxEncode filter.  The new limit
is absurdly large (about 50M).  (scf.h, scfx.h, scfe.c)

</pre><h3><a name="V4.70_Library"></a>Library</h3><pre>

Fixes bugs:
	- A library module depended on an interpreter module.  (gxcolor2.h,
gscolor2.c)
	- When rendering a band, clipping was sometimes used when it wasn't
necessary.  (Performance only.)  (gxclread.c)
	- Stroking didn't check the path against the device clipping box in
the absence of an explicit (non-default) clipping path.  (Performance only.)
(gxstroke.c)
	- A reference to an opaque type upset a couple of compilers.
(gxclread.c)
	- Negative 32-bit numbers in Type 1 fonts didn't work properly on
64-bit systems.  (gstype1.c)
	- A logically necessary (but accidentally always available) #include
was missing.  (gxbitmap.h)
	- A header wasn't protected against double inclusion.  (gxclist.h)
	- Clipping devices didn't store their actual width and height.
(gxcpath.c)
	- The slow-case check for thin lines was incorrect.  (gxstroke.c)
	- Images didn't compute their clipping boxes correctly if there
wasn't an explicit clipping path.  (This must be a very recent bug, since it
creates an overflow condition that prevents monochrome images from being
rendered at all.)  (gximage.c)

Moves set/currentoverprint to a more appropriate module.  For clients of
gs_set/currentoverprint, this is a NON-BACKWARD-COMPATIBLE CHANGE, since the
header file is now separate.  (gscolor2.h, gscsepr.h, gscolor2.c, gscsepr.c)

Replace the MetroWerks work-around with a different, more general one.
(gdevmem.h, gdevmem.c, gxdevice.h)

Speeds up the Type 1 interpreter a little.  (gstype1.c, gxhint3.c)

Redesigns the internal representation of CMaps to be more space-efficient.
(gxfcmap.h, gschar0.c, gsfcmap.c)

Implements a facility for saving away pages and rendering them later.
Currently this requires the pages to be represented as band lists on files,
and only allows X translation when rendering.  This involves adding the
following new printer device parameters:
	BandHeight
	BandWidth
	BandBufferSpace
Also changes the names of the printer device parameter elements from
use_buffer_space to BufferSpace and from max_bitmap to MaxBitmap for
consistency.  (gdevprn.h, gxcldev.h, gxclio.h, gxclist.h, gxclmem.h,
gxclpage.h, gxdevmem.h, gdevmem.c, gdevp2up.c, gdevprn.c, gxclmem.c,
gxclpath.c, gxclread.c)

Changes the band list implementation API to allow closing a file without
deleting it, and to allow reopening an existing file.  This is a
NON-BACKWARD-COMPATIBLE change to a deep internal interface.  (gxclio.h,
gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c)

Speeds up rendering of colored halftones, by recognizing cases where one or
more planes don't actually require screening, unrolling a loop, and doing
basic clipping before halftoning.  (gxcht.c)

Adds a graphics state parameter, gs_set/currentlimitclamp, that changes the
handling of out-of-range coordinates to clamp them in a way that produces
approximately the intended output most of the time, rather than causing a
limitcheck.  Currently this is only designed to work with the basic path
construction operations ([r]moveto, [r]lineto, [r]curveto, closepath); it
does not work with many other operations such as show, flattenpath or the
rectangle operations.  Note also that while currentpoint will return the
correct (unclamped) value, reading out the path with pathforall will return
clamped values.  This involves NON-BACKWARD-COMPATIBLE changes to the path
structure (but not to any public interfaces).  (gxpath.h, gxtype1.h,
gzpath.h, gzstate.h, gspath.c, gspath1.c, gsstate.c, gstype1.c, gxpaint.c,
gxpath.c, gxpath2.c, gxpcopy.c)

Adds support for Type 2 charstrings.  Some features are not implemented yet:
see gstype2.c for details.  (gscrypt1.h, gstype1.h, gxfont1.h, gxop1.h,
gxtype1.h, gstype1.c, gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c)

</pre>

<hr>

<h2><a name="Version4.61"></a>Version 4.61 (limited) (3/13/97)</h2>

<p>
This fileset cleans up many compiler warnings.  It adds support for
CMap-encoded fonts, and a driver that writes JPEG images.

<h3><a name="V4.61_Documentation"></a>Documentation</h3><pre>

Corrects an error in the description of the internal CodeMap structure.
(gs_cmap.ps)

Documents the fact that the optimizer in gcc 2.7.2.1 is broken on AXP
machines.  (make.txt)

Corrects the name of the .setglobal/.currentglobal procedures.  (zvmem2.c)

Updates current.txt in preparation for the release.  (current.txt)

</pre><h3><a name="V4.61_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The VMS script was out of date again.  (vms.mak)
	- CIDFont support unnecessarily required composite font support.
(int.mak)
	- CMap and CIDFont support had improper dependencies on
initialization order.  (lib.mak, int.mak)
	- Some dependencies were missing in the JPEG library code.
(jpeg.mak)

Adds the new JPEG driver to all standard configurations.  (*.mak)

</pre><h3><a name="V4.61_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A dependency was omitted from the makefile.  (devs.mak, gdevps.c)

Cleans up some warnings from picky compilers.  Some of these actually
indicated problems, such as unreachable code.  (gdevpdfx.h, gdevbj10.c,
gdevcdj.c, gdevpdfp.c, gdevstc.c)

Adds a JPEG-writing driver.  Currently this only produces RGB output and
only has a QFactor parameter, but eventually it could take all the other
parameters of the DCTEncode filter.  (devs.mak, int.mak, lib.mak,
gdevjpeg.c)

Refactors the PDF and PostScript output drivers so that both of them
understand all the relevant documented PDF distiller parameters.  (The
PostScript driver currently disregards nearly all of them.)  (gdevpdfx.h,
gdevpsdf.h, gdevvec.h, gdevpdf*.c, gdevps.c, gdevpsdf.c, gdevpx.c)

</pre><h3><a name="V4.61_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The MetroWerks C compiler gave an inexplicable error on a
particular initialization.  (gdevmem.h, gdevmem.c)

</pre><h3><a name="V4.61_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- The insideness testing operators sometimes reported hits
incorrectly.  (zupath.c)
	- Mixed-type arithmetic used floats rather than doubles when
converting integers, possibly leading to loss of precision.  (zarith.c,
zrelbit.c)
	- composefont was defined in a private dictionary, not in
systemdict.  (gs_cmap.ps)
	- composefont didn't work, for several different reasons.
(gs_cmap.ps)
	- After a Type 1 font called an OtherSubr, an invalid memory access
usually occurred, because of an incorrect attempt to free a data structure.
(zchar1.c)
	- 2 .setlanguagelevel gave an error if globaldict hadn't been
defined yet.  (zmisc2.c)

Cleans up some warnings from picky compilers.  Some of these actually
indicated problems, such as unreachable code, or failure to check for
(implausible) out-of-range data.  (idict.c, idparam.c, igc.c, iinit.c,
imain.c, iscan.c, zbseq.c, zchar1.c, zdps1.c)

Adjusts clients for a change in the internal character cache structure and
the introduction of the font next-glyph procedure.  (zfont.c, zfont0.c)

Refactors the Level 1 / Level 2 interpreter split slightly so that composite
fonts don't require all of Level 2.  (int.mak, gs_dps1.ps, gs_dps2.ps)

Adds FMapType 9 (CMap-encoded) composite font support.  (int.mak,
gs_cmap.ps, ifont.h, zfcmap.c, zfont.c, zfont0.c)

</pre><h3><a name="V4.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Adds recognition of /Identity values for BG, UCR, and TR functions in
ExtGState resources.  (General function values still aren't recognized.)
(pdf_draw.ps)

Centralizes the handling of inherited attributes.  (pdf_draw.ps,
pdf_main.ps)

Starts to add support for Type 0 fonts.  (pdf_font.ps, pdf_main.ps)

</pre><h3><a name="V4.61_Streams"></a>Streams</h3><pre>

Cleans up some warnings from picky compilers.  Some of these actually
indicated problems, such as unreachable code.  (shc.h, scfd.c, sfilter2.c,
siscale.c, stream.c)

</pre><h3><a name="V4.61_Library"></a>Library</h3><pre>

Fixes bugs:
	- Some picky compilers disliked certain conditional expressions.
(gxclread.c)
	- Some picky compilers couldn't handle an extraneous semicolon.
(gdevvec.h)
	- A cast from byte ** to const byte ** was missing.  (gdevvec.c)
	- Resizing the levels array of a halftone order when banding could
cause invalid memory accesses.  (bug introduced in 4.60) (gxclread.c)
	- One picky compiler didn't allow taking the address of an extern
undefined structure.  (lib.mak, gxclread.c)
	- When rendering Type 1 fonts, character overshoot was usually
suppressed when it shouldn't have been, often producing "squashed"
characters.  (gxhint1.c)
	- On systems where sizeof(long) &gt; sizeof(int), coordinate values of
more than 22 bits were passed through the band list incorrectly, producing
incorrect output.  (gxclread.c)

Cleans up some warnings from picky compilers.  Some of these actually
indicated problems, such as unreachable code or (hypothetical) loss of
precision.  (gsdevice.c, gshsb.c, gsht.c, gsstate.c, gstype1.c, gxclimag.c,
gxclpath.c, gxclread.c, gxpdash.c)

Makes using font hints conditional, for debugging.  (gxhint1.c)

Adds library-level support for FMapType 9 (CMap-encoded) composite fonts.
There is still no support for rearranged fonts.  (gsccode.h, gsfcmap.h,
gsstruct.h, gxfcache.h, gxfcmap.h, gxfont.h, gxfont0.h, gschar.c, gschar0.c,
gsfcmap.c, gsfont.c, gsfont0.c)

Splits band list control and utilities from rectangle-oriented commands,
because a file was getting too big.  (gxclist.c, gxclrect.c)

Moves the temporary file names for command lists from the printer device
structure to the command list structure; moves opening and closing the
temporary files from gdev_prn_alloc/free to clist_open/close.  (gdevprn.h,
gxclist.h, gdevprn.c, gxclist.c, gxclread.c)

Changes the command list storage implementation interface to pass the file
name to the clist_rewind and clist_fseek functions, for the benefit of OSs
that require closing and reopening a file to switch between reading and
writing.  This is a NON-BACKWARD-COMPATIBLE change in a non-public
interface.  (gxclio.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c)

Changes the get_outline procedure in Type 42 fonts to return the length of
the outline data as well as the pointer.  This is a NON-BACKWARD-COMPATIBLE
change in a semi-public interface.  (gxfont42.h, gstype42.c)

</pre>

<h2><a name="Version4.60"></a>Version 4.60 (limited) (3/2/97)</h2>

<p>
This fileset moves color rendering up from the graphics state to the imager
state so that color rendering can happen after banding.  It also shifts
image rendering to the rendering pass of banding for many common cases
(often referred to inaccurately as "high-level image" capability).  The
changes involved are substantial and in some respects subtle, so
unfortunately it is quite possible that some new bugs have been introduced.

<p>
This fileset also includes improvements to the new PCL XL driver
(pxlmono/color), and introduces an experimental PostScript driver (pswrite).

<h3><a name="V4.60_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- The argument list of colorimage was incorrect.  (zcolor1.c)
	- false .charboxpath incorrectly claimed to create the correct path
even when the CTM was not well-behaved.  (language.txt)
	- The discussion of the "main program" files was out of date.
(make.txt)

Updates the OS/2 EMX documentation.  (make.txt)

Modifies the Aladdin Ghostscript Free Public License slightly so it may be
applied to other software packages.  (PUBLIC)

Updates inaccurate build documentation for several Unix platforms.
(make.txt, ansihead.mak, cc-head.mak, gcc-head.mak, libpng.mak)

Notes a problem with the MIPSpro 7.1 compiler.  (make.txt)

</pre><h3><a name="V4.60_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- Most makefiles didn't include version.mak.  (msc.mak,
msvcwint.mak, os2.mak, tctail.mak, wctail.mak)
	- There was an incorrect dependency for the Windows printer device.
(devs.mak)

Moves the PDF writer to devs.mak.  (devs.mak, int.mak)

Updates the main VMS script to be structured like version.mak.  (vms.mak)

</pre><h3><a name="V4.60_Drivers"></a>Drivers</h3><pre>

Factors out the stream-writing procedures from the PDF writer, so they can
be shared with the new PostScript writer.  (gdevpdfs.h =&gt; gdevpstr.h,
gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c, gdevpdfs.c =&gt; gdevpstr.c,
gdevpdft.c, gdevpsdf.c)

Adds a PostScript writer (pswrite), similar to the PDF and PCL XL drivers.
Currently this handles fill/stroke graphics and Level 1 images; everything
else (including text) is turned into bitmaps.  (devs.mak, gdevps.c)

Changes the names of the PCL XL drivers from hpxmono/color to pxlmono/color.
(devs.mak, gdevpx.c)

Updates the "vector" device support interface.  THIS IS STILL SUBJECT TO
CHANGE WITHOUT NOTICE.  (gdevvec.h, gdevpx.c, gdevvec.c)

Makes the vgalib driver a page device.  This seems bizarre, but it's
necessary for setpagedevice to work with it.  (gdevvglb.c)

Updates some drivers for the new color mapping interfaces.  (gdevpx.c)

Updates the user-contributed Canon LBP-8II and LIPS III driver.
(gdevlbp8.c)

</pre><h3><a name="V4.60_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- The workaround for Ultrix's incorrect implementation of sh -e
still didn't work.  (unixtail.mak)
	- The definition of offset_of didn't work on the Mac.  (stdpre.h)

Updates the OS/2 EMX linker command per input from a user.  (os2.mak)

</pre><h3><a name="V4.60_Fonts"></a>Fonts</h3><pre>

Adds .pss (apparently used by Adobe for Multiple Master font instances) to
the list of extensions skipped by the GS_FONTPATH directory scanner.
(gs_fonts.ps)

</pre><h3><a name="V4.60_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- Programs that rebind null, true, and/or false could cause all
kinds of problems.  We've only fixed a couple of the places that might be
affected (findfont, quit), by wrapping an explicit "systemdict begin/end"
around the code; fixing this completely would probably require wrapping this
implicitly around almost every pseudo-operator, which would be too
expensive.  (gs_fonts.ps, gs_lev2.ps)
	- In a Level 2 system, grestoreall stopped one level too early.
(zdevice2.c)
	- setpagedevice didn't restore the stack properly if it got an
error.  (gs_setpd.ps)

Changes the GC pointer enumeration interface to reduce the number of
'discarding const' warnings.  See under Library below.  (igc.c)

Updates the interpreter for the change in the imager / graphics state split.
(zpcolor.c)

Makes the stack-restoring behavior of pseudo-operators non-optional.
(interp.c)

</pre><h3><a name="V4.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- PDFDocEncoding and WinAnsiEncoding incorrectly had `minus' at
position 45 rather than `hyphen'.  (gs_pdf_e.ps, gs_wan_e.ps)

</pre><h3><a name="V4.60_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- A header file wasn't protected against double inclusion.
(stream.h)
	- any_abs was redefined.  (spngp.c)
	- The CCITTFaxDecode filter didn't fully initialize the "previous
line" for 2-D decoding, so if the very first line of data was 2-D, an
out-of-bounds memory access could occur.  (scfd.c)

</pre><h3><a name="V4.60_Library"></a>Library</h3><pre>

Fixes bugs:
	- gs_image_next could read too much data, causing errors at the
interpreter level.  (gsimage.c)
	- The bitmaps stored in the Pattern cache were usually freed,
leaving dangling pointers.  (gsdcolor.h, gxpcache.h, gxpcolor.h, gsstate.c,
gxpcmap.c)
	- There was still one assignment to a const structure, and there
were some unnecessary const-discarding casts.  (gxclread.c)
	- If a character in a Type 3 font was defined by executing 'show'
type commands, charpath did the wrong thing (didn't pick up the paths
created by the inner show).  Similarly, if it uses 'stroke', true charpath
did the wrong thing (appended the path rather than the strokepath path).
(gxchar.h, gschar.c, gspaint.c)
	- A header file wasn't protected against double inclusion.
(gserror.h)
	- The new fast implementation of rectfill didn't handle rectangles
with negative width/height.  (bug introduced in 4.32) (gsdps1.c)
	- Reading banded high-level images calculated the image height
incorrectly, (usually) causing a rangecheck.  (gxclread.c)
	- When reading band data, a memory fault could occur if the halftone
cache hadn't been allocated yet.  (gxht.c)
	- The imager state data for high-level images wasn't written soon
enough.  (gxclimag.c)
	- High-level images computed bounding boxes incorrectly, so they
could write some garbage data in the band list, and could also fail to write
some information.  (gsmatrix.h, gxmatrix.h, gxclimag.c)
	- High-level images wrote the raster value incorrectly in the band
list.  (gxclimag.c)
	- Images with non-zero initial source X and non-portrait orientation
were displaced on the page.  (In practice, this only applied to some banded
high-level images.)  (gximage.c)
	- The bounding box device didn't forward output_page calls, causing
pages to be dropped or overprinted.  (gdevbbox.c)
	- The band renderer considered all non-zero return codes as errors,
rather than only negative codes.  (gxclread.c)
	- An unnecessary extern hadn't been removed.  (gxclimag.c)
	- Some macros didn't parenthesize uses of their arguments, causing
syntax errors.  (gsrefct.h)
	- The screen phase and color_info weren't set correctly when
rendering bands.  (gsstate.h, gsht.c, gxclread.c)
	- A header file didn't declare all the opaque types it used.
(gsdevice.h)
	- Indexed color spaces didn't work with banded images.  (They still
don't -- the check for writing the color space, and the code for reading the
table or map, are incomplete.)  (gxclist.h, gxclpath.h, gxclimag.c,
gxclpath.c, gxclread.c)

In preparation for implementing post-banding halftoning:

	- Moves color rendering information, including alpha value, from
graphics state to imager state; also moves the allocator pointer.  This is
quite a subtle change, and may have a significant bug tail.  (gxdcolor.h,
gxht.h, gxistate.h, gzstate.h, gschar.c, gsdps1.c, gspaint.c, gsstate.c,
gxclread.c)

	- Changes all the relevant color space and color mapping procedures
so they take a const gs_imager_state * (and, in some cases, a [const]
gx_device *) instead of a const gs_state *.  This is a
non-backward-compatible change, but it only affects internal interfaces.
(gsdcolor.h, gxcmap.h, gxcspace.h, gxdcconv.h, gxdcolor.h, gxdither.h,
gxpcolor.h, gzht.h, gschar.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c,
gscsepr.c, gsdevice.c, gsimage.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcconv.c,
gxdcolor.c, gxht.c, gximage.c, gximage[2345].c, gxpcmap.c)

	- Changes the color and color space reference count adjustment
procedures similarly, to take a gs_memory_t * instead of a gs_state_t *.
(gxcspace.h, gscie.c, gscolor.c, gscolor2.c, gscsepr.c, gspcolor.c)

	- Changes the gs_halftone in the graphics state from being part of
the gs_state_contents to being an independent reference-counted object.
This too may have a significant bug tail.  (gxht.h, gxistate.h, gsht.c,
gsstate.c)

	- Changes the image processing code so it no longer assumes that the
gs_imager_state is actually a gs_state.  (gximage.h, gximage.c, gximage2.c,
gximage3.c, gximage4.c, gximage5.c)

	- Adds a unique ID value to device halftones, so that it's possible
to detect (non-)changes quickly.  (gxdht.h, gsht.c)

Finishes the code for writing and reading color rendering information in the
band list.  This involves changes to several band list opcodes.  (gsht.h,
gsht1.h, gxcldev.h, gxclist.h, gxclpath.h, gxdht.h, gzht.h, gsht.c, gsht1.c,
gxclbits.c, gxclimag.c, gxclist.c, gxclread.c)

Changes the garbage collector pointer enumeration procedure interface
slightly to reduce the number of 'discarding const' warnings.  THIS IS A
NON-BACKWARD-COMPATIBLE CHANGE for anyone who didn't use the
ENUM_PTRS_BEGIN[_PROC] macro to start a pointer enumeration procedure (which
should be no one).  (gsstruct.h, gsmemory.c)

Corrects a few more needlessly const-discarding casts.  (gxfcache.h,
gxccache.c)

Checks for file reading errors when rasterizing bands.  (gxclread.c)

</pre>

<hr>

<h2><a name="Version4.51"></a>Version 4.51 (limited) (2/9/97)</h2>

<p>
This version contains a more reasonable high-level PCL XL driver.  The VMS
build script is working again, we think.

<h3><a name="V4.51_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The gsdll_h macro wasn't defined all the places it was needed.
(devs.mak, os2.mak)

</pre><h3><a name="V4.51_Drivers"></a>Drivers</h3><pre>

Continues to develop the "vector" driver infrastructure and the PCL XL
driver.  EVERYTHING IN THESE FILES IS SUBJECT TO CHANGE WITHOUT NOTICE.
(gdevvec.h, gdevvec.c)

Brings the PCL XL driver up to usable quality for graphics.  Most
fill/stroke graphics, and portrait-orientation bitmap images up to 8 bits
per pixel, are converted directly to their PCL XL equivalents.  Text is
still treated as bitmaps.  Both gray-scale and color output are now
supported.  (devs.mak, gdevpx.c)

</pre><h3><a name="V4.51_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- When using gsos2.exe with gsdll2.dll, reducing the size of the
page bitmap caused a limitcheck error with the message
    Failed to decommit memory in pm_alloc_bitmap, rc = 87  (gdevpm.c)
	- The scripts that construct gconfig_.h failed on Ultrix, because
Ultrix's implementation of sh -e is incorrect.  (unixtail.mak, ugcclib.mak)
	- Some systems that have sys/times.h don't define CLK_TCK, making a
compilation fail.  (time_.h)

</pre><h3><a name="V4.51_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- An omitted semicolon wasn't detected by gcc.  (idict.c)

Removes a source of unnecessary duplication by getting the revision number
and date from version.mak.  (gs.mak, int.mak, version.mak, gscdef.c)

</pre><h3><a name="V4.51_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The minimum buffer sizes for the RunLengthDecode filter hadn't
been changed to reflect the algorithm improvement made in release 4.38.
(srld.c)

Changes the RunLengthEncode filter so it can make progress with only a
2-byte output buffer.  (srlx.h, srle.c)

</pre><h3><a name="V4.51_Library"></a>Library</h3><pre>

Fixes bugs:
	- Because of a typo, the slow general algorithm was always used for
monochrome images.  (Performance bug only, but a serious one.)  (gximage2.c)
	- Dots (zero-length lines with round caps and zero dot length)
caused an infinite loop.  (bug introduced in 4.40)  (gxstroke.c)
	- Some image data unpacking procedures were always required, but
weren't always included.  (bug introduced in 4.50) (gximage.c, gximage0.c,
gximage3.c)
	- Images with 8 bits per pixel and non-identity Decode produced
garbage.  (bug introduced later than 4.03) (gximage0.c)
	- Some necessary casts and omitted punctuation weren't detected by
gcc.  (gxpath.h, gsargs.c, gsstate.c, gxclread.c, gxpdash.c)
	- The band list became confused if a band had no commands at all.
(gxclread.c)
	- If a path included a closepath followed by a moveto to the same
point, it could be written incorrectly in the band list.  (bug probably
introduced in 3.60) (gxclpath.c)

Changes some internal computations for arcs from float to double for greater
accuracy.  (gspath1.c)

</pre>

<h2><a name="Version4.50"></a>Version 4.50 (limited) (1/31/97)</h2>

<p>
This release contains an experimental high-level PCL XL driver, a little
more support for CID/CMap fonts, and the usual bug fixes.  NOTE: the VMS
build script is known to be out of sync with the makefiles again; we still
don't see any alternative to constant struggles with this problem.

<h3><a name="V4.50_Documentation"></a>Documentation</h3><pre>

Corrects the -h message, which gave an incorrect file name for the bug
report form.  (imainarg.c)

Removes documentation for 16-bit MS-DOS platforms with the Borland compiler.
(fonts.txt, make.txt, new-user.txt, use.txt)

</pre><h3><a name="V4.50_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The Watcom library makefile didn't define the directory
information for libpng and zlib.  (watclib.mak)

Moves the selection of band list implementation (file- vs. RAM-based) and
the compression filter for RAM-based band lists up to the top-level
makefiles.  Again, this is a NON-BACKWARD-COMPATIBLE procedure change.
(lib.mak, *.mak)

Moves the selection of version number for all platforms (except VMS, as
usual) to a separate file.  This will reduce the number of files that need
editing when the version number changes.  (ansihead.mak, cc-head.mak,
gcc-head.mak, ugcclib.mak, version.mak, tar_cat)

</pre><h3><a name="V4.50_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- An error in the (unsupported) SGI RGB driver could cause crashes
or incorrect output.  (gdevsgi.c)

Starts to create a framework for structured output ("vector") drivers (PDF,
PostScript, PCL XL, etc.)  (gdevbbox.h, gdevvec.h, gsdcolor.h, gsstruct.h,
gxdevice.h, gdevvec.c)

Moves default page size parameters to a more accessible header.  (gdevprn.h,
gxdevice.h, gdevx.c)

Adds a driver that produces properly structured PCL XL output.  This is
highly experimental and not ready for use yet.  (gdevpx.c)

</pre><h3><a name="V4.50_Platforms"></a>Platforms</h3><pre>

Removes support for 16-bit MS-DOS platforms with the Borland compiler.  For
the moment, 16-bit MS Windows is still supported.  (bc.mak, bcflags.mak,
bclib.mak, tc.mak)

</pre><h3><a name="V4.50_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- File-based CIDFonts (with delayed, incremental loading of
character outlines) didn't work.  (gs_cidfn.ps)

Finishes implementing the definition of CMap resources, except for
rearranged fonts.  (gs_cidfn.ps, gs_cmap.ps)

Adds a little more CMap support code.  (zcid.c)

Removes the .setcurrentfile operator, since it doesn't solve the problem it
was intended to address.  (zcontrol.c)

Adapts the interpreter to use the new argument processing code.
(imainarg.c)

</pre><h3><a name="V4.50_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The CCITTFaxDecode filter could access as much as 3 bytes beyond
the end of a buffer, causing an invalid memory access.  (This is essentially
the same bug that was fixed for the CCITTFaxEncode filter in 4.38.)
(scfd.c)

</pre><h3><a name="V4.50_Library"></a>Library</h3><pre>

Fixes bugs:
	- Painting an image without having set up any halftone could cause a
crash.  (gxht.c)
	- In a very obscure case, an occasional scan line of landscape
images could get corrupted.  (gximage0.c)
	- Because of a rounding error, patterns could fail to be painted in
certain cases.  (gxpcolor.h, gspcolor.c, gxpcmap.c)
	- Very large line widths or miter limits could cause the computation
of stroke expansion to overflow.  (gxpaint.h, gdevbbox.c, gxclpath.c,
gxstroke.c)
	- The phase could be incorrect for simple patterns.  (gspcolor.c)
	- The default implementation of copy_mono used an incorrect
RasterOp.  (gdevdflt.c)
	- The default implementation of fill_masked didn't increment the row
pointer, causing characters to appear as solid rectangular blocks.
(gxdcolor.c)

Eliminates an unnecessary gsave and grestore from rectfill and rectstroke if
the path was null.  (gsdps1.c)

Adds a limit on the amount of space that the default (C heap) allocator will
allocate, and a record of the maximum amount allocated, to help testing
embedded products.  (gsmemory.c)

Changes the band list algorithm for deciding how many replicas of a halftone
tile to store in the tile cache.  The previous algorithm was too liberal,
which could cause the cache to overflow and many unnecessary bitmaps to be
written in the band list.  (gxclbits.c)

Writes clipping with a rectangle more compactly in the band list.
(gxfixed.h, gxclpath.c)

Adds new band list commands for representing 90- and 180-degree arcs
compactly.  (gxclpath.h, gxclpath.c, gxclread.c)

Repackages handling of general monochrome images, color images, and 12-bit
and interpolated images, so that they are included optionally rather than in
all configurations.  (int.mak, lib.mak, gximage.h, gximage.c,
gximage[12345].c)

Changes the structure definition for devices to include no-op pointer
enumeration and relocation, so they can have subclasses.  (gxdevice.h)

Adds a library facility for processing command line arguments with
@-expansion.  (gsargs.h, gsargs.c)

</pre>

<hr>

<h2><a name="Version4.41"></a>Version 4.41 (private) (1/21/97)</h2>

<p>
This release adds a PCL XL output driver, and a few performance
improvements.

<h3><a name="V4.41_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The zlib library used an incorrect header file when compiling.
(zlib.mak)

Changes the names of the preprocessor symbols indicating the presence of
system header files to be consistent with the ones used by GNU configure.
(dvx-tail.mak, ugcclib.mak, unixtail.mak, vms.mak; dirent_.h, time_.h;
gp_unix.c)

Changes the method for choosing the compression filter for RAM-based band
lists.  This is a NON-BACKWARD-COMPATIBLE change in the makefile.  (lib.mak)

</pre><h3><a name="V4.41_Drivers"></a>Drivers</h3><pre>

Adds black-and-white and 8-bit gray PCL XL (PCL 6) drivers for the LaserJet
5 and 6 family.  This driver is extremely simple and just emits bitmaps;
future drivers will use more PCL XL high-level constructs.  (gdevlj56.c)

</pre><h3><a name="V4.41_Fonts"></a>Fonts</h3><pre>

Updates the free font distribution to add the URW Grotesk and Antiqua fonts.

</pre><h3><a name="V4.41_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- gs -h and -v returned with a non-zero exit code on all platforms.
(This is necessary under Windows, to keep the message visible on the screen,
but nowhere else.)  (imainarg.c)
	- Resizing a dictionary could exceed dict_max_size, causing memory
corruption.  (dstack.h, idict.h, idict.c, zdict.c)

Adds .setlinecap and .setlinejoin that can use the extended range of line
cap/join values, and redefines setlinecap and setlinejoin in terms of them.
(gs_init.ps, zgstate.c)

</pre><h3><a name="V4.41_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The CCITTFaxDecode filter with EncodedByteAlign = true skipped to
a byte boundary before checking for an EOL.  This may be wrong if EndOfLine
= true; we aren't at all sure what should happen if EndOfLine = false.
(scfd.c)

Adds a "no wrapper" option to the zlib streams, to optionally suppress the
time-consuming integrity checksum computation.  (szlibx.h, szlibc.c,
szlibd.c, szlibe.c)

</pre><h3><a name="V4.41_Library"></a>Library</h3><pre>

Fixes bugs:
	- Dashed lines with zero-length drawn segments (dots) that fell
exactly on a corner produced inappropriate output.  (pcl/test19.pxs)
(gxpdash.c, gxstroke.c)
	- Dashed lines didn't set the segment notes properly.  (gxpdash.c)
	- The bounding box device didn't free a bookkeeping structure at the
end of processing an image.  (gdevbbox.c)
	- Curve points could get computed incorrectly when using emulated
floating point.  (gxpcopy.c)
	- The 1-element cache for curve_x_at_y didn't work if Y was
decreasing.  (gxfixed.h, gxpcopy.c)

Distinguishes between error and informational exits.  (stdpre.h)

Defines and checks maximum values for line cap and join parameters.
(gslparam.h, gsline.c)

Removes the 'not last' segment note, since it is not used for anything.
(gxpath.h, gspath1.c, gxpath2.c, gxpcopy.c, gxpflat.c, gxstroke.c)

Changes the memory freeing algorithm for RAM-based band lists back to the
original one, since the "improved" one had more bugs than it was worth
chasing.  (gxclmem.c)

Speeds up the A * B / C algorithm a little.  (gsmisc.c)

Speeds up curve_x_at_y by recognizing more cases that don't require the slow
A * B / C algorithm.  (gxpcopy.c)

Changes the path filling code so it uses fill-by-trapezoids even if
fill_adjust is zero, as long as the flatness is at least 1 pixel.
(gxfill.c)

Removes the (unneeded) floating point operations from gx_curve_log2_samples.
(gxpflat.c)

Changes the memory-based implementation of band lists so that it constructs
the compressor and decompressor by calling procedures rather than
instantiating templates: this allows setting filter parameters to
non-default values.  (gxclmem.h, gxcllzw.c, gxclmem.c, gxclzlib.c)

</pre>

<h2><a name="Version4.40"></a>Version 4.40 (private) (1/13/97)</h2>

<p>
This version finally handles the last graphics model discrepancies between
PostScript and PCL, by correctly implementing null joins, minimum dot
lengths, and tangent-aligned curve ends.  It also contains some significant
performance improvements, and as usual a few bug fixes.

<h3><a name="V4.40_Documentation"></a>Documentation</h3><pre>

Documents the new accurate curves and path dashing operators.
(language.txt)

</pre><h3><a name="V4.40_Utilities"></a>Utilities</h3><pre>

Adds switches for genconf to set and unset a prefix for file names.
(genconf.c)

</pre><h3><a name="V4.40_Drivers"></a>Drivers</h3><pre>

Adds recognition of the new Distiller 3.0 parameters to the PDF writer.
(None of them have any effect yet.)  (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c,
gdevpdfp.c)

Converts all the output functions in the PDF writer from being file-based to
using streams, in anticipation of adding compression.  (gdevpdfs.h,
gdevpdfx.h, gdevpdf*.c, gdevpdfs.c)

</pre><h3><a name="V4.40_Interpreter"></a>Interpreter</h3><pre>

Adds operators for accessing the new accurate curves flag in the graphics
state.  (zgstate.c)

Adds an operator for invoking gs_dashpath.  (zpath1.c)

</pre><h3><a name="V4.40_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Fixes bugs:
	- Indexed color spaces whose base space was a CIE space caused an
error.  (pdf_draw.ps)

</pre><h3><a name="V4.40_Library"></a>Library</h3><pre>

Fixes bugs:
	- A pointer was declared const incorrectly.  (gxcpath.c)
	- Filling with a pattern often failed to pass a non-null bitmap ID,
causing excessive writing in the band list.  (Performance bug only.)
(gspcolor.c)
	- The bounding box device didn't discount copy_mono or draw_line
operations drawing in white.  (gdevbbox.c)
	- The bounding box device didn't read out the bounding box correctly
as the PageBoundingBox device parameter.  (It did return it correctly
through the gx_device_bbox_bbox procedure.)  (gdevbbox.c)
	- The default implementation of fill_triangle drew nothing or
incorrect output if the corners of the triangle were specified in certain
orders (ax &lt; 0 or bx &lt; 0) (i.e., the previous "fix" had a bug).
(gdevddrw.c)

Changes tile size from always being set in all bands to being 'known' by
bands individually.  (gxclist.h, gxcldev.h, gxclbits.c, gxclist.c)

Computes an additional value in advance when rendering images.  (gximage.h,
gximage1.c, gximage2.c)

Replaces some slow loops with calls of memmove.  (gxclmem.c)

Provides a fixed-point implementation of A * B / C for machines with slow
floating point.  (gxfixed.h, gsmisc.c)

Extends the "device color" type to implement filling masked regions as well
as rectangles.  (gxdcolor.h, gdevdflt.c, gspcolor.c, gxcht.c, gxdcolor.c,
gxht.c)

Makes unclipped monobit portrait and landscape images and image masks use
the new masked fill capability of device colors.  (gximage.h, gximage.c,
gximage1.c, gximage2.c)

Adds a macro for determining pointer alignment.  (stdpre.h, gdevdflt.c)

When floating point is slow, uses a different, faster algorithm for
gx_curve_x_at_y.  (gxpcopy.c)

Improves performance by adding a one-element cache for gx_curve_x_at_y.
(gzpath.h, gxpcopy.c)

Reduces overhead when banded images are pre-rasterized (currently, always).
(gxclimag.c)

Adds a rendering cost estimate field to each band in a band list.  This
field isn't actually used for anything yet; eventually, the intent is that
bands with a high cost will get rendered, and stored in compressed form,
before starting the engine.  (gxclist.h)

Adds the concept of 'notes' for path segments, to allow remember what
segments constitute a single curve or arc.  Currently we set these properly
for everything except dashed paths.  (gxclpath.h, gxpath.h, gzpath.h,
gspath1.c, gxclpath.c, gxclread.c, gxpath.c, gxpath2.c, gxpcopy.c)

When the dot length is non-zero, changes curve stroking to always use bevel
joins within each curve rather than the current join.  This prevents a
"bristly" look with no join and butt caps.  (gxstroke.c)

Adds an "accurate curves" capability that makes the last line segment of a
flattened curve actually be tangent to the curve, which in turn makes
flat-end caps be correctly perpendicular to the tangent.  (gxpath.h,
gxpcopy.c)

Adds an "accurate curves" flag in the graphics state.  (gsline.h,
gxclpath.h, gxistate.h, gsline.c, gspath.c, gspath1.c, gxclpath.c,
gxclread.c, gxfill.c, gxstroke.c)

Changes the meaning of "no join" (gs_join_none) so that instead of producing
no join and butt caps, it produces whatever the current cap is.  This is
compatible with the H-P definition.  (gxstroke.c)

Implements non-zero dot length for dash patterns.  (gxpdash.c)

Splits off the curve flattening algorithms into a separate file.
(gxpcopy.c, gxpflat.c)

</pre>

<hr>

<h2><a name="Version4.39"></a>Version 4.39 (limited) (1/1/97)</h2>

<p>
This version was created only to accompany a release of the PCL XL
interpreter.  It was withdrawn the day after it was released, because the
tools used to produce it put the wrong files in the filesets.

<h3><a name="V4.39_Documentation"></a>Documentation</h3><pre>

Adds a more detailed description of the third-party ps_view viewer
interface.  (new-user.txt)

Corrects an error in a reference to the PSLRM.  (lib.txt)

Documents the change in .makeoperator.  (language.txt)

Updates the FTP location of the zlib sources.  (zlib.mak)

</pre><h3><a name="V4.39_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The Unix library makefile didn't include the necessary definitions
for libpng and zlib.  (ugcclib.mak)

Allows selecting the compression filters for memory-based band lists in the
makefile.  Makes zlib (deflate) the default compressor for memory-based band
lists.  (lib.mak)

</pre><h3><a name="V4.39_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- prfont.ps wouldn't print unencoded characters in Type 42 fonts.
(prfont.ps)

</pre><h3><a name="V4.39_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- The H-P monochrome driver didn't put out enough initialization
commands at the beginning of each page to make each page printable
independently.  (gdevdjet.c)

</pre><h3><a name="V4.39_Interpreter"></a>Interpreter</h3><pre>

Changes ref_stack_count_inline so it never does a procedure call.
(istack.h)

Changes .makeoperator so that operator procedures save the stack depths, and
restore the stack pointers (if possible) if the operator encounters an
error.  This is a NON-BACKWARD-COMPATIBLE CHANGE; it requires rewriting the
'stop' and 'stopped' pseudo-operators (and, if there were any, any other
pseudo-operators that interact with the error handling machinery) in C.
(gs_init.ps, interp.c, zcontrol.c)

Adds recognition of the LeadingEdge, MediaClass, and RollFedMedia keys in a
page device dictionary, per the Adobe supplement for their version 2017
interpreter.  This involves a NON-BACKWARD-COMPATIBLE change to the
(undocumented) .matchpagesize operator.  (gs_setpd.ps, zmedia2.c)

Makes necessary changes for compatibility with the added parameters for the
zlib filters.  (zfzlib.c)

</pre><h3><a name="V4.39_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The zlib encoder returned EOFC when it should have returned 0.
(szlibe.c)

Adds optional parameters and reset procedures for the zlib filters.
(szlibx.h, szlibc.c, szlibd.c, szlibe.c)

</pre><h3><a name="V4.39_Library"></a>Library</h3><pre>

Fixes bugs:
	- Displaying characters with a non-standard RasterOp could cause an
invalid memory access.  (gdevdflt.c)
	- Banding sometimes used an incorrect RasterOp.  (gxclread.c)
	- When banding, mixing Patterns and halftones could confuse the
bookkeeping of tile size, leading to incorrect generation of the band list
and error messages or confusion when rasterizing.  (gxclist.h, gxclbits.c,
gxclread.c)
	- If only the dash pattern offset changed, and not any of the other
dash-related parameters, the new offset wasn't written in the band list,
causing incorrect output.  (gxclpath.c)
	- Oversized halftone tiles didn't report their error code properly.
(gxclbits.c)
	- Oversized halftone tiles with RasterOp caused an error.
(gxclist.c)
	- When banding, RasterOp transfers that crossed a band boundary
didn't access the correct source data on bands other than the first.
(gxclist.c)
	- There were redundant copies of the code for writing a RasterOp
value in the band list.  (gxclimag.c, gxclpath.c)
	- Oversized patterns or halftones produced garbled output.
(gxclbits.c)
	- The check for oversized patterns or halftones was slightly
incorrect, leading to the possibility of writing out a tile that would
overflow the reading buffer and corrupt memory.  (gxclbits.c)
	- When banding, RasterOp wasn't applied to fill and stroke
operations, and wasn't applied correctly to characters.  (gdevdflt.c,
gxclimag.c, gxclread.c)
	- The RasterOp-related optimizations for black-and-white images
sometimes produced incorrect output.  (gximage.c, gximage2.c)
	- The default implementation of fill_triangle didn't draw anything
if the corners of the triangle were specified in certain orders (ax &lt; 0 or
bx &lt; 0).  (gdevddrw.c)
	- Painting with a Pattern could pass out-of-range phase values to
driver procedures.  (gspcolor.c)
	- Because of an off-by-1 error, halftones or patterns passed through
the band list could write past the end of their allocated space in the band
tile cache, leading to incorrect output or possible arithmetic exceptions or
memory access errors.  (gsbitops.c)

Adds -Z: for printing only the minimal command list statistics.  (gxclist.c,
gxclread.c)

Expands band list tracing so it includes all of the data associated with the
command, not just the command name and a few command parameters.
(gxclread.c)

Adds free lists for strings.  Currently these are only used in
non-garbage-collected environments.  (gxalloc.h, gsalloc.c, gsnogc.c)

Adds a procedure for copying a path structure, and an (internal) accessor
for the current path in the graphics state.  (gxpath.h, gspath.c, gxpath.c)

Speeds up filling characters with halftones a little bit.  (gdevdflt.c)

Changes the memory-based implementation of band lists so it can use any
compression / decompression filter, so it only compresses when it has
allocated a specified amount of buffer storage, and so it releases its
buffer storage at the end of each page.  (gxclmem.h, gxclmem.c)

Speeds up counting the number of 1-bits in a byte, which is used in some
image processing algorithms.  (gsbittab.h, gsbittab.c)

Reduces the band list space required for changing tile size.  (gxcldev.h,
gxclbits.c, gxclread.c)

</pre>

<h2><a name="Version4.38"></a>Version 4.38 (limited) (12/20/96)</h2>

<p>
Adds support for a couple of undocumented features in Type 1 fonts.

<h3><a name="V4.38_Interpreter"></a>Interpreter</h3><pre>

Adds handling of the Type 1 font subroutineNumberBias (an optional entry in
the Private dictionary) and lenIV = -1 features at the interpreter level.
(zchar1.c, zfont1.c)

</pre><h3><a name="V4.38_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The CCITTFaxEncode filter could access as much as 3 bytes beyond
the end of a buffer, causing an invalid memory access.  (scfe.c)

Changes the RunLengthDecode filter so it can make progress (produce output)
with only a 1-byte output buffer.  (srlx.h, srld.c)

</pre><h3><a name="V4.38_Library"></a>Library</h3><pre>

Fixes bugs:
	- The sine and cosine of multiples of 90 degrees weren't exact.
(gxfarith.h, gsmisc.c)
	- The expanded bounding box computation for strokes didn't take into
account the possibility of overflow.  (gxstroke.c)
	- The allocator didn't fill freed strings with the 'free' mark.
(gsalloc.c)
	- When using a pattern with RasterOp, the phase was computed
incorrectly, leading to anomalous filling patterns.  (gspcolor.c)
	- Patterns with a non-zero translation in the matrix passed to
makepattern didn't translate the pattern origin properly.  (gxcolor2.h,
gxpcolor.h, gspcolor.c)

Adds a subroutineNumberBias field to Type 1 fonts.  This is an undocumented
feature of the Type 1 font format.  (gxfont1.h, gstype1.c)

Interprets lenIV = -1 in Type 1 fonts as meaning that the CharStrings are
unencrypted.  This too is an undocumented feature of the Type 1 format.
(gxfont1.h, gxtype1.h, gstype1.c, gstype2.c)

Changes gs_clippath so it returns more reasonable outlines.  (There are too
many programs that rely on being able to stroke the result of clippath, even
though both the Adobe and H-P literature specifically say the results are
unpredictable.)  (gxcpath.h, gxcpath.c)

</pre>

<h2><a name="Version4.37"></a>Version 4.37 (limited) (12/10/96)</h2>

<p>
This version implements separate halftone phase for source and texture,
required for PCL XL implementation.

<h3><a name="V4.37_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- Loading a native TrueType font without a 'post' table caused an
error.  (gs_ttf.ps)

</pre><h3><a name="V4.37_Interpreter"></a>Interpreter</h3><pre>

Extends the interpreter to handle the new separate halftone phases for the
RasterOp source and texture.  (gs_dps1.ps, zdps1.c)

Makes a small change to accommodate a library change supporting Type 2
charstrings.  (zfont1.c)

</pre><h3><a name="V4.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Implements the FontFile2 key for embedded TrueType fonts.  (pdf_font.ps)

Starts to implement the FontFile3 key for compressed Type 1 fonts.  This
code is currently disabled, because none of the necessary underlying C is
written yet.  (pdf_font.ps)

</pre><h3><a name="V4.37_Library"></a>Library</h3><pre>

Fixes bugs:
	- The floating point emulator often returned incorrect results (too
many bugs to list).  (This is not used in any standard configuration.)
(gsfemu.c)
	- The new copy_for procedure for gstates incorrectly declared an
argument as const.  (gxstate.h, gsstate.c)
	- If a curve had to be split twice along the same axis to make it
monotonic, the split points could still be returned in the wrong order,
possibly causing curved edges to turn into straight lines, and the algorithm
still produced the wrong results if the curve had to be split twice along a
single axis.  This is the second time we have "fixed" these problems and the
4th time we have "fixed" the curve monotonizing algorithm.  (gxpcopy.c)
	- Setting halftones cause a memory leak, because the subsidiary
objects of the device halftone weren't freed properly.  Fixing this required
changing the graphics state implementation from allocating a device halftone
for each gstate to managing the device halftone with reference counting.
(gxdht.h, gzstate.h, gsht.c, gsstate.c)

Provides an optimized version of ldexp for FPU-less configurations, and
changes one key algorithm to use it.  (gxfixed.h, gsmisc.c, gxpcopy.c)

Speeds up imagemask with a halftone a little.  (This will eventually require
more serious optimization.)  (gximage2.c)

Adds a -Z* switch for tracing varieties of image rendering.  (gximage.c)

Recognizes that if the logical operation is equivalent to D = S (after
accounting for a constant texture, if any), or if it is equivalent to D = ~S
or D = D {&amp;,|}{S,~S} and D and S are both monobit and both colors are pure,
imaging with RasterOp can be executed without invoking RasterOp.  (gsropt.h,
gximage.c)

Makes coordinate transformations with landscape matrices execute as fast as
with portrait matrices.  (gxmatrix.h, gscoord.c, gsmatrix.c)

Adds some sketch code for interpreting Type 2 charstrings.  It compiles, but
it makes no pretense of being runnable.  (gstype1.h, gxop1.h, gxtype1.h,
gstype2.h, gxfont1.h, gstype1.c, gstype2.c)

Extends the library to allow setting separate halftone phases for the
RasterOp source and texture, which is needed to implement halftone screens
that behave like those in H-P's PCL XL printers.  (gscsel.h, gsstate.h,
gxcmap.h, gxcspace.h, gxdcolor.h, gxdither.h, gxpcolor.h, gzht.h, gzstate.h,
gscie.c, gscsepr.c, gsht.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcolor.c,
gxht.c, gximage.c, gximage[2345].c, gspcmap.c) ****** STILL NEED TO UPDATE
BANDING CODE, grep FOR phase ******

Removes the rc_header member from the gs_halftone structure, since we don't
need it after all.  (gxht.h)

</pre>

<h2><a name="Version4.36"></a>Version 4.36 (limited) (12/3/96)</h2>

<p>
This version fixes a number of library bugs related to RasterOp, Patterns,
and memory management.

<h3><a name="V4.36_Documentation"></a>Documentation</h3><pre>

Changes the definition of texture transparency to match the peculiar H-P
specification.  (drivers.txt, language.txt)

</pre><h3><a name="V4.36_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- x_get_bits didn't flush updates to the frame buffer, leading to
possibly incorrect data being returned.  (gdevx.c)
	- x_get_bits added padding to the scan line being copied, possibly
corrupting memory.  (gdevx.c)

Changes the x11mono driver to define white = 0, black = 1 to more closely
model black-and-white printers.  (This is an internal change that doesn't
affect the output.)  (gdevxalt.c)

</pre><h3><a name="V4.36_Interpreter"></a>Interpreter</h3><pre>

Removes some code that is no longer needed, by virtue of the fix for the
memory leak in Pattern remapping.  (zpcolor.c)

</pre><h3><a name="V4.36_Library"></a>Library</h3><pre>

Fixes bugs:
	- Patterns wider than 1024 bits caused a rangecheck.  (gxclip2.h,
gxclip2.c)
	- Dash patterns never got freed.  The fix for this slows down gsave
and grestore slightly, but we don't see any way around it.  (gsline.c,
gsstate.c)
	- If the CTM was very non-uniform in X and Y, stroke sometimes
didn't recognize thin lines as being thin, leading to dropouts.
(gxstroke.c)
	- RasterOps that didn't use S or T still took S or T transparency
into account.  (gdevmrop.c)
	- RasterOps with no source didn't handle the possibility that the
device color for black might have a value other than 0.  (gxdcolor.h,
gspcolor.c, gxcht.c, gxdcolor.c, gxht.c)
	- White pixels in halftones on black-and-white devices apparently
are *not* supposed to be treated as opaque for RasterOp.  (gxcht.c, gxht.c)
	- clippath caused memory to be lost until a restore or a garbage
collection.  (gspath.c)
	- Clipping lists weren't ever freed, and clipping paths sometimes
weren't freed, causing memory to be lost until a restore or a garbage
collection.  (gzacpath.h, gxacpath.c, gxcpath.c)
	- Freeing a pattern instance referenced a pointer after it had been
freed, causing an invalid memory access.  (gspcolor.c)
	- Remapping a Pattern color lost track of the temporary gstate,
memory devices, and possibly the mask, causing memory to be lost until a
restore or GC.  (gxpcolor.h, gxpcmap.c)
	- Remapping a Pattern color could cause paths to be marked as
shared, preventing them from being freed until a restore or GC.  (gxpcmap.c)

Enhances the non-tracing garbage collector so that if there are no strings
allocated at all, it resets the string allocation pointers.  (gsnogc.c)

Optimizes the black-and-white RasterOp implementation by recognizing cases
that can be implemented directly by fill_rectangle, copy_mono, or
tile_rectangle.  (gdevmrop.h, gsropt.h, gdevmrop.c, gsroptab.c)

Changes -ZA so it no longer produces [P] tracing messages for path
construction.  (gxpath.c)

Adds a gx_pattern_cache_winnow procedure for selectively removing entries
from the Pattern cache, similar to gx_purge_selected_cached_chars.
(gscolor2.h, gxpcolor.h, gxpcmap.c)

Adds the Pattern UID to Pattern cache entries.  (gxpcolor.h, gxpcmap.c)
****** MUST HANDLE XUID POINTERS ON GC (RELOC) &amp; RESTORE (CLEAR LIKE HT
CACHE) ******

Makes gs_gstate free the path representation of the clipping path if it's a
rectangle, since reconstructing it is cheap and otherwise the path segments
would not be freeable until a restore or GC.  (gsstate.c)

Extends the "client data" interface for gstates so that the copy procedure
can determine why it is being called.  (gxstate.h, gsstate.c)

</pre>

<h2><a name="Version4.35"></a>Version 4.35 (limited) (11/24/96)</h2>

<p>
This contains the usual bug fixes, and two minor enhancements: an option for
handling EPSF files with binary headers, and support for file-based
resources.

<h3><a name="V4.35_Documentation"></a>Documentation</h3><pre>

Documents the new EPSF-reading capability.  (gs.mak)

</pre><h3><a name="V4.35_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- Some obsolete definitions were accidentally left in the rules for
compiling fonts into the executable.  (int.mak)

</pre><h3><a name="V4.35_Interpreter"></a>Interpreter</h3><pre>

Fixes bugs:
	- initgraphics left the current color space in an inconsistent
state.  (bug introduced in 4.32) (zgstate.c)
	- restore didn't properly rebind FontDirectory to either Local or
SharedFontDirectory according to the current VM selection.  (gs_dps1.ps)
	- If FontDirectory was redefined, many things broke.  (gs_ccfnt.ps,
gs_dps1.ps, gs_fonts.ps, gs_pdfwr.ps)
	- If a resource provided a file name but the file couldn't be
opened, an error occurred.  (gs_res.ps)
	- flushfile didn't work with procedure-based streams.  (zfileio.c)

Adds a feature (epsf.dev) that allows the interpreter to recognize and
handle MS-DOS EPSF files with a binary header.  (int.mak, gs_epsf.ps,
gs_init.ps, pdf_main.ps)

Adds (internal) .getuserparam and .getsystemparam operators for getting the
value of a single user or system parameter.  (gs_lev2.ps, zusparam.c)

To support file-based resources, implements the FontResourceDir,
GenericResourceDir, and GenericResourcePathSep system parameters, and
ResourceFileName for the built-in resource categories.  (gs_init.ps,
gs_lev2.ps, gs_res.ps)

</pre><h3><a name="V4.35_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The 2-D CCITTFaxDecode filter became confused if a buffer boundary
fell between a horizontal make-up code and its terminating code, typically
causing an ioerror.  (scfd.c)

</pre><h3><a name="V4.35_Library"></a>Library</h3><pre>

Fixes bugs:
	- Using the null color could confuse the reference counts for color
spaces, causing memory access errors.  (gscolor.c)
	- Images with CombineWithColor = true caused memory access error,
because a structure element wasn't initialized.  (gdevmrop.c)
	- gs_setnullcolor tried to return an error code, even though it was
declared as returning void.  (Why doesn't gcc catch this??)  (gscolor.h,
gscolor.c)
	- gs_setnullcolor was declared inconsistently as taking a const or
non-const argument.  (gscolor.h)
	- Small color tiles in the band list were not read in correctly.
(gxclread.c)
	- The band list could get confused, causing ioerrors, invalid memory
accesses, or garbled output, because the algorithms for computing the size
of bitmaps when writing and when reading had gotten inconsistent.  This code
has been broken and "fixed" at least 4 or 5 times.  (gxcldev.h, gxclbits.c,
gxclread.c)
	- When using banding, characters that extended off the page
vertically in the -Y direction came out garbled.  (gxclimag.c)
	- The bounding box device didn't compute the box correctly for
trapezoids.  (gdevbbox.c)
	- The fastest case of rendering monochrome images could cause
unaligned data accesses.  (bug introduced recently.)  (gximage.h,
gximage1.c)
	- TrueType characters with no contours could cause an invalid memory
access.  (gstype42.c)
	- Composite TrueType characters weren't rendered properly.
(gstype42.c)

Adds a get_outline procedure to the Type 42 font header, to provide a
callback for getting the outline data for a glyph.  (gxfont42.h, gstype42.c)

</pre>

<h2><a name="Version4.34"></a>Version 4.34 (limited) (11/18/96)</h2>

<p>
This release adds a little more support for CID-keyed fonts and for PCL
emulation, and a bit more of the machinery for passing images through the
band list.

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

Fixes bugs:
	- The RasterOp source device wasn't listed as an internal device in
drivers.txt.  (drivers.txt)

Corrects a statement regarding the pstotext license.  (new-user.txt)

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

Fixes bugs:
	- The Watcom makefile for the library didn't work properly if
certain variables were overridden from the command line.  (watclib.mak)
	- The library code inadvertently depended on an interpreter header
file.  (*.mak)

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

Fixes bugs:
	- Some very picky compilers complained about assigning 0 to a
variable of an enum type.  (gdevpdfx.h, gdevpdf.c)

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

Fixes bugs:
	- Some very picky compilers didn't like a cast from a pointer type
to an int type.  (idebug.c)
	- Some very picky (and non-ANSI-compliant) compilers didn't allow
assigning an int to a variable of enumerated type.  (zfont2.c, zht2.c)
	- The library code inadvertently depended on an interpreter header
file.  (iref.h)

Restructures the font building code slightly to support CID fonts better.
(gs_cidfn.ps, bfont.h, zcid.c, zfont0.c, zfont1.c, zfont2.c, zfont42.c)

Adds a .setcurrentfile operator to allow disk-based fonts to keep their file
open.  (gs_cidfn.ps, zcontrol.c)

</pre><h3><a name="V4.34_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Some very picky compilers didn't like the computation (const byte
*)0 - 1.  (stream.c)
	- A cast to ulong was omitted.  (smtf.c)
	- Some compilers got confused by typedefs in the zlib header files.
(szlibd.c, szlibe.c)

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

Fixes bugs:
	- A header file didn't select the proper system header on all POSIX
systems.  (malloc_.h)
	- A subclass/superclass type discrepancy upset some compilers.
(gsline.h, gsline.c, gxpdash.c)
	- Some very picky compilers didn't accept the previous definition of
the offset_of macro.  (stdpre.h)
	- Some very picky (and non-ANSI-compliant) compilers didn't like
mixing int and enumerated types.  (gsropt.h, gzstate.h, gdevmrop.c,
gdevrrgb.c, gsrop.c, gxclist.c)
	- A cast was missing.  (gslib.c)
	- The gs_setxxxtransparent procedures interpreted their argument
backwards (i.e., as "opaque" rather than "transparent").  (gsrop.c)
	- Intersecting clipping paths didn't reset the logical operation to
the default, causing a possible crash.  (gsrop.h, gsrop.c, gxacpath.c)
	- Pattern accumulation didn't reset the logical operation to the
default, possibly causing incorrect output.  (gspcolor.c)
	- If a Type 1 character ended with a curve and a closepath, a
microscopic line could result, causing output anomalies.  (gstype1.c)
	- Stroking a path with a mix of thin and non-thin lines could cause
extraneous lines to appear.  (gxstroke.c)
	- Zero-width rectangles were painted even when fill adjustment was
turned off.  (gxpaint.c, gxstroke.c)
	- The algorithm for dividing a curve into monotonic pieces could
produce incorrect results, causing anomalies when filling curved regions
with zero fill adjustment.  (gxpcopy.c)
	- The algorithms for outside clipping were wrong, causing some
inside regions not to be clipped.  (gxcpath.c)
	- The white pixels in halftones weren't treated as unconditionally
opaque for RasterOp.  (gxht.c, gxcht.c)
	- Images with RasterOp didn't work properly.  (gdevmrop.c,
gximage[2345].c, gxpcmap.c)
	- The library code inadvertently depended on an interpreter header
file.  (gxalloc.h, genarch.c)
	- An important optimization for stroking (recognizing portrait,
landscape, and unscaled CTMs) was commented out.  WE DON'T HAVE ANY RECORD
OF WHY WE DID THIS, AND RESTORING IT MAY INTRODUCE NEW BUGS.  (gxstroke.c)
	- Bitmap images with non-zero data_x values were passed through the
band list incorrectly, possibly causing vertical "streaks" in the output.
(gxcldev.h, gxclread.c)
	- If a curve had to be split twice along the same axis to make it
monotonic, the split points were returned in the wrong order, possibly
causing curved edges to turn into straight lines.  (gxpcopy.c)

Changes the debugging printout format for paths so the output can be
processed mechanically more easily.  (gxpath.c)

Adds gs_glyphpath, like charpath but taking a glyph rather than a string of
character codes.  (gschar.h, gschar.c)

Adds an internal concept of a "null color", a color that doesn't actually
mark any pixels.  (gscolor.h, gsdcolor.h, gxdcolor.h, gscolor.c, gxdcolor.c)

Takes the next incremental steps towards passing images through the band
list:
	- Implements the ability to pass some color mapping information
(transfer functions, black generation, undercolor removal) through the band
list.  (gxclist.h, gxclimag.c, gxclist.c, gxclread.c)

</pre>

<h2><a name="Version4.33"></a>Version 4.33 (limited) (11/6/96)</h2>

<p>
This release fixes yet another obscure bug in the recently rewritten fast
loops for image rendering.  (These loops have caused more problems than any
other single module of the entire library.)  It also adds preliminary
support for CID-keyed fonts (CIDFonts only, not CMaps yet) and some library
extensions for supporting HP-GL/2.

<h3><a name="V4.33_Documentation"></a>Documentation</h3><pre>

Adds considerable new material to the C style document.  (c-style.txt)

Changes -cckr to -ansi in the SGI build procedure.  (make.txt)

Corrects an error in the description of the .type42execchar operator.
(gs_typ42.ps)

</pre><h3><a name="V4.33_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- The 'man' pages were installed in the documentation directory as
well as in the man directory.  (unix-end.mak)

</pre><h3><a name="V4.33_Interpreter"></a>Interpreter</h3><pre>

Adds support for CID-keyed fonts.  There is no CMap support yet, and some
things are done with hacks.  (int.mak, gs_cidfn.ps, gs_cmap.ps, ichar.h,
zchar.c, zchar2.c, zchar42.c, zfont2.c, zfont42.c, zcid.c)

Adds operators for accessing the new dash adaptation and dot length
parameters in the graphics state.  (gs_init.ps, zgstate.c)

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

Fixes bugs:
	- The fast case of monobit image rendering could overwrite memory.
(gximage1.c)
	- The new fast implementation of rectfill didn't check for
fixed-point overflow.  (gsdps1.c)
	- Internally, fonts with no name all appeared to have the same name,
possibly confusing the xfont machinery.  (gxccman.c)
	- A cast to remove const was omitted, upsetting some compilers.
(gximage1.c)
	- The driver's stroke_path routine was not called if the logical
operation was not the default one.  (gxpaint.c)

Adds support for CID-keyed fonts.  (gsccode.h, gxfont.h)

Adds a new "dash pattern adaptation" flag in the imager state.  When this
flag is set and a dash pattern is in effect, each line segment will receive
an integral number of repetitions of the dash pattern (if necessary, rounded
up).  (gsline.h, gxline.h, gsline.c, gsstate.c, gxpdash.c)

Adds a new "dot length" parameter to the imager state.  If this parameter is
non-zero, it gives a length for rendering dots (zero-length lines).  See
language.txt for details.  (gsline.h, gxline.h, gsline.c, gsstate.c,
gxstroke.c)

Extends band lists so they can handle dash pattern adaptation and dot
length.  (gxcldev.h, gxclpath.h, gxclpath.c, gxclread.c)

Adds a floating point emulator to allow more realistic profiling of
configurations without a FPU.  (gsfemu.c)

</pre>

<h2><a name="Version4.32"></a>Version 4.32 (limited) (11/1/96)</h2>

<p>
This fixes a couple more bugs, most notably the infamous "pixel stripe" bug.

<h3><a name="V4.32_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- The documentation said that Ghostscript could not interpret
encrypted PDF files.  (language.txt)
	- A number of Ghostscript's extensions to the PostScript language
were missing.  (language.txt)

</pre><h3><a name="V4.32_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A compiler complained about initializing an unsigned variable with
a negative value.  (gdevx.c)
	- An off-by-1 allocation error could cause memory overwriting.
(gdevepsc.c)

</pre><h3><a name="V4.32_Platforms"></a>Platforms</h3><pre>

Declares a pointer 'const' that is actually only used for reading.
(gp_unifs.c)

</pre><h3><a name="V4.32_Fonts"></a>Fonts</h3><pre>

Fixes bugs:
	- The code for adding nominal UnderlinePosition and
UnderlineThickness entries to FontInfo assumed (incorrectly) that all Type 1
fonts had FontBBox entries.  (gs_type1.ps)

Brings CIDFont support closer to reality.  It doesn't work yet, though.
(gs_cidfn.ps, gs_fonts.ps, gs_init.ps, gs_res.ps, gs_typ42.ps)

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

Removes a redundant implementation of initgraphics.  (gs_init.ps)

Speeds up rectfill a little for the common case (4 numbers on the stack).
(zdps1.c)

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

Fixes bugs:
	- Zero-width, 1-bit-deep, landscape or portrait images could
overwrite memory ad lib.  (gximage1.c)
	- A procedure was declared 'static' inconsistently, upsetting many
compilers (but not gcc, which, in contradiction to the ANSI standard,
doesn't check this properly).  (gxcpath.c)
	- A local variable was initialized with a value computed from a
variable that hadn't been set yet, leading to possibly incorrect coloring of
the first run of pixels in images with 12 bits per sample.  (gximage4.c)
	- A compiler complained about initializing an unsigned variable with
a negative value.  (shcgen.c)
	- A rounding problem could produce a vertical stripe of 1 (or on
very large images possibly more) incorrect pixels at the right edge of a
1-bit-deep image.  (gxdda.h, gximage1.c)

Speeds up gs_rectfill substantially for the portrait/landscape case with a
rectangular clipping region.  (gsdps1.c)

Adds a parameter so we can include gx_line_params in subclasses.  (gzline.h)

</pre>

<h2><a name="Version4.31"></a>Version 4.31 (limited) (10/27/96)</h2>

<p>
This is primarily a bug fix release for 4.30, which we had hoped wouldn't be
necessary....

<h3><a name="V4.31_Documentation"></a>Documentation</h3><pre>

Fixes bugs:
	- The comment describing the order of coefficients in a CTM written
on the band list was wrong.  (gxclpath.h)

</pre><h3><a name="V4.31_Procedures"></a>Procedures</h3><pre>

Fixes bugs:
	- bug-form.txt wasn't installed by 'make install'.  (unix-end.mak)
	- The default flags in ugcclib.mak didn't take the gcc code
generation bug into account.  (ugcclib.mak)

</pre><h3><a name="V4.31_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- MetroWerks CodeWarrior predefines true and false, causing
compilation errors on the Mac.  (stdpre.h)

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

Updates code for the change in the ENUM_PTR macros.  (iscan.c)

Changes the allocator to keep track of "lost" ref space separately, to allow
an independent check on its activities.  (gxalloc.h, ialloc.c, isave.c)

Changes the garbage collector API slightly to allow implementation of the
API in applications other than PostScript interpreters.  (ivmspace.h,
ireclaim.c, igc.c)

</pre><h3><a name="V4.31_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Implements the PDF 1.1 BX and EX operators.  (pdf_base.ps, pdf_main.ps)

</pre><h3><a name="V4.31_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Some (harmless) pointer incompatibilities upset some compilers.
(szlibd.c, szlibe.c)

Updates code for the change in the ENUM_PTR macros.  (stream.c)

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

Fixes bugs:
	- A label in the ENUM_PTR procedure generating macros was often not
referenced, leading to compiler warnings.  (gsstruct.h, gxxfont.h,
gdevmem.c, gschar.c, gscolor2.c, gsdevice.c, gsfont0.c, gsht.c, gsstate.c,
gxcpath.c, gximage.c)
	- Using the gstate version of setflat rather than the imager version
caused compiler warnings (and, in some cases, errors).  (gstype1.c)
	- Non-standard ImageMatrix values for banded images didn't work.
(This wasn't actually used.)  (gxclread.c)
	- imagemask with a halftone and portrait orientation colored some
inappropriate pixels.  (bug introduced in 4.30) (gximage2.c)
	- When banding, if a character straddled a band boundary the first
time it occurred, all occurrences of it were clipped.  (bug introduced in
4.2x or 4.30) (gxclimag.c)
	- Degenerate clipping rectangles sometimes got turned into
non-degenerate ones by swapping the min and max coordinates.  (gxcpath.c)
	- Resizing an object either allocated a new object unnecessarily
(performance bug only), or in very rare cases could corrupt memory.
(gsalloc.c)
	- Very small objects didn't get put on a free list when freed.
(Performance bug only.) (gsalloc.c)
	- Some pointers were incorrectly declared 'const', upsetting some
compilers.  (gxclread.c)

Adds more tracing output for -ZL.  (gxclread.c)

Changes the -Za tracing output slightly to aid mechanical analysis of
allocation traces: allocation events now always include a '+', deallocation
events always include a '-', and the address is always the address of the
object data and not the header.  (gsalloc.c, gsmemory.c)

Changes the allocator to keep track of "lost" object and string space
separately, to allow an independent check on its activities.  (gxalloc.h,
gsalloc.c)

Changes the allocator to use 'memmove' in an obvious place.  (gsalloc.c)

Provides a garbage collector API at the library level to allow
implementation of the API in applications other than PostScript
interpreters.  (gsgc.h)

</pre>

<h2><a name="Version4.30"></a>Version 4.30 (limited) (10/23/96)</h2>

<p>
The main purpose of this release is to implement a substantial change in the
"high level" image API, after which we believe this API will be stable.

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

Documents the changes in the begin_image and image_data device procedures.
(drivers.txt)

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

Speeds up the PDF writer a little by reducing the amount of allocation,
which was causing very frequent garbage collections.  (gs_pdfwr.ps,
gdevpdft.c)

Updates the PDF writer for the change in begin_image/image_data.
(gdevpdfi.c)

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

Fixes bugs:
	- Some versions of the SGI IRIX compiler have a bug that causes them
to try to expand macros that require arguments even when the macro name
isn't followed by a left parenthesis.  (gdevsgi.h, gdevsgi.c)
	- The IBM RS6000 compilers now provide &lt;stdlib.h&gt;, so our
definitions of malloc and free caused a conflict.  (malloc_.h)

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

Fixes bugs:
	- Many Fontmaps included obsolete references to an old
Helvetica-Narrow font.  (Fontmap.*)

Makes the GS_FONTPATH directory scanner a little more liberal about what
files it examines: it will now examine any file whose first line begins with
%!PS-Adobe or %!FontType.  (gs_fonts.ps)

To match an apparent Adobe convention, augments findfont so that if a font
isn't in the Fontmap, it will try to load a file whose name is the same as
the font name.  (gs_fonts.ps)

To make some questionable Apple font inquiry code work, augments the
FAKEFONTS facility so that it sets the FontType of fake fonts to 1.
(gs_fonts.ps)

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

Fixes bugs:
	- .checkpassword, .putdeviceparams, .putdevparams, setsystemparams,
and setuserparams didn't free the results byte array, causing a memory leak
(until the next garbage collection).  (zdevice.c, ziodev.c, zusparam.c)

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

Fixes bugs:
	- The code for emulating floating point multiplication with
conversion to fixed point didn't detect overflow correctly, which could
produce incorrect results instead of a limitcheck.  (gsmisc.c)
	- A macro cast a pointer incorrectly, leading to spurious compiler
warnings.  (gxfixed.h)
	- The code for emulating fixed-to-float conversion computed the
exponent incorrectly.  (gsmisc.c)
	- The algorithm for advancing a DDA a given number of steps (not
actually used anywhere before this version) was wrong.  (gxdda.h)
	- The clipping box returned by clipping devices was incorrect,
causing parts of the page to disappear.  (bug introduced in 4.20)
(gxcpath.c)

Changes the begin_image and image_data device procedures:
	- begin_image now takes an optional subrectangle instead of a set of
shape flags.
	- image_data now always takes complete rows of pixels, takes a
source X offset, and returns 1 when it has received all the data.

The change in begin_image and image_data is a NON-BACKWARD-COMPATIBLE CHANGE
IN A PUBLIC INTERFACE; however, this interface was still designated "subject
to change", per the notes for release 3.67 and the documentation in
drivers.txt.  (gsiparam.h, gxclpath.h, gxdda.h, gxdevice.h, gximage.h,
gdevbbox.c, gdevnfwd.c, gsimage.c, gxclimag.c, gxclread.c, gximage.c,
gximage?.c)

</pre>

<hr>

<h2><a name="Version4.21"></a>Version 4.21 (limited) (10/17/96)</h2>

<p>
The purpose of this release is to fix bugs reported in 4.0x, 4.10, and 4.20.

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

Fixes bugs:
	- The Ghostscript man page had a .TH in the middle.  (gs.1)

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

Fixes bugs:
	- The shared version of zlib was always called libgz; on most
systems, it is now called libz (but not on Red Hat Linux, where libz is a
library for dealing with time zones).  (*.mak, gs.mak, libpng.mak, zlib.mak)
	- The pdf2dsc.1 man page wasn't installed on Unix systems.
(unix-end.mak)
	- font2c generated procedures named gsf_xxx, but genconf assumed
they were named gs_f_xxx.  (int.mak)

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

Updates the user-contributed LBP-8II driver to correct unspecified problems.
(gdevlbp8.c)

Adds a user-contributed driver for Avance Logic SuperVGA cards.
(gdevsvga.c, devs.mak)

</pre><h3><a name="V4.21_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- On Windows NT, a 32-bit parameter was truncated to 16 bits,
preventing drawing of scroll bars of the image window when the window is
uncovered.  (dwimg.cpp)

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

Fixes bugs:
	- The free URW Grotesk and Antiqua fonts were omitted from the
distribution.

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

Fixes bugs:
	- Defining a new global instance of a built-in resource
(ColorRendering, ColorSpace, Form, Halftone, Pattern, ProcSet) caused an
invalidaccess error.  (gs_res.ps)
	- pathbbox with no current path left an extra item on the stack when
the error occurred.  (gs_init.ps)
	- findresource for an undefined resource instance didn't preserve
the contents of the stack.  (gs_res.ps)

Adds a new file providing a procedural interface with a very rudimentary
form of job encapsulation.  (gserver.c)

Changes the initial value of MaxOpStack to 20000, for the sake of a few
badly-behaved files.  (gs_init.ps, pdf_base.ps)

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

Fixes bugs:
	- If the image operators failed to allocated their bookkeeping
structure, the result was a crash rather than VMerror.  (gximage.c)
	- gx_default_fill_triangle (currently used only to implement the
fastest case of stroke) had a typo that could cause a numeric exception or
incorrect output, and another typo that could produce incorrect output.
(gdevddrw.c)
	- When banding, if the first occurrence of a character fell partly
off the page, all occurrences of that character on the page could be clipped
or mangled.  (gxclbits.c, gxclimag.c)
	- When testing whether it's worthwhile compressing a bitmap for
banding, the compressor was allowed to generate a lot more output than
needed to make the test.  (gxclbits.c)
	- Certain cases of unrotated gray-scale images dropped the first or
last pixel of each scan line.  (gximage2.c)
	- In rare cases, a run of pixels in a image could get erroneously
displayed in the same color as the previous run, because of a cache
bookkeeping bug.  (gximage3.c)
	- The sample driver for the library had gotten inconsistent with a
header file.  (gslib.c)
	- A declaration was followed by an extraneous semicolon, which upset
some compilers.  (gxht.h)
	- Missing parentheses caused a test for thin lines to be incorrect.
(gxstroke.c)

</pre>

<h2><a name="Version4.20"></a>Version 4.20 (limited) (10/13/96)</h2>

<p>
This release has internal changes for future support of banded image
processing, but no externally visible changes.  Its primary purpose is to
incorporate speedups for clipped images.  It does *not* incorporate fixes
for all problems reported in 4.0x or 4.10.

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

Documents the new get_clipping_box device procedure.  (drivers.txt)

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

Fixes bugs:
	- There were many, many minor inconsistencies between the makefiles
and the source code.  (We finally have an automated tool to detect these.)
(devs.mak, int.mak, lib.mak, unixtail.mak; gsutil.c, zwppm.c)
	- Some makefile rules weren't properly terminated by a blank line.
(lib.mak)

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

Fixes bugs:
	- The comments in gslp.ps had gotten out of date.  (gslp.ps)

Adds --no-eject-file and --no-eject-formfeed switches to gslp.ps, to allow
packing files in multi-column printouts.  (gslp.ps)

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

Adds a user-contributed driver for the Epson LP-8000 laser printer.
(gdevlp8k.c)

Adds a DisplayMode parameter to the vgalib device.  (gdevvglb.c)

Removes the requirement of typing a character at the end of each page using
the vgalib driver.  THIS IS A USER-VISIBLE, NON-BACKWARD-COMPATIBLE CHANGE.
(gdevvglb.c)

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

Updates code to accommodate the new get_clipping_box device procedure.
(zupath.c)

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

Fixes bugs:
	- When a CTM was passed through the band list, it didn't get
translated to match the band coordinate system.  (This had no effect,
because the translation part of the CTM was never used.)  (gxclread.c)

Adds a ',' debugging switch to disable high-level operations when banding.
(gxclpath.c)

Adds an optional get_clipping_box device procedure, so that filling and
stroking can clip more aggressively.  (gdevmem.h, gdevprn.h, gxdevice.h,
gxpaint.h, gxpath.h, gzacpath.h, gdevdflt.c, gdevht.c, gdevnfwd.c,
gxacpath.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c, gxfill.c,
gxstroke.c)

Speeds up clipped filling and stroking, by checking against the device
clipping box.  (gxfill.c, gxstroke.c)

Adds the ability to clip with a rectangle a clipping path being accumulated,
and uses it to do more aggressive clipping when banding.  (gzacpath.h,
gxacpath.c, gxclread.c)

Speeds up clipping of objects lying partly above or below the clipping
region.  (gxcpath.c)

Speeds up clipping vertically-oriented objects (such as 90 degree rotated
images or vertical rectangles) with convex clipping regions, by checking for
vertical rectangles contained in multiple clipping rectangles.  (gxcpath.c)

Speeds up the handling of 90 degree rotated gray-scale images.  (gximage2.c)

Enhances the band list so that it can contain commands for a range of bands,
not just a single band or all bands.  (gxcldev.h, gxclist.h, gxclbits.c,
gxclist.c, gxclread.c)

Adds an operation to the DDA structure, for eventual support of clipped
images.  (gxdda.h)

Factors out some macros useful for generating bit-transformation tables.
(gsbittab.h, gsbittab.c, gsflip.c)

</pre>

<hr>

<h2><a name="Version4.10"></a>Version 4.10 (limited) (9/25/96)</h2>

<p>
This release adds local garbage collection, and a number of performance
improvements for garbage collection in general.  We will support it for one
or two OEMs, but it is not a public release.

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

Moves documentation for all releases before 4.0 to history3.txt.  (NEWS,
history3.txt)

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

Fixes bugs:
	- pdf2dsc.ps didn't have a proper license notice.  (pdf2dsc.ps)

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

Adds a psgray driver, like psmono, to produce 8-bit gray PostScript (level
1) images.  (devs.mak, *.mak, gdevpsim.c)

Changes the psmono driver to allow runs of up to 255 repeated bytes.
(gdevpsim.c)

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

Fixes bugs:
	- setdevice erased the page even if this wasn't necessary.
(zdevice.c)

Speeds up the garbage collector, primarily by speeding up pointer
relocation.  (int.mak, ipacked.h, iref.h, ialloc.c, igc.c, igcref.c)

Actually implements local garbage collection.  (igc.h, ivmspace.h, igc.c,
igcref.c, igcstr.c, ireclaim.c)

Adds some additional error checking for the -Z? switch.  (ilocate.c)

Moves a utility for color mapping from the interpreter to the library.
(icolor.h, zcolor.c)

Adds a MinScreenLevels user parameter.  (zusparam.c)

</pre><h3><a name="V4.10_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>

Adds partial support for the PDF 1.2 gs operator, reverse engineered from a
PDF 1.2 file.  (pdf_draw.ps)

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

Fixes bugs:
	- The test for "thin" stroked lines incorrectly claimed some
non-thin lines were thin.  (gxstroke.c)
	- The computations for halftone cells didn't work for non-square
pixels.  (gxdht.h, gsht.c, gsht1.c, gshtscr.c)

Speeds up the garbage collector a little.  (gsstruct.h, gxalloc.h,
gxfcache.h, gsfont.c)

Replaces references to private statically allocated color spaces with
references to shared dynamically allocated ones, which are guaranteed to be
fully filled-in.  (gscie.c)

Moves a utility for color mapping from the interpreter to the library.
(gxfmap.h, gxcmap.c)

Makes available an imager analogue of setmatrix.  (gscoord.h, gscoord.c)

Adds a parameter to control the minimum number of halftone screen levels.
If a halftone cell has fewer pixels than this number, it will be replicated
(similar to what AccurateScreens does) until the replicated screen has
enough levels.  (gxht.h, gshtscr.c)

</pre>

<hr>

<h2><a name="Version4.03"></a>Version 4.03 (9/23/96)</h2>

<p>
This was an emergency re-release of 4.02 to fix the stdin redirection
problem.  It has essentially no other changes.

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

Fixes bugs:
	- Solaris 2.x has /usr/ucb/install, not installbsd.  (make.txt)

Updates current.txt to mention the ability to share libpng and libgz.
(current.txt)

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

Fixes bugs:
	- A rule assumed that the makefile was named `makefile'.
(unixtail.mak)

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

Fixes bugs:
	- The stcolor drivers had an off-by-1 error that could cause them to
write into unallocated memory.  (gdevstc.c)
	- The Imagen driver wouldn't compile with gcc.  (gdevimgn.c)

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

Fixes bugs:
	- The Solaris fontmap had gotten out of date.  (Fontmap.Sol)

</pre><h3><a name="V4.03_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- The test for stdin being non-seekable could leave the file error
flag set, which caused an infinite loop when trying to read from the file
later.  (sfile.c, sfileno.c)

</pre>

<h2><a name="Version4.02"></a>Version 4.02 (9/19/96)</h2>

<p>
This release fixes a few more bugs, and adds the ability to read encrypted
PDF files and some PDF 1.2 files.

<p>
This release was withdrawn after a few days because the stdin redirection
fix, which was made at the last minute, cause Ghostview to hang.

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

Fixes bugs:
	- The list of required support files was incorrect.  (install.txt)
	- The descriptions of file name lookup weren't accurate.  (use.txt)
	- A J should have been an H.  (gxbitmap.h)

Updates the documentation about encrypted PDF files.  (new-user.txt)

Documents what the 13 base PDF fonts are.  (ps2pdf.txt)

Fixes a tiny typo.  (c-style.txt)

Adds a user-contributed man page for the new pdf2dsc script.  (pdf2dsc.1)

Updates the government restricted rights notice in the Aladdin Ghostscript
Free Public License.  (PUBLIC)

Adds the URL of test files to the bug report form.  (new-user.txt)

Puts the bug reporting form in a separate file.  (readme, bug-form.txt,
new-user.txt)

Notes that map_xxx_color procedures should not return gx_no_color_index.
(drivers.txt)

Notes that Ghostscript supports the Flate filters.  (language.txt)

Documents the use of the system libpng and zlib.  (make.txt, gs.mak)

Notes that Borland C++ 5.0 and 5.01 will not compile Ghostscript correctly.
(make.txt)

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

Fixes bugs:
	- Using both DELAYBIND and SAFER caused problems.  (pstotext uses
DELAYBIND.)  (gs_init.ps)

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

Fixes bugs:
	- Some pdf2ps machinery interfered with the PDF interpreter.
(pdf_2ps.ps, pdf_main.ps)
	- In the output of pdf2ps, page numbers in link destinations were
too high by 1.  (pdf_main.ps)
	- viewpbm didn't handle value ranges other than [0..255] correctly.
(viewpbm.ps)

Adds a user-contributed shell script to invoke pdf2dsc.ps.  (pdf2dsc,
unix-end.mak)

Adds a switch to the genconf utility to set the prefix for generated
procedure names.  (genconf.c)

Adds the option of using system libraries (possibly shared) for libpng
and/or zlib.  (*head.mak, msc*.mak, os2.mak, tccommon.mak, wccommon.mak;
libpng.mak, zlib.mak)

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

Fixes bugs:
	- The X11 display devices ignored the -DA4 compile-time option.
(gdevx.c)
	- The garbage collector could scramble the state of the CGM drivers.
(gxdevice.h, gdevcgm.c)
	- An identifier of more than 31 characters upset the VAX DEC C
compiler.  (gdevcgml.h, gdevcgml.c)
	- In case of an error in trying to set the CoreDistVersion distiller
parameter, a variable could be used without initialization.  (gdevpdfp.c)
	- When DEBUG is selected, the X Windows driver referenced _Xdebug,
which is not defined in (at least the VMS version of) DECWindows.  (x_.h,
gdevxini.c)
	- Some map_cmyk_color implementations could return "transparent".
(gdevbit.c)
	- Setting GraphicsAlphaBits or TextAlphaBits in the P*M drivers
caused an error.  (gdevpbm.c)
	- If a user cancelled printing under MS Windows, a confusing error
resulted, and a temporary file wasn't deleted.  (gdevwpr2.c)
	- The map_color_rgb procedure for the bit devices produced incorrect
results.  (This probably had no effect in practice.)  (gdevbit.c)
	- The os2prn device produced incorrect output.  (gdevos2p.c)
	- The OS/2 PM device didn't detect PM applications correctly.
(gdevpm.c)
	- The MS Windows printer driver didn't automatically detect the
printer's color capabilities.  (gdevwpr2.c)
	- The BJC-610 driver didn't print at 720 dpi.  (gdevcdj.c)
	- The static prototypes of many devices didn't include the far_data
keyword.  (gdev3852.c, gdev4081.c, gdevbgi.c, gdevcgm.c, gdevht.c,
gdevimgn.c, gdevl256.c, gdevmrop.c, gdevn533.c, gdevnfwd.c, gdevnp6.c,
gdevo182.c, gdevpcfb.c, gdevpdf.c, gdevpe.c, gdevpm.c, gdevs3ga.c,
gdevsnfb.c, gdevsppr.c, gdevsun.c, gdevsvga.c, gdevtknk.c, gdevvglb.c,
gdevwddb.c, gdevwprn.c, gdevx.c, gdevxalt.c)
	- The (original) deskjet driver collapsed print lines towards the
left margin.  (gdevdjet.c)

Adds to the pgm/pgnm/ppm/pnm[raw] drivers the ability to set the maximum
pixel value, by setting any of the Gray/Red/Green/BlueValues device
parameters.  (gdevpbm.c)

Adds pkm[raw] drivers, which do all their internal computations in CMYK and
convert the data to RGB as they write the file.  (gdevpbm.c)

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

Fixes bugs:
	- The VMS script referred to old versions of the third-party
libraries.  (vms.mak)
	- Under VMS with DEC C, attempting to open a new file fails.
(gp_vms.c)
	- If you tried to print (gp_printfile) under Windows on a system
with no printers installed, Ghostscript caused a GPF.  (gp_mswin.c)

Restores support for a non-DLL MS Windows platform.  (bcwin32.mak,
dwnodll.cpp)

Adds a new MS Windows DLL call, gsdll_get_bitmap.  (gsdll16.def,
gsdll32.def, dll.txt, gdevwdib.c)

Fixes a variety of other small Windows- and OS/2-related problems, mostly
related to printing.  (gp_mswin.h, dpmainc.c, dwmain.cpp, dwmainc.cpp,
gdevmswn.c, gdevpm.c, gdevwpr2.c, gp_mswin.c)

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

Fixes bugs:
	- The value of /newerror in $error was true at the end of
initialization.  We now reset it after each internal use of stopped if
necessary.  (gs_dps1.ps, gs_fform.ps, gs_fonts.ps, gs_init.ps, gs_pdf.ps,
gs_res.ps, gs_type1.ps)
	- setpagedevice (and finddevice) didn't recognize Default.
(gs_init.ps)
	- When running with -dNODISPLAY, calling gssetresolution would cause
a crash.  (gs_init.ps)
	- A particular combination of save, .forgetsave, and garbage
collection could cause a memory access error in restore.  (isave.c)
	- Some references to systemdict were affected if a user redefined
the name /systemdict.  (gs_cmdl.ps, gs_fonts.ps, gs_kanji.ps, gs_dps1.ps,
gs_init.ps, gs_res.ps, gs_statd.ps, gs_type1.ps)
	- The insideness testing operators caused an invalid memory access.
(drivers.txt, zupath.c)
	- If a readline reached an input buffer boundary between the \r and
\n of a 2-character EOL, an error could occur.  (zfileio.c)
	- setdevparams caused an error.  (gs_lev2.ps)

Changes file names beginning with ./ or ../ so they are recognized as
"absolute" and not subject to the search path.  (gp_dosfs.c, gp_ntfs.c,
gp_os2.c, gp_unifn.c)

Changes the exit code for -h or --help from 0 to 1, so an invoking program
will keep the output around for the user to look at.  (imainarg.c)

Adds the FlateEncode and FlateDecode filters; adds PNG pixel prediction to
the LZW filters.  These additions are required for PDF 1.2 and will be part
of PostScript Level 3.  (int.mak, lib.mak, zfdecode.c, zfilter2.c, zfzlib.c,
zfpngp.c [deleted])

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

Fixes bugs:
	- The copyright notices on some files didn't mention the Aladdin
free license.  (pdf_*.ps)
	- Some references to systemdict were affected if a user redefined
the name /systemdict.  (pdf_font.ps)
	- The value of /newerror in $error was true at the end of
initialization.  We now reset it after each internal use of stopped if
necessary.  (pdf_main.ps)
	- stdin redirection failed for PDF files even if the new stdin was
seekable.  (pdf_main.ps)
	- The Rotate key rotated pages in the wrong direction.
(pdf_main.ps)

Adds a minimal "security socket" to the interpreter.  This does not include
any actual decryption code; such code is available elsewhere (see
new-user.txt).  (int.mak, pdf_base.ps, pdf_main.ps, pdf_sec.ps)

Adds a PDF 1.2 capability:
	- The destination in a Dest array can be a page number as well as a
page object.  (pdf_main.ps)

</pre><h3><a name="V4.02_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- stdin was assumed to be non-seekable.  (sfile.c, sfileno.c)

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

Fixes bugs:
	- Garbage collection could corrupt a pointer in Type 0 fonts.
(gxfont0.h, gsfont0.c)
	- When applying hints to a Type 1 font outline, the last point could
sometimes get moved twice, causing output anomalies.  (gxhint3.c)
	- An #include needed for debugging was missing.  (gxcmap.h)
	- Graphics states included a no-longer-used private color space
object.  (gsstate.c)
	- Images could get clipped randomly in the X direction.  (I don't
understand why this problem hasn't shown up more often, since it's been
there since release 4.00.)  (gximage.c)
	- The arct and arcto operators failed to draw the line to the
starting point of the arc.  (bug introduced in 4.01) (gspath1.c)
	- Prefix subclasses of simple structures caused an invalid memory
access.  (gsstruct.h)
	- The variable fheight was sometimes unused.  (gstype1.c)
	- igcd and imod didn't have prototypes in an appropriate header
file, and were declared extern in several places.  (gsdcolor.h, gsline.h,
gxarith.h, gxdht.h, gsht.c, gshtscr.c, gsimage.c, gsline.c, gstype1.c,
gxclimag.c)
	- When using a non-identity RenderTable in a CIE rendering
dictionary, all colors came out too light.  (gscie.c)
	- When using anti-aliased graphics, stroked lines were rendered too
thin.  (gspaint.c)
	- The default map_cmyk_color implementations could return
"transparent".  (gxcmap.c)
	- The number of bits of alpha requested when rendering anti-aliased
characters could exceed 4.  (gschar.c)
	- Multi-screen halftones could cause errors or infinite looping when
banding.  (This problem predates 4.0; I don't know why it didn't show up
before.)  (gxcldev.h, gxclist.c, gxclread.c)
	- Skewed or rotated gray-scale images, or masks with a halftoned
color, omitted one line of pixels and displaced the image by one pixel.
(gximage2.c)

Adds an implementation of realloc, for systems that don't have one that
works.  I don't know how to determine this automatically, so for the moment,
the code uses our own implementation on Linux (where realloc is known to be
broken, at least in some releases) and nowhere else.  (malloc_.h,
gsmemory.c, gsmisc.c)

Removes the "OLD" algorithms from the Type 1 hinting source code, since they
are no longer executed.  (If necessary, they can be retrieved from an older
version.)  (gxhint3.c)

</pre>

<h2><a name="Version4.01"></a>Version 4.01 (7/10/96)</h2>

<p>
This fixes a few minor bugs discovered since the 4.0 release.

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

Fixes bugs:
	- An installation directory name was wrong.  (make.txt,
unix-lpr.txt)
	- A URL was wrong.  (devices.txt)
	- A reference to use.doc hadn't been updated.  (gs.1)
	- Some references to /usr/local/lib hadn't been updated.  (gs.1)
	- The NEWS file and history* files still referred to *.doc rather
than *.txt.  (NEWS, history*.txt)

Adds a note about compilation on Digital Unix.  (make.txt)

Clarifies that calling gs_exit calls gs_finit automatically.  (imain.h)

Adds a pointer to the PDF encryption patch.  (Ridiculous U.S. export control
laws don't allow including the patch itself in the main fileset.)
(new-user.txt)

Adds a help file for VMS.  (gs-vms.hlp)

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

Fixes bugs:
	- vms.mak had gotten out of sync with the makefiles (again).
(vms.mak)
	- DEVICE{WIDTH,HEIGHT}POINTS didn't override PAPERSIZE.
(gs_init.ps)
	- The Microsoft C makefiles had gotten out of date.  (msc.mak)

The (few) GNU-Licensed drivers were accidentally omitted from the fileset.

Modifies a makefile for greater reusability.  (watclib.mak)

Adds a 'debug' target for making Unix debugging configurations.
(unix-end.mak)

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

Fixes bugs:
	- Some uses of 'run' should be changed to runlibfile.  (bdftops.ps,
impath.ps, markhint.ps, packfile.ps, showchar.ps, waterfal.ps, wftopfa.ps,
wrfont.ps)
	- Some debugging code hadn't been removed.  (gslp.ps)

Adds a new utility, viewcmyk.ps, for viewing 4-bit CMYK data.  (psfiles.txt,
unix-end.mak, viewcmyk.ps)

Improves pdf2dsc by including Title and CreationDate DSC comments (these are
displayed by Ghostview) and reducing the size of typical output files by a
factor of about 3.  (pdf2dsc.ps)

Incorporates major changes (claimed to be improvements) to ps2ascii
contributed by a user.  If you have problems with it, please contact him,
not Aladdin.  (ps2ascii.ps)

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

Fixes bugs:
	- The X value of a bounding box could be computed incorrectly.
(gdevbbox.c)

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

Fixes bugs:
	- The Windows DLL sometimes didn't clean up properly.  (dll.txt,
dpmainc.c, dwdll.cpp, dwmain.cpp, dwmainc.cpp, gsdll.c, gsdll.h)

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

Fixes bugs:
	- Reading from a filter could hang forever, because a buffer was
allocated 1 byte too small.  (zfilter.c)
	- The search path could become garbage under some circumstances.
(imain.c)
	- A dangling reference to a stack-allocated variable could corrupt
memory if a client mixed interpreter calls and direct C calls.  (interp.c)
	- Printing an object to a procedure-based filter could cause an
invalid memory access.  (zfileio.c)

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

Fixes bugs:
	- Setting parameters for an unopened device could cause an access
error or invoke the wrong put_params procedure.  (gsdparam.c)
	- Reading from a filter could hang forever, because a buffer was
allocated 1 byte too small.  (stream.h)
	- If the current device was the nullpage device, doing a [g]save,
selecting a different device, and doing a [g]restore caused an error.
(gsdparam.c)

Adds the ability to append arcs without the initial lineto, for PCL
emulation.  (gspath.h, gspath1.c)

</pre>

<h2><a name="Version4.0"></a>Version 4.0 (6/28/96)</h2>

<p>
This is the first public release since 3.53, with a few more last-minute
patches beyond 3.70.

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

Fixes bugs:
	- Many makefiles still referred to .doc files rather than .txt.
(cfonts.mak, devs.mak, gs.mak, int.mak, libpng.mak, unix-end.mak, watc.mak,
watcwin.mak, wccommon.mak, zlib.mak)
	- Some FONTPATH-related information was out of date.  (use.txt)
	- The installation directory for fonts was incorrect.  (install.txt)
	- The libpng and zlib versions were out of date.  (libpng.mak,
zlib.mak)
	- Some information about GSview was incorrect or incomplete.
(new-user.txt)
	- make.txt said it described installation as well as building.
(make.txt)

Notes that the current release of zlib won't compile and link correctly with
Sun cc.  (make.txt)

Adds a little more detail to the C style document.  (c-style.txt)

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

Fixes bugs:
	- Some documentation files weren't installed.  (unix-end.mak)
	- Some dependencies were incorrect.  (bcwin32.mak)
	- 'make begin' and 'make clean' deleted too many and/or the wrong
files.  (bcwin.mak, bcwin32.mak)
	- libpng.mak didn't work with libpng version 0.89c.  (libpng.mak)
	- -d&lt;var&gt;=&lt;name&gt; was equivalent to -d&lt;var&gt;=/&lt;name&gt;, and there was no
way to set a variable to true, false, or null.  (use.txt, gs_init.ps,
iinit.c, imainarg.c)

Removes the modules.lis file, which is no longer used.

Undoes detecting automatically the need to run tar_cat -- the mechanism
didn't work, and caused confusion.  (unix-end.mak)

Updates the makefiles to libpng version 0.89, but allows them to work with
either 0.88 or 0.89.  (*.mak)

</pre><h3><a name="V4.0_Utilities"></a>Utilities</h3><pre>

Fixes bugs:
	- Showing the details of a protected font caused an error.
(markhint.ps)

</pre><h3><a name="V4.0_Drivers"></a>Drivers</h3><pre>

Fixes bugs:
	- A copyright notice was wrong.  (gs_pdfwr.ps)
	- PDF link annotations could get written with two Dest keys.
(gdevpdfm.c)
	- MakeProcInstance and FreeProcInstance were called on platforms
where it wasn't appropriate.  (gdevwpr2.c, gdevwprn.c, gp_mswin.c)
	- On X servers that return very large values for the "virtual
screen" size in millimeters but correct values for the screen size in
pixels, a rangecheck could occur.  (gdevxini.c)
	- The bounding box device could return garbage if stroke or fill was
ever invoked with an empty path.  (gdevbbox.c)

Replaces the LBP8 driver with a revised one contributed by a user.
(gdevlbp8.c, devs.mak)

</pre><h3><a name="V4.0_Platforms"></a>Platforms</h3><pre>

Fixes bugs:
	- Some Windows menu parameters were incorrect.  (gsdll16.rc,
gsdll32.rc)

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

Fixes bugs:
	- .getdevparams sometimes returned duplicate entries for /Type.
(ziodev2.c)
	- File names weren't parsed or concatenated properly on all
platforms.  (gs_fonts.ps, zfile.c)
	- Filter lookahead caused problems with special files.  (zfproc.c)
	- If a TransformPQR procedure in a CIE color rendering dictionary
didn't pop its 4 array arguments, an error occurred.  (gs_lev2.ps, zcrd.c)

</pre><h3><a name="V4.0_Streams"></a>Streams</h3><pre>

Fixes bugs:
	- Filter lookahead caused problems with special files.  (bug
introduced in 3.70) (stream.h)

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

Fixes bugs:
	- .getdevparams sometimes returned duplicate entries for /Type.
(gxiodev.h, gsiodev.c)

</pre>

<!-- [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>History of Ghostscript versions 5.n</title>
<!-- $Id: History5.htm,v 1.31 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] ================================================== -->

<h1>History of Ghostscript versions 5.n</h1>

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

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

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Version5.99">Version 5.99 (beta) (1999-12-18)</a>
<ul>
<li><a href="#5.99_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.99_Documentation">Documentation</a>,
    <a href="#5.99_Procedures">Procedures</a>,
    <a href="#5.99_Utilities">Utilities</a>,
    <a href="#5.99_Drivers">Drivers</a>,
    <a href="#5.99_Platforms">Platforms</a>,
    <a href="#5.99_Fonts">Fonts</a>,
    <a href="#5.99_PDF_writer">PDF writer</a>,
    <a href="#5.99_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.99_Interpreter">Interpreter</a>,
    <a href="#5.99_Streams">Streams</a>,
    <a href="#5.99_Library">Library</a>
</ul>
<li><a href="#Version5.98">Version 5.98 (beta) (1999-12-01)</a>
<ul>
<li><a href="#5.98_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.98_Documentation">Documentation</a>,
    <a href="#5.98_Procedures">Procedures</a>,
    <a href="#5.98_Utilities">Utilities</a>,
    <a href="#5.98_Drivers">Drivers</a>,
    <a href="#5.98_Fonts">Fonts</a>,
    <a href="#5.98_PDF_writer">PDF writer</a>,
    <a href="#5.98_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.98_Interpreter">Interpreter</a>,
    <a href="#5.98_Streams">Streams</a>,
    <a href="#5.98_Library">Library</a>
</ul>
<li><a href="#Version5.97">Version 5.97 (beta) (11/22/99)</a>
<ul>
<li><a href="#5.97_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.97_Documentation">Documentation</a>,
    <a href="#5.97_Procedures">Procedures</a>,
    <a href="#5.97_Utilities">Utilities</a>,
    <a href="#5.97_Drivers">Drivers</a>,
    <a href="#5.97_Platforms">Platforms</a>,
    <a href="#5.97_PDF_writer">PDF writer</a>,
    <a href="#5.97_Interpreter">Interpreter</a>,
    <a href="#5.97_Library">Library</a>
</ul>
<li><a href="#Version5.96">Version 5.96 (beta) (11/12/99)</a>
<ul>
<li><a href="#5.96_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.96_Documentation">Documentation</a>,
    <a href="#5.96_Procedures">Procedures</a>,
    <a href="#5.96_Utilities">Utilities</a>,
    <a href="#5.96_Drivers">Drivers</a>,
    <a href="#5.96_Platforms">Platforms</a>,
    <a href="#5.96_PDF_writer">PDF writer</a>,
    <a href="#5.96_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.96_Interpreter">Interpreter</a>,
    <a href="#5.96_Streams">Streams</a>,
    <a href="#5.96_Library">Library</a>
</ul>
<li><a href="#Version5.95">Version 5.95 (beta) (11/1/99)</a>
<ul>
<li><a href="#5.95_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.95_Documentation">Documentation</a>,
    <a href="#5.95_Procedures">Procedures</a>,
    <a href="#5.95_Utilities">Utilities</a>,
    <a href="#5.95_Drivers">Drivers</a>,
    <a href="#5.95_Platforms">Platforms</a>,
    <a href="#5.95_Fonts">Fonts</a>,
    <a href="#5.95_PDF_writer">PDF writer</a>,
    <a href="#5.95_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.95_Interpreter">Interpreter</a>,
    <a href="#5.95_Library">Library</a>
</ul>
<li><a href="#Version5.94">Version 5.94 (beta) (9/30/99)</a>
<ul>
<li><a href="#5.94_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.94_Documentation">Documentation</a>,
    <a href="#5.94_Procedures">Procedures</a>,
    <a href="#5.94_Utilities">Utilities</a>,
    <a href="#5.94_Drivers">Drivers</a>,
    <a href="#5.94_Platforms">Platforms</a>,
    <a href="#5.94_Fonts">Fonts</a>,
    <a href="#5.94_PDF_writer">PDF writer</a>,
    <a href="#5.94_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.94_Interpreter">Interpreter</a>,
    <a href="#5.94_Streams">Streams</a>,
    <a href="#5.94_Library">Library</a>
</ul>
<li><a href="#Version5.93">Version 5.93 (beta) (9/11/99)</a>
<ul>
<li><a href="#5.93_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.93_Documentation">Documentation</a>,
    <a href="#5.93_Procedures">Procedures</a>,
    <a href="#5.93_Utilities">Utilities</a>,
    <a href="#5.93_Drivers">Drivers</a>,
    <a href="#5.93_Platforms">Platforms</a>,
    <a href="#5.93_PDF_writer">PDF writer</a>,
    <a href="#5.93_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.93_Interpreter">Interpreter</a>,
    <a href="#5.93_Streams">Streams</a>,
    <a href="#5.93_Library">Library</a>
</ul>
<li><a href="#Version5.92">Version 5.92 (beta) (9/2/99)</a>
<ul>
<li><a href="#5.92_Documentation">Documentation</a>,
    <a href="#5.92_Procedures">Procedures</a>,
    <a href="#5.92_Utilities">Utilities</a>,
    <a href="#5.92_Drivers">Drivers</a>,
    <a href="#5.92_PDF_writer">PDF writer</a>,
    <a href="#5.92_Interpreter">Interpreter</a>,
    <a href="#5.92_Streams">Streams</a>
</ul>
<li><a href="#Version5.91">Version 5.91 (beta) (8/30/99)</a>
<ul>
<li><a href="#5.91_Documentation">Documentation</a>,
    <a href="#5.91_Utilities">Utilities</a>,
    <a href="#5.91_Drivers">Drivers</a>,
    <a href="#5.91_Platforms">Platforms</a>,
    <a href="#5.91_Fonts">Fonts</a>,
    <a href="#5.91_PDF_writer">PDF writer</a>,
    <a href="#5.91_Library">Library</a>
</ul>
<li><a href="#Version5.90">Version 5.90 (beta) (8/20/99)</a>
<ul>
<li><a href="#5.90_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.90_Documentation">Documentation</a>,
    <a href="#5.90_Procedures">Procedures</a>,
    <a href="#5.90_Utilities">Utilities</a>,
    <a href="#5.90_Drivers">Drivers</a>,
    <a href="#5.90_Platforms">Platforms</a>,
    <a href="#5.90_Fonts">Fonts</a>,
    <a href="#5.90_PDF_writer">PDF writer</a>,
    <a href="#5.90_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.90_Interpreter">Interpreter</a>,
    <a href="#5.90_Streams">Streams</a>,
    <a href="#5.90_Library">Library</a>
</ul>
<li>(Version 5.89 deliberately omitted.)
<li><a href="#Version5.88">Version 5.88 (tester) (8/3/99)</a>
<ul>
<li><a href="#5.88_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.88_Documentation">Documentation</a>,
    <a href="#5.88_Procedures">Procedures</a>,
    <a href="#5.88_Drivers">Drivers</a>,
    <a href="#5.88_Platforms">Platforms</a>,
    <a href="#5.88_Fonts">Fonts</a>,
    <a href="#5.88_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.88_Interpreter">Interpreter</a>,
    <a href="#5.88_Streams">Streams</a>,
    <a href="#5.88_Library">Library</a>
</ul>
<li><a href="#Version5.87">Version 5.87 (tester) (6/29/99)</a>
<ul>
<li><a href="#5.87_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.87_Documentation">Documentation</a>,
    <a href="#5.87_Procedures">Procedures</a>,
    <a href="#5.87_Drivers">Drivers</a>,
    <a href="#5.87_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.87_Interpreter">Interpreter</a>,
    <a href="#5.87_Library">Library</a>
</ul>
<li><a href="#Version5.86">Version 5.86 (tester) (6/14/99)</a>
<ul>
<li><a href="#5.86_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.86_Documentation">Documentation</a>,
    <a href="#5.86_Procedures">Procedures</a>,
    <a href="#5.86_Utilities">Utilities</a>,
    <a href="#5.86_Drivers">Drivers</a>,
    <a href="#5.86_Platforms">Platforms</a>,
    <a href="#5.86_Fonts">Fonts</a>,
    <a href="#5.86_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.86_Interpreter">Interpreter</a>,
    <a href="#5.86_Streams">Streams</a>,
    <a href="#5.86_Library">Library</a>
</ul>
<li><a href="#Version5.85">Version 5.85 (tester) (5/29/99)</a>
<ul>
<li><a href="#5.85_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.85_Documentation">Documentation</a>,
    <a href="#5.85_Procedures">Procedures</a>,
    <a href="#5.85_Utilities">Utilities</a>,
    <a href="#5.85_Drivers">Drivers</a>,
    <a href="#5.85_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.85_Interpreter">Interpreter</a>,
    <a href="#5.85_Library">Library</a>
</ul>
<li><a href="#Version5.84">Version 5.84 (tester) (5/19/99)</a>
<ul>
<li><a href="#5.84_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.84_Procedures">Procedures</a>,
    <a href="#5.84_Utilities">Utilities</a>,
    <a href="#5.84_Drivers">Drivers</a>,
    <a href="#5.84_Platforms">Platforms</a>,
    <a href="#5.84_Interpreter">Interpreter</a>,
    <a href="#5.84_Streams">Streams</a>,
    <a href="#5.84_Library">Library</a>
</ul>
<li><a href="#Version5.83">Version 5.83 (tester) (5/13/99)</a>
<ul>
<li><a href="#5.83_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.83_Documentation">Documentation</a>,
    <a href="#5.83_Procedures">Procedures</a>,
    <a href="#5.83_Utilities">Utilities</a>,
    <a href="#5.83_Interpreter">Interpreter</a>,
    <a href="#5.83_Library">Library</a>
</ul>
<li><a href="#Version5.82">Version 5.82 (tester) (4/24/99)</a>
<ul>
<li><a href="#5.82_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.82_Documentation">Documentation</a>,
    <a href="#5.82_Procedures">Procedures</a>,
    <a href="#5.82_Utilities">Utilities</a>,
    <a href="#5.82_Drivers">Drivers</a>,
    <a href="#5.82_Platforms">Platforms</a>,
    <a href="#5.82_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.82_Interpreter">Interpreter</a>,
    <a href="#5.82_Library">Library</a>
</ul>
<li><a href="#Version5.81">Version 5.81 (tester) (4/14/99)</a>
<ul>
<li><a href="#5.81_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.81_Procedures">Procedures</a>,
    <a href="#5.81_Utilities">Utilities</a>,
    <a href="#5.81_Drivers">Drivers</a>,
    <a href="#5.81_Fonts">Fonts</a>,
    <a href="#5.81_Platforms">Platforms</a>,
    <a href="#5.81_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.81_Interpreter">Interpreter</a>,
    <a href="#5.81_Library">Library</a>
</ul>
<li><a href="#Version5.80">Version 5.80 (tester) (4/6/99)</a>
<ul>
<li><a href="#5.80_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.80_Procedures">Procedures</a>,
    <a href="#5.80_Utilities">Utilities</a>,
    <a href="#5.80_Drivers">Drivers</a>,
    <a href="#5.80_Fonts">Fonts</a>,
    <a href="#5.80_Platforms">Platforms</a>,
    <a href="#5.80_Interpreter">Interpreter</a>,
    <a href="#5.80_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.80_Streams">Streams</a>,
    <a href="#5.80_Library">Library</a>
</ul>
<li>(Versions 5.74 - 5.79 deliberately omitted.)
<li><a href="#Version5.73">Version 5.73 (tester) (3/19/99)</a>
<ul>
<li><a href="#5.73_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.73_Documentation">Documentation</a>,
    <a href="#5.73_Procedures">Procedures</a>,
    <a href="#5.73_Drivers">Drivers</a>,
    <a href="#5.73_Interpreter">Interpreter</a>,
    <a href="#5.73_Library">Library</a>
</ul>
<li><a href="#Version5.72">Version 5.72 (tester) (3/17/99)</a>
<ul>
<li><a href="#5.72_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.72_Documentation">Documentation</a>,
    <a href="#5.72_Procedures">Procedures</a>,
    <a href="#5.72_Utilities">Utilities</a>,
    <a href="#5.72_Drivers">Drivers</a>,
    <a href="#5.72_Fonts">Fonts</a>,
    <a href="#5.72_Interpreter">Interpreter</a>,
    <a href="#5.72_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.72_Streams">Streams</a>,
    <a href="#5.72_Library">Library</a>
</ul>
<li><a href="#Version5.71">Version 5.71 (tester) (3/3/99)</a>
<ul>
<li><a href="#5.71_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.71_Documentation">Documentation</a>,
    <a href="#5.71_Procedures">Procedures</a>,
    <a href="#5.71_Utilities">Utilities</a>,
    <a href="#5.71_Drivers">Drivers</a>,
    <a href="#5.71_Fonts">Fonts</a>,
    <a href="#5.71_Interpreter">Interpreter</a>,
    <a href="#5.71_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.71_Streams">Streams</a>,
    <a href="#5.71_Library">Library</a>
</ul>
<li><a href="#Version5.70">Version 5.70 (internal) (2/20/99)</a>
<ul>
<li><a href="#5.70_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.70_Documentation">Documentation</a>,
    <a href="#5.70_Procedures">Procedures</a>,
    <a href="#5.70_Utilities">Utilities</a>,
    <a href="#5.70_Drivers">Drivers</a>,
    <a href="#5.70_Fonts">Fonts</a>,
    <a href="#5.70_Interpreter">Interpreter</a>,
    <a href="#5.70_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.70_Streams">Streams</a>,
    <a href="#5.70_Library">Library</a>
</ul>
<li><a href="#Version5.69">Version 5.69 (internal) (2/4/99)</a>
<ul>
<li><a href="#5.69_Procedures">Procedures</a>,
    <a href="#5.69_Utilities">Utilities</a>,
    <a href="#5.69_Drivers">Drivers</a>,
    <a href="#5.69_Interpreter">Interpreter</a>,
    <a href="#5.69_Streams">Streams</a>,
    <a href="#5.69_Library">Library</a>
</ul>
<li><a href="#Version5.68">Version 5.68 (internal) (1/29/99)</a>
<ul>
<li><a href="#5.68_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.68_Documentation">Documentation</a>,
    <a href="#5.68_Procedures">Procedures</a>,
    <a href="#5.68_Utilities">Utilities</a>,
    <a href="#5.68_Drivers">Drivers</a>,
    <a href="#5.68_Fonts">Fonts</a>,
    <a href="#5.68_Platforms">Platforms</a>,
    <a href="#5.68_Interpreter">Interpreter</a>,
    <a href="#5.68_Streams">Streams</a>,
    <a href="#5.68_Library">Library</a>
</ul>
<li><a href="#Version5.67">Version 5.67 (internal) (1/8/99)</a>
<ul>
<li><a href="#5.67_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.67_Documentation">Documentation</a>,
    <a href="#5.67_Procedures">Procedures</a>,
    <a href="#5.67_Utilities">Utilities</a>,
    <a href="#5.67_Drivers">Drivers</a>,
    <a href="#5.67_Fonts">Fonts</a>,
    <a href="#5.67_Interpreter">Interpreter</a>,
    <a href="#5.67_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.67_Streams">Streams</a>,
    <a href="#5.67_Library">Library</a>
</ul>
<li><a href="#Version5.66">Version 5.66 (internal) (11/25/98)</a>
<ul>
<li><a href="#5.66_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.66_Documentation">Documentation</a>,
    <a href="#5.66_Procedures">Procedures</a>,
    <a href="#5.66_Utilities">Utilities</a>,
    <a href="#5.66_Drivers">Drivers</a>,
    <a href="#5.66_Platforms">Platforms</a>,
    <a href="#5.66_Interpreter">Interpreter</a>,
    <a href="#5.66_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.66_Streams">Streams</a>,
    <a href="#5.66_Library">Library</a>
</ul>
<li><a href="#Version5.65">Version 5.65 (internal) (11/13/98)</a>
<ul>
<li><a href="#5.65_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.65_Documentation">Documentation</a>,
    <a href="#5.65_Procedures">Procedures</a>,
    <a href="#5.65_Utilities">Utilities</a>,
    <a href="#5.65_Drivers">Drivers</a>,
    <a href="#5.65_Platforms">Platforms</a>,
    <a href="#5.65_Interpreter">Interpreter</a>,
    <a href="#5.65_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.65_Library">Library</a>
</ul>
<li><a href="#Version5.64">Version 5.64 (internal) (11/5/98)</a>
<ul>
<li><a href="#5.64_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.64_Documentation">Documentation</a>,
    <a href="#5.64_Procedures">Procedures</a>,
    <a href="#5.64_Drivers">Drivers</a>,
    <a href="#5.64_Library">Library</a>
</ul>
<li><a href="#Version5.63">Version 5.63 (internal) (11/4/98)</a>
<ul>
<li><a href="#5.63_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.63_Documentation">Documentation</a>,
    <a href="#5.63_Procedures">Procedures</a>,
    <a href="#5.63_Drivers">Drivers</a>,
    <a href="#5.63_Interpreter">Interpreter</a>,
    <a href="#5.63_Library">Library</a>
</ul>
<li><a href="#Version5.62">Version 5.62 (internal) (10/31/98)</a>
<ul>
<li><a href="#5.62_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.62_Documentation">Documentation</a>,
    <a href="#5.62_Drivers">Drivers</a>,
    <a href="#5.62_Interpreter">Interpreter</a>,
    <a href="#5.62_Library">Library</a>
</ul>
<li><a href="#Version5.61">Version 5.61 (internal) (10/28/98)</a>
<ul>
<li><a href="#5.61_Documentation">Documentation</a>,
    <a href="#5.61_Procedures">Procedures</a>,
    <a href="#5.61_Utilities">Utilities</a>,
    <a href="#5.61_Drivers">Drivers</a>,
    <a href="#5.61_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.61_Streams">Streams</a>,
    <a href="#5.61_Library">Library</a>
</ul>
<li><a href="#Version5.60">Version 5.60 (internal) (10/18/98)</a>
<ul>
<li><a href="#5.60_Incompatible_changes">Incompatible changes</a>,
    <a href="#5.60_Documentation">Documentation</a>,
    <a href="#5.60_Procedures">Procedures</a>,
    <a href="#5.60_Utilities">Utilities</a>,
    <a href="#5.60_Drivers">Drivers</a>,
    <a href="#5.60_Platforms">Platforms</a>,
    <a href="#5.60_Interpreter">Interpreter</a>,
    <a href="#5.60_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.60_Streams">Streams</a>,
    <a href="#5.60_Library">Library</a>
</ul>
<li>(Versions 5.51 - 5.59 deliberately omitted.)
<li><a href="#Version5.50">Version 5.50 (9/16/98)</a>
<ul>
<li><a href="#5.50_Documentation">Documentation</a>,
    <a href="#5.50_Procedures">Procedures</a>,
    <a href="#5.50_Utilities">Utilities</a>,
    <a href="#5.50_Drivers">Drivers</a>,
    <a href="#5.50_Platforms">Platforms</a>,
    <a href="#5.50_Interpreter">Interpreter</a>,
    <a href="#5.50_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.50_Library">Library</a>
</ul>
<li><a href="#Version5.40">Version 5.40 (beta) (9/10/98)</a>
<ul>
<li><a href="#5.40_Documentation">Documentation</a>,
    <a href="#5.40_Procedures">Procedures</a>,
    <a href="#5.40_Utilities">Utilities</a>,
    <a href="#5.40_Drivers">Drivers</a>,
    <a href="#5.40_Platforms">Platforms</a>,
    <a href="#5.40_Library">Library</a>
</ul>
<li><a href="#Version5.39">Version 5.39 (beta) (9/8/98)</a>
<ul>
<li><a href="#5.39_Drivers">Drivers</a>,
    <a href="#5.39_Library">Library</a>
</ul>
<li><a href="#Version5.38">Version 5.38 (beta) (9/3/98)</a>
<ul>
<li><a href="#5.38_Documentation">Documentation</a>,
    <a href="#5.38_Drivers">Drivers</a>,
    <a href="#5.38_Interpreter">Interpreter</a>,
    <a href="#5.38_Library">Library</a>
</ul>
<li><a href="#Version5.37">Version 5.37 (beta) (8/31/98)</a>
<ul>
<li><a href="#5.37_Documentation">Documentation</a>,
    <a href="#5.37_Procedures">Procedures</a>,
    <a href="#5.37_Utilities">Utilities</a>,
    <a href="#5.37_Drivers">Drivers</a>,
    <a href="#5.37_Fonts">Fonts</a>,
    <a href="#5.37_Interpreter">Interpreter</a>,
    <a href="#5.37_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.37_Streams">Streams</a>,
    <a href="#5.37_Library">Library</a>
</ul>
<li><a href="#Version5.36">Version 5.36 (beta) (8/25/98)</a>
<ul>
<li><a href="#5.36_Documentation">Documentation</a>,
    <a href="#5.36_Utilities">Utilities</a>,
    <a href="#5.36_Drivers">Drivers</a>,
    <a href="#5.36_Platforms">Platforms</a>,
    <a href="#5.36_Fonts">Fonts</a>,
    <a href="#5.36_Interpreter">Interpreter</a>,
    <a href="#5.36_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.36_Streams">Streams</a>,
    <a href="#5.36_Library">Library</a>
</ul>
<li><a href="#Version5.35">Version 5.35 (beta) (8/18/98)</a>
<ul>
<li><a href="#5.35_Documentation">Documentation</a>,
    <a href="#5.35_Drivers">Drivers</a>,
    <a href="#5.35_Fonts">Fonts</a>,
    <a href="#5.35_Interpreter">Interpreter</a>,
    <a href="#5.35_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#5.35_Library">Library</a>
</ul>
<li><a href="#Version5.34">Version 5.34 (beta) (8/16/98)</a>
<ul>
<li><a href="#V5.34_Documentation">Documentation</a>,
    <a href="#V5.34_Procedures">Procedures</a>,
    <a href="#V5.34_Drivers">Drivers</a>,
    <a href="#V5.34_Interpreter">Interpreter</a>,
    <a href="#V5.34_Library">Library</a>
</ul>
<li><a href="#Version5.33">Version 5.33 (beta) (8/14/98)</a>
<ul>
<li><a href="#V5.33_Platforms">Platforms</a>,
    <a href="#V5.33_Fonts">Fonts</a>,
    <a href="#V5.33_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.33_Library">Library</a>
</ul>
<li><a href="#Version5.32">Version 5.32 (beta) (8/13/98)</a>
<ul>
<li><a href="#V5.32_Procedures">Procedures</a>,
    <a href="#V5.32_Interpreter">Interpreter</a>,
    <a href="#V5.32_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.32_Library">Library</a>
</ul>
<li><a href="#Version5.31">Version 5.31 (limited) (8/11/98)</a>
<ul>
<li><a href="#V5.31_Drivers">Drivers</a>,
    <a href="#V5.31_Interpreter">Interpreter</a>,
    <a href="#V5.31_Library">Library</a>
</ul>
<li><a href="#Version5.30">Version 5.30 (limited) (8/10/98)</a>
<ul>
<li><a href="#V5.30_Documentation">Documentation</a>,
    <a href="#V5.30_Procedures">Procedures</a>,
    <a href="#V5.30_Drivers">Drivers</a>,
    <a href="#V5.30_Platforms">Platforms</a>,
    <a href="#V5.30_Fonts">Fonts</a>,
    <a href="#V5.30_Interpreter">Interpreter</a>,
    <a href="#V5.30_Streams">Streams</a>,
    <a href="#V5.30_Library">Library</a>
</ul>
<li><a href="#Version5.28">Version 5.28 (limited) (8/3/98)</a>
<ul>
<li><a href="#V5.28_Documentation">Documentation</a>,
    <a href="#V5.28_Procedures">Procedures</a>,
    <a href="#V5.28_Utilities">Utilities</a>,
    <a href="#V5.28_Drivers">Drivers</a>,
    <a href="#V5.28_Platforms">Platforms</a>,
    <a href="#V5.28_Interpreter">Interpreter</a>,
    <a href="#V5.28_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.28_Streams">Streams</a>,
    <a href="#V5.28_Library">Library</a>
</ul>
<li><a href="#Version5.27">Version 5.27 (limited) (7/18/98)</a>
<ul>
<li><a href="#V5.27_Documentation">Documentation</a>,
    <a href="#V5.27_Procedures">Procedures</a>,
    <a href="#V5.27_Drivers">Drivers</a>,
    <a href="#V5.27_Platforms">Platforms</a>,
    <a href="#V5.27_Interpreter">Interpreter</a>,
    <a href="#V5.27_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.27_Library">Library</a>
</ul>
<li><a href="#Version5.26">Version 5.26 (limited) (7/7/98)</a>
<ul>
<li><a href="#V5.26_Procedures">Procedures</a>,
    <a href="#V5.26_Drivers">Drivers</a>,
    <a href="#V5.26_Fonts">Fonts</a>,
    <a href="#V5.26_Interpreter">Interpreter</a>,
    <a href="#V5.26_Library">Library</a>
</ul>
<li><a href="#Version5.25">Version 5.25 (limited) (7/1/98)</a>
<ul>
<li><a href="#V5.25_Documentation">Documentation</a>,
    <a href="#V5.25_Procedures">Procedures</a>,
    <a href="#V5.25_Platforms">Platforms</a>,
    <a href="#V5.25_Fonts">Fonts</a>,
    <a href="#V5.25_Interpreter">Interpreter</a>,
    <a href="#V5.25_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.25_Drivers">Drivers</a>,
    <a href="#V5.25_Library">Library</a>
</ul>
<li><a href="#Version5.24">Version 5.24 (limited) (6/17/98)</a>
<ul>
<li><a href="#V5.24_Documentation">Documentation</a>,
    <a href="#V5.24_Procedures">Procedures</a>,
    <a href="#V5.24_Utilities">Utilities</a>,
    <a href="#V5.24_Drivers">Drivers</a>,
    <a href="#V5.24_Platforms">Platforms</a>,
    <a href="#V5.24_Fonts">Fonts</a>,
    <a href="#V5.24_Interpreter">Interpreter</a>,
    <a href="#V5.24_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.24_Streams">Streams</a>,
    <a href="#V5.24_Library">Library</a>
</ul>
<li><a href="#Version5.23">Version 5.23 (limited) (5/14/98)</a>
<ul>
<li><a href="#V5.23_Documentation">Documentation</a>,
    <a href="#V5.23_Procedures">Procedures</a>,
    <a href="#V5.23_Utilities">Utilities</a>,
    <a href="#V5.23_Drivers">Drivers</a>,
    <a href="#V5.23_Platforms">Platforms</a>,
    <a href="#V5.23_Fonts">Fonts</a>,
    <a href="#V5.23_Interpreter">Interpreter</a>,
    <a href="#V5.23_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.23_Streams">Streams</a>,
    <a href="#V5.23_Library">Library</a>
</ul>
<li><a href="#Version5.22">Version 5.22 (limited) (2/19/98)</a>
<ul>
<li><a href="#V5.22_Documentation">Documentation</a>,
    <a href="#V5.22_Procedures">Procedures</a>,
    <a href="#V5.22_Utilities">Utilities</a>,
    <a href="#V5.22_Drivers">Drivers</a>,
    <a href="#V5.22_Interpreter">Interpreter</a>,
    <a href="#V5.22_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.22_Streams">Streams</a>,
    <a href="#V5.22_Library">Library</a>
</ul>
<li><a href="#Version5.21">Version 5.21 (limited) (1/19/98)</a>
<ul>
<li><a href="#V5.21_Documentation">Documentation</a>,
    <a href="#V5.21_Procedures">Procedures</a>,
    <a href="#V5.21_Drivers">Drivers</a>,
    <a href="#V5.21_Fonts">Fonts</a>,
    <a href="#V5.21_Interpreter">Interpreter</a>,
    <a href="#V5.21_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.21_Library">Library</a>
</ul>
<li><a href="#Version5.20">Version 5.20 (limited) (1/8/98)</a>
<ul>
<li><a href="#V5.20_Documentation">Documentation</a>,
    <a href="#V5.20_Procedures">Procedures</a>,
    <a href="#V5.20_Utilities">Utilities</a>,
    <a href="#V5.20_Drivers">Drivers</a>,
    <a href="#V5.20_Platforms">Platforms</a>,
    <a href="#V5.20_Fonts">Fonts</a>,
    <a href="#V5.20_Interpreter">Interpreter</a>,
    <a href="#V5.20_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.20_Streams">Streams</a>,
    <a href="#V5.20_Library">Library</a>
</ul>
<li><a href="#Version5.10">Version 5.10 (11/23/97)</a>
<ul>
<li><a href="#V5.10_Documentation">Documentation</a>,
    <a href="#V5.10_Procedures">Procedures</a>,
    <a href="#V5.10_Utilities">Utilities</a>,
    <a href="#V5.10_Drivers">Drivers</a>,
    <a href="#V5.10_Interpreter">Interpreter</a>,
    <a href="#V5.10_Library">Library</a>
</ul>
<li><a href="#Version5.07">Version 5.07 (limited) (10/31/97)</a>
<ul>
<li><a href="#V5.07_Documentation">Documentation</a>,
    <a href="#V5.07_Drivers">Drivers</a>,
    <a href="#V5.07_Library">Library</a>
</ul>
<li><a href="#Version5.06">Version 5.06 (limited) (10/7/97)</a>
<ul>
<li><a href="#V5.06_Documentation">Documentation</a>,
    <a href="#V5.06_Procedures">Procedures</a>,
    <a href="#V5.06_Utilities">Utilities</a>,
    <a href="#V5.06_Drivers">Drivers</a>,
    <a href="#V5.06_Interpreter">Interpreter</a>,
    <a href="#V5.06_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.06_Library">Library</a>
</ul>
<li><a href="#Version5.05">Version 5.05 (limited) (9/24/97)</a>
<ul>
<li><a href="#V5.05_Platforms">Platforms</a>,
    <a href="#V5.05_Drivers">Drivers</a>,
    <a href="#V5.05_Interpreter">Interpreter</a>,
    <a href="#V5.05_Interpreter_PDF">Interpreter (PDF)</a>
</ul>
<li><a href="#Version5.04">Version 5.04 (limited) (9/21/97)</a>
<ul>
<li><a href="#V5.04_Documentation">Documentation</a>,
    <a href="#V5.04_Procedures">Procedures</a>,
    <a href="#V5.04_Utilities">Utilities</a>,
    <a href="#V5.04_Drivers">Drivers</a>,
    <a href="#V5.04_Interpreter">Interpreter</a>,
    <a href="#V5.04_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.04_Library">Library</a>
</ul>
<li><a href="#Version5.03">Version 5.03 (8/8/97)</a>
<ul>
<li><a href="#V5.03_Documentation">Documentation</a>,
    <a href="#V5.03_Procedures">Procedures</a>,
    <a href="#V5.03_Drivers">Drivers</a>,
    <a href="#V5.03_Platforms">Platforms</a>,
    <a href="#V5.03_Fonts">Fonts</a>,
    <a href="#V5.03_Interpreter">Interpreter</a>,
    <a href="#V5.03_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.03_Library">Library</a>
</ul>
<li><a href="#Version5.02">Version 5.02 (7/28/97)</a>
<ul>
<li><a href="#V5.02_Documentation">Documentation</a>,
    <a href="#V5.02_Procedures">Procedures</a>,
    <a href="#V5.02_Utilities">Utilities</a>,
    <a href="#V5.02_Drivers">Drivers</a>,
    <a href="#V5.02_Platforms">Platforms</a>,
    <a href="#V5.02_Fonts">Fonts</a>,
    <a href="#V5.02_Interpreter">Interpreter</a>,
    <a href="#V5.02_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.02_Library">Library</a>
</ul>
<li><a href="#Version5.01">Version 5.01 (6/22/97)</a>
<ul>
<li><a href="#V5.01_Documentation">Documentation</a>,
    <a href="#V5.01_Procedures">Procedures</a>,
    <a href="#V5.01_Utilities">Utilities</a>,
    <a href="#V5.01_Drivers">Drivers</a>,
    <a href="#V5.01_Platforms">Platforms</a>,
    <a href="#V5.01_Interpreter">Interpreter</a>,
    <a href="#V5.01_Interpreter_PDF">Interpreter (PDF)</a>,
    <a href="#V5.01_Library">Library</a>
</ul>
<li><a href="#Version5.0">Version 5.0 (6/6/97)</a>
<ul>
<li><a href="#V5.0_Documentation">Documentation</a>,
    <a href="#V5.0_Procedures">Procedures</a>,
    <a href="#V5.0_Interpreter">Interpreter</a>,
    <a href="#V5.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 5.n.
For earlier versions, see the the history documents:

<blockquote>
<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,
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>

<h2><a name="Version5.99"></a>Version 5.99 (beta) (1999-12-18)</h2>

<h3><a name="5.99_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- All platform-specific makefiles must now define the Q macro.
	- Ghostscript now exits with an error status if an error occurs in a
file named on the command line, a -c command, or piped input.
(Utilities)
	- ps2epsi now disables setpagedevice: the bounding box of the EPSI
output file is recorded only in the %%BoundingBox comment.
(Drivers)
	- The return type of gdev_vector_close_file is changed from void
to int.
(Interpreter)
	- The name of the predefined stochastic halftone is changed to
StochasticDefault.  (This change was actually made in 5.98.)
	- The compht feature is replaced by stocht.
	- Font searching now looks in FontResourceDir.
	- The ASCIIHexEncode filter now produces upper-case output.
(Library)
	- The type returned by compiled halftone resource access procedures
is changed.

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

Fixes problems:
	- A stray character had gotten added to the beginning of a file.
(doc/Use.htm)
	- Many minor HTML errors had crept in.  (doc/*.htm, doc/gsdoc.el)

Updates the docmentation on the mswinpr2 driver.  (doc/Devices.htm)

Notes that GNU make currently does not work on OpenVMS.  (doc/Make.htm)

Documents the fact that x/y_pixels_per_inch are deprecated.  (gxdevcli.h)

Documents certain bugs in ps2pdf.  (doc/Ps2pdf.htm)

Documents the addition of FontResourceDir to the font search process.
(doc/Use.htm)

Documents the new arrangement for B paper sizes.  (doc/Psfiles.htm,
doc/Use.htm, doc/gs-vms.hlp, man/gs.1)

Removes the "under development" warning from the text API and
get_bits_rectangle documentation, and adds a little more detail.
(doc/Drivers.htm)

Adds new user-contributed documentation for installing and using Ghostscript
fonts with X Windows.  (doc/Fonts.htm, doc/Readme.htm, doc/Use.htm)

Adds building with the Watcom compiler to the release process.
(doc/Release.htm)

Adds an "Improving performance" section to the user documentation.
(doc/Use.htm)

Adds a note to the C style guide about order of evaluation.
(doc/C-style.htm)

Documents the new stocht.ps file.  (doc/Psfiles.htm)

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

Fixes problems:
	- A missing dependency caused builds on certain platforms to fail.
(int.mak)
	- $(EXP) was missing before various utility invocations.  (int.mak)
	- VMS converts all unquoted arguments to lower case.  In order to
work around this, we have added a platform-specific makefile macro Q, which
is defined as a quote mark on VMS and as an empty string on all other
platforms, and used it to quote the few mixed-case values in the makefiles.
We removed the obsolete QQ macro from os2.mak as well.  (cfonts.mak,
dvx-head.mak, int.mak, openvms.mak, openvms.mmk, os2.mak, unixhead.mak,
wccommon.mak, winlib.mak)
	- PSRCDIR was incorrectly referenced as PNGSRCDIR in one place.
(all-arch.mak)
	- winint.mak had a conditional that Watcom's make program didn't
accept.  (winint.mak)

Adds a makefile entry to allow compilation with libpng 1.0.5.  (libpng.mak)

Updates the Borland C++ makefile to work with C++Builder 4.  (bcwin32.mak)

Updates the Unix installation makefile to install stocht.ps.  (unixinst.mak)

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

Fixes problems:
	- ps2epsi didn't disable setpagedevice.  (lib/ps2epsi)
	- geninit needed &lt;stdlib.h&gt; for 'exit'.  (geninit.c)
	- Some invocations of utilities didn't deal with VMS's habit of
converting arguments to lower case.  (geninit.c, cfonts.mak)
	- The ps2pdf*.bat files didn't produce a usage message if no
arguments were provided.  (lib/ps2pdf.bat, lib/ps2pdf12.bat,
lib/ps2pdf13.bat)
	- Removes some warnings from the Windows uninstaller.
(dwuninst.cpp)

Upgrades the halftone compiler to handle Type 5 halftones.  (genht.c)

Makes the initialization string compiler recognize sections of the code
where binary tokens are allowed, and convert literal hex strings within such
sections to binary-token strings, which take less space and load faster.
(geninit.c)

Adds a utility file to define b0 ... b6 as selecting JIS B paper sizes.
(unixinst.mak, lib/jispaper.ps)

Modifies the font printing utility to sort unencoded characters.
(lib/prfont.ps)

Adds a small utility to help use the StochasticDefault halftone.
(lib/stocht.ps)

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

Fixes problems:
	- The output of the epswrite driver couldn't be embedded in another
file, because it assumed it was invoked with an empty operand stack.
(gdevps.c)
	- "Vector" drivers didn't detect I/O errors such as filling up the
disk.  (gdevvec.h, gdevpdf.c, gdevps.c, gdevpx.c, gdevvec.c)
	- The bookkeeping for image color spaces when banding was incorrect,
possibly causing memory access errors.  (gxclist.h, gxclimag.c, gxclist.c)
	- The cljet5 driver didn't place the image on the page correctly.
(gdevclj.c)
	- 16-bit X11 devices with R/G/B widths other than 5/6/5 sometimes
failed to map colors correctly.  (gdevxcmp.h, gdevxcmp.c)
	- The cljet5c driver omitted a needed cast.  (gdevcljc.c)

Adds new x11rg16x and x11rg32x devices to test X Windows with unusual pixel
layout.  (devs.mak, gdevxalt.c)

Works around a bug in Acrobat Distiller 4 (and perhaps some other PostScript
interpreters) that causes an error if CCITTFaxDecode with /EndOfBlock = true
is given data with no EOB (terminated by the end of the data stream
instead).  (gdevps.c)

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

Fixes problems:
	- The absence of mktemp on the Watcom platform caused a linking
error under Windows.  (watc.mak, watcw32.mak, gp_iwatc.c, gp_mktmp.c)

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

Fixes problems:
	- findfont, /Font resourcestatus, and /Font resourceforall weren't
consistent.  (lib/gs_fonts.ps, lib/gs_res.ps)
	- Very large TrueType fonts caused a stackoverflow.  (lib/gs_ttf.ps)

</pre><h3><a name="5.99_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- Errors in pdfmark and setdistillerparams were ignored (!).
(lib/gs_pdfwr.ps)
	- The PUT pdfmark didn't allow adding dictionaries to stream-type
objects.  (The pdfmark documentation says this isn't allowed, but we think
this is an oversight, since it is reasonable and unambiguous and Acrobat
Distiller allows it.)  (gdevpdfm.c)
	- The token scanner used to substitute object names in pdfmark
parameters sometimes added an extra character on the end.  (gdevpdfr.c)
	- ashow and [a]widthshow produced incorrect text spacing.  (bug
introduced by an optimization in 5.97) (gdevpdft.c)
	- setdistillerparams left its argument on the stack.
(lib/gs_pdfwr.ps)
	- 0-height images caused errors either at conversion or at rendering
time.  (gdevpdfi.c)
	- If the FontMatrix included a translation component, text was
positioned incorrectly.  NOTE: this fix may not handle x/y/xyshow.
(gdevpdft.c)
	- Out-of-range user-space coordinates could get generated for
rectangles.  NOTE: they can still get generated for general paths.
(gdevpdfd.c)
	- Widths weren't written for renamed built-in fonts.  We fixed this
partly by improving the algorithm for recognizing built-in fonts.
(gdevpdff.h, gdevpdff.c, gdevpdft.c)

Works around the Acrobat limitation that user-space coordinates must not
exceed 32K.  (fix from Artifex) (gdevpdfp.c)

Works around an Acrobat Reader 3 bug with printing files including Type 3
fonts: with the "Download Fonts Once" option, AR3 only emits the font subset
referenced on the first page where the font appears.  (gdevpdfx.h,
gdevpdf.c, gdevpdft.c)

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

Fixes problems:
	- Type 3 fonts weren't handled properly as a marking context, so if
a CharProc referenced a resource in the font, an error would occur.
(lib/pdf_fonts.ps)
	- 0-height images caused an error.  (lib/pdf_draw.ps)

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

Fixes problems:
	- Errors weren't propagated properly.  (bug introduced in 5.98 by
enhanced error recovery code) (imainarg.h, gs.c, imainarg.c)
	- Errors in -c commands or in files named on the command line
sometimes allowed execution to continue, and did not terminate with an
abnormal status.  (lib/gs_init.ps)

Changes the binary token scanner so that if the stream buffer is in foreign
space, binary-token strings will not be copied, but will be referenced
directly in the buffer.  This parallels what is done for name strings.
(iscanbin.c)

Changes the stochastic halftone from multiple Type 3s to a Type 5.
(lib/ht_ccsto.ps, int.mak)

Replaces the compht feature with a new feature called stocht.  If this
feature is selected, the StochasticDefault halftone resource will be
pre-loaded into Ghostscript.  If COMPILE_INITS=1, all the halftone data
(threshold array, order and bits arrays) will be efficiently compiled into
the executable.  (int.mak)

Replaces (...\n) print with (...) = everywhere.  (lib/gs_cmdl.ps,
lib/gs_fonts.ps, lib/gs_init.ps, lib/gs_setpd.ps, lib/pdf_base.ps,
lib/pdf_font.ps, lib/pdf_main.ps, lib/pdf_sec.ps)

Adds support for JIS B paper sizes: statusdict will now include isob0..6 and
jisb0..6 operators, with b0..6 normally aliased to the former.
(lib/gs_statd.ps, lib/jispaper.ps)

Adds a b5tray procedure; limits the valid arguments for setpagetype to the
Adobe-defined values 0 and 1.  (lib/gs_statd.ps)

Updates clients for the change in the gs_image_* API.  (zimage.c)

Makes the default halftone lookup procedure more reasonable.
(lib/gs_init.ps, lib/gs_ll3.ps)

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

Fixes problems:
	- An error condition when closing a file stream wasn't reported
properly.  (sfxfd.c, sfxstdio.c)

For greater Adobe compatibility, changes the ASCIIHexEncode filter to
produce upper-case output.  (sstring.c)

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

Fixes problems:
	- The gs_image_* API didn't work for ImageType 3 images.  Fixing
this required a small (but backward-compatible) API change.  (fix mostly
provided by Artifex)  (gsimage.h, gsimage.c)
	- The change in the bbox device in 5.95 broke it for the case where
it was being used in a pipeline.  (gdevbbox.c)
	- A possible overflow wasn't detected when stroking lines with very
large coordinates.  (gxstroke.c)
	- A mask was sized incorrectly.  (gsdcolor.h)

Updates the runtime support for compiled halftones.  (gxdhtres.h, gscdefs.h,
gconf.c, gxclrast.c, gxhtbit.c)

Replaces all references to the now-deprecated x/y_pixels_per_inch with
HWResolution[0/1].  (gsdevice.c, gxclist.c, gxpcmap.c)

</pre>

<hr>

<h2><a name="Version5.98"></a>Version 5.98 (beta) (1999-12-01)</h2>

<h3><a name="5.98_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- The return type of init_proc is changed from void to int.
	- The return types of gs_lib_init* are changed from void to int.
(Interpreter)
	- The return types of gs_[main_]init*, gs_[main_]add_lib_path,
gs_[main_]set_lib_paths, and a number of internal initialization-related
procedures are changed from void to int.

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

Improves the documentation of the clist_render_rectangle procedure.
(gxclist.h)

Makes it clear that pre-public-release filesets should not be redistributed.
(doc/Tester.htm)

Clarifies that the parameters for the X driver are command line switches,
not X resources.  (doc/Use.htm)

Improves the documentation of ps2pdf in response to some user comments.
(doc/Ps2pdf.htm)

Documents the initial settings of the distiller parameters.
(doc/Ps2pdf.htm)

Documents the UniqueIDs assigned to Aladdin.  (lib/gs_fonts.ps)

Updates the documentation for the stochastic halftone mask.  (doc/Make.htm)

Removes some obsolete material.  (doc/Release.htm)

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

Fixes problems:
	- The new ps2pdf* scripts weren't included in the Unix install list.
(unixinst.mak)
	- The directory names were missing in BEGINFILES.  (openvms.mak)
	- The .pl and .sh scripts weren't included in the Unix install list.
(unixinst.mak)

Updates all-arch.mak with a newer version from its contributor.
(all-arch.mak)

Updates the makefiles for a change in eexec modularization.  (devs.mak,
int.mak, lib.mak)

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

Fixes problems:
	- The dvipdf usage message was incorrect.  (lib/dvipdf)

Adds a utility for mechanically adding the Adobe extended Latin characters
(primarily Central European accented letters) to a font.  Eventually we
would like to integrate this into the font loader and/or make extended
versions of the standard 35 fonts.  (lib/addxchar.ps)

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

Fixes problems:
	- psdf_sorted_glyphs_include didn't handle empty lists correctly.
(gdevpsdf.c)
	- A reference to a #defined constant hadn't been converted to upper
case.  (gdevpsdf.h)
	- Acrobat Reader couldn't handle &lt;&gt; as the definition of
Notice in an embedded font's FontInfo dictionary: it requires a () 
string. (gdevpsd1.c)
	- The [e]pswrite driver didn't take stroked paths into account when
computing the bounding box.  (gdevps.c)

Updates gdevwpr2.c with a new version from its most recent author.
(gdevwpr2.c)

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

Fixes problems:
	- The FONTPATH file scanner wasn't protected against errors.
(lib/gs_fonts.ps)
	- Some badly designed Chinese TrueType fonts, whose 'post' table
gives the name .null to all glyphs, didn't work properly.  (lib/gs_ttf.ps)
	- The shareware Katakana font had an incorrect UniqueID.
(fonts/fkarw.gsf)

Adds all of the PostScript 3 fonts to the intelligent substitution tables.
(lib/gs_fonts.ps)

Changes the FONTPATH scanner to allow a %%BeginFont: line as the first line
of a font.  Nothing in Adobe's documentation suggests that this is
acceptable, but some fonts have it.  (lib/gs_fonts.ps)

Releases an updated set of the URW fonts, fixing the braceleftbt problem in
the Symbol font and a couple of missing characters in the ZapfDingbats
fonts, and adding the Euro glyph to the alphabetic fonts.  The new archive
also includes fonts.scale and fonts.dir files for use with X Windows
(mkfontdir and xfs).

Centralizes the definition of Aladdin's XUIDs.  (lib/gs_fonts.ps,
lib/gs_ttf.ps)

</pre><h3><a name="5.98_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- The algorithm for making font names unique didn't take subset
prefixes into account.  (gdevpdff.h, gdevpdff.c, gdevpdfw.c)
	- Computing character bounding boxes was taking an inordinate amount
of time.  (performance problem only) (gdevpdff.c)
	- The pdf_image_writer and pdf_image_enum structures didn't have GC
descriptors, possibly causing memory corruption.  (gdevpdfi.c)
	- PostScript files containing images with premature end-of-data were
converted to PDF files with premature end-of-data, which Acrobat doesn't
accept. (gdevpdfo.h, gdevpdfx.h, gdevpdfi.c, gdevpdfo.c, gdevpdfu.c)
	- Pattern resources whose image was written in-line omitted a needed
gsave (q).  (bug introduced in 5.94) (gdevpdfi.c)
	- The similarity between a font and a base font wasn't computed
correctly, leading to some unnecessary writing of Widths for standard fonts.
(gdevpdft.c)
	- Embedding a stream in the psdf_binary_writer caused garbage
collector problems, because there could be pointers to that stream from
elsewhere.  (gdevpsdf.h, gdevpsdf.c)
	- The algorithms for deciding whether a font was script or serif
were very inaccurate.  (The revised ones are only somewhat better.)
(gdevpdff.c)
	- Re-encoded characters in subset fonts weren't handled correctly.
We work around this by writing the entire font if the character doesn't
appear in the font's encoding.  This is inefficient but will always produce
correct output.  (gdevpdff.h, gdevpdff.c, gdevpdft.c, gdevpdfw.c)
	- The meaning of bit 6 in the Flags was supposed to have changed in
PDF 1.2, but didn't.  (gdevpdff.h, gdevpdff.c, gdevpdfw.c)
	- The Widths array didn't get written out for embedded subsets of
the built-in fonts.  (gdevpdfw.c)
	- Planar images weren't handled correctly, and could cause memory
corruption.  (gdevpdfi.c)
	- Patterns still weren't scaled correctly; in fact, the "fix" in
5.94 can't possibly have worked, and we don't understand why it seemed to.
(gdevpdfi.c)

Recants the belief that the default encoding for embedded fonts is
StandardEncoding (see 5.95): the appearance of this was a symptom of having
multiple fonts with the same name.  (gdevpdft.c)

Removes FONT_EMBED_UNKNOWN, which is meaningless (a decision is always made
about whether to embed a font).  (gdevpdff.h, gdevpdff.c, gdevpdft.c)

Changes the algorithm for picking the base font so that it produces more
efficient output for certain cases of re-encoded fonts.  (gdevpdft.c)

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

Fixes problems:
	- Fonts were getting renamed unnecessarily.  (performance and PDF
output size problem only) (lib/pdf_font.ps)
	- Fonts with Widths but no FontDescriptor caused an error.
(lib/pdf_font.ps)
	- TrueType fonts processed the Encoding key in the font the same way
as other font types, which is not correct.  (lib/pdf_font.ps)
	- For embedded Type 3 fonts, the Widths entry in a font didn't
override the width in the CharProc.  (lib/pdf_font.ps, lib/pdf_ops.ps)
	- If a page had multiple Contents streams, and one of the streams
ended with values on the operand stack, an error might occur.
(lib/pdf_main.ps)
	- Ts and Tz within a text object didn't take effect immediately.
(lib/pdf_ops.ps)
	- sc[n] and SC[N] could cause an error because Do left an extra item
on the stack temporarily.  (lib/pdf_draw.ps)

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

Fixes problems:
	- Getting the unscaled outline for a Type 1 font didn't disable
hinting.  (mostly a performance problem) (zchar1.c)
	- Error conditions during initialization weren't recognized.  Fixing
this required changing various return types from void to int.  (ialloc.h,
iinit.h, imain.h, interp.h, ialloc.c, iinit.c, imain.c)
	- HalftoneMode didn't affect setscreen or setcolorscreen.
(lib/gs_init.ps, lib/gs_ll3.ps)

Makes the interpreter quit with a message, rather than a stack dump, if it
can't open the initial device and DEBUG is not set.  (lib/gs_init.ps)

Adds .setlimitclamp and .currentlimitclamp operators to access the limit
clamp flag in the graphics state.  (zgstate.c)

Changes the names of the stochastic halftone mask to be more descriptive.
(lib/ht_ccsto.ps, int.mak, unixinst.mak)

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

Adds the ability to forbid using hex encoding when writing strings.
(spsdf.h, spsdf.c)

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

Fixes problems:
	- Computing the width of a glyph unnecessarily constructed the
entire outline.  (performance problem only) (gxtype1.c)
	- Getting the unscaled width of a glyph in a Type 1 font didn't
disable hinting.  (mostly a performance problem) (gxtype1.c.)
	- The "unknown device" GC descriptor is no longer used.  (gsdevice.c)
	- Some compilers *still* complained about end-of-loop code not being
reached.  (gxpath2.c)
	- Mixing float and double values sometimes caused spurious lines to
be drawn when stroking very short lines with large widths.  (fix from
Artifex) (gxpdash.c)
	- The code for handling crossing lines in the path filling algorithm
sometimes computed line crossings incorrectly, causing excessive
computation.  (gxfill.c)
	- When oversampling for anti-aliasing, the flatness parameter was
not scaled, leading to unnecessarily accurate curve rendering.  (gspaint.c)
	- An extra grestore in a Pattern PaintProc could cause a crash.
(gxpcmap.c)
	- Error conditions during initialization weren't recognized.  Fixing
this required changing the return type of init_proc, and various other
internal procedures, from void to int.  (std.h, gslib.h, gscdefs.h,
gshtscr.c, gsiodev.c, gslib.c, gsutil.c)

Splits off the Type 1 encryption/decryption code into a separate file for
sharing with the eexec streams.  (gscrypt1.c, gxtype1.c)

</pre>

<hr>

<h2><a name="Version5.97"></a>Version 5.97 (beta) (11/22/99)</h2>

<p>
This is the next beta for 6.0.  We believe the pdfwrite driver (ps2pdf) now
finally produces Acrobat-acceptable output, with reasonable handling of
fonts, and have also fixed the problem with high-level image banding.  We
are cautiously hopeful that this is a "real" beta candidate.

<h3><a name="5.97_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Drivers)
	- The default CompatibilityLevel in the pdfwrite driver is now back
to 1.3.
(Library)
	- The seac_data procedure of a Type 1 font must now be able to
return the glyph and/or the actual outline data.

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

Fixes problems:
	- A &lt;br&gt; was missing.  (doc/Release.htm)
	- The final step of copying releases to www.aladdin.com was missing.
(doc.Release.htm)

Documents the new situation with the ps2pdf* scripts.  (doc/Ps2pdf.htm)

Documents the simplification of the pthreads code.  (doc/Helpers.htm,
doc/Make.htm)

Adds a requirement to the license that modifications include the name and
e-mail address of the author, and the date and purpose of the modification.
(doc/Public.htm)

Adds a link to the documentation for setdistillerparams.  (doc/Ps2pdf.htm)

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

Fixes problems:
	- On OpenVMS, the test for whether the bin and obj subdirectories
already existed was incorrect.  (openvms.mak, openvms.mmk)
	- The recently updated Borland/Inprise makefile deleted some temp
files prematurely.  (bcwin32.mak)
	- The dependencies for the Unix install-scripts and install-data
targets were incorrect.  (unixinst.mak)

Updates the RPM spec files.  (gs.rps, gs-fonts.rps, rpm-conf.dif)

Adds support for compilation with Borland/Inprise C++Builder 3.
(bcwin32.mak, winint.mak)

Adds a note on font installation under Red Hat Linux 6.  (doc/Install.htm)

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

Adds ps2pdf12 and ps2pdf13 scripts to select the PDF output level
explicitly; makes ps2pdf a wrapper for ps2pdf12.  (lib/ps2pdf,
lib/ps2pdf.bat, lib/ps2pdf12, lib/ps2pdf12.bat, lib/ps2pdf13,
lib/ps2pdf13.bat, lib/ps2pdfwr, lib/ps2pdfwr.bat)

Updates the Windows install/setup program to display the Aladdin start menu
folder on a successful install, so that the user gets some feedback that all
went well.  (dwinst.cpp, dwsetup.cpp)

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

Fixes problems:
	- The lj5{mono,gray} drivers didn't send the page size to the
printer.  (gdevpxut.h, gdevlj56.c, gdevpx.c, gdevpxut.c)
	- The pxl drivers didn't handle out-of-range points properly.
(gdevvec.c, gdevpx.c)
	- The bmpa drivers didn't produce multi-page output files correctly
-- all pages but the first were blank.  (The bmp format is supposed to be
single-page, but at least some readers handle multi-page files correctly.)
(gdevbmpa.c)
	- The code for writing embedded TrueType fonts was broken.  (bug
probably introduced in 5.9x) (gdevpsdt.c)

Removes an unused variable.  (gdevbmpa.c)

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

Replaces the 4 pthreads files, which included a dependence on the non-POSIX
&lt;semaphore.h&gt;, with a single file that uses only pthreads procedures.
(gp_psync.c, gp_posem.c [deleted], gp_pthr.c [deleted], gp_ptsem.c
[deleted], gp_semon.c [deleted])

</pre><h3><a name="5.97_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- Whether or not to write the Widths array was implicit in the data
structures rather than explicit, so it was sometimes written unnecessarily.
(gdevpdfx.h, gdevpdff.c, gdevpdft.c)
	- Fonts based on the 14 built-in fonts didn't set BaseFont to the
name of the built-in font.  (gdevpdff.c)
	- The determination of whether a glyph was available was incorrect
for embedded fonts, leading some glyphs to be turned into bitmaps
unnecessarily.  (gdevpdft.c)
	- Apparently Acrobat Reader gets confused if different subsets of
the same font have different FirstChar and LastChar values, so we have to
write the full Widths array each time.  (gdevpdfx.h, gdevpdff.c, gdevpdft.c)
	- A structure member wasn't initialized when processing pdfmark
annotations, possibly causing a memory access error.  (gdevpdfm.c)
	- The typedef for gx_device_pdf had a typo.  (gdevpdfx.h)
	- Each embedded font subset had its own FontDescriptor and its own
font data, confusing Acrobat Reader.  Fixing this required sharing
FontDescriptors among multiple fonts and making FontDescriptors
pseudo-resources.  (gdevpdff.h, gdevpdfx.h, gdevpdf.c, gdevpdff.c,
gdevpdft.c, gdevpdfw.c)
	- Incrementally defined embedded Type 1 fonts didn't write out
correct Widths.  (gdevpdff.c)
	- PDF resources didn't consistently record the gs_id of the
structure they represented, possibly causing resources to be duplicated
unnecessarily.  (gdevpdff.c, gdevpdfu.c)

Reinstates PDF text output.  (gdevpdf.c)

Changes the default CompatibilityLevel in the pdfwrite device back to 1.3,
since the ps2pdf scripts now make it easy to choose the PDF level.
(gdevpdf.c)

When possible, uses the widths obtained from the font, rather than the
default implementation of text_process, to complete the text_process
operation.  This greatly speeds up the conversion process.  (gdevpdft.c)

Allows character remapping (but not reencoding) of TrueType fonts.
(gdevpdft.c)

Factors the definitions for cos objects and font-related objects into header
files more thoroughly.  (gdevpdff.h, gdevpdfo.h, gdevpdfx.h, gdevpdf.c,
gdevpdff.c, gdevpdfi.c, gdevpdfm.c, gdevpdfr.c, gdevpdft.c, gdevpdfu.c)

Makes the names of some structure elements correspond more directly to keys
in PDF directories.  (gdevpdff.h, gdevpdff.c, gdevpdft.c)

Splits off the font-writing code, since a source file was getting too big.
(gdevpdff.h, gdevpdff.c, gdevpdfw.c)

Adds CharSet information to embedded Type 1 font descriptors.  (gdevpdfw.c)

Makes all font names in the output unique, selected by static bool
MAKE_FONT_NAMES_UNIQUE.  (gdevpdff.h, gdevpdff.c, gdevpdft.c)

Reinstates support for one special case of composite fonts (8/8 mapping with
the high order byte always zero) that is used by the AdobePS4 Windows
driver.  (gdevpdft.c)

Changes the assumption about the default encoding for embedded TrueType
fonts from StandardEncoding to no known encoding.  (gdevpdft.c)

Changes FONT_EMBED_BASE14 to FONT_EMBED_STANDARD for greater
descriptiveness.  (gdevpdff.h, gdevpdff.c, gdevpdft.c)

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

Fixes problems:
	- The same-font test for Type 1 fonts didn't correctly identify
re-encoded fonts with unchanged metrics.  (zfont1.c)
	- If a save level was split into multiple internal save objects,
some changes could get undone before objects were finalized.  (isave.c)
	- When releasing all of memory, stable allocators weren't finalized.
(isave.c)
	- Some compilers gave annoying and needless warnings about integer
overflow.  (store.h)
	- There was a signed/unsigned char * mismatch.  (iccfont.c)

Adds a debugging procedure.  (idebug.h, idebug.c)

Changes the Type 1 font seac_data procedure to match the new API.
(zchar1.c)

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

Fixes problems:
	- The GC didn't know about the pointers to the tables for Indexed
color spaces when banding, occasionally causing the tables to be written as
garbage.  This is the real fix for the problem discovered in 5.96.
(gsiparam.h, gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxclpath.c)
	- With 'async' drivers, multi-page files didn't render properly
(they got a rangecheck error on every page after the first one).
(gdevprna.c)
	- Some compilers still complained about end-of-loop code not being
reached.  (gxpath2.c)
	- The scaled font cache required that a font have a UID in order to
be a candidate for caching.  (gsfont.c)
	- An obsolete check caused slight discrepancies between banded and
non-banded output.  (gxstroke.c)
	- The glyph_outline procedure for TrueType fonts transformed the
width by the scaling matrix twice.  (gstype42.c)

Removes some now-unnecessary extern_st declarations.  (gdevbbox.c,
gdevplnx.c, gximage3.c)

Removes some initializations that read uninitialized locations and are
logically unnecessary.  (gsalloc.c, gscolor.c)

Adds makefile rules for compiling the MD5 implementation.  (lib.mak)

Makes the seac_data of a Type 1 font return the glyph and/or the actual
outline data.  This is necessary because some Type 1 fonts don't have the
accents in the same positions as StandardEncoding, but use seac anyway.
(gxfont1.h)

Changes the Type 1 font interpreter to match the new seac_data API.
(gxtype1.c)

</pre>

<hr>

<h2><a name="Version5.96"></a>Version 5.96 (beta) (11/12/99)</h2>

<p>
This is the next beta for 6.0.  To meet a need of our commercial licensing
partner for a PostScript LL3 release, we are releasing this fileset with all
font handling in the PDF writer disabled, as well as high-level image
banding.  This is a temporary measure: we will reinstate PDF text in 5.97,
and high-level image banding as soon as we can straighten out its memory
management problems.

<h3><a name="5.96_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- All Unix 'make' programs must now predefine MAKE as the name of
the program.
(Interpreter)
	- zcolor_remap_one now returns o_push_estack rather than 0 in the
case where it doesn't actually have to sample the procedure.
(Library)
	- Multi-plane halftones (when needed) are now used for all CMYK
devices, not only if setcolorscreen was executed.
	- Font implementors must now provide a same_font procedure.

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

Makes it clear that gsnup.ps is very simple and naive.  (doc/Psfiles.htm,
lib/gsnup.ps)

Documents the new -Z_ switch.  (doc/Use.htm)

Documents that SYNC=nosync allows building on systems that don't support
multi-threading.  (doc/Make.htm)

Adds documentation for building on Macintosh Rhapsody systems.
(doc/Make.htm)

Adds a reference to the new all-arch.mak file.  (doc/Helpers.htm,
doc/Make.htm)

Notes that ps2pdf does preserve the color space for images.
(doc/Ps2pdf.htm)

Documents the new self-extracting archive for MS Windows.  (doc/Install.htm,
doc/Release.htm)

Further improves the documentation of the PDF text machinery.  (gdevpdfx.h)

Reorganizes the build information for Unix.  (doc/Make.htm)

Adds information on building Ghostscript under BSDI.  (doc/Make.htm)

Notes that versions of zlib before 1.1.3 may cause an error on rare
occasions.  (zlib.mak)

Fixes a few other minor problems.  (doc/Current.htm, doc/Devices.htm,
doc/DLL.htm, doc/Install.htm, doc/Language.htm, doc/Make.htm,
doc/New-user.htm, doc/Ps2pdf.htm, doc/Source.htm, doc/Use.htm)

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

Fixes problems:
	- dctd.dev and dcte.dev were defined in $(PSD), but referenced in
$(GLD).  (devs.mak, int.mak, lib.mak)
	- pipe.dev was defined in $(GLD), but referenced in $(PSD).
(bcwin32.mak, dvx-gcc.mak, msvc32.mak, unix-gcc.mak, unixansi.mak,
unixtrad.mak)
	- XLIBDIRS was included in the linker command even if none of the
X drivers were used.  (devs.mak, dvx-tail.mak, ugcclib.mak, unixlink.mak)
	- The OpenVMS makefile didn't create the obj and bin directories
properly.  (openvms.mak)
	- 'make debug' and 'make pg' didn't work on Unix systems where the
make program was named something other than make.  (unix-end.mak)

Introduces a new top-level makefile macro, STDLIBS, that is -lm for all
reasonable platforms but null for Rhapsody.  (dvx-gcc.mak, dvx-tail.mak,
ugcclib.mak, unix-gcc.mak, unixansi.mak, unixlink.mak, unixtrad.mak)

Adds Nelson Beebe's contributed multi-architecture Unix makefile.
(all-arch.mak)

Makes it theoretically possible in theory to build the new Windows
install/uninstall program with the Borland compiler.  However, since this
requires Borland C++ 4.52 and we only have 4.5, this is disabled in
bcwin32.mak.  (bcwin32.mak, winint.mak)

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

Fixes problems:
	- The default for gsnup.ps was 3x2 landscape, rather than 2x2
portrait.  (lib/gsnup.ps)
	- gslp.ps was broken (by the changes made to support gsnup.ps).
(lib/gslp.ps)

Adds a -link switch to genconf, to allow verbatim copying of commands into
the linker command line.  (genconf.c)

Edits files to add missing $Id lines and module summary comments, and to
delimit module summary comments from further material.  (dwinst.h,
dwsetup.h, dwuninst.h, bench.c, dwuninst.cpp)

Makes it possible to build the new Windows install/uninstall program with
the Borland compiler.  (dwinst.cpp, dwsetup.cpp, dwsetup.def, dwsetup.rc,
dwuninst.cpp, dwuninst.def)

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

Fixes problems:
	- Embedded Type 1 fonts lacked some 'def' commands.  (gdevpsd1.c)
	- Multiple Master Font instances weren't written out correctly.
(gdevpsd1.c)

Edits files to add missing $Id lines and module summary comments, and to
delimit module summary comments from further material.  (gdev8bcm.h,
gdevht.h, gdevpccm.h, gdevpcl.h, gdevsvga.h, gdevx.h, gdev3852.c,
gdev8510.c, gdevadmp.c, gdevcd8.c, gdevcif.c, gdevclj.c, gdevhl7x.c,
gdevifno.c, gdevimgn.c, gdevl31s.c, gdevmeds.c, gdevmswn.c, gdevos2p.c,
gdevpe.c, gdevpm.c, gdevsj48.c, gdevtknk.c, gdevupd.c, gdevwddb.c,
gdevwpr2.c, gdevwprn.c)

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

Fixes problems:
	- The pthreads wrapper had a procedure type mismatch.  We fixed this
by making it allocate and free a wrapper object, as the Windows wrapper
does.  (gp_pthr.c)

Edits files to add missing $Id lines and module summary comments, and to
delimit module summary comments from further material.  (dwimg.h, dwmain.h,
gsdll.h, gp_msio.c, gp_mswin.c)

Removes an unnecessary #include &lt;semaphore.h&gt;.  (gp_semon.c)

Adds a module that implements semaphores using the pthreads mutex
facilities, as an alternative to gp_posem.c.  Unfortunately, using this
module causes immediate crashes on both Linux and BSDI, and we don't know
why.  (Let us know if you figure it out.)  (gp_ptsem.c)

</pre><h3><a name="5.96_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- The character and word spacing weren't recognized as being reset
by a PDF grestore.  (gdevpdfx.h, gdevpdfu.c)
	- Fonts that couldn't be embedded were always converted to bitmaps,
rather than becoming candidates for non-embedded representation (if
EmbedAllFonts is false and the font doesn't appear on the AlwaysEmbed list).
(gdevpdfx.h, gdevpdff.c, gdevpdft.c)
	- Stream-type Cos objects were written with no (0-length) data.
(gdevpdfm.c)
	- Reencoded base 14 fonts were not recognized as such, leading to
excessive font embedding.  (gdevpdfx.h, gdevpdf.c, gdevpdff.c, gdevpdft.c)
	- Fonts were embedded by default even if EmbedAllFonts was false.
(gdevpdft.c)

Changes MaxSubsetPct to 35 to match Acrobat Distiller.  (gdevpsdf.h)

Adds some tracing output (-Z_).  (gdevpdff.c, gdevpdft.c)

Temporarily disables font handling in the PDF writer, to meet a need of our
commercial licensing partner.  All text will be converted to code-scrambled
Type 3 bitmap fonts.  (gdevpdf.c)

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

Fixes problems:
	- The sh operator caused an invalidaccess error for shadings that
required a DataSource.  (lib/pdf_draw.ps)
	- The test for whether a Widget appearance was a Form or a
collection of sub-appearances was incorrect, causing an /undefined error in
the latter case.  (lib/pdf_draw.ps)
	- If the FontName in a Font descriptor differed from the BaseFont
name in the Font object, the interpreter used the two inconsistently,
sometimes causing the wrong font to be used.  (lib/pdf_font.ps)
	- ICCBased color spaces caused an error.  (lib/pdf_draw.ps)

Works around the fact that Acrobat Distiller produces files in which a
Widget's Form appearance lacks Type and Subtype keys.  (lib/pdf_draw.ps)

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

Fixes problems:
	- Failure in allocating the name table would cause a crash.
(iname.c)
	- Shadings with procedure-based filters didn't work.
(lib/gs_ll3.ps, ifilter.h, zfileio.c, zfproc.c)
	- Some compilers complained about arithmetic on an enum.  (iparam.c)
	- Setting a transfer or similar function to the identity function
didn't set the cached values, so the setting didn't consistently take
effect.  (icolor.h, zcolor.c)
	- If the C library's implementation of sprintf with a %g format ever
produced a number with an exponent but no decimal point, a crash would
occur.  (iutil.c)
	- The PageDeviceName page device parameter wasn't supported.
(lib/gs_lev2.ps, lib/gs_setpd.ps)
	- A public procedure wasn't declared extern if DEBUG wasn't set.
(igc.h)
	- Because of a typo, loading resources automatically from a file
always failed.  (bug introduced in 5.94) (lib/gs_res.ps)

Edits files to add missing $Id lines and module summary comments, and to
delimit module summary comments from further material.  (files.h, iastate.h,
ibnum.h, ichar.h, ifilter.h, iimage.h, iimage2.h, iparam.h, isave.h,
iscan.h, isstate.h, istream.h, iutil.h, opcheck.h, scanchar.h)

Adds a font similarity testing procedure for Type 1/2/4 fonts.  (zfont1.c)

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

Edits files to add missing $Id lines and module summary comments, and to
delimit module summary comments from further material.  (sbhc.h, sbtx.h,
sbwbs.h, sdct.h, scfdgen.c, scfdtab.c, shcgen.h, siscale.h, sjpeg.h,
slzwx.h, smtf.h, spdiffx.h, spngpx.h, srlx.h)

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

Fixes problems:
	- Making a transformed font inappropriately copied the font's
notification list.  (gsfont.c)
	- Some compilers complained about end-of-loop code not being
reached.  (gxpath2.c)
	- The first two arguments of scale_delta was swapped, causing
anomalous output for certain Type 1 fonts with curves where the starting and
ending points had the same X or Y coordinate.  (gxhint3.c)
	- Large smoothness values produced blocky output.  (gxshade.c)
	- When banding, in a region where a CMYK halftone had no K at all,
the output was likely to be black rather than the correct color.  (gxcht.c)
	- Interpolated images with mirrored X scaling weren't mirrored.
(gxiscale.c)
	- Interpolated images were truncated.  (gxiscale.c)
	- Halftone caches could have a dangling pointer to a transfer map in
the halftone order.  (gxht.c)
	- The next-character code returned for kshow was the same as the
current character.  (bug probably introduced in 5.86) (gstext.c)
	- The GC didn't know about the pointers to the tables for Indexed
color spaces when banding, occasionally causing the tables to be written as
garbage.  In the process of investigating this, we discovered that the GC
didn't know about *any* of the pointers in the structures used to track
banded images.  ****** NOT FIXED, TOO MUCH RISK OF INTRODUCING FURTHER
BUGS. ****** Instead, we disabled high-level image banding in this fileset.
(gxclimag.c)

Changes the name of a variable from ppc to ppcr, because an Apple compiler
inappropriately defines the name ppc when compiling on a PowerPC.
(gxshade6.c)

Edits files to add missing $Id lines and module summary comments, and to
delimit module summary comments from further material.  (gdevbbox.h,
gscoord.h, gscpixel.h, gsfname.h, gsfont.h, gsimage.h, gslib.h, gsmdebug.h,
gspaint.h, gspath.h, gspath2.h, gxalloc.h, gxclipm.h, gxclpage.h,
gxclpath.h, gxcmap.h, gxcoord.h, gxcpath.h, gxdda.h, gxdevmem.h, gxfcache.h,
gxfont.h, gximage.h, gxiodev.h, gxpaint.h, gxpath.h, gxpcolor.h, gzacpath.h,
gzcpath.h, gzht.h, gzpath.h, md5.h, gxdither.c, md5.c)

Adds a prototype for debug_find_pointers.  (gxalloc.h)

Adds a font procedure for testing whether two fonts are the same in various
ways.  This is needed so that the PDF writer can do a reasonable job of
identifying reencoded and renamed versions of the base 14 fonts.  (gxfont.h,
gsfont.c)

Changes a macro to a procedure and improves some commenting.  (gxhint3.c)

Changes the halftoning code so that multi-plane halftones are always used on
CMYK devices, even if only a single halftone is set (setscreen or
HalftoneType 1).  (gxcht.c, gxdither.c)

</pre>

<hr>

<h2><a name="Version5.95"></a>Version 5.95 (beta) (11/1/99)</h2>

<p>
There were several new problems in 5.94, some of them severe.  We hope this
beta candidate fixes them without introducing any new ones.  It also fixes
some minor problems not reported in 5.93.

<p>
We think we have finally found the right workarounds for Acrobat and
specification problems so that pdfwrite output (with CompatibilityLevel
either 1.2 or 1.3) both conforms as closely as possible to the published PDF
specification and works with Acrobat Reader (3 or 4 respectively) for both
displaying and printing.

<p>
NOTE: The default level of output from the pdfwrite device (ps2pdf) has been
changed back to PDF 1.2 (Acrobat 3 compatible), because this is what the
majority of users want.  For PDF 1.3 output, use -dCompatibilityLevel=1.3.

<p>
Note: some post-6.0 code is included under an #ifdef POST60.

<h3><a name="5.95_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Drivers)
	- The default CompatibilityLevel in the pdfwrite device (ps2pdf) is
now 1.2 rather than 1.3.
	- pdfwrite now discards information after the last showpage rather
than producing an additional page.
(Library)
	- The is_monotonic procedure of a function now returns a result that
indicates the direction of monotonicity of each value separately.
	- The coordinate system used internally by the bbox device is now
upright (lower left corner = (0,0) rather than upper left corner).  (This
should not make any difference to clients, who should always have been using
default user space coordinate.)

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

Fixes problems:
	- A couple of URLs were incorrect or out of date.  (doc/Readme.htm,
doc/Use.htm)
	- There was a typo in a comment.  (gxfont.h)
	- An old bug had been fixed, but the documentation had not been
updated to reflect this.  (doc/Current.htm)

Documents the requirement to change SYNC from posync to fbsdsync on FreeBSD.
(doc/Make.htm)

Adds references to Adobe's on-line documentation.  (doc/Readme.htm)

Updates the release procedure to mention adding .ps files.
(doc/Release.htm)

Adds documentation for the bbox device.  (doc/Use.htm)

Documents the new gsnup.ps utility.  (doc/Psfiles.htm)

Modifies the gslp utility for greater page independence and smaller output
files.  (lib/gslp.ps)

Documents the fact that the default output from pdfwrite is PDF 1.2.
(doc/Ps2pdf.htm)

Adds Inprise (as the new name of the Borland tools) in a few places.
(doc/Make.htm)

Updates the release documentation slightly.  (doc/Release.htm)

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

Fixes problems:
	- FreeBSD uses a different name for the pthreads implementation.
(lib.mak, unixansi.mak, unix-gcc.mak, unixtrad.mak)

Encapsulates gsnogc.$(OBJ) in a gsnogc.dev module, to make it more sharable.
(lib.mak)

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

Fixes problems:
	- guilsinglleft and guilsinglright were misspelled.
(lib/ps2ascii.ps)
	- The ps2pdf script didn't handle the -I switch correctly.  We fixed
this by including the options twice, both before and after the automatically
supplied options.  (lib/ps2pdf, lib/ps2pdf.bat)

Adds an install/uninstall program for Windows 9x, including optional
generation of a self-extracting executable, written by Ghostgum Software Pty
Ltd.  This program is not actually used yet.  (msvc32.mak, winint.mak,
dwinst.*, dwsetup.*, dwuninst.*)

Adds a new environment parameter to arch.h, ARCH_DIV_NEG_POS_TRUNCATES.
(genarch.c)

Adds a utility for N-up printing.  (unixinst.mak, lib/gsnup.ps)

Changes ps2pdf so that if showpage has ever been executed, any partial page
after the last showpage is discarded rather than made into an additional
page.  This is consistent with printers, and correctly handles BeginPage
procedures that draw backgrounds.  (gdevpdf.c)

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

Fixes problems:
	- The TIFF drivers could produce incorrectly sorted tag tables.
(gdevtifs.c)
	- The OS/2 PM driver had an incorrect #include.  (gdevpm.c)
	- Embedded Type 1 fonts that used seac didn't automatically include
the constituent glyphs.  (gdevpsd1.c)
	- Embedded Type 1 fonts wrote the wrong font name in the first
(comment) line.  (gdevpsd1.c)
	- Deleting elements from the AlwaysEmbed or NeverEmbed list could
cause a memory access error.  (gdevpsdp.c)
	- The string and string array members of psdf_distiller_params were
omitted from the GC descriptor, causing memory corruption.  (gdevpsdf.h,
gdevpsdf.c, gdevpsdp.c)
	- When using "async" printing, the buffer device was destroyed too
soon.  (fix from Artifex) (gdevbmpa.c)

Adds (partial) parsing for the new Acrobat Distiller 4.0 parameters, under
#ifdef POST60.  The put_params code isn't finished.  (gdevpsdf.h,
gdevpsdp.c)

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

Changes product to productfamily as the Windows registry key.  (gp_wgetv.c)

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

Fixes problems:
	- guilsinglleft and guilsinglright were misspelled in
MacRomanEncoding and MacGlyphEncoding.  (lib/gs_mro_e.ps)
	- plusminus was misspelled in MacGlyphEncoding.  (lib/gs_mgl_e.ps)
	- braceleftbt was misspelled as bracelefttbt in the Symbol font.
(fonts/s050000l.pfb)  ****** NOT DISTRIBUTED YET ******
	- euro was incorrectly included at position 240 in the Symbol
encoding.  (lib/gs_sym_e.ps)
	- Zcaron and zcaron weren't included in WinAnsiEncoding (this is new
for PDF 1.3).  (lib/gs_wan_e.ps)
	- Euro replaced currency in MacRomanEncoding.  We had to change this
back, even though the Mac does use code 219 for Euro, for compatibility with
Adobe documentation.  (lib/gs_mro_e.ps)
	- TrueType fonts with more glyphencoding entries than glyphs could
cause errors.  (lib/gs_ttf.ps)

Adds the Adobe Central European encoding.  (lib/gs_ce_e.ps, unixinst.mak)

Adds more tracing to the TrueType font loader.  (lib/gs_ttf.ps)

Adds the remaining PDF Encodings to the predefined set.  (lib/gs_lgo_e.ps,
lib/gs_lgx_e.ps, lib/gs_mex_e.ps, lib/gs_mgl_e.ps, lib/gs_mro_e.ps)

</pre><h3><a name="5.95_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- When printing an error message, a pointer/length string was
incorrectly treated as a C string.  (gdevpdfm.c)
	- The treatment of text was completely broken by "improvements" made
in 5.94.  We think we've put things back to a state that at least isn't any
worse than 5.93.  (gdevpdfx.h, gdevpdff.c, gdevpdft.c)
	- The test for whether a glyph was present in a glyph set was wrong,
possibly causing an infinite loop.  (This never happened, because the code
was masked by other bugs.)  (gdevpdft.c)
	- Testing the PDF compatibility level didn't work correctly, because
of float/double mismatches.  (gdevpdfx.h, gdevpdfp.c)
	- Embedded TrueType fonts were still written in binary even if
ASCII85EncodePages was true.  (gdevpdff.c)
	- Embedded TrueType subsets didn't use Flags to indicate that they
had a non-standard cmap.  (gdevpdff.c)
	- Contrary to the obvious reading of the PDF specification, it
appears that the default encoding for embedded fonts, if no BaseEncoding is
specified, is StandardEncoding, *not* the built-in encoding of the font
itself; and that any differences from StandardEncoding must be listed
explicitly.  (gdevpdft.c)

Adds parsing for the new Acrobat Distiller 4.0 parameters, under #ifdef
POST60.  (lib/gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c)

Ensures that the Mac encodings are loaded when writing PDF.  (devs.mak)

Works around an Acrobat 3 bug: The only cmap table that works in TrueType
fonts is format 0, which can only reference glyphs up to 255.  Consequently,
a TrueType font whose Encoding references glyphs above 255 cannot be
embedded (as a font).  (gdevpdft.c)

Changes the default CompatibilityLevel from 1.3 to 1.2.  The majority of
users are running Acrobat 3.  (gdevpdf.c)

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

Fixes problems:
	- The T* operator was changed incorrectly to use the negative of the
leading value.  (lib/pdf_ops.ps)
	- The Tz value scaled the X offset for Td and TD (which it
shouldn't), occasionally causing strings to be displaced horizontally.
(lib/pdf_ops.ps)
	- sc[n]/SC[N] didn't work with 1-value color spaces, because the
code incorrectly assumed the operand stack contained only the values on the
PDF operand stack.  (bug introduced by Annotation rendering in 5.94)
(lib/pdf_base.ps, lib/pdf_draw.ps, lib/pdf_main.ps, lib/pdf_ops.ps)
	- The HTP key in the graphics state caused an error if the
interpreter didn't implement sethalftonephase.  (lib/pdf_draw.ps)
	- If there was no Names tree, invalid links (string Dest values)
caused an error instead of being ignored.  (lib/pdf_main.ps)
	- An annotation with a Thread action caused an error.
(lib/pdf_main.ps)

Adds table entries, but not implementation, for the op and OPM keys in
ExtGState dictionaries.  (lib/pdf_draw.ps)

Works around a bug in Adobe Acrobat Distiller 4.0 for Windows: it uses the
value /Default with the BG, UCR, and TR keys in an ExtGState.
(lib/pdf_draw.ps, lib/pdf_main.ps)

Adds additional tracing for Functions.  (lib/pdf_draw.ps)

Implements the BG2, UCR2, and TR2 keys in ExtGStates.  (lib/pdf_draw.ps)

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

Fixes problems:
	- There was a (harmless) signed/unsigned mismatch.  (imainarg.c)
	- If build_gs_simple_font had to add any elements to the font
dictionary, a temporary pointer to the CharStrings could become invalid,
causing crashes or confusion.  (zbfont.c)
	- The check for known Encodings included some pseudo-Encodings.
(zbfont.c)
	- The error object wasn't reset to null before each call of the
interpreter, possibly causing the garbage collector to mark it even if it no
longer existed.  (interp.c)

Adds productfamily as a new predefined name, for the benefit of the Windows
registry.  (iinit.c)

Changes the default color smoothness to 0.02 to match Adobe RIPs.
(lib/gs_ll3.ps)

Adds using the glyph_info procedure for Type 1 fonts, needed to fix the
problem with seac and Type 1 embedded fonts.  (zfont1.c)

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

Fixes problems:
	- Memory devices that may execute RasterOp must be initialized with
an allocator (for temporary bitmaps), but sometimes they weren't.
(gdevdrop.c)
	- The computation of colors_used for images could cause arithmetic
exceptions and/or produce incorrect results.  (fix from Artifex)
(gxclimag.c)
	- A dead variable was getting incremented in a loop.  (Small
performance bug only.)  (gsfunc0.c)
	- The cached is_monotonic value in a function head was incorrectly
declared bool rather than int.  (gsfunc.h)
	- The clip operators didn't always recognize empty clipping regions:
sometimes they retained a 1-pixel-wide region.  (gxcpath.c)
	- The bbox device could get into a recursion loop if it had a
non-null target with a non-standard fill_path procedure.  (gdevbbox.c)
	- The procedure u32 was defined in two places.  (gsutil.h,
gdevpsdt.c, gsutil.c, gstype42.c)
	- The DataSource member of a sampled function wasn't reported to the
garbage collector.  (gsfunc0.h, gsfunc0.c)  ****** MUST DO THE SAME FOR
SHADINGS ******
	- All name-type parameters (device and other) were converted as
strings rather than names.  (gsparam.c)
	- Using a mask Pattern with an anti-aliased device could make
invalid memory accesses and cause a crash.  (gxpcmap.c)
	- math_.h was included unnecessarily.  (gxfill.c, gxhint3.c)
	- In a few places, (fixed-point) coordinates were truncated towards
zero rather than taking the floor.  (It's likely that this had no effect.)
(gxfill.c, gxpcopy.c)
	- The join and cap values weren't taken into account when dividing a
stroked path into bands, possibly causing some caps or joins to be dropped
if they fell exactly at band boundaries.  (gxclpath.c)
	- An arithmetic overflow in gx_adjust_if_empty could produce
incorrect output.  (gxfill.c)
	- Because the bbox device used a Y-inverted coordinate system, it
could produce incorrect results for out-of-bounds coordinates.  (gdevbbox.c)
	- The default font_info procedure didn't compute MISSING_WIDTH if
IS_FIXED_WIDTH wasn't requested.  (gsfont.c)
	- space_params wasn't managed properly, causing problems if the
device altered the default values.  (fix from Artifex) (gdevprn.c)
	- The Macintosh cmap table for embedded TrueType fonts was written
incorrectly.  (gdevpsdt.c)
	- The OS/2 table for embedded TrueType fonts could be inconsistent
with the cmap table.  (gdevpsdt.c)
	- In embedded subset TrueType fonts, loca entries beyond the last
occupied glyph contained garbage.  (gdevpsdt.c)
	- Embedded TrueType subsets didn't include the components of
composite glyphs.  (gdevpsdf.h, gdevpsd1.c, gdevpsdf.c, gdevpsdt.c)

Changes the is_monotonic procedure of Functions so that it reports the
direction of monotonicity of each value independently.  This allows a larger
class of functions to be detected as monotonic.  (gsfunc.h, gsfunc0.c,
gsfunc3.c)

Works around a bug in Fontographer that causes it to produce (or at least
allow users to produce) Type 1 fonts using seac in which the side bearing of
the accented character differs from the side bearing of the base glyph.  The
published Type 1 specification and Adobe's engineers agree that such fonts
are invalid, but the authors of Fontographer don't seem to care (this is the
4th Fontographer bug that we have had to patch around so far).  (gxtype1.h,
gstype1.c, gxtype1.c)

Adds gs_productfamily, for the benefit of the Windows registry.  (gscdefs.h,
gscdef.c)

Adds a glyph_info procedure for Type 1 fonts, needed to fix the problem with
seac and Type 1 embedded fonts.  (gxfont1.h, gxtype1.c)

Adds a gs_resize_struct_array procedure that either allocates or resizes an
object.  We have wanted this for quite a while.  (gsmemory.h, gsmemory.c)

Adds the remaining PDF Encodings to the predefined set.  Also adds string
names for the "real" encodings.  (gsccode.h)

Adjusts the format of embedded TrueType fonts to be closer to that produced
by Acrobat Distiller, in the hope of making Acrobat Reader accept them.
(gdevpsdf.h, gdevpsdt.c)

</pre>

<hr>

<h2><a name="Version5.94"></a>Version 5.94 (beta) (9/30/99)</h2>

<p>
This is (intended to be) the last beta candidate for the 6.0 release.  Most
changes other than added documentation are bug fixes.  In order to address a
last-minute problem report, we implemented a subset of Annotation rendering
for PDF files.

<p>
At the request of the Free Software Foundation, we removed support for GNU
readline from the Aladdin Ghostscript fileset.  See <a
href="Make.htm#GNU_readline">here</a> for more information.

<p>
We suspect that Acrobat's bugs and limitations still prevent embedded
TrueType fonts in files created by the pdfwrite device from working
properly, but we have neither the time nor the means to test this properly.

<h3><a name="5.94_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- For OpenVMS with MMK or MMS, the third-party libraries are now
located in [.&lt;lib&gt;] rather than [-.&lt;lib&gt;].
	- The OpenVMS makefiles now select the same set of devices as the
Unix makefiles.
	- The MS Windows and MS-DOS default installation directory is now
c:\Aladdin\gs#.# rather than c:\gs.
	- All top-level makefiles now need a definition of BUILD_TIME_GS.
(Drivers)
	- The cljet5 driver is renamed cljet5pr; there is a new cljet5
driver that doesn't attempt (and fail) to handle page rotation.
(Interpreter)
	- .getiodevice may return null.
(Library)
	- IODevices may now have a null name.

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

Fixes problems:
	- The documentation of font searching was still wrong in both
places.  (doc/Fonts.htm, doc/Use.htm)

Notes that certain CodeWarrior code generation options produce incorrect
code.  (doc/Make.htm)

Removes an inaccurate and obsolete comment.  (lib/pdf_font.ps)

Notes that newer versions of the SGI compiler use a different switch for
setting the optimization limit.  (doc/Make.htm)

Notes that there may be code generation bugs in MSVC5 and later.
(doc/Make.htm)

Documents the new Fontmap.SGI file.  (doc/Use.htm)

Updates the documentation on installing Ghostscript on MS Windows.
(doc/Install.htm)

Documents the removal of the GNU readline interface.  (doc/Current.htm,
doc/Make.htm)

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

Fixes problems:
	- The instcopy script, supposed to handle incompatibilities between
Unix `install' commands, didn't work.  (instcopy, unixinst.mak)
	- The Windows makefiles had an extra occurrence of `.' at the
beginning of the default search path.  (bcwin32.mak, msvc32.mak,
msvclib.mak, watc*.mak)
	- The OpenVMS makefile didn't automatically create the bin and obj
directories if needed.  (openvms.mak)

Changes the OpenVMS MMK/MMS makefile to expect the third-party libraries in
a subdirectory of the current directory, rather than a subdirectory of the
parent.  This makes it compatible with all the other makefiles.
(openvms.mmk)

Changes the OpenVMS makefiles to select the same set of devices as the Unix
makefiles.  (openvms.mak, openvms.mmk, unixansi.mak)

Changes the Windows and OS/2 default search paths to match the new
convention of installation rooted at c:\Aladdin.  (bcwin32.mak, msvc32.mak,
msvclib.mak, os2.mak, watc.mak, watclib.mak, watcw32.mak)

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

Fixes problems:
	- The Type 1/2 CharString printer didn't handle undefined opcodes
correctly.  (lib/type1ops.ps)
	- There was no Unix script for pf2afm.  (lib/pf2afm)
	- The Type 1/2 font printing utilities didn't default lenIV to -1
for Type 2, and didn't handle lenIV = -1 correctly in some places.
(lib/type1ops.ps)
	- The font2c utility used the version of font2c.ps from whatever
existing Ghostscript executable was in the search path.  Fixing this
required adding a new parameter in all top-level makefiles, BUILD_TIME_GS.
(cfonts.mak, bcwin32.mak, dvx-gcc.mak, msvc32.mak, openvms.mak, openvms.mmk,
os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, watcw32.mak)
	- The pfbtopfa usage message was incorrect.  (lib/pfbtopfa.ps)

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

Fixes problems:
	- The pswrite driver didn't reset the clipping path when writing
low-level images, possibly causing output to be clipped incorrectly.
(gdevps.c)
	- The PNG drivers implicitly declared png_init_io.  Fixing this is
only possible in libpng versions 1.0.3 and later.  (gdevpng.c)
	- The cljet5 driver (now cljet5pr) set rotated = true if the page
was rotated, but didn't set it to false if the page wasn't rotated.
(gdevclj.c)
	- Embedded Type 1 fonts didn't include any FontInfo elements.
(gdevpsd1.c)
	- Specifying the DCTEncode filter for compressing images caused a
crash.  This problem is hard to fix correctly because of the complicated
initialization requirements of the JPEG encoder.  We patched around it by
substituting FlateEncode (when available) for DCTEncode.  (gdevpsdi.c)

Renames the cljet5 driver, which has special (and incorrect) hacks to handle
page rotation for the PCL interpreter, as cljet5pr; adds a new cljet5 driver
without the hacks.  (gdevclj.c)

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

Fixes problems:
	- On MS Windows and OS/2 systems, the wstdio pseudo-IODevice showed
up as an instance of the IODevice resource category, causing problems.
(gp_msio.c, gp_os2.c)

Adds a set of XBM/XPM icons in 4 sizes, contributed by Gintautas Grigelionis
(eragigr@ki.ericsson.se).  (lib/gs*.xbm, lib/gs*.xpm, unixinst.mak)

Brings the Windows and OS/2 code up to date, fixing some minor problems.
(gdevpm.c, gp_os2.c, gsos2.rc, gspmdrv.rc, os2.mak, pcwin.mak)

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

Fixes problems:
	- The font directory scanner (FONTPATH) didn't recognize TrueType
fonts tagged as 'true' rather than 0x00010000.  (lib/gs_ttf.ps)

Changes the TrueType font loader to use ISOLatin1Encoding for constructing
the CharStrings if there is a Microsoft Unicode cmap and no glyph names in
the post table.  This seems like a hack, but we aren't sure what the right
approach would be.  (lib/gs_ttf.ps)

Adds a Fontmap for SGI IRIX.  This just comments out those fonts that are
provided by DPS.  (lib/Fontmap.SGI)

</pre><h3><a name="5.94_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- Writing Patterns could cause a memory access error.  (bug
introduced recently) (gdevpdfi.c)
	- Filling with a pattern didn't reset the clipping path, possibly
causing output to be clipped incorrectly.  (gdevpdfi.c)
	- Patterns weren't scaled correctly.  (gdevpdfi.c)
	- The data for large Patterns could exceed Acrobat Reader's limit on
the length of a string.  (gdevpdfi.c)
	- copy_color did an extra gsave and concat.  (gdevpdfi.c)
	- Repeated color images weren't detected (performance bug only).
(gdevpdfi.c)
	- Names including control characters or spaces produced invalid
output.  (gdevpdfx.h, gdevpdfu.c)
	- A matrix multiply was in the wrong order, causing fonts with
non-zero translation in the FontMatrix to render at incorrect coordinates
(sometimes off the page).
	- If a font had one of the 14 standard names but had some characters
defined by PostScript procedures, the output file would be invalid.
(gdevpdft.c)
	- The graphics state line parameters were kept in two different
copies, causing bookkeeping errors.  (gdevpdfx.h, gdevpdf.c, gdevpdfd.c,
gdevpdfu.c)
	- If a page's BeginPage procedure did anything other than erase the
page to white, the resulting PDF file was invalid.  (gdevpdf.c)
	- Articles with the same title weren't merged properly.
(gdevpdfm.c)
	- The Threads element of the catalog wasn't an indirect object.
(gdevpdf.c)
	- Thread actions incorrectly converted the destination (thread
title) to a name, rather than leaving it as a string.  (gdevpdfm.c)
	- Fonts with the same name as the built-in ones, but not the
standard definitions, produced possibly incorrect output.  (gdevpdff.c)
	- The writer didn't recognize attempts to use Encodings with the
standard fonts that mentioned characters not present in the font's glyph
set.  (gdevpdft.c)

Ensures that the WinAnsiEncoding is loaded when writing PDF.  (devs.mak)

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

Fixes problems:
	- The default (identity) CMap didn't map CID 0 to glyph 0.
(pdf_fonts.ps)
	- TrueType fonts with an explicit Encoding didn't work properly.
(lib/gs_ttf.ps)
	- If an embedded Type 1 font executed definefont more than once,
the wrong thing would happen.  (lib/pdf_font.ps)
	- The T* operator used the negative of the leading value.
(lib/pdf_ops.ps)

Implements a subset of Annotation rendering: only Widget annotations, only
Normal appearance, only S and D borders, no rounded-corner borders.  We did
this at the very last minute before the release, in order to respond to a
bug report, and it probably has some bugs.  (lib/pdf_draw.ps,
lib/pdf_main.ps)

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

Fixes problems:
	- If an input buffer boundary fell at exactly the wrong place, an
image whose input was coming from a stream could fail to read the stream EOD
marker.  (This is quite an old bug.)  (zimage.c)
	- On MS Windows and OS/2 systems, the wstdio pseudo-IODevice showed
up as an instance of the IODevice resource category, causing problems.
(lib/gs_res.ps, ziodev.c)
	- errorinfo in $error was undefined, rather than null, initially and
after errors that didn't set it deliberately.  (lib/gs_init.ps)
	- The InkParams resource category was defined even in systems that
didn't support in-RIP trapping.  (lib/gs_ll3.ps, lib/gs_res.ps,
lib/gs_trap.ps)
	- CID fonts with 0-length data caused an error.  (lib/gs_cidfn.ps)
	- Type 10 halftone dictionaries were broken -- perhaps they never
had worked.  (lib/gs_ll3.ps)

Makes FontInfo entries available through the extended font API, needed to
allow embedded Type 1 fonts to include those entries.  (zfont1.c)

Makes it possible to determine whether the current file is a resource file,
needed to allow distinguishing between built-in and input-embedded fonts.
(lib/gs_ccfnt.ps, lib/gs_fonts.ps, lib/gs_init.ps, lib/gs_res.ps,
lib/gs_type1.ps, zfont.c)

Moves support for GNU readline from the main Ghostscript fileset to the
GNU-specific fileset.  (unix-gcc.mak, int.mak, gp_gnrdl.c =>
src/gnu/gp_gnrdl.c, gnu/src/gnudevs.mak)

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

Fixes problems:
	- The CCITTFaxDecode filter didn't correctly handle the case where
the last code of a 1-D row was a black code and occurred less than 7 or 8
bits before the end of the input stream.  (We thought we fixed this in 5.86,
but we missed one case.)  (scfd.c)
	- If an input buffer boundary fell at exactly the wrong place, an
image whose input was coming from a stream could fail to read the stream EOD
marker.  (This is quite an old bug.)  Fixing this involved a possibly risky
change to the definition of sbuf_min_left and the already fragile logic in
sreadbuf: the fix does solve this problem, but we aren't at all certain it
didn't introduce new ones.  (stream.h, stream.c)

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

Fixes problems:
	- The default implementation of copy_tile didn't pass the bitmap id
for complete tiles, missing potential optimizations (performance bug only).
(gdevdbit.c)
	- The patch edges of ShadingType 7 shadings were ordered
incorrectly, producing incorrect output in some cases where the surface
folds over itself.  (gxshade6.c)
	- Flushing internal buffers when rendering an image didn't clip the
flushed data, producing incorrect output.  (gxidata.c)
	- Non-zero data_x values for banded images produced incorrect band
list data.  (It's astounding that this problem hasn't shown up before.)
(gxclimag.c)
	- Banded images rotated by 90 degrees could produce "seams" or
garbage if they crossed band boundaries.  (This is at least the third time
we have "fixed" this problem.)  (gxclimag.c, gxifast.c)
	- Circles or ellipses defined by pairs of 180-degree arcs produced
incorrect output when banding.  (gxclpath.c, gxclrast.c)
	- setgray et al simply cleared the Pattern pointer in the client
color rather than adjusting its reference count.  (gscolor.c, gscolor1.c)
	- The saved graphics state for bitmap/pixmap patterns contained a
reference to the Pattern color, causing Patterns to be retained when they
shouldn't be and causing unwanted recursion when freeing them.  (gsptype1.c)
	- Patterns containing halftoned CMYK colors rendered as all black.
(bug probably introduced in 5.6x) (gxcht.c)
	- Because of a typo, CMYK halftoning with only a single plane could
put too much yellow into the output.  This appears to be quite an old bug.
(gxdither.c)
	- The error code from running out of band list memory wasn't
propagated if the condition was detected in cmd_put_drawing_color, causing
low-memory recovery not to be invoked.  (gxclpath.c)
	- (Same error code problem) in clist_change_tile.  (gxclbits.c)

Adds more font attributes to the set available through a standard API.
(gxfont.h)

Adds more statistics to the filling algorithm.  (gxfill.c)

Adds an is_resource flag to fonts, to indicate that they originated from a
resource rather than being embedded in an input file.  (gxfont.h, gsfont.c)

</pre>

<hr>

<h2><a name="Version5.93"></a>Version 5.93 (beta) (9/11/99)</h2>

<p>
This is the next candidate for the 6.0 release.  As with 5.92, all changes
other than added documentation are bug fixes.

<h3><a name="5.93_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- Every stream whose state includes any GC-traceable pointers must
now have a set_defaults procedure that clears those pointers.

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

Fixes problems:
	- There was an extra /ul tag.  (doc/Release.htm)
	- Fontmap.GS wasn't mentioned as needing to be installed.
(doc/Install.htm)
	- Some documentation for the handling of seac was incorrect.
(gxtype1.c)

Removes references to installbsd, which are no longer relevant.
(doc/Install.htm)

Updates the information on building with NeXTSTEP.  (doc/Make.htm)

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

Fixes problems:
	- The install command had unpredictably different syntax from one
"standard" Unix system to another, causing `make install' to fail.  We
replaced the install command with our own script.  (instcopy, dvx-gcc.mak,
unix-gcc.mak, unixansi.mak, unixtrad.mak)

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

Fixes problems:
	- pcharstr.ps loaded type1ops.ps with run rather than runlibfile,
causing an error.  (lib/pcharstr.ps)

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

Fixes problems:
	- Attempting to embed a font whose Encoding included characters not
present in the font produced invalid output.  (gdevpsd1.c)
	- Allocating a stream state didn't (automatically) clear all its
internal pointers, possibly causing GC memory access errors.  (gdevpsds.c)
	- An #include of string_.h should have been memory_.h.  (gdevpsdf.c)

Disables compression for very small images.  (gdevpsdi.c)

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

Fixes problems:
	- Compiling gp_msio with MSVC's /MD switch caused a compile-time
error.  (gp_msio.c)

</pre><h3><a name="5.93_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- A bookkeeping object was allocated with the wrong allocator,
possibly causing access errors or garbage output.  (gdevpdfu.c)
	- Certain Patterns weren't treated as such, leading to very large
output files.  (gdevpdfi.c)
	- If one of the base 14 fonts had a non-standard FontMatrix, the
output disregarded this fact.  This could cause double obliquing.
(gdevpdfx.h, gdevpdff.c, gdevpdft.c)
	- Articles never got an object ID assigned.  (bug introduced in
5.91) (gdevpdfm.c)

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

Changes the PDF interpreter to allow abbreviated filter names like /Fl for
all streams, not just in-line images.  This directly contradicts the
published PDF specification, but Acrobat Reader allows it.
(lib/pdf_base.ps)

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

Fixes problems:
	- Compiled fonts were broken by the introduction of i_ctx_p.
(lib/font2c.ps, ccfont.h, iccfont.c)
	- Allocating a stream state didn't (automatically) clear all its
internal pointers, possibly causing GC memory access errors.  (zfproc.c)

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

Fixes problems:
	- Allocating a stream state didn't (automatically) clear all its
internal pointers, possibly causing GC memory access errors.  (scfx.h,
slzwx.h, spngpx.h, strimpl.h, sbwbs.c, sdctc.c, seexec.c, sfilter1.c,
siscale.c, szlibc.c)
	- The PNG predictor streams could fail to process some data at the
end of the input.  (spngp.c)

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

Fixes problems:
	- Some obsolete definitions for Turbo C could produce references to
an undefined procedure (setmem) at link time.  (memory_.h, string_.h)

</pre>

<hr>

<h2><a name="Version5.92"></a>Version 5.92 (beta) (9/2/99)</h2>

<p>
This is the next candidate for the 6.0 release.  All changes other than
added documentation are bug fixes.

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

Fixes problems:
	- The News for 5.91 didn't include a summary.  (doc/News.htm)
	- The documentation for Microsoft platforms didn't mention that you
must add the Ghostscript bin and lib directories to the PATH.  (doc/Use.htm)

Adds a file describing Aladdin's process for building, testing, and
releasing Ghostscript.  (doc/Readme.htm, doc/Release.htm)

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

Fixes problems:
	- Fontmap.GS is now required, but wasn't installed.  (unixinst.mak)
	- A couple of documentation files weren't installed.  (unixinst.mak)

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

Fixes problems:
	- The ps2pdf script for MS Windows used the wrong name for the
executable.  (lib/ps2pdf.bat)

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

Fixes problems:
	- An uninitialized variable annoyed some compilers.  (gdevpsdt.c)
	- The PostScript-writing driver used the wrong allocator, causing
possible memory access errors.  (gdevps.c)
	- The PostScript-writing driver didn't clear a pointer, causing
possible GC errors.  (gdevps.c)
	- The PostScript-writing driver didn't have a correct GC descriptor,
causing pointers to be corrupted.  (gdevpsdf.h, gdevps.c, gdevpsdf.c)
	- Embedded Type 1 fonts unnecessarily filled individual Encoding
slots with /.notdef.  (gdevpsd1.c)
	- A large constant produced warnings on some compilers.  (gdevpsdt.c)

</pre><h3><a name="5.92_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- Once again, gcc didn't complain about an ANSI-illegal extra
semicolon in a declaration list.  (gdevpdfo.h)
	- Adds a cast to work around the fact that some compilers declare
the return type of memchr as char * rather than void *.  (gdevpdfr.c)
	- The bookkeeping for whether a font had been written and freed was
inverted, causing some fonts to be written many times and other fonts not to
be written at all.  (gdevpdf.c)

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

Fixes problems:
	- More places needed workarounds for the alignment aliasing gcc bug.
The bug only occurs if a pointer variable is dereferenced through a cast to
a stricter alignment and then dereferenced later in its original form, so it
doesn't affect very many places.  (igc.c, igcref.c, isave.c)

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

Makes the stream GC descriptor public for subclassing.  (stream.h, stream.c)

</pre>

<hr>

<h2><a name="Version5.91"></a>Version 5.91 (beta) (8/30/99)</h2>

<p>
This is the next beta for 6.0.  It includes a major rewrite of the parts of
the PDF writer that deal with resources and pdfmarks, as well as the usual
bug fixes.  There are still problems with embedded fonts, both TrueType
(which sometimes don't show up at all) and Type 1 (which sometimes confuse
Acrobat Reader 3).

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

Fixes problems:
	- An HTML tag was misplaced in the News file.  (doc/News.htm)

Notes that the Solaris FONTPATH scanning problem may be fixed.
(doc/Use.htm)

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

Fixes problems:
	- Many of the margin and width computations in ps2epsi.ps (not
written by Aladdin) were wrong -- off by 1.  It's only because the bugs
masked each other or cancelled each other out that the code didn't produce
errors more of the time.  (lib/ps2epsi.ps)

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

Fixes problems:
	- Font subset glyphs weren't sorted early enough, causing Type 1
embedded fonts to be written with inconsistent lengths.  (gdevpsd1.c)

Changes the BMP drivers so that they set the resolution in the BMP header
rather than leaving it at 0.  This solves some problems reported by users,
but may cause others.  (gdevbmpc.c)

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

Fixes problems:
	- A change made in 5.90 was incorrect (we couldn't test it, because
MS Windows and OS/2 systems can't be used over a network).  (gp_msio.c,
gp_os2.c)

Adds some conditionalization to work around a bug in some recent versions of
gcc/egcs.  (stdpre.h, interp.c)

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

Fixes problems:
	- If the extension of a font file name on GS_FONTPATH included any
upper-case characters, the font would not be found.  (lib/gs_fonts.ps)

Allows fontmaps to contain &lt;string&gt; run or .runlibfile, to get rid of the
Fontmap -&gt; Fontmap.GS link that VMS can't handle.  (lib/gs_fonts.ps)

</pre><h3><a name="5.91_PDF_writer"></a>PDF writer</h3><pre>

Fixes problems:
	- Very long arguments for pdfmark caused an ioerror, because the
buffer used for converting them was fixed-length.  (lib/gs_pdfwr.ps)
	- pdfmarks couldn't refer to objects that hadn't been defined yet.
(gdevpdfx.h, gdevpdfo.c)
	- When a DOCVIEW pdfmark added an OpenAction key to the Catalog,
it omitted the / before the name.  (gdevpdfm.c)
	- Font resources could be written in the middle of a page contents
stream.  (bug introduced in 5.90) (gdevpdff.c, gdevpdfu.c)
	- As usual, there were some signed/unsigned char * mismatches that
gcc didn't detect.  (gdevpdff.c, gdevpdfm.c, gdevpdfo.c)
	- Fonts used on a page but freed before the end of the page were
omitted from the page's resource dictionary.  (gdevpdfx.h, gdevpdf.c,
gdevpdff.c, gdevpdft.c)
	- /D or /Dest keys in Action pdfmark dictionaries dropped the first
character of their value.  (gdevpdfm.c)
	- If a pdfmark added annotations to a page after the end of that
page had been reached, those annotations would be lost.  (gdevpdf.c)
	- ANN, LNK, DEST, and PS pdfmarks ignored the object name, if any.
(Only OBJ and BP processed the name.) Unfortunately, fixing this required a
complete overhaul of the way that resources and PDF objects were represented
internally.  The result is both simpler and more general, but it involved a
major upheaval in the PDF writer code.  (lib/gs_pdfwr.ps, gdevpdfo.h,
gdevpdfx.h, gdevpdf.c, gdevpdff.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c,
gdevpdfr.c, gdevpdft.c, gdevpdfu.c)
	- EP pdfmarks didn't close any open text context.  (gdevpdfm.c)

Adds debugging code to check the consistency of the embedded Type 1 font
writer.  (gdevpdff.c)

Makes /A and /F at the top level of an annotation or outline pdfmark
equivalent to /Action and /File respectively.  See the code for more
information.  (gdevpdfm.c)

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

Fixes problems:
	- Degenerate Bezier curves could cause a division by zero.
(gxpcopy.c)
	- Some macros used in non-FPU configurations were missing some
needed uses of const, and in one case an additional cast.  (gxfarith.h,
gxfixed.h)

Changes the discard macro to upper-case.  (stdpre.h)

</pre>

<hr>

<h2><a name="Version5.90"></a>Version 5.90 (beta) (8/20/99)</h2>

<p>
This is the first real candidate for the 6.0 release.  It does not fix all
known bugs, but it includes all planned functionality.  New in this fileset:
<ul>
<li>	- FunctionType 4 for PDF files.
<li>	- Alternate printer images for PDF files (-dUsePrinterImages
	switch).
<li>	- pdfwrite support for PDF "Cos objects" (without compression for
	streams).
<li>	- pdfwrite support for graphics objects named with BP/EP/SP
	(without compression for the object definition).
<li>	- pdfwrite font subsetting and embedded TrueType fonts.
</ul>

<h3><a name="5.90_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- ref_stack_init now takes an additional argument.
	- no_time_slice_proc is removed -- use 0 instead.
(Library)
	- Notification client procedures and the gs_notify_ procedures
take different arguments.
	- The common part of a gs_function_t structure has changed.
	- gs_text_enum_init now returns a value that can indicate an error.
	- The font font_info procedure now takes an additional argument.
	- The IODevice open_device procedure is now defined as returning
0 or 1 under specific circumstances.
	- gxp1fill.h is renamed gxp1impl.h.
	- Allocators now have an additional procedure they must implement,
and a state member they must initialize.
	- Most of the gs..basic.. structure definition macros have been
renamed.  The ptrs1_stringsN structure definition macros are removed.
	- Implementations of the text API now must provide a resync
procedure rather than a restart procedure.

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

Documents the new -dUsePrinterImages switch, and the expanded meaning of
-Z~.  (doc/Use.htm)

Updates FSF's address in documentation.  (lib/Fontmap.GS, lib/Fontmap.Sol,
gdevcd8.c)

Brings the PDF writer (ps2pdf) documentation up to date.  (doc/Ps2pdf.htm)

Updates the current-release documentation.  (doc/Current.htm,
doc/Readme.htm)

Updates the problem-reporting procedure for contributed drivers, and some
other new-user information.  (doc/New-user.htm)

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

Fixes bugs:
	- Because of a typo, the file gs_mgl_e.ps wasn't installed (on Unix
systems) by 'make install'.  (unixinst.mak)
	- The .dev files for drivers didn't depend on devs.mak.  (devs.mak)
	- The X driver didn't include a needed dependency on the bbox
device.  (devs.mak)

Incorporates the pdfmin package into the pdf package, since pdfmin was only
provided for very small-memory environments and is no longer useful.
(int.mak)

Adds additional prototype-checking switches, which are important on 64-bit
platforms and useful on all platforms, to the gcc compilation line.
(unix-gcc.mak)

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

Fixes bugs:
	- A backquote was misplaced in the Unix ps2pdf script.  (lib/ps2pdf)
	- Some example files didn't have %! headers.  (examples/alphabet.ps,
examples/waterfal.ps)
	- ansi2knr didn't handle preprocessor directives within a function
header.  (ansi2knr.c)

Cleans up some minor compiler complaints.  (genarch.c, genconf.c, echogs.c)

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

Fixes bugs:
	- The PostScript writer sometimes failed to reset the clip path,
causing parts of the output to be omitted or to appear incorrectly.
(gdevvec.c)
	- There was a type mismatch in a conditional.  (gdevxini.c)
	- A constant array wasn't declared as static.  (gdevpsdt.c)
	- Once again, there were some signed / unsigned char mismatches that
gcc apparently can't be forced to detect.  (gdevpsdt.c)
	- The alternative X drivers didn't have GC descriptors, which could
lead to memory corruption.  (gdevxalt.c)
	- The alternative X drivers didn't handle the closing of the
underlying X driver correctly, leading to a dangling pointer.  (gdevxalt.c)
	- Font subsetting didn't eliminate duplicate glyphs (glyphs
referenced more than once from the Encoding vector.)  (gdevpsd1.c,
gdevpsdt.c)
	- Type 1 font subsetting didn't ensure the presence of .notdef.
(gdevpsd1.c)
	- The embedded TrueType font writer wrote all 16-bit values
incorrectly.  This could explain a lot!  (gdevpsdt.c)

Cleans up public functions with no previous prototype.  (gdevtfax.h,
gdevx.h, gdevdfax.c, gdevtfax.c, gdevx.c, gdevxini.c, gdevxxf.c)

Adds some procedures to support font subsetting.  (gdevpsdf.h, gdevpsdf.c)

Adds an alternate font name for writing TrueType fonts.  (gdevpsdt.c)

Makes the TrueType font writer generate an OS/2 table, a Macintosh cmap, and
a name table (for the font name), as well as a Windows cmap and post, if
necessary.  (gdevpsdf.h, gdevpsdt.c)

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

Updates a couple of clients for the change in the IODevice open_device
procedure, eliminating some undesirable externs.  (gp_msio.c, gp_os2.c)

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

Adds OS/2 and maxp to the list of tables that must be preserved when loading
TrueType fonts.  (lib/gs_ttf.ps)

Registers the complete lists of glyphs in the Adobe Latin fonts as
pseudo-encodings.  (lib/gs_lgo_e.ps, lib/gs_lgx_e.ps, unixinst.mak)

</pre><h3><a name="5.90_PDF_writer"></a>PDF writer</h3><pre>

Fixes bugs:
	- One built-in font was sometimes substituted for another.
(gdevpdff.c)
	- Use of composite fonts often produced a rangecheck error.
(gdevpdft.c)
	- The structures for named objects were freed twice.  (gdevpdfx.h,
gdevpdf.c, gdevpdfo.c)
	- The code to avoid writing a blank between a Td command and
following text was fragile and still incorrect after being "fixed" twice.
We removed this minor optimization, at a small cost in file size when not
compressing.  (gdevpdft.c)
	- No Names tree was generated for named destinations specified as
strings.  Rather than do this, we now convert string destinations to names.
This doesn't scale up well, but it is simple and also is compatible with all
PDF versions from 1.1 on.  (gdevpdfm.c)
	- Fonts that define characters incrementally, such as the TrueType
fonts written by some versions of the AdobePS Windows driver, could omit
characters if embedded.  Fixing this required delaying writing out fonts
until the font was about to be freed or the writer was closed.  (gdevpdfx.h,
gdevpdff.c, gdevpdft.c)

Cleans up public functions with no previous prototype.  (gdevpdfx.h,
gdevpdf.c, gdevpdfm.c)

Updates client code for the change in gs_text_enum_init.  (gdevpdft.c)

Makes some changes towards handling show operations that must be split up
internally into multiple operations using different fonts.  (gdevpdfx.h,
gdevpdff.c, gdevpdft.c)

Implements the PUT pdfmark for the built-in objects (Catalog, DocInfo,
Page<#>, ThisPage, PrevPage, NextPage).  This required deferring writing out
page objects until the end of the document.  (lib/gs_pdfwr.ps, gdevpdfx.h,
gdevpdf.c, gdevpdff.c, gdevpdfm.c, gdevpdfo.c, gdevpdfu.c)

Adds table entries, but not parsing, checking, or functionality, for the new
Acrobat 4 pdfmarks related to document logical structure.  (gdevpdfm.c)

Implements stream-type Cos objects.  (lib/gs_pdfwr.ps, gdevpdfx.h,
gdevpdf.c, gdevpdfm.c, gdevpdfo.c, gdevpdfp.c, gdevpdfu.c)

Implements BP/EP/SP pdfmarks.  (gdevpdfx.h, gdevpdf.c, gdevpdfi.c,
gdevpdfm.c)

Changes enumeration and #defined names to upper case, and adds _t to type
names.  (gdevpdfx.h, gdevpdf*.c)

Adds an OS/2 table for embedded fonts if missing.  (gdevpdff.c)

Makes the allocator for the PDF device's internal structures be the stable
allocator of the device's allocator, not the C heap.  This required
correcting a number of GC descriptors.  (gdevpdfx.h, gdevpdf.c, gdevpdfu.c)

Replaces the text restart procedure with the new resync procedure.
(gdevpdft.c)

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

Fixes problems:
	- Failure to find a font in the Resources dictionary signalled an
/undefinedfont error (which does not exist) rather than /invalidfont.
(lib/pdf_font.ps)

Implements FunctionType 4 functions.  (lib/pdf_draw.ps, zfunc4.c)

Implements the -dUsePrinterImages switch to use "alternate" printer images
when rendering.  (lib/pdf_draw.ps)

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

Fixes problems:
	- Some pointers were declared as ref * that actually could be
ref_packed *, potentially confusing compilers that follow the new, stricter
ANSI C rules about alignment aliasing.  (idebug.h, idebug.c, igc.c,
igcref.c, zmisc.c)
	- cshow didn't restore the root font after executing the procedure,
producing incorrect results if the procedure did a setfont.  (ichar.h,
zcfont.c, zchar.c)
	- A needed const-breaking cast was omitted.  (zmisc.c)
	- The memory validator could cause an unaligned access.  (ilocate.c)
	- restore could free parts of the stacks that were still in use.  We
fixed this long-standing problem using the new concept of stable allocators.
(interp.c)

Moves the implementation of the abs operator to C, required for FunctionType
4 support.  (lib/gs_init.ps, zarith.c)

Makes more operator procedures public, required for FunctionType 4 support.
(zarith.c, zmath.c, zrelbit.c, ztype.c)

Adds an additional parameter to ref_stack_init, to allow creating a
temporary stack without having an allocator.  (istkparm.h, istack.h,
interp.c, istack.c)

Cleans up public functions with no previous prototype.  (files.h, ichar.h,
icstate.h, ifilter2.h, ifrpred.h, ifwpred.h, igcstr.h, iimage.h, iimage2.h,
iinit.h, imain.h, interp.h, iscanbin.h, ivmem2.h, oparc.h, opextern.h,
icontext.c, igc.c, iinit.c, imain.c, inobtokn.c, interp.c, iscan.c,
iscanbin.c, zchar.c, zcharout.c, zcolor.c, zcolor1.c, zcontrol.c, zdevice.c,
zdpnext.c, zdps.c, zfdecode.c, zfile.c, zfilter2.c, zfont0.c, zfunc0.c,
zfunc3.c, zfzlib.c, zgeneric.c, zht1.c, zht2.c, zimage.c, zimage2.c,
ziodev.c, zmath.c, zpath1.c, zupath.c, zusparam.c, zvmem.c, zvmem2.c)

Updates client code for the tweak in the definition of the IODevice
open_device procedure.  (ziodev.c)

Implements stable local and global VM allocators.  This required changing
more places than we would have liked.  (ialloc.c, igc.c, ilocate.c, imain.c,
interp.c, ireclaim.c, isave.c, zcontext.c)

Removes the global member of gs_ref_memory_t, since it isn't used.
(gxalloc.h, ialloc.c, zcontext.c)

Adds more tracing to the relocation phase of the garbage collector.
(igcref.c)

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

Fixes problems:
	 - jpeg_open_backing_store no longer had the correct arguments.
(This had no effect in practice, since the procedure was never called.)
(sjpegc.c)

Cleans up public functions with no previous prototype.  (scfdgen.c,
scfetab.c, sjpegc.c, slzwce.c, slzwd.c, stream.c)

Adds some tracing to the image scaling stream.  (siscale.c)

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

Fixes bugs:
	- A null OutputFile name could cause an error.  (gxdevice.h,
gsdevice.c, gsfname.c)
	- Shading with non-monotonic Functions produced incorrect output.
(gxshade1.c)
	- An #undef didn't match the #define it was supposed to cancel.
(gxchar.c)
	- The default next_char_glyph procedure didn't handle FROM_CHARS or
FROM_SINGLE_CHAR data sources.  (gstext.c)
	- When finalizing a forwarding device, the target pointer in the
device wasn't cleared, leading to an incorrect attempt to access it later.
(gdevnfwd.c)
	- Interpolated images were broken, probably since 5.81.
(gxiscale.c)
	- Some color space implementation procedures hadn't been updated to
add 'const' to the color space argument.  (gscie.c)
	- A constant had a signed/unsigned ambiguity on systems where
sizeof(long) > 4.  (gsccode.h)
	- The font font_info procedure didn't provide for scaling.
(gxfont.h)

Simplifies the notification mechanism to remove the concept of client and
generating object.  Registration now just takes a closure (procedure +
opaque data); events pass the closure data and event data.  (gsnotify.h,
gsfont.c, gsnotify.c)

Changes gs_notify_unregister so that it can unregister all registrations of
a particular client rather than only one.  (gsnotify.h, gsnotify.c)

Adds support for "vanilla" Functions at the library level.  (gsfunc.h,
gsfunc.c)

Adds some tracing for Functions.  (gsfunc3.c)

Redefines function monotonicity to indicate whether the function is
increasing or decreasing, and implements monotonicity correctly for all
FunctionTypes except 4.  (gsfunc.h, gxfunc.h, gsfunc0.c, gsfunc3.c)

Makes Type 0 fonts check that they are being used with a string, not a
character or (a) glyph(s).  (gxtext.h, gschar.c, gschar0.c, gstext.c,
gxchar.c)

Cleans up public functions with no previous prototype.  (gdevmem.h,
gpcheck.h, gscie.h, gserror.h, gsmemory.h, gxcie.h, gxcldev.h, gxclpath.h,
gxcmap.h, gxcspace.h, gxfixed.h, gxfont0.h, gxp1fill.h [deleted],
gxp1impl.h, math_.h, std.h, gconf.c, gdevdrop.c, gdevm1.c, gdevm2.c,
gdevm4.c, gdevm8.c, gdevm24.c, gdevmr1.c, gdevmr2n.c, gdevprn.c, gsbittab.c,
gscdef.c, gscie.c, gsciemap.c, gscspace.c, gscscie.c, gsdevmem.c,
gsdparam.c, gshtscr.c, gsimpath.c, gsiodev.c, gsmisc.c, gsnorop.c, gspath.c,
gspcolor.c, gsptype1.c, gsropc.c, gsutil.c, gxacpath.c, gxclist.c,
gxcpath.c, gxi12bit.c, gxicolor.c, gxifast.c, gximono.c, gxiscale.c,
gxp1fill.c, gxpath2.c)

Gets rid of some remaining vestiges of 16-bit ints.  (gdevm1.c, gsbitops.c)

Adds procedures to register clients for notification when a font is freed.
(gxfont.h, gsfont.c)

Defines the IODevice open_device procedure as returning 1 if it opened a new
stream, 0 if it returned an existing stream.  This eliminates some awkward
externs.

Adds the concept of a stable allocator -- an allocator that allocates from
the same heap and in the same VM space as another allocator, but is not
subject to save and restore.  (gsmemory.h, gsmemraw.h, gsalloc.c,
gsmalloc.c, gsmemlok.c, gsmemret.c, gsnogc.c)

Adds some new macros to make defining new kinds of fixed-format structures
simpler.  (gsstruct.h)

Replaces the text processing restart procedure with a more general resync
procedure, which can be used to restart partway through a string.  We retain
gs_text_restart for backward compatibility and general usefulness.
(gstext.h, gxtext.h, gdevbbox.c, gstext.c, gxchar.c)

Adds the Adobe Latin glyph sets as pseudo-encodings.  (gsccode.h)

</pre>

<hr>

<h2><a name="Version5.88"></a>Version 5.88 (tester) (8/3/99)</h2>

<p>
This fileset adds the ability to reference and embed TrueType fonts in PDF
output.  Unfortunately, even though the resulting PDF files work fine with
Ghostscript itself, Acrobat Reader apparently can't handle embedded TrueType
fonts with non-standard Encodings.  We hope to fix this problem during the
6.0 beta test period.

<p>
This fileset also adds the ability to buffer X Windows output in a
client-side bitmap.  This is typically more efficient than trying to push
many small commands through the X client/server knothole, especially if
bitmap images or RasterOp are involved.

<p>
Some reported problems have been deliberately left unfixed: we will need
every minute of the 13 days before the start of the 6.0 beta test period to
implement the last few items of functionality scheduled for the 6.0 release,
and we can fix problems (but not add functionality) during the beta test
period.

<h3><a name="5.88_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- The box_device member of the bbox device is replaced by the
box_data member, with a different meaning.
	- The x_rect structure is removed; all uses are changed to
gs_int_rect.
	- gdevpstr.h is renamed spprint.h.
	- The parameter printing procedures are moved from gdevpsdf.[hc] to
spsdf.[hc].
	- Clients must now allocate gs_font* objects using gs_font_alloc or
gs_font_base_alloc, not directly with gs_alloc_struct.
	- The first (vptr) argument of enum_ptrs procedures is now const *.
EV_CONST is no longer defined.
	- The pep argument of enum_ptrs procedures is now enum_ptr_t *
rather than const void **.
	- The font glyph_pieces procedure is replaced with an option for
glyph_info.
	- The font encode_char procedure now takes an additional glyph_space
argument.
	- The o_large flag in object headers is renamed o_alone; o_lmark and
o_lsize no longer exist.  The DO_LARGE and DO_SMALL macros for enumerating
objects in a chunk are also removed.

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

Fixes problems:
	- News entries since 5.72 had a missing &lt;li&gt; in the table of
contents entry.  (doc/News.htm)
	- gs_text_params_t still referred to REPLACE_X_WIDTHS and
REPLACE_Y_WIDTHS rather than REPLACE_WIDTHS.  (gstext.h)

Clarifies that the font glyph_outline procedure must append a final moveto
for the advance width.  (gxfont.h)

Clarifies that the font enumerate_glyph procedure enumerates glyphs in an
unpredictable order.  (gxfont.h)

Documents that reference counted freeing procedures for structures with
finalization must free the structure itself first rather than last.
(gsrefct.h)

Updates documentation on building Ghostscript on MS-DOS and MS Windows.
(doc/Make.htm)

Adds some documentation on how the makefiles are / should be structured.
(doc/Source.htm)

Documents the new parameters for the X driver.  (doc/Use.htm)

Updates the language documentation to refer properly to PostScript
LanguageLevel 3 and PDF 1.3. (doc/Language.htm)

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

Fixes problems:
	- An omitted space in a makefile caused an incompatibility with the
VMS build utilities.  (lib.mak)
	- The gsindent script was omitted from the fileset.  (gsindent)
	- The core library didn't include stream.c, which is now required.
(lib.mak)
	- The workaround for the peculiarities of the Watcom compiler's
command line syntax didn't work.  (zlib.mak)
	- A DOS command line overflowed in the makefile.  We patched this by
deleting the bmpgray device from the Borland Windows platform.
(bcwin32.mak)

Provides a .lnk file required by the revised linking procedures on MS
Windows.  (gsdll32w.lnk)

Straightens out the Watcom makefiles so that it is possible to build a
Windows executable and DLL using the Watcom compiler.  This required moving
some parameters around in the other PC makefiles.  (bcwin32.mak,
msvccmd.mak, watc.mak, watcw32.mak, wccommon.mak, winint.mak, winlib.mak)

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

Fixes problems:
	- The X driver reported the wrong parameter name for errors in the
value of the WindowID or .IsPageDevice parameter.  (gdevxini.c)
	- The X driver calculated the Y window dimension incorrectly when
resizing the window if X and Y resolutions were different.  (Never happens
in practice.)  (gdevxini.c)
	- The bmpasep8 device was defined as gx_device_printer rather than
gx_device_async.  (gdevbmpa.c)
	- Some casts between signed and unsigned char * were missing.
(gdevpdff.c, gdevpdft.c)
	- The PDF writer didn't handle reencoded characters properly in
non-embedded fonts.  (gdevpdfx.h)
	- The PDF writer allocated new structures while being closed,
causing memory corruption if the close procedure was called for
finalization.  (gdevpdff.c, gdevpsd1.c)
	- The PDF writer tried to close the resource file twice.  (bug
introduced since 5.50) (gdevpdf.c)
	- The PDF writer failed to work around a bug in Acrobat 3 Reader's
Print function related to re-encoded fonts.  (gdevpdft.c)
	- The PDF writer incorrectly specified ASCII85Encode rather than
ASCII85Decode for non-binary embedded fonts.  (gdevpdff.c)
	- The PDF writer didn't handle embedded fonts with a non-standard
FontMatrix correctly.  (gdevpdft.c)
	- The PDF writer didn't handle reassigned characters correctly.
(gdevpdft.c)
	- When embedding a Type 1 font, the PDF writer didn't check that the
font contains only CharStrings (no PostScript procedures), no non-standard
OtherSubrs, and no CDevProc.  (gdevpsd1.c)
	- There was an unused label in the mswinpr2 driver.  (gdevwpr2.c)
	- The X driver didn't flush buffered output before reading back
bits from the display.  (gdevx.c)
	- The X driver still didn't set up the color mapping tables
correctly -- in particular, it didn't initialize cman.color_to_rgb before
setting up the dither ramp or cube.  This is at least the third time we have
"fixed" this problem.  (gdevxcmp.c)

Removes the remaining uses of gs_malloc, gs_free, and gs_memory_default from
Aladdin's non-display drivers.  (gdevbit.c, gdevbmp.c, gdevbmpa.c,
gdevcgm.c, gdevclj.c, gdevcljc.c, gdevdjet.c, gdevlj56.c, gdevmiff.c,
gdevpbm.c, gdevpcx.c, gdevpng.c, gdevpsim.c, gdevtfax.c, gdevtfnx.c,
gdevxalt.c)

Adds a MaxBitmap parameter to the X driver: the driver will maintain a
full-window pixmap in memory if it requires no more space than MaxBitmap.
The default value of this parameter is 0, meaning never use a client-side
bitmap.  (gdevx.h, gdevx.c, gdevxini.c, gdevxxf.c)

Moves the X device closing and get/put parameters procedures from gdevx.c to
gdevxini.c.  (gdevx.c, gdevxini.c)

Removes some remaining uses of gs_malloc and gs_free from the X driver.
Note that this requires making the X device structure properly
garbage-collectable.  (gdevx.h, gsstruct.h, gdevxini.c)

Removes the remaining uses of 'register' from the X driver.  (gdevx.c,
gdevxini.c)

Removes the remaining uses of the obsolete far_data keyword from Aladdin's
non-PC drivers.  (gdevbmp.c, gdevbmpa.c, gdevcgm.c, gdevlj56.c, gdevmiff.c,
gdevp2up.c)

Improves the X driver's algorithm for deciding when to update the screen,
and makes its parameters available for reading and setting.  (gdevx.h,
gdevx.c, gdevxini.c)

In the X driver's color mapper, improves performance slightly by replacing
multiplies and divides with shifts and table lookups in the normal case of
standard color maps.  (gdevxcmp.h, gdevxcmp.c)

Moves some filter-related code from the driver level to the stream level.
(gdevpsdf.c)

Moves some utilities for printing values in ASCII form from the driver level
to the stream level.  (devs.mak, gdevpdfx.h, gdevpstr.h [deleted], gdevps.c,
gdevpsde.c, gdevpsdf.c, gdevpsdp.c, gdevpstr.c [deleted])

Upgrades the PDF writer to handle TrueType fonts as well as Type 1.
(gdevpdfx.h, gdevpsdf.h, gdevpdff.c, gdevpdft.c, gdevpsde.c => gdevpsd1.c,
gdevpsdt.c)

Starts to implement font subsetting in the PDF writer. (gdevpdfx.h,
gdevpsdf.h, gdevpdff.c, gdevpsd1.c, gdevpsdt.c)

Partially implements WMode when writing font descriptors.  (gdevpdff.c)

Changes psdf_binary_writer so that adding the ASCII85 filter in
psdf_begin_binary doesn't require allocating any memory.  (gdevpsdf.h,
gdevpsdf.c)

Makes the PDF writer guess the Ascent and StemV values for embedded fonts
when it can't determine them by examining the font.  (gdevpdff.c)

Makes the PDF writer able to handle xshow and yshow (TEXT_REPLACE_WIDTHS).
(gdevpdft.c)

Updates code to reflect the addition of glyph_space to the font encode_char
and enumerate_glyph procedures.  (gdevpsdf.h, gdevpdff.c, gdevpdft.c,
gdevpsd1.c, gdevpsdf.c, gdevpsdt.c)

Removes some unnecessary #includes.  (gdevxres.c)

Removes the sample driver-based CRD from the variant X drivers, since this
created a pointless dependency.  (The `bit' drivers still provide this
feature, for testing.)  (gdevxalt.c)

Changes the default compatibility level of PDF output from 1.2 (Acrobat 3)
to 1.3 (Acrobat 4).  (gdevpdf.c)

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

Fixes problems:
	- A comment included an extra /*.  (gp_mswin.c)
	- The definitions for min and max in a couple of files disagreed
with the ones typically provided in system header files.  (dwimg.cpp,
dwtext.cpp)

Removes some unnecessary code related to generating temporary file names.
(gp_iwatc.c)

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

Changes the loader for TrueType fonts to keep the 'instructions', which are
required if the font is going to be written out in a PDF file.
(lib/gs_ttf.ps)

Adds some more debugging output to the TrueType font loader.
(lib/gs_ttf.ps)

Registers the MacGlyphEncoding so it can be made available to the PDF
writer.  (lib/gs_mgl_e.ps, lib/gs_ttf.ps, unixinst.mak, gsccode.h, ifont.h)

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

Fixes problems:
	- The serif and small-caps flags in the FontDescriptor were ignored
when doing font substitution.  (lib/gs_fonts.ps, lib/pdf_font.ps)
	- The ri operator was undefined.  We added a dummy definition.
(lib/pdf_ops.ps)
	- The redefinitions of restore could cause a recursion loop.
(lib/gs_fform.ps, lib/gs_lev2.ps)
	- There was an extra gsave executed for each page, causing the
graphics state stack to grow deeper and deeper, which caused problems when
wrapping up at the end of execution.  (lib/pdf_main.ps)

Implements the sh operator.  (lib/pdf_draw.ps)

Works around a bug in some PDF files generated by Adobe's PDF library (?),
which attempt to create a font Encoding array with more than 256 elements.
(lib/pdf_font.ps)

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

Fixes problems:
	- The GNU readline completion code (which Aladdin did not write) was
completely wrong.  (gp_gnrdl.c)
	- The top-level restore sometimes tried to restore global VM an
extra time, leading to memory corruption.  (bug probably introduced in 5.85)
(isave.c)
	- The glyph_ref procedure was defined in two different places
(inconsistently).  (ichar.h, zchar.c, zchar1.c)

Restructures the name table to improve cache coherence and to make it
possible to store initial name strings in ROM.  (iname.h, inamedef.h,
inames.h, inamestr.h, igc.c, iname.c, isave.c)

Changes the scanner so it doesn't copy name strings when scanning a compiled
init string.  This reduces RAM requirements by about 20K when using compiled
initialization.  (iscan.c)

Removes redundant FontBBox correction code, since this is now handled by the
library.  (zfont42.c)

Updates the Type 1 and Type 42 font code to implement the new font
procedures.  (icharout.h, zcharout.c, zchar1.c, zchar42.c, zfont1.c,
zfont42.c)

Simplifies the code that checks whether a grestore needs to do a
setpagedevice.  (zdevice2.c)

Updates code to reflect the change of the vptr argument of enum_ptrs
procedures to const *.  (igcref.c)

Updates code to reflect the change in the pep argument of enum_ptrs
procedures to enum_ptr_t *.  (igc.h, iscan.h, istruct.h, igc.c, igcref.c,
ilocate.c, iscan.c)

Updates code to reflect the addition of glyph_space to the font encode_char
and enumerate_glyph procedures.  (bfont.h, ifont.h, zbfont.c, zfont1.c,
zfont32.c, zfont42.c)

Cleans up some code details.  (idebug.h, ifunc.h, iparray.h, istream.h,
zfunc.c)

Removes some no longer needed test code.  (zfont1.c)

Updates memory manager code to reflect the change from o_large to o_alone.
(igc.c, igcref.c, ilocate.c, isave.c)

Changes the printed font substitution message to be closer to what some
Adobe products print if SHORTERRORS is defined.  (Thanks to Andrew Chilvers
for the suggestion.)  (lib/gs_fonts.ps)

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

Fixes problems:
	- The fix in 5.85 for ASCII85Encode EOLs was wrong and caused a word
of data to be dropped occasionally.  (sfilter2.c)

Moves some filter-related code from the driver level to the stream level.
(stream.h, stream.c)

Moves some utilities for printing values in ASCII form from the driver level
to the stream level.  (lib.mak, spprint.h, spsdf.h, spprint.c, spsdf.c)

Adds some more tracing output for image scaling.  (siscale.c)

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

Fixes problems:
	- The bbox device's check for whether a rectangle filled the entire
page was wrong.  (gdevbbox.c)
	- The bbox device didn't correctly handle parallelograms, triangles,
or thin lines with points specified in other than ascending order.
(gdevbbox.c)
	- The bbox device smashed the reference count of the text enumerator
it created, causing a memory leak.  (gdevbbox.c)
	- The bbox device didn't copy back all the dynamic information from
a subsidiary text enumerator, with unpredictable results.  (gxtext.h,
gdevbbox.c, gstext.c)
	- The default implementation of glyph_info for fonts incorrectly
reported that it returned values for all members, not just the ones it knew
about.  (gsfont.c)
	- The profiling implementation of memset was incorrect, leading to
memory smashing.  (gsmisc.c)
	- The default implementation of glyph_info had a memory leak.
(gsfont.c)
	- The default implementation of character rendering didn't correctly
handle the case where the character was in the cache and only the character
width was requested.  (gxchar.c)
	- Text processing didn't correctly handle REPLACE_WIDTHS if the X
and Y width arrays were different.  (The PostScript interpreter never does
this.)  (gstext.h, gstext.c, gxchar.c)
	- Compositing devices weren't initialized properly, leading to
invalid accesses.  This is the last (?) bit of the device reference counting
bug tail.  (gsalphac.c, gsropc.c)

Changes the bbox device to make the procedures for managing the bounding box
virtual, so the X device can be a subclass.  (gdevbbox.h, gdevbbox.c)

Changes the bbox device so it always adds the bounding box after doing the
drawing operation rather than before, for the benefit of the buffering X
device.  (gdevbbox.c)

Removes some remaining uses of gs_memory_default.  (gdevdrop.c)

Removes all uses of the obsolete far_data keyword from the library.
(gconf.c, gdevbbox.c)

Changes the bbox device so it doesn't run drawing algorithms twice if it has
a target that uses the default implementation.  (gdevbbox.c)

Speeds up the implementation of fill_rectangle for 16-bit memory devices.
(gdevm16.c)

Makes TrueType fonts implement the new font procedures.  (gxfont42.h,
gxmatrix.h, gsmatrix.c, gstype42.c)

Adds a gs_id to gs_font objects, so that fonts with the same name can be
distinguished reliably without relying on the address.  (gxfont.h, gsfont.c)

Makes the vptr argument of enum_ptrs procedures be const *.  This is a
long-overdue change.  (gsstype.h, gxxfont.h, gsalloc.c, gsfont.c,
gsmemory.c) ****** REDO THE CONST-BREAKING CASTS IN gsfont.c ******

Changes the pep argument of enum_ptrs from const void ** to enum_ptr_t *, to
get rid of some hacks in enum_ptrs implementations that had to construct
temporary gs_strings.  (gsstruct.h, gsstype.h, gstext.h, gsalloc.c,
gscolor2.c, gsfont.c, gsmemory.c, gstext.c)

Adds a general mechanism that provides for an arbitrary number of clients to
be notified when an event occurs.  For the moment, we only use it to notify
PDF writers when a font is about to be freed.  (gsnotify.h, gsnotify.c)

Makes fonts use the new notification mechanism to notify clients when the
font is about to be freed.  (gxfont.h, gsfont.c)

Adds a gs_text_set_cache procedure to parallel restart and retry.
(gstext.h, gxtext.h, gstext.c)

Adds a glyph_space argument to the font encode_char and enumerate_glyph
procedures, so that clients can choose between glyph names and glyph indices
in environments that use both.  (gsccode.h, gxchar.h, gxfont.h, gxfont42.h,
gsfont.c, gstype42.c, gxchar.c)

Changes the bbox device so it optionally considers white to be opaque.
(gdevbbox.h, gdevbbox.c)

Cleans up some code details.  (gshsb.h)

Adds a hack to suppress warning messages from the Watcom compiler about
testing constant values.  (stdpre.h)

Replaces the glyph_pieces font procedure with a GLYPH_INFO_PIECES option for
glyph_info.  (gxfont.h, gxfont42.h, gsfont.c, gstype42.c)

Adds a font_info font procedure, similar to glyph_info but giving
information about the font as a whole.  (gxfont.h)

In order to fix a bug in resizing large objects, gets rid of the concept of
large objects entirely, replacing it with the concept of an 'alone' object
that is guaranteed to be the only object in its chunk.  (gxalloc.h, gxobj.h,
gsalloc.c)

Adds some more tracing output for interpolated images.  (gxiscale.c)

Adds a _long parameter setting procedure to parallel _bool, _enum, and _int.
(gsparamx.h, gsparamx.c)

</pre>

<hr>

<h2><a name="Version5.87"></a>Version 5.87 (tester) (6/29/99)</h2>

<p>
In this fileset, the pdfwrite device finally handles general Type 1 fonts,
and can write them in both embedded and non-embedded form.  This fileset
also contains a few more changes to the text API, and some incompatible
changes to the gs_font procedure vector: more such changes are likely.  It
also fixes a couple of long-standing pdfmark bugs.

<p>
NOTE: there are known problems in PDF output with non-embedded fonts (fonts
represented only by a descriptor): some characters will be missing, and
because of bugs in Acrobat's Print function, even more characters will be
missing or wrong when printing from Acrobat.  We will fix our problems, and
work around Acrobat's bugs, in the next couple of filesets.

<h3><a name="5.87_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- Text enumerators now have a release procedure.
	- gx_device_text_begin no longer stores its arguments into the
enumerator: the driver text_begin procedure must do this.
	- The argument list for the font encode_char procedure no longer
includes the enumerator, and the second argument is now a gs_char rather
than a gs_char *.
	- The font next_char procedure is removed.  (It has been obsolete
for a while.)  The next_glyph procedure is renamed next_char_glyph.
	- The first argument of the font init_fstack, build_char, and
next_glyph procedures is changed from gs_show_enum * to gs_text_enum_t *.
	- gx_font_stack[_item] is renamed gx_font_stack[_item]_t.
	- New font procedures have been added, of which two (enumerate_glyph
and glyph_outline) are required.  The font procedure vector has been
reorganized.
	- The Type 1 font next_glyph procedure is replaced by the gs_font
enumerate_glyph procedure.
	- psdf_embed_type1_font is renamed psdf_write_type1_font, and has
an additional argument.
	- psdf_alloc_param_printer takes slightly different arguments;
print_binary_ok and print_ASCII85_ok are now upper-case.

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

Reorganizes the driver API documentation slightly, documents the fact that
get_alpha_bits and draw_line are obsolete, and documents the driver text
API.  (doc/Drivers.htm)

Documents an additional Irix configuration where the compiler doesn't work.
(doc/Make.htm)

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

Moves the %pipe% IODevice into lib.mak, since it is now included on Windows
as well as Unix.  (lib.mak, unix-aux.mak)

Adds the bmpgray driver to all platforms that include the other BMP drivers.
(bcwin32.mak, msvc32.mak, os2.mak, unix-gcc.mak, watc.mak, watcw32.mak)

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

Fixes problems:
	- The PS and PDF writers didn't maintain the font embedding lists
correctly.  (gdevpsdp.c)
	- The CreationDate in PDF output was always set to the current date,
and couldn't be set with a pdfmark.  We now don't set CreationDate at all,
since it is supposed to be the creation date of the original document, not
of the PDF file.  (gdevpdfm.c, gdevpdfu.c)
	- The Producer in PDF output couldn't be set with a pdfmark.
(gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfu.c)
	- pdfmarks with /Action /GoTo incorrectly retained the Action key.
(gdevpdfm.c)
	- pdfmarks didn't substitute /Dest => /D or /File => /F correctly.
(gdevpdfm.c)

Updates the PDF writer to use the new text API rather than the show
pseudo-parameter.  (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, gdevpdft.c)

Changes pdf_open_document so that it opens the document even if some
resources have been allocated.  (gdevpdf.c)

Splits off pdfwrite utilities from top-level control, since the file was
getting too big.  (gdevpdfx.h, gdevpdf.c, gdevpdfu.c)

When writing PDF, avoids resetting the word spacing parameter if the string
doesn't contain any spaces, and the character spacing parameter if the
string has no more than 1 character.  (gdevpdft.c)

Splits off PDF font handling from text handling, since the file was getting
too big.  (gdevpdfx.h, gdevpdff.c, gdevpdft.c)

Implement both embedded and non-embedded fonts beyond the base 14 in the PDF
writer.  This code doesn't work very reliably yet.  (gdevpdfx.h, gdevpdff.c,
gdevpdft.c)

Adds a bmpgray driver that produces 8-bit gray-scale output.  (devs.mak,
gdevbmp.c)

Updates the PDF writer for changes in the gs_font procedure vector.
(gdevpdff.c, gdevpdft.c)

Updates the Type 1 font writer for changes in the gs_font procedure vector,
and adds some output options.  (gdevpsdf.h, gdevpsde.c)

Changes the printing parameter list implementation to take all of its
parametric arguments in the params structure, and changes the names of the
options.  (gdevpsdf.h, gdevpsde.c, gdevpsdf.c, gdevpdff.c, gdevpdfi.c,
gdevpdfu.c)

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

Fixes problems:
	- Indexed color spaces didn't allow the base space to be an indirect
reference.  (lib/pdf_draw.ps)
	- The CS and cs operators didn't accept a literal color space name
(as opposed to a color space resource name).  (lib/pdf_draw.ps)
	- Some PDF 1.2 files had a SM entry in graphics state dictionaries,
even though this is not documented and requires a LL3 interpreter.
(lib/pdf_draw.ps)
	- Generated font names included a % character, which could cause
problems for ps2pdf.  (lib/pdf_font.ps)

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

Fixes problems:
	- The calculation of the final index when enumerating the pointers
in a context state was incorrect.  (source bug only, no effect on execution)
(icontext.c)

Updates the interpreter's glue code for the changes in the PDF writer.
(lib/gs_pdfwr.ps)

Updates a client to use gs_font_alloc.  (zbfont.c)

Updates clients for changes in the gs_font procedure vector.  (zbfont.c,
zchar1.c, zfont0.c, zfont1.c, zfont32.c)

Updates a client for the change to psdf_write_type1_font.  (zfont1.c)

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

Fixes problems:
	- Some code used rc_decrement_only instead of gx_device_retain.
(Stylistic bug only.)  (gschar.c)
	- The finalize procedure for the character cache device could get
unset and/or the retained flag cleared, leading to a reference count not
getting decremented.  (gxccman.c)
	- Allocating a show enumerator didn't clear the show_gstate member.
(Probably no effect in practice.)  (gschar.c)
	- Cleaning up at the end of text processing was not consistent and
sometimes didn't get done. The old API used explicit and separate client
allocation (gs_show_enum_alloc), release (gs_show_enum_release), and freeing
(gs_free_object); release, but not free, was automatic at the end of
processing (in show_finish).  The new API has allocation in gs_text_begin or
gx_device_text_begin, no implicit release or free, and a single
gs_text_release call to handle both release and free.  Reconciling these
required adding an auto_release flag in the gs_show_enum structure to
indicate which API was used to create it, and a release procedure.  (The
auto_release flag is only needed for backward compatibility with clients
that use the old API.  Ghostscript itself no longer has such clients, but
the PCL interpreters do.)  (gxchar.h, gxtext.h, gdevbbox.c, gschar.c,
gstext.c, gxchar.c)
	- We were burned once again by gcc's acceptance of private/public
procedure mismatches.  (gxchar.c)
	- A line break was missing between the return type and a procedure
name.  (gsstate.c)
	- Show enumerators had an incorrect GC descriptor.  (gxchar.c)
	- Text enumerators didn't terminate their list properly.  (gstext.c)

Adds a debugging procedure that finds all the pointers to an object.  This
uses the GC's pointer enumeration procedures, so it will only work if all
structures have correct GC descriptors.  (Of course, we think this is true
of all of Ghostscript.)  The current implementation doesn't trace refs.
(gsalloc.c)

Removes remaining references from gxchar.c to procedures defined in
gschar.c.  The standard Ghostscript build now no longer needs gschar.c,
although we will keep it for the moment for backward compatibility.
(gschar.c, gxchar.c)

Removes an obsolete reference to gs_show_enum.  (gstype1.h)

Adds definitions for the built-in encoding indices.  (gsccode.h, gxfont.h,
gxxfont.h)

To make text_begin implementations callable, requires them, rather than
gx_device_text_begin, to save their parameters in the enumerator structure.
(gxtext.h, gstext.c, gxchar.c)

Adds a TEXT_DO_CHARWIDTH alternative to the text operation, to just advance
the current point by the character width (stringwidth rmoveto).  (gscpm.h,
gstext.h, gxchar.c, gxpath.c)

Adds procedures to allocate and initialize fonts.  (gxfont.h, gsfont.c)

Starts to revise the gs_font procedure vector to create a real "font socket"
API, adding several new procedures.  This is a NON-BACKWARD-COMPATIBLE
change, and there probably are more to come.  (gxchar.h, gxfont.h, gsfont.c,
gstext.c, gxchar.c)

Moves the Type 0 font stack from gs_show_enum to gs_text_enum_t, and renames
its types to gx_font_stack_[item_]t.  Also moves cmap_code.  (gxchar.h,
gxtext.h, gschar0.c, gstext.c, gxchar.c)

Moves the glyph enumeration procedure from Type 1 fonts to general fonts,
changing its name to enumerate_glyph.  (gxfont1.h)

Changes the debugging code for reference counting to call procedures, to
allow better breakpointing.  (gsrefct.h, gsmemory.c)

</pre>

<hr>

<h2><a name="Version5.86"></a>Version 5.86 (tester) (6/14/99)</h2>

<p>
This fileset includes the first batch of changes for the new driver-based
text API.  Unfortunately, a few of them are non-backward-compatible.
WARNING: This API is UNSTABLE and should not be used yet.  This includes the
APIs and structures in gxtext.h, and to a lesser extent those in gstext.h.

<h3><a name="5.86_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- The default initialization of fonts now sets next_glyph rather
than next_char.
(Library)
	- The font argument of the driver text_begin procedure is no
longer declared as const.
	- Text enumerators now have a is_width_only and current_width
procedures; the restart procedure is renamed retry, and there is a new
restart procedure that does something different.
	- The scale member of gs_text_enum_t is renamed log2_scale.
	- gs_show_restore_font is removed.
	- The current_char, current_glyph, width, and log2_current_scale
members of gs_show_enum are removed (replaced by members of gs_text_enum_t).
	- The current_width member of gs_text_enum_t is removed.
	- Replaces TEXT_REPLACE_{X,Y}_WIDTHS with a single
TEXT_REPLACE_WIDTHS.

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

Fixes a number of outdated URLs.  (doc/Devices.htm, doc/Fonts.htm,
doc/Install.htm, doc/Language.htm, doc/Make.htm, doc/New-user.htm)

Documents the name change from gs_iso_e.ps to gs_il1_e.ps.
(doc/Psfiles.htm)

Documents the fact that a double % may be needed on MS systems.
(doc/Use.htm)

Documents that reversepath discards a trailing moveto, for compatibility
with Adobe implementations.  (gxpath2.c)

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

Fixes problems:
	- Some punctuation was omitted that affects builds on VMS systems.
(gs.mak)
	- 'make install' didn't install doc/History5.htm.  (unixinst.mak)
	- The Borland makefile put some generated files in the top-level
directory rather than the build directory.  (bcwin32.mak)

Updates the Unix install script for the name change of gs_iso_e.ps.
(unixinst.mak)

Moves the GNU-licensed drivers to a separate makefile.  (contrib.mak,
gnu/src/gnudevs.mak)

Adds pipe.dev to the BC++, MSVC++, and OS/2 (GCC/EMX) platforms.
(bcwin32.mak, dvx-gcc.mak, msvc32.mak, msvclib.mak)

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

Fixes problems: - The usage message for pdf2ps was incorrect.  (lib/pdf2ps,
	lib/pdf2ps.bat)

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

Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
and RELOC_PTRS procedures.  (gdevpdf.c, gdevpdfo.c)

Adds a user-contributed driver for the Oki Data OkiPage 4w+ LED printer.
This is a GPL'ed driver.  (contrib.mak, gnu/src/gdevop4w.c)

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

Adds a %handle% IODevice (mshandle.dev) to recognize file names of the form
%handle%NNNNNNNN under MS Windows.  GSview uses this feature in place of
pipes, which are an open industry standard not supported by MS Windows.
(msvc32.mak, winlib.mak, gp_mshdl.c)

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

Adds the ISO 8859-2 encoding to the stock of built-in encodings.
(lib/gs_il2_e.ps, lib/gs_iso_e.ps => lib/gs_il1_e.ps)

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

Fixes problems:
	- Using a colored pattern with an uncolored Pattern color space
caused an error.  (lib/pdf_draw.ps)
	- Embedded CIDFontType 2 fonts didn't work, and embedded TrueType
fonts did an extra definefont.  (lib/gs_ttf.ps, lib/pdf_font.ps,
lib/pdf_ops.ps) ****** IN PROGRESS ******

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

Fixes problems:
	- Some files hadn't been updated for the removal of the gs_imemory
static.  (int.mak, gp_gnrdl.c, imain.c, ztrap.c)
	- %statementedit could append a spurious character if the last
character of the statement was not whitespace.  (bug probably introduced in
5.8x) (ziodev.c)
	- The show operators didn't properly handle the special case of
executing within a cshow procedure for a non-CID font.  (zchar.c)
	- cshow applied to a composite font didn't scale the current font
correctly (in fact, at all).  (zcfont.c)
	- If an error occurred within the procedure called by
resourceforall, it wasn't reported.  (lib/gs_res.ps)
	- flushfile and closefile didn't correctly handle filters that only
write a fixed amount of data.  (zfileio.c)
	- cshow didn't restore the font reliably after executing the
procedure.  (ichar.h, zcfont.c, zchar.c)
	- An execstackoverflow error might temporarily leave the execution
stack in an invalid state.  (interp.c)

Cleans up some macros.  (iname.c, isave.c, iscan.c)

Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
and RELOC_PTRS procedures.  (icontext.c, iname.c, isave.c, iscan.c,
istack.c, zcontext.c, zfproc.c)

Adds a run-time warning message if gp_gnrdl.c is included in a non-GNU
build.  (gp_gnrdl.c)

Converts clients to use the gs_text procedures that replace the gs_show
procedures, and to use gs_text_enum_t rather than gs_show_enum as the
enumerator type.  (ichar.h, zbfont.c, zcfont.c, zchar.c, zchar1.c,
zchar32.c, zchar42.c, zcharout.c, zcharx.c, zfont.c, zfont0.c, zfont1.c,
zfont32.c, zimage.c, zimage2.c)

Updates the initialization code for the name change of gs_iso_e.ps.
(lib/gs_init.ps)

Splits off the definitions relating to name indices, in anticipation of
defining some name indices statically.  (inamedef.h, inameidx.h, iname.c)

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

Fixes problems:
	- The pixel-difference filters didn't initialize the previous sample
to 0 at the beginning of each row.  (spdiff.c)
	- The CCITTFaxDecode filter didn't correctly handle the case where
the last code of a row occurred less than 7 or 8 bits before the end of the
input stream.  (scf.h, shc.h, scfd.c)
	- Flushing filters didn't work.  (stream.c)
	- The DCTEncode filter gave an error if asked to write to a string
with less than 100 bytes of free space left when the end of the input data
was reached.  (sdct.h, sdcte.c)

Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
and RELOC_PTRS procedures.  (stream.c)

Changes the ASCII85Encode stream to reliably insert a newline at least once
every 80 characters, rather than unreliably after at most 80 characters of
data.  (sfilter2.c)

Cleans up some formatting.  (stream.c)

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

Fixes problems:
	- A client wasn't updated for the change in the declaration of
gx_dht_proc.  (bug introduced in 5.84) (genht.c)
	- When rendering a 12-bit-per-sample color image, the device color
wasn't initialized, possibly causing a memory access error when comparing
the current color with the previous one.  (gxi12bit.c)
	- arch_floats_are_IEEE was incorrectly defined as
arch_floats_are_ieee.  (bug introduced in 5.83) (std.h)
	- Decoding of IEEE floats on non-IEEE systems was wrong.  (ibnum.c)
	- The fast case of masked images in Pattern color spaces didn't
work.  (bug introduced since 5.50) (gxifast.c)
	- cshow gave an error if there was no current point.  (gxchar.c)

Replaces TEXT_REPLACE_{X,Y}_WIDTHS with a single TEXT_REPLACE_WIDTHS.
(gstext.h, gstext.c)

Cleans up some macros.  (gdevddrw.c, gsfont.c, gsht1.c)

Removes all remaining uses of #define'd casts in connection with ENUM_PTRS
and RELOC_PTRS procedures.  (gdevddrw.c, gdevplnx.c, gsalloc.c, gschar.c,
gscolor.c, gscolor2.c, gscrd.c, gscsepr.c, gscspace.c, gsdevice.c, gsdsrc.c,
gsfcmap.c, gsfont.c, gsfont0.c, gsht1.c, gshtscr.c, gsimage.c, gspcolor.c,
gsptype1.c, gsstate.c, gstext.c, gxcmap.c, gxht.c, gxipixel.c, gxmclip.c,
gxtype1.c)

Adds gs_c_param_list_write_more, to switch a C parameter list back to write
mode without clearing it.  (gsparam.h, gscparam.c)

Adds gs_grestore_only, to do a grestore without requiring 2 entries on the
graphics state stack.  (gsstate.h, gsstate.c)

Completes a first bridge between the new driver text_begin procedure and the
existing text API defined in gschar.h.  The changes are backward-compatible
for both clients of the APIs and (the few) implementors of text_begin,
except that the font argument of text_begin is no longer const.  Note that
gschar.h is no longer used by any client, and in fact is deprecated.
(gschar.h, gstext.h, gxfcache.h, gxtext.h, gzstate.h, gdevbbox.c,
gdevnfwd.c, gschar.c, gsfont.c, gsfont0.c, gstext.c)

Mostly splits off the existing text procedures from the default
implementation of the new text facilities.  (lib.mak, gxchar.h, gschar.c,
gxchar.c)

Makes the structure descriptor for gs_state public, for testing in gxchar.c.
(gzstate.h, gsstate.c)

Adds is_width_only and current_width procedures to the text enumerator;
renames restart as retry, and adds a restart procedure for restarting with
different parameters.  (gstext.h, gxtext.h, gdevbbox.c, gschar.c, gstext.c,
gxchar.c)

Makes the masks for the subgroups of text operation parameters public.
(gstext.h)

Removes members of gs_show_enum that are superseded by members of
gs_text_enum_t: current_char, current_glyph, width, and log2_current_scale.
(gxchar.h, gxchar.c)

Adds aliases for popen and pclose under WIN32.  (pipe_.h)

Moves gs_incachedevice from gschar.h to gsstate.h.  (gschar.h, gsstate.h)

</pre>

<hr>

<h2><a name="Version5.85"></a>Version 5.85 (tester) (5/29/99)</h2>

<p>
This fileset removes a few more writable statics, and adds uniform support
for %filedevice%filename syntax in OutputFile.  Unfortunately, removing the
static that held the interpreter's allocator group was almost as much of an
upheaval as removing the statics for the interpreter stacks.

<h3><a name="5.85_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- context_state_alloc now takes an additional parameter, as do
obj_cvp, make_packed_array, parse_real_file_name, ref_stack_store,
sread/write_proc, terminate_file_name, and a number of other internal
interpreter procedures.
	- scan_number now does not mark the result as new.
	- The _param_list_read/write procedures now take an additional
gs_ref_memory_t * parameter.
	- It is no longer possible to store pointers to the interpreter's
allocator group (gs_dual_memory_t) in structures or variables across a
garbage collection.
	- The save_level instance variable is moved from gs_dual_memory_t
to gs_ref_memory_t.
	- op_show_finish_setup can now fail.
	- fname.h is renamed gsfname.h; the procedure names and parameters
for %device%name file names are changed.
	- gx_imager_stroke_add now takes an additional argument; a NULL
value for the device argument of gx_stroke_path_only is no longer valid.
	- gx_make_clip_translate_device now takes a memory parameter, and no
container parameter; gx_make_clip_device no longer takes a container
parameter; gx_mask_clip_initialize and tile_clip_initialize now take a
memory parameter.

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

Fixes problems:
	- The language documentation still referred to outside clipping.
(doc/Language.htm)

Documents the new curve join graphics state parameter.  (doc/Language.htm)

Documents the fact that the OutputFile device parameter now supports the
%device%file syntax.  (gp.h, doc/Use.htm)

Documents the licensing problems related to GNU readline.  (int.mak,
unix-gcc.mak, gp_gnrdl.c)

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

Fixes problems:
	- The bmpa devices needed gdevppla.  (bug introduced in 5.84)
(devs.mak)
	- The bmpa devices were accidentally included in the DEVICE_DEVS
setting in the distributed fileset.  (unix-gcc.mak)
	- msvclib.mak was missing some definitions.  (msvclib.mak)

Adds a CC_NO_WARN macro for those few files that produce tons of warnings
that we can't work around.  (bcwin32.mak, dvx-gcc.mak, msvccmd.mak,
openvms.mak, openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak,
unixtrad.mak, watcw32.mak, wccommon.mak, devs.mak, lib.mak, zlib.mak)

Adds version.mak to msvclib.mak, so library clients can track the version.
(msvclib.mak)

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

Fixes problems:
	- -replace didn't work if it was the last item of a module
description.  (genconf.c)

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

Fixes problems:
	- CCITTFax-compressed bitmaps sometimes used both a Rows value and
an end-of-block indicator, which some PostScript implementations don't
handle properly.  (gdevpsdf.h, gdevps.c, gdevpsdf.c)

Removes an unused procedure and macro.  (gdevlj56.c)

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

Fixes problems:
	- The interpreter cached objects even if the reference had the wrong
generation number, causing errors if a correct reference occurred later.
(lib/pdf_base.ps)
	- Embedded TrueType fonts using the Macintosh encoding sometimes
caused an error.  (lib/gs_ttf.ps)

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

Fixes problems:
	- Multiple contexts were broken (probably since 5.80).  Fixing this
required adding a parameter to context_state_alloc, to provide systemdict.
(icontext.h, icontext.c, interp.c)
	- setpagedevice didn't accept the 4-element PageSize values that
appear in the InputAttributes dictionary.  (zmedia2.c)
	- BuildChar/BuildGlyph was "short circuited" even in some cases
where it wasn't safe to do so.  (ichar.h, zchar.c, zcharout.c)
	- The show operators didn't properly handle the special case of
executing within a cshow procedure.  (ichar.h, zcfont.c, zchar.c, zcharx.c)
	- The -dDOINTERPOLATE switch had gotten broken somehow.
(lib/gs_init.ps)
	- The is_identity flag wasn't properly cleared when loading cached
CIE mapping values, causing incorrect output.  (zcie.c)

Removes the writable static for the context scheduler.  (zcontext.c)

Removes the writable static for the interpreter's group of allocators
(gs_imemory).  This too turned out to be a massive change with many
NON-BACKWARD-COMPATIBLE changes required in internal procedures.  (bfont.h,
files.h, fname.h, ialloc.h, ifunc.h, imemory.h, interp.h, iparam.h,
iparray.h, ipcolor.h, isave.h, iscannum.h, istack.h, istream.h, iutil.h,
store.h, ialloc.c, icontext.c, idebug.c, idict.c, iinit.c, imain.c,
imainarg.c, interp.c, iparam.c, ireclaim.c, isave.c, iscan.c, iscanbin.c,
iscannum.c, isstate.h, istack.c, iutil.c, zarray.c, zbfont.c, zcontext.c,
zdict.c, zfname.c, zdps.c, zdps1.c, zfcmap.c, zdict.c, zfile.c, zfilter.c,
zfont.c, zfont0.c, zfproc.c, zfreuse.c, zfunc.c, zfunc0.c, zfunc3.c,
zgeneric.c, zht2.c, ziodev.c, ziodev2.c, zpacked.c, zpcolor.c, zshade.c,
zupath.c, zvmem.c)

Adds a gs_memory_t * argument to obj_cvp.  This is part of the work for
removing the gs_imemory static: we note it separately because it affects
code beyond the interpreter.  (iutil.h, gp_gnrdl.c, iutil.c, zfileio.c)

Updates interpreter code for the addition of new_mask, test_mask, and
save_level to gs_ref_memory_t, and the removal of save_level from
gs_dual_memory_t.  (ialloc.h, ialloc.c, isave.c)

Adds a gs_ref_memory_t * argument to all the _param_list_read/write
procedures.  (iparam.h, iparam.c, zcrd.c, zdevice.c, zfdctd.c, zfdcte.c,
zfdecode.c, zfilter2.c, ziodev2.c, zusparam.c)

Changes the hack in file_alloc_stream that determines whether a gs_memory_t
* is actually a gs_ref_memory_t *.  The former code tested specifically
whether the allocator was one of the current interpreter allocators; the new
code simply tests the procedure vector.  We aren't 100% sure that this
change will work reliably.  (zfile.c)

Factors common code out of isave.h and store.h.  (idosave.h, isave.h,
store.h)

Removes the reclaim_data member of gs_dual_memory_t, since it is no longer
useful.  (imemory.h, ialloc.c, ireclaim.c)

Makes the default InputAttributes and OutputAttributes elements of page
device dictionaries writable and (if possible) allocated in local VM, to
work around bugs in the output of Word Perfect.  (lib/gs_setpd.ps)

Modifies the interpreter's error printout to indicate whether dictionaries
on the stack(s) are writable.  (lib/gs_init.ps)

Moves support for %device%name file naming into the library.  (fname.h,
zfile.c, zfname.c [deleted])

Adds interpreter support for the new curve join graphics state parameter.
(zgstate.c)

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

Fixes problems:
	- bbox_fill_path device didn't interact with compositors correctly.
(This problem had no practical effect.)  (gdevbbox.c)
	- kshow didn't check for CID fonts.  (gschar.c)
	- The bbox and ImageType 3 image enumerators had incorrect GC
descriptors, possibly causing memory-related crashes.  (gsstruct.h,
gdevbbox.c, gximage3.c)
	- gx_make_clip_[translate_]device took an obsolete container
parameter.  (gxcpath.h, gsshade.c, gxccache.c, gxfill.c, gxstroke.c)
	- Non-transient clipping devices were used for image clipping, but
the API didn't support creating them.  (gxcpath.h, gxclip.c, gximage3.c,
gxipixel.c)
	- Some devices were created without setting their memory member,
which caused the GC not to trace pointers to them.  (gxmclip.h, gxclip2.h,
gxclip2.c, gximage3.c, gxmclip.c, gxp1fill.c)
	- The bbox device didn't handle ImageType 3 images correctly.
(gdevbbox.c)
	- When the bbox device passed a stroke operation to the library, it
didn't pass the device, causing absolute-length dots to render incorrectly.
Fixing this required adding a device parameter to the gx_imager_stroke_add
procedure.  (gxpaint.h, gdevbbox.c, gxpaint.c)
	- The counter control OtherSubrs (12 and 13) weren't implemented.
(This probably had no effect.)  (gstype1.c)
	- Type 1 stem hints with negative widths didn't work properly.
(gxhint2.c)
	- The debugging output for hintmask and cntrmask printed the vstem
and hstem counts in the wrong order.  (gstype2.c)
	- If the value of the OutputFile device parameter was too long,
the result could be memory corruption rather than a rangecheck error.
(gsdevice.c)
	- The dash pattern pointer in the saved imager state of a band list
writer could point inside the writer structure, confusing the garbage
collector.  (gxclist.h, gxclpath.c)

Adds new_mask, test_mask, and save_level instance variables to
gs_ref_memory_t.  This too is part of the gs_imemory work: we note it
separately because it is the only piece of this work that affects the
library.  (gxalloc.h, gsalloc.c)

Makes cntrmask at the beginning of a charstring act like vstemhm + cntrmask,
as with hintmask.  This is not documented, but we see it used this way in
Type 2 CharStrings.  (gstype2.c)

Cleans up formatting and macros.  (gp.h)

Speeds up the bounding box device by skipping path filling if the entire
path falls within the already-accumulated bounding box, and by defining the
device as 8-bit gray to avoid halftone computation.  (gdevbbox.c)

Adds a procedure, gs_show_use_glyph, for implementing the show-in-cshow
hack.  (gschar.h, gschar.c)

Moves support for %device%file file naming into the library.  (lib.mak,
gsfname.h, gxiodev.h, gdevpipe.c, gsfname.c)

Makes the OutputFile device parameter recognize %device%file syntax, as well
as "-" and (on platforms that support pipes) |command.  (gp.h, gxdevice.h,
gdevprn.c, gsdevice.c, gp_unix.c)

Adds a separate graphics state parameter to indicate how to treat joins
between segments of a flattened curve, for compatibility with Adobe
interpreters (which apparently always use bevel joins).  (gsline.h,
gxclpath.h, gxline.h, gsline.c, gsstate.c, gxclpath.c, gxclrast.c,
gxstroke.c)

Changes code slightly, introducing an unnecessary assignment, in order to
suppress a compiler warning.  (gxclpath.c)

Tweaks the CIE_LOAD_CACHE_BODY macro slightly.  (gscie.c)

</pre>

<hr>

<h2><a name="Version5.84"></a>Version 5.84 (tester) (5/19/99)</h2>

<p>
This fileset completes the implementation of planar rendering, and fixes a
few more bugs, some of them surprisingly old.

<h3><a name="5.84_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Drivers)
	- The dopath vector device implementation procedure was changed to
take an optional matrix argument.
(Library)
	- The internal memory__need_ macros are changed to upper case.

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

Fixes problems:
	- There was a duplicate entry for GENINIT_XE in the Watcom makefile.
(wctail.mak)

Adds the duplex-capable LaserJet drivers (ljet3d and ljet4d) to all standard
configurations.  (bcwin32.mak, dvx-gcc.mak, msvc32.mak, openvms.mak,
openvms.mmk, os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak,
watcw32.mak)

Adds a PROFILE compilation switch, similar to DEBUG, to work around the fact
that gprof under Linux doesn't count time in memset, memcpy, or other C
library procedures.  PROFILE will substitute our own versions of memset,
memcpy, and memmove.  Currently, this switch is supported only on Unix.
(unix-end.mak)

Defines a new makefile macro, SYNC, that gives the module name for thread /
synchronization facilities; makes async.dev include this module.  This is
posync on Unix and VMS platforms, winsync on MS Windows and OS/2 platforms.
(bcwin32.mak, dvx-gcc.mak, lib.mak, msvc32.mak, msvclib.mak, openvms.mak,
openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak,
watc.mak, watclib.mak, watcw32.mak)

Splits off the rules common to the 3 Windows makefiles (watc, watclib,
winlib) into a separate file, defining new modules winplat.dev and
winsync.dev.  (watc.mak, watclib.mak, winlib.mak, winplat.mak)

Removes -Wcast-align from the gcc switches, since this produces huge numbers
of warnings that we will certainly never get rid of.  (unix-gcc.mak)

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

Enhances the ps2pdf script with a patch contributed by Jim Avera
(avera@fjst.com) so that it can be used as a pipe by specifying "-" for the
input and/or output file.  (lib/ps2pdf)

Modifies ps2ascii to handle landscape pages better.  (lib/ps2ascii.ps)

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

Fixes problems:
	- PDF output that used Pattern colors on more than one page failed
to include the color space resource in the resource dictionaries of pages
other than the first.  (gdevpdf.c)
	- The PDF writer emitted bitmap patterns inverted in Y.
(gdevpdfi.c)
	- The PCL XL driver's GC descriptor had become incorrect, causing
crashes.  (gdevpx.c)
	- The pdfwrite driver could still emit coordinates too large for
Acrobat Reader to handle, for stroked lines with an unusual CTM.
(gdevpdfd.c)
	- The pxl drivers emitted invalid output for dashed lines.
(gdevpx.c)
	- The [e]pswrite and pxl drivers scaled line widths and dash
patterns incorrectly.  Fixing this properly involved refactoring the
handling of scaling for paths, and removing gdev_vector_stroke_path.
(gdevpsdf.h, gdevvec.h, gdevpdfd.c, gdevps.c, gdevpsdf.c, gdevpx.c,
gdevvec.c)
	- The lj5 drivers didn't pad images to a multiple of 4 bytes per
scan line, producing invalid PCL XL output.  (We don't see how they could
ever have worked, in fact.)  (gdevpcl.h, gdevlj56.c, gdevpcl.c)

Adds a user-contributed driver for the DEClaser 2100.  This is a GPL'ed
driver.  (contrib.mak, gnu/src/gdevln03.c)

Makes the UsePlanarBuffer parameter, and planar buffering capability, from
the PPM devices available to general printer devices, but in a separate
module to avoid making all printer devices require gdevmpla.c.  (gdevppla.h,
gdevpbm.c, gdevppla.c)

Adds a UsePlanarBuffer parameter to the async BMP drivers, for testing.
(gdevbmpa.c)

Removes the comment about the instability of the "vector" driver interface.
(gdevvec.h, gdevvec.c)

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

Splits off the Windows thread and synchronization primitives into a new file
and a new module, winsync.dev.  (watc.mak, watclib.mak, winlib.mak,
gp_win32.c, gp_wsync.c)

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

Fixes problems:
	- As usual, gcc failed to flag some signed/unsigned char mismatches.
(gp_gnrdl.c, iutil.c)

Moves the indexed color space cache lookup procedure from the interpreter to
the library.  (zcsindex.c)

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

Fixes problems:
	- If a 2-D CCITTFax stream ended with 1 or 2 "vertical 0" codes,
those codes would be ignored.  (scfd.c)

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

Fixes problems:
	- gsnogc.h contained an extern for gs_gc_reclaim rather than for
gs_nogc_reclaim.  (gsnogc.h)
	- Banded images in Indexed color spaces rendered incorrectly.
(gximage.c)
	- A function declared some arguments as float rather than floatp.
(gshtx.h, gshtx.c)
	- As usual, gcc failed to flag some public/private mismatches.
(gdevmrun.c)
	- The tracing output for monobit images printed 8 bits per pixel
rather than 1 bit per pixel.  (gxidata.c)
	- A Pn macro was used in a header file that didn't include stdpre.h.
(gscdefs.h, gconf.c, genht.c, gxhtbit.c, gxclrast.c)
	- get_bits_rectangle for the planar memory device didn't flush the
last byte of each row.  (gdevmpla.c)
	- When banding, Indexed color spaces using a procedure rather than a
lookup table caused a crash.  (gxcolor2.h, gscolor2.c, gxclrast.c)
	- When filling a region with a Pattern with a rotated matrix, some
parts of the region could be missed.  (bug introduced by a fix in 5.38)
(gxp1fill.c)

When compiling with gcc, replaces inline with __inline__ to get rid of a
potential warning.  (stdpre.h)

Adds our own implementations of memset, memcpy, and memmove, to work around
the fact that gprof under Linux doesn't count time in C library procedures.
(memory_.h, string_.h, gsmisc.c)

Finishes implementing planar rendering for printer / banded devices.
(gdevprn.h, gxclist.h, gxdevbuf.h, gdevprn.c, gxclread.c)

</pre>

<hr>

<h2><a name="Version5.83"></a>Version 5.83 (tester) (5/13/99)</h2>

<p>
This fileset was driven mostly by commercial licensee demands; it doesn't
fix most of the problems reported in 5.82.  It features smaller threshold
halftones, the ability to store halftones in ROM, and a nearly complete
implementation of a planar memory device.

<p>
Items pushed off to the next fileset:
<ul>
<li>	- Finish multi-planar band buffers (requires changing
gdev_prn_render_lines to be based on memory devices rather than buffer
pointers).
<li>	- For Adobe compatibility, change stroking so that it always
uses
bevel joins between the segments of a curve (this directly contradicts the
Red Book, but it's what Adobe interpreters do).
<li>	- Implement an IdiomSet for Corel Draw fountain fills?
(idioms.ps)
<li>	- Change shading so it doesn't install a clip device (make this
a
driver procedure instead), because that prevents clist_fill_path from being
called.
</ul>

<h3><a name="5.83_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- The spaces.indexed member of a vm_spaces structure has been
renamed spaces_indexed (a macro).
	- The gs_reclaim procedure is changed to a macro, GS_RECLAIM.
(Library)
	- The bits member of a halftone order is now called bit_data, and is
opaque; halftone orders are now "objects"; gx_ht_alloc_[ht_]order now take
an additional argument.
	- The architectural values in arch.h are now all upper-case.
(std.h defines lower-case synonyms for backward compatibility.)
	- The buffer device procedures for printer devices are now collected
in a structure; this also changes the parameters of clist_init_params.
	- The parameters of the buffered device setup_buf_device procedure
are changed.
	- gx_path_copy_reducing now takes an additional argument, an imager
state, for flattening stroked paths.
	- Memory devices now must be created by copying a prototype device,
rather than by initializing individual members, even if they are only being
used for limited purposes.

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

Documents the new facility for compiled halftones, and the old one for
compiling initialization files.  (doc/Make.htm)

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

Adds a utility for compiling halftones into the executable.  Also defines
the dependency lists for the auxiliary programs in lib.mak and int.mak,
rather than replicating them for every platform.  (bcwin32.mak,
dvx-tail.mak, gs.mak, int.mak, lib.mak, msvctail.mak, openvms.mak,
openvms.mmk, os2.mak, unix-aux.mak, wctail.mak, genht.c)

Adds support for halftone "resources" in the makefile.  (genconf.c)

Adds code to determine the primary and secondary CPU cache sizes
empirically.  (genarch.c)

Changes the architecture definition macros from lower to upper case, with
lower-case synonyms in std.h for backward compatibility.  (gsjconf.h, std.h,
genarch.c)

Changes the ps2ai utility so that jtxt3 can be set from the command line, to
allow pstoedit to generate AI3-compatible output.  (lib/ps2ai.ps)

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

Adds some optional library modules to the base library compilation list, so
that compilation errors won't slip through.  (lib.mak)

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

Fixes problems:
	- A change from char to byte needed to be undone (gcc didn't catch
this).  (iutil.c)

Adds a 167x167 stochastic halftone that CalComp put in the public domain.
(lib/ht_ccbnm.ps, int.mak, unixinst.mak)

Updates the interpreter for the change to per-VM-spaces garbage collection.
(igc.h, ialloc.c, icontext.c, igc.c, ilocate.c, imain.c, interp.c,
ireclaim.c, isave.c, zfile.c, zht.c, zht1.c, zht2.c)

Updates places that only use gsstruct.h for extern_st to use gsstype.h
instead.  (icontext.h, ifont.h)

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

Fixes problems:
	- Some types needed updating to reflect the change in the string
freelists.  (gsalloc.c, gsnogc.c)
	- clip_copy_color didn't initialize some variables in the fastest
case. (bug probably introduced in 5.83) (gxclip.c)
	- The fit_fill_ and fit_copy_ macros didn't always parenthesize
their dev argument.  (gxdevice.h)
	- The sample_load macros returned the wrong results for depth 1 and
2.  Amazingly enough, it appears that this case had never been used.
(gsbitops.h)
	- The standard allocator would free chunks even if is_controlled was
true.  (gsalloc.c)
	- Stroking drew semicircles rather than full circles for round
joins.  (gxstroke.c)
	- The calculation of how finely to sample a curve to achieve a
particular flatness didn't take line width into account when stroking (the
flatness has to apply to the outside of the stroked curve).  (gxpath.h,
gxpcopy.c, gxstroke.c)

Speeds up the bbox device a little.  (gdevbbox.c)

Speeds up the most common cases of clipping a little.  (gxclip.h,
gxacpath.c, gxclip.c)

Makes halftone orders more "object-oriented", so we can use an alternate
representation that trades time for space.  This requires a
NON-BACKWARD-COMPATIBLE CHANGE in the gx_ht_order structure and the
arguments of gx_ht_alloc_[ht_]order.  (gxcldev.h, gxdht.h, gzht.h, gsht.c,
gsht1.c, gshtscr.c, gshtx.c, gsistate.c, gxcht.c, gxclimag.c, gxclrast.c,
gxht.c, gxhtbit.c)

Makes it possible to compile-in halftone threshold arrays and orders (e.g.,
in ROM) so they don't take up RAM at execution time.  (gscdefs.h, gxdht.h,
gxdhtres.h, gzht.h, gconf.c, gsht.c, gsht1.c, gxclrast.c, gxhtbit.c)

Adds some statistics to the 24-bit memory device (in DEBUG mode only, as
usual).  (gdevm24.c)

Makes the 24-bit memory device optionally use memcpy for wide rectangle
fills.  We thought this got us a factor of 3 speedup on a Pentium with gcc's
library, but it turned out to be a profiler artifact.  (gdevm24.c)

Cleans up some formatting.  (gxclip.h)

Dusts off the run-length-encoded memory device, changing it so it reverts to
the unencoded representation when necessary.  This code hasn't been tested,
and is not currently used.  (gdevmrun.h, gdevrun.c [deleted], gdevmrun.c)

Adds more statistics to the clipping device.  (gxclip.c)

Adds an implementation of the MD5 Algorithm defined in RFC 1321, derived
directly from the text of the RFC and not from the reference implementation.
This code uses the zlib license, which is more liberal than the Aladdin or
GNU licenses.  (md5.h, md5.c)

Finishes implementing the planar memory device, including generalizing it to
store varying numbers of bits per plane rather than 1 bit per plane.
(gdevmem.h, gdevmpla.h, gxdevmem.h, gdevmem.c, gdevmpla.c)

Updates clients to initialize memory devices more fully, now required to
distinguish chunky from planar devices.  (gxpcmap.c)

Mostly implements enhancing printer / banded devices so they can use a
planar memory device for rendering and/or band buffering.  The code
currently works only in the non-banded case.  (gdevprn.h, gxclist.h,
gxdevbuf.h, gxdevcli.h, gdevprn.c, gxclist.c, gxclread.c)

For testing, adds a -dUsePlanarBuffer=&lt;boolean&gt; parameter to the PPM devices
to make them use a planar memory device.  (gdevpbm.c)

Cleans up some code formatting.  (gdevmem.c)

Makes the garbage collection procedure separately settable for each group of
VM spaces.  (In an environment with "async" rendering, the renderer has its
owm VM space group.)  Unfortunately, this involved a NON-BACKWARD-COMPATIBLE
change in the vm_spaces structure.  (gsgc.h, gsnogc.h, gsnogc.c)

Updates a client for the change in gs_reclaim; also makes the renderer
thread use the non-tracing garbage collector.  (gdevprna.c)

Updates the non-tracing GC to reflect its role as a garbage collection
procedure in a vm_spaces.  (gsnogc.c)

Enhances the non-tracing GC so that if a chunk ever contains no strings, the
string marking area reserved for the tracing GC is added to free space.
(gxalloc.h, gsalloc.c, gsnogc.c)

Changes the font cache allocator to use a different structure descriptor for
its data so that memory dumps will show "font cache bytes" rather than just
"bytes".  (gxccman.c)

Splits gsstruct.h into gsstype.h, which contains enough of the definition of
structure type descriptors to support extern_st, and gsstruct.h, which is
needed to actually define structure types.  (gsstruct.h, gsstype.h,
gxfmap.h)

Updates places that only use gsstruct.h for extern_st to use gsstype.h
instead.  (gsbitmap.h, gsccolor.h, gscie.h, gxfont.h, gzpath.h, scommon.h,
gscdevn.c, gscrd.c, gscrdp.c, gsshade.c, gxpath2.c)

</pre>

<hr>

<h2><a name="Version5.82"></a>Version 5.82 (tester) (4/24/99)</h2>

<p>
This fileset fixes a few odds and ends, removes a couple more writable
statics, and improves performance in a couple of areas.

<h3><a name="5.82_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- dict_uid_param now takes an additional argument, the interpreter
context pointer.
	- obj_cvp now takes a stream rather than a string.

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

Documents the -dGraphicsAlphaBits and -dTextAlphaBits switches; reorganizes
the documentation of the -d/-s switches by function.  (doc/Use.htm)

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

Fixes problems:
	- Building with MSVC didn't work if COMPILE_INITS was selected.
(msvctail.mak)
	- The cp script didn't work on all MS-DOS systems, since the systems
are incompatible with each other in undocumented ways.  (cp.bat)
	- Using ^ in a command line failed on Windows 98.  (wccommon.mak)
	- Watcom compilation under Windows NT didn't include some needed
headers.  (wccommon.mak)
	- The Watcom compiler's quoting requirements were inconsistent.
(gs.mak)
	- GLCCWIN was used without being defined.  The MS DOS/Windows
makefiles really are a tangled mess....  (watc.mak)
	- The build directories didn't get created automatically when
compiling with the Watcom compiler.  (watc.mak)

Adds more optimization switches for Watcom compilation.  (wccommon.mak)

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

Adds a pfbtopfa script.  (unixinst.mak, lib/pfbtopfa, lib/pfbtopfa.bat,
lib/pfbtopfa.ps)

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

Fixes problems:
	- "Vector" drivers (currently only the PCL XL driver) filled
polygons incorrectly.  (gdevvec.c)
	- The PCL XL drivers produced incorrect output for images.  (We
can't understand how they ever could have worked.)  (gdevpx.c)
	- The PCL XL drivers skipped blank pages.  (gdevpx.c)
	- The page origin for the clj driver was set incorrectly.  (fix from
Artifex) (gdevclj.c)
	- The map_color_rgb procedure for the 32-bit CMYK bmp device was
wrong, causing RasterOps to produce incorrect output.  (fix from Artifex)
(gdevbmp.c)

Works around a bug in Acrobat Reader's Print command, by changing the
scaling for bitmap patterns.  (gdevpdfi.c)

Cleans up some formatting and macros.  (gdevpx.c)

Factors out some common parameter-putting utilities.  (gdevpsdf.h,
gdevpdfp.c, gdevpsdp.c)

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

Fixes problems:
	- The DLL code "knew" it could only be compiled on Windows and OS/2
platforms.  (gsdll.c)

Removes a Mac-specific file that is now moved to the Mac-specific archive.
(gsdllmac.h [deleted])

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

Fixes problems:
	- An invalidaccess could occur when repositioning the file after
executing an image XObject.  (lib/pdf_draw.ps)
	- Indexed color spaces gave an error if the underlying space was
represented as a name rather than an array.  (bug introduced in 5.80)
(lib/pdf_draw.ps)

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

Fixes problems:
	- The interpreter reentrancy changes broke the GNU readline
interface.  (gp_gnrdl.c, ziodev.c)
	- The TrappingType resource category wasn't defined.
(lib/gs_res.ps, lib/gs_trap.ps)
	- CIE color spaces in shading patterns didn't work.  (lib/gs_ll3.ps)
	- Printing a string of more than 200 characters with == was broken.
Fixing this required a NON-BACKWARD-COMPATIBLE change in the argument list
of obj_cvp.  (bug introduced in 5.80) (iutil.h, gp_gnrdl.c, idebug.c,
iutil.c, zfileio.c)

Changes the interpreter trace output to be somewhat more readable.
(interp.c)

Makes the linking of the binary token scanning procedure static rather than
dynamic.  (int.mak, inobtokn.c, iscan.c, zbseq.c)

Makes the language level a property of the context, eliminating a writable
static.  (icstate.h, idparam.h, ilevel.h, icontext.c, idparam.c, iinit.c,
interp.c, zcontext.c, zmisc2.c)

Updates clients for the change in dict_uid_param.  (zbfont.c, zfcmap.c,
zpcolor.c, zshade.c)

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

Fixes problems:
	- There was a signed/unsigned char * mismatch.  (sfxfd.c)
	- Some very picky compilers complained inappropriately about a
const/non-const mismatch.  (gxcht.c)
	- The format of the string freelists didn't allow chunks with more
than 64K bytes of string area.  (gxalloc.h, gsnogc.c)

Moves the interface definitions for the memory dump debugging code into a
header file.  (gxalloc.h, gsalloc.c)

Makes the standard memory manager recognize more effectively when it can
reset the high-water mark for occupied space in the current chunk.  This
turns out to make a big difference in preventing sandbars.  (gxalloc.h,
gsalloc.c)

Makes clipping lists keep track of their minimum and maximum X values, so
that they can return accurate outer clipping boxes, which in turn allows
more effective pre-clipping of filled regions.  (gxcpath.h, gxacpath.c,
gxclip.c, gxcpath.c)

Makes clipping devices cache their clipping box, so they can return it
quickly.  (gxcpath.h, gxclip.c)

Makes the colored halftone logic check bounding boxes before running the
expensive algorithms.  This improves performance dramatically for some files
without costing much for the rest.  (gxcht.c)

Adds some more debugging printout for clipping lists.  (gxcpath.c)

Cleans up formatting and macros.  (gdevdflt.c, gdevhit.c, gdevnfwd.c)

Factors out some common parameter-putting utilities.  (gsparamx.h,
gsparamx.c, gstrap.c)

Adds some more tracing output for images.  (gxidata.c)

</pre>

<hr>

<h2><a name="Version5.81"></a>Version 5.81 (tester) (4/14/99)</h2>

<p>
This fileset cleans up most of the bug tail from 5.80, but it doesn't fix
all the reported problems.  It also factors out the platform-specific DLL
calls, and extends the DLL API to the Mac.

<h3><a name="5.81_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Platforms)
	- gsdll_get_bitmap is now defined in gsdllos2.h; gsdll_copy_dib,
_copy_palette, _draw, and _get_bitmap_row are now defined in gsdllwin.h.

(Interpreter)
	- zcolor_remap_one may return 0 rather than o_push_estack.  (This
change actually occurred in 5.80, but was not documented.)

(Library)
	- The initialized parameters of an image scaling filter are now
stored in a subsidiary structure.
	- The names max_support and log2_max_support are changed to
MAX_ISCALE_SUPPORT and LOG2_MAX_ISCALE_SUPPORT.
	- The structure definition for the smoothed image scaling filter is
now private, although its descriptor remains public.
	- The criteria for when to use Interpolate are now more stringent.

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

Fixes problems:
	- gs_trap.ps wasn't installed by `make install'.  (unixinst.mak)
	- A semicolon was missing in one definition of GS_LIB_DEFAULT.
(watc.mak)
	- ll.tr and _temp_.tr weren't created in the obj directory.
(watc.mak, wctail.mak)
	- RM_ was defined incorrectly on one platform.  (wccommon.mak)

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

Makes some minor edits in ansi2knr, contributed by a user, to remove gcc
warnings.  (ansi2knr.c)

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

Fixes problems:
	- There was an int/uint mismatch.  (gdevbmpa.c)
	- There was a const/non-const mismatch.  (gdevbmpa.c)

Changes the p*m drivers so that they use the default color mapper when
possible, speeding up execution.  (gdevpbm.c)

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

Adds Black as indicating that a bold font should be substituted if
necessary.  (lib/gs_fonts.ps)

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

Fixes problems:
	- The Watcom NT compiler implements setmode and fileno but not
_setmode and _fileno.  (gp_ntfs.c)
	- The procedure parameter passed to the Windows _beginthread
procedure had the wrong prototype.  (gp_win32.c)
	- Watcom's _beginthread procedure takes an extra argument.
(windows_.h, gp_win32.c)

Extends the DLL API to work on the Mac.  This required some restructuring of
the code, and some NON-BACKWARD-COMPATIBLE changes to move
environment-specific calls into environment-specific header files.
(pcwin.mak, os2.mak, winint.mak, dwdll.h, gsdll.h, gsdllmac.h, gsdllos2.h,
gsdllwin.h, dpmainc.c, dwdll.cpp, dwnodll.cpp, gdevmswn.c, gdevpm.c,
gdevwdib.c, gsdll.c)

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

Changes the interpreter to handle two more specification-violating
conditions that Adobe Acrobat accepts: truncation of %%EOF to %%EO, and use
of Dest links with no Dests dictionary.  (lib/pdf_main.ps)

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

Fixes problems:
	- gcc failed to flag initialization of an automatic aggregate, which
is allowed in neither ANSI nor traditional C.  (iutil.c)
	- The system name table lacked the last 3 entries.
(lib/gs_btokn.ps)
	- Interpolated images always wound up at (0, 0).  (bug introduced in
5.80) (gxipixel.c)
	- The Watcom compiler didn't consider "const uint" and "const
unsigned" to be compatible.  (ifunc.h)
	- The code to detect identity transfer functions could cause
transfer functions not to be processed at all.  (icolor.h, zcolor.c,
zcolor1.c, zht2.c)
	- The Level 2 redefinition of restore could do an extra grestore,
possibly creating a temporary reference to a freed object.  (zdevice2.c)

Adds more tracing for undo-saves, and changes a macro to a procedure.
(isave.c)

Removes some #define'd casts.  (isave.c)

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

Fixes problems:
	- When banding, the color space wasn't reinitialized for each page.
(gxclist.c)
	- The criterion for allowing image interpolation still produced
"mush" for some important classes of image.  (gxiscale.c)
	- The Watcom compiler didn't consider "const uint" and "const
unsigned" to be compatible.  (gscdefs.h, gconf.c)
	- Identity black generation and undercolor removal functions weren't
passed through the band list correctly.  (gxcldev.h, gxclbits.c, gxclrast.c)
	- Once again, gcc failed to give a warning for extern followed by
private.  (gxcdevn.h)
	- glyphshow set up the text operation in a way that created a
garbage collector error.  (gschar.c)

Makes gs_opendevice complete the device procedure vector if the device
wasn't already open.  (gsdevice.c)

Factors out the image scaling filter so that we can use either Adobe's
algorithm or the Mitchell filter.  This involves a NON-BACKWARD-COMPATIBLE
CHANGE in the way the filter parameters are defined.  (gximage.h, siscale.h,
sisparam.h, gxclimag.c, gxidata.c, gxiscale.c, siscale.c)

Makes the criteria for when to use interpolation stricter, since we are
still using the Mitchell filter.  (gxiscale.c)

Starts to implement Adobe's image interpolation algorithm.  (siinterp.h,
siinterp.c, gxiscale.c)

Speeds up RGB interpolated images by detecting runs of output color.
(gxiscale.c)

Makes the default RGB color mapper a "known" mapper that can be propagated
through device pipelines.  (gxdevice.h, gsdevice.c)

</pre>

<hr>

<h2><a name="Version5.80"></a>Version 5.80 (tester) (4/6/99)</h2>

<p>
This version contains the first, and, we hope, largest wave of changes in
the interpreter required to make the interpreter fully reentrant.
Unfortunately, many externally visible APIs, including the argument list for
operator procedures, required changes.

<p>
Because of the magnitude of the change, we incremented the version number to
5.80.

<p>
The non-backward-compatible API changes were confined to the interpreter:
the (very minor) changes to the library required to support interpreter
reentrancy are fully backward-compatible.

<p>
This fileset also implements DeviceN color spaces (always using the
alternate space), including Indexed spaces over DeviceN spaces, for all uses
except smooth shading.

<h3><a name="5.80_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- names_init now takes a gs_ref_memory_t * rather than a gs_memory_t
*.
	- type_print_strings, type_name_strings, and
ref_type_properties_data are now REF_TYPE_DEBUG_PRINT_STRINGS,
REF_TYPE_NAME_STRINGS, and REF_TYPE_PROPERTIES_DATA.
	- The undocumented .writecvp operator, and obj_cvp, now take an
integer instead of a Boolean to define the type of output desired.
	- The argument list for operators is changed from os_ptr to
i_ctx_t *.  Many internal interpreter APIs have changed.
	- The typedef name for operator procedures is changed from op_proc_p
to op_proc_t.
	- gs_interpret now takes an additional context (i_ctx_t **)
argument.
	- The interpreter's rescheduling and time-slicing procedures,
gs_interp_reschedule_proc and gs_interp_time_slice_proc, now take a context
(i_ctx_t **) argument.
	- The Type 1 interpreter push_value callback is renamed push_values;
the first argument of push_values and pop_value has changed from
gs_font_type1 * to void *.
	- dict_put*, dict_copy*, dict_undef, dict_resize, dict_grow, and
dict_unpack now take an additional argument, a dictionary stack where the
dictionary may be present.

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

Fixes problems:
	- The dependency list for the (dummy) trapping feature was wrong.
(int.mak)
	- The directory for jerror_.h was incorrect.  (jpeg.mak)

Removes the never-used -header switch from genconf.  (genconf.c)

Adds priority-sorted resources to genconf, currently used only for image
classes.  (genconf.c)

Adds an imageclass resource to genconf, for what used to be called image
strategies.  (genconf.c)

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

Fixes problems:
	- ansi2knr didn't recognize id1(id2, xxxxx) as not being a function.
(ansi2knr.c)
	- viewpcx still referred to the deleted PCXDecode filter.
(lib/viewpcx.ps)
	- strlen was called without being declared.  (genarch.c)

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

Fixes problems:
	- Some drivers that called gdev_prn_open_printer didn't check the
return code for errors.  (gdevdjet.c, gdevhl7x.c)
	- The cljet5 driver didn't handle long-edge feed properly.  (from
Artifex) (gdevclj.c)
	- The [e]pswrite driver could produce incorrect output if the input
file had zero-length lines.  (gdevps.c)
	- The X driver didn't handle byte-swapped 16-bit displays.
(gdevx.c)
	- There was an int/uint mismatch.  (gdevbmp.c)
	- Some needed headers weren't included.  (gdevdcrd.c, gdevpdfo.c)
	- The updated mswinpr2 driver wouldn't compile with older Windows
header files.  (gdevwpr2.c)

Removes some unnecessary #includes.  (gdevps.c)

Adds user-contributed drivers for the CoStar LabelWriter II Plus and XL
label printers.  (gdevcslw.c)

Speeds up color mapping for the bitrgb driver a little, by using the default
procedure.  (gdevbit.c)

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

Fixes problems:
	- TrueType fonts with odd-length glyf definitions caused an
invalidfont error.  (lib/gs_ttf.ps)

Changes the font substitution mechanism slightly to be more useful to the
PDF interpreter.  (lib/gs_fonts.ps)

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

Fixes problems:
	- Some needed headers weren't included.  (watc.mak, watclib.mak,
winlib.mak, gp_win32.c)

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

Fixes problems:
	- There were many signed/unsigned char type errors that gcc didn't
catch.  (gp_gnrdl.c)
	- The operator definition list for zdouble was too long.  (int.mak,
zdouble.c)

Removes some unnecessary #includes.  (zchar.c)

Speeds up names_string_ref.  (inamedef.h, inames.h, imain.c, iname.c)

Speeds up reading string/name array parameters.  (iparam.c)

Refactors the implementation of ==, so that all types other than arrays and
dictionaries are handled in C code.  (lib/gs_init.ps, iutil.h, iref.h,
gp_gnrdl.c, idebug.c, iutil.c, zfileio.c, ztype.c)

Changes the type name for operator procedures from op_proc_p to op_proc_t,
for consistency and also to help detect places that need the argument list
changed.  (ichar.h, interp.h, iref.h, opdef.h, interp.c, iutil.c, zchar.c,
zcharx.c, zcontrol.c, zupath.c)

Changes the argument type for operators from os_ptr to i_ctx_t *.  (i_ctx_t
is an alias for gs_context_state_t.)  This also requires adding a context
pointer to many internal procedures, or changing an os_ptr argument to
i_ctx_t *.  This is a MASSIVE NON-BACKWARD-COMPATIBLE change which we simply
saw no way to avoid if the interpreter was to be made fully re-entrant.  See
"Incompatible changes" above for externally visible changes.
(lib/gs_init.ps, bfont.h, btoken.h, dstack.h, estack.h, files.h, ichar.h,
ichar1.h, icharout.h, icie.h, icolor.h, icontext.h, icsmap.h, ifilter.h,
ifont1.h, igstate.h, iht.h, iimage.h, iimage2.h, imain.h, imemory.h,
interp.h, ipacked.h, iref.h, iscan.h, istream.h, opdef.h, oper.h,
opextern.h, ostack.h, ialloc.c, icontext.c, iinit.c, imain.c, inouparm.c,
interp.c, ireclaim.c, iscan.c, iscanbin.c, zarith.c, zarray.c, zbfont.c,
zbseq.c, zcfont.c, zchar.c, zchar1.c, zchar2.c, zchar32.c, zchar42.c,
zcharout.c, zcharx.c, zcid.c, zcie.c, zcolor.c, zcolor1.c, zcolor2.c,
zcontext.c, zcontrol.c, zcrd.c, zcsdevn.c, zcsindex.c, zcspixel.c,
zcssepr.c, zdevice.c, zdevice2.c, zdict.c, zdosio.c, zdouble.c, zdpnext.c,
zdps.c, zdps1.c, zfbcp.c, zfcmap.c, zfdctd.c, zfdcte.c, zfdecode.c, zfile.c,
zfileio.c, zfilter.c, zfilter2.c, zfilterx.c, zfont.c, zfont0.c, zfont1.c,
zfont2.c, zfont32.c, zfont42.c, zfproc.c, zfreuse.c, zfunc.c, zfzlib.c,
zgeneric.c, zgstate.c, zhsb.c, zht.c, zht1.c, zht2.c, zimage.c, zimage2.c,
zimage3.c, ziodev.c, ziodev2.c, zmath.c, zmatrix.c, zmedia2.c, zmisc.c,
zmisc1.c, zmisc2.c, zmisc3.c, zpacked.c, zpaint.c, zpath.c, zpath1.c,
zpcolor.c, zrelbit.c, zrop.c, zshade.c, zstack.c, zstring.c, zsysvm.c,
ztoken.c, ztrap.c, ztype.c, zupath.c, zusparam.c, zvmem.c, zvmem2.c)

Changes caching for the interpreter's CIE color spaces so that instead of
changing the color space installation procedure to one that schedules the
sampling of the procedures though a back door, it leaves the installation
procedure alone and schedules the sampling in the color-space-specific
setcolorspace operator.  This is needed for interpreter reentrancy.
(icie.h, zcie.c, zcrd.c)

Makes the linkage from the dictionary machinery to the cached values in the
dictionary stack and the name table explicit, by adding a dstack pointer to
all the relevant dict_* procedures.  This is needed for interpreter
reentrancy.  (iddstack.h, idict.h, idstack.h, idict.c)

Updates clients for the change in the dictionary API.  For each changed
dict_ procedure, we add an idict_ procedure that uses i_ctx_p-&gt;dict_stack as
the additional argument.  (iddict.h, icontext.c, iinit.c, interp.c,
iparam.c, iscanbin.c, zdps.c, zfcmap.c, zdict.c, zfont.c, zfont0.c,
zgeneric.c, zht2.c, zmisc2.c)

Changes Pattern color remapping so that it saves information in the
interpreter's part of the graphics state, rather than manipulating the
e-stack directly.  This is needed for interpreter reentrancy.  (errors.h,
icremap.h, igstate.h, interp.c, zgstate.c, zpcolor.c)

Adds to the "main instance" structure a pointer to the currently executing
context.  This is needed for interpreter reentrancy.  (imain.h, iminst.h,
main.h, imain.c, imainarg.c)

Changes the argument list for operator initialization procedures from void
to i_ctx_t *.  (opdef.h, ireclaim.c, zbfont.c, zbseq.c, zcontext.c, zfile.c,
zfont.c, zpcolor.c)

Changes the initialization of the interpreter's allocators so it doesn't
presume the allocator structure is global.  (ialloc.h, ialloc.c, imain.c)

Factors out the structure definition of the stacks, which is needed for
defining the state of a context, from the API, which is only needed by
actual clients.  (icstate.h, idsdata.h, idstack.h, iesdata.h, iestack.h,
iosdata.h, iostack.h, isdata.h, istack.h)

Changes filter error reporting so that the report_error procedure doesn't
need access to the interpreter.  (interp.h, interp.c, zfile.c, zfileio.c)

Completes the implementation of DeviceN color spaces at the interpreter
level.  (lib/gs_res.ps, lib/gs_lev2.ps, lib/gs_ll3.ps, icsmap.h, zcsdevn.c,
zcsindex.c, zcssepr.c, zimage.c)

Speeds up color mapping for identity transfer, BG, or UCR functions.
(zcolor.c)

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

Fixes problems:
	- The L range for Lab color spaces was wrong.  (lib/pdf_draw.ps)
	- Images in Lab color spaces came out all black.  (lib/pdf_draw.ps)

Improves the font substitution mechanism slightly.  (lib/pdf_font.ps)

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

Adds an error string to the stream state structure, which stream
implementations can set when returning an error.  The motivation is to allow
the PostScript interpreter to put this into $error.errorinfo.  (scommon.h,
stream.c)

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

Fixes problems:
	- The S_ISCHR fix in 5.73 had a typo.  (stat_.h)
	- The garbage collector traced dash pattern pointers even if the
pattern had no elements.  (gzline.h, gsistate.c)
	- Always tracing the clip_path element of gx_device_clist for
garbage collection could cause crashes, because this pointer could be stale.
However, we have to trace this pointer if an image is being processed.
(gxclist.c)
	- A close-brace was positioned incorrectly.  (No effect on the
working of the code.)  (gximage3.c)
	- Some macros caused some compilers to complain about functions that
didn't return values.  (gsmemlok.c)
	- A procedure vector wasn't declared const.  (gsmemlok.c)
	- Some needed headers weren't included.  (gscrdp.c)
	- A const pointer was being treated as non-const.  (gxcpath.c)
	- The algorithm for choosing halftone cell dimensions required an
unreasonably close angle tolerance (0.01 degrees, rather than 1% of a
90-degree possible difference).  (gshtscr.c)

Speeds up arcs a little more.  (gspath1.c)

Removes some unnecessary #includes.  (gxclpath.h, gxcpath.h, gzcpath.h,
gxccman.c, gxclip.c, gxcpath.c, gxi12bit.c, gxicolor.c, gxifast.c,
gximono.c, gxiscale.c, gxpcmap.c)

Cleans up some formatting.  (gxpath.c)

Re-enables image interpolation for images that have at least 8 bits of input
data per pixel.  This is still a compromise....  (gxiscale.c)

Enhances the default implementation of parameter lists so that a C parameter
list can forward unrecognized param_read calls to another parameter list.
This allows constructing incrementally modified parameter lists for internal
purposes.  (gsparam.h, gscparam.c)

Changes the first argument of the Type 1 charstring interpreter push_value
(which is renamed push_values) and pop_value callbacks from the font pointer
to an arbitrary pointer passed in to the interpreter.  This is needed for
PostScript interpreter reentrancy.  (gstype1.h, gxfont1.h, gxtype1.h,
gstype1.c, gxtype1.c)

Adds an allocator wrapper that calls a closure to attempt to free up memory
if an allocation fails.  This is used for asynchronous operation (waiting
for the page queue to empty) and operation with an optional disk for the
band list.  (gsmemret.h, gsmemret.c)

Adds the retrying wrapper to the malloc allocator.  (gsmalloc.c)

Makes "async" printer devices use the retrying wrapper.  (gdevprna.c)

Makes clist_fill_parallelogram recognize rectangles.  This makes a big
difference for images rotated 90 degrees.  (gsrect.h, gdevddrw.c,
gxclpath.c)

Arranges to construct the list of image classes (formerly called strategies)
statically rather than dynamically.  (lib.mak, gscdefs.h, gxiclass.h,
gximage.h, gconf.c, gxi12bit.c, gxicolor.c, gxifast.c, gximono.c,
gxipixel.c, gxiscale.c)

Implements Indexed color spaces for high-level image banding.  (gxclist.h,
gxclpath.h, gxclimag.c, gxclrast.c)

Arranges to construct the blank bitmap for colored patterns statically
rather than dynamically.  (gsbitmap.h, gxbitmap.h, gxcht.c)

Changes FORCE_STRIP_HALFTONES from a #define to a static Boolean.
(gshtscr.c)

Implements alternate-space DeviceN color spaces.  (gscspace.h, gxcdevn.h,
gscdevn.c)

Implements DeviceN color spaces for images.  (gximage.h, gsimage.c,
gxi12bit.c, gxicolor.c, gxidata.c, gximage3.c, gximono.c, gxipixel.c)

Speeds up color mapping a bit.  (gxfmap.h, gsdevice.c, gsstate.c,
gxclbits.c, gxclrast.c, gxcmap.c)

</pre>

<hr>

<h2><a name="Version5.73"></a>Version 5.73 (tester) (3/19/99)</h2>

<p>
This fileset fixes a few bugs and adds a couple of minor performance
improvements.  Its purpose is to fix a fairly serious memory management bug
and a Microsoft-platform compilation problem, both introduced in 5.72.

<h3><a name="5.73_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- Removes the restriction on device registration that was introduced
in 5.72.
	- gx_[c]path_scale_exp2 are replaced by gx_[c]path_scale_exp2_shared.

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

Identifies GNU readline support as user-contributed, and adds the author's
name.  (int.mak, unix-gcc.mak, gp_gnrdl.c)

Notes that an edit is required for GNU readline for AIX.  (doc/Make.htm)

Changes the bug reporting e-mail address to bug-gs@aladdin.com.
(doc/Bug-form.htm, doc/New-user.htm, doc/Use.htm, imainarg.c)

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

Adds FEATURE_DEVS_EXTRA and DEVICE_DEVS_EXTRA, reserved for setting from the
command line.  (gs.mak)

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

Fixes problems:
	- A needed cast was missing.  (gdevx.c)

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

Fixes problems:
	- A needed cast was missing.  (zfname.c)
	- The CFF loader didn't handle empty subsections correctly.
(lib/gs_cff.ps)
	- GNU readline gave an error, rather than expanding the input
buffer, when called in response to %lineedit.  (files.h, zfileio.c,
ziodev.c)
	- GNU readline wasn't always initialized, causing a crash when an
attempt was made to shut it down.  (iminst.h, imain.c)

Adds more tracing to the CFF loader.  (lib/gs_cff.ps)

Adds some deconstifying casts to compensate for broken headers in the GNU
readline package.  (gp_gnrdl.c)

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

Fixes problems:
	- The bounding box device didn't ignore filling paths consisting
only of a moveto.  (gdevbbox.c)
	- Some systems have S_IFCHR but not S_ISCHR.  (stat_.h)
	- The clipping list accumulator didn't merge single rectangles
correctly.  (gxacpath.c)
	- The clipping list accumulator wasn't aggressive enough about
merging rectangles.  (Performance effect only.)  (gxacpath.c)
	- The page wasn't cleared when installing a new device. (bug
introduced in 5.72) (gsdevice.c)
	- With graphics anti-aliasing enabled, executing clip or eoclip
followed by fill or stroke produced incorrect output.  (bug introduced
between 5.10 and 5.50) (gxpath.h, gspaint.c, gxcpath.c, gxpath2.c)
	- The garbage collector could crash if any banded devices were
active.  (bug introduced in 5.72) (gdevprn.c)

Changes memory management for device instances to allocate the structure
type objects dynamically.  This gets rid of a static, and also gets rid of
the requirement that device prototypes be registered, at the expense of an
extra copy of the (small) structure type object per instance of certain
devices.  (gscdefs.h, gxdevcli.h, gxdevice.h, gconf.c, gsdevice.c)

Disables image interpolation for all high-resolution images, not just
black-and-white, since this produces better-looking output.  (gxiscale.c)

Speeds up path bounding box computation a little.  (gxpath2.c)

Speeds up clipping a little.  (gxclip.c)

Cleans up formatting a bit.  (gxacpath.c)

Adds support for libpng version 1.0.3, but (for now) updates only the
OpenVMS and Unix makefiles to use it.  (libpng.mak, openvms.mak,
openvms.mmk, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak)

Attempts to work around picky compilers that don't allow assigning T[M][N]
to const T[M][N].  (gxcht.c)

</pre>

<hr>

<h2><a name="Version5.72"></a>Version 5.72 (tester) (3/17/99)</h2>

<p>
This fileset finally gets rid of the need to have jpeg, libpng, or zlib
source code on Unix systems that already have these libraries available.  It
also starts to add support for general DeviceN color spaces.

<p>
Works in progress:
<ul>
<li>	- Fix Fontmap -&gt; Fontmap.GS link, which VMS can't handle.
<li>	- Make x11alpha do real alpha blending.
<li>	- spdiff.c is unfinished, partly wrong.
<li>	- DeviceN support is in progress.  In gxcht.c,
set_ht_colors_le_4
and set_color_ht_gt_4 don't have any way to color-map >4 planes.
</ul>

<h3><a name="5.72_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- The str argument of arg_push_memory_string is no longer const.
	- The last argument of print_reloc is now const.

(Library)
	- Clients should never call the device open_device or close_device
procedure directly: they should call gs_opendevice or gs_closedevice.
	- The fn_free_functions procedure has been made private.
	- The first argument of gs_currentpoint is no longer const.
	- References to header files in the third-party libraries must now
include a trailing _, i.e.: jerror_.h jmorecf_.h jpeglib_.h png_.h zconf_.h
	- IJG JPEG library versions before v5a are no longer supported.
	- ilog2 replaces small_exact_log2.
	- Support for "outside" clipping has been removed.
	- Clients that define their own devices now must either register
them in the makefile (using the SET[P]DEV[2] macros) or set the stype
pointer in the static prototype to the correct structure type (or at least a
structure type with the correct procedures).

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

Clarifies the fact that clients should never call the device open_device or
close_device procedure directly.  (doc/Drivers.htm)

Updates contact information for Artifex Software.  (doc/Commprod.htm,
doc/New-user.htm)

Clarifies the fact that Aladdin did not write gdevcdj.c.  (gdevcdj.c)

Documents the new -TTYPAUSE switch.  (doc/Use.htm)

Adds SCO OpenServer 5.0.5 to the list of systems where Ghostscript is known
to build.  (doc/Make.htm)

Notes that the MIPSpro 7.2.1.3m compiler produces incorrect output.
(doc/Make.htm)

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

Fixes problems:
	- The Unix install directory ($(gsdatadir)) and the Unix default
search path ($(gsdatadir)/lib) weren't compatible.  (bug introduced since
5.50) (unixinst.mak)
	- The compilation rule for echogs omitted a dependency and also
failed to specify a directory for header files.  (unix-aux.mak)
	- Third-party library source code was required even if the
corresponding SHARE_xxx option was set to 1.  (devs.mak, gs.mak, int.mak,
lib.mak, jpeg.mak)

Adds a -dTTYPAUSE switch to cause .confirm to read from /dev/tty instead of
stdin, useful when the data input is a pipe.  (lib/gs_init.ps)

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

Fixes problems:
	- Some preprocessor macros were defined twice on VMS.  (echogs.c)
	- traceop.ps didn't build operator-tracing procedures in global VM.
(This didn't matter before we introduced local pseudo-operators.)
(lib/traceop.ps)
	- geninit produced invalid output or hung if the input files didn't
have the correct EOL representation for the platform.  (geninit.c)

Updates a (probably otherwise obsolete) file for the deletion of the private
JPEG library error message table.  (bughunt.sh)

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

Fixes problems:
	- A procedure returning void tried to return a value.  (gdevtfax.c)
	- For 24-bit displays, XGetImage can return an image in which
bits_per_pixel is 32 rather than 24, which is not at all obvious from the
documentation; also, the bit and byte ordering may not be MSBFirst.
(gdevx.c)
	- XFree takes a char *, not a void *.  (gdevx.c)
	- The fix in 5.71 to adjust the width of TIFF images introduced
another bug.  (gdevtfax.c)
	- If the X driver used a standard colormap, pixel values 255 and
less didn't map back to RGB properly. (bug introduced in 5.71) (gdevxcmp.c)
	- The ForceMono addition to gdevbit.c (in 5.71) was incorrect.
(gdevbit.c)
	- There was a const mismatch in an extern.  (gdevxalt.c)
	- Third-party library source code was required even if the
corresponding SHARE_xxx option was set to 1.  Fixing this required
referencing all third-party library header files through *_.h files.
(gdevjpeg.c, gdevpdfi.c, gdevpng.c, gdevpsdi.c, gdevpsdp.c)
	- There was no way to cause the bounding box device to give up its
reference to the target.  (gdevbbox.h, gdevbbox.c)
	- pdfwrite crashed if given a 12-bit-per-sample CMYK image when
ConvertCMYKImagesToRGB was true, and produced invalid output for other
12-bit-per-sample images (PDF limits bits-per-sample to 8).  (gdevpsdi.c)
	- pdfwrite mangled planar images if bits-per-sample was other than
8.  (bug introduced since 5.50) (gdevpdfi.c)

Changes some code to reduce compiler warnings about casts discarding const.
(gdevxalt.c)

Removes a test that allowed referencing the statically allocated instance of
the alternative X drivers.  (gdevxalt.c)

Changes a reference to small_exact_log2.  (gdevsvga.c)

Greatly improves the PDF writer's handling of simple pattern fills, by
retaining them as pattern fills.  (gdevpdfx.h, gdevpdf.c, gdevpdfi.c)

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

Fixes problems:
	- Cn in a font name wasn't recognized as indicating a condensed
font.  (lib/gs_fonts.ps)

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

Fixes problems:
	- Third-party library source code was required even if the
corresponding SHARE_xxx option was set to 1.  Fixing this required
referencing all third-party library header files through *_.h files.
(zfdctd.c, zfdcte.c)
	- An /undefined error occurred on floating point numbers whose
integer part exceeded the size of a long (normally 31 bits) and that also
included a fraction.  (iscannum.c)
	- ialloc.c included gxarith.h unnecessarily.  (ialloc.c)

When opening a terminal for reading, always sets the buffer size to 1.  This
does not apply to %stdin, %lineedit, or %statementedit.  (zfile.c)

Changes code to use the new deconstifying freeing procedures, to remove
deconstifying casts.  (gsargs.h, ialloc.h, gsargs.c, zfname.c, zfunc.c)

Adds a writable packed ref pointer variant to ref.value, to remove compiler
warnings about casts discarding const.  (igc.h, iref.h, idict.c, igc.c,
igcref.c)

Changes the help printouts to use the new printf_program_ident procedure.
(imainarg.c)

Generalizes clients to handle color spaces that may have more than 4
components.  (zcsdevn.c, zcsindex.c, zcssepr.c, zdpnext.c, zfdecode.c)

Removes support for outside clipping, which we implemented only because we
misinterpreted a requirement.  (zpath.c)

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

Fixes problems:
	- Selecting a colored Pattern color space caused an error.
(lib/pdf_draw.ps, lib/pdf_ops.ps)
	- Reading data from a subfile with no filter caused an error.
(lib/pdf_base.ps)

Allows mask images to omit BitsPerComponent: Acrobat Reader accepts this
even though the PDF specification requires it to be present (with value =
1).  (lib/pdf_draw.ps)

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

Fixes problems:
	- The PixelDifference filters didn't propagate leftover bits in the
last byte of a row. (bug probably introduced in 5.60) (spdiff.c)
	- The 1- and 2-bit-per-pixel PixelDifferenceEncode filters were
broken.  (spdiff.c)

Changes code slightly to remove a warning about an uninitialized variable.
(spdiff.c)

Extends the PixelDifference filters to handle more than 4 Colors.
s_PDiff_max_Colors is the maximum value.  (spdiffx.h, spdiff.c)

Adds a stream for converting 12-bit samples to 8-bit.  (gdevpsds.h,
gdevpsds.c)

Gets rid of the no longer needed private copy of the JPEG error message
table.  (sdcte.c, sdeparam.c, sjpegerr.c [deleted], sjpegc.c)

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

Fixes problems:
	- If a 1-bit-per-pixel image terminated early, the last few scan
lines might not be written out.  (gxidata.c)
	- The bbox device could leave its target in a half-open state,
because it called the open/close_device procedures directly rather than
going through gs_open/closedevice.  We "fixed" this by making this device
forward open and close, but conditionally, so that clients can choose.
(gdevbbox.c)
	- Third-party library source code was required even if the
corresponding SHARE_xxx option was set to 1.  Fixing this required
referencing all third-party library header files through *_.h files.
(sdcparam.c, sdctc.c, sdctd.c, sddparam.c, sjpegc.c, sjpegd.c, sjpege.c,
sjpegerr.c)
	- Low-memory recovery in the band list writer sometimes didn't work,
because a test was backwards.  (gxcldev.h, gxclist.c)
	- Executing a put_params during band rasterizing didn't update
cached values in the imager state.  This was probably not a problem in
practice, since the only parameters that affect cached values (device color
space, depth, and color mapping) were very rarely set.  (gxclrast.c)
	- Converting 12-bit planar images to chunky format could store
beyond the end of the output area and corrupt memory.  (gsflip.h, gsflip.c)
	- The algorithms for converting 4-plane, 1- and 2-bit planar images
to chunky format were wrong.  (gsflip.c)
	- Images that lay entirely outside the page could cause a memory
access error.  (gxclimag.c)
	- The bbox device could return excessively conservative values for
stroked paths.  (gxpaint.h, gdevbbox.c, gxpaint.c, gxstroke.c)
	- Banding devices now include some pointers that the garbage
collector must trace.  (gdevprn.h, gxclist.h, gxdevice.h, gdevprn.c,
gsdevice.c, gxclist.c)

Adds a gs_opendevice procedure to mirror gs_closedevice.  (gsdevice.h,
gsdevice.c)

Adds deconstifying freeing procedures to the memory manager.  This allows us
to have pointers as structure members that should be const * for all
ordinary clients, and still be able to free the referenced objects without a
compiler warning.  (gsmemory.h, gsmemory.c)

Changes code, often to use the new deconstifying freeing procedures, to
remove deconstifying casts.  (gspath.h, gxfunc.h, gsfunc.c, gsfunc0.c,
gsfunc3.c, gspath.c, gsptype1.c)

Changes the eprintf macros so they print the version as well as the program
name.  (std.h, gscdef.c, gsmisc.c)

Adds procedures that update cached values in graphics or imager states after
setting device parameters.  Clients should use these when setting parameters
of devices that may be current in graphics or imager states.  Note that this
is only a partial solution for a much deeper problem, and may even have to
be replaced at some point.  (gsdevice.h, gsdevice.c)

Defines GS_CLIENT_COLOR_MAX_COMPONENTS (in gsccolor.h),
GX_DEVICE_COLOR_MAX_COMPONENTS (in gxcindex.h), and GS_IMAGE_MAX_COMPONENTS,
and starts to use them where needed, in anticipation of implementing DeviceN
color spaces.  (gsccolor.h, gsdcolor.h, gsiparam.h, gsiparm4.h, gxcindex.h,
gxctable.h, gximage.h, gxshade.h, gdevplnx.c, gscdevn.c, gscolor2.c,
gxcht.c, gxclimag.c, gxcmap.c, gxicolor.c, gxctable.c, gxi12bit.c)

Replaces small_exact_log2 by a procedure ilog2 that computes floor(log2(n)).
(gxarith.h, gsmisc.c, gspaint.c, gxccman.c, gxclimag.c, gxclrect.c)

Upgrades gsflip.c to handle >4 planes.  (gsbitops.h, gsflip.h, gsflip.c)

Speeds up getting and testing memory device prototypes a little.  (gdevmem.c)

Speeds up adding arcs to a path a little.  (gspath1.c)

Increases the precision of a precomputed constant from float to double.
(gxpath.h)

Adds a new band list operation to make circles smaller and faster.
(gxclpath.h, gxclpath.c, gxclrast.c)

Adds an accessor procedure for the start point of the current subpath.
(gxpath.h, gxpath2.c)

Removes support for outside clipping, which we implemented only because we
misinterpreted a requirement.  (gspath.h, gxcldev.h, gxcpath.h, gxpath.h,
gspath.c, gxacpath.c, gxclip.c, gxclpath.c, gxclrast.c, gxcpath.c)

Changes gs_copydevice to require that static prototypes either be registered
in gx_device_list or have a correct stype pointer.  (This is already the
case for all devices in code we distribute.)  (gsdevice.c)

Adds ENUM_PTRS_PROC and RELOC_PTRS_PROC macros for giving a name to the
typed pointer to the object being processed.  (gsstruct.h)

</pre>

<hr>

<h2><a name="Version5.71"></a>Version 5.71 (tester) (3/3/99)</h2>

<p>
This fileset reinstates support for TrueColor X displays, and adds optional
support for GNU readline.  It also includes a little more work on the new
driver text API.

<h3><a name="5.71_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- The *line_accum* macros are now capitalized; declare_line_accum is
renamed DECLARE_LINE_ACCUM_COPY, and DECLARE_LINE_ACCUM is new.

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

Documents the CIE joint cache invariant more accurately.  (gscie.h)

Adds a request for xdpyinfo/xwininfo output to the problem reporting form.
(doc/Bug-form.htm)

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

Fixes problems:
	- The default search path was missing the lib subdirectory on many
platforms.  (dvx-gcc.mak, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak,
unixtrad.mak, watc.mak, watclib.mak, watcw32.mak)
	- The dependency list for the X Windows drivers was incorrect,
sometimes causing needed recompilation to be omitted.  (devs.mak)

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

Fixes problems:
	- The representation of maximum unsigned values produced warnings on
some compilers (specifically, gcc with -Wtraditional).  (genarch.c)
	- Some string variables weren't declared const.  (echogs.c,
genarch.c)
	- The viewpbm utility was broken for pgm and ppm (but not pbm).
(bug introduced in 5.66) (lib/viewpbm.ps)

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

Fixes problems:
	- The X driver didn't handle TrueColor displays properly.
(gdevxcmp.h, gdevxcmp.c)
	- The alternative X drivers didn't implement get_bits properly.
(gdevxalt.c)
	- The X driver specified the byte order incorrectly for displays
with more than 8 bits per pixel.  (gdevx.c)
	- The X driver used the wrong number of bits for comparing colors on
visuals with fixed color maps.  (gdevxcmp.h, gdevxcmp.c)
	- Some symbols were multiply defined with -DNOPRIVATE.  (gdevbit.c)
	- If a file specified a paper size, rather than using the default,
the G3/G4 fax output drivers didn't adjust the width to a legal one for fax
systems.  (gdevtfax.c)

Segregates the resource lists, for which warnings about casting of const to
non-const string types should be suppressed, into a separate file.
(devs.mak, gdevx.h, gdevxini.c, gdevxres.c)

Splits off the code related to color mapping for X Windows, for greater
understandability.  (devs.mak, gdevx.h, gdevxcmp.h, gdevx.c, gdevxcmp.c,
gdevxini.c)

Changes code slightly to remove warnings about signed/unsigned integer
constants.  (gdevxalt.c)

Changes code to remove unused variables.  (gdevx.c, gdevxalt.c)

Adds a user-contributed driver for the H-P LaserJet 4D.  (devs.mak,
gdevdjet.c)

Makes the bitcmyk driver reset its map_cmyk_color procedure dynamically
according to the depth, allowing more efficient execution in the 1- and
8-bit cases.  (gdevbit.c)

Adds a settable option, AdjustWidth, to control whether the fax-format
drivers (faxg*, tiffcrle, tiffg*) adjust the page width to legal fax values.
Its default value is 1 (do adjust).  (devs.mak, gdevtfax.c)

Adds a ForceMono parameter to the bitcmyk/bitrgb devices to implement a
special monochrome-in-CMYK mode requested by a customer.  (gdevbit.c)

Removes the TRIM_ and EXPAND_BITS_TO_BYTES options from the bit devices,
since they are no longer needed.  (gdevbit.c)

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

Changes the substitution mechanism for condensed / narrow fonts, so that the
PDF interpreter can use it.  (lib/gs_fonts.ps)

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

Fixes problems:
	- The bind operator generated unaligned accesses and might not
operate reliably. (bug introduced in 5.70) (zmisc.c)
	- If the BuildChar procedure of a font included an image or
imagemask operator, charpath would (incorrectly) display the character.
(zimage.c)

Adds a bogus return statement to suppress a compiler warning.  (gs.c)

Changes code slightly to remove warnings about signed/unsigned integer
constants.  (store.h, ibnum.c)

Changes the build date format to %d-%02d-%02d.  (lib/gs_init.ps, imainarg.c)

Rearranges some code to add readline support.  (files.h, imain.c, zfileio.c,
ziodev.c)

Adds support for GNU readline, with several completion keys, contributed by
a user.  (int.mak, gs_rdlin.ps, gp_gnrdl.c)

Changes the font substitution machinery slightly so the PDF interpreter can
use it.  (lib/gs_fonts.ps)

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

Fixes problems:
	- In-line images caused a syntaxerror or stackunderflow.
(lib/pdf_draw.ps)
	- The font substitution mechanism didn't detect Condensed fonts.
(lib/pdf_font.ps)
	- The font substitution mechanism didn't use the intelligent
algorithm used for PostScript files.  (lib/pdf_font.ps)

Prints a message when substituting for a font on the basis of its
descriptor.  (lib/pdf_font.ps)

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

Adds an interface and default implementation for readline.  (srdline.h,
stream.h, stream.c)

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

Fixes problems:
	- A void procedure attempted to return a value.  (stream.c)
	- A pointer was declared with an extra *.  (gsmemory.c)
	- An argument would be stringified with traditional C.  (gdevdbit.c)
	- The check for validity of the CIE joint caches was wrong, leading
to incorrect output in some obscure cases.  (gsciemap.c)
	- A tiny rounding inaccuracy could cause an occasional blank line
when rendering adjacent images.  (gxipixel.c)
	- Some symbols were multiply defined with -DNOPRIVATE.  (gsptype2.h)
	- If a character was too large to be cached, it didn't use
anti-aliasing, even if TextAlphaBits was >1.  (gspaint.c)

Changes code slightly to remove warnings about signed/unsigned integer
constants.  (gsccode.h, gsmisc.c, gxcht.c)

Changes code to remove a warning about an unhandled case in a switch.
(gsstruct.h, gsmemory.c)

Changes code to remove unused variables.  (gxcindex.h, gdevdbit.c,
gdevprn.c, gxiscale.c)

Restructures the header files for the new text API, adding the SINGLE
options in text_params, enough new elements in text_enum to store all the
arguments of text_begin, and new elements in text_enum to hold results
returned by text_process.  This code is no longer "subject to [arbitrary]
change without notice", although it is still not very stable.  (gstext.h,
gxtext.h, gstext.c)

Changes code to remove warnings about uninitialized variables.  (gxipixel.c)

Changes the syntactic form of some constants yet again to suppress a
different set of compiler warnings.  (gxsample.c)

Adds a procedure to fix the charpath-in-BuildChar problem.  (gsimage.h,
gsimage.c, gsptype1.c)

Speeds up the handling of certain RasterOp cases for CMYK devices.
(gxdevice.h, gxdevmem.h, gdevdrop.c, gdevmem.c, gdevmr8n.c, gdevrops.c)

Adds a platform-specific interface for reading lines from stdin.  This is
intended primarily to support GNU readline.  (lib.mak, gp.h, gp_strdl.c)

</pre>

<hr>

<h2><a name="Version5.70"></a>Version 5.70 (internal) (2/20/99)</h2>

<p>
This fileset includes substantial changes to the interpreter in support of
making it fully reentrant (eliminating writable globals).

<h3><a name="5.70_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Interpreter)
	- The ref_stack structure has been renamed ref_stack_t, and has been
changed substantially.  Clients should now access all of its members, other
than the pointers to the current block, through the macros or procedures
defined in istack.h.  The STACK_LOOP_{BEGIN,END} macros have been removed.
	- The argument of context_state_load is no longer const.
	- Each file's table of operator definitions is now limited to 16
entries.  op_def_table[] no longer exists: use op_index_def() instead.
	- invalid_file_entry now has an associated VM space,
avm_invalid_file_entry, that must be used in constructing invalid file refs.
	- restore will now undo binding of pseudo-operators.  Attempting to
bind a local pseudo-operator into a global procedure will cause an
invalidaccess error.

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

Updates the driver documentation a bit.  It probably still includes a lot of
out-of-date text.  (doc/Drivers.htm)

Improves the problem reporting form to make it absolutely clear that test
data are required, and that the problem must be reproducible without using a
viewer.  (doc/Bug-form.htm)

Documents the -dDOINTERPOLATE switch.  (doc/Use.htm)

Documents the difference between public and tester releases, in connection
with making tester releases available to everyone.  (doc/New-user.htm)

Updates the list of history files.  (doc/Readme.htm)

Adds a questionnaire for people who want to be notified of new test
releases.  (doc/Readme.htm, doc/Tester.htm)

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

Fixes problems:
	- A ! was missing before an include.  (bcwin32.mak, msvc32.mak)
	- A trailing \ in some macro definitions was quoted incorrectly.
(bcwin32.mak, msvc32.mak)
	- An editing error prevented a makefile from working.  (bcwin32.mak)
	- The 16-bit spooler executable didn't reference its icon correctly.
(gs16spl.rc)
	- The Watcom makefiles had gotten badly out of date.  (watc.mak,
watclib.mak, wccommon.mak)
	- Some DEVICE_DEVS lines were too long for the shell to handle.
(openvms.mmk)
	- A space was missing before a colon.  (openvms.mmk)

Updates MSVC support to handle version 6.  (msvc32.mak)

Extends genconf to handle function types as well as image types, and changes
the output for image types.  (genconf.c)

Desupports the use of CONFIG for selecting between multiple configurations,
since parameterized output directories do this better.  (bcwin32.mak,
dvx-gcc.mak, gs.mak, int.mak, lib.mak, msvc32.mak, msvclib.mak, openvms.mak,
openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak,
watc.mak, watclib.mak, watcw32.mak)

Adds a -dDOINTERPOLATE switch to force Interpolate in all images.
(lib/gs_init.ps)

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

Rewrites viewpcx to eliminate dependence on a special filter.
(lib/viewpcx.ps)

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

Fixes problems:
	- The [e]pswrite and pdfwrite drivers wrote out clipping paths using
the winding number rule even if the path had been set with eoclip.
(gdevpdfd.c, gdevvec.c)
	- Some occurrences of ushort should have been gx_color_value.
(gdevpbm.c)
	- A comment was accidentally left outside comment quotes.
(gdev3852.c)
	- There was a char/byte mismatch not covered by a cast.
(gdevdcrd.c)
	- There were still some references to the 'huge' keyword, which has
been superseded by FAR.  (gdevwdib.c)
	- Some obsolete references to which_colors hadn't been removed.
(gdevwdib.c)
	- The [e]pswrite driver produced incorrect output for a curveto or
closepath followed by a lineto and then a moveto.  (gdevps.c)
	- The [e]pswrite driver could produce incorrect output for paths
ending with a lineto.  (gdevps.c)
	- The name paper_sizes was used both by a driver and by other code,
causing a problem when building with -dNOPRIVATE.  (gdevclj.c)

Consolidates the X error handling statics into a structure.  (gdevxini.c)

Updates the pdfwrite driver to reflect the addition of state to the
ASCII85Encode filter.  (gdevpsdf.c)

Adds a user-contributed driver for the Lexmark 5700 printer (black-and-white
only).  (contrib.mak, gdevlxm.c)

Updates the mswinpr2 driver with a new, user-contributed one that includes
interaction with the user.  (gdevwpr2.c)

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

Fixes problems:
	- When TrueType support was present, the FONTPATH scanner didn't
recognize TrueType fonts whose 'type' was "true" rather than the documented
<00 01 00 00>.  (lib/gs_ttf.ps)
	- When DEBUG was set, loading a TrueType font could cause an
/undefined error.  (lib/gs_ttf.ps)

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

Fixes problems:
	- Local (pseudo-)operators could get bound into global procedures
with 'bind', causing dangling references.  Attempting this now causes an
invalidaccess error.  Fixing this also required making restore undo binding
of pseudo-operators.  (zmisc.c)
	- A harmless dictfull error occurring during language level
switching caused an error.  (zmisc2.c)
	- If given a closed input file, flushfile caused an error, rather
than doing nothing.  (zfileio.c)

Renames the ref_stack structure as ref_stack_t, and factors it so that the
parts set only at initialization are separated from the dynamic parts, in
support of moving the stacks from static to dynamic storage.  (icstate.h,
idebug.h, idstack.h, iestack.h, iostack.h, iparam.h, iparray.h, istack.h,
idebug.c, interp.c, iparam.c, istack.c, zcontext.c, zpacked.c, zvmem.c)

Moves the dynamic part of the stacks in-line in the context structure; gets
rid of the statically allocated stacks.  (dstack.h, estack.h, icontext.h,
icstate.h, idstack.h, iestack.h, interp.h, iostack.h, ostack.h, icontext.c,
iinit.c, interp.c, zcontext.c)

Packages the dictionary lookup statistics in a structure, like the other
statistics.  (idict.c)

Changes from dynamic to static initialization of the function type table.
(int.mak, ifunc.h, iconf.c, zfunc.c, zfunc0.c, zfunc3.c)

Removes the PCXDecode filter.  (zfilterx.c)

Removes more writable statics.  (int.mak, btoken.h, files.h, icstate.h,
igstate.h, ipacked.h, iscan.h, icontext.c, imain.c, iscan.c, iscanbin.c,
zbseq.c, zcolor2.c, zcontext.c, zgstate.c, ziodev.c, zmath.c, zpcolor.c,
zpacked.c)

Changes the representation of the operator table to avoid allocating a
dynamic copy.  This introduces a limit of 16 entries per definition set.
(int.mak, opdef.h, iconf.c, idebug.c, iinit.c, interp.c, iutil.c,
zcontext.c, zcontrol.c, zdict.c, zfileio.c, zgstate.c, ztype.c)

Includes the ASCII85Decode filter in all configurations, for simplicity.
(iscan.c, zfdecode.c)

Makes the invalid file reference point to a static object.  (files.h,
icontext.c, zfile.c, ziodev.c)

Changes all dictfull error returns from the dictionary code to use
return_error.  This should have been done a long time ago!  (idict.c)

Increases the predefined size of systemdict a little more because .upp files
may define a lot of new entries.  (iinit.c)

Adds a few more interpreter statistics.  (interp.c)

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

Fixes problems:
	- Images never closed the data stream, placing a heavy load on the
garbage collector to clean up streams and stream states.  (lib/pdf_draw.ps)
	- Streams stored on external files didn't work.  (lib/pdf_base.ps)

Reorganizes code slightly to allocate less memory for in-line images.
(lib/pdf_draw.ps)

Speeds up some common operations a little.  (lib/pdf_base.ps)

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

Removes the PCXDecode filter.  (spcxx.h [deleted], spcxd.c [deleted])

Changes the name of a variable for greater clarity.  (stream.c)

Splits off the ASCII85Decode filter into a separate file, since it turns out
to be convenient to include it in all configurations.  (sa85d.h, sa85x.h,
sa85d.c, sfilter2.c)

Makes an initialization entry point available for non-heap-allocated
streams.  (stream.h, stream.c)

Changes the ASCII85Encode filter so it always produces lines of at most 80
characters, not counting the EOD marker.  THIS IS A NON-BACKWARD-COMPATIBLE
CHANGE, because this filter now needs a state structure, which it didn't
before.  (sa85x.h, sfilter2.c)

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

Fixes problems:
	- Reference counting of graphics state elements was wrong when
creating multiple contexts, causing memory corruption. (bug probably
introduced in 5.68) (gsstate.c)
	- If CIE joint caches were created because the reference count of
the existing caches was >1, the new caches weren't initialized correctly.
(bug introduced in 5.60, found by Ray Johnston.)  (gscie.c)
	- If Margins are set so that part of the default clipping region
lies outside the ((0,0),(width,height)) device coordinate space, the fast
case of images could cause a memory access error.  (gxifast.c)
	- In the case of a halftone with more bits than levels,
gx_check_tile_cache could incorrectly return false, causing images to render
more slowly than they should.  (gzht.h, gxht.c)
	- There was a const mismatch between an argument and the formal
parameter.  (gdevprn.h, gdevprn.c, gxclread.c)
	- An error in the definition of st_imager_state_num_ptrs caused the
garbage collector to omit marking one pointer in imager states, possibly
causing memory corruption.  (gxistate.h)
	- The bbox device, used with no target, didn't properly handle
images where more data was provided than needed.  (gdevbbox.c)

Removes any pretense of supporting multiple threads in a single-threaded
environment.  Dummy synchronization primitives, however, are still provided.
(gp_nsync.c)

Removes more writable statics.  (gximage.h, gxi12bit.c, gxino12b.c,
gxipixel.c)

Changes the handling of image types, and adds similar handling for function
types.  (gscdefs.h, gconf.c)

Consolidates the gs_std* files into a structure.  (gsio.h, gsmisc.c)

Speeds up the fastest (common) case of clipping fill_rectangle and copy_mono
operations.  We could do the same for the other operations if we wanted.
(gxclip.c)

Identifies this fileset as a tester release.  (gscdef.c)

</pre>

<hr>

<h2><a name="Version5.69"></a>Version 5.69 (internal) (2/4/99)</h2>

<p>
This incremental fileset fixes minor compilation problems, as well as many
problems with driver-based CRDs (not used by PostScript or PDF).

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

Fixes problems:
	- The OpenVMS makefile had not been updated properly to reflect the
division of files into subdirectories.  (openvms.mak)
	- A space was missing before a :.  (devs.mak)
	- The MMK makefile had not been updated to reflect the renaming of
the psm[raw] devices to pksm[raw].  (openvms.mmk)

Changes the default name of the build directory for the library test program
from debugobj to libobj, so that one can work with both library and
interpreter builds without interference.  (ugcclib.mak)

Adds -fno-builtin to the gcc switches, to detect failure to declare
functions like memcpy, at a small cost in performance.  (ugcclib.mak,
unix-gcc.mak)

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

Makes a couple of minor fixes to ansi2knr, suggested by users.  (ansi2knr.c)

Updates ps2ai.ps with an improved version from its author.  (lib/ps2ai.ps)

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

Fixes problems:
	- The 32-bit CMYK "async" BMP driver was declared incorrectly as a
non-async device.  (gdevbmpa.c)
	- Some #includes were missing, because gcc didn't warn about
failures to declare certain standard functions.  (x_.h, gdevdcrd.c, gdevx.c)
	- The PC frame buffer device still referred to _ss and near.
(gdevpcfb.c)
	- The [e]pswrite driver didn't handle bitmaps with a non-zero X bit
offset correctly.  (gdevps.c)
	- The pdfwrite driver wrote all clipping paths with the winding
number rule, even if they were established by eoclip.  (gdevpdfd.c)
	- "Vector" drivers wrote all clipping paths with the winding number
rule, even if they were established by eoclip.  (gdevvec.c)

Adds the CRDName parameter to the sample driver-based CRD.  (gdevdcrd.c)

Tweaks the sample driver-based CRD to make it a more realistic (closer to
the PostScript default).  (gdevdcrd.c)

Adds the sample driver-based CRD to the modified X drivers.  (devs.mak,
gdevxalt.c)

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

Fixes problems:
	- Some #includes were missing, because gcc didn't warn about
failures to declare certain standard functions.  (zchar1.c)
	- Driver CRDs were not supported properly.  (zcrd.c, lib/gs_lev2.ps)

Changes some code because non-int switch expressions are not handled
correctly in pre-ANSI C.  (igcref.c, zdevice.c)

Adds the ability to set the orientation of zero-length "dots".  (zgstate.c)

Adds comments on an alternative shallow-binding design.  (dstack.h)

Changes the threshold for repeatedly rescanning change lists so that it is
based on the cumulative amount of rescanning and not the amount in a single
pass.  (isave.c)

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

Changes some code because non-int switch expressions are not handled
correctly in pre-ANSI C.  (sfilter1.c)

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

Fixes problems:
	- Some casts to (gx_device *) were missing.  (gschar.c)
	- Some #includes were missing, because gcc doesn't warn about
failures to declare certain standard functions.  (gdevdgbr.c, gscie.c,
gsmatrix.c, gxshade1.c)
	- gxclread.c now needs gdevprn.h to declare certain procedures.  We
tried very hard to make the command list machinery not depend on anything
related to printer devices, but at this point we have not succeeded.
(gxclread.c)
	- For CRDs set by library clients, the is_identity flags in the
caches were set incorrectly, producing incorrect output.  (gscie.h, gscie.c,
gscrd.c, gscrdp.c)
	- For CRDs set by library clients, the EncodeABC and RenderTable T
procedures were sampled incorrectly.  (gsciemap.c, gscrd.c)
	- The interpreter tried to sample the TransformPQR functions in the
PostScript CRD even for driver CRDs.  (gscie.h, gscie.c)
	- Library assistance was needed for the interpreter to support
driver CRDs properly.  (gscrdp.h, gscrdp.c)
	- The procedures that accessed cached CIE values didn't round the
index, so accessing already-cached values could wipe out the cache.
(gscie.c)
	- The procedure that accessed cached RenderTable.T values simply
wasn't implemented.  (gscrd.c)

Adds an "if (1)" to a macro to suppress "statement not reached" warnings
from stupid compilers.  (gsmemlok.c)

Changes the syntactic form of some constant tables to suppress
signed/unsigned warning messages.  (gsbitops.c, gxsample.c)

Changes some switch statements to if/else because non-int switch expressions
are not handled correctly in pre-ANSI C.  (gdevmr8n.c, gxdcolor.c)

Adds the ability to set the orientation of zero-length "dots".  (gsline.h,
gxline.h, gsline.c, gsstate.c, gxstroke.c)

Adds an allocator state variable to support the change in the rescanning
algorithm.  (gxalloc.h)

</pre>

<hr>

<h2><a name="Version5.68"></a>Version 5.68 (internal) (1/29/99)</h2>

<p>
This fileset implements PatternType 2 (gradient fill) Patterns.  All
significant PostScript LanguageLevel 3 features are now implemented, except
for DeviceN color spaces.  We have also verified that the MMK script for
OpenVMS also works with MMS.

<p>
Note that there are significant non-backward compatible changes to memory
management for device instances: we are sorry about this, but just as with
paths in 5.22, we had to fix this design problem at some point.

<h3><a name="5.68_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- A new makefile, unix-aux.mak, must be included in all Unix
top-level makefiles.  (It is included in the ones we distribute.)
unixtail.mak is renamed unixlink.mak.

(Library)
	- The names of the anti-aliasing parameters in the device color_info
structure have been changed.
	- Dummy definitions for PC-specific C keywords (_cs, _ds, _ss, near,
far, huge) are no longer provided: these keywords should be removed from
non-PC-specific code.
	- The names of the alignment_mod, ptr_le, ptr_lt, ptr_ge, ptr_gt,
and ptr_between macros have been changed to upper case (ALIGNMENT_MOD etc.)
	- gs_make_null_device now takes an additional argument.
	- The ccolor member of a gx_device_color is no longer inside a
substructure.
	- Clients now must initialize Pattern templates with
gs_patternN_init, where N is the PatternType (normally 1), before filling in
the members.
	- gs_pattern_instance_common_t is renamed gs_pattern_instance_t;
gs_pattern_instance is renamed gs_pattern1_instance.
	- To set the target of a forwarding device, you must now use
gx_device_set_target rather than setting the target member directly.
	- Memory management for devices has changed substantially, and in a
subtle way.  If you have code that calls the library, please read the
documentation in gxdevcli.h.
	- Callers of the driver create_buf_device procedure must always call
it through gdev_create_buf_device, never directly.
	- For composite and CID-keyed fonts, the character code returned by
gs_show_current_char and gs_kshow_previous_char is now the full multi-byte
character code rather than just the last byte of the code.
	- gdev_cmap_set_method has been replaced by a device parameter,
ColorMappingMethod.
	- The CRD pointer parameter for param_write_cie_render1 and
param_put_cie_render1 is no longer const.

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

Fixes problems:
	- The documentation for resize_object and resize_string didn't allow
the new size to be the same as the old size, didn't describe what data was
preserved, and didn't guarantee to return the same object if the new size
was the same as the old size.  (gsmemraw.h, gsmemory.h)
	- The documentation for the value returned by the internal
.getmetrics32 operator was incorrect.  (zchar32.c)
	- The documentation for the special color mapping device didn't say
that the caller had to call gs_setdevice_no_init to update graphics states.
(gdevcmap.h)

Notes that OPENVMS.MMK works with both MMK and MMS.  (doc/Make.htm)

Adds a note to the C style guide about nested vs. multi-branch 'if'
statements.  (doc/C-style.htm)

Notes that the multi-threaded ("async") drivers require libc version 6 or
higher under Linux.  (doc/Make.htm)

Notes additional Irix/MIPSpro combinations that compile idict.c incorrectly,
and gives a workaround.  (doc/Make.htm)

Adds a couple more acknowledgements.  (doc/Helpers.htm)

Documents the new -Z^ switch.  (doc/Use.htm)

Documents the new rules about memory management for device instances
(gxdevcli.h, gxdevice.h)

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

Fixes problems:
	- The "async" BMP devices were accidentally included in the default
list for Unix, leading to a requirement for the POSIX thread package, which
is not available on all systems.  (unix-gcc.mak)
	- There was a minor typo in the new MMK script.  (openvms.mmk)
	- The MMK script redefines macros, which MMS does not allow.
(openvms.mmk)
	- The gcc version test used gcc rather than $(CC) for the compiler
name.  (unix-gcc.mak)
	- There was a minor typo in the pcx2up device makefile entry.
(devs.mak)
	- Some commands in the Unix install rules referenced sh rather than
$(SHELL).  (unixinst.mak)

Makes (dummy) in-RIP trapping an optional feature, and removes it from the
default configuration.  (int.mak, lib.mak)

Splits off the build rules for the Unix auxiliary programs, so they can be
shared between interpreter and library configurations.  (ugcclib.mak,
unix-aux.mak, unix-gcc.mak, unixansi.mak, unixtail.mak [deleted],
unixlink.mak, unixtrad.mak)

Adds the bitcmyk device to the list of devices for the library test program.
(ugcclib.mak)

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

Fixes problems:
	- ansi2knr didn't handle occurrences of '/' or quoted strings inside
an argument list correctly.  (ansi2knr.c)

At the suggestion of a GNU person, makes ansi2knr check for output errors.
(ansi2knr.c)

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

Fixes problems:
	- Setting the resolution on the SPARCprinter didn't work.
(gdevsppr.c)
	- Even in PDF 1.1 compatibility mode, the PDF writer used a
predictor to compress images.  (gdevpsdi.c)
	- Reference counting for devices was not implemented consistently.
(gdevxalt.c)
	- gcc (again) missed some static / non-static inconsistencies.
(gdevbmpa.c, gdevifno.c)

Removes all remaining uses of segment identifiers (_cs, _ds, _ss) from
non-PC-specific code.  (gdev3852.c, gdevcdj.c, gdevhl7x.c, gdevl256.c,
gdevmgr.c, gdevsgi.c, gdevsppr.c, gdevvglb.c)

Removes all remaining uses of the 'near' keyword from non-PC-specific code.
(gdevcd8.c, gdevcdj.c, gdevcgm.c)

Changes uses of round_up to ROUND_UP.  (gdevmsxf.c, gdevpcx.c, gdevpx.c,
gdevxxf.c)

Adds user-contributed support for 16-bit displays to the MS Windows driver.
(gdevmswn.c, gdevwdib.c)

Adds a user-contributed driver (sunhmono) for the Harlequin variant of 1-bit
Sun raster files.  We expect to add other varieties of Sun Raster file
eventually as well.  (contrib.mak, gdevsunr.c)

Adds a user-contributed driver (fs600) for the Kyocera FS-600 laser printer.
(devs.mak, gdevdjet.c)

Replaces the sample device CRD with a slightly hacked version of the default
PostScript CRD, and moves it to a separate file for greater flexibility in
testing.  (gdevdcrd.h, gdevbit.c, gdevdcrd.c)

Adds standard and "async" 32-bit CMYK BMP drivers (even though this is
outside the published BMP format).  (gdevbmp.c, gdevbmpa.c)

Changes the names of the separated-CMYK PBM drivers from psm to pksm, to be
more descriptive.  (devs.mak, openvms.mak, unix-gcc.mak, gdevpbm.c)

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

Fixes problems:
	- On MS Windows and OS/2, "(%stdin) (r) file bytesavailable" caused
a crash.  (gp_msio.c, gp_os2.c)

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

Fixes problems:
	- TrueType fonts with fewer glyph names in post than entries in loca
caused an error.  (gs_ttf.ps)

Adds additional tracing to the TrueType font loader.  (lib/gs_ttf.ps)

Per Adobe, adds the Euro symbol under the name /Euro (capitalized) to
various built-in Encodings.  (lib/gs_mro_e.ps, lib/gs_pdf_e.ps,
lib/gs_sym_e.ps, lib/gs_wan_e.ps)

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

Fixes problems:
	- An extraneous file got left in the fileset.  (lib/pdf_main.ps.sav
[deleted])
	- The number of required arguments for .pathbbox was incorrectly
specified as 0 rather than 1.  (zpath1.c)
	- Opening a ReusableStreamDecode filter with a string source and no
decoding filters left an extra value on the stack.  (lib/gs_ll3.ps)
	- Type 32 fonts sometimes didn't display the characters, or
displayed them offset.  (lib/gs_typ32.ps)
	- In LanguageLevel 3, copypage still called EndPage with 1 rather
than 0.  (lib/gs_init.ps)
	- The HalftoneName parameter was missing from the trapping parameter
set.  (lib/gs_ll3.ps)
	- CMap character entries were processed in the wrong order.
(lib/gs_cmap.ps)
	- CMap'ed non-CID fonts didn't work properly, because they called
BuildChar with the original character code rather than BuildGlyph with the
mapped glyph.  (zchar.c)
	- Using an out-of-range CID value with a CIDFont caused an error
rather than substituting a notdef.  (lib/gs_cidfn.ps)
	- CIDFontType 0 fonts with a GlyphDirectory didn't fall back to the
indexed character data if the CID wasn't in the GlyphDirectory.
(lib/gs_cidfn.ps)
	- CIDFontType 0 fonts didn't substitute a notdef at all.
(lib/gs_cidfn.ps)

Changes uses of round_up to ROUND_UP.  (igcstr.c)

Updates clients for the object-oriented changes to Patterns.  (zcolor2.c,
zpcolor.c)

Implements the rest of PatternType 2.  (ipcolor.h, zpcolor.c, zshade.c)

Makes in-RIP trapping an optional feature.  (lib/gs_ll3.ps, lib/gs_trap.ps)

Updates clients for the change in gs_show_current_char.  (zcfont.c, zchar.c)

Changes the dict_*_param macros to procedures, for easier tracing.  This
includes a change in the return value of dict_matrix3_param.  (icie.h,
zcie.c, zcrd.c)

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

Changes uses of round_up to ROUND_UP.  (scfd.c, scfe.c)

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

Fixes problems:
	- Once again, gcc failed to flag a static procedure declaration
followed by a non-static definition.  (gdevprna.c, gximage3.c)
	- Anti-aliasing no longer worked for the x11alpha device.  To fix
this, we factored out the anti-aliasing information in the
gx_device_color_info structure.  (bug introduced in 5.65) (gxdevcli.h,
gdevabuf.c, gdevdflt.c, gdevxalt.c, gsdparam.c)
	- An empty declaration generated an extraneous semicolon.
(gxclip2.h)
	- Some macros that generated an if-else construct didn't enclose it
in BEGIN/END, possibly leading to incorrect parsing.  (gxobj.h)
	- A comment was missing a closing */.  (gxpageq.h)
	- The handling of the phase in Pattern filling was broken again.  We
probably broke it with the "fix" introduced in 5.24.  (gxp1fill.c)
	- Looking up an undefined IODevice name caused a memory access
error.  (bug claimed to be fixed in 5.24) (gsiodev.c)
	- The null device installed for stringwidth didn't copy the color
mapping information from its target, causing confusion if the current device
was a pattern accumulator.  (gxdevcli.h, gxdevice.h, gschar.c, gsdevice.c,
gxpcmap.c)
	- mem_mapped2_copy_mono produced incorrect results for byte-aligned
rectangles exactly 1 byte wide (fix from John D.), and could also access
data 1 byte beyond the end of each source row.  (gdevm2.c)
	- In the case of a masked image or a RasterOp involving a Pattern,
the garbage collector could fail to follow a pointer, possibly causing
memory corruption.  (gsdcolor.h)
	- Assigning a double value to a float variable caused an infinite
recursion.  (gxshade1.c)
	- Failure to detect when the region being filled had become very
small caused excessive recursion.  (gxshade4.c)
	- The default implementations of resize_object didn't always return
the old object if the old and new sizes were the same.  (gsalloc.c,
gsmalloc.c)
	- The left side bearing of TrueType characters was sometimes
calculated incorrectly.  (gstype42.c)
	- The TrueType renderer disregarded the left side bearing values.
We aren't sure that the change we made is right, but it seems to produce
better output.  (gstype42.c)
	- Shadings used the first Decode entry for both X and Y values.
(gxshade.c)
	- Function-based Shadings sometimes omitted part of their output.
(gxshade1.c)
	- Function-based Shadings didn't access 4-bit-per-sample data
correctly.  (gsfunc0.c)
	- The malloc/free-based allocator didn't finalize objects when
freeing them.  (gsmalloc.c)
	- Reference counting for device instances was not implemented even
close to consistently.  THIS IS THE BUG TAIL WE WORRIED ABOUT IN 5.24.
(gxdevcli.h, gxdevice.h, gdevbbox.c, gdevcmap.c, gdevmem.c, gdevnfwd.c,
gdevplnx.c, gdevprn.c, gdevrops.c, gsalphac.c, gschar.c, gsdevice.c,
gsropc.c, gxidata.c, gxmclip.c, gxipixel.c, gxpcmap.c)
	- Some device structure definitions failed to include finalization.
(gdevmrop.h, gsstruct.h, gxclip2.h, gxcpath.h, gxdevmem.h, gxmclip.h)
	- Reference counting for the device halftone wasn't correct in the
band rasterizer.  This must be a recently introduced bug, because otherwise
banding couldn't have worked.  (gxclrast.c)
	- When banding, high-level images that extended off the page in the
Y direction caused memory access errors.  (gxclimag.c)
	- [a]widthshow didn't use the correct value for comparison for
composite fonts with FMapType 9 (CMap).  (gxchar.h, gschar.c, gschar0.c,
gsfcmap.c)
	- The special color mapping device only worked for
device_cmap_monochrome.  (gdevcmap.h, gdevcmap.c)
	- The definition of gs_memory_locked_release was wrong.
(gsmemlok.h, gsmemlok.c)
	- An opaque structure definition (for gx_device) was missing,
creating a need for an otherwise unnecessary #include. (gscrdp.h)
	- Certain cached values weren't computed when needed.  Fixing this
required removing 'const' from a parameter type.  (gscrdp.h, gscrdp.c)
	- gxclmem.c #included "gsmalloc.h", which is no longer needed.
(gxclmem.c)
	- Memory management for device halftones was incorrect, leading to
objects being freed twice or other memory corruption during band rendering.
(gzht.h, gsht.c, gsstate.c, gxclrast.c, gxistate.c)
	- Setting a driver-originated CRD didn't invalidate cached
information, leading to incorrect output.  (gscrdp.c)
	- A consistency check on driver-originated CRDs was incorrect,
causing valid CRDs to be rejected.  (gscrdp.c)

Removes dummy definitions for old PC-specific language extensions.
(stdpre.h)

Removes uses of the PC-specific 'huge' keyword.  (gdevmem.c)

Removes uses of the PC-specific 'near' keyword.  (gdevabuf.c, gdevbbox.c)

Changes the pointer comparison macros to upper-case names.  (gxalloc.h,
stdpre.h, gsalloc.c, gsmisc.c)

Changes the alignment_mod macro to upper case.  (stdpre.h, gdevdbit.c,
gdevdgbr.c, gsparams.c, gxifast.c)

Changes the round_up and round_down macros to upper case.  We retain the
lower-case definitions for the sake of the PCL code.  (gxfcache.h, gxobj.h,
stdpre.h, gdevalph.c, gdevmem.c, gsalloc.c, gspath1.c, gxccman.c,
gxclimag.c, gxifast.c)

Makes Pattern colors more object-oriented, to support PatternType 2,
splitting gsptype1.c off from gspcolor.c in the process.  (gsccolor.h,
gsdcolor.h, gspcolor.h, gsptype1.h, gsptype2.h, gxcolor2.h, gxpcolor.h,
gspcolor.c, gsptype1.c, gxpcmap.c)

Implements PatternType 2.  (gspcolor.h, gsptype1.h, gsptype2.h, gxcolor2.h,
gxpcolor.h, gxshade.h, gspcolor.c, gsptype2.c)

Changes the interface to shaded filling to make filling rectangles more
efficient.  (gsshade.h, gscolor3.c, gsshade.c)

Improves some macros that didn't handle expressions as arguments.
(gsrect.h)

Improves tracing of loading the CIE caches.  (gscie.c)

Cleans up some formatting, and replaces some floating point divides with
multiplies.  (gstype42.c)

Adds default values for the MaxSeparations (1), Separations (false), and
SeparationColorNames (empty array) device parameters.  (gsdparam.c)

Adds -Z^ to trace reference counting.  (gsrefct.h, gsmemory.c)

Changes the definition of finalization so that finalization procedures *can*
assume that objects they reference still exist.  This is necessary so that
forwarding devices can decrement the reference counts of their targets.
Fortunately, all invocations of finalization (in 'restore', the garbage
collector, and freeing) already have this property.  (gsstruct.h)

Extends CRD initialization so that cached values may be copied from an
existing CRD.  (gscrd.h, gscrd.c)

Adds a wrapper to the driver create_buf_device procedure to increment the
reference count, so that buffer devices can be freely used in graphics
states and as a target.  (gxdevcli.h, gdevprn.c, gxclread.c)

Removes recursion from the shading rendering code, in preparation for making
it interruptible (required for DeviceN color mapping callouts).
(gxshade4.h, gxshade1.c, gxshade4.c, gxshade6.c)

Monitor-locks the default allocator based on the C heap, if multi-threading
is being supported at all.  (lib.mak, gsmalloc.h, gsmalloc.c)

Speeds up the implementation of mem_true32_copy_mono for the common case.
(gdevm32.c)

Adds a (disabled) option for defining gx_color_index as a pointer or a
structure, for testing.  (gxcindex.h)

Makes the library test program test the special color mapper more
thoroughly.  (gslib.c)

</pre>

<hr>

<h2><a name="Version5.67"></a>Version 5.67 (internal) (1/8/99)</h2>

<p>
This fileset adds more PostScript LanguageLevel 3 capability:
<ul>
<li>	- Complete implementation of shfill.
<li>	- Most of the expanded CMap capabilities.
<li>	- ReusableStreamDecode filter.
<li>	- FontType 2 for CFFs (formerly done in an incompatible way).
<li>	- HalftoneMode user parameter.
<li>	- HalftoneTypes 6, 10, and 16.
<li>	- ImageType 3 images.
<li>	- UseCIEColor device parameter.
</ul>

<p>
It also adds a build script for MMK (which may also work with MMS) under
OpenVMS, and Uli Wortmann's drivers for the H-P color inkjet printers.
Among other bug fixes, it eliminates about half the "possibly uninitialized
variable" compiler warnings.

<h3><a name="5.67_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- The default UCR and BG functions are now f(k) = k rather than f(k)
= 0.
	- The set_[d]fmul2fixed_vars macros have been removed from
gxfixed.h.  Clients must use the new CHECK/FINISH_[D]FMUL2FIXED_VARS macros.
(We don't think there are any such clients outside Ghostscript itself.)
	- The internal procedure gx_cpath_intersect_slow is replaced with
gx_cpath_intersect_path_slow, with different arguments.
	- gs_color_space_type_Device{Gray,RGB,CMYK} are now private.
Clients should use the gs_cspace_Device{Gray,RGB,CMYK} access procedures in
gscspace.h to obtain device color space objects.
	- FontType 2 was renamed from ft_CFF to ft_encrypted2.
	- FontType 2 fonts now have FontType = ft_encrypted2, rather than
ft_encrypted with CharstringType = 2.  CharstringType no longer exists.
	- Type 1 / Type 2 fonts now have an additional member, interpret,
that must be initialized.
	- gdev_prn_render_lines and gdev_prn_get_band_buffer replace
gdev_prn_locate_overlay_buffer and gdev_prn_get_overlay_bits.  "Async"
drivers must now use the new procedures to implement partial-page rendering
recovery.
	- Clients that pass ImageType 3 images where the mask and the image
are not scaled identically, or that call image_plane_data without knowing
the image type, must now call gs_image_planes_wanted or
gx_image_planes_wanted in order to find out which subset of the data planes
to pass to the next call of image_plane_data.
	- gx_image_enum_common_init now takes slightly different arguments.
	- gs_imager_state_initialize now initializes the entire imager
state, including halftone, dev_ht, and ht_cache.
	- The argument lists for the plane_data and end_image procedures in
image enumerators have changed.

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

Fixes problems:
	- The 5.66 News mentioned the non-existent WAITFILE macro, and had
another minor typo.  (doc/News.htm)
	- The URL for the user-contributed H-P 850c driver was incorrect.
(doc/Devices.htm, contrib.mak)
	- The documentation for the driver image API had gotten out of date.
(doc/Drivers.htm)

Greatly improves documentation for the page queue.  (from Artifex 5.50c)
(gxpageq.h)

Documents the fact that Solaris builds now need -lposix4 for &lt;semaphore.h&gt;.
(doc/Make.htm)

Adds a stack status comment in .pdfshow.  (lib/gs_pdfwr.ps)

Documents the new -Z` debugging switch.  (doc/Use.htm)

Touches up some formatting in the C style guide, and adds a mention of the
space-before-: rule for makefiles.  (doc/C-style.htm)

Adds documentation for the new H-P 8xx drivers.  (doc/Devices.htm)

Splits off news for versions 5.0 - 5.50 into a separate file.
(doc/History5.htm)

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

Fixes problems:
	- On MS Windows platforms, the DLL object file wasn't created in the
proper directory.  (from Artifex 5.55) (msvc32.mak)
	- cfonts.mak didn't have no-op commands for rules that didn't
contain any commands.  (cfonts.mak)
	- The version number for libpng was different from libpng's own
version numbering system.  (libpng.mak)
	- Solaris builds now need -lposix4 for &lt;semaphore.h&gt;.
(unix-gcc.mak, unixansi.mak, unixtrad.mak)
	- The makefiles redefined a number of macros, which MMS doesn't
allow.  (bcwin32.mak, gs.mak, int.mak, lib.mak, libpng.mak, msvc32.mak,
openvms.mak, openvms.mmk, unix-gcc.mak, unixansi.mak, unixtrad.mak,
version.mak)

Changes cp.bat and rm.bat to eliminate "File not found" messages.  (from
Artifex 5.55) (cp.bat, rm.bat)

Changes all platform-independent makefiles to add a space before the : that
separates the targets from the dependencies, to allow the makefiles to be
used with MMS/MMK.  (cfonts.mak, contrib.mak, devs.mak, gs.mak, int.mak,
jpeg.mak, lib.mak, libpng.mak, zlib.mak)

Adds a script for compiling Ghostscript on OpenVMS systems with MMK.  This
has not been tested extensively.  (doc/Make.htm, openvms.mmk)

Changes the set of optimization switches for MSVC++.  We believe the new
switches produce working executables, which /O2 didn't.  (msvc32.mak,
msvccmd.mak)

Updates the default expected libpng version to 1.0.2.  (bcwin32.mak,
dvx-gcc.mak, msvc32.mak, msvclib.mak, openvms.mak, os2.mak, ugcclib.mak,
unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, watclib.mak,
watcw32.mak)

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

Fixes problems:
	- Default scaling in viewcmyk.ps was broken.  (lib/viewcmyk.ps)

Updates pdf2dsc.ps with a newer (user-contributed) version that generates
DocumentMedia and PageMedia comments.  (lib/pdf2dsc.ps)

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

Fixes problems:
	- An int * was provided where a uint * was required.  (gdevpbm.c)
	- ps2ps -dLanguageLevel=1 generated invalid output.  (gdevps.c)
	- The X drivers crashed on gray-scale displays.  (bug probably
introduced in 5.61)  (gdevx.c)
	- The width and height of the cljet5 device were interchanged.
(from Artifex) (gdevclj.c)
	- The PDF writer didn't clip cached characters properly.  (bug
introduced somewhere between 3.51 and 5.10) (gdevpdfi.c)
	- For stroked paths with a non-uniform CTM, the PDF writer could
emit coordinates larger than 32K, which Acrobat handles incorrectly.
(gdevpdfd.c)

Restructures some code to suppress bogus "possibly uninitialized variable"
warnings.  (gdevpdfm.c, gdevps.c)

Adds some unnecessary initializations to suppress bogus "possibly
uninitialized variable" warnings.  (gdevpbm.c, gdevpdfd.c, gdevvec.c,
gdevxalt.c)

Rewrites the (contributed) X11 xfont code to remove code duplication.
(gdevx.h, gdevx.c, gdevxini.c, gdevxxf.c)

Adds a user-contributed driver for the H-P LaserJet 3100 with H-P software.
(gdevmeds.h, gdevl31s.c, gdevmeds.c)

Adds a user-contributed option for 600 dpi output on H-P DesignJet
650C-compatible printers.  (gdevcdj.c)

Removes unnecessary references to device color spaces.  (gdevpdfi.c)

Changes the [e]pswrite and pdfwrite drivers to use EndOfBlock rather than
Rows for CCITTFax image encoding, producing slightly smaller output.
(gdevpsdf.c)

Changes the sample async driver to use gdev_prn_render_lines and
gdev_prn_get_band_buffer instead of locate_overlay_buffer and
get_overlay_bits.  Unfortunately, because "async" memory management is
broken, we have no way to test the code.  (gdevbmpa.c)

Updates clients for the change in gx_image_enum_common_init.  (gdevpdfi.c,
gdevvec.c)

Adds Uli Wortmann's drivers for the H-P color inkjet printers.
(contrib.mak, gdevcd8.c)

Adds mode 9 compression to the PCL printer utilities.  (gdevpcl.h,
gdevcdj.c, gdevpcl.c)

Updates implementors for the change in the plane_data and image_end image
processing procedures.  (gdevpdfi.c, gdevps.c, gdevpx.c)

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

Fixes problems:
	- The PFM files for URW Grotesk and Antiqua had some extraneous ^M
characters inserted before ^J characters.  (fonts/u003043t.pfm,
fonts/u004006t.pfm)
	- CID-keyed fonts didn't handle GlyphDirectory correctly.
(lib/gs_cidfn.ps)
	- CIDFontType 0 fonts with 0-length Subrs caused an error.
(lib/gs_cidfn.ps)
	- Malformed TrueType fonts with overlapping tables (which are
nevertheless apparently acceptable to Windows) caused an error.
(lib/gs_ttf.ps)
	- The Hershey font repairs documented in fileset 5.24 apparently
never happened: the makeher.ps program was fixed, but the derived fonts were
still broken.  (fonts/h*.ps)
	- In some Fontmaps, the /Charter-* font names were linked directly
to the Bitstream fonts, rather than being aliases for /CharterBT-*.
(lib/Fontmap.GS, lib/Fontmap.Sol, lib/Fontmap.Ult)

Makes undefined fonts execute the SubstituteFont procedure in $error, per a
posting by Stephen Zisk of Adobe on pdf-prepress-l on 10/8/97.
(lib/gs_fonts.ps)

Changes the interpreter-level CIE color space install procedures to reflect
the addition of const to the color space argument. (zcie.c)

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

Fixes problems:
	- The interpreter appeared to be a distiller even when the current
device was not pdfwrite.  We fixed this by patching 'where' to make the
distiller operators visible iff the current device is pdfwrite.  We also
moved the setcolor hack in 'where' into PostScript code.  (lib/gs_init.ps,
lib/gs_lev2.ps, lib/gs_pdfwr.ps, zmisc2.c)
	- The current color space for shfill wasn't identically the same
color space as the one in the shading.  (gs_ll3.ps)

Changes the default UCR and BG functions from f(k) = 0 to f(k) = k.
(lib/gs_init.ps)

Adds some unnecessary initializations to suppress bogus "possibly
uninitialized variable" warnings.  (igc.c, zcie.c)

Restructures some code slightly to suppress a bogus "possibly uninitialized
variable" warning.  (zdevice.c)

Brings the CMap machinery up to LL3, by allowing a single CMap to reference
multiple fonts (usefont, usematrix, and array CIDSystemInfo).
(lib/gs_cmap.ps, zfcmap.c)

Finishes implementing ReusableStreamDecode.  The implementation is very
inefficient -- it reads the entire contents into a string -- but it passes
the Genoa FTS.  (lib/gs_ll3.ps, lib/gs_res.ps, zfreuse.c)

Changes CFFs with CharstringType = 2 to generate FontType 2 fonts, rather
than FontType 1 with CharstringType = 2, for compatibility with Adobe's LL3
implementations.  (lib/gs_cff.ps, lib/gs_type1.ps, lib/type1ops.ps, bfont.h,
ichar1.h, ifont.h, ifont1.h, zbfont.c, zchar1.c, zchar2.c, zcharx.c,
zfont.c, zfont1.c, zfont2.c)

Adds the ability to create (with .bytestring) and do a few operations
(currently only length, put, putinterval) on byte arrays.  This is needed
for implementing ReusableStringDecode filters with >64K bytes of data, and
for the LL3 halftone types.  (zgeneric.c, zstring.c)

Implements HalftoneMode, and HalftoneTypes 6, 10, and 16.  To do this, we
introduce an internal HalftoneType 7.  (lib/gs_dps2.ps, lib/gs_init.ps,
lib/gs_ll3.ps, lib/gs_res.ps, zht2.c)

Finishes implementing ImageType 3 images.  (zimage.c, zimage3.c)

Adds the hooks in ColorSpace defineresource and undefineresource for
detecting definitions that interact with UseCIEColor.  (gs_res.ps)

Implements UseCIEColor at the interpreter level.  (lib/gs_dps1.ps,
lib/gs_ll3.ps, zcolor1.c, zcolor2.c, zimage.c, zmisc3.c)

Touches up some formatting.  (igstate.h)

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

Fixes problems:
	- A MediaBox with a non-zero llx or lly would produce incorrect
output.  The way we fixed this doesn't exactly match Acrobat, but it
produces reasonable output.  (based on a change from Artifex 5.55)
(lib/pdf_main.ps)
	- Colored patterns didn't work properly.  (lib/pdf_draw.ps)
	- The resources in a Pattern dictionary weren't made available
during the execution of the PaintProc.  (fix from Artifex) (lib/pdf_draw.ps)

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

Adds a flag to the ASCIIHexEncode filter to indicate whether or not to write
an EOD, required for Level 1 output from the pswrite device.  (sstring.h,
sstring.c)

Adds a close_at_eod flag to the stream state, for implementing reusable
streams; also cleans up some formatting.  (stream.h, stream.c)

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

Fixes problems:
	- Black-and-white images with Interpolate = true produced
undesirable artifacts if the image resolution was close to that of the
device.  We now disable Interpolate in this case.  (gxiscale.c)
	- In "async" mode, get_hardware_params did an unnecessary flush and
reopen.  (from Artifex 5.50c) (gdevprna.c)
	- The computation of the minimum band height for the "async" reader
was incorrect. (from Artifex 5.50c) (gdevbmpa.c)
	- The "fix" for reallocating async buffer memory in 5.50 was
incorrect. (from Artifex 5.55) (gdevprn.c)
	- The "async" reader called clist_finish_page, which it shouldn't.
(from Artifex 5.50c) (gdevprn.c)
	- The image enumeration procedures for ImageType 4 were unnecessary,
since the ImageType 1 code now handles ImageType 4 as well.  (gximage4.c)
	- The structure descriptor for tile clipping devices was
unnecessary, since these are the same as mask clipping devices.  (gxclip2.h)
	- There was a trailing comma in an enumeration list.  (gsbitops.c)
	- Some compilers didn't like initializing a uint with ~0.
(gdevm1.c)
	- shfill unnecessarily saved, reset, and restored the graphics
state.  (gscolor3.c)
	- Radial shadings always extended the shading to radius = 0.
(gxshade1.c)
	- An identifier exceeded VMS's limit of 31 characters.  (gdevprn.h,
gdevprn.c)
	- A header file didn't #include enough of its prerequisites.
(gxpcolor.h)
	- Images with non-default ImageMatrix weren't written correctly in
the band list. (bug introduced in 5.60)  (gximage1.c)
	- Banded images that had to use the default implementation incurred
an extra level of procedure call for each block of data.  (gxclimag.c)
	- Images rotated by other than a multiple of 90 degrees produced
incorrect output, because pie-&gt;rect.p.y was updated after each block of
data, causing image_band_box to produce inconsistent results.  (bug
introduced by async changes in 5.50) (gxclimag.c)
	- The client_data pointer in client_order halftones wasn't traced
correctly, possibly causing memory corruption if this type of halftone was
used.  (These are not currently used by the PostScript interpreter.)
(gsht.c, gsht1.c)
	- ImageType 3 images didn't handle subrectangles.  (Not a problem
for PostScript, which doesn't generate subrectangles, or for PCL, which
doesn't use them.)  (gximage3.c)
	- If a VMerror occurred when setting up an ImageType 3 image. an
attempt could be made to free an uninitialized pointer.  (gximage3.c)
	- ImageType 4 images with 1 to 8 bits per sample and Decode = [1 0]
didn't test transparency correctly. (bug introduced in 5.60) (gximage.h,
gxicolor.c, gximono.c, gxipixel.c)
	- setgray, setrgbcolor, sethsbcolor, and setcmykcolor didn't use
gs_cspace_assign, causing code duplication.  After this fix, we made the
device color space types private, since there are no longer any references
to them outside gscspace.c.  (gxcspace.h, gscolor.c, gscolor1.c, gscspace.c)
	- gs_cspace_assign was misspelled cs_cspace_assign.  (gscspace.h)
	- setgray didn't set the pattern pointer of the current color to 0,
possibly causing the GC to retain patterns it shouldn't.  (gscolor.c)
	- The dev_ht member of an imager (or graphics) state wasn't included
in the macro that enumerates reference-counted pointers.  This probably had
no effect, since the macro isn't used.  (gxistate.h)
	- When the band rasterizer freed its imager state, the halftone and
device halftone structures weren't freed, possibly causing memory leakage.
(gsistate.c)

Changes the default UCR and BG functions from f(k) = 0 to f(k) = k, per a
user's suggestion.  We aren't sure which matches the Adobe implementations
on color devices.  (gxdcconv.c)

Conditionally removes some variables that are not needed on big-endian
systems.  (gdevm1.c)

Restructures some code to suppress bogus "possibly uninitialized variable"
warnings.  (gxfixed.h, gdevddrw.c, gsmatrix.c, gsmisc.c, gxclimag.c)

Adds a couple of unnecessary initializations to suppress bogus "possibly
uninitialized variable" warnings.  (gsbitops.c)

Implements BBox, Background, and Extend for shadings.  (Background isn't
tested yet, because it only takes effect for pattern shading, which isn't
implemented yet.)  (gsshade.h, gxacpath.h, gxistate.h, gxpath.h, gscolor3.c,
gsshade.c, gxacpath.c, gxacpath.c, gxcpath.c)

Brings the CMap machinery up to LL3, by allowing a single CMap to reference
multiple fonts (usefont, usematrix, and array CIDSystemInfo).  (gsfcmap.h,
gxfcmap.h, gsfcmap.c)

Adds more tracing output to the band list reader.  (gxclrast.c)

Cleans up some formatting.  (gstext.h, gxtext.h)

Replaces FontType = 1, CharstringType = 2 with FontType = 2, to match the
Adobe implementations.  (gxfont1.h, gxftype.h, gxtype1.h, gstype1.c,
gstype2.c, gxtype1.c)

Adds new gs_bytestring and gs_const_bytestring structures that may reference
either string or (byte) object storage.  (gsstruct.h, gstypes.h, gsmemory.c)

Implements an additional halftone type (ht_type_threshold2) needed for
HalftoneTypes 6, 10, and 16.  We don't extend gshtx.[hc] to deal with this
at this time, since the new type is only needed for the PostScript
interpreter.  (gxht.h, gxhttype.h, gzht.h, gsht.c, gsht1.c, gshtscr.c)

Adds a procedure for division mod M, possibly needed for halftones.
(gxarith.h, gsmisc.c)

Adds a -Z` debugging switch to turn off high-level images in the band list.
(gxclimag.c)

Implements gdev_prn_render_lines, as the lowest-level external API for
rendering lines in a banded device.  This call replaces the "overlay" calls
for async rendering.  (gdevprn.h, gdevprna.h, gxclist.h, gdevprn.c,
gxclread.c)

Extends the image enumeration API so that the enumerator can indicate what
subset of the input planes it wants delivered on the next call to
image_plane_data.  Currently this is only needed for ImageType 3.
(gsimage.h, gxdevcli.h, gxiparam.h, gdevddrw.c, gsimage.c, gximage.c,
gximage3.c)

Extends the image enumeration structures to handle images that require a
different amount of data for plane N than Width * plane_depths[N].  This
requires a NON-BACKWARD-COMPATIBLE change to the argument list of the
gx_image_enum_common_init procedure.  (gxiparam.h, gdevbbox.c, gsimage.c,
gxclimag.c, gximage.c, gximage2.c, gximage3.c, gxipixel.c)

Updates the copyright date to 1999.  (gscdef.c)

Cleans up formatting, capitalizes macro names, etc.  (gximage.h, gxsample.h,
gxipixel.c)

Adds the UseCIEColor device parameter.  (gxdevcli.h, gxdevice.h, gsdparam.c)

Implements color space substitution (UseCIEColor).  (gscolor2.h, gscspace.h,
gscssub.h, gxistate.h, gzstate.h, gscolor.c, gscolor1.c, gscolor2.c,
gscolor3.c, gscssub.c, gslib.c, gspcolor.c, gsstate.c)

Changes the color space install procedure so that its color space argument
is const.  Now all color space implementation procedures take a const
argument.  (gscie.h, gxcspace.h, gscdevn.c, gscolor2.c, gscscie.c,
gscspace.c, gscsepr.c, gspcolor.c)

Changes gs_setcolorspace so its color space argument is const.  (gscolor2.h,
gscolor2.c)

Splits imager state procedures out of gsstate.c, which was getting too
large.  (gxistate.h, gsstate.c, gsistate.c)

Changes gs_imager_state_initialize so it really initializes the whole imager
state.  (gsistate.c, gxclrast.c)

Removes the now-redundant first (device) argument from the plane_data and
end_image procedures in image enumerators.  Implementors of these procedures
must now get the device from the enumerator structure.  This is a
NON-BACKWARD-COMPATIBLE design cleanup that we have been putting off for
most of a year.  Also adds an argument to plane_data so it can tell its
client how many rows of data was used: this is needed for the implementation
of ImageType 3.  (gxdevcli.h, gxiparam.h, gdevbbox.c, gdevplnx.c, gsimage.c,
gxclimag.c, gxidata.c, gximage.c, gximage3.c)

Changes CFFs with CharstringType = 2 to FontType 2 fonts, rather than
FontType 1 with CharstringType = 2, for compatibility with Adobe's LL3
implementations.  (gstype1.h)

</pre>

<hr>

<h2><a name="Version5.66"></a>Version 5.66 (internal) (11/25/98)</h2>

<p>
This fileset includes the ability to efficiently and conveniently obtain
planar rather than chunky raster output.  It also fixes a large number of
minor compilation problems on non-ANSI compilers, and a small number of real
problems.  It also implements the PostScript LanguageLevel 3 clipsave and
cliprestore operators.  Unfortunately, because of fragility in third-party
code changes that we were forced to include in the base graphics library,
overlapped rasterizing ("async mode") fails:
<ul>
<li>	- At 300 dpi, for 4-bit planar devices in the low-memory
("partial
	page") condition, and always for 32-bit planar devices.

<li>	- At 600 dpi, for all devices other than monochrome.
</ul>

<h3><a name="5.66_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- Every platform-specific makefile must now define _D_, the internal
separator for defining preprocessor macros.
	- Every platform-specific makefile must now define PSLIBDIR, the
directory holding the PS initialization files at build time.  (This need not
be the same as where these files are stored at run time.)

(Library)
	- New elements arch_float_mantissa_bits and
arch_double_mantissa_bits have been added to arch.h.  Cross-build
environments that supply arch.h rather than generating it at build time must
add these elements.
	- A new GB_SELECT_PLANES option has been added to the options mask
for the get_bits_rectangle driver procedure.  Implementations of this
procedure must take this option into account (although they do not have to
implement it).
	- The make_buffer_device printer device procedure has been replaced
with create_buf_device, setup_buf_device, and destroy_buf_device.  All
clients and implementors of make_buffer_device must be changed, including
users of the clist_init_params macro.
	- The gx_device_cmap_procs procedure has been replaced with
gx_get_cmap_procs, which also take an imager state as an argument.  Callers
of gx_device_cmap_procs must be changed.

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

Updates Make.htm to clarify the standard directory structure.
(doc/Make.htm)

Adds a note about DEC C vs. VAX C for remapping of exit codes.
(doc/Make.htm)

Clarifies that the end_image procedure frees the enumerator.  (gxiparam.h)

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

Fixes problems:
	- The genxxx utilities didn't compile properly on systems where the
C compiler doesn't automatically search for .h files in the directory of the
.c file.  (unixtail.mak)
	- Preprocessor definitions require special quoting with Watcom C.
Fixing this required adding a _D_ macro similar to II.  This is a
NON-BACKWARD-COMPATIBLE change, since this definition is now required in
each platform-specific makefile.  (dvx-head.mak, openvms.mak, os2.mak,
unixhead.mak, wccommon.mak, winlib.mak, zlib.mak)
	- The VMS subdirectories didn't include the "." to make the
directory name relative.  (openvms.mak)
	- Some of the OpenVMS command files were omitted from the
distribution.  (copy_one.com, rm_one.com, rm_all.com)
	- MMK interprets a final - on a command line as a continuation
marker.  (gs.mak)
	- gsiparm4_h was used before being defined.  (lib.mak)
	- Compiled initialization code (COMPILE_INITS=1) was broken because
of the introduction of subdirectories.  (bcwin32.mak, dvx-gcc.mak,
msvc32.mak, openvms.mak, os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak,
watc.mak, watcw32.mak, int.mak, geninit.c)
	- Level 1 configurations would no longer build with the standard set
of drivers.  (devs.mak)
	- wmake interpreted "&amp;" in a rule command line as calling for
background execution.  (wccommon.mak)

Makes the standard set of features the same on all platforms, namely, psl3
(PostScript LanguageLevel 3) + pdf (PDF 1.2/1.3) + dpsnext (DPS with NeXT
extensions) + ttfont (ability to load TrueType fonts directly).  Unix
platforms add pipe (recognition of %pipe% file names).  (bcwin32.mak,
dvx-gcc.mak, msvc32.mak, openvms.mak, os2.mak, unix-gcc.mak, unixansi.mak,
unixtrad.mak, watc.mak, watcw32.mak)

Adds minimal support for Windows 95/NT compiler versions.  (wccommon.mak)

Notes a set of switches that may work around the optimizer bug in MSVC++
5.0.  (msvccmd.mak)

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

Adds a switch to genconf to set the escape character, since wmake interprets
"&amp;" in a rule command line as calling for background execution.  (genconf.c)

Makes echogs recognize -+ alone as equivalent to - alone, for the sake of
VMS systems, which interpret a final - as a line continuation marker.
(echogs.c)

Adds a viewpsm procedure to viewpbm.ps, for reassembling plane-separated
files.  (lib/viewpbm.ps)

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

Fixes problems:
	- There were places where the code assumed that void * could be
coerced to byte *, which not all C compilers support.  (gdevpdfx.h,
gdevpdfo.c)
	- The name put_bytes was defined in two places, causing an error
when linking with NOPRIVATE=1.  (gdevpx.c)
	- The minimum space computation for high-level images and for the
scan line length for the sample async driver was slightly too small.
(gdevbmpa.c)

Improves the tracing output from the psm driver.  (gdevpbm.c)

Rewrites some macros to eliminate "statement not reached" compiler warnings.
(gdevpx.c)

Revises the (only) client for changes in the plane-extraction device API.
(gdevpbm.c)

Adds plane-separated BMP drivers, primarily for testing but also as an
example.  bmp[a]sep1 and bmp[a]sep8 produce 1- and 8-bit-per-pixel separated
CMYK.  (gdevbmp.h, gdevbmp.c, gdevbmpa.c, gdevbmpc.c)

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

Fixes problems:
	- The Watcom environment doesn't provide the st_blocks member of the
stat structure.  (stat_.h)
	- In its standard configuration, the Watcom environment doesn't
provide stdprn.  (gp_iwatc.c)
	- Newer versions of DEC C on OpenVMS don't require the remapping
of the exit codes.  (stdpre.h)

Revises the dummy implementation of semaphores, monitors, and threads in an
attempt to make async rendering (just barely) work for the non-overlay case.
Unfortunately, this turned out not to be feasible.  (gp_nsync.c)

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

Fixes problems:
	- Certain DEC compilers assume that a pointer is aligned even if it
is cast to a pointer whose target type has weaker alignment; this produced
"unaligned access" errors in the interpreter.  (interp.c)
	- A necessary cast was omitted.  (zcrd.c)
	- Level 1 configurations would no longer run.  (lib/gs_init.ps)

Updates clients to set mask image fattening properly.  (zimage.c, zimage2.c)

Rewrites some macros to eliminate "statement not reached" compiler warnings.
(files.h, istruct.h)

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

Fixes problems:
	- The test for whether to honor the Rotate key was backwards.  (bug
probably introduced in 5.24) (lib/pdf_main.ps)

Updates the code to handle improper PDF files in which the startxref and the
following file position appear on the same line rather than (as required by
the spec) two successive lines.  (lib/pdf_main.ps)

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

Notes a bug in s_DCT_get_quantization_tables.  (sdcparam.c)

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

Fixes problems:
	- The algorithm for reducing 4-bit chunky to 1-bit separated colors
didn't handle the trailing pixels of a transfer correctly.  (gdevplnx.c)
	- Banding for RGB devices with multi-plane halftones was broken.
(bug introduced recently) (gxdcolor.c)
	- Mask images were written in the band list with inverted polarity.
(bug introduced in 5.60) (gximage1.c)
	- Mask images were always fattened.  Fixing this required extending
the API, since gs_image_t_init_mask set adjust = true by default (a bad
decision) and we didn't want to change it.  (gschar.h, gscpm.h, gsiparam.h,
gzstate.h, gschar.c, gximage1.c)
	- The member names push and pop caused problems for compilers whose
preprocessors consider it an error to use a macro defined with arguments as
a name without arguments.  (gxfont1.h, gstype1.c)
	- Once again, gcc didn't detect some private/non-private mismatches.
(gdevplnx.c, gsalphac.c, gximage2.c, gximage4.c)
	- &amp; was used with an array (which gcc doesn't complain about).
(gxshade6.c)
	- There were several uses of automatic aggregate initialization,
which not all C compilers support.  (gdevprn.c, gdevps.c)
	- There were places where the code assumed that void * could be
coerced to byte *, which not all C compilers support.  (gdevprn.c)
	- Some \ line continuation characters were used inappropriately
(in a macro argument list).  (gxclimag.c)
	- Some function prototypes didn't use the Pn macros.  (gsalloc.c)
	- A function definition not at the left margin confused ansi2knr.
(gsfont.c)
	- A cast for the result of malloc, needed on systems where malloc
returns a char * rather than a void *, was missing.  (gsmalloc.c)
	- An occurrence of dev should be pdev.  (I can't understand how we
missed this in 5.65.)  (gdevprna.c)
	- A value was missing from a list of initial structure values,
causing mismatches between subsequent values and the members they
initialized.  (gcc treated this as a warning: it should have given an
error.)  (gxband.h)
	- When setting the tile phase during banding, the old value of the
tile phase was written out rather than the new one.  (gxclutil.c)
	- The definition of fixed_mult_quo wasn't consistent between systems
with FPU (where it took the floor, and might be slightly inaccurate) and
systems without FPU (where it truncated towards zero, and was accurate).
(gxfixed.h, genarch.c, gsmisc.c)
	- Banding devices using multi-screen halftones didn't set the
halftone phase correctly.  We have now "fixed" this problem at least 4
times.  (gxclrast.c)
	- The name put_bytes was defined in two places, causing an error
when linking with NOPRIVATE=1.  (gsparams.c)
	- For [x][y]show, the pointers to the width arrays weren't
initialized, causing memory access errors when checking or garbage
collecting.  (gschar.c)
	- Due to a typo, bitmap characters were fattened too much.
(gximage1.c)
	- Some identifiers exceeded VMS's limit of 31 characters.
(gdevprn.h, gscsepr.h, gsdevice.h, gxdevice.h, gdevdflt.c, gdevprn.c,
gscsepr.c, gsdparam.c)
	- The device halftone parameter was declared const inappropriately
in some places.  (gsdcolor.h, gxdither.h, gxdcolor.c, gxdither.c)
	- gdev_mem_raster was used (misleadingly, even though it happened to
produce the correct result) on possibly non-memory devices.  (gxclread.c)
	- Pure Level 1 configurations had some undefined procedures.
(gscolor1.c, gscspace.c)
	- Indexed color images could incorrectly conclude that they didn't
need to re-render halftones, producing incorrect output.  (gximono.c)
	- gs_device_is_memory returned false for non-banding printer
devices: this didn't used to matter, but it matters now.  We changed it to
test the procedures rather than the device name.  (gdevmem.c)
	- The plane extraction device didn't handle halftoned colors
correctly.  (gdevplnx.c)
	- If an error occurred while building a Function object, a crash
could occur while freeing the partially built object.  (gsfunc.c)
	- The plane extraction device didn't handle RasterOps correctly.
(gdevplnx.c)
	- The colors-used mask could include some additional, invalid bits.
(gxclrect.c)
	- The colors-used mask was updated incorrectly for RasterOps on
subtractive-color devices.  (gxclrect.c)
	- Memory devices didn't set enough option bits for the case where
get_bits_rectangle had to do conversion.  (gdevmem.c)
	- The TrueType font rasterizer didn't accept fonts whose 'type' was
"true" rather than the documented <00 01 00 00>.  (gstype42.c)
	- A bug in the Watcom compiler caused two conditional expressions to
execute incorrectly.  (gstype42.c)
	- When a page queue was freed, it attempted to free the page_info
resource in the reserve entry, which is actually unused.  (gxpageq.c)
	- A necessary #include was missing.  (gdevmr2n.c)

Reduces the size of band list entries for halftoned colors somewhat.
(gxclpath.h, gxclpath.c, gxclrast.c)

Increases the number of saved band color masks per page, mostly for testing.
(gxband.h)

Rewrites some macros, and one 'for' statement, to eliminate "statement not
reached" compiler warnings.  (gxcldev.h, gxpath2.c)

Corrects a tiny inaccuracy in the computation of trapezoid coordinates.
(gdevddrw.c)

Edits the trapezoid fill code for greater readability and better
documentation of its functioning.  The new code runs a little slower on
compilers that don't support 'inline'.  (gdevddrw.c)

Improves the documentation of the tile phase bookkeeping.  (gxclrast.c)

Documents the fact that fixed_mult_quo takes the floor if the first argument
is negative.  (gxfixed.h)

Finishes implementing clipsave and cliprestore.  (gxclipsr.h, gxistate.h,
gzstate.h, gsclipsr.c, gsstate.c)

Implements driver access to planar, rather than chunky, banding.
(gdevplnx.h, gdevprn.h, gxclist.h, gxdevcli.h, gxrplane.h, gdevplnx.c,
gdevprn.c, gxclread.c)

Makes it possible to set up memory devices that allocate just the line
pointer table (but not the bitmap), or neither the line pointers nor the
bitmap.  (gxdevmem.h, gdevmem.c)

Moves gx_device_white/black to a more appropriate header file.  (gxdcolor.h)

Moves gx_default_make_buffer_device to a more appropriate file.
(gdevdflt.c, gdevprn.c)

Adds plane extraction and expansion utility procedures, required for the
extended capability of get_bits_rectangle.  (gsbitops.h, gsbitops.c)

Extends get_bits_rectangle so it can return individual planes rather than
all planes.  (gdevplnx.h, gsbittab.h, gxbitfmt.h, gxgetbit.h, gdevdgbr.c,
gdevdrop.c, gdevmem.c, gdevplnx.c, gsalphac.c, gsbittab.c)

Factors out the two more complex cases of gx_get_bits_copy into single-use
procedures for readability.  (gdevdgbr.c)

Makes public the procedure for reducing a colored halftone to a pure or
binary halftone, needed for planar rendering.  (gxdither.h, gxdither.c)

Moves the client_data pointer from gs_state to gs_imager_state.
(gxistate.h, gzstate.h, gsstate.c)

Extends the plane extraction device to handle fill_mask and images
efficiently.  (gxcmap.h, gdevplnx.h, gdevplnx.c)

Creates a procedure to make a temporary copy of a gs_imager_state, needed
for planar image processing.  (gxistate.h, gsstate.c)

Makes getting the color mapping procedures for a device a virtual procedure
of the imager state, needed for planar image processing.  (gxcmap.h,
gxistate.h, gxcmap.c, gxicolor.c, gximono.c, gxi12bit.c)

Increases the amount of memory allocated to the asynchronous rasterizer,
since we now may need a dynamically allocated line pointer table for the
target (plane) memory device.  (gdevprna.c)

Adds a record of which bands have "difficult" RasterOps -- RasterOps that
can't be executed, even in principle, in CMYK space.  We don't do anything
with this information yet, but we will have to.  (gsropt.h, gxband.h,
gxcldev.h, gxclpath.h, gxclist.c, gxclpath.c, gxclrect.c)

Makes conversion from render_plane indices to bit ranges the responsibility
of the device, not the client.  (gxrplane.h)

</pre>

<hr>

<h2><a name="Version5.65"></a>Version 5.65 (internal) (11/13/98)</h2>

<p>
The main purpose of this fileset is to fix the MS Windows and OpenVMS build
procedures, which have been broken since 5.60.  It also adds the ability for
a driver to determine efficiently which colors are used in a given page or
band, which is important for separated color printing, and contains some
early support for plane-separated color printing.

<h3><a name="5.65_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- Every platform-specific makefile must now define D_ and _D, the
brackets for defining preprocessor macros.
	- The unix-cc.mak makefile has been renamed unixtrad.mak, since it
only applies to "traditional C" compilers.

(Drivers, Library)
	- Devices now store their TextAlphaBits and GraphicsAlphaBits values
explicitly.  The former get_alpha_bits procedure is obsoleted, and no
longer implemented or called by any code we distribute.
	- gx_device_color_info now has additional fields.  Code that
constructed gx_color_info_values in any way other than by using the dci_
macros will no longer work.

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

Fixes problems:
	- The -sPSFile= switch was still documented, even though it no
longer exists.  (doc/Use.htm)
	- The - "switch" wasn't documented in the list of switches,
although it was documented elsewhere.  (doc/Use.htm)
	- The documentation for the PC environments was out of date -- it
didn't mention the use of subdirectories.  (doc/Make.htm)

Updates the documentation on PostScript files to indicate in what directory
the files are distributed.  (doc/Psfiles.htm)

Documents more of the utility procedures used by printer drivers.
(gdevprn.h)

Notes that the public tar archives may not be compatible with the tar
program in SunOS 4.1.3.  (doc/Make.htm)

Adds documentation on the Unix "make pg" target.  (doc/Make.htm)

Updates documentation to reflect the name change from unix-cc.mak to
unixtrad.mak.  (doc/Make.htm)

Adds some links for the benefit of people who have built Ghostscript before
and therefore skip reading the initial sections of the documentation.
(doc/Make.htm)

Documents the new -_ switch.  (doc/Use.htm)

Updates the documentation to mention PostScript LanguageLevel 3 and to
remove many references to 16-bit systems.  (doc/Language.htm)

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

Fixes problems:
	- A cast discarded `const' needlessly.  (genconf.c)
	- Upper-case echogs switches were getting converted to lower case
on VMS.  (jpeg.mak)
	- $(EXP) was missing before some invocations of executables.
(gs.mak, jpeg.mak, lib.mak)
	- Some dependencies in the Unix install script were incorrect.
(unixinst.mak)
	- Because of differences between shells, putting *.upp in the list
of files to be installed didn't work with some shells.  (unixinst.mak)
	- The PC makefiles were out of date.  (bcwin32.mak, pcwin.mak,
winint.mak, winlib.mak, dwmain.rc, gsdll32.rc)
	- Some makefiles still used $(DEV) instead of dev.  (dvx-tail.mak,
msvclib.mak, openvms.mak, os2.mak, pcwin.mak, watclib.mak, winlib.mak)
	- The DEVICE_DEVSn lists overflowed the DOS 120-character command
line limit again.  We had to add DEVICE_DEVS16 through 20 to work around
this.  (*.mak)
	- Preprocessor definitions have a different syntax on VMS.  Fixing
this required adding D_ and _D macros, similar to I_ and _I.  This is a
NON-BACKWARD-COMPATIBLE change, since these definitions are now required in
each platform-specific makefile.  (dvx-head.mak, openvms.mak, os2.mak,
unixhead.mak, wccommon.mak, winlib.mak, zlib.mak)

Adds command line switches to generate additional warnings when compiling
the auxiliary programs with gcc.  (unix-gcc.mak)

Gets rid of the EXPP and SHP macros, since they aren't used or needed any
longer.  (gs.mak, bcwin32.mak, dvx-head.mak, msvccmd.mak, openvms.mak,
os2.mak, unixhead.mak, watcw32.mak, wccommon.mak)

Changes the Unix EXP to null, since all executables now use an explicit
directory prefix.  (unixhead.mak)

Renames unix-cc.mak as unixtrad.mak, since people with ANSI-compatible cc
were getting confused.  (unix-cc.mak [deleted], unixtrad.mak)

Adds a -_ switch, for piped execution with buffering.  (iminst.h,
imainarg.c)

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

Fixes problems:
	- The revised ansi2knr didn't recognize "foo(void)" as a procedure
definition.  (ansi2knr.c)
	- ansi2knr didn't handle function definitions where the last
formal parameter was a procedure parameter.  (ansi2knr.c)

Adds a utility for printing an informative error page if a PostScript job
fails.  (lib/errpage.ps, doc/Psfiles.htm, unixinst.mak)

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

Fixes problems:
	- The [e]pswrite drivers produced incorrect output for images in
non-Device color spaces.  We fixed this by causing all other images to be
handled as rectangles.  This is clearly not satisfactory: we need to unify
the PS and PDF writers in this area.  (gdevps.c)
	- The CCITTFaxEncoded data produced by the [e]pswrite driver had
both a Rows value and an EndOfBlock marker, which wasn't compatible with
some Adobe interpreters.  (gdevpsdf.c)
	- X devices couldn't be copied, because the copy didn't clear the
list of X fonts and therefore tried to free it a second time.  (gdevx.c,
gdevxini.c)
	- gdevx.h declared a type called rect, conflicting with variables
named rect.  (gdevx.h, gdevx.c)
	- A function definition wasn't formatted properly to be
recognized by ansi2knr.  (gdevupd.c)
	- The PCL XL drivers crashed if given a masked image.  (gdevpx.c)

Adds a PBM driver that writes separated CMYK, using the colors-used masks to
skip bands.  (devs.mak, gdevpbm.c)

Updates drivers that formerly supported the TextAlphaBits and
GraphicsAlphaBits parameters themselves.  (gdevmswn.h, gdevsvga.h,
gdevpbm.c, gdevmswn.c, gdevpm.c, gdevwdib.c, gdevsvga.c, gdevxalt.c)

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

Fixes problems:
	- The stack size on the Watcom platform was set too small.
(watc.mak)
	- The OpenVMS platform code and makefiles had gotten out of date.
(gp_vms.c, openvms.mak)

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

Fixes problems:
	- The size of Indexed color space lookup tables wasn't set, possibly
causing them to be corrupted during garbage collection.  (zcsindex.c)
	- A function definition wasn't formatted properly to be
recognized by ansi2knr.  (icontext.c)
	- quit was only rebound to stop in encapsulated jobs, rather than in
any context under control of a job server.  Since we don't currently have
any explicit way to indicate whether execution is under control of a job
server, we consider that it is under a job server iff startjob has ever been
executed.  (lib/gs_lev2.ps)

Adds tracing output for removing an entry from a dictionary.  (idict.c)

Slightly improves dictionary deletion so that it can replace a run of
deleted keys with empty keys.  (idict.c)

Adds statistics-gathering to the interpreter.  (interp.c)

Adds more statistics-gathering to the dictionary stack search.  (idstack.c)

Improves the debugging printout of packed arrays.  (idebug.c)

Increases the name table allocation increment from 128 names (1.5K) to 256
names (3K), to provide better scattering of name indices.  (inamedef.h)

Changes the name count / index mapping to provide better scattering.
(inamedef.h)

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

Fixes problems:
	- If a font other than the base 14 wasn't embedded and lacked a
descriptor, an error occurred.  (The PDF specification explicitly prohibits
this, but Acrobat PDFWriter 3.02 for Windows produces PDF files with
TrueType fonts that lack a descriptor.)  (lib/pdf_font.ps)

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

Fixes problems:
	- The computation of colors used by CMYK halftones was incorrect.
(gxclpath.c)
	- Some header files had preprocessor directives with a space before
the #, which pre-ANSI compilers don't accept.  (gpsync.h, gsjconf.h,
gsmemlok.h, gxsync.h, gxxfont.h)
	- A number of prototypes didn't use the Pn macros.  (gscolor2.h,
gscsepr.h, gsptype1.h, gspcolor.c)
	- A function definition wasn't formatted properly to be
recognized by ansi2knr.  (gxcht.c)
	- The algorithm for reducing single-plane CMYK halftones to binary
halftones was incorrect (bug introduced in 5.60).  (gxdither.c)
	- Writing a degenerate triangle or parallelogram in the band list
could cause a memory access error when rasterizing.  (gxclrast.c)

Adds per-band "colors used" information to the information for a saved page,
and procedures (gdev_prn_colors_used and gx_page_info_colors_used, defined
in gdevprn.h) for accessing it.  (gdevprn.h, gxband.h, gxclist.h, gdevprn.c,
gxclist.c)

Adds an internal device that appears to clients as a multi-plane color
device, and extracts a single plane for actual rendering.  This device will
be used to support planar output devices.  (gdevplnx.h, gsbitops.h,
gdevplnx.c)

Adds explicit color_info.text_anti_alias_bits and graphics_anti_alias_bits
values in the device state, obsoleting the get_alpha_bits procedure, and
makes them settable for all devices.  (gxdevcli.h, gxdevice.h, gdevabuf.c,
gdevdflt.c, gdevnfwd.c, gdevprn.c, gsdparam.c)

Reformats some code for readability.  (gxdither.c)

Adds a tentative API for a procedure that allows band rasterizing directly
into client's memory.  This is tentative because we may need to add the
ability to select an individual plane.  (gdevprn.h)

</pre>

<hr>

<h2><a name="Version5.64"></a>Version 5.64 (internal) (11/5/98)</h2>

<p>
This is another incremental fileset to fix problems for an external
customer.

<h3><a name="5.64_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Drivers)
	- The output_page procedure of all drivers now must call
gx_finish_output_page as its last action.  (This doesn't affect ordinary
printer or raster file drivers, which already call a common procedure.)

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

Fixes problems:
	- The instructions for creating 'makefile' on Unix systems were
out of date.  (doc/Make.htm)

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

Fixes problems:
	- An omitted return statement caused genconf to malfunction on some
platforms.  (genconf.c)
	- The replacement of MAKEFILES by TOP_MAKEFILES accidentally changed
some comments that should not have been changed.  (bcwin32.mak, gs.mak,
msvctail.mak, openvms.mak, os2.mak, watcw32.mak, wctail.mak, winlib.mak)

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

Updates drivers to call gx_finish_output_page where needed.  (gdev3b1.c,
gdevcgm.c, gdevcp50.c, gdevpdf.c, gdevmswn.c, gdevpm.c, gdevps.c, gdevpx.c,
gdevsnfb.c, gdevwprn.c, gdevx.c)

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

Fixes problems:
	- The FontBBox workaround introduced in 5.63 didn't work properly.
(zchar1.c)
	- PageCount was getting incremented in the first device of a device
pipeline, rather than in the last one and being propagated back.
(gxdevice.h, gdevbbox.c, gdevdflt.c, gdevnfwd.c, gdevprn.c, gdevprna.c,
gsdevice.c)

</pre>

<hr>

<h2><a name="Version5.63"></a>Version 5.63 (internal) (11/4/98)</h2>

<p>
This fileset was driven by the development needs of an external customer,
primarily related to asynchronous rendering.  It includes a few bug fixes as
well.

<h3><a name="5.63_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- In the makefiles, changes the name MAKEFILES to TOP_MAKEFILES.

(Library)
	- The pis member of the Type 1 interpreter state was renamed in
order to catch places that assumed it was set.  (It may now be 0.)  This
should not affect any client code.
	- gx_page_queue_dnit and gx_page_queue_finish_dequeue now free the
band list information associated with the page_info in the queue entry.  An
explicit call of gx_page_queue_entry_free_page_info is now required to free
this information before any other call of gx_page_queue_entry_free.

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

Fixes problems:
	- devs.mak incorrectly referred to msdevs.mak rather than pcwin.mak.
(devs.mak)

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

Fixes problems:
	- There was a $ in the makefile that wasn't quoted.  (unix-gcc.mak)
	- The name MAKEFILES has a special meaning in GNU make which only be
disabled by using a directive that is a syntactic error for standard 'make'
implementations.  We had to work around this by changing all occurrences of
MAKEFILES to TOP_MAKEFILES.  (*.mak)
	- genconf did the wrong thing for modules with names shorter than
5 characters.  (genconf.c)

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

Updates the Canon BJC library, changing the names of the files.  This code
is still very preliminary.  (gdevbjcl.h, gdevbjcl.c)

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

Fixes problems:
	- Some Type 1 fonts have a plausible but incorrect (too-small)
FontBBox, causing some characters to be clipped.  We work around this by
enlarging the FontBBox and restarting the rasterization if the outline goes
outside the FontBBox.  (zchar1.c)

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

Fixes problems:
	- gx_default_strip_copy_rop didn't check for zero width before
dividing by it.  (gdevdrop.c)
	- Some places that called a procedure returning void tried to use
the return value.  (gximage.c, gximage1.c, gximage4.c)
	- The flatness for rendering Type 1 characters was set incorrectly
(always set to 0, producing best accuracy at extra cost) for characters not
in portrait orientation.  (gxtype1.c)
	- clist_begin_typed_image incorrectly used the memory manager client
name "clist_begin_image".  (gxclimag.c)
	- If a page queue entry was created without a page_info, the entry's
page_info wasn't initialized, probably causing a crash when attempting to
free the (nonexistent) associated band files later.  (gxpageq.c)

More fully supports the use of saved page_info objects for decoupling banded
rendering from band list construction:
	- Adds the ability to close and free the command list associated
with a saved page.  (gxclist.h, gxclist.c)
	- Separates freeing of the band list information associated with a
page queue entry from freeing the entry itself.  (gxpageq.h, gxpageq.c)
	- Changes the rendering thread for asynchronous band rendering so
that it doesn't try to free the band list information twice.  (gdevprna.c)

Implements triangles and parallelograms in the band list, primarily for the
sake of smooth shading.  (gxclpath.h, gxclist.c, gxclpath.c, gxclrast.c)

Adds a rectangle merging procedure, parallel to rectangle intersection.
This is needed for the FontBBox fix.  (gsrect.h)

Adds logic for keeping track of what pixel values are used in which bands.
Currently this information is not used for anything.  (gdevmrop.h, gsropt.h,
gxcldev.h, gxclpath.h, gxclrect.c, gxclpath.c, gxclimag.c)

Updates a few more files for readability and coding conventions.
(gxband.h, gxpageq.c)

Updates users of gxband.h and gxpageq.h.  (gdevprn.h, gxclist.h, gxpageq.h,
gdevprna.c, gxclpage.c, gxclread.c)

Moves the definition of the page queue into the (private) implementation
file.  (gxpageq.h, gxpageq.c)

</pre>

<hr>

<h2><a name="Version5.62"></a>Version 5.62 (internal) (10/31/98)</h2>

<p>
This fileset concludes this round of work on (primarily color) performance
improvement.  It contains almost no new bug fixes.

<h3><a name="5.62_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Library)
	- Clients that load the CIE caches themselves must now reset the
procedures to the _from_cache values.  (This affects the PostScript
interpreter, but no ordinary library clients.)
	- gs_cie_compute_wbsd (an internal procedure) was changed to
gs_cie_compute_points_sd, with different parameters.

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

Adds information about problems with PDF files copied from Macintosh
environments.  (doc/Use.htm)

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

Adds a library for generating Canon BJC commands.  This code is subject to
change without notice!  (gdevcbjc.h, gdevcbjc.c)

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

Fixes problems:
	- The structures allocated for CIE RenderTables weren't marked
correctly for garbage collection, possibly mangling the output.  (zcie.c)
	- The CIE color space procedures weren't reset after the cache was
loaded, producing incorrect output now that it matters.  (zcie.c, zcrd.c)

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

Fixes problems:
	- Under some circumstances, a setbbox didn't take effect.
(gxpcopy.c)
	- The last step of CIE color mapping didn't clamp the very top end
of the range correctly.  (gsciemap.c)

Speeds up bits_replicate_horizontally a bit more.  (gsbitops.c)

Separates the CIE color mapping code from CIE cache loading, since the file
was getting too big.  (gscie.h, gscie.c, gsciemap.c)

Finishes adding the hooks for skipping steps during CIE color mapping when
possible, and implements one case of step-skipping.  (gscie.h, gscie.c,
gsciemap.c, gscrd.c)

Adds more tracing to the CIE color machinery.  (gscie.c)

Changes the default number of tiles for the colored halftone screen caches
from 1 to 4, substantially reducing cache turnover.  (gsht1.c, gshtx.c,
gxclrast.c)

</pre>

<hr>

<h2><a name="Version5.61"></a>Version 5.61 (internal) (10/28/98)</h2>

<p>
More rendering speedups, and fixes for many of the minor problems reported
in 5.50.

<h3><a name="5.61_Documentation"></a>Docmentation</h3><pre>

Fixes problems:
	- There were still some incorrect references to .txt files.
(gs.mak, libpng.mak)
	- Two references to libpng should have referred to libjpeg.
(gs.mak)

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

Fixes problems:
	- GNU 'make' treats the name MAKEFILES specially.  (unix-gcc.mak)
	- genconf didn't sort libraries in the right order.  (genconf.c)
	- The dependency for ansi2knr, and the invocation of ccgs, didn't
include the directory name.  (ccgs, unix-cc.mak)
	- The CC_ and CCAUX rules didn't invoke the new ccgs correctly.
(unix-cc.mak)
	- There was a typo in a comment.  (unixtail.mak)
	- gcc versions of the form 2.7.2.f.1 weren't recognized as having
the const-related code generation bug.  (unix-gcc.mak)

Documents workaround for bugs in newer IRIX compilers.  (doc/Make.htm)

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

Fixes problems:
	- ansi2knr didn't understand the new formatting of the enum_ptrs and
reloc_ptrs procedures, which now don't have a left brace on the same line as
the macro call that defines the procedure.  (ansi2knr.c)

Adds a utility for viewing MIFF files.  (lib/viewmiff.ps)

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

Fixes problems:
	- The X driver could report a depth (e.g., 15 bits) that caused
problems elsewhere.  (gdevxini.c)
	- With the X driver, if the display is grey-scale or does not have
enough colors to allocate a color ramp, Ghostscript crashed in
x_map_color_rgb due to an array index overflow.  (gdevx.c)
	- The PDF writer used the X scaling of fonts to determine the point
size rather than the Y scaling, which gives the wrong result for synthetic
condensed fonts.  (gdevpdft.c)
	- If the last thing written before a flushpage was text, the X
driver might fail to display it.  (gdevx.c)
	- The PDF writer didn't free the streams created for image
compression, causing a memory leak.  (gdevpsdf.c)
	- pswrite didn't output a command to set the page size.  (gdevps.c)

Removes an obsolete comment and commented-out line.  (gdevxalt.c)

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

Fixes problems:
	- Explicit (not resource) Indexed color spaces caused an error.
(lib/pdf_draw.ps)

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

Fixes problems:
	- The PNGPredictor filters didn't free their row buffer.  (spngp.c)
	- The PNGPredictor filters didn't handle end-of-data correctly.
(spngp.c)

Changes the eexec filter to ignore % characters when reading
ASCIIHex-encoded data.  This is contrary to the Adobe documentation, but one
badly coded prologue requires it.  (seexec.c)

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

Fixes problems:
	- The definition of TRANSPARENCY_PER_H_P was in the wrong module,
causing it to be ignored.  (gdevmrop.h, gdevdrop.c)
	- There was a typo in the tracing output for init_tile_cursor.
(gxcht.c)
	- gx_get_bits_copy computed the standard raster incorrectly if
the destination used a different color representation from the source,
causing multi-line transfers to be done incorrectly.  (gdevdgbr.c)
	- Parentheses were missing around the use of width_bits in the
definition of bitmap_raster, possibly causing incorrect computation.
(gxbitmap.h)
	- When rendering a Pattern, a singular CTM caused an error even if
the Pattern was empty.  (gspcolor.c)
	- The lookup table wasn't allocated for device-originated CRDs.
(gscrdp.c)
	- If an error occurred when setting up to rasterize a band,
data_bits could be freed without ever having been initialized.  (gxclrast.c)
	- Processing a CIE-color image with a color space different from the
current color space caused an error.  (gscie.c)
	- The speedup for bits_replicate_horizontally had an algorithm
error, producing incorrect output.  (gsbitops.c)

Splits up the memory device implementation of RasterOp, since the file was
getting too large.  (gdevmem.h, gdevm1.c, gdevm8.c, gdevm16.c, gdevm24.c,
gdevm32.c, gdevmrop.c [deleted], gdevmr1.c, gdevmr2n.c, gdevmr8n.c,
gsnorop.c)

Cleans up a little formatting.  (gsbittab.h)

Speeds up the default RasterOp implementation some more.  (gdevdgbr.c,
gdevdrop.c, gdevmem.c)

Speeds up testing whether a given halftone level is already present in its
cache.  (gzht.h, gxht.c)

Speeds up 1-bit CMYK halftones a bit more.  (gxcht.c)

Makes filling always use the (much faster) trapezoid-based algorithm if the
region being filled is a rectangle.  (gxfill.c)

</pre>

<hr>

<h2><a name="Version5.60"></a>Version 5.60 (internal) (10/18/98)</h2>

<p>
This fileset incorporates many performance enhancements for 1-bit CMYK
devices, especially for PCL 5c interpretation.

<p>
This fileset divides the files into subdirectories.  In the lists of changed
files, files with no explicit subdirectory name are in the src subdirectory.
The revised OpenVMS and OS/2 makefiles have not been tested.

<h3><a name="5.60_Incompatible_changes"></a>Incompatible changes</h3><pre>

(Procedures)
	- The instructions for font compilation in doc/Fonts.htm are
different.
	- The fileset has been split into multiple directories; the source
code and makefiles are now in src/.
	- The top-level makefile requires a definition for BINDIR for the
directory to hold the final executable.
	- Every .dev rule of the form
		xxx.dev: &lt;list&gt;
			$(SETyyy) xxx &lt;items&gt;
			$(ADDMOD) xxx &lt;items&gt;
must be changed to
		$(DD)xxx.dev: &lt;list&gt;
			$(SETyyy) $(DD)xxx &lt;items&gt;
			$(ADDMOD) $(DD)xxx &lt;items&gt;
(DD for drivers, PSD for PostScript/PDF-interpreter features, GLD for
graphics library features).  Every -include and -replace option in the
makefiles rules, and every element of FEATURE_DEVS and DEVICE_DEVS*, must be
changed similarly.  This is very unfortunate, especially since people
editing FEATURE_DEVS and DEVICE_DEVS* must now know which subsystem
implements a particular feature; but we tried 3 different ways to get the
generated .dev files out of the top-level directory, and this was the only
one we could make work.
	- Top-level makefiles must define both MAKEFILE and MAKEFILES,
the latter to include any subsidiary makefiles that define configuration
parameters.  Dependencies on $(MAKEFILE) must be changed to $(MAKEFILES).
	- Color space objects now must either be allocated with the
gs_cspace_build_ procedures or initialized with the gs_cspace_init_
procedures: building color spaces "by hand" is no longer allowed.

(Library)
	- There are new required elements of the gs_image_type_t structure.
	- The binary and colored variants of gx_device_halftone have
changed.  (No APIs are affected.)
	- If a device changes its (effective) color mapping algorithm other
than as a side effect of put_params, it must call
gx_device_decache_colors(dev).

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

Fixes problems:
	- Some files still referred to .doc files rather than .htm.
(gsiparam.h, imain.h)
	- Version 5.50 was incorrectly identified as a beta version.
(doc/News.htm)
	- The instructions for cross-compilation were seriously
incomplete.  (doc/Make.htm)

Adds a text-only README file.  (doc/README)

Updates the instructions for font compilation.  (doc/Fonts.htm)

Updates the instructions for device and feature selection.  (doc/Make.htm)

Adds material on 8.3 file names, compiler warning messages, and graphics
library error codes to the C style guide.  (doc/C-style.htm)

Adds a note about gx_device_decache_colors.  (doc/Drivers.htm)

Improves formatting slightly.  (doc/Install.htm, doc/Use.htm)

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

Fixes problems:
	- The Unix install script referred to an obsolete ps2image.ps file.
(unixinst.mak)
	- The Unix CC script had some duplicated definitions.  (unix-cc.mak)
	- The DVX makefile referred to int.mak in GLSRC rather than PSSRC.
(dvx-gcc.mak)
	- rollconv.ps wasn't installed with the other utilities.
(unixinst.mak)
	- Some definitions of MAKEFILE lacked a directory name.  (os2.mak,
unix-cc.mak, unixansi.mak, watclib.mak)
	- There were inappropriate dependencies on a file with the literal
name `makefile'.  (bcwin32.mak, gs.mak, watc32.mak)
	- Unix systems didn't use -fomit-frame-pointer when possible.
(unix-cc.mak, unix-gcc.mak, unixansi.mak, unix-end.mak)

Restructures the source files into multiple subdirectories:
	src/ - files needed at build time: *.mak, *.h, *.c, *.cpp, *.icx, *.rc,
		*.cmd, ??.bat, *.com, *.rps, *.dif, *.cfg
	lib/ - files needed at run time: *_*.ps, *.ppd, *.upp, *.bat
	doc/ - documentation other than man pages: *.htm, *.txt
	man/ - man pages: *.1
	examples/ - sample input data: *.ps, *.eps, *.pdf
Also incorporates the font compilation makefile into the main makefile,
since the former now depends on parameters defined in the latter.  (*.mak)

****** HAVEN'T SETTLED HOW TO HANDLE .ico FILES ******

NOTE: Still need to update: openvms.mak, os2.mak.

Updates the Unix install script for the directory split.  (unixinst.mak)

Updates the font compilation makefile rules to handle alternate directories.
(cfonts.mak, int.mak)

****** PROBLEM: cfonts.mak NEEDS CCFONT, BUT int.mak NEEDS CF* FOR ADDING
ONE'S OWN FONTS ******

Removes useless dependencies on gs_*.ps files.  (int.mak)

Moves the .dev files into the GEN directories where they belong.  (gs.mak,
dvx-tail.mak, msvclib.mak, openvms.mak, os2.mak, pcwin.mak, ugcclib.mak,
unixhead.mak, unixtail.mak, unix-end.mak, watc.mak, watclib.mak, winlib.mak,
echogs.c, genconf.c) ****** NO_OP FOR dvx HASN'T BEEN VERIFIED ******
NOTE: Still to do:
src/bcwin32.mak
src/dvx-gcc.mak
src/dvx-head.mak
src/dvx-tail.mak
src/msvc32.mak
src/msvccmd.mak
src/msvclib.mak
src/msvctail.mak
src/openvms.mak
src/os2.mak
src/pcwin.mak
src/ugcclib.mak
src/watc.mak
src/watclib.mak
src/watcw32.mak
src/wccommon.mak
src/wctail.mak
src/winint.mak
src/winlib.mak

Adds a new BINDIR directory for the final executable (and associated files
like resource files).  After building, only the contents of BINDIR and lib
are needed for execution.  (gs.mak, unix-end.mak) ****** NEED TO DO
openvms.mak, os2.mak, OTHER PC MAKEFILES ******

Updates libpng to version 1.0.2.  (libpng.mak)

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

Adds a new switch, -b, to echogs.  (echogs.c)

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

Updates the PDF writer for the change in color space initialization.
(gdevpdfi.c)

Speeds up the pkmraw driver a bit more.  (gdevpbm.c)

Updates some drivers to use the new CMYK color mapping procedures.
(gdevpbm.c, gdevpcx.c, gdevxalt.c)

Updates one driver that maintained its own color cache.  (gdevxalt.c)

Removes some compiler warnings (mostly about "uninitialized" variables).
(gdevpdfo.c, gdevpdft.c, gdevpx.c)

Adds another driver for the H-P Color LaserJet 5/5M.  (gdevcljc.c)

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

Fixes problems:
	- A change in the MetroWerks C compiler caused the hypot function
to become declared.  (math_.h)

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

Updates the compiled font code for updates in the type declarations.
(iccfont.c, icfontab.c)

Cleans up some more formatting and macros.  (ccfont.h, errors.h, icfontab.c,
interp.c)

Updates clients for the change in color space initialization.  (zcsdevn.c,
zcsindex.c, zcspixel.c, zcssepr.c, zpcolor.c)

Updates the memory validator for the addition of the large-block freelist.
(ilocate.c)

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

Fixes problems:
	- If the final %%EOF was followed by any blanks before the newline,
an error would occur.  (lib/pdf_main.ps)

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

Fixes problems:
	- The LZWDecode filter wouldn't handle a file that had 4096-256-2+1
data items before the reset.  (We think this is a bug in the file, but
Acrobat accepts it.)  (slzwx.h, slzwd.c)

Rearranges code slightly to improve readability.  (spdiff.c)

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

Fixes problems:
	- Changing the resolution (or any other parameter) of the bbox
device from the command line caused an invalid memory access.  (gdevbbox.c)
	- When banding, if the very first drawing operation involved a
halftone with non-zero phase, an arithmetic exception occurred.
(gxclpath.c)
	- When banding, the X offset of the band was negated, producing
incorrect output when placing multiple source pages on a single output page.
(gxclread.c)
	- When banding, rotated images crossing band boundaries produced
incorrect output, because the subrectangle X value was inconsistent with the
amount of data transmitted.  (gxclimag.c)
	- When banding, the clipping check didn't take interpolation support
into account.  (gxclimag.c)
	- The clipping check for banding used (int) to take the floor of
floating point values, which is wrong for negative values.  (gxclimag.c)
	- The bounding box device didn't return an empty bounding
rectangle if nothing had been written to it.  (gdevbbox.c)
	- A value was conditional on a debugging switch even if DEBUG wasn't
defined.  (gxcht.c)
	- Filling a region with a large colored halftone, a non-default
RasterOp, and a non-null RasterOp source could cause only part of the region
to be filled.  (gxcht.c) ****** NOT FIXED YET ******
	- Type 1 fonts that used very large numbers (&gt;= 2^19) caused a
rangecheck.  We've fixed this for the only case that seems to matter, namely
&lt;very-large-number&gt; &lt;number&gt; div.  (gxtype1.h, gstype1.c)
	- The memory-based band list allocator failed to return an error
code from memfile_next_blk.  (gxclmem.c)
	- When recovering from a low-band-list-memory condition while
writing an image, the record of the current image enumeration
(cdev-&gt;image_enum_id) wasn't updated.  (gxclimag.c)
	- The estimated memory requirement for the band list rasterizer was
too small.  (gdevprna.c)

Adds some tracing to mask clipping.  (gxclipm.c)

Speeds up masked images by doing mask clipping before halftoning, using a
more efficient mask scanning algorithm, and checking for vertical blocks of
1s.  (gxclipm.c)

Speeds up ImageType 4 images greatly by incorporating the color-key check
into the ImageType 1 rendering code.  NOTE: the 12-bit case has not been
tested.  (gxcpath.h, gximage.h, gxi12bit.c, gxicolor.c, gxifast.c,
gxiinit.c, gximage4.c, gximono.c, gxiscale.c)

Implements passing ImageType 4 images (and potentially others) through the
band list.  This involves adding image parameter writing and reading
procedures to the image type structure.  (gscdefs.h, gsiparam.h, gsiparm2.h,
gsiparm4.h, gsmatrix.h, gxclpath.h, gxiparam.h, gconf.c, genconf.c,
gsmatrix.c, gxclimag.c, gxclist.c, gxclpath.c, gxclrast.c, gxiinit.c,
gximage2.c, gximage3.c, gximage4.c)

Splits off the generic image support code from the ImageType 1 code.
(gxiinit.c [deleted], gximage.c, gximage1.c, gxipixel.c)

Removes some vestiges of support for 16-bit environments.  (gsmisc.c)

Implements bit-planar images, important for PCL interpretation.
(gsiparam.h, gximage.h, gxiparam.h, gdevddrw.c, gdevpdfi.c, gdevps.c,
gsimage.c, gxclimag.c, gxidata.c, gximage.c, gxipixel.c) ****** NOT TESTED
YET ******

Makes closing a memory device that owns its bitmap set the bitmap pointer to
0, for the sake of an application that doesn't handle is_open properly.
(gdevmem.c)

Speeds up floating-point emulation for single-precision add, subtract, and
multiply.  (gsfemu.c)

Speeds up sampling of transfer functions.  (gshtx.c)

Makes the CIE cache used fixed-point values if the CPU has slow floating
point.  (gscie.h)

Adds a unique ID to color spaces to allow fast detection of reselecting the
same color space.  This matters for certain client code that repeatedly
reselects the same color space, since selecting certain color spaces is
expensive.  (gscpixel.h, gscspace.h, gxcspace.h, gscolor2.c, gscpixel.c,
gscscie.c, gscspace.c, gspcolor.c, gsstate.c, gximage2.c) ****** NEED TO FIX
gxclrast.c TO ALLOC INDEXED COLOR SPACE ******

Speeds up setting Pattern color spaces, by bypassing the install code for
the base space.  (gspcolor.c)

Adds a unique ID to CRDs to allow fast detection of reselecting the same
CRD.  This matters for certain client code that does this repeatedly.
(gscie.h, gscrd.h, gscrd.c)

Detects setting the CRD to one with identical PQR components, and bypasses
an expensive setup step.  (gscie.c)

Speeds up converting pixels between representations (gx_get_bits_copy) for
devices with up to 4 bits per pixel, by caching the pixel values.
(gdevdgbr.c)

Speeds up the slow default RasterOp algorithm a little.  (gdevdrop.c)

Defines standard mapping procedures for 1-bit-per-component CMYK colors.
Other code can then test for the presence of these procedures and use more
efficient algorithms.  (gxdevice.h, gxcmap.c)

Speeds up some algorithms in the bbox device by making some recursive calls
use a pure color rather than a client-supplied one.  (gdevbbox.h, gdevbbox.c)

Adds a cache for the black and white pixel values to the device structure.
(gxdevcli.h, gxdevice.h, gdevalph.c, gdevnfwd.c, gsdparam.c, gxdcolor.c)

Makes the code for colored halftones a little more readable.  (gxcht.c)

Speeds up color mapping for CMYK devices by copying the color mapping
procedures into forwarding devices, when applicable.  (gdevcmap.c,
gdevmem.c, gsdevice.c, gxclip.c)

Removes some compiler warnings (mostly about "uninitialized" variables).
(gxcldev.h, gsdevmem.c, gsshade.c, gstype42.c, gxclpath.c, gxfill.c,
gximage3.c, gxpath2.c, gxpcopy.c)

For the benefit of certain client code that commonly sets a CRD and then
doesn't use it, makes loading of the joint CIE caches lazy (at the library
level).  (gscie.h, gscie.c)

Changes CIE color restriction from a macro to a procedure, since it is
rarely used.  (gscie.c)

Adds code and structures for detecting when CIE Decode and/or Encode
procedures are simply linear transformations, which would allow collapsing
them into the adjacent matrix, but doesn't actually do the collapsing.
(gscie.h, gscie.c)

Speeds up color halftoning by pre-computing the mask of planes that need to
be halftoned, and preconverting multi-plane halftones to binary or solid
colors when possible.  (gsdcolor.h, gxcht.c, gxdcolor.c, gxdither.c, gxht.c)

Optimizes color mapping for 1-bit-per-component CMYK halftones.  (gxcht.c)

Optimizes null RasterOp sources for black = 1 as well as black = 0.
(gxdcolor.c)

Modifies the standard allocator so it keeps track of large free blocks as
well as small ones, and uses them to satisfy requests when appropriate.
(gxalloc.h, gsalloc.c)

Speeds up the horizontal bitmap replication code a bit.  (Much more is
possible.)  (gsbitops.c)

Changes gs_image_max_planes to gs_image_max_components to reflect its
function more accurately.  (gdevddrw.c)

</pre>

<hr>

<h2><a name="Version5.50"></a>Version 5.50 (9/16/98)</h2>

<p>
This is the first public release since 5.10.  See
<a href="Current.htm">the release summary</a>
for a list of major additions and changes.

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

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

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

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

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

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

Notes problems with Watcom compilation.  (Make.htm)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Adds DEBUG tracing for pdfmarks.  (gs_pdfwr.ps)

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

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

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

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

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

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

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

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

</pre>

<hr>

<h2><a name="Version5.40"></a>Version 5.40 (beta) (9/10/98)</h2>

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

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

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

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

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

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

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

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

</pre><h3><a name="5.40_Utilities"></a>Utilities</h3><pre>

Removes the long-obsolete ps2image.ps utility.  (ps2image.ps [deleted])

</pre><h3><a name="5.40_Drivers"></a>Drivers</h3><pre>

Adds a driver for the Color LaserJet 5.  (devs.mak, gdevclj.c)

</pre><h3><a name="5.40_Platforms"></a>Platforms</h3><pre>

Fixes problems:
	- Blanks in command lines weren't handled properly.  (dwmain.cpp,
dwmainc.cpp)

</pre><h3><a name="5.40_Library"></a>Library</h3><pre>

Fixes problems:
	- 16-bit devices didn't convert colors to RGB correctly.
(gdevm16.c)
	- 16- and 32-bit RasterOp didn't work, because pack_from_standard
didn't handle depths greater than 8.  (gdevdrop.c)
	- RasterOps with devices with non-standard color representation
sometimes substituted black or white for the source or target.  (gdevdrop.c)
	- The non-orthogonal case of Axial shading executed the axial-case
code as well.  (gxshade1.c)
	- copy_color on 4-bit-deep memory devices did an unnecessary
fit_copy check.  (gdevm4.c)
	- An upcast was missing.  (gdevbbox.c)
	- View clipping was applied to internal devices, incorrectly.
(gspath.c)

Revises the implementation of shading so as to reduce the use of macros,
update formatting, and help prepare for PatternType 2 patterns.  (gsshade.h,
gxshade.h, gxshade4.h, gscolor3.c, gsshade.c, gxshade.c, gxshade1.c,
gxshade4.c, gxshade6.c)

</pre>

<hr>

<h2><a name="Version5.39"></a>Version 5.39 (beta) (9/8/98)</h2>

<p>
A couple more small fixes.

<h3><a name="5.39_Drivers"></a>Drivers</h3><pre>

Fixes problems:
	- The pkm[raw] drivers didn't work with 32-bit pixels.  (gdevpbm.c)

Adds (fake) 8-, 16-, and 32-bit X11 CMYK devices, for debugging.
Unfortunately, the 16- and 32-bit devices consume the hardware color map and
then no longer behave reasonably; the 8-bit device produces output with
garbled colors (fixed in 5.40).  (devs.mak, gdevxalt.c)

</pre><h3><a name="5.39_Library"></a>Library</h3><pre>

Fixes bugs:
	- All banded devices caused a memory access error.  (bug introduced
in 5.38)  (gsstate.c)
	- The special color mapping device didn't update its state after
put_params.  (gdevcmap.c)
	- RasterOp on 8-bit non-gray-scale devices didn't handle filling
with constant 0 or 1 properly.  (gdevmrop.c)
	- The halftone machinery didn't switch from full-size to strip
halftones early enough, possibly allocating very large halftone data
structures.  (gshtscr.c)
	- If an ioerror (such as a disk- or memory-full condition) occurred
while writing out the band list, the bookkeeping structures were left in an
inconsistent state, causing further problems.  (gxclutil.c)
	- Some shaded fills didn't check for errors when filling
sub-regions.  (gxshade1.c, gxshade4.c)

Cleans up some formatting.  (gxshade6.c)

</pre>

<hr>

<h2><a name="Version5.38"></a>Version 5.38 (beta) (9/3/98)</h2>

<p>
The sole purpose of this release was to fix some obscure bugs detected by
the Genoa tests and by another Aladdin project.

<h3><a name="5.38_Documentation"></a>Documentation</h3><pre>

Updates the list of implemented PostScript LanguageLevel 3 features.
(current.txt)

</pre><h3><a name="5.38_Drivers"></a>Drivers</h3><pre>

Fixes problems:
	- The PDF writer did the wrong thing for multi-source images with
more than 180 bytes of data (total) per scan line.  (gdevpdfi.c)
	- If one used setdistillerparams, [g]restore caused a rangecheck in
.setpagedevice.  ****** DISABLED FOR DCT DICTS, SINCE THIS CAUSES A SEGV
****** (gdevpsdp.c)

</pre><h3><a name="5.38_Interpreter"></a>Interpreter</h3><pr