xref: /plan9/sys/src/cmd/gs/doc/History4.htm (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<title>History of Ghostscript versions 4.n</title>
5<!-- $Id: History4.htm,v 1.39 2005/10/20 19:46:23 ray Exp $ -->
6<!-- Originally: history4.txt -->
7<!--
8	WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to
9	re-create the table of contents here, because it will replace the
10	hand-edited TOC subheads with a separate subhead for each H2 in
11	the body of the file.  Or if you do, first look at the original
12	TOC to see how to edit it for visual conciseness.
13-->
14<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
15</head>
16
17<body>
18<!-- [1.0 begin visible header] ============================================ -->
19
20<!-- [1.1 begin headline] ================================================== -->
21
22<h1>History of Ghostscript versions 4.n</h1>
23
24<!-- [1.1 end headline] ==================================================== -->
25
26<!-- [1.2 begin table of contents] ========================================= -->
27
28<h2>Table of contents</h2>
29
30<blockquote><ul>
31<li><a href="#Version4.81">Version 4.81 (6/1/97)</a>
32<ul>
33<li><a href="#V4.81_Documentation">Documentation</a>,
34    <a href="#V4.81_Procedures">Procedures</a>,
35    <a href="#V4.81_Utilities">Utilities</a>,
36    <a href="#V4.81_Drivers">Drivers</a>,
37    <a href="#V4.81_Platforms">Platforms</a>,
38    <a href="#V4.81_Interpreter">Interpreter</a>,
39    <a href="#V4.81_Library">Library</a>
40</ul>
41<li><a href="#Version4.80">Version 4.80 (limited) (5/28/97)</a>
42<ul>
43<li><a href="#V4.80_Documentation">Documentation</a>,
44    <a href="#V4.80_Procedures">Procedures</a>,
45    <a href="#V4.80_Utilities">Utilities</a>,
46    <a href="#V4.80_Drivers">Drivers</a>,
47    <a href="#V4.80_Platforms">Platforms</a>,
48    <a href="#V4.80_Fonts">Fonts</a>,
49    <a href="#V4.80_Interpreter">Interpreter</a>,
50    <a href="#V4.80_Streams">Streams</a>,
51    <a href="#V4.80_Library">Library</a>
52</ul>
53<li><a href="#Version4.74">Version 4.74 (limited) (5/5/97)</a>
54<ul>
55<li><a href="#V4.74_Documentation">Documentation</a>,
56    <a href="#V4.74_Utilities">Utilities</a>,
57    <a href="#V4.74_Drivers">Drivers</a>,
58    <a href="#V4.74_Interpreter">Interpreter</a>,
59    <a href="#V4.74_Streams">Streams</a>,
60    <a href="#V4.74_Library">Library</a>
61</ul>
62<li><a href="#Version4.73">Version 4.73 (limited) (4/19/97)</a>
63<ul>
64<li><a href="#V4.73_Documentation">Documentation</a>,
65    <a href="#V4.73_Procedures">Procedures</a>,
66    <a href="#V4.73_Utilities">Utilities</a>,
67    <a href="#V4.73_Drivers">Drivers</a>,
68    <a href="#V4.73_Platforms">Platforms</a>,
69    <a href="#V4.73_Interpreter">Interpreter</a>,
70    <a href="#V4.73_Interpreter_PDF">Interpreter (PDF)</a>,
71    <a href="#V4.73_Streams">Streams</a>,
72    <a href="#V4.73_Library">Library</a>
73</ul>
74<li><a href="#Version4.72">Version 4.72 (limited) (4/14/97)</a>
75<ul>
76<li><a href="#V4.72_Documentation">Documentation</a>,
77    <a href="#V4.72_Procedures">Procedures</a>,
78    <a href="#V4.72_Drivers">Drivers</a>,
79    <a href="#V4.72_Platforms">Platforms</a>,
80    <a href="#V4.72_Interpreter">Interpreter</a>,
81    <a href="#V4.72_Interpreter_PDF">Interpreter (PDF)</a>,
82    <a href="#V4.72_Streams">Streams</a>,
83    <a href="#V4.72_Library">Library</a>
84</ul>
85<li><a href="#Version4.71">Version 4.71 (limited) (3/31/97)</a>
86<ul>
87<li><a href="#V4.71_Documentation">Documentation</a>,
88    <a href="#V4.71_Procedures">Procedures</a>,
89    <a href="#V4.71_Drivers">Drivers</a>,
90    <a href="#V4.71_Interpreter">Interpreter</a>,
91    <a href="#V4.71_Streams">Streams</a>,
92    <a href="#V4.71_Library">Library</a>
93</ul>
94<li><a href="#Version4.70">Version 4.70 (limited) (3/26/97)</a>
95<ul>
96<li><a href="#V4.70_Documentation">Documentation</a>,
97    <a href="#V4.70_Procedures">Procedures</a>,
98    <a href="#V4.70_Drivers">Drivers</a>,
99    <a href="#V4.70_Platforms">Platforms</a>,
100    <a href="#V4.70_Interpreter">Interpreter</a>,
101    <a href="#V4.70_Interpreter_PDF">Interpreter (PDF)</a>,
102    <a href="#V4.70_Streams">Streams</a>,
103    <a href="#V4.70_Library">Library</a>
104</ul>
105<li><a href="#Version4.61">Version 4.61 (limited) (3/13/97)</a>
106<ul>
107<li><a href="#V4.61_Documentation">Documentation</a>,
108    <a href="#V4.61_Procedures">Procedures</a>,
109    <a href="#V4.61_Drivers">Drivers</a>,
110    <a href="#V4.61_Platforms">Platforms</a>,
111    <a href="#V4.61_Interpreter">Interpreter</a>,
112    <a href="#V4.61_Interpreter_PDF">Interpreter (PDF)</a>,
113    <a href="#V4.61_Streams">Streams</a>,
114    <a href="#V4.61_Library">Library</a>
115</ul>
116<li><a href="#Version4.60">Version 4.60 (limited) (3/2/97)</a>
117<ul>
118<li><a href="#V4.60_Documentation">Documentation</a>,
119    <a href="#V4.60_Procedures">Procedures</a>,
120    <a href="#V4.60_Drivers">Drivers</a>,
121    <a href="#V4.60_Platforms">Platforms</a>,
122    <a href="#V4.60_Fonts">Fonts</a>,
123    <a href="#V4.60_Interpreter">Interpreter</a>,
124    <a href="#V4.60_Interpreter_PDF">Interpreter (PDF)</a>,
125    <a href="#V4.60_Streams">Streams</a>,
126    <a href="#V4.60_Library">Library</a>
127</ul>
128<li><a href="#Version4.51">Version 4.51 (limited) (2/9/97)</a>
129<ul>
130<li><a href="#V4.51_Procedures">Procedures</a>,
131    <a href="#V4.51_Drivers">Drivers</a>,
132    <a href="#V4.51_Platforms">Platforms</a>,
133    <a href="#V4.51_Interpreter">Interpreter</a>,
134    <a href="#V4.51_Streams">Streams</a>,
135    <a href="#V4.51_Library">Library</a>
136</ul>
137<li><a href="#Version4.50">Version 4.50 (limited) (1/31/97)</a>
138<ul>
139<li><a href="#V4.50_Documentation">Documentation</a>,
140    <a href="#V4.50_Procedures">Procedures</a>,
141    <a href="#V4.50_Drivers">Drivers</a>,
142    <a href="#V4.50_Platforms">Platforms</a>,
143    <a href="#V4.50_Interpreter">Interpreter</a>,
144    <a href="#V4.50_Streams">Streams</a>,
145    <a href="#V4.50_Library">Library</a>
146</ul>
147<li><a href="#Version4.41">Version 4.41 (private) (1/21/97)</a>
148<ul>
149<li><a href="#V4.41_Procedures">Procedures</a>,
150    <a href="#V4.41_Drivers">Drivers</a>,
151    <a href="#V4.41_Fonts">Fonts</a>,
152    <a href="#V4.41_Interpreter">Interpreter</a>,
153    <a href="#V4.41_Streams">Streams</a>,
154    <a href="#V4.41_Library">Library</a>
155</ul>
156<li><a href="#Version4.40">Version 4.40 (private) (1/13/97)</a>
157<ul>
158<li><a href="#V4.40_Documentation">Documentation</a>,
159    <a href="#V4.40_Utilities">Utilities</a>,
160    <a href="#V4.40_Drivers">Drivers</a>,
161    <a href="#V4.40_Interpreter">Interpreter</a>,
162    <a href="#V4.40_Interpreter_PDF">Interpreter (PDF)</a>,
163    <a href="#V4.40_Library">Library</a>
164</ul>
165<li><a href="#Version4.39">Version 4.39 (limited) (1/1/97)</a>
166<ul>
167<li><a href="#V4.39_Documentation">Documentation</a>,
168    <a href="#V4.39_Procedures">Procedures</a>,
169    <a href="#V4.39_Utilities">Utilities</a>,
170    <a href="#V4.39_Drivers">Drivers</a>,
171    <a href="#V4.39_Interpreter">Interpreter</a>,
172    <a href="#V4.39_Streams">Streams</a>,
173    <a href="#V4.39_Library">Library</a>
174</ul>
175<li><a href="#Version4.38">Version 4.38 (limited) (12/20/96)</a>
176<ul>
177<li><a href="#V4.38_Interpreter">Interpreter</a>,
178    <a href="#V4.38_Streams">Streams</a>,
179    <a href="#V4.38_Library">Library</a>
180</ul>
181<li><a href="#Version4.37">Version 4.37 (limited) (12/10/96)</a>
182<ul>
183<li><a href="#V4.37_Fonts">Fonts</a>,
184    <a href="#V4.37_Interpreter">Interpreter</a>,
185    <a href="#V4.37_Interpreter_PDF">Interpreter (PDF)</a>,
186    <a href="#V4.37_Library">Library</a>
187</ul>
188<li><a href="#Version4.36">Version 4.36 (limited) (12/3/96)</a>
189<ul>
190<li><a href="#V4.36_Documentation">Documentation</a>,
191    <a href="#V4.36_Drivers">Drivers</a>,
192    <a href="#V4.36_Interpreter">Interpreter</a>,
193    <a href="#V4.36_Library">Library</a>
194</ul>
195<li><a href="#Version4.35">Version 4.35 (limited) (11/24/96)</a>
196<ul>
197<li><a href="#V4.35_Documentation">Documentation</a>,
198    <a href="#V4.35_Procedures">Procedures</a>,
199    <a href="#V4.35_Interpreter">Interpreter</a>,
200    <a href="#V4.35_Streams">Streams</a>,
201    <a href="#V4.35_Library">Library</a>
202</ul>
203<li><a href="#Version4.34">Version 4.34 (limited) (11/18/96)</a>
204<ul>
205<li><a href="#V4.34_Documentation">Documentation</a>,
206    <a href="#V4.34_Procedures">Procedures</a>,
207    <a href="#V4.34_Drivers">Drivers</a>,
208    <a href="#V4.34_Interpreter">Interpreter</a>,
209    <a href="#V4.34_Streams">Streams</a>,
210    <a href="#V4.34_Library">Library</a>
211</ul>
212<li><a href="#Version4.33">Version 4.33 (limited) (11/6/96)</a>
213<ul>
214<li><a href="#V4.33_Documentation">Documentation</a>,
215    <a href="#V4.33_Procedures">Procedures</a>,
216    <a href="#V4.33_Interpreter">Interpreter</a>,
217    <a href="#V4.33_Library">Library</a>
218</ul>
219<li><a href="#Version4.32">Version 4.32 (limited) (11/1/96)</a>
220<ul>
221<li><a href="#V4.32_Documentation">Documentation</a>,
222    <a href="#V4.32_Drivers">Drivers</a>,
223    <a href="#V4.32_Platforms">Platforms</a>,
224    <a href="#V4.32_Fonts">Fonts</a>,
225    <a href="#V4.32_Interpreter">Interpreter</a>,
226    <a href="#V4.32_Library">Library</a>
227</ul>
228<li><a href="#Version4.31">Version 4.31 (limited) (10/27/96)</a>
229<ul>
230<li><a href="#V4.31_Documentation">Documentation</a>,
231    <a href="#V4.31_Procedures">Procedures</a>,
232    <a href="#V4.31_Platforms">Platforms</a>,
233    <a href="#V4.31_Interpreter">Interpreter</a>,
234    <a href="#V4.31_Interpreter_PDF">Interpreter (PDF)</a>,
235    <a href="#V4.31_Streams">Streams</a>,
236    <a href="#V4.31_Library">Library</a>
237</ul>
238<li><a href="#Version4.30">Version 4.30 (limited) (10/23/96)</a>
239<ul>
240<li><a href="#V4.30_Documentation">Documentation</a>,
241    <a href="#V4.30_Drivers">Drivers</a>,
242    <a href="#V4.30_Platforms">Platforms</a>,
243    <a href="#V4.30_Fonts">Fonts</a>,
244    <a href="#V4.30_Interpreter">Interpreter</a>,
245    <a href="#V4.30_Library">Library</a>
246</ul>
247<li><a href="#Version4.21">Version 4.21 (limited) (10/17/96)</a>
248<ul>
249<li><a href="#V4.21_Documentation">Documentation</a>,
250    <a href="#V4.21_Procedures">Procedures</a>,
251    <a href="#V4.21_Drivers">Drivers</a>,
252    <a href="#V4.21_Platforms">Platforms</a>,
253    <a href="#V4.21_Fonts">Fonts</a>,
254    <a href="#V4.21_Interpreter">Interpreter</a>,
255    <a href="#V4.21_Library">Library</a>
256</ul>
257<li><a href="#Version4.20">Version 4.20 (limited) (10/13/96)</a>
258<ul>
259<li><a href="#V4.20_Documentation">Documentation</a>,
260    <a href="#V4.20_Procedures">Procedures</a>,
261    <a href="#V4.20_Utilities">Utilities</a>,
262    <a href="#V4.20_Drivers">Drivers</a>,
263    <a href="#V4.20_Interpreter">Interpreter</a>,
264    <a href="#V4.20_Library">Library</a>
265</ul>
266<li><a href="#Version4.10">Version 4.10 (limited) (9/25/96)</a>
267<ul>
268<li><a href="#V4.10_Documentation">Documentation</a>,
269    <a href="#V4.10_Utilities">Utilities</a>,
270    <a href="#V4.10_Drivers">Drivers</a>,
271    <a href="#V4.10_Interpreter">Interpreter</a>,
272    <a href="#V4.10_Interpreter_PDF">Interpreter (PDF)</a>,
273    <a href="#V4.10_Library">Library</a>
274</ul>
275<li><a href="#Version4.03">Version 4.03 (9/23/96)</a>
276<ul>
277<li><a href="#V4.03_Documentation">Documentation</a>,
278    <a href="#V4.03_Procedures">Procedures</a>,
279    <a href="#V4.03_Drivers">Drivers</a>,
280    <a href="#V4.03_Fonts">Fonts</a>,
281    <a href="#V4.03_Streams">Streams</a>
282</ul>
283<li><a href="#Version4.02">Version 4.02 (9/19/96)</a>
284<ul>
285<li><a href="#V4.02_Documentation">Documentation</a>,
286    <a href="#V4.02_Procedures">Procedures</a>,
287    <a href="#V4.02_Utilities">Utilities</a>,
288    <a href="#V4.02_Drivers">Drivers</a>,
289    <a href="#V4.02_Platforms">Platforms</a>,
290    <a href="#V4.02_Interpreter">Interpreter</a>,
291    <a href="#V4.02_Interpreter_PDF">Interpreter (PDF)</a>,
292    <a href="#V4.02_Streams">Streams</a>,
293    <a href="#V4.02_Library">Library</a>
294</ul>
295<li><a href="#Version4.01">Version 4.01 (7/10/96)</a>
296<ul>
297<li><a href="#V4.01_Documentation">Documentation</a>,
298    <a href="#V4.01_Procedures">Procedures</a>,
299    <a href="#V4.01_Utilities">Utilities</a>,
300    <a href="#V4.01_Platforms">Platforms</a>,
301    <a href="#V4.01_Platforms">Platforms</a>,
302    <a href="#V4.01_Interpreter">Interpreter</a>,
303    <a href="#V4.01_Library">Library</a>
304</ul>
305<li><a href="#Version4.0">Version 4.0 (6/28/96)</a>
306<ul>
307<li><a href="#V4.0_Documentation">Documentation</a>,
308    <a href="#V4.0_Procedures">Procedures</a>,
309    <a href="#V4.0_Utilities">Utilities</a>,
310    <a href="#V4.0_Drivers">Drivers</a>,
311    <a href="#V4.0_Platforms">Platforms</a>,
312    <a href="#V4.0_Interpreter">Interpreter</a>,
313    <a href="#V4.0_Streams">Streams</a>,
314    <a href="#V4.0_Library">Library</a>
315</ul>
316</ul></blockquote>
317
318<!-- [1.2 end table of contents] =========================================== -->
319
320<!-- [1.3 begin hint] ====================================================== -->
321
322<p>
323This document is a history of Ghostscript releases numbered 4.n.  For more
324recent changes, see the the other history documents and, for the latest
325versions, the news:
326
327<blockquote>
328<a href="News.htm">News</a><br>
329History of Ghostscript versions 4.n (this document)<br>
330<a href="History3.htm">History of Ghostscript versions 3.n</a><br>
331<a href="History2.htm">History of Ghostscript versions 2.n</a><br>
332<a href="History1.htm">History of Ghostscript versions 1.n</a>
333</blockquote>
334
335<p>For other information, see the <a href="Readme.htm">Ghostscript
336overview</a>.
337
338<!-- [1.3 end hint] ======================================================== -->
339
340<hr>
341
342<!-- [1.0 end visible header] ============================================== -->
343
344<h2><a name="Version4.81"></a>Version 4.81 (6/1/97)</h2>
345
346<p>
347This is a last-minute set of bug fixes before the 5.0 release.
348
349<h3><a name="V4.81_Documentation"></a>Documentation</h3><pre>
350
351Adds some overlooked helpers to the list.  (helpers.txt)
352
353</pre><h3><a name="V4.81_Procedures"></a>Procedures</h3><pre>
354
355Makes a distinction between 2-part and 3-digit version numbers.
356(version.mak, vms.mak)
357
358</pre><h3><a name="V4.81_Utilities"></a>Utilities</h3><pre>
359
360Develops the Type 1 to CFF converter a little further; it is still NOT
361USABLE.  (t1tot2.ps)
362
363Removes the pstoppm.ps script, since the p*m drivers supersede it.
364(pstoppm.ps, unix-end.mak)
365
366</pre><h3><a name="V4.81_Drivers"></a>Drivers</h3><pre>
367
368Fixes bugs:
369	- The PDF writer sometimes omitted an ET command before setting the
370clip path.  (gdevpdf.c)
371	- The PDF writer didn't initialize the "vector" state, leading to
372some redundant output (performance bug only).  (gdevpdf.c)
373	- The PDF writer wrote clip paths even when they included the entire
374page (performance bug only).  (gdevpdf.c)
375
376Changes the PDF writer so that it recognizes not only the 14 built-in fonts
377but any font with the same UniqueID and metrics.  This covers some common
378cases of re-registering a font with a variant Encoding.  (gs_pdfwr.ps)
379
380</pre><h3><a name="V4.81_Platforms"></a>Platforms</h3><pre>
381
382Fixes bugs:
383	- SEARCH_HERE_FIRST was accidentally set to 0 on MS Windows
384platforms.  (bcwin32.mak, msvc4.mak, msvc5.mak, watcw32.mak)
385
386Adds code to remove "" around arguments in the command line passed to
387WinMain (MS Windows platforms).  (dwmain.cpp, dwmainc.cpp)
388
389</pre><h3><a name="V4.81_Interpreter"></a>Interpreter</h3><pre>
390
391Fixes bugs:
392	- setsystemparams was broken.  (gs_lev2.ps)
393	- restore was broken if -dNOBIND was invoked.  (gs_dps1.ps)
394	- deviceinfo returned much more information than it should.
395(gs_dps.ps)
396	- The fix for the default EndPage procedures not popping their page
397count operand from the stack was wrong.  (gs_init.ps, gs_setpd.ps)
398
399</pre><h3><a name="V4.81_Library"></a>Library</h3><pre>
400
401Fixes bugs:
402	- The saved character origin took the translation component of the
403FontMatrix into account, which caused charpath on fonts with non-zero
404translation in the FontMatrix to produce incorrect results.  (gschar.c)
405
406Removes incorrect access attributes on a couple of files.  (gdevpdfm.c,
407gxclist.h)
408
409</pre>
410
411<h2><a name="Version4.80"></a>Version 4.80 (limited) (5/28/97)</h2>
412
413<p>
414This is the candidate fileset for the 5.0 release.
415
416<h3><a name="V4.80_Documentation"></a>Documentation</h3><pre>
417
418Fixes bugs:
419	- The one-line description of the color image rendering module was
420incorrect.  (gximage3.c)
421	- Some of the VMS documentation was out of date.  (make.txt,
422use.txt)
423	- The description of the file name separator for -sFONTMAP= was
424wrong.  (use.txt)
425	- PSFile was misspelled PSfile.  (use.txt)
426	- There were some minor typos.  (gstype1.h)
427	- The build instructions had a lot of obsolete information for PC
428environments, and didn't cover Microsoft Visual C++.  (make.txt)
429
430Explains that -sPAPERSIZE= only specifies the default papersize, and that
431forcing a particular paper size also requires -dFIXEDMEDIA.  (use.txt)
432
433Adds information about building with GNU make on OpenVMS.  (make.txt)
434
435Clarifies the meaning of EOFC for streams.  (strimpl.h)
436
437Documents the new dictionary argument for the eexecDecode filter.
438(language.doc)
439
440</pre><h3><a name="V4.80_Procedures"></a>Procedures</h3><pre>
441
442Fixes bugs:
443	- gs_epsf.ps didn't get installed on Unix systems.  (unix-end.mak)
444	- The code wouldn't build with libpng 0.95b.  (libpng.mak)
445	- One of the VMS scripts used CC_QUAL instead of CC_DEF.
446(vms-cc.mak)
447	- version.mak wasn't included in a dependency list.  (unix-end.mak)
448
449Brings the VMS DCL script up to date again (for the last time, we hope).
450(vms.mak)
451
452Modifies all platform-independent uses of upper-case command line arguments
453to deal properly with VMS, where the shell converts all command line
454arguments to lower case, without requiring quotation.  (devs.mak, gs.mak,
455int.mak, lib.mak, zlib.mak)
456
457Moves the compilation rules for the third-party libraries into gs.mak, so
458they can be used to compile the callers as well.  (gs.mak, jpeg.mak,
459libpng.mak, zlib.mak)
460
461Adds a set of files that allow building on OpenVMS using GNU make (slightly
462patched).  The timing on this is unfortunate, but we've wanted this for a
463very long time.  NOTE: be sure to look in the OpenVMS section of make.txt
464for information on patching GNU make.  (openvms.mak, append_l.com,
465rm_all.com, rm_one.com, copy_one.com)
466
467Adds new makefiles for building on 32-bit Windows with Borland, Watcom, and
468Microsoft Visual C++ (versions 4.x and 5.0).  The timing on this is
469unfortunate too, but having this capability is so important that we couldn't
470pass it up.  (bcwin32.mak, msvc4.mak, msvc5.mak, msvccom.mak, watcw32.mak,
471wincom.mak)
472
473Removes now-obsolete makefiles.  (dwcommon.mak, msc.mak, msvcwint.mak,
474mscbegin.bat, watcwin.mak)
475
476</pre><h3><a name="V4.80_Utilities"></a>Utilities</h3><pre>
477
478Extends echogs to work in VMS environments, where the shell converts all
479command line arguments to lower case, without requiring quotation.
480(echogs.c)
481
482Adds a sketch of a utility for converting Type 1 fonts to CFF.  DOESN'T WORK
483YET: DON'T TRY TO USE IT.  (t1tot2.ps, type1ops.ps, writecff.ps)
484
485</pre><h3><a name="V4.80_Drivers"></a>Drivers</h3><pre>
486
487Fixes bugs:
488	- A type declaration wasn't compatible with libpng 0.95.
489(gdevpng.c)
490	- kshow wasn't handled properly when producing PDF output.
491(gs_pdfwr.ps)
492	- The PDF writer put out unnecessary ET/BT commands.  (gdevpdfx.h,
493gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c)
494	- The PCL XL writer put out real numbers for the miter limit, which
495are not allowed (!).  (gdevpx.c)
496	- The PCL XL writer didn't combine successive curves into a single
497curve command (performance bug only).  (gdevpx.c)
498	- The PCL XL writer could write uncompressed images with a tag
499saying they were compressed.  (gdevpx.c)
500	- The PCL XL writer always selected U.S. letter paper, rather than
501the requested size.  (gdevpxen.h, gdevpx.c)
502	- The PCL XL writer reselected the paper size on every page, even if
503it hadn't changed.  (gdevpx.c)
504	- The PCL XL writer always used shorts for line and curve
505coordinates, rather than using bytes when possible (performance bug only).
506(gdevpx.c)
507	- Because of a compiler bug, a macro with argument conflicted with a
508variable name.  (gdevpdfx.h, gdevpdf.c)
509	- A picky compiler objected to an extern for an undefined structure.
510(gdevpsdf.h)
511	- The PDF writer sometimes didn't reset the clipping path, causing
512bitmaps or rectangle to disappear.  (gdevpdf.c, gdevpdfi.c)
513	- The PDF writer produced invalid output if the first page was
514blank.  (gdevpdf.c)
515	- The AutoRotatePages parameter for PostScript and PDF output (which
516doesn't actually do anything yet) incorrectly expected a Boolean value
517rather than an enumeration.  (gdevpsdf.h, gdevpsdf.c)
518	- Some places returned -1 for an error without calling gs_note_error
519or gs_return_error.  (gdevm1.c, gdevmpla.c, gdevrun.c, gxclpath.c)
520	- The PCL XL writer produced extremely large files because it didn't
521download character bitmaps.  (OK, this isn't really a bug fix.)  (gdevpx.c)
522	- The forwarding implementation of get_page_device didn't do the
523right thing.  (gdevnfwd.c)
524	- The x11alpha device didn't implement get_params properly, leading
525to anomalous behavior.  (gdevxalt.c)
526	- The PDF writer produced incorrect Count values for outlines: the
527count only counted descendant leaves, omitting intermediate nodes.
528(gdevpdfm.c)
529
530Removes an assumption that images have at most 4 components.  (gdevpdfi.c)
531
532Adds an x11gray2 device, primarily for debugging.  (devs.mak, gdevxalt.c)
533
534Updates the unified printer driver with a newer version.  (uninfo.ps,
535gdevupd.c, *.upp)
536
537</pre><h3><a name="V4.80_Platforms"></a>Platforms</h3><pre>
538
539Adds the P*M devices and the X11 devices (commented out) to the OS/2
540makefile.  (os2.mak)
541
542Updates the MS Windows platform to be compatible with Microsoft Visual C++
543(as well as Watcom and Borland compilers).  (gsdll32.def, gdevmswn.h,
544gp_mswin.h, gsdll.h, dwimg.cpp, dwmain.cpp, dwmainc.cpp, dwtext.cpp,
545gdevwdib.c, gdevwprn.c, gdevwpr2.c, gp_mswin.c, gsdll.c)
546
547</pre><h3><a name="V4.80_Fonts"></a>Fonts</h3><pre>
548
549Fixes bugs:
550	- Certain synthetic fonts incorrectly were loaded into local rather
551than global VM.  (These fonts are not part of the standard distribution.)
552(gs_fonts.ps, gs_pfile.ps, *ss*.ps)
553
554</pre><h3><a name="V4.80_Interpreter"></a>Interpreter</h3><pre>
555
556Fixes bugs:
557	- The FAKEFONTS scan could leave junk on the stack.  (gs_fonts.ps)
558	- Dynamically loading known encodings on demand left junk on the
559stack, causing a typecheck error.  (gs_res.ps)
560	- Some 'static' declarations were missing (gcc lossage).  (iname.c)
561	- Some internal operators didn't have names, leading to unhelpful
562error printout.  (zfileio.c)
563	- The resource "operators" didn't always restore the stacks properly
564on an error.  (gs_res.ps)
565	- The CID font code left a garbage value on the stack during
566loading.  (gs_cidfn.ps)
567	- The defineresource implementation for built-in resources like
568FMapType didn't leave the resource "value" on the stack.  (gs_res.ps)
569	- If an operator defined by a procedure was bound into a packed
570procedure, the stack-protection feature wasn't effective.  (interp.c)
571	- findfont didn't restore the stack if it failed.  (gs_res.ps)
572	- The showpage count passed to the BeginPage and EndPage procedures
573was incremented only if a page was printed, rather than for every invocation
574of showpage.  (gs_init.ps, zdevice2.c)
575	- The default EndPage procedures didn't pop their page count operand
576from the stack.  (gs_init.ps, gs_setpd.ps)
577	- If the argument of findfont wasn't a name or a string, and no font
578with that key had been registered, an error occurred.  (gs_fonts.ps,
579gs_res.ps)
580
581Updates most of the remaining pseudo-operators to take advantage of stack
582protection.  (gs_btokn.ps, gs_cmap.ps, gs_dps1.ps, gs_dps2.ps, gs_fonts.ps,
583gs_lev2.ps, gs_pdfwr.ps)
584
585Splits the image operators into a separate file from the path painting
586operators.  (This should have been done a long time ago.)  (iimage.h,
587zimage.c, zpaint.c)
588
589Adds more of the implementation of the NeXT alpha and compositing
590operations, under an #ifdef DPNEXT.  (iimage.h, zcolor1.c, zdpnext.c,
591zimage.c)
592
593Adds more of the implementation of DPS contexts.  These are still not
594usable.  (icontext.h, icontext.c, zcontext.c, zmath.c)
595
596Changes the help message to describe -dBATCH instead of -c quit.
597(imainarg.c)
598
599Recognizes the dictionary argument for the eexecDecode filter.  (zmisc1.c)
600
601</pre><h3><a name="V4.80_Streams"></a>Streams</h3><pre>
602
603Fixes bugs:
604	- The tracing message when starting to decode 1-D fax data reported
605the run_color incorrectly.  (scfd.c)
606	- In the CCITTFaxDecode filter, if a buffer boundary fell between a
607makeup code and a final zero-length termination code, an ioerror could
608occur.  (scfd.c)
609	- Per Adobe, in the CCITTFaxDecode filter, EndOfBlock = true should
610cause Rows to be ignored.  (scfd.c)
611	- If an output stream returned EOFC, an infinite loop might result.
612This problem (and the fix) are in the same fragile code as the EOD fix in
6134.74, and we may again have introduced a new bug.  (stream.c)
614
615Changes the eexecDecode filter so that instead of a number, it can take a
616dictionary with two keys, seed and lenIV.  (Having eexecDecode skip initial
617bytes at all was a design bug that is too late to fix.)  (sfilter.h,
618seexec.c)
619
620</pre><h3><a name="V4.80_Library"></a>Library</h3><pre>
621
622Fixes bugs:
623	- The default mapping from RGB+alpha to RGB didn't lighten
624(premultiply) the color according to the alpha value.  (gxcmap.c)
625	- The angle error metric for rational tangent screen parameters
626should be simply the difference in angle, not a ratio.  (gshtscr.c)
627	- gs_setcolorscreen and gs_sethalftone didn't initialize an
628allocator pointer, leading to memory access errors.  (gsht1.c)
629	- If a banded image was clipped, an invalid band list could be
630produced.  (gxclimag.c)
631	- A picky compiler wouldn't allow an enum to be &amp;&amp;'ed with a
632boolean.  (gschar.c)
633	- A short-sighted compiler didn't allow the use of actual procedure
634names (as opposed to procedure variables) in a conditional expression.
635(gxfill.c)
636	- A compiler objected to a name longer than 31 characters.  (gzht.h,
637gsht.c, gxclread.c)
638	- The height computations for banded images were not consistent,
639possibly leading to invalid band lists.  (gxclimag.c)
640	- copypage didn't reset the band writer and band reader bookkeeping
641consistently, leading to incorrect output and possible errors.  (gxcldev.h,
642gxclist.c, gxclread.c)
643	- When banding, changing the halftone could lead to accessing memory
644after freeing it.  (gxclread.c)
645	- When using disk files for band storage, showpage didn't actually
646delete or truncate the band list file, possibly causing subsequent copypage
647operations to become confused.  (gxclfile.c)
648	- When banding, having more than one image operator in progress at a
649time confused the rasterizing pass and could produce arbitrary errors.  From
650PostScript, this can only happen in the case of an image whose data source
651was a procedure-based stream that itself invoked an image operator: this is
652a senseless and perverse thing to do, but it shouldn't break the code (and a
653Genoa CET file actually does it).  (gxclist.h, gxclimag.c, gxclist.c)
654	- Some picky compilers objected to negating unsigned values.
655(gsuid.h, gsht.c, gsmemory.c, gxpcopy.c)
656	- When banding, if a 90- or 270-degree rotated monobit image was
657clipped, invalid memory accesses could occur.  (gximage.h, gximage1.c)
658	- The showpage count passed to the BeginPage and EndPage procedures
659was incremented only if a page was printed, rather than for every invocation
660of showpage.  Fixing this requires removing the incrementing of the count
661from the library level altogether.  (gsdevice.c)
662	- When rendering a subrectangle of an image, the X DDA was
663initialized incorrectly, causing possible errors.  We think this only
664affected certain banded images.  (gxdda.h)
665
666Adds a provision for images with an alpha component, under an #ifdef DPNEXT.
667****** THE BANDING CODE HAS NOT BEEN UPDATED YET. ******  (gsiparam.h,
668gxcmap.h, gxdither.h, gximage.h, gsimage.c, gxclimag.c, gxclread.c,
669gxcmap.c, gximage.c, gximage3.c, gximage4.c ****** NOT DONE YET ******,
670gximage5.c)
671
672Adds a return_if_error macro to capture the common idiom of making a call
673and then returning its value if that value is negative (error).  (gserror.h)
674
675</pre>
676
677<hr>
678
679<h2><a name="Version4.74"></a>Version 4.74 (limited) (5/5/97)</h2>
680
681<p>
682This fileset is supposed to fix all remaining errors reported by the Genoa
683CET, and is intended to be the last incremental test fileset before the 5.0
684release.
685
686<h3><a name="V4.74_Documentation"></a>Documentation</h3><pre>
687
688Fixes bugs:
689	- Mark procedures are *not* executed in the normal return case.
690(estack.h)
691	- The line_params element of a gs_imager_state is *not* allocated
692separately.  (gsstate.c)
693	- The value passed to the PDF writer for text is a dictionary, not
694an array.  (gdevpdft.c)
695
696Improves the documentation of gstate memory management.  (gsstate.c)
697
698Documents end_status = EOFC for writing streams.  (stream.h, strimpl.h)
699
700Clarifies memory management for halftones and device halftones.  (gsht1.h,
701gxdht.h, gxht.h, gzht.h)
702
703Removes the "experimental" tag from the PostScript and EPS writers.
704(devs.mak)
705
706</pre><h3><a name="V4.74_Utilities"></a>Utilities</h3><pre>
707
708Fixes bugs:
709	- The viewpcx utility scaled images improperly.  (viewpcx.ps)
710	- If a PDF file used F instead of f for filling a path, pdf2ps
711didn't output the fill operation.  (pdf_base.ps)
712
713Changes the ps2pdf script so that, like pdf2ps, it allows debugging
714switches.  (ps2pdf)
715
716</pre><h3><a name="V4.74_Drivers"></a>Drivers</h3><pre>
717
718Fixes bugs:
719	- The vgalib driver didn't clip monobit images properly.
720(gdevvglb.c)
721	- The X driver asked for exposure events to be reported, but never
722read them, causing the event queue to grow indefinitely.  (gdevxini.c)
723	- The "vector" drivers and the PDF writer didn't properly keep track
724of whether the current clipping region was the default one.  (gs_pdfwr.ps,
725gdevvec.h, gdevvec.c, gdevpdf.c, gdevpdft.c)
726	- The PDF writer had word and character spacing interchanged.
727(gdevpdft.c)
728	- The PDF writer scaled word and character spacing incorrectly.
729(gdevpdft.c)
730
731</pre><h3><a name="V4.74_Interpreter"></a>Interpreter</h3><pre>
732
733Fixes bugs:
734	- The user object operators didn't leave the stack in a clean state
735if they failed.  (gs_dps2.ps)
736	- UserObjects wasn't actually defined.  (gs_dps2.ps)
737	- deviceinfo and set/currenthalftonephase were defined even if the
738dps feature wasn't selected.  (int.mak, gs_dps.ps, gs_dps1.ps, gs_lev2.ps,
739zdps.c, zdps1.c)
740	- The dps feature didn't automatically include the level2 feature,
741which it needs.  (int.mak)
742	- The DPS user names mechanism didn't work, since the user names
743array was subject to save and restore.  (It still doesn't really work --
744there is no provision for expanding the user names array, which is created
745with length 0.)  (gs_btokn.ps, ivmspace.h, zbseq.c, zdps.c)
746	- The DPS context operators didn't do all the necessary error
747checking.  (zcontext.c)
748	- The debugging printout for names printed the name index in hex
749without identifying it as such.  (idebug.c)
750	- Adding the first non-name key (or name key with a name index
751beyond 4K) to a dictionary that had any deleted entries could cause some
752entries to apparently disappear.  (idict.c)
753	- If a sub-table of the name table was freed during garbage
754collection, memory could be left in an inconsistent state.  (iname.c, igc.c)
755	- findfont didn't restore the stacks reliably if an error occurred.
756(gs_fonts.ps)
757	- definefont with an invalid Type 0 font sometimes added a FID entry
758(with a dangling pointer) if it failed.  (Recovering properly from a VMerror
759during font creation would require a much more complicated fix than this,
760but since we expect a garbage collection to occur in that case, we aren't
761concerned about it.)  (zfont0.c)
762	- Reading parameter values from a dictionary could access beyond the
763end of the array that keeps track of which entries had been referenced.
764(idict.h, idict.c, iparam.c)
765	- Halftone data was allocated in the current VM rather than in the
766same VM as the halftone dictionary or procedure.  (Fixing this includes
767updating code as necessary for the change in halftone and device halftone
768allocation.)  (iht.h, ivmspace.h, zht.c, zht1.c, zht2.c)
769	- Closed non-executable files on the e-stack could cause a restore
770to be invalid.  (zvmem.c)
771
772Adds skeleton code for the NeXT Display PostScript alpha and compositing
773operators.  This is not ready for use yet!  (errors.h, gs_dpnxt.ps,
774zdpsnext.c)
775
776Implements more of state saving and restoring for Display PostScript
777contexts.  This is not ready for use yet either.  (int.mak, icontext.h,
778istack.h, icontext.c, zcontext.c)
779
780Adds stub code for the Display PostScript view clip operators.  (gs_dps.ps,
781zdps.c)
782
783Removes the obsolete PPM-writing operator.  (int.mak, vms.mak, *.mak,
784zwppm.c)
785
786Makes the random number generator state public so it can be stored in the
787context state.  (zmath.c)
788
789Changes the flag for forcing global garbage collection to a run-time
790variable, for debugging.  (igc.c)
791
792Changes the handling of job control so that it doesn't use procedures that
793produce an execstackoverflow when being printed.  (gs_init.ps)
794
795Updates code as necessary for the change in reference counting.  (zcie.c,
796zcrd.c)
797
798Updates code as necessary for the change in off-stack gstate copying.
799(zdps1.c)
800
801Removes a small bit of obsolete code.  (interp.c)
802
803</pre><h3><a name="V4.74_Streams"></a>Streams</h3><pre>
804
805Fixes bugs:
806	- An output stream that was not the last one in a pipeline could
807incorrectly be asked to write its EOD marker more than once.  (The fix is
808very fragile and may have introduced new bugs.)  (stream.c)
809
810</pre><h3><a name="V4.74_Library"></a>Library</h3><pre>
811
812Fixes bugs:
813	- The gx_device_halftone_release procedure was declared in two
814different header files.  (gzht.h)
815	- Off-stack copying of gstates could lead to a situation where
816different parts of a single gstate were owned by different allocators; this
817could cause them to be freed improperly, corrupting memory.  We fixed this
818partly by making the mixed ownership situation work, and partly by copying
819more of the gstate when off-stack gstates are involved.  Unfortunately, the
820fixes are subtle and may have introduced new bugs.  (gsstate.h, gsht.c,
821gsht1.c, gspcolor.c, gsstate.c)
822	- If an error occurred while creating a Pattern instance, the
823partially initialized instance structure wasn't freed.  (gspcolor.c)
824	- Halftones and device halftones didn't allocate their clones or
825their subsidiary structures with the correct allocator.  (gsht.c, gsht1.c)
826	- The error statement when allocating a reference-counted object had
827to be a control transfer.  (gsrefct.h)
828	- Copying gstates incorrectly copied the memory and saved pointers,
829and the pointer to the dash pattern.  (gsstate.c)
830	- Flatness values less than 0.5 produced far more line segments than
831necessary (roughly the square of the required number).  Fixing this may have
832bad effects on character quality -- this remains to be seen.  (gxpflat.c)
833	- An error during installation of a halftone could leave things in
834an inconsistent state.  (gsht.c)
835	- The API didn't provide enough flexibility with respect to memory
836management for halftones, or guarantee consistent allocation of a halftone
837and its subelements.  (gsht1.h, gsht.c, gsht1.c, gshtscr.c)
838	- Releasing a path didn't clear enough pointers to ensure clean
839garbage collection.  (gxpath.c)
840	- Finalizing or discarding a (cached) scaled font didn't properly
841unlink it from the scaled_fonts list.  (gsfont.c)
842	- Invoking an image operator within the BuildChar procedure for a
843charpath caused an infinite loop.  (gsimage.c)
844	- The bookkeeping for the scaled font cache was incorrect: the count
845didn't always get decremented when a scaled font was freed.  (gsfont.c)
846	- "High level" masked images were written incorrectly in the band
847list as black-and-white images.  (gxclimag.c)
848	- For "high level" images with fewer than 4 samples per pixel,
849non-standard Decode values were written incorrectly in the band list.
850(gxclimag.c)
851	- The color wasn't set correctly for "high level" masked images.
852(gxclimag.c)
853	- The fastest case of monobit image rendering could get a memory
854access error if the image lay partly outside the page.  (gximage1.c)
855	- Clipping with an empty path was a no-op, rather than clipping out
856everything.  (gxcpath.c)
857
858Makes reference-counted objects remember which allocator owns them: this
859entails a NON-BACKWARD-COMPATIBLE change to some of the macros for reference
860counting.  This was necessary to fix the off-stack gstate copying problem.
861(gsrefct.h, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscsepr.c,
862gsstate.c, gxclread.c)
863
864Refactors the unpacking of image data, to make unpacking available as a
865general facility.  (gximage.h, gxsample.h, gximage.c, gximage0.c,
866gximage1.c, gximage4.c, gxsample.c)
867
868Enhances -Z? so that before freeing an object, it checks that the object was
869owned by the correct allocator.  (gsalloc.c)
870
871</pre>
872
873<h2><a name="Version4.73"></a>Version 4.73 (limited) (4/19/97)</h2>
874
875<p>
876This is an incremental bug fix release made primarily to provide a
877synchronization point for an upcoming trip.
878
879<h3><a name="V4.73_Documentation"></a>Documentation</h3><pre>
880
881Fixes bugs:
882	- A reference to the uniprint documentation was incorrect.
883(current.txt)
884	- -Olimit 1000 is not enough now for DEC Ultrix, 1200 is required;
885this is also required for SGI IRIX.  (make.txt)
886
887Adds argument/result comments to all the operators defined in gs_lev2.ps.
888(Eventually we will do this for all operators defined as PostScript
889procedures.)  (gs_lev2.ps)
890
891</pre><h3><a name="V4.73_Procedures"></a>Procedures</h3><pre>
892
893Fixes bugs:
894	- The makefiles didn't provide a default value for GCONFIG_EXTRAS.
895(gs.mak)
896
897</pre><h3><a name="V4.73_Utilities"></a>Utilities</h3><pre>
898
899Fixes bugs:
900	- pdf2ps didn't work with TrueType or compressed Type 1 fonts.
901(gs_pdf.ps, pdf_2ps.ps, pdf_font.ps)
902
903</pre><h3><a name="V4.73_Drivers"></a>Drivers</h3><pre>
904
905Fixes bugs:
906	- A cast from byte to char was omitted.  (gdevpdfm.c)
907
908</pre><h3><a name="V4.73_Platforms"></a>Platforms</h3><pre>
909
910Updates the VMS script (again).  (vms.mak)
911
912</pre><h3><a name="V4.73_Interpreter"></a>Interpreter</h3><pre>
913
914Fixes bugs:
915	- A module that used strlen didn't include string_.h.  (zdevice.c)
916	- Because of some bad PostScript code in FrameMaker output, identity
917rather than unity black generation and undercolor removal functions are
918required on black-and-white devices.  (gs_init.ps)
919	- A harmless internal error during initialization left bogus
920information in $error.  (gs_cidfn.ps)
921	- startjob didn't clear the execution stack.  Fixing this required
922NON-BACKWARD-COMPATIBLE changes to the internal operators .instopped, .stop,
923and .stopped, which are not supposed to be used by any external code.
924(startjob will still give errors if executed in a file that isn't being
925piped from stdin; this will take longer to fix.)  (gs_init.ps, gs_lev2.ps,
926iref.h, imain.c, interp.c, zcontrol.c, zfile.c)
927
928Adds a new .execn operator, part of the startjob changes, that allows
929pushing multiple items on the exec stack.  Eventually this will allow us to
930get rid of many dynamically created closures.  (zcontrol.c)
931
932</pre><h3><a name="V4.73_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
933
934Fixes bugs:
935	- Landscape-mode PDF files weren't rotated properly.  (gs_pdf.ps,
936pdf_main.ps)
937
938Makes the default PDF configuration notify users more informatively when
939encountering an encrypted file.  (pdf_sec.ps)
940
941</pre><h3><a name="V4.73_Streams"></a>Streams</h3><pre>
942
943Makes the RunLengthEncode filter always generate optimally compressed
944output.  We did this because we thought one of the Genoa CET files loops
945forever if this is not the case; but we were wrong.  (srle.c)
946
947</pre><h3><a name="V4.73_Library"></a>Library</h3><pre>
948
949Fixes bugs:
950	- If one coordinate of a position or distance overflowed the
951internal representable range, the other coordinate became garbage.  (bug
952introduced in 4.70) (gspath.c)
953	- The bounding box computation for strokes was slightly too large
954(sometimes much too large).  (gxpaint.h, gdevbbox.c, gxclpath.c, gxstroke.c)
955
956Adds (under an #if 0) an experimental alternate halftone cell choice
957algorithm.  (gshtscr.c)
958
959Adds a better comment to a particularly obscure line of C code.
960(gxclimag.c)
961
962</pre>
963
964<h2><a name="Version4.72"></a>Version 4.72 (limited) (4/14/97)</h2>
965
966<p>
967This is another bug fix release, motivated mostly by Genoa testing.  It also
968updates the new uniprint driver with a major revision, and upgrades CFF
969support a little bit.
970
971<h3><a name="V4.72_Documentation"></a>Documentation</h3><pre>
972
973Fixes bugs:
974	- -dNOGC only disables default automatic garbage collection, not all
975garbage collection.  (use.txt)
976	- Apparently a different set of flags is needed for newer H-P
977compilers.  (make.txt)
978
979Replaces the tiny FAQ with a pointer to the on-line FAQ.  (use.txt)
980
981Updates the documentation for the uniprint driver.  (devices.txt)
982
983Clarifies the fact that Ghostscript reads Fontmap files from *all*
984directories in the search list.  (use.txt)
985
986Notes that building on Linux may require SM and ICE in the list of X
987libraries.  (make.txt)
988
989</pre><h3><a name="V4.72_Procedures"></a>Procedures</h3><pre>
990
991Fixes bugs:
992	- An -include type42 was omitted from the level2 module description.
993(int.mak)
994	- A mention of $(ECHOGS) in the rule for sfile should have been
995$(ECHOGS_XE).  (lib.mak)
996	- The pcx2up sample device should have been put in devs.mak rather
997than lib.mak.  (devs.mak, lib.mak)
998	- scanchar.h and scantab.c belong in the library, not the
999interpreter.  (devs.mak, int.mak, lib.mak)
1000	- Some _h definitions were used before being defined, or weren't
1001defined at all.  (devs.mak, lib.mak)
1002	- The JPEG driver was missing a dependency.  (devs.mak)
1003	- The PDF writer was missing a dependency.  (devs.mak)
1004	- Building Level 1 systems was no longer possible.  (int.mak)
1005
1006Updates the VMS build scripts.  (vms.mak, vms-decc.mak)
1007
1008Adds *.upp to the list of files installed under Unix.  (unix-end.mak)
1009
1010Adds rules to the Unix makefiles to build two library files: gs.a,
1011consisting of the entire PostScript/PDF interpreter lacking only gs.c, and
1012gslib.a, consisting of the graphics library without the gslib.c test driver.
1013(ansihead.mak, cc-head.mak, gcc-head.mak, unixtail.mak)
1014
1015</pre><h3><a name="V4.72_Drivers"></a>Drivers</h3><pre>
1016
1017Fixes bugs:
1018	- The PS/EPS writers could generate a reference to an undefined
1019name.  (gdevps.c)
1020	- The PDF writer produced incorrect output for multi-level outlines.
1021(gdevpdfm.c)
1022	- The PDF writer didn't convert /Action to /A, and /Action/Subtype
1023to /S, in Annot dictionaries.  (gdevpdfm.c)
1024	- The PDF writer didn't work in Level 1 systems.  (gs_pdfwr.ps)
1025	- The PDF writer didn't transform /Rect and /R values to current
1026user coordinates.  (gs_pdfwr.ps, gdevpdfx.h, gdevpdfm.c)
1027	- The PNG writer could refer to the 3 predefined stdio files even in
1028environments where this was undesirable.  (gdevpng.c)
1029	- The PDF writer had a compiled-in limit of 100 pages of output.
1030(gdevpdfx.h, gdevpdf.c)
1031
1032Updates the uniprint driver with a major revision that uses device
1033parameters that can be set from the command line, rather than PostScript
1034code, for configuration choices.  (gdevupd.c, *.upp)
1035
1036</pre><h3><a name="V4.72_Platforms"></a>Platforms</h3><pre>
1037
1038Fixes bugs:
1039	- gp_enumerate_files_next had no way to return an error.  (gp.h,
1040gp_dosfe.c, gp_ntfs.c, gp_os2.c, gp_unifs.c, gp_vms.c) ****** NOT
1041IMPLEMENTED YET ******
1042	- On the Watcom platform, CPU_TYPE &gt;= 486 didn't automatically set
1043FPU_TYPE to 387.  (wccommon.mak)
1044
1045</pre><h3><a name="V4.72_Interpreter"></a>Interpreter</h3><pre>
1046
1047Fixes bugs:
1048	- Caching the current device in userdict could create dangling
1049references.  (gs_init.ps, gs_pdfwr.ps, zdevice.c)
1050	- If an error occurred in a BuildChar or BuildGlyph procedure, the
1051graphics state stack wasn't restored.  (ichar.h, zchar.c, zchar2.c)
1052	- There was an obsolete check for a structure when cleaning up after
1053a show operator.  (zchar.c)
1054	- Attempting to show a character with no associated glyph in a Type
10553 font with a BuildGlyph procedure caused an error.  (zchar.c)
1056	- noaccess on a read-only dictionary didn't give an error.
1057(ztype.c)
1058	- The dictionary passed to a Pattern's PaintProc was the original
1059template, not the copy made by makepattern.  (gs_lev2.ps)
1060	- Invalid font parameters could result in partially constructed
1061fonts, which caused problems for restore.  (zfont0.c, zfont2.c)
1062	- Files run under job control caused an error when terminating.
1063(gs_init.ps)
1064	- setpagedevice didn't protect itself against malfunctioning
1065BeginPage or EndPage procedures.  (The protection is still not perfect.)
1066(gs_setpd.ps)
1067	- .type42execchar called font_param redundantly.  (zchar42.c)
1068	- The font operators didn't protect themselves well enough against
1069bogus font dictionaries.  (zfont.c, zfont0.c)
1070	- If an error occurred within a stringwidth, the graphics state
1071stack wasn't restored properly.  (zchar.c)
1072	- If an error occurred within the PaintProc of a form, the graphics
1073state stack was left with an extra entry.  (gs_lev2.ps)
1074	- Registering a font under a second name could corrupt data
1075structures.  (zfont2.c)
1076	- Different scalings of the same font should have "equal" fontIDs,
1077to match the Adobe implementations.  (iutil.c)
1078	- Errors detected by PostScript code during initialization either
1079allowed execution to continue or produced a hex stack dump, instead of just
1080producing a message and exiting.  (interp.c)
1081	- The memory validator didn't validate chunks at previous save
1082levels.  (ilocate.c)
1083	- The Level 1 size of systemdict was too small.  (iinit.c)
1084	- Attempting to define a Category resource in local VM gave a
1085typecheck error rather than an invalidaccess.  (gs_res.ps)
1086	- Building Level 1 systems was no longer possible.  (zusparam.c)
1087
1088Rearranges the interpreter code slightly so that all operator invocations go
1089through a single procedure when debugging.  (interp.c)
1090
1091Adds a -K&lt;numK&gt; switch to limit the total amount of memory that Ghostscript
1092can acquire.  (imainarg.c)
1093
1094Makes the memory validator check packed refs more carefully.  (ilocate.c)
1095
1096Makes the memory validator check explicitly for pointers to freed objects.
1097(igc.c, ilocate.c)
1098
1099Makes the memory validator check dictionaries more carefully.  (ilocate.c)
1100
1101Makes the memory validator check refs embedded in structures.  (ilocate.c)
1102
1103Adds a debugging option that bypasses the garbage collector entirely.
1104(igc.c)
1105
1106Adds debugging options to validate memory before/after save/restore.
1107(zvmem.c)
1108
1109Removes the patch for the uniprint driver, since it is no longer needed.
1110(gs_init.ps)
1111
1112Implements real-number operands in CFF fonts.  (gs_cff.ps)
1113
1114Implements non-default charsets in CFF fonts.  (gs_cff.ps)
1115
1116</pre><h3><a name="V4.72_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
1117
1118Fixes bugs:
1119	- The PDF 1.2 "marked content" operators weren't defined.
1120(pdf_main.ps)
1121	- Streams with binary data whose first character was an EOL (\n)
1122didn't parse properly.  Unfortunately, the way we fixed this may break some
1123other files.  (pdf_base.ps)
1124	- PDF 1.2 #nn escape syntax in names wasn't recognized.  ****** This
1125is implemented with an inefficient hack that should be moved down into C.
1126However, I don't want to risk introducing new bugs during the beta test
1127period. ****** (pdf_base.ps)
1128	- The interpreter had a limit of 64K objects.  Removing this limit
1129required changing a basic data structure -- admittedly a risky thing to do
1130during beta test.  (pdf_base.ps, pdf_main.ps)
1131	- TJ didn't multiply the offsets by the font size, causing incorrect
1132character positioning.  (gs_pdf.ps)
1133
1134</pre><h3><a name="V4.72_Streams"></a>Streams</h3><pre>
1135
1136Fixes bugs:
1137	- The ASCIIHexDecode filter read an extra character in case of
1138error.  (sstring.c)
1139
1140Adds more tracing output to the CCITTFaxDecode stream.  (scfd.c)
1141
1142</pre><h3><a name="V4.72_Library"></a>Library</h3><pre>
1143
1144Fixes bugs:
1145	- The allocator client name for rendering bitmap patterns was
1146incorrect.  (Only affects tracing output.)  (gspcolor.c)
1147	- The check for exceeding the overall allocation limit was
1148incorrect, because of unsigned arithmetic.  (Only affects limitation of
1149total allocation, which is only used for debugging and benchmarking.)
1150(gsmemory.c)
1151	- The 0'th component of colored screens wasn't passed through the
1152band list, possibly causing access errors when rasterizing.  (gxclimag.c,
1153gxclread.c)
1154	- setbbox could get an overflow without detecting it.  (gsdps1.c)
1155	- Images with only one component but MultipleDataSources = true
1156could cause a memory access error.  (gximage.c)
1157	- The buffer for unpacking 12-bit-per-sample image data was too
1158small, causing memory corruption.  (gximage.c)
1159	- 12-bit-per-sample images with multiple data sources sometimes
1160didn't pass correct pointers to image_data.  (gsimage.c)
1161	- If an image data stream reached EOF before supplying enough data
1162for the entire image, memory corruption could occur.  (zpaint.c)
1163	- When a device halftone was freed, some pointers in the halftone
1164cache weren't cleared, leading to possible dangling references.  (gsstate.c)
1165	- Invalid font parameters could result in partially constructed
1166fonts, which caused problems for restore.  (gxfont0.h, gsfont.c)
1167	- If an error occurred within a stringwidth, the graphics state
1168stack wasn't restored properly.  (gschar.c)
1169	- The (static) limit on the size of a command line argument was too
1170small.  (gsargs.h)
1171	- Building Level 1 systems was no longer possible.  (gxdht.h,
1172gsht.c, gsht1.c)
1173	- Truncation instead of rounding caused colors on gray-scale devices
1174to come out very slightly too dark.  (gxcmap.c)
1175	- The Decode mapping table constructed for images was slightly
1176inaccurate for ranges other than [0 1] or [1 0].  (gximage.c)
1177
1178</pre>
1179
1180<h2><a name="Version4.71"></a>Version 4.71 (limited) (3/31/97)</h2>
1181
1182<p>
1183This is a bug fix release during the beta test period.
1184
1185<h3><a name="V4.71_Documentation"></a>Documentation</h3><pre>
1186
1187Fixes bugs:
1188	- A larger value of -Olimit is now needed to optimize gxclread.c.
1189(make.txt)
1190	- Some comments were incorrect.  (gdevbbox.h, sfilter1.c)
1191
1192Updates the GPL with a newer version from FSF.  (COPYLEFT)
1193
1194Notes that the gcc 2.7.x code generation bug is fixed in 2.7.2.1.
1195(make.txt)
1196
1197</pre><h3><a name="V4.71_Procedures"></a>Procedures</h3><pre>
1198
1199Fixes bugs:
1200	- Some streams required by high-level drivers were incorrectly
1201grouped with the interpreter rather than the library.  (int.mak, lib.mak)
1202	- The choice of implementation for file streams was buried in an
1203obscure place, rather than being included in the configuration definitions
1204at the head of each makefile.  (We believe there are no more such buried
1205parameters.)  This involved a NON-BACKWARD-COMPATIBLE change in the way this
1206choice was specified.  (lib.mak, *.mak)
1207	- Some dependencies were missing.  (lib.mak)
1208
1209</pre><h3><a name="V4.71_Drivers"></a>Drivers</h3><pre>
1210
1211Fixes bugs:
1212	- A variable was used before being initialized, causing get_bits
1213(and raster ops) to fail when using alternate X devices.  (bug introduced in
12144.70.)  (gdevxalt.c)
1215	- Some 'private' declarations were omitted.  (It is infuriating that
1216gcc doesn't check for this!)  (gdevps.c, gdevpx.c)
1217	- A few character strings were used as byte arrays without a cast.
1218(gdevpx.c)
1219	- The EPS writer didn't write a correct bounding box, and didn't
1220write it at the beginning of the file.  (gdevvec.h, gsstruct.h, gdevps.c,
1221gdevvec.c)
1222	- x_copy_color specified an incorrect (too large) image width.
1223Apparently this only mattered because it could cause invalid memory
1224accesses.  (gdevx.c)
1225	- x_copy_mono also specified too large an image width.  It's not
1226clear this made any difference.  (gdevx.c)
1227	- The default implementation of strip_copy_rop didn't clamp Y values
1228to legal values for get_bits.  (gdevmrop.c)
1229
1230</pre><h3><a name="V4.71_Interpreter"></a>Interpreter</h3><pre>
1231
1232Fixes bugs:
1233	- Some initialization files prematurely switched the interpreter
1234into Level 2 mode, causing some Level 2 operators not to be defined.  (bug
1235introduced in 4.60 or later.)  (gs_cff.ps, gs_cidfn.ps, gs_cmap.ps,
1236gs_init.ps, gs_res.ps)
1237
1238</pre><h3><a name="V4.71_Streams"></a>Streams</h3><pre>
1239
1240Fixes bugs:
1241	- The choice of procedure names for the file-descriptor-based
1242implementation of file streams was buried in a .c file, rather than being
1243chosen in the makefile.  (sfile.c[deleted], sfileno.c[deleted], sfxstdio.c,
1244sfxfd.c, sfxboth.c)
1245
1246</pre><h3><a name="V4.71_Library"></a>Library</h3><pre>
1247
1248Fixes bugs:
1249	- rcurveto was broken -- it drew curves to random points.  (bug
1250introduced in 4.61.)  (gspath.c)
1251	- A trailing comma in an enum definition upset some compilers.  (bug
1252introduced in 4.70.)  (gstype1.h)
1253	- Type 1 fonts with hint replacement could produce anomalous or
1254clipped output, or even missing lines.  (Also cleans up some out-of-date
1255formatting.)  (gxtype1.h, gstype1.c, gxhint2.c)
1256	- Removes some conditionals for choosing between old and new
1257algorithms.  (gxhint3.c)
1258	- makebitmappattern required that the bitmap consist of only a
1259single tile repetition.  (gspcolor.c)
1260	- Some computations on RasterOps didn't take transparency into
1261account properly.  (gdevmrop.c)
1262	- The structure definition for imager and graphics states had an
1263incorrect offset for line_params, causing the garbage collector not to mark
1264or relocate dash patterns, possibly causing memory faults, FPEs, or invalid
1265output.  (bug introduced since 4.03.)  (gsstate.c)
1266	- 'show' operators gave a limitcheck for unreasonable coordinates,
1267even if limit clamping was enabled.  (gschar.c)
1268
1269Implements banded filling and stroking with colored halftones, in addition
1270to pure colors and binary halftones.  Since we are in a beta test period,
1271actual use of this feature (but *not* all the code implementing it) is
1272disabled under an #ifdef FUTURE.  (gsdcolor.h, gxcldev.h, gxclpath.h,
1273gxdht.h, gxhttype.h, gsht.c, gxclimag.c, gxclpath.c, gxclread.c)
1274
1275</pre>
1276
1277<h2><a name="Version4.70"></a>Version 4.70 (limited) (3/26/97)</h2>
1278
1279<p>
1280This fileset fixes the one outstanding compilation problem on PC platforms
1281and the old problem of limitchecks for out-of-bounds coordinates, and adds a
1282variety of new features, including the ability to save away the band lists
1283for pages and rasterize them later and/or elsewhere in any order and
1284combination.  This is the first "serious beta" candidate for the next
1285general release.
1286
1287<p>
1288Fileset numbers 4.62 through 4.69 were skipped deliberately.
1289
1290<h3><a name="V4.70_Documentation"></a>Documentation</h3><pre>
1291
1292Fixes bugs:
1293	- The list of special -d and -s switches was out of date.  (use.txt)
1294	- The name of the zlibDecode filter was incorrectly written
1295zlibEncode.  (language.txt)
1296
1297Documents where to find out how to install gcc 2.7.x on SGI IRIX 6.x.
1298(make.txt)
1299
1300Documents a makefile patch required on NeXTStep.  (make.txt)
1301
1302Documents how to patch gcc to fix the AXP code generation bug.  (make.txt)
1303
1304Adds documentation for the new unified printer driver.  (devices.txt)
1305
1306</pre><h3><a name="V4.70_Procedures"></a>Procedures</h3><pre>
1307
1308Fixes bugs:
1309	- 'make distclean' didn't remove a couple of files.  (gs.mak)
1310	- A library module didn't include a necessary dependency.  (lib.mak)
1311	- A new .ps file wasn't installed properly.  (unix-end.mak)
1312	- File write dates weren't updated properly on PC platforms, causing
1313unnecessary rebuilding.  (cp.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak,
1314tccommon.mak, wccommon.mak, zlib.mak)
1315	- An unnecessary explicit compilation line for gdevcdj.c caused
1316problems in the Mac environment.  (devs.mak)
1317	- The VMS scripts were out of sync again.  (vms.mak)
1318	- The VMS build scripts didn't include the new JPEG driver.
1319(vms-*.mak)
1320	- A number of makefile macros were referenced before being defined.
1321(devs.mak, lib.mak, int.mak, *.mak)
1322	- libpng.mak didn't work with PVERSION=90.  (libpng.mak, zlib.mak)
1323
1324Separates install-scripts from install-exec and install-data.
1325(unix-end.mak)
1326
1327Moves the definition of SEARCH_HERE_FIRST from iminst.h to the makefiles.
1328(*.mak, iminst.h, iconf.c, imain.c)
1329
1330Adds a -dBATCH switch that causes Ghostscript to exit after processing the
1331files named on the command line.  (gs_init.ps)
1332
1333Adds the PostScript, EPS, and PCL XL writers, and the color and gray-scale
1334JPEG drivers, to all Unix configurations.  (ansihead.mak, cc-head.mak,
1335gcc-head.mak)
1336
1337</pre><h3><a name="V4.70_Drivers"></a>Drivers</h3><pre>
1338
1339NOTE: because of a change in an internal interface (clist_output_page), the
1340cp50 driver no longer works.  This is a user-contributed driver for which we
1341take no responsibility.
1342
1343Fixes bugs:
1344	- gdevcdj.c wasn't compatible with ansi2knr.  (gdevcdj.c)
1345	- 'private' was omitted from some declarations.  (gdevjpeg.c)
1346	- The PostScript writer didn't keep track of the current color
1347properly.  (gdevps.c)
1348	- RESOLUTION was misspelled in a header.  (gdevbjc.h)
1349	- Some compilers objected to the use of a floating point initial
1350resolution value.  (gdevbjc.h)
1351	- Some compilers didn't allow static initialization of a union.
1352(gsdcolor.h)
1353	- If a TIFF driver got an error when initializing the CCITTFax
1354encoder, it returned a bogus error code.  (gdevtfax.c)
1355	- The PDF writer produced incorrect output for Indexed color space
1356images.  (gdevpdfi.c)
1357	- For many fatal error conditions, the X driver called exit()
1358instead of returning an error.  (gdevx*.c)
1359
1360Adds new drivers:
1361	- epswrite, an EPS-writing driver (instead of making EPS output a
1362parametric option of the PostScript-writing device).  (devs.mak, gdevps.c)
1363	- pcxcmyk, a 4-bit CMYK PCX driver.  This is probably only useful
1364for debugging CMYK color rendering.  (gdevpcx.c)
1365	- jpeggray, a JPEG driver that produces gray-scale rather than color
1366output.  Thanks to Tom Lane for contributing this.  (gdevjpeg.c)
1367	- uniprint, a unified printer driver for a wide variety of inkjet
1368printers.  Thanks to Gunther Hess for contributing this.  (gdevupd.c)
1369
1370Adds the resolution (pHYs) to the output of the PNG drivers.  (gdevpng.c)
1371
1372Adds recognition of the ASCII85EncodePages parameter to the PostScript and
1373EPS writers.  (gdevps.c)
1374
1375Makes the new JPEG driver write a JFIF header, which contains the image
1376resolution.  (gdevjpeg.c)
1377
1378Changes the "vector" device support interface so relative movement can be
1379detected easily.  THIS IS STILL SUBJECT TO CHANGE WITHOUT NOTICE.
1380(gdevvec.h, gdevpsdf.c, gdevps.c, gdevpx.c, gdevvec.c)
1381
1382Changes the PostScript, EPS, and PDF writers to recognize curves and lines
1383that can be represented more efficiently.  (gdevpsdf.h, gdevpsdf.c,
1384gdevps.c)
1385
1386Adds a new parameter to the PDF writer, FirstObjectNumber.  This defines the
1387first object number that will be used in the output.  The default, and
1388minimum, value is 1; the maximum value is approximately 2^31.  This is for
1389the benefit of dvipdf; we don't expect it to be used otherwise.  In fact,
1390using it appears to produce files that Adobe Acrobat Reader won't accept,
1391even though the files are perfectly compliant with the published PDF
1392specification.  (gdevpdfx.h, gdevpdf.c, gdevpdfp.c)
1393
1394</pre><h3><a name="V4.70_Platforms"></a>Platforms</h3><pre>
1395
1396Removes the makefile for the 16-bit Borland C++ platform.  This was the last
1397supported 16-bit platform; we expect to gradually drop all 16-bit
1398concessions from the code itself.  (bcwin.mak)
1399
1400</pre><h3><a name="V4.70_Interpreter"></a>Interpreter</h3><pre>
1401
1402Fixes bugs:
1403	- The initial size of systemdict was too small, causing the
1404interpreter to slow down substantially.  (iinit.c)
1405	- A library module depended on an interpreter module.  (zcsindex.c)
1406	- A logically necessary (but accidentally always available) #include
1407was missing.  (ifont.h)
1408
1409Moves set/currentoverprint to a more appropriate module.  (zcolor2.c,
1410zcssepr.c)
1411
1412Changes the default transfer functions so that they do something reasonable
1413when given operands outside the legal [0..1] range.  We only do this to work
1414around a bug in FrameMaker output, which uses the transfer function as the
1415screen function (!).  (gs_init.ps)
1416
1417Changes the CMap construction algorithm to use the new, more compact
1418representation.  (zfcmap.c)
1419
1420Adds support for Adobe's Compact Font Format.  Many individual features are
1421not implemented yet: see the comment in the source code for details.
1422(gs_cff.ps)
1423
1424Adds support for Type 2 charstrings in Type 1 fonts.  (ifont.h, zfont1.c)
1425
1426Changes the Type 1 character rendering operator for the library change in
1427Type 1 fonts.  (zchar1.c, zfont1.c)
1428
1429Initializes the graphics state limit clamp flag to true.  (zgstate.c)
1430
1431Temporarily adds a configuration file for the new unified printer driver,
1432and arranges for it to be read at startup.  This arrangement will be
1433replaced very soon by a different one based on command line parameters.
1434(gs_init.ps, uniprint.ps)
1435
1436</pre><h3><a name="V4.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
1437
1438Adds support for Compact Font Format fonts.  (pdf_font.ps)
1439
1440</pre><h3><a name="V4.70_Streams"></a>Streams</h3><pre>
1441
1442Adds a glue procedure needed for the new jpeggray driver.  (sjpeg.h,
1443sjpege.c)
1444
1445Removes the width limit of 32K in the CCITTFaxEncode filter.  The new limit
1446is absurdly large (about 50M).  (scf.h, scfx.h, scfe.c)
1447
1448</pre><h3><a name="V4.70_Library"></a>Library</h3><pre>
1449
1450Fixes bugs:
1451	- A library module depended on an interpreter module.  (gxcolor2.h,
1452gscolor2.c)
1453	- When rendering a band, clipping was sometimes used when it wasn't
1454necessary.  (Performance only.)  (gxclread.c)
1455	- Stroking didn't check the path against the device clipping box in
1456the absence of an explicit (non-default) clipping path.  (Performance only.)
1457(gxstroke.c)
1458	- A reference to an opaque type upset a couple of compilers.
1459(gxclread.c)
1460	- Negative 32-bit numbers in Type 1 fonts didn't work properly on
146164-bit systems.  (gstype1.c)
1462	- A logically necessary (but accidentally always available) #include
1463was missing.  (gxbitmap.h)
1464	- A header wasn't protected against double inclusion.  (gxclist.h)
1465	- Clipping devices didn't store their actual width and height.
1466(gxcpath.c)
1467	- The slow-case check for thin lines was incorrect.  (gxstroke.c)
1468	- Images didn't compute their clipping boxes correctly if there
1469wasn't an explicit clipping path.  (This must be a very recent bug, since it
1470creates an overflow condition that prevents monochrome images from being
1471rendered at all.)  (gximage.c)
1472
1473Moves set/currentoverprint to a more appropriate module.  For clients of
1474gs_set/currentoverprint, this is a NON-BACKWARD-COMPATIBLE CHANGE, since the
1475header file is now separate.  (gscolor2.h, gscsepr.h, gscolor2.c, gscsepr.c)
1476
1477Replace the MetroWerks work-around with a different, more general one.
1478(gdevmem.h, gdevmem.c, gxdevice.h)
1479
1480Speeds up the Type 1 interpreter a little.  (gstype1.c, gxhint3.c)
1481
1482Redesigns the internal representation of CMaps to be more space-efficient.
1483(gxfcmap.h, gschar0.c, gsfcmap.c)
1484
1485Implements a facility for saving away pages and rendering them later.
1486Currently this requires the pages to be represented as band lists on files,
1487and only allows X translation when rendering.  This involves adding the
1488following new printer device parameters:
1489	BandHeight
1490	BandWidth
1491	BandBufferSpace
1492Also changes the names of the printer device parameter elements from
1493use_buffer_space to BufferSpace and from max_bitmap to MaxBitmap for
1494consistency.  (gdevprn.h, gxcldev.h, gxclio.h, gxclist.h, gxclmem.h,
1495gxclpage.h, gxdevmem.h, gdevmem.c, gdevp2up.c, gdevprn.c, gxclmem.c,
1496gxclpath.c, gxclread.c)
1497
1498Changes the band list implementation API to allow closing a file without
1499deleting it, and to allow reopening an existing file.  This is a
1500NON-BACKWARD-COMPATIBLE change to a deep internal interface.  (gxclio.h,
1501gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c)
1502
1503Speeds up rendering of colored halftones, by recognizing cases where one or
1504more planes don't actually require screening, unrolling a loop, and doing
1505basic clipping before halftoning.  (gxcht.c)
1506
1507Adds a graphics state parameter, gs_set/currentlimitclamp, that changes the
1508handling of out-of-range coordinates to clamp them in a way that produces
1509approximately the intended output most of the time, rather than causing a
1510limitcheck.  Currently this is only designed to work with the basic path
1511construction operations ([r]moveto, [r]lineto, [r]curveto, closepath); it
1512does not work with many other operations such as show, flattenpath or the
1513rectangle operations.  Note also that while currentpoint will return the
1514correct (unclamped) value, reading out the path with pathforall will return
1515clamped values.  This involves NON-BACKWARD-COMPATIBLE changes to the path
1516structure (but not to any public interfaces).  (gxpath.h, gxtype1.h,
1517gzpath.h, gzstate.h, gspath.c, gspath1.c, gsstate.c, gstype1.c, gxpaint.c,
1518gxpath.c, gxpath2.c, gxpcopy.c)
1519
1520Adds support for Type 2 charstrings.  Some features are not implemented yet:
1521see gstype2.c for details.  (gscrypt1.h, gstype1.h, gxfont1.h, gxop1.h,
1522gxtype1.h, gstype1.c, gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c)
1523
1524</pre>
1525
1526<hr>
1527
1528<h2><a name="Version4.61"></a>Version 4.61 (limited) (3/13/97)</h2>
1529
1530<p>
1531This fileset cleans up many compiler warnings.  It adds support for
1532CMap-encoded fonts, and a driver that writes JPEG images.
1533
1534<h3><a name="V4.61_Documentation"></a>Documentation</h3><pre>
1535
1536Corrects an error in the description of the internal CodeMap structure.
1537(gs_cmap.ps)
1538
1539Documents the fact that the optimizer in gcc 2.7.2.1 is broken on AXP
1540machines.  (make.txt)
1541
1542Corrects the name of the .setglobal/.currentglobal procedures.  (zvmem2.c)
1543
1544Updates current.txt in preparation for the release.  (current.txt)
1545
1546</pre><h3><a name="V4.61_Procedures"></a>Procedures</h3><pre>
1547
1548Fixes bugs:
1549	- The VMS script was out of date again.  (vms.mak)
1550	- CIDFont support unnecessarily required composite font support.
1551(int.mak)
1552	- CMap and CIDFont support had improper dependencies on
1553initialization order.  (lib.mak, int.mak)
1554	- Some dependencies were missing in the JPEG library code.
1555(jpeg.mak)
1556
1557Adds the new JPEG driver to all standard configurations.  (*.mak)
1558
1559</pre><h3><a name="V4.61_Drivers"></a>Drivers</h3><pre>
1560
1561Fixes bugs:
1562	- A dependency was omitted from the makefile.  (devs.mak, gdevps.c)
1563
1564Cleans up some warnings from picky compilers.  Some of these actually
1565indicated problems, such as unreachable code.  (gdevpdfx.h, gdevbj10.c,
1566gdevcdj.c, gdevpdfp.c, gdevstc.c)
1567
1568Adds a JPEG-writing driver.  Currently this only produces RGB output and
1569only has a QFactor parameter, but eventually it could take all the other
1570parameters of the DCTEncode filter.  (devs.mak, int.mak, lib.mak,
1571gdevjpeg.c)
1572
1573Refactors the PDF and PostScript output drivers so that both of them
1574understand all the relevant documented PDF distiller parameters.  (The
1575PostScript driver currently disregards nearly all of them.)  (gdevpdfx.h,
1576gdevpsdf.h, gdevvec.h, gdevpdf*.c, gdevps.c, gdevpsdf.c, gdevpx.c)
1577
1578</pre><h3><a name="V4.61_Platforms"></a>Platforms</h3><pre>
1579
1580Fixes bugs:
1581	- The MetroWerks C compiler gave an inexplicable error on a
1582particular initialization.  (gdevmem.h, gdevmem.c)
1583
1584</pre><h3><a name="V4.61_Interpreter"></a>Interpreter</h3><pre>
1585
1586Fixes bugs:
1587	- The insideness testing operators sometimes reported hits
1588incorrectly.  (zupath.c)
1589	- Mixed-type arithmetic used floats rather than doubles when
1590converting integers, possibly leading to loss of precision.  (zarith.c,
1591zrelbit.c)
1592	- composefont was defined in a private dictionary, not in
1593systemdict.  (gs_cmap.ps)
1594	- composefont didn't work, for several different reasons.
1595(gs_cmap.ps)
1596	- After a Type 1 font called an OtherSubr, an invalid memory access
1597usually occurred, because of an incorrect attempt to free a data structure.
1598(zchar1.c)
1599	- 2 .setlanguagelevel gave an error if globaldict hadn't been
1600defined yet.  (zmisc2.c)
1601
1602Cleans up some warnings from picky compilers.  Some of these actually
1603indicated problems, such as unreachable code, or failure to check for
1604(implausible) out-of-range data.  (idict.c, idparam.c, igc.c, iinit.c,
1605imain.c, iscan.c, zbseq.c, zchar1.c, zdps1.c)
1606
1607Adjusts clients for a change in the internal character cache structure and
1608the introduction of the font next-glyph procedure.  (zfont.c, zfont0.c)
1609
1610Refactors the Level 1 / Level 2 interpreter split slightly so that composite
1611fonts don't require all of Level 2.  (int.mak, gs_dps1.ps, gs_dps2.ps)
1612
1613Adds FMapType 9 (CMap-encoded) composite font support.  (int.mak,
1614gs_cmap.ps, ifont.h, zfcmap.c, zfont.c, zfont0.c)
1615
1616</pre><h3><a name="V4.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
1617
1618Adds recognition of /Identity values for BG, UCR, and TR functions in
1619ExtGState resources.  (General function values still aren't recognized.)
1620(pdf_draw.ps)
1621
1622Centralizes the handling of inherited attributes.  (pdf_draw.ps,
1623pdf_main.ps)
1624
1625Starts to add support for Type 0 fonts.  (pdf_font.ps, pdf_main.ps)
1626
1627</pre><h3><a name="V4.61_Streams"></a>Streams</h3><pre>
1628
1629Cleans up some warnings from picky compilers.  Some of these actually
1630indicated problems, such as unreachable code.  (shc.h, scfd.c, sfilter2.c,
1631siscale.c, stream.c)
1632
1633</pre><h3><a name="V4.61_Library"></a>Library</h3><pre>
1634
1635Fixes bugs:
1636	- Some picky compilers disliked certain conditional expressions.
1637(gxclread.c)
1638	- Some picky compilers couldn't handle an extraneous semicolon.
1639(gdevvec.h)
1640	- A cast from byte ** to const byte ** was missing.  (gdevvec.c)
1641	- Resizing the levels array of a halftone order when banding could
1642cause invalid memory accesses.  (bug introduced in 4.60) (gxclread.c)
1643	- One picky compiler didn't allow taking the address of an extern
1644undefined structure.  (lib.mak, gxclread.c)
1645	- When rendering Type 1 fonts, character overshoot was usually
1646suppressed when it shouldn't have been, often producing "squashed"
1647characters.  (gxhint1.c)
1648	- On systems where sizeof(long) &gt; sizeof(int), coordinate values of
1649more than 22 bits were passed through the band list incorrectly, producing
1650incorrect output.  (gxclread.c)
1651
1652Cleans up some warnings from picky compilers.  Some of these actually
1653indicated problems, such as unreachable code or (hypothetical) loss of
1654precision.  (gsdevice.c, gshsb.c, gsht.c, gsstate.c, gstype1.c, gxclimag.c,
1655gxclpath.c, gxclread.c, gxpdash.c)
1656
1657Makes using font hints conditional, for debugging.  (gxhint1.c)
1658
1659Adds library-level support for FMapType 9 (CMap-encoded) composite fonts.
1660There is still no support for rearranged fonts.  (gsccode.h, gsfcmap.h,
1661gsstruct.h, gxfcache.h, gxfcmap.h, gxfont.h, gxfont0.h, gschar.c, gschar0.c,
1662gsfcmap.c, gsfont.c, gsfont0.c)
1663
1664Splits band list control and utilities from rectangle-oriented commands,
1665because a file was getting too big.  (gxclist.c, gxclrect.c)
1666
1667Moves the temporary file names for command lists from the printer device
1668structure to the command list structure; moves opening and closing the
1669temporary files from gdev_prn_alloc/free to clist_open/close.  (gdevprn.h,
1670gxclist.h, gdevprn.c, gxclist.c, gxclread.c)
1671
1672Changes the command list storage implementation interface to pass the file
1673name to the clist_rewind and clist_fseek functions, for the benefit of OSs
1674that require closing and reopening a file to switch between reading and
1675writing.  This is a NON-BACKWARD-COMPATIBLE change in a non-public
1676interface.  (gxclio.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c)
1677
1678Changes the get_outline procedure in Type 42 fonts to return the length of
1679the outline data as well as the pointer.  This is a NON-BACKWARD-COMPATIBLE
1680change in a semi-public interface.  (gxfont42.h, gstype42.c)
1681
1682</pre>
1683
1684<h2><a name="Version4.60"></a>Version 4.60 (limited) (3/2/97)</h2>
1685
1686<p>
1687This fileset moves color rendering up from the graphics state to the imager
1688state so that color rendering can happen after banding.  It also shifts
1689image rendering to the rendering pass of banding for many common cases
1690(often referred to inaccurately as "high-level image" capability).  The
1691changes involved are substantial and in some respects subtle, so
1692unfortunately it is quite possible that some new bugs have been introduced.
1693
1694<p>
1695This fileset also includes improvements to the new PCL XL driver
1696(pxlmono/color), and introduces an experimental PostScript driver (pswrite).
1697
1698<h3><a name="V4.60_Documentation"></a>Documentation</h3><pre>
1699
1700Fixes bugs:
1701	- The argument list of colorimage was incorrect.  (zcolor1.c)
1702	- false .charboxpath incorrectly claimed to create the correct path
1703even when the CTM was not well-behaved.  (language.txt)
1704	- The discussion of the "main program" files was out of date.
1705(make.txt)
1706
1707Updates the OS/2 EMX documentation.  (make.txt)
1708
1709Modifies the Aladdin Ghostscript Free Public License slightly so it may be
1710applied to other software packages.  (PUBLIC)
1711
1712Updates inaccurate build documentation for several Unix platforms.
1713(make.txt, ansihead.mak, cc-head.mak, gcc-head.mak, libpng.mak)
1714
1715Notes a problem with the MIPSpro 7.1 compiler.  (make.txt)
1716
1717</pre><h3><a name="V4.60_Procedures"></a>Procedures</h3><pre>
1718
1719Fixes bugs:
1720	- Most makefiles didn't include version.mak.  (msc.mak,
1721msvcwint.mak, os2.mak, tctail.mak, wctail.mak)
1722	- There was an incorrect dependency for the Windows printer device.
1723(devs.mak)
1724
1725Moves the PDF writer to devs.mak.  (devs.mak, int.mak)
1726
1727Updates the main VMS script to be structured like version.mak.  (vms.mak)
1728
1729</pre><h3><a name="V4.60_Drivers"></a>Drivers</h3><pre>
1730
1731Factors out the stream-writing procedures from the PDF writer, so they can
1732be shared with the new PostScript writer.  (gdevpdfs.h =&gt; gdevpstr.h,
1733gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c, gdevpdfs.c =&gt; gdevpstr.c,
1734gdevpdft.c, gdevpsdf.c)
1735
1736Adds a PostScript writer (pswrite), similar to the PDF and PCL XL drivers.
1737Currently this handles fill/stroke graphics and Level 1 images; everything
1738else (including text) is turned into bitmaps.  (devs.mak, gdevps.c)
1739
1740Changes the names of the PCL XL drivers from hpxmono/color to pxlmono/color.
1741(devs.mak, gdevpx.c)
1742
1743Updates the "vector" device support interface.  THIS IS STILL SUBJECT TO
1744CHANGE WITHOUT NOTICE.  (gdevvec.h, gdevpx.c, gdevvec.c)
1745
1746Makes the vgalib driver a page device.  This seems bizarre, but it's
1747necessary for setpagedevice to work with it.  (gdevvglb.c)
1748
1749Updates some drivers for the new color mapping interfaces.  (gdevpx.c)
1750
1751Updates the user-contributed Canon LBP-8II and LIPS III driver.
1752(gdevlbp8.c)
1753
1754</pre><h3><a name="V4.60_Platforms"></a>Platforms</h3><pre>
1755
1756Fixes bugs:
1757	- The workaround for Ultrix's incorrect implementation of sh -e
1758still didn't work.  (unixtail.mak)
1759	- The definition of offset_of didn't work on the Mac.  (stdpre.h)
1760
1761Updates the OS/2 EMX linker command per input from a user.  (os2.mak)
1762
1763</pre><h3><a name="V4.60_Fonts"></a>Fonts</h3><pre>
1764
1765Adds .pss (apparently used by Adobe for Multiple Master font instances) to
1766the list of extensions skipped by the GS_FONTPATH directory scanner.
1767(gs_fonts.ps)
1768
1769</pre><h3><a name="V4.60_Interpreter"></a>Interpreter</h3><pre>
1770
1771Fixes bugs:
1772	- Programs that rebind null, true, and/or false could cause all
1773kinds of problems.  We've only fixed a couple of the places that might be
1774affected (findfont, quit), by wrapping an explicit "systemdict begin/end"
1775around the code; fixing this completely would probably require wrapping this
1776implicitly around almost every pseudo-operator, which would be too
1777expensive.  (gs_fonts.ps, gs_lev2.ps)
1778	- In a Level 2 system, grestoreall stopped one level too early.
1779(zdevice2.c)
1780	- setpagedevice didn't restore the stack properly if it got an
1781error.  (gs_setpd.ps)
1782
1783Changes the GC pointer enumeration interface to reduce the number of
1784'discarding const' warnings.  See under Library below.  (igc.c)
1785
1786Updates the interpreter for the change in the imager / graphics state split.
1787(zpcolor.c)
1788
1789Makes the stack-restoring behavior of pseudo-operators non-optional.
1790(interp.c)
1791
1792</pre><h3><a name="V4.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
1793
1794Fixes bugs:
1795	- PDFDocEncoding and WinAnsiEncoding incorrectly had `minus' at
1796position 45 rather than `hyphen'.  (gs_pdf_e.ps, gs_wan_e.ps)
1797
1798</pre><h3><a name="V4.60_Streams"></a>Streams</h3><pre>
1799
1800Fixes bugs:
1801	- A header file wasn't protected against double inclusion.
1802(stream.h)
1803	- any_abs was redefined.  (spngp.c)
1804	- The CCITTFaxDecode filter didn't fully initialize the "previous
1805line" for 2-D decoding, so if the very first line of data was 2-D, an
1806out-of-bounds memory access could occur.  (scfd.c)
1807
1808</pre><h3><a name="V4.60_Library"></a>Library</h3><pre>
1809
1810Fixes bugs:
1811	- gs_image_next could read too much data, causing errors at the
1812interpreter level.  (gsimage.c)
1813	- The bitmaps stored in the Pattern cache were usually freed,
1814leaving dangling pointers.  (gsdcolor.h, gxpcache.h, gxpcolor.h, gsstate.c,
1815gxpcmap.c)
1816	- There was still one assignment to a const structure, and there
1817were some unnecessary const-discarding casts.  (gxclread.c)
1818	- If a character in a Type 3 font was defined by executing 'show'
1819type commands, charpath did the wrong thing (didn't pick up the paths
1820created by the inner show).  Similarly, if it uses 'stroke', true charpath
1821did the wrong thing (appended the path rather than the strokepath path).
1822(gxchar.h, gschar.c, gspaint.c)
1823	- A header file wasn't protected against double inclusion.
1824(gserror.h)
1825	- The new fast implementation of rectfill didn't handle rectangles
1826with negative width/height.  (bug introduced in 4.32) (gsdps1.c)
1827	- Reading banded high-level images calculated the image height
1828incorrectly, (usually) causing a rangecheck.  (gxclread.c)
1829	- When reading band data, a memory fault could occur if the halftone
1830cache hadn't been allocated yet.  (gxht.c)
1831	- The imager state data for high-level images wasn't written soon
1832enough.  (gxclimag.c)
1833	- High-level images computed bounding boxes incorrectly, so they
1834could write some garbage data in the band list, and could also fail to write
1835some information.  (gsmatrix.h, gxmatrix.h, gxclimag.c)
1836	- High-level images wrote the raster value incorrectly in the band
1837list.  (gxclimag.c)
1838	- Images with non-zero initial source X and non-portrait orientation
1839were displaced on the page.  (In practice, this only applied to some banded
1840high-level images.)  (gximage.c)
1841	- The bounding box device didn't forward output_page calls, causing
1842pages to be dropped or overprinted.  (gdevbbox.c)
1843	- The band renderer considered all non-zero return codes as errors,
1844rather than only negative codes.  (gxclread.c)
1845	- An unnecessary extern hadn't been removed.  (gxclimag.c)
1846	- Some macros didn't parenthesize uses of their arguments, causing
1847syntax errors.  (gsrefct.h)
1848	- The screen phase and color_info weren't set correctly when
1849rendering bands.  (gsstate.h, gsht.c, gxclread.c)
1850	- A header file didn't declare all the opaque types it used.
1851(gsdevice.h)
1852	- Indexed color spaces didn't work with banded images.  (They still
1853don't -- the check for writing the color space, and the code for reading the
1854table or map, are incomplete.)  (gxclist.h, gxclpath.h, gxclimag.c,
1855gxclpath.c, gxclread.c)
1856
1857In preparation for implementing post-banding halftoning:
1858
1859	- Moves color rendering information, including alpha value, from
1860graphics state to imager state; also moves the allocator pointer.  This is
1861quite a subtle change, and may have a significant bug tail.  (gxdcolor.h,
1862gxht.h, gxistate.h, gzstate.h, gschar.c, gsdps1.c, gspaint.c, gsstate.c,
1863gxclread.c)
1864
1865	- Changes all the relevant color space and color mapping procedures
1866so they take a const gs_imager_state * (and, in some cases, a [const]
1867gx_device *) instead of a const gs_state *.  This is a
1868non-backward-compatible change, but it only affects internal interfaces.
1869(gsdcolor.h, gxcmap.h, gxcspace.h, gxdcconv.h, gxdcolor.h, gxdither.h,
1870gxpcolor.h, gzht.h, gschar.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c,
1871gscsepr.c, gsdevice.c, gsimage.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcconv.c,
1872gxdcolor.c, gxht.c, gximage.c, gximage[2345].c, gxpcmap.c)
1873
1874	- Changes the color and color space reference count adjustment
1875procedures similarly, to take a gs_memory_t * instead of a gs_state_t *.
1876(gxcspace.h, gscie.c, gscolor.c, gscolor2.c, gscsepr.c, gspcolor.c)
1877
1878	- Changes the gs_halftone in the graphics state from being part of
1879the gs_state_contents to being an independent reference-counted object.
1880This too may have a significant bug tail.  (gxht.h, gxistate.h, gsht.c,
1881gsstate.c)
1882
1883	- Changes the image processing code so it no longer assumes that the
1884gs_imager_state is actually a gs_state.  (gximage.h, gximage.c, gximage2.c,
1885gximage3.c, gximage4.c, gximage5.c)
1886
1887	- Adds a unique ID value to device halftones, so that it's possible
1888to detect (non-)changes quickly.  (gxdht.h, gsht.c)
1889
1890Finishes the code for writing and reading color rendering information in the
1891band list.  This involves changes to several band list opcodes.  (gsht.h,
1892gsht1.h, gxcldev.h, gxclist.h, gxclpath.h, gxdht.h, gzht.h, gsht.c, gsht1.c,
1893gxclbits.c, gxclimag.c, gxclist.c, gxclread.c)
1894
1895Changes the garbage collector pointer enumeration procedure interface
1896slightly to reduce the number of 'discarding const' warnings.  THIS IS A
1897NON-BACKWARD-COMPATIBLE CHANGE for anyone who didn't use the
1898ENUM_PTRS_BEGIN[_PROC] macro to start a pointer enumeration procedure (which
1899should be no one).  (gsstruct.h, gsmemory.c)
1900
1901Corrects a few more needlessly const-discarding casts.  (gxfcache.h,
1902gxccache.c)
1903
1904Checks for file reading errors when rasterizing bands.  (gxclread.c)
1905
1906</pre>
1907
1908<hr>
1909
1910<h2><a name="Version4.51"></a>Version 4.51 (limited) (2/9/97)</h2>
1911
1912<p>
1913This version contains a more reasonable high-level PCL XL driver.  The VMS
1914build script is working again, we think.
1915
1916<h3><a name="V4.51_Procedures"></a>Procedures</h3><pre>
1917
1918Fixes bugs:
1919	- The gsdll_h macro wasn't defined all the places it was needed.
1920(devs.mak, os2.mak)
1921
1922</pre><h3><a name="V4.51_Drivers"></a>Drivers</h3><pre>
1923
1924Continues to develop the "vector" driver infrastructure and the PCL XL
1925driver.  EVERYTHING IN THESE FILES IS SUBJECT TO CHANGE WITHOUT NOTICE.
1926(gdevvec.h, gdevvec.c)
1927
1928Brings the PCL XL driver up to usable quality for graphics.  Most
1929fill/stroke graphics, and portrait-orientation bitmap images up to 8 bits
1930per pixel, are converted directly to their PCL XL equivalents.  Text is
1931still treated as bitmaps.  Both gray-scale and color output are now
1932supported.  (devs.mak, gdevpx.c)
1933
1934</pre><h3><a name="V4.51_Platforms"></a>Platforms</h3><pre>
1935
1936Fixes bugs:
1937	- When using gsos2.exe with gsdll2.dll, reducing the size of the
1938page bitmap caused a limitcheck error with the message
1939    Failed to decommit memory in pm_alloc_bitmap, rc = 87  (gdevpm.c)
1940	- The scripts that construct gconfig_.h failed on Ultrix, because
1941Ultrix's implementation of sh -e is incorrect.  (unixtail.mak, ugcclib.mak)
1942	- Some systems that have sys/times.h don't define CLK_TCK, making a
1943compilation fail.  (time_.h)
1944
1945</pre><h3><a name="V4.51_Interpreter"></a>Interpreter</h3><pre>
1946
1947Fixes bugs:
1948	- An omitted semicolon wasn't detected by gcc.  (idict.c)
1949
1950Removes a source of unnecessary duplication by getting the revision number
1951and date from version.mak.  (gs.mak, int.mak, version.mak, gscdef.c)
1952
1953</pre><h3><a name="V4.51_Streams"></a>Streams</h3><pre>
1954
1955Fixes bugs:
1956	- The minimum buffer sizes for the RunLengthDecode filter hadn't
1957been changed to reflect the algorithm improvement made in release 4.38.
1958(srld.c)
1959
1960Changes the RunLengthEncode filter so it can make progress with only a
19612-byte output buffer.  (srlx.h, srle.c)
1962
1963</pre><h3><a name="V4.51_Library"></a>Library</h3><pre>
1964
1965Fixes bugs:
1966	- Because of a typo, the slow general algorithm was always used for
1967monochrome images.  (Performance bug only, but a serious one.)  (gximage2.c)
1968	- Dots (zero-length lines with round caps and zero dot length)
1969caused an infinite loop.  (bug introduced in 4.40)  (gxstroke.c)
1970	- Some image data unpacking procedures were always required, but
1971weren't always included.  (bug introduced in 4.50) (gximage.c, gximage0.c,
1972gximage3.c)
1973	- Images with 8 bits per pixel and non-identity Decode produced
1974garbage.  (bug introduced later than 4.03) (gximage0.c)
1975	- Some necessary casts and omitted punctuation weren't detected by
1976gcc.  (gxpath.h, gsargs.c, gsstate.c, gxclread.c, gxpdash.c)
1977	- The band list became confused if a band had no commands at all.
1978(gxclread.c)
1979	- If a path included a closepath followed by a moveto to the same
1980point, it could be written incorrectly in the band list.  (bug probably
1981introduced in 3.60) (gxclpath.c)
1982
1983Changes some internal computations for arcs from float to double for greater
1984accuracy.  (gspath1.c)
1985
1986</pre>
1987
1988<h2><a name="Version4.50"></a>Version 4.50 (limited) (1/31/97)</h2>
1989
1990<p>
1991This release contains an experimental high-level PCL XL driver, a little
1992more support for CID/CMap fonts, and the usual bug fixes.  NOTE: the VMS
1993build script is known to be out of sync with the makefiles again; we still
1994don't see any alternative to constant struggles with this problem.
1995
1996<h3><a name="V4.50_Documentation"></a>Documentation</h3><pre>
1997
1998Corrects the -h message, which gave an incorrect file name for the bug
1999report form.  (imainarg.c)
2000
2001Removes documentation for 16-bit MS-DOS platforms with the Borland compiler.
2002(fonts.txt, make.txt, new-user.txt, use.txt)
2003
2004</pre><h3><a name="V4.50_Procedures"></a>Procedures</h3><pre>
2005
2006Fixes bugs:
2007	- The Watcom library makefile didn't define the directory
2008information for libpng and zlib.  (watclib.mak)
2009
2010Moves the selection of band list implementation (file- vs. RAM-based) and
2011the compression filter for RAM-based band lists up to the top-level
2012makefiles.  Again, this is a NON-BACKWARD-COMPATIBLE procedure change.
2013(lib.mak, *.mak)
2014
2015Moves the selection of version number for all platforms (except VMS, as
2016usual) to a separate file.  This will reduce the number of files that need
2017editing when the version number changes.  (ansihead.mak, cc-head.mak,
2018gcc-head.mak, ugcclib.mak, version.mak, tar_cat)
2019
2020</pre><h3><a name="V4.50_Drivers"></a>Drivers</h3><pre>
2021
2022Fixes bugs:
2023	- An error in the (unsupported) SGI RGB driver could cause crashes
2024or incorrect output.  (gdevsgi.c)
2025
2026Starts to create a framework for structured output ("vector") drivers (PDF,
2027PostScript, PCL XL, etc.)  (gdevbbox.h, gdevvec.h, gsdcolor.h, gsstruct.h,
2028gxdevice.h, gdevvec.c)
2029
2030Moves default page size parameters to a more accessible header.  (gdevprn.h,
2031gxdevice.h, gdevx.c)
2032
2033Adds a driver that produces properly structured PCL XL output.  This is
2034highly experimental and not ready for use yet.  (gdevpx.c)
2035
2036</pre><h3><a name="V4.50_Platforms"></a>Platforms</h3><pre>
2037
2038Removes support for 16-bit MS-DOS platforms with the Borland compiler.  For
2039the moment, 16-bit MS Windows is still supported.  (bc.mak, bcflags.mak,
2040bclib.mak, tc.mak)
2041
2042</pre><h3><a name="V4.50_Interpreter"></a>Interpreter</h3><pre>
2043
2044Fixes bugs:
2045	- File-based CIDFonts (with delayed, incremental loading of
2046character outlines) didn't work.  (gs_cidfn.ps)
2047
2048Finishes implementing the definition of CMap resources, except for
2049rearranged fonts.  (gs_cidfn.ps, gs_cmap.ps)
2050
2051Adds a little more CMap support code.  (zcid.c)
2052
2053Removes the .setcurrentfile operator, since it doesn't solve the problem it
2054was intended to address.  (zcontrol.c)
2055
2056Adapts the interpreter to use the new argument processing code.
2057(imainarg.c)
2058
2059</pre><h3><a name="V4.50_Streams"></a>Streams</h3><pre>
2060
2061Fixes bugs:
2062	- The CCITTFaxDecode filter could access as much as 3 bytes beyond
2063the end of a buffer, causing an invalid memory access.  (This is essentially
2064the same bug that was fixed for the CCITTFaxEncode filter in 4.38.)
2065(scfd.c)
2066
2067</pre><h3><a name="V4.50_Library"></a>Library</h3><pre>
2068
2069Fixes bugs:
2070	- Painting an image without having set up any halftone could cause a
2071crash.  (gxht.c)
2072	- In a very obscure case, an occasional scan line of landscape
2073images could get corrupted.  (gximage0.c)
2074	- Because of a rounding error, patterns could fail to be painted in
2075certain cases.  (gxpcolor.h, gspcolor.c, gxpcmap.c)
2076	- Very large line widths or miter limits could cause the computation
2077of stroke expansion to overflow.  (gxpaint.h, gdevbbox.c, gxclpath.c,
2078gxstroke.c)
2079	- The phase could be incorrect for simple patterns.  (gspcolor.c)
2080	- The default implementation of copy_mono used an incorrect
2081RasterOp.  (gdevdflt.c)
2082	- The default implementation of fill_masked didn't increment the row
2083pointer, causing characters to appear as solid rectangular blocks.
2084(gxdcolor.c)
2085
2086Eliminates an unnecessary gsave and grestore from rectfill and rectstroke if
2087the path was null.  (gsdps1.c)
2088
2089Adds a limit on the amount of space that the default (C heap) allocator will
2090allocate, and a record of the maximum amount allocated, to help testing
2091embedded products.  (gsmemory.c)
2092
2093Changes the band list algorithm for deciding how many replicas of a halftone
2094tile to store in the tile cache.  The previous algorithm was too liberal,
2095which could cause the cache to overflow and many unnecessary bitmaps to be
2096written in the band list.  (gxclbits.c)
2097
2098Writes clipping with a rectangle more compactly in the band list.
2099(gxfixed.h, gxclpath.c)
2100
2101Adds new band list commands for representing 90- and 180-degree arcs
2102compactly.  (gxclpath.h, gxclpath.c, gxclread.c)
2103
2104Repackages handling of general monochrome images, color images, and 12-bit
2105and interpolated images, so that they are included optionally rather than in
2106all configurations.  (int.mak, lib.mak, gximage.h, gximage.c,
2107gximage[12345].c)
2108
2109Changes the structure definition for devices to include no-op pointer
2110enumeration and relocation, so they can have subclasses.  (gxdevice.h)
2111
2112Adds a library facility for processing command line arguments with
2113@-expansion.  (gsargs.h, gsargs.c)
2114
2115</pre>
2116
2117<hr>
2118
2119<h2><a name="Version4.41"></a>Version 4.41 (private) (1/21/97)</h2>
2120
2121<p>
2122This release adds a PCL XL output driver, and a few performance
2123improvements.
2124
2125<h3><a name="V4.41_Procedures"></a>Procedures</h3><pre>
2126
2127Fixes bugs:
2128	- The zlib library used an incorrect header file when compiling.
2129(zlib.mak)
2130
2131Changes the names of the preprocessor symbols indicating the presence of
2132system header files to be consistent with the ones used by GNU configure.
2133(dvx-tail.mak, ugcclib.mak, unixtail.mak, vms.mak; dirent_.h, time_.h;
2134gp_unix.c)
2135
2136Changes the method for choosing the compression filter for RAM-based band
2137lists.  This is a NON-BACKWARD-COMPATIBLE change in the makefile.  (lib.mak)
2138
2139</pre><h3><a name="V4.41_Drivers"></a>Drivers</h3><pre>
2140
2141Adds black-and-white and 8-bit gray PCL XL (PCL 6) drivers for the LaserJet
21425 and 6 family.  This driver is extremely simple and just emits bitmaps;
2143future drivers will use more PCL XL high-level constructs.  (gdevlj56.c)
2144
2145</pre><h3><a name="V4.41_Fonts"></a>Fonts</h3><pre>
2146
2147Updates the free font distribution to add the URW Grotesk and Antiqua fonts.
2148
2149</pre><h3><a name="V4.41_Interpreter"></a>Interpreter</h3><pre>
2150
2151Fixes bugs:
2152	- gs -h and -v returned with a non-zero exit code on all platforms.
2153(This is necessary under Windows, to keep the message visible on the screen,
2154but nowhere else.)  (imainarg.c)
2155	- Resizing a dictionary could exceed dict_max_size, causing memory
2156corruption.  (dstack.h, idict.h, idict.c, zdict.c)
2157
2158Adds .setlinecap and .setlinejoin that can use the extended range of line
2159cap/join values, and redefines setlinecap and setlinejoin in terms of them.
2160(gs_init.ps, zgstate.c)
2161
2162</pre><h3><a name="V4.41_Streams"></a>Streams</h3><pre>
2163
2164Fixes bugs:
2165	- The CCITTFaxDecode filter with EncodedByteAlign = true skipped to
2166a byte boundary before checking for an EOL.  This may be wrong if EndOfLine
2167= true; we aren't at all sure what should happen if EndOfLine = false.
2168(scfd.c)
2169
2170Adds a "no wrapper" option to the zlib streams, to optionally suppress the
2171time-consuming integrity checksum computation.  (szlibx.h, szlibc.c,
2172szlibd.c, szlibe.c)
2173
2174</pre><h3><a name="V4.41_Library"></a>Library</h3><pre>
2175
2176Fixes bugs:
2177	- Dashed lines with zero-length drawn segments (dots) that fell
2178exactly on a corner produced inappropriate output.  (pcl/test19.pxs)
2179(gxpdash.c, gxstroke.c)
2180	- Dashed lines didn't set the segment notes properly.  (gxpdash.c)
2181	- The bounding box device didn't free a bookkeeping structure at the
2182end of processing an image.  (gdevbbox.c)
2183	- Curve points could get computed incorrectly when using emulated
2184floating point.  (gxpcopy.c)
2185	- The 1-element cache for curve_x_at_y didn't work if Y was
2186decreasing.  (gxfixed.h, gxpcopy.c)
2187
2188Distinguishes between error and informational exits.  (stdpre.h)
2189
2190Defines and checks maximum values for line cap and join parameters.
2191(gslparam.h, gsline.c)
2192
2193Removes the 'not last' segment note, since it is not used for anything.
2194(gxpath.h, gspath1.c, gxpath2.c, gxpcopy.c, gxpflat.c, gxstroke.c)
2195
2196Changes the memory freeing algorithm for RAM-based band lists back to the
2197original one, since the "improved" one had more bugs than it was worth
2198chasing.  (gxclmem.c)
2199
2200Speeds up the A * B / C algorithm a little.  (gsmisc.c)
2201
2202Speeds up curve_x_at_y by recognizing more cases that don't require the slow
2203A * B / C algorithm.  (gxpcopy.c)
2204
2205Changes the path filling code so it uses fill-by-trapezoids even if
2206fill_adjust is zero, as long as the flatness is at least 1 pixel.
2207(gxfill.c)
2208
2209Removes the (unneeded) floating point operations from gx_curve_log2_samples.
2210(gxpflat.c)
2211
2212Changes the memory-based implementation of band lists so that it constructs
2213the compressor and decompressor by calling procedures rather than
2214instantiating templates: this allows setting filter parameters to
2215non-default values.  (gxclmem.h, gxcllzw.c, gxclmem.c, gxclzlib.c)
2216
2217</pre>
2218
2219<h2><a name="Version4.40"></a>Version 4.40 (private) (1/13/97)</h2>
2220
2221<p>
2222This version finally handles the last graphics model discrepancies between
2223PostScript and PCL, by correctly implementing null joins, minimum dot
2224lengths, and tangent-aligned curve ends.  It also contains some significant
2225performance improvements, and as usual a few bug fixes.
2226
2227<h3><a name="V4.40_Documentation"></a>Documentation</h3><pre>
2228
2229Documents the new accurate curves and path dashing operators.
2230(language.txt)
2231
2232</pre><h3><a name="V4.40_Utilities"></a>Utilities</h3><pre>
2233
2234Adds switches for genconf to set and unset a prefix for file names.
2235(genconf.c)
2236
2237</pre><h3><a name="V4.40_Drivers"></a>Drivers</h3><pre>
2238
2239Adds recognition of the new Distiller 3.0 parameters to the PDF writer.
2240(None of them have any effect yet.)  (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c,
2241gdevpdfp.c)
2242
2243Converts all the output functions in the PDF writer from being file-based to
2244using streams, in anticipation of adding compression.  (gdevpdfs.h,
2245gdevpdfx.h, gdevpdf*.c, gdevpdfs.c)
2246
2247</pre><h3><a name="V4.40_Interpreter"></a>Interpreter</h3><pre>
2248
2249Adds operators for accessing the new accurate curves flag in the graphics
2250state.  (zgstate.c)
2251
2252Adds an operator for invoking gs_dashpath.  (zpath1.c)
2253
2254</pre><h3><a name="V4.40_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
2255
2256Fixes bugs:
2257	- Indexed color spaces whose base space was a CIE space caused an
2258error.  (pdf_draw.ps)
2259
2260</pre><h3><a name="V4.40_Library"></a>Library</h3><pre>
2261
2262Fixes bugs:
2263	- A pointer was declared const incorrectly.  (gxcpath.c)
2264	- Filling with a pattern often failed to pass a non-null bitmap ID,
2265causing excessive writing in the band list.  (Performance bug only.)
2266(gspcolor.c)
2267	- The bounding box device didn't discount copy_mono or draw_line
2268operations drawing in white.  (gdevbbox.c)
2269	- The bounding box device didn't read out the bounding box correctly
2270as the PageBoundingBox device parameter.  (It did return it correctly
2271through the gx_device_bbox_bbox procedure.)  (gdevbbox.c)
2272	- The default implementation of fill_triangle drew nothing or
2273incorrect output if the corners of the triangle were specified in certain
2274orders (ax &lt; 0 or bx &lt; 0) (i.e., the previous "fix" had a bug).
2275(gdevddrw.c)
2276
2277Changes tile size from always being set in all bands to being 'known' by
2278bands individually.  (gxclist.h, gxcldev.h, gxclbits.c, gxclist.c)
2279
2280Computes an additional value in advance when rendering images.  (gximage.h,
2281gximage1.c, gximage2.c)
2282
2283Replaces some slow loops with calls of memmove.  (gxclmem.c)
2284
2285Provides a fixed-point implementation of A * B / C for machines with slow
2286floating point.  (gxfixed.h, gsmisc.c)
2287
2288Extends the "device color" type to implement filling masked regions as well
2289as rectangles.  (gxdcolor.h, gdevdflt.c, gspcolor.c, gxcht.c, gxdcolor.c,
2290gxht.c)
2291
2292Makes unclipped monobit portrait and landscape images and image masks use
2293the new masked fill capability of device colors.  (gximage.h, gximage.c,
2294gximage1.c, gximage2.c)
2295
2296Adds a macro for determining pointer alignment.  (stdpre.h, gdevdflt.c)
2297
2298When floating point is slow, uses a different, faster algorithm for
2299gx_curve_x_at_y.  (gxpcopy.c)
2300
2301Improves performance by adding a one-element cache for gx_curve_x_at_y.
2302(gzpath.h, gxpcopy.c)
2303
2304Reduces overhead when banded images are pre-rasterized (currently, always).
2305(gxclimag.c)
2306
2307Adds a rendering cost estimate field to each band in a band list.  This
2308field isn't actually used for anything yet; eventually, the intent is that
2309bands with a high cost will get rendered, and stored in compressed form,
2310before starting the engine.  (gxclist.h)
2311
2312Adds the concept of 'notes' for path segments, to allow remember what
2313segments constitute a single curve or arc.  Currently we set these properly
2314for everything except dashed paths.  (gxclpath.h, gxpath.h, gzpath.h,
2315gspath1.c, gxclpath.c, gxclread.c, gxpath.c, gxpath2.c, gxpcopy.c)
2316
2317When the dot length is non-zero, changes curve stroking to always use bevel
2318joins within each curve rather than the current join.  This prevents a
2319"bristly" look with no join and butt caps.  (gxstroke.c)
2320
2321Adds an "accurate curves" capability that makes the last line segment of a
2322flattened curve actually be tangent to the curve, which in turn makes
2323flat-end caps be correctly perpendicular to the tangent.  (gxpath.h,
2324gxpcopy.c)
2325
2326Adds an "accurate curves" flag in the graphics state.  (gsline.h,
2327gxclpath.h, gxistate.h, gsline.c, gspath.c, gspath1.c, gxclpath.c,
2328gxclread.c, gxfill.c, gxstroke.c)
2329
2330Changes the meaning of "no join" (gs_join_none) so that instead of producing
2331no join and butt caps, it produces whatever the current cap is.  This is
2332compatible with the H-P definition.  (gxstroke.c)
2333
2334Implements non-zero dot length for dash patterns.  (gxpdash.c)
2335
2336Splits off the curve flattening algorithms into a separate file.
2337(gxpcopy.c, gxpflat.c)
2338
2339</pre>
2340
2341<hr>
2342
2343<h2><a name="Version4.39"></a>Version 4.39 (limited) (1/1/97)</h2>
2344
2345<p>
2346This version was created only to accompany a release of the PCL XL
2347interpreter.  It was withdrawn the day after it was released, because the
2348tools used to produce it put the wrong files in the filesets.
2349
2350<h3><a name="V4.39_Documentation"></a>Documentation</h3><pre>
2351
2352Adds a more detailed description of the third-party ps_view viewer
2353interface.  (new-user.txt)
2354
2355Corrects an error in a reference to the PSLRM.  (lib.txt)
2356
2357Documents the change in .makeoperator.  (language.txt)
2358
2359Updates the FTP location of the zlib sources.  (zlib.mak)
2360
2361</pre><h3><a name="V4.39_Procedures"></a>Procedures</h3><pre>
2362
2363Fixes bugs:
2364	- The Unix library makefile didn't include the necessary definitions
2365for libpng and zlib.  (ugcclib.mak)
2366
2367Allows selecting the compression filters for memory-based band lists in the
2368makefile.  Makes zlib (deflate) the default compressor for memory-based band
2369lists.  (lib.mak)
2370
2371</pre><h3><a name="V4.39_Utilities"></a>Utilities</h3><pre>
2372
2373Fixes bugs:
2374	- prfont.ps wouldn't print unencoded characters in Type 42 fonts.
2375(prfont.ps)
2376
2377</pre><h3><a name="V4.39_Drivers"></a>Drivers</h3><pre>
2378
2379Fixes bugs:
2380	- The H-P monochrome driver didn't put out enough initialization
2381commands at the beginning of each page to make each page printable
2382independently.  (gdevdjet.c)
2383
2384</pre><h3><a name="V4.39_Interpreter"></a>Interpreter</h3><pre>
2385
2386Changes ref_stack_count_inline so it never does a procedure call.
2387(istack.h)
2388
2389Changes .makeoperator so that operator procedures save the stack depths, and
2390restore the stack pointers (if possible) if the operator encounters an
2391error.  This is a NON-BACKWARD-COMPATIBLE CHANGE; it requires rewriting the
2392'stop' and 'stopped' pseudo-operators (and, if there were any, any other
2393pseudo-operators that interact with the error handling machinery) in C.
2394(gs_init.ps, interp.c, zcontrol.c)
2395
2396Adds recognition of the LeadingEdge, MediaClass, and RollFedMedia keys in a
2397page device dictionary, per the Adobe supplement for their version 2017
2398interpreter.  This involves a NON-BACKWARD-COMPATIBLE change to the
2399(undocumented) .matchpagesize operator.  (gs_setpd.ps, zmedia2.c)
2400
2401Makes necessary changes for compatibility with the added parameters for the
2402zlib filters.  (zfzlib.c)
2403
2404</pre><h3><a name="V4.39_Streams"></a>Streams</h3><pre>
2405
2406Fixes bugs:
2407	- The zlib encoder returned EOFC when it should have returned 0.
2408(szlibe.c)
2409
2410Adds optional parameters and reset procedures for the zlib filters.
2411(szlibx.h, szlibc.c, szlibd.c, szlibe.c)
2412
2413</pre><h3><a name="V4.39_Library"></a>Library</h3><pre>
2414
2415Fixes bugs:
2416	- Displaying characters with a non-standard RasterOp could cause an
2417invalid memory access.  (gdevdflt.c)
2418	- Banding sometimes used an incorrect RasterOp.  (gxclread.c)
2419	- When banding, mixing Patterns and halftones could confuse the
2420bookkeeping of tile size, leading to incorrect generation of the band list
2421and error messages or confusion when rasterizing.  (gxclist.h, gxclbits.c,
2422gxclread.c)
2423	- If only the dash pattern offset changed, and not any of the other
2424dash-related parameters, the new offset wasn't written in the band list,
2425causing incorrect output.  (gxclpath.c)
2426	- Oversized halftone tiles didn't report their error code properly.
2427(gxclbits.c)
2428	- Oversized halftone tiles with RasterOp caused an error.
2429(gxclist.c)
2430	- When banding, RasterOp transfers that crossed a band boundary
2431didn't access the correct source data on bands other than the first.
2432(gxclist.c)
2433	- There were redundant copies of the code for writing a RasterOp
2434value in the band list.  (gxclimag.c, gxclpath.c)
2435	- Oversized patterns or halftones produced garbled output.
2436(gxclbits.c)
2437	- The check for oversized patterns or halftones was slightly
2438incorrect, leading to the possibility of writing out a tile that would
2439overflow the reading buffer and corrupt memory.  (gxclbits.c)
2440	- When banding, RasterOp wasn't applied to fill and stroke
2441operations, and wasn't applied correctly to characters.  (gdevdflt.c,
2442gxclimag.c, gxclread.c)
2443	- The RasterOp-related optimizations for black-and-white images
2444sometimes produced incorrect output.  (gximage.c, gximage2.c)
2445	- The default implementation of fill_triangle didn't draw anything
2446if the corners of the triangle were specified in certain orders (ax &lt; 0 or
2447bx &lt; 0).  (gdevddrw.c)
2448	- Painting with a Pattern could pass out-of-range phase values to
2449driver procedures.  (gspcolor.c)
2450	- Because of an off-by-1 error, halftones or patterns passed through
2451the band list could write past the end of their allocated space in the band
2452tile cache, leading to incorrect output or possible arithmetic exceptions or
2453memory access errors.  (gsbitops.c)
2454
2455Adds -Z: for printing only the minimal command list statistics.  (gxclist.c,
2456gxclread.c)
2457
2458Expands band list tracing so it includes all of the data associated with the
2459command, not just the command name and a few command parameters.
2460(gxclread.c)
2461
2462Adds free lists for strings.  Currently these are only used in
2463non-garbage-collected environments.  (gxalloc.h, gsalloc.c, gsnogc.c)
2464
2465Adds a procedure for copying a path structure, and an (internal) accessor
2466for the current path in the graphics state.  (gxpath.h, gspath.c, gxpath.c)
2467
2468Speeds up filling characters with halftones a little bit.  (gdevdflt.c)
2469
2470Changes the memory-based implementation of band lists so it can use any
2471compression / decompression filter, so it only compresses when it has
2472allocated a specified amount of buffer storage, and so it releases its
2473buffer storage at the end of each page.  (gxclmem.h, gxclmem.c)
2474
2475Speeds up counting the number of 1-bits in a byte, which is used in some
2476image processing algorithms.  (gsbittab.h, gsbittab.c)
2477
2478Reduces the band list space required for changing tile size.  (gxcldev.h,
2479gxclbits.c, gxclread.c)
2480
2481</pre>
2482
2483<h2><a name="Version4.38"></a>Version 4.38 (limited) (12/20/96)</h2>
2484
2485<p>
2486Adds support for a couple of undocumented features in Type 1 fonts.
2487
2488<h3><a name="V4.38_Interpreter"></a>Interpreter</h3><pre>
2489
2490Adds handling of the Type 1 font subroutineNumberBias (an optional entry in
2491the Private dictionary) and lenIV = -1 features at the interpreter level.
2492(zchar1.c, zfont1.c)
2493
2494</pre><h3><a name="V4.38_Streams"></a>Streams</h3><pre>
2495
2496Fixes bugs:
2497	- The CCITTFaxEncode filter could access as much as 3 bytes beyond
2498the end of a buffer, causing an invalid memory access.  (scfe.c)
2499
2500Changes the RunLengthDecode filter so it can make progress (produce output)
2501with only a 1-byte output buffer.  (srlx.h, srld.c)
2502
2503</pre><h3><a name="V4.38_Library"></a>Library</h3><pre>
2504
2505Fixes bugs:
2506	- The sine and cosine of multiples of 90 degrees weren't exact.
2507(gxfarith.h, gsmisc.c)
2508	- The expanded bounding box computation for strokes didn't take into
2509account the possibility of overflow.  (gxstroke.c)
2510	- The allocator didn't fill freed strings with the 'free' mark.
2511(gsalloc.c)
2512	- When using a pattern with RasterOp, the phase was computed
2513incorrectly, leading to anomalous filling patterns.  (gspcolor.c)
2514	- Patterns with a non-zero translation in the matrix passed to
2515makepattern didn't translate the pattern origin properly.  (gxcolor2.h,
2516gxpcolor.h, gspcolor.c)
2517
2518Adds a subroutineNumberBias field to Type 1 fonts.  This is an undocumented
2519feature of the Type 1 font format.  (gxfont1.h, gstype1.c)
2520
2521Interprets lenIV = -1 in Type 1 fonts as meaning that the CharStrings are
2522unencrypted.  This too is an undocumented feature of the Type 1 format.
2523(gxfont1.h, gxtype1.h, gstype1.c, gstype2.c)
2524
2525Changes gs_clippath so it returns more reasonable outlines.  (There are too
2526many programs that rely on being able to stroke the result of clippath, even
2527though both the Adobe and H-P literature specifically say the results are
2528unpredictable.)  (gxcpath.h, gxcpath.c)
2529
2530</pre>
2531
2532<h2><a name="Version4.37"></a>Version 4.37 (limited) (12/10/96)</h2>
2533
2534<p>
2535This version implements separate halftone phase for source and texture,
2536required for PCL XL implementation.
2537
2538<h3><a name="V4.37_Fonts"></a>Fonts</h3><pre>
2539
2540Fixes bugs:
2541	- Loading a native TrueType font without a 'post' table caused an
2542error.  (gs_ttf.ps)
2543
2544</pre><h3><a name="V4.37_Interpreter"></a>Interpreter</h3><pre>
2545
2546Extends the interpreter to handle the new separate halftone phases for the
2547RasterOp source and texture.  (gs_dps1.ps, zdps1.c)
2548
2549Makes a small change to accommodate a library change supporting Type 2
2550charstrings.  (zfont1.c)
2551
2552</pre><h3><a name="V4.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
2553
2554Implements the FontFile2 key for embedded TrueType fonts.  (pdf_font.ps)
2555
2556Starts to implement the FontFile3 key for compressed Type 1 fonts.  This
2557code is currently disabled, because none of the necessary underlying C is
2558written yet.  (pdf_font.ps)
2559
2560</pre><h3><a name="V4.37_Library"></a>Library</h3><pre>
2561
2562Fixes bugs:
2563	- The floating point emulator often returned incorrect results (too
2564many bugs to list).  (This is not used in any standard configuration.)
2565(gsfemu.c)
2566	- The new copy_for procedure for gstates incorrectly declared an
2567argument as const.  (gxstate.h, gsstate.c)
2568	- If a curve had to be split twice along the same axis to make it
2569monotonic, the split points could still be returned in the wrong order,
2570possibly causing curved edges to turn into straight lines, and the algorithm
2571still produced the wrong results if the curve had to be split twice along a
2572single axis.  This is the second time we have "fixed" these problems and the
25734th time we have "fixed" the curve monotonizing algorithm.  (gxpcopy.c)
2574	- Setting halftones cause a memory leak, because the subsidiary
2575objects of the device halftone weren't freed properly.  Fixing this required
2576changing the graphics state implementation from allocating a device halftone
2577for each gstate to managing the device halftone with reference counting.
2578(gxdht.h, gzstate.h, gsht.c, gsstate.c)
2579
2580Provides an optimized version of ldexp for FPU-less configurations, and
2581changes one key algorithm to use it.  (gxfixed.h, gsmisc.c, gxpcopy.c)
2582
2583Speeds up imagemask with a halftone a little.  (This will eventually require
2584more serious optimization.)  (gximage2.c)
2585
2586Adds a -Z* switch for tracing varieties of image rendering.  (gximage.c)
2587
2588Recognizes that if the logical operation is equivalent to D = S (after
2589accounting for a constant texture, if any), or if it is equivalent to D = ~S
2590or D = D {&amp;,|}{S,~S} and D and S are both monobit and both colors are pure,
2591imaging with RasterOp can be executed without invoking RasterOp.  (gsropt.h,
2592gximage.c)
2593
2594Makes coordinate transformations with landscape matrices execute as fast as
2595with portrait matrices.  (gxmatrix.h, gscoord.c, gsmatrix.c)
2596
2597Adds some sketch code for interpreting Type 2 charstrings.  It compiles, but
2598it makes no pretense of being runnable.  (gstype1.h, gxop1.h, gxtype1.h,
2599gstype2.h, gxfont1.h, gstype1.c, gstype2.c)
2600
2601Extends the library to allow setting separate halftone phases for the
2602RasterOp source and texture, which is needed to implement halftone screens
2603that behave like those in H-P's PCL XL printers.  (gscsel.h, gsstate.h,
2604gxcmap.h, gxcspace.h, gxdcolor.h, gxdither.h, gxpcolor.h, gzht.h, gzstate.h,
2605gscie.c, gscsepr.c, gsht.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcolor.c,
2606gxht.c, gximage.c, gximage[2345].c, gspcmap.c) ****** STILL NEED TO UPDATE
2607BANDING CODE, grep FOR phase ******
2608
2609Removes the rc_header member from the gs_halftone structure, since we don't
2610need it after all.  (gxht.h)
2611
2612</pre>
2613
2614<h2><a name="Version4.36"></a>Version 4.36 (limited) (12/3/96)</h2>
2615
2616<p>
2617This version fixes a number of library bugs related to RasterOp, Patterns,
2618and memory management.
2619
2620<h3><a name="V4.36_Documentation"></a>Documentation</h3><pre>
2621
2622Changes the definition of texture transparency to match the peculiar H-P
2623specification.  (drivers.txt, language.txt)
2624
2625</pre><h3><a name="V4.36_Drivers"></a>Drivers</h3><pre>
2626
2627Fixes bugs:
2628	- x_get_bits didn't flush updates to the frame buffer, leading to
2629possibly incorrect data being returned.  (gdevx.c)
2630	- x_get_bits added padding to the scan line being copied, possibly
2631corrupting memory.  (gdevx.c)
2632
2633Changes the x11mono driver to define white = 0, black = 1 to more closely
2634model black-and-white printers.  (This is an internal change that doesn't
2635affect the output.)  (gdevxalt.c)
2636
2637</pre><h3><a name="V4.36_Interpreter"></a>Interpreter</h3><pre>
2638
2639Removes some code that is no longer needed, by virtue of the fix for the
2640memory leak in Pattern remapping.  (zpcolor.c)
2641
2642</pre><h3><a name="V4.36_Library"></a>Library</h3><pre>
2643
2644Fixes bugs:
2645	- Patterns wider than 1024 bits caused a rangecheck.  (gxclip2.h,
2646gxclip2.c)
2647	- Dash patterns never got freed.  The fix for this slows down gsave
2648and grestore slightly, but we don't see any way around it.  (gsline.c,
2649gsstate.c)
2650	- If the CTM was very non-uniform in X and Y, stroke sometimes
2651didn't recognize thin lines as being thin, leading to dropouts.
2652(gxstroke.c)
2653	- RasterOps that didn't use S or T still took S or T transparency
2654into account.  (gdevmrop.c)
2655	- RasterOps with no source didn't handle the possibility that the
2656device color for black might have a value other than 0.  (gxdcolor.h,
2657gspcolor.c, gxcht.c, gxdcolor.c, gxht.c)
2658	- White pixels in halftones on black-and-white devices apparently
2659are *not* supposed to be treated as opaque for RasterOp.  (gxcht.c, gxht.c)
2660	- clippath caused memory to be lost until a restore or a garbage
2661collection.  (gspath.c)
2662	- Clipping lists weren't ever freed, and clipping paths sometimes
2663weren't freed, causing memory to be lost until a restore or a garbage
2664collection.  (gzacpath.h, gxacpath.c, gxcpath.c)
2665	- Freeing a pattern instance referenced a pointer after it had been
2666freed, causing an invalid memory access.  (gspcolor.c)
2667	- Remapping a Pattern color lost track of the temporary gstate,
2668memory devices, and possibly the mask, causing memory to be lost until a
2669restore or GC.  (gxpcolor.h, gxpcmap.c)
2670	- Remapping a Pattern color could cause paths to be marked as
2671shared, preventing them from being freed until a restore or GC.  (gxpcmap.c)
2672
2673Enhances the non-tracing garbage collector so that if there are no strings
2674allocated at all, it resets the string allocation pointers.  (gsnogc.c)
2675
2676Optimizes the black-and-white RasterOp implementation by recognizing cases
2677that can be implemented directly by fill_rectangle, copy_mono, or
2678tile_rectangle.  (gdevmrop.h, gsropt.h, gdevmrop.c, gsroptab.c)
2679
2680Changes -ZA so it no longer produces [P] tracing messages for path
2681construction.  (gxpath.c)
2682
2683Adds a gx_pattern_cache_winnow procedure for selectively removing entries
2684from the Pattern cache, similar to gx_purge_selected_cached_chars.
2685(gscolor2.h, gxpcolor.h, gxpcmap.c)
2686
2687Adds the Pattern UID to Pattern cache entries.  (gxpcolor.h, gxpcmap.c)
2688****** MUST HANDLE XUID POINTERS ON GC (RELOC) &amp; RESTORE (CLEAR LIKE HT
2689CACHE) ******
2690
2691Makes gs_gstate free the path representation of the clipping path if it's a
2692rectangle, since reconstructing it is cheap and otherwise the path segments
2693would not be freeable until a restore or GC.  (gsstate.c)
2694
2695Extends the "client data" interface for gstates so that the copy procedure
2696can determine why it is being called.  (gxstate.h, gsstate.c)
2697
2698</pre>
2699
2700<h2><a name="Version4.35"></a>Version 4.35 (limited) (11/24/96)</h2>
2701
2702<p>
2703This contains the usual bug fixes, and two minor enhancements: an option for
2704handling EPSF files with binary headers, and support for file-based
2705resources.
2706
2707<h3><a name="V4.35_Documentation"></a>Documentation</h3><pre>
2708
2709Documents the new EPSF-reading capability.  (gs.mak)
2710
2711</pre><h3><a name="V4.35_Procedures"></a>Procedures</h3><pre>
2712
2713Fixes bugs:
2714	- Some obsolete definitions were accidentally left in the rules for
2715compiling fonts into the executable.  (int.mak)
2716
2717</pre><h3><a name="V4.35_Interpreter"></a>Interpreter</h3><pre>
2718
2719Fixes bugs:
2720	- initgraphics left the current color space in an inconsistent
2721state.  (bug introduced in 4.32) (zgstate.c)
2722	- restore didn't properly rebind FontDirectory to either Local or
2723SharedFontDirectory according to the current VM selection.  (gs_dps1.ps)
2724	- If FontDirectory was redefined, many things broke.  (gs_ccfnt.ps,
2725gs_dps1.ps, gs_fonts.ps, gs_pdfwr.ps)
2726	- If a resource provided a file name but the file couldn't be
2727opened, an error occurred.  (gs_res.ps)
2728	- flushfile didn't work with procedure-based streams.  (zfileio.c)
2729
2730Adds a feature (epsf.dev) that allows the interpreter to recognize and
2731handle MS-DOS EPSF files with a binary header.  (int.mak, gs_epsf.ps,
2732gs_init.ps, pdf_main.ps)
2733
2734Adds (internal) .getuserparam and .getsystemparam operators for getting the
2735value of a single user or system parameter.  (gs_lev2.ps, zusparam.c)
2736
2737To support file-based resources, implements the FontResourceDir,
2738GenericResourceDir, and GenericResourcePathSep system parameters, and
2739ResourceFileName for the built-in resource categories.  (gs_init.ps,
2740gs_lev2.ps, gs_res.ps)
2741
2742</pre><h3><a name="V4.35_Streams"></a>Streams</h3><pre>
2743
2744Fixes bugs:
2745	- The 2-D CCITTFaxDecode filter became confused if a buffer boundary
2746fell between a horizontal make-up code and its terminating code, typically
2747causing an ioerror.  (scfd.c)
2748
2749</pre><h3><a name="V4.35_Library"></a>Library</h3><pre>
2750
2751Fixes bugs:
2752	- Using the null color could confuse the reference counts for color
2753spaces, causing memory access errors.  (gscolor.c)
2754	- Images with CombineWithColor = true caused memory access error,
2755because a structure element wasn't initialized.  (gdevmrop.c)
2756	- gs_setnullcolor tried to return an error code, even though it was
2757declared as returning void.  (Why doesn't gcc catch this??)  (gscolor.h,
2758gscolor.c)
2759	- gs_setnullcolor was declared inconsistently as taking a const or
2760non-const argument.  (gscolor.h)
2761	- Small color tiles in the band list were not read in correctly.
2762(gxclread.c)
2763	- The band list could get confused, causing ioerrors, invalid memory
2764accesses, or garbled output, because the algorithms for computing the size
2765of bitmaps when writing and when reading had gotten inconsistent.  This code
2766has been broken and "fixed" at least 4 or 5 times.  (gxcldev.h, gxclbits.c,
2767gxclread.c)
2768	- When using banding, characters that extended off the page
2769vertically in the -Y direction came out garbled.  (gxclimag.c)
2770	- The bounding box device didn't compute the box correctly for
2771trapezoids.  (gdevbbox.c)
2772	- The fastest case of rendering monochrome images could cause
2773unaligned data accesses.  (bug introduced recently.)  (gximage.h,
2774gximage1.c)
2775	- TrueType characters with no contours could cause an invalid memory
2776access.  (gstype42.c)
2777	- Composite TrueType characters weren't rendered properly.
2778(gstype42.c)
2779
2780Adds a get_outline procedure to the Type 42 font header, to provide a
2781callback for getting the outline data for a glyph.  (gxfont42.h, gstype42.c)
2782
2783</pre>
2784
2785<h2><a name="Version4.34"></a>Version 4.34 (limited) (11/18/96)</h2>
2786
2787<p>
2788This release adds a little more support for CID-keyed fonts and for PCL
2789emulation, and a bit more of the machinery for passing images through the
2790band list.
2791
2792<h3><a name="V4.34_Documentation"></a>Documentation</h3><pre>
2793
2794Fixes bugs:
2795	- The RasterOp source device wasn't listed as an internal device in
2796drivers.txt.  (drivers.txt)
2797
2798Corrects a statement regarding the pstotext license.  (new-user.txt)
2799
2800</pre><h3><a name="V4.34_Procedures"></a>Procedures</h3><pre>
2801
2802Fixes bugs:
2803	- The Watcom makefile for the library didn't work properly if
2804certain variables were overridden from the command line.  (watclib.mak)
2805	- The library code inadvertently depended on an interpreter header
2806file.  (*.mak)
2807
2808</pre><h3><a name="V4.34_Drivers"></a>Drivers</h3><pre>
2809
2810Fixes bugs:
2811	- Some very picky compilers complained about assigning 0 to a
2812variable of an enum type.  (gdevpdfx.h, gdevpdf.c)
2813
2814</pre><h3><a name="V4.34_Interpreter"></a>Interpreter</h3><pre>
2815
2816Fixes bugs:
2817	- Some very picky compilers didn't like a cast from a pointer type
2818to an int type.  (idebug.c)
2819	- Some very picky (and non-ANSI-compliant) compilers didn't allow
2820assigning an int to a variable of enumerated type.  (zfont2.c, zht2.c)
2821	- The library code inadvertently depended on an interpreter header
2822file.  (iref.h)
2823
2824Restructures the font building code slightly to support CID fonts better.
2825(gs_cidfn.ps, bfont.h, zcid.c, zfont0.c, zfont1.c, zfont2.c, zfont42.c)
2826
2827Adds a .setcurrentfile operator to allow disk-based fonts to keep their file
2828open.  (gs_cidfn.ps, zcontrol.c)
2829
2830</pre><h3><a name="V4.34_Streams"></a>Streams</h3><pre>
2831
2832Fixes bugs:
2833	- Some very picky compilers didn't like the computation (const byte
2834*)0 - 1.  (stream.c)
2835	- A cast to ulong was omitted.  (smtf.c)
2836	- Some compilers got confused by typedefs in the zlib header files.
2837(szlibd.c, szlibe.c)
2838
2839</pre><h3><a name="V4.34_Library"></a>Library</h3><pre>
2840
2841Fixes bugs:
2842	- A header file didn't select the proper system header on all POSIX
2843systems.  (malloc_.h)
2844	- A subclass/superclass type discrepancy upset some compilers.
2845(gsline.h, gsline.c, gxpdash.c)
2846	- Some very picky compilers didn't accept the previous definition of
2847the offset_of macro.  (stdpre.h)
2848	- Some very picky (and non-ANSI-compliant) compilers didn't like
2849mixing int and enumerated types.  (gsropt.h, gzstate.h, gdevmrop.c,
2850gdevrrgb.c, gsrop.c, gxclist.c)
2851	- A cast was missing.  (gslib.c)
2852	- The gs_setxxxtransparent procedures interpreted their argument
2853backwards (i.e., as "opaque" rather than "transparent").  (gsrop.c)
2854	- Intersecting clipping paths didn't reset the logical operation to
2855the default, causing a possible crash.  (gsrop.h, gsrop.c, gxacpath.c)
2856	- Pattern accumulation didn't reset the logical operation to the
2857default, possibly causing incorrect output.  (gspcolor.c)
2858	- If a Type 1 character ended with a curve and a closepath, a
2859microscopic line could result, causing output anomalies.  (gstype1.c)
2860	- Stroking a path with a mix of thin and non-thin lines could cause
2861extraneous lines to appear.  (gxstroke.c)
2862	- Zero-width rectangles were painted even when fill adjustment was
2863turned off.  (gxpaint.c, gxstroke.c)
2864	- The algorithm for dividing a curve into monotonic pieces could
2865produce incorrect results, causing anomalies when filling curved regions
2866with zero fill adjustment.  (gxpcopy.c)
2867	- The algorithms for outside clipping were wrong, causing some
2868inside regions not to be clipped.  (gxcpath.c)
2869	- The white pixels in halftones weren't treated as unconditionally
2870opaque for RasterOp.  (gxht.c, gxcht.c)
2871	- Images with RasterOp didn't work properly.  (gdevmrop.c,
2872gximage[2345].c, gxpcmap.c)
2873	- The library code inadvertently depended on an interpreter header
2874file.  (gxalloc.h, genarch.c)
2875	- An important optimization for stroking (recognizing portrait,
2876landscape, and unscaled CTMs) was commented out.  WE DON'T HAVE ANY RECORD
2877OF WHY WE DID THIS, AND RESTORING IT MAY INTRODUCE NEW BUGS.  (gxstroke.c)
2878	- Bitmap images with non-zero data_x values were passed through the
2879band list incorrectly, possibly causing vertical "streaks" in the output.
2880(gxcldev.h, gxclread.c)
2881	- If a curve had to be split twice along the same axis to make it
2882monotonic, the split points were returned in the wrong order, possibly
2883causing curved edges to turn into straight lines.  (gxpcopy.c)
2884
2885Changes the debugging printout format for paths so the output can be
2886processed mechanically more easily.  (gxpath.c)
2887
2888Adds gs_glyphpath, like charpath but taking a glyph rather than a string of
2889character codes.  (gschar.h, gschar.c)
2890
2891Adds an internal concept of a "null color", a color that doesn't actually
2892mark any pixels.  (gscolor.h, gsdcolor.h, gxdcolor.h, gscolor.c, gxdcolor.c)
2893
2894Takes the next incremental steps towards passing images through the band
2895list:
2896	- Implements the ability to pass some color mapping information
2897(transfer functions, black generation, undercolor removal) through the band
2898list.  (gxclist.h, gxclimag.c, gxclist.c, gxclread.c)
2899
2900</pre>
2901
2902<h2><a name="Version4.33"></a>Version 4.33 (limited) (11/6/96)</h2>
2903
2904<p>
2905This release fixes yet another obscure bug in the recently rewritten fast
2906loops for image rendering.  (These loops have caused more problems than any
2907other single module of the entire library.)  It also adds preliminary
2908support for CID-keyed fonts (CIDFonts only, not CMaps yet) and some library
2909extensions for supporting HP-GL/2.
2910
2911<h3><a name="V4.33_Documentation"></a>Documentation</h3><pre>
2912
2913Adds considerable new material to the C style document.  (c-style.txt)
2914
2915Changes -cckr to -ansi in the SGI build procedure.  (make.txt)
2916
2917Corrects an error in the description of the .type42execchar operator.
2918(gs_typ42.ps)
2919
2920</pre><h3><a name="V4.33_Procedures"></a>Procedures</h3><pre>
2921
2922Fixes bugs:
2923	- The 'man' pages were installed in the documentation directory as
2924well as in the man directory.  (unix-end.mak)
2925
2926</pre><h3><a name="V4.33_Interpreter"></a>Interpreter</h3><pre>
2927
2928Adds support for CID-keyed fonts.  There is no CMap support yet, and some
2929things are done with hacks.  (int.mak, gs_cidfn.ps, gs_cmap.ps, ichar.h,
2930zchar.c, zchar2.c, zchar42.c, zfont2.c, zfont42.c, zcid.c)
2931
2932Adds operators for accessing the new dash adaptation and dot length
2933parameters in the graphics state.  (gs_init.ps, zgstate.c)
2934
2935</pre><h3><a name="V4.33_Library"></a>Library</h3><pre>
2936
2937Fixes bugs:
2938	- The fast case of monobit image rendering could overwrite memory.
2939(gximage1.c)
2940	- The new fast implementation of rectfill didn't check for
2941fixed-point overflow.  (gsdps1.c)
2942	- Internally, fonts with no name all appeared to have the same name,
2943possibly confusing the xfont machinery.  (gxccman.c)
2944	- A cast to remove const was omitted, upsetting some compilers.
2945(gximage1.c)
2946	- The driver's stroke_path routine was not called if the logical
2947operation was not the default one.  (gxpaint.c)
2948
2949Adds support for CID-keyed fonts.  (gsccode.h, gxfont.h)
2950
2951Adds a new "dash pattern adaptation" flag in the imager state.  When this
2952flag is set and a dash pattern is in effect, each line segment will receive
2953an integral number of repetitions of the dash pattern (if necessary, rounded
2954up).  (gsline.h, gxline.h, gsline.c, gsstate.c, gxpdash.c)
2955
2956Adds a new "dot length" parameter to the imager state.  If this parameter is
2957non-zero, it gives a length for rendering dots (zero-length lines).  See
2958language.txt for details.  (gsline.h, gxline.h, gsline.c, gsstate.c,
2959gxstroke.c)
2960
2961Extends band lists so they can handle dash pattern adaptation and dot
2962length.  (gxcldev.h, gxclpath.h, gxclpath.c, gxclread.c)
2963
2964Adds a floating point emulator to allow more realistic profiling of
2965configurations without a FPU.  (gsfemu.c)
2966
2967</pre>
2968
2969<h2><a name="Version4.32"></a>Version 4.32 (limited) (11/1/96)</h2>
2970
2971<p>
2972This fixes a couple more bugs, most notably the infamous "pixel stripe" bug.
2973
2974<h3><a name="V4.32_Documentation"></a>Documentation</h3><pre>
2975
2976Fixes bugs:
2977	- The documentation said that Ghostscript could not interpret
2978encrypted PDF files.  (language.txt)
2979	- A number of Ghostscript's extensions to the PostScript language
2980were missing.  (language.txt)
2981
2982</pre><h3><a name="V4.32_Drivers"></a>Drivers</h3><pre>
2983
2984Fixes bugs:
2985	- A compiler complained about initializing an unsigned variable with
2986a negative value.  (gdevx.c)
2987	- An off-by-1 allocation error could cause memory overwriting.
2988(gdevepsc.c)
2989
2990</pre><h3><a name="V4.32_Platforms"></a>Platforms</h3><pre>
2991
2992Declares a pointer 'const' that is actually only used for reading.
2993(gp_unifs.c)
2994
2995</pre><h3><a name="V4.32_Fonts"></a>Fonts</h3><pre>
2996
2997Fixes bugs:
2998	- The code for adding nominal UnderlinePosition and
2999UnderlineThickness entries to FontInfo assumed (incorrectly) that all Type 1
3000fonts had FontBBox entries.  (gs_type1.ps)
3001
3002Brings CIDFont support closer to reality.  It doesn't work yet, though.
3003(gs_cidfn.ps, gs_fonts.ps, gs_init.ps, gs_res.ps, gs_typ42.ps)
3004
3005</pre><h3><a name="V4.32_Interpreter"></a>Interpreter</h3><pre>
3006
3007Removes a redundant implementation of initgraphics.  (gs_init.ps)
3008
3009Speeds up rectfill a little for the common case (4 numbers on the stack).
3010(zdps1.c)
3011
3012</pre><h3><a name="V4.32_Library"></a>Library</h3><pre>
3013
3014Fixes bugs:
3015	- Zero-width, 1-bit-deep, landscape or portrait images could
3016overwrite memory ad lib.  (gximage1.c)
3017	- A procedure was declared 'static' inconsistently, upsetting many
3018compilers (but not gcc, which, in contradiction to the ANSI standard,
3019doesn't check this properly).  (gxcpath.c)
3020	- A local variable was initialized with a value computed from a
3021variable that hadn't been set yet, leading to possibly incorrect coloring of
3022the first run of pixels in images with 12 bits per sample.  (gximage4.c)
3023	- A compiler complained about initializing an unsigned variable with
3024a negative value.  (shcgen.c)
3025	- A rounding problem could produce a vertical stripe of 1 (or on
3026very large images possibly more) incorrect pixels at the right edge of a
30271-bit-deep image.  (gxdda.h, gximage1.c)
3028
3029Speeds up gs_rectfill substantially for the portrait/landscape case with a
3030rectangular clipping region.  (gsdps1.c)
3031
3032Adds a parameter so we can include gx_line_params in subclasses.  (gzline.h)
3033
3034</pre>
3035
3036<h2><a name="Version4.31"></a>Version 4.31 (limited) (10/27/96)</h2>
3037
3038<p>
3039This is primarily a bug fix release for 4.30, which we had hoped wouldn't be
3040necessary....
3041
3042<h3><a name="V4.31_Documentation"></a>Documentation</h3><pre>
3043
3044Fixes bugs:
3045	- The comment describing the order of coefficients in a CTM written
3046on the band list was wrong.  (gxclpath.h)
3047
3048</pre><h3><a name="V4.31_Procedures"></a>Procedures</h3><pre>
3049
3050Fixes bugs:
3051	- bug-form.txt wasn't installed by 'make install'.  (unix-end.mak)
3052	- The default flags in ugcclib.mak didn't take the gcc code
3053generation bug into account.  (ugcclib.mak)
3054
3055</pre><h3><a name="V4.31_Platforms"></a>Platforms</h3><pre>
3056
3057Fixes bugs:
3058	- MetroWerks CodeWarrior predefines true and false, causing
3059compilation errors on the Mac.  (stdpre.h)
3060
3061</pre><h3><a name="V4.31_Interpreter"></a>Interpreter</h3><pre>
3062
3063Updates code for the change in the ENUM_PTR macros.  (iscan.c)
3064
3065Changes the allocator to keep track of "lost" ref space separately, to allow
3066an independent check on its activities.  (gxalloc.h, ialloc.c, isave.c)
3067
3068Changes the garbage collector API slightly to allow implementation of the
3069API in applications other than PostScript interpreters.  (ivmspace.h,
3070ireclaim.c, igc.c)
3071
3072</pre><h3><a name="V4.31_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
3073
3074Implements the PDF 1.1 BX and EX operators.  (pdf_base.ps, pdf_main.ps)
3075
3076</pre><h3><a name="V4.31_Streams"></a>Streams</h3><pre>
3077
3078Fixes bugs:
3079	- Some (harmless) pointer incompatibilities upset some compilers.
3080(szlibd.c, szlibe.c)
3081
3082Updates code for the change in the ENUM_PTR macros.  (stream.c)
3083
3084</pre><h3><a name="V4.31_Library"></a>Library</h3><pre>
3085
3086Fixes bugs:
3087	- A label in the ENUM_PTR procedure generating macros was often not
3088referenced, leading to compiler warnings.  (gsstruct.h, gxxfont.h,
3089gdevmem.c, gschar.c, gscolor2.c, gsdevice.c, gsfont0.c, gsht.c, gsstate.c,
3090gxcpath.c, gximage.c)
3091	- Using the gstate version of setflat rather than the imager version
3092caused compiler warnings (and, in some cases, errors).  (gstype1.c)
3093	- Non-standard ImageMatrix values for banded images didn't work.
3094(This wasn't actually used.)  (gxclread.c)
3095	- imagemask with a halftone and portrait orientation colored some
3096inappropriate pixels.  (bug introduced in 4.30) (gximage2.c)
3097	- When banding, if a character straddled a band boundary the first
3098time it occurred, all occurrences of it were clipped.  (bug introduced in
30994.2x or 4.30) (gxclimag.c)
3100	- Degenerate clipping rectangles sometimes got turned into
3101non-degenerate ones by swapping the min and max coordinates.  (gxcpath.c)
3102	- Resizing an object either allocated a new object unnecessarily
3103(performance bug only), or in very rare cases could corrupt memory.
3104(gsalloc.c)
3105	- Very small objects didn't get put on a free list when freed.
3106(Performance bug only.) (gsalloc.c)
3107	- Some pointers were incorrectly declared 'const', upsetting some
3108compilers.  (gxclread.c)
3109
3110Adds more tracing output for -ZL.  (gxclread.c)
3111
3112Changes the -Za tracing output slightly to aid mechanical analysis of
3113allocation traces: allocation events now always include a '+', deallocation
3114events always include a '-', and the address is always the address of the
3115object data and not the header.  (gsalloc.c, gsmemory.c)
3116
3117Changes the allocator to keep track of "lost" object and string space
3118separately, to allow an independent check on its activities.  (gxalloc.h,
3119gsalloc.c)
3120
3121Changes the allocator to use 'memmove' in an obvious place.  (gsalloc.c)
3122
3123Provides a garbage collector API at the library level to allow
3124implementation of the API in applications other than PostScript
3125interpreters.  (gsgc.h)
3126
3127</pre>
3128
3129<h2><a name="Version4.30"></a>Version 4.30 (limited) (10/23/96)</h2>
3130
3131<p>
3132The main purpose of this release is to implement a substantial change in the
3133"high level" image API, after which we believe this API will be stable.
3134
3135<h3><a name="V4.30_Documentation"></a>Documentation</h3><pre>
3136
3137Documents the changes in the begin_image and image_data device procedures.
3138(drivers.txt)
3139
3140</pre><h3><a name="V4.30_Drivers"></a>Drivers</h3><pre>
3141
3142Speeds up the PDF writer a little by reducing the amount of allocation,
3143which was causing very frequent garbage collections.  (gs_pdfwr.ps,
3144gdevpdft.c)
3145
3146Updates the PDF writer for the change in begin_image/image_data.
3147(gdevpdfi.c)
3148
3149</pre><h3><a name="V4.30_Platforms"></a>Platforms</h3><pre>
3150
3151Fixes bugs:
3152	- Some versions of the SGI IRIX compiler have a bug that causes them
3153to try to expand macros that require arguments even when the macro name
3154isn't followed by a left parenthesis.  (gdevsgi.h, gdevsgi.c)
3155	- The IBM RS6000 compilers now provide &lt;stdlib.h&gt;, so our
3156definitions of malloc and free caused a conflict.  (malloc_.h)
3157
3158</pre><h3><a name="V4.30_Fonts"></a>Fonts</h3><pre>
3159
3160Fixes bugs:
3161	- Many Fontmaps included obsolete references to an old
3162Helvetica-Narrow font.  (Fontmap.*)
3163
3164Makes the GS_FONTPATH directory scanner a little more liberal about what
3165files it examines: it will now examine any file whose first line begins with
3166%!PS-Adobe or %!FontType.  (gs_fonts.ps)
3167
3168To match an apparent Adobe convention, augments findfont so that if a font
3169isn't in the Fontmap, it will try to load a file whose name is the same as
3170the font name.  (gs_fonts.ps)
3171
3172To make some questionable Apple font inquiry code work, augments the
3173FAKEFONTS facility so that it sets the FontType of fake fonts to 1.
3174(gs_fonts.ps)
3175
3176</pre><h3><a name="V4.30_Interpreter"></a>Interpreter</h3><pre>
3177
3178Fixes bugs:
3179	- .checkpassword, .putdeviceparams, .putdevparams, setsystemparams,
3180and setuserparams didn't free the results byte array, causing a memory leak
3181(until the next garbage collection).  (zdevice.c, ziodev.c, zusparam.c)
3182
3183</pre><h3><a name="V4.30_Library"></a>Library</h3><pre>
3184
3185Fixes bugs:
3186	- The code for emulating floating point multiplication with
3187conversion to fixed point didn't detect overflow correctly, which could
3188produce incorrect results instead of a limitcheck.  (gsmisc.c)
3189	- A macro cast a pointer incorrectly, leading to spurious compiler
3190warnings.  (gxfixed.h)
3191	- The code for emulating fixed-to-float conversion computed the
3192exponent incorrectly.  (gsmisc.c)
3193	- The algorithm for advancing a DDA a given number of steps (not
3194actually used anywhere before this version) was wrong.  (gxdda.h)
3195	- The clipping box returned by clipping devices was incorrect,
3196causing parts of the page to disappear.  (bug introduced in 4.20)
3197(gxcpath.c)
3198
3199Changes the begin_image and image_data device procedures:
3200	- begin_image now takes an optional subrectangle instead of a set of
3201shape flags.
3202	- image_data now always takes complete rows of pixels, takes a
3203source X offset, and returns 1 when it has received all the data.
3204
3205The change in begin_image and image_data is a NON-BACKWARD-COMPATIBLE CHANGE
3206IN A PUBLIC INTERFACE; however, this interface was still designated "subject
3207to change", per the notes for release 3.67 and the documentation in
3208drivers.txt.  (gsiparam.h, gxclpath.h, gxdda.h, gxdevice.h, gximage.h,
3209gdevbbox.c, gdevnfwd.c, gsimage.c, gxclimag.c, gxclread.c, gximage.c,
3210gximage?.c)
3211
3212</pre>
3213
3214<hr>
3215
3216<h2><a name="Version4.21"></a>Version 4.21 (limited) (10/17/96)</h2>
3217
3218<p>
3219The purpose of this release is to fix bugs reported in 4.0x, 4.10, and 4.20.
3220
3221<h3><a name="V4.21_Documentation"></a>Documentation</h3><pre>
3222
3223Fixes bugs:
3224	- The Ghostscript man page had a .TH in the middle.  (gs.1)
3225
3226</pre><h3><a name="V4.21_Procedures"></a>Procedures</h3><pre>
3227
3228Fixes bugs:
3229	- The shared version of zlib was always called libgz; on most
3230systems, it is now called libz (but not on Red Hat Linux, where libz is a
3231library for dealing with time zones).  (*.mak, gs.mak, libpng.mak, zlib.mak)
3232	- The pdf2dsc.1 man page wasn't installed on Unix systems.
3233(unix-end.mak)
3234	- font2c generated procedures named gsf_xxx, but genconf assumed
3235they were named gs_f_xxx.  (int.mak)
3236
3237</pre><h3><a name="V4.21_Drivers"></a>Drivers</h3><pre>
3238
3239Updates the user-contributed LBP-8II driver to correct unspecified problems.
3240(gdevlbp8.c)
3241
3242Adds a user-contributed driver for Avance Logic SuperVGA cards.
3243(gdevsvga.c, devs.mak)
3244
3245</pre><h3><a name="V4.21_Platforms"></a>Platforms</h3><pre>
3246
3247Fixes bugs:
3248	- On Windows NT, a 32-bit parameter was truncated to 16 bits,
3249preventing drawing of scroll bars of the image window when the window is
3250uncovered.  (dwimg.cpp)
3251
3252</pre><h3><a name="V4.21_Fonts"></a>Fonts</h3><pre>
3253
3254Fixes bugs:
3255	- The free URW Grotesk and Antiqua fonts were omitted from the
3256distribution.
3257
3258</pre><h3><a name="V4.21_Interpreter"></a>Interpreter</h3><pre>
3259
3260Fixes bugs:
3261	- Defining a new global instance of a built-in resource
3262(ColorRendering, ColorSpace, Form, Halftone, Pattern, ProcSet) caused an
3263invalidaccess error.  (gs_res.ps)
3264	- pathbbox with no current path left an extra item on the stack when
3265the error occurred.  (gs_init.ps)
3266	- findresource for an undefined resource instance didn't preserve
3267the contents of the stack.  (gs_res.ps)
3268
3269Adds a new file providing a procedural interface with a very rudimentary
3270form of job encapsulation.  (gserver.c)
3271
3272Changes the initial value of MaxOpStack to 20000, for the sake of a few
3273badly-behaved files.  (gs_init.ps, pdf_base.ps)
3274
3275</pre><h3><a name="V4.21_Library"></a>Library</h3><pre>
3276
3277Fixes bugs:
3278	- If the image operators failed to allocated their bookkeeping
3279structure, the result was a crash rather than VMerror.  (gximage.c)
3280	- gx_default_fill_triangle (currently used only to implement the
3281fastest case of stroke) had a typo that could cause a numeric exception or
3282incorrect output, and another typo that could produce incorrect output.
3283(gdevddrw.c)
3284	- When banding, if the first occurrence of a character fell partly
3285off the page, all occurrences of that character on the page could be clipped
3286or mangled.  (gxclbits.c, gxclimag.c)
3287	- When testing whether it's worthwhile compressing a bitmap for
3288banding, the compressor was allowed to generate a lot more output than
3289needed to make the test.  (gxclbits.c)
3290	- Certain cases of unrotated gray-scale images dropped the first or
3291last pixel of each scan line.  (gximage2.c)
3292	- In rare cases, a run of pixels in a image could get erroneously
3293displayed in the same color as the previous run, because of a cache
3294bookkeeping bug.  (gximage3.c)
3295	- The sample driver for the library had gotten inconsistent with a
3296header file.  (gslib.c)
3297	- A declaration was followed by an extraneous semicolon, which upset
3298some compilers.  (gxht.h)
3299	- Missing parentheses caused a test for thin lines to be incorrect.
3300(gxstroke.c)
3301
3302</pre>
3303
3304<h2><a name="Version4.20"></a>Version 4.20 (limited) (10/13/96)</h2>
3305
3306<p>
3307This release has internal changes for future support of banded image
3308processing, but no externally visible changes.  Its primary purpose is to
3309incorporate speedups for clipped images.  It does *not* incorporate fixes
3310for all problems reported in 4.0x or 4.10.
3311
3312<h3><a name="V4.20_Documentation"></a>Documentation</h3><pre>
3313
3314Documents the new get_clipping_box device procedure.  (drivers.txt)
3315
3316</pre><h3><a name="V4.20_Procedures"></a>Procedures</h3><pre>
3317
3318Fixes bugs:
3319	- There were many, many minor inconsistencies between the makefiles
3320and the source code.  (We finally have an automated tool to detect these.)
3321(devs.mak, int.mak, lib.mak, unixtail.mak; gsutil.c, zwppm.c)
3322	- Some makefile rules weren't properly terminated by a blank line.
3323(lib.mak)
3324
3325</pre><h3><a name="V4.20_Utilities"></a>Utilities</h3><pre>
3326
3327Fixes bugs:
3328	- The comments in gslp.ps had gotten out of date.  (gslp.ps)
3329
3330Adds --no-eject-file and --no-eject-formfeed switches to gslp.ps, to allow
3331packing files in multi-column printouts.  (gslp.ps)
3332
3333</pre><h3><a name="V4.20_Drivers"></a>Drivers</h3><pre>
3334
3335Adds a user-contributed driver for the Epson LP-8000 laser printer.
3336(gdevlp8k.c)
3337
3338Adds a DisplayMode parameter to the vgalib device.  (gdevvglb.c)
3339
3340Removes the requirement of typing a character at the end of each page using
3341the vgalib driver.  THIS IS A USER-VISIBLE, NON-BACKWARD-COMPATIBLE CHANGE.
3342(gdevvglb.c)
3343
3344</pre><h3><a name="V4.20_Interpreter"></a>Interpreter</h3><pre>
3345
3346Updates code to accommodate the new get_clipping_box device procedure.
3347(zupath.c)
3348
3349</pre><h3><a name="V4.20_Library"></a>Library</h3><pre>
3350
3351Fixes bugs:
3352	- When a CTM was passed through the band list, it didn't get
3353translated to match the band coordinate system.  (This had no effect,
3354because the translation part of the CTM was never used.)  (gxclread.c)
3355
3356Adds a ',' debugging switch to disable high-level operations when banding.
3357(gxclpath.c)
3358
3359Adds an optional get_clipping_box device procedure, so that filling and
3360stroking can clip more aggressively.  (gdevmem.h, gdevprn.h, gxdevice.h,
3361gxpaint.h, gxpath.h, gzacpath.h, gdevdflt.c, gdevht.c, gdevnfwd.c,
3362gxacpath.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c, gxfill.c,
3363gxstroke.c)
3364
3365Speeds up clipped filling and stroking, by checking against the device
3366clipping box.  (gxfill.c, gxstroke.c)
3367
3368Adds the ability to clip with a rectangle a clipping path being accumulated,
3369and uses it to do more aggressive clipping when banding.  (gzacpath.h,
3370gxacpath.c, gxclread.c)
3371
3372Speeds up clipping of objects lying partly above or below the clipping
3373region.  (gxcpath.c)
3374
3375Speeds up clipping vertically-oriented objects (such as 90 degree rotated
3376images or vertical rectangles) with convex clipping regions, by checking for
3377vertical rectangles contained in multiple clipping rectangles.  (gxcpath.c)
3378
3379Speeds up the handling of 90 degree rotated gray-scale images.  (gximage2.c)
3380
3381Enhances the band list so that it can contain commands for a range of bands,
3382not just a single band or all bands.  (gxcldev.h, gxclist.h, gxclbits.c,
3383gxclist.c, gxclread.c)
3384
3385Adds an operation to the DDA structure, for eventual support of clipped
3386images.  (gxdda.h)
3387
3388Factors out some macros useful for generating bit-transformation tables.
3389(gsbittab.h, gsbittab.c, gsflip.c)
3390
3391</pre>
3392
3393<hr>
3394
3395<h2><a name="Version4.10"></a>Version 4.10 (limited) (9/25/96)</h2>
3396
3397<p>
3398This release adds local garbage collection, and a number of performance
3399improvements for garbage collection in general.  We will support it for one
3400or two OEMs, but it is not a public release.
3401
3402<h3><a name="V4.10_Documentation"></a>Documentation</h3><pre>
3403
3404Moves documentation for all releases before 4.0 to history3.txt.  (NEWS,
3405history3.txt)
3406
3407</pre><h3><a name="V4.10_Utilities"></a>Utilities</h3><pre>
3408
3409Fixes bugs:
3410	- pdf2dsc.ps didn't have a proper license notice.  (pdf2dsc.ps)
3411
3412</pre><h3><a name="V4.10_Drivers"></a>Drivers</h3><pre>
3413
3414Adds a psgray driver, like psmono, to produce 8-bit gray PostScript (level
34151) images.  (devs.mak, *.mak, gdevpsim.c)
3416
3417Changes the psmono driver to allow runs of up to 255 repeated bytes.
3418(gdevpsim.c)
3419
3420</pre><h3><a name="V4.10_Interpreter"></a>Interpreter</h3><pre>
3421
3422Fixes bugs:
3423	- setdevice erased the page even if this wasn't necessary.
3424(zdevice.c)
3425
3426Speeds up the garbage collector, primarily by speeding up pointer
3427relocation.  (int.mak, ipacked.h, iref.h, ialloc.c, igc.c, igcref.c)
3428
3429Actually implements local garbage collection.  (igc.h, ivmspace.h, igc.c,
3430igcref.c, igcstr.c, ireclaim.c)
3431
3432Adds some additional error checking for the -Z? switch.  (ilocate.c)
3433
3434Moves a utility for color mapping from the interpreter to the library.
3435(icolor.h, zcolor.c)
3436
3437Adds a MinScreenLevels user parameter.  (zusparam.c)
3438
3439</pre><h3><a name="V4.10_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
3440
3441Adds partial support for the PDF 1.2 gs operator, reverse engineered from a
3442PDF 1.2 file.  (pdf_draw.ps)
3443
3444</pre><h3><a name="V4.10_Library"></a>Library</h3><pre>
3445
3446Fixes bugs:
3447	- The test for "thin" stroked lines incorrectly claimed some
3448non-thin lines were thin.  (gxstroke.c)
3449	- The computations for halftone cells didn't work for non-square
3450pixels.  (gxdht.h, gsht.c, gsht1.c, gshtscr.c)
3451
3452Speeds up the garbage collector a little.  (gsstruct.h, gxalloc.h,
3453gxfcache.h, gsfont.c)
3454
3455Replaces references to private statically allocated color spaces with
3456references to shared dynamically allocated ones, which are guaranteed to be
3457fully filled-in.  (gscie.c)
3458
3459Moves a utility for color mapping from the interpreter to the library.
3460(gxfmap.h, gxcmap.c)
3461
3462Makes available an imager analogue of setmatrix.  (gscoord.h, gscoord.c)
3463
3464Adds a parameter to control the minimum number of halftone screen levels.
3465If a halftone cell has fewer pixels than this number, it will be replicated
3466(similar to what AccurateScreens does) until the replicated screen has
3467enough levels.  (gxht.h, gshtscr.c)
3468
3469</pre>
3470
3471<hr>
3472
3473<h2><a name="Version4.03"></a>Version 4.03 (9/23/96)</h2>
3474
3475<p>
3476This was an emergency re-release of 4.02 to fix the stdin redirection
3477problem.  It has essentially no other changes.
3478
3479<h3><a name="V4.03_Documentation"></a>Documentation</h3><pre>
3480
3481Fixes bugs:
3482	- Solaris 2.x has /usr/ucb/install, not installbsd.  (make.txt)
3483
3484Updates current.txt to mention the ability to share libpng and libgz.
3485(current.txt)
3486
3487</pre><h3><a name="V4.03_Procedures"></a>Procedures</h3><pre>
3488
3489Fixes bugs:
3490	- A rule assumed that the makefile was named `makefile'.
3491(unixtail.mak)
3492
3493</pre><h3><a name="V4.03_Drivers"></a>Drivers</h3><pre>
3494
3495Fixes bugs:
3496	- The stcolor drivers had an off-by-1 error that could cause them to
3497write into unallocated memory.  (gdevstc.c)
3498	- The Imagen driver wouldn't compile with gcc.  (gdevimgn.c)
3499
3500</pre><h3><a name="V4.03_Fonts"></a>Fonts</h3><pre>
3501
3502Fixes bugs:
3503	- The Solaris fontmap had gotten out of date.  (Fontmap.Sol)
3504
3505</pre><h3><a name="V4.03_Streams"></a>Streams</h3><pre>
3506
3507Fixes bugs:
3508	- The test for stdin being non-seekable could leave the file error
3509flag set, which caused an infinite loop when trying to read from the file
3510later.  (sfile.c, sfileno.c)
3511
3512</pre>
3513
3514<h2><a name="Version4.02"></a>Version 4.02 (9/19/96)</h2>
3515
3516<p>
3517This release fixes a few more bugs, and adds the ability to read encrypted
3518PDF files and some PDF 1.2 files.
3519
3520<p>
3521This release was withdrawn after a few days because the stdin redirection
3522fix, which was made at the last minute, cause Ghostview to hang.
3523
3524<h3><a name="V4.02_Documentation"></a>Documentation</h3><pre>
3525
3526Fixes bugs:
3527	- The list of required support files was incorrect.  (install.txt)
3528	- The descriptions of file name lookup weren't accurate.  (use.txt)
3529	- A J should have been an H.  (gxbitmap.h)
3530
3531Updates the documentation about encrypted PDF files.  (new-user.txt)
3532
3533Documents what the 13 base PDF fonts are.  (ps2pdf.txt)
3534
3535Fixes a tiny typo.  (c-style.txt)
3536
3537Adds a user-contributed man page for the new pdf2dsc script.  (pdf2dsc.1)
3538
3539Updates the government restricted rights notice in the Aladdin Ghostscript
3540Free Public License.  (PUBLIC)
3541
3542Adds the URL of test files to the bug report form.  (new-user.txt)
3543
3544Puts the bug reporting form in a separate file.  (readme, bug-form.txt,
3545new-user.txt)
3546
3547Notes that map_xxx_color procedures should not return gx_no_color_index.
3548(drivers.txt)
3549
3550Notes that Ghostscript supports the Flate filters.  (language.txt)
3551
3552Documents the use of the system libpng and zlib.  (make.txt, gs.mak)
3553
3554Notes that Borland C++ 5.0 and 5.01 will not compile Ghostscript correctly.
3555(make.txt)
3556
3557</pre><h3><a name="V4.02_Procedures"></a>Procedures</h3><pre>
3558
3559Fixes bugs:
3560	- Using both DELAYBIND and SAFER caused problems.  (pstotext uses
3561DELAYBIND.)  (gs_init.ps)
3562
3563</pre><h3><a name="V4.02_Utilities"></a>Utilities</h3><pre>
3564
3565Fixes bugs:
3566	- Some pdf2ps machinery interfered with the PDF interpreter.
3567(pdf_2ps.ps, pdf_main.ps)
3568	- In the output of pdf2ps, page numbers in link destinations were
3569too high by 1.  (pdf_main.ps)
3570	- viewpbm didn't handle value ranges other than [0..255] correctly.
3571(viewpbm.ps)
3572
3573Adds a user-contributed shell script to invoke pdf2dsc.ps.  (pdf2dsc,
3574unix-end.mak)
3575
3576Adds a switch to the genconf utility to set the prefix for generated
3577procedure names.  (genconf.c)
3578
3579Adds the option of using system libraries (possibly shared) for libpng
3580and/or zlib.  (*head.mak, msc*.mak, os2.mak, tccommon.mak, wccommon.mak;
3581libpng.mak, zlib.mak)
3582
3583</pre><h3><a name="V4.02_Drivers"></a>Drivers</h3><pre>
3584
3585Fixes bugs:
3586	- The X11 display devices ignored the -DA4 compile-time option.
3587(gdevx.c)
3588	- The garbage collector could scramble the state of the CGM drivers.
3589(gxdevice.h, gdevcgm.c)
3590	- An identifier of more than 31 characters upset the VAX DEC C
3591compiler.  (gdevcgml.h, gdevcgml.c)
3592	- In case of an error in trying to set the CoreDistVersion distiller
3593parameter, a variable could be used without initialization.  (gdevpdfp.c)
3594	- When DEBUG is selected, the X Windows driver referenced _Xdebug,
3595which is not defined in (at least the VMS version of) DECWindows.  (x_.h,
3596gdevxini.c)
3597	- Some map_cmyk_color implementations could return "transparent".
3598(gdevbit.c)
3599	- Setting GraphicsAlphaBits or TextAlphaBits in the P*M drivers
3600caused an error.  (gdevpbm.c)
3601	- If a user cancelled printing under MS Windows, a confusing error
3602resulted, and a temporary file wasn't deleted.  (gdevwpr2.c)
3603	- The map_color_rgb procedure for the bit devices produced incorrect
3604results.  (This probably had no effect in practice.)  (gdevbit.c)
3605	- The os2prn device produced incorrect output.  (gdevos2p.c)
3606	- The OS/2 PM device didn't detect PM applications correctly.
3607(gdevpm.c)
3608	- The MS Windows printer driver didn't automatically detect the
3609printer's color capabilities.  (gdevwpr2.c)
3610	- The BJC-610 driver didn't print at 720 dpi.  (gdevcdj.c)
3611	- The static prototypes of many devices didn't include the far_data
3612keyword.  (gdev3852.c, gdev4081.c, gdevbgi.c, gdevcgm.c, gdevht.c,
3613gdevimgn.c, gdevl256.c, gdevmrop.c, gdevn533.c, gdevnfwd.c, gdevnp6.c,
3614gdevo182.c, gdevpcfb.c, gdevpdf.c, gdevpe.c, gdevpm.c, gdevs3ga.c,
3615gdevsnfb.c, gdevsppr.c, gdevsun.c, gdevsvga.c, gdevtknk.c, gdevvglb.c,
3616gdevwddb.c, gdevwprn.c, gdevx.c, gdevxalt.c)
3617	- The (original) deskjet driver collapsed print lines towards the
3618left margin.  (gdevdjet.c)
3619
3620Adds to the pgm/pgnm/ppm/pnm[raw] drivers the ability to set the maximum
3621pixel value, by setting any of the Gray/Red/Green/BlueValues device
3622parameters.  (gdevpbm.c)
3623
3624Adds pkm[raw] drivers, which do all their internal computations in CMYK and
3625convert the data to RGB as they write the file.  (gdevpbm.c)
3626
3627</pre><h3><a name="V4.02_Platforms"></a>Platforms</h3><pre>
3628
3629Fixes bugs:
3630	- The VMS script referred to old versions of the third-party
3631libraries.  (vms.mak)
3632	- Under VMS with DEC C, attempting to open a new file fails.
3633(gp_vms.c)
3634	- If you tried to print (gp_printfile) under Windows on a system
3635with no printers installed, Ghostscript caused a GPF.  (gp_mswin.c)
3636
3637Restores support for a non-DLL MS Windows platform.  (bcwin32.mak,
3638dwnodll.cpp)
3639
3640Adds a new MS Windows DLL call, gsdll_get_bitmap.  (gsdll16.def,
3641gsdll32.def, dll.txt, gdevwdib.c)
3642
3643Fixes a variety of other small Windows- and OS/2-related problems, mostly
3644related to printing.  (gp_mswin.h, dpmainc.c, dwmain.cpp, dwmainc.cpp,
3645gdevmswn.c, gdevpm.c, gdevwpr2.c, gp_mswin.c)
3646
3647</pre><h3><a name="V4.02_Interpreter"></a>Interpreter</h3><pre>
3648
3649Fixes bugs:
3650	- The value of /newerror in $error was true at the end of
3651initialization.  We now reset it after each internal use of stopped if
3652necessary.  (gs_dps1.ps, gs_fform.ps, gs_fonts.ps, gs_init.ps, gs_pdf.ps,
3653gs_res.ps, gs_type1.ps)
3654	- setpagedevice (and finddevice) didn't recognize Default.
3655(gs_init.ps)
3656	- When running with -dNODISPLAY, calling gssetresolution would cause
3657a crash.  (gs_init.ps)
3658	- A particular combination of save, .forgetsave, and garbage
3659collection could cause a memory access error in restore.  (isave.c)
3660	- Some references to systemdict were affected if a user redefined
3661the name /systemdict.  (gs_cmdl.ps, gs_fonts.ps, gs_kanji.ps, gs_dps1.ps,
3662gs_init.ps, gs_res.ps, gs_statd.ps, gs_type1.ps)
3663	- The insideness testing operators caused an invalid memory access.
3664(drivers.txt, zupath.c)
3665	- If a readline reached an input buffer boundary between the \r and
3666\n of a 2-character EOL, an error could occur.  (zfileio.c)
3667	- setdevparams caused an error.  (gs_lev2.ps)
3668
3669Changes file names beginning with ./ or ../ so they are recognized as
3670"absolute" and not subject to the search path.  (gp_dosfs.c, gp_ntfs.c,
3671gp_os2.c, gp_unifn.c)
3672
3673Changes the exit code for -h or --help from 0 to 1, so an invoking program
3674will keep the output around for the user to look at.  (imainarg.c)
3675
3676Adds the FlateEncode and FlateDecode filters; adds PNG pixel prediction to
3677the LZW filters.  These additions are required for PDF 1.2 and will be part
3678of PostScript Level 3.  (int.mak, lib.mak, zfdecode.c, zfilter2.c, zfzlib.c,
3679zfpngp.c [deleted])
3680
3681</pre><h3><a name="V4.02_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre>
3682
3683Fixes bugs:
3684	- The copyright notices on some files didn't mention the Aladdin
3685free license.  (pdf_*.ps)
3686	- Some references to systemdict were affected if a user redefined
3687the name /systemdict.  (pdf_font.ps)
3688	- The value of /newerror in $error was true at the end of
3689initialization.  We now reset it after each internal use of stopped if
3690necessary.  (pdf_main.ps)
3691	- stdin redirection failed for PDF files even if the new stdin was
3692seekable.  (pdf_main.ps)
3693	- The Rotate key rotated pages in the wrong direction.
3694(pdf_main.ps)
3695
3696Adds a minimal "security socket" to the interpreter.  This does not include
3697any actual decryption code; such code is available elsewhere (see
3698new-user.txt).  (int.mak, pdf_base.ps, pdf_main.ps, pdf_sec.ps)
3699
3700Adds a PDF 1.2 capability:
3701	- The destination in a Dest array can be a page number as well as a
3702page object.  (pdf_main.ps)
3703
3704</pre><h3><a name="V4.02_Streams"></a>Streams</h3><pre>
3705
3706Fixes bugs:
3707	- stdin was assumed to be non-seekable.  (sfile.c, sfileno.c)
3708
3709</pre><h3><a name="V4.02_Library"></a>Library</h3><pre>
3710
3711Fixes bugs:
3712	- Garbage collection could corrupt a pointer in Type 0 fonts.
3713(gxfont0.h, gsfont0.c)
3714	- When applying hints to a Type 1 font outline, the last point could
3715sometimes get moved twice, causing output anomalies.  (gxhint3.c)
3716	- An #include needed for debugging was missing.  (gxcmap.h)
3717	- Graphics states included a no-longer-used private color space
3718object.  (gsstate.c)
3719	- Images could get clipped randomly in the X direction.  (I don't
3720understand why this problem hasn't shown up more often, since it's been
3721there since release 4.00.)  (gximage.c)
3722	- The arct and arcto operators failed to draw the line to the
3723starting point of the arc.  (bug introduced in 4.01) (gspath1.c)
3724	- Prefix subclasses of simple structures caused an invalid memory
3725access.  (gsstruct.h)
3726	- The variable fheight was sometimes unused.  (gstype1.c)
3727	- igcd and imod didn't have prototypes in an appropriate header
3728file, and were declared extern in several places.  (gsdcolor.h, gsline.h,
3729gxarith.h, gxdht.h, gsht.c, gshtscr.c, gsimage.c, gsline.c, gstype1.c,
3730gxclimag.c)
3731	- When using a non-identity RenderTable in a CIE rendering
3732dictionary, all colors came out too light.  (gscie.c)
3733	- When using anti-aliased graphics, stroked lines were rendered too
3734thin.  (gspaint.c)
3735	- The default map_cmyk_color implementations could return
3736"transparent".  (gxcmap.c)
3737	- The number of bits of alpha requested when rendering anti-aliased
3738characters could exceed 4.  (gschar.c)
3739	- Multi-screen halftones could cause errors or infinite looping when
3740banding.  (This problem predates 4.0; I don't know why it didn't show up
3741before.)  (gxcldev.h, gxclist.c, gxclread.c)
3742	- Skewed or rotated gray-scale images, or masks with a halftoned
3743color, omitted one line of pixels and displaced the image by one pixel.
3744(gximage2.c)
3745
3746Adds an implementation of realloc, for systems that don't have one that
3747works.  I don't know how to determine this automatically, so for the moment,
3748the code uses our own implementation on Linux (where realloc is known to be
3749broken, at least in some releases) and nowhere else.  (malloc_.h,
3750gsmemory.c, gsmisc.c)
3751
3752Removes the "OLD" algorithms from the Type 1 hinting source code, since they
3753are no longer executed.  (If necessary, they can be retrieved from an older
3754version.)  (gxhint3.c)
3755
3756</pre>
3757
3758<h2><a name="Version4.01"></a>Version 4.01 (7/10/96)</h2>
3759
3760<p>
3761This fixes a few minor bugs discovered since the 4.0 release.
3762
3763<h3><a name="V4.01_Documentation"></a>Documentation</h3><pre>
3764
3765Fixes bugs:
3766	- An installation directory name was wrong.  (make.txt,
3767unix-lpr.txt)
3768	- A URL was wrong.  (devices.txt)
3769	- A reference to use.doc hadn't been updated.  (gs.1)
3770	- Some references to /usr/local/lib hadn't been updated.  (gs.1)
3771	- The NEWS file and history* files still referred to *.doc rather
3772than *.txt.  (NEWS, history*.txt)
3773
3774Adds a note about compilation on Digital Unix.  (make.txt)
3775
3776Clarifies that calling gs_exit calls gs_finit automatically.  (imain.h)
3777
3778Adds a pointer to the PDF encryption patch.  (Ridiculous U.S. export control
3779laws don't allow including the patch itself in the main fileset.)
3780(new-user.txt)
3781
3782Adds a help file for VMS.  (gs-vms.hlp)
3783
3784</pre><h3><a name="V4.01_Procedures"></a>Procedures</h3><pre>
3785
3786Fixes bugs:
3787	- vms.mak had gotten out of sync with the makefiles (again).
3788(vms.mak)
3789	- DEVICE{WIDTH,HEIGHT}POINTS didn't override PAPERSIZE.
3790(gs_init.ps)
3791	- The Microsoft C makefiles had gotten out of date.  (msc.mak)
3792
3793The (few) GNU-Licensed drivers were accidentally omitted from the fileset.
3794
3795Modifies a makefile for greater reusability.  (watclib.mak)
3796
3797Adds a 'debug' target for making Unix debugging configurations.
3798(unix-end.mak)
3799
3800</pre><h3><a name="V4.01_Utilities"></a>Utilities</h3><pre>
3801
3802Fixes bugs:
3803	- Some uses of 'run' should be changed to runlibfile.  (bdftops.ps,
3804impath.ps, markhint.ps, packfile.ps, showchar.ps, waterfal.ps, wftopfa.ps,
3805wrfont.ps)
3806	- Some debugging code hadn't been removed.  (gslp.ps)
3807
3808Adds a new utility, viewcmyk.ps, for viewing 4-bit CMYK data.  (psfiles.txt,
3809unix-end.mak, viewcmyk.ps)
3810
3811Improves pdf2dsc by including Title and CreationDate DSC comments (these are
3812displayed by Ghostview) and reducing the size of typical output files by a
3813factor of about 3.  (pdf2dsc.ps)
3814
3815Incorporates major changes (claimed to be improvements) to ps2ascii
3816contributed by a user.  If you have problems with it, please contact him,
3817not Aladdin.  (ps2ascii.ps)
3818
3819</pre><h3><a name="V4.01_Platforms"></a>Platforms</h3><pre>
3820
3821Fixes bugs:
3822	- The X value of a bounding box could be computed incorrectly.
3823(gdevbbox.c)
3824
3825</pre><h3><a name="V4.01_Platforms"></a>Platforms</h3><pre>
3826
3827Fixes bugs:
3828	- The Windows DLL sometimes didn't clean up properly.  (dll.txt,
3829dpmainc.c, dwdll.cpp, dwmain.cpp, dwmainc.cpp, gsdll.c, gsdll.h)
3830
3831</pre><h3><a name="V4.01_Interpreter"></a>Interpreter</h3><pre>
3832
3833Fixes bugs:
3834	- Reading from a filter could hang forever, because a buffer was
3835allocated 1 byte too small.  (zfilter.c)
3836	- The search path could become garbage under some circumstances.
3837(imain.c)
3838	- A dangling reference to a stack-allocated variable could corrupt
3839memory if a client mixed interpreter calls and direct C calls.  (interp.c)
3840	- Printing an object to a procedure-based filter could cause an
3841invalid memory access.  (zfileio.c)
3842
3843</pre><h3><a name="V4.01_Library"></a>Library</h3><pre>
3844
3845Fixes bugs:
3846	- Setting parameters for an unopened device could cause an access
3847error or invoke the wrong put_params procedure.  (gsdparam.c)
3848	- Reading from a filter could hang forever, because a buffer was
3849allocated 1 byte too small.  (stream.h)
3850	- If the current device was the nullpage device, doing a [g]save,
3851selecting a different device, and doing a [g]restore caused an error.
3852(gsdparam.c)
3853
3854Adds the ability to append arcs without the initial lineto, for PCL
3855emulation.  (gspath.h, gspath1.c)
3856
3857</pre>
3858
3859<h2><a name="Version4.0"></a>Version 4.0 (6/28/96)</h2>
3860
3861<p>
3862This is the first public release since 3.53, with a few more last-minute
3863patches beyond 3.70.
3864
3865<h3><a name="V4.0_Documentation"></a>Documentation</h3><pre>
3866
3867Fixes bugs:
3868	- Many makefiles still referred to .doc files rather than .txt.
3869(cfonts.mak, devs.mak, gs.mak, int.mak, libpng.mak, unix-end.mak, watc.mak,
3870watcwin.mak, wccommon.mak, zlib.mak)
3871	- Some FONTPATH-related information was out of date.  (use.txt)
3872	- The installation directory for fonts was incorrect.  (install.txt)
3873	- The libpng and zlib versions were out of date.  (libpng.mak,
3874zlib.mak)
3875	- Some information about GSview was incorrect or incomplete.
3876(new-user.txt)
3877	- make.txt said it described installation as well as building.
3878(make.txt)
3879
3880Notes that the current release of zlib won't compile and link correctly with
3881Sun cc.  (make.txt)
3882
3883Adds a little more detail to the C style document.  (c-style.txt)
3884
3885</pre><h3><a name="V4.0_Procedures"></a>Procedures</h3><pre>
3886
3887Fixes bugs:
3888	- Some documentation files weren't installed.  (unix-end.mak)
3889	- Some dependencies were incorrect.  (bcwin32.mak)
3890	- 'make begin' and 'make clean' deleted too many and/or the wrong
3891files.  (bcwin.mak, bcwin32.mak)
3892	- libpng.mak didn't work with libpng version 0.89c.  (libpng.mak)
3893	- -d&lt;var&gt;=&lt;name&gt; was equivalent to -d&lt;var&gt;=/&lt;name&gt;, and there was no
3894way to set a variable to true, false, or null.  (use.txt, gs_init.ps,
3895iinit.c, imainarg.c)
3896
3897Removes the modules.lis file, which is no longer used.
3898
3899Undoes detecting automatically the need to run tar_cat -- the mechanism
3900didn't work, and caused confusion.  (unix-end.mak)
3901
3902Updates the makefiles to libpng version 0.89, but allows them to work with
3903either 0.88 or 0.89.  (*.mak)
3904
3905</pre><h3><a name="V4.0_Utilities"></a>Utilities</h3><pre>
3906
3907Fixes bugs:
3908	- Showing the details of a protected font caused an error.
3909(markhint.ps)
3910
3911</pre><h3><a name="V4.0_Drivers"></a>Drivers</h3><pre>
3912
3913Fixes bugs:
3914	- A copyright notice was wrong.  (gs_pdfwr.ps)
3915	- PDF link annotations could get written with two Dest keys.
3916(gdevpdfm.c)
3917	- MakeProcInstance and FreeProcInstance were called on platforms
3918where it wasn't appropriate.  (gdevwpr2.c, gdevwprn.c, gp_mswin.c)
3919	- On X servers that return very large values for the "virtual
3920screen" size in millimeters but correct values for the screen size in
3921pixels, a rangecheck could occur.  (gdevxini.c)
3922	- The bounding box device could return garbage if stroke or fill was
3923ever invoked with an empty path.  (gdevbbox.c)
3924
3925Replaces the LBP8 driver with a revised one contributed by a user.
3926(gdevlbp8.c, devs.mak)
3927
3928</pre><h3><a name="V4.0_Platforms"></a>Platforms</h3><pre>
3929
3930Fixes bugs:
3931	- Some Windows menu parameters were incorrect.  (gsdll16.rc,
3932gsdll32.rc)
3933
3934</pre><h3><a name="V4.0_Interpreter"></a>Interpreter</h3><pre>
3935
3936Fixes bugs:
3937	- .getdevparams sometimes returned duplicate entries for /Type.
3938(ziodev2.c)
3939	- File names weren't parsed or concatenated properly on all
3940platforms.  (gs_fonts.ps, zfile.c)
3941	- Filter lookahead caused problems with special files.  (zfproc.c)
3942	- If a TransformPQR procedure in a CIE color rendering dictionary
3943didn't pop its 4 array arguments, an error occurred.  (gs_lev2.ps, zcrd.c)
3944
3945</pre><h3><a name="V4.0_Streams"></a>Streams</h3><pre>
3946
3947Fixes bugs:
3948	- Filter lookahead caused problems with special files.  (bug
3949introduced in 3.70) (stream.h)
3950
3951</pre><h3><a name="V4.0_Library"></a>Library</h3><pre>
3952
3953Fixes bugs:
3954	- .getdevparams sometimes returned duplicate entries for /Type.
3955(gxiodev.h, gsiodev.c)
3956
3957</pre>
3958
3959<!-- [3.0 begin visible trailer] =========================================== -->
3960<hr>
3961
3962<p>
3963<small>Copyright &copy; 1996, 1997, 1998 Aladdin Enterprises.
3964All rights reserved.</small>
3965
3966<p>
3967This software is provided AS-IS with no warranty, either express or
3968implied.
3969
3970This software is distributed under license and may not be copied,
3971modified or distributed except as expressly authorized under the terms
3972of the license contained in the file LICENSE in this distribution.
3973
3974For more information about licensing, please refer to
3975http://www.ghostscript.com/licensing/. For information on
3976commercial licensing, go to http://www.artifex.com/licensing/ or
3977contact Artifex Software, Inc., 101 Lucas Valley Road #110,
3978San Rafael, CA  94903, U.S.A., +1(415)492-9861.
3979
3980<p>
3981<small>Ghostscript version 8.53, 20 October 2005
3982
3983<!-- [3.0 end visible trailer] ============================================= -->
3984
3985</body>
3986</html>
3987