386BSD 0.1 development
[unix-history] / usr / othersrc / public / ghostscript-2.4.1 / history.doc
CommitLineData
38cd7a1e
WJ
1 Copyright (C) 1989, 1992 Aladdin Enterprises. All rights reserved.
2 Distributed by Free Software Foundation, Inc.
3
4This file is part of Ghostscript.
5
6Ghostscript is distributed in the hope that it will be useful, but
7WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
8to anyone for the consequences of using it or for whether it serves any
9particular purpose or works at all, unless he says so in writing. Refer
10to the Ghostscript General Public License for full details.
11
12Everyone is granted permission to copy, modify and redistribute
13Ghostscript, but only under the conditions described in the Ghostscript
14General Public License. A copy of this license is supposed to have been
15given to you along with Ghostscript so you can know your rights and
16responsibilities. It should be in a file named COPYING. Among other
17things, the copyright notice and this notice must be preserved on all
18copies.
19
20- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
21
22This file, history.doc, describes the changes in the various releases of
23Ghostscript.
24
25For an overview of Ghostscript and a list of the documentation files, see
26README.
27
28Version 2.4.1 (4/21/92)
29=============
30
31This is a quick release to fix minor problems discovered in 2.4, and
32to add a few improvements that didn't quite make it into 2.4. It
33also adds GIF and PCX file support.
34
35Procedures
36----------
37
38Fixes bugs:
39 - Some makefile dependencies, and the ccgs script, caused trouble
40for parallel versions of `make'.
41 - Compiling genarch with -O with gcc on the RS/6000 produced a
42buggy executable.
43
44Fixes some minor problems in make.doc.
45
46Adds DEVICE_DEVS2..5 to handle long device lists.
47
48Removes the need to set GS_RUN_EXE when using the Watcom compiler on
49MS-DOS systems.
50
51Gets rid of gs_ccfnt.ps, merging its function into gs_fonts.ps.
52
53Gets rid of gconfig.ps; this information is now compiled in gconfig.c.
54
55Utilities
56---------
57
58Fixes bugs:
59 - The palette for pstoppm in 8-bit mode didn't contain all 8
60primary colors.
61 - font2c used just values_ to mean &values_[0]; some compilers
62couldn't handle this.
63
64Makes font2c insert `const' in many appropriate places.
65
66Drivers
67-------
68
69Fixes bugs:
70 - The SunView driver had not been updated properly for 2.4 and was
71pretty thoroughly broken.
72 - None of the printer drivers worked properly with the Watcom
73compiler, because stdprn was doing \n -> \r\n substitution.
74 - If the generic printer driver couldn't allocate the requested
75size command list buffer, it gave up rather than trying to allocate a
76smaller buffer.
77 - The SuperVGA drivers (except for the VESA driver) didn't
78work with the Watcom compiler, because a couple of places in the
79drivers weren't truncating the offset of "segmented" pointers
80properly.
81 - Some of the H-P used <esc>*b#Y rather than <esc>*p+#Y for
82vertical positioning; this apparently is wrong, at least for the
83LJIIp.
84
85Removes the dependence of the X Windows driver on Xt, Xext, and Xmu. As a
86result, Ghostscript will not install a standard colormap itself, but it
87will use one if one is already installed.
88
89Adds a set of drivers for Portable Bitmap, Graymap, and Pixmap file
90formats.
91
92Adds drivers for monochrome, EGA/VGA-style, and SuperVGA-style PCX
93file formats.
94
95Adds drivers for monochrome and 256-color GIF file formats.
96
97Fonts
98-----
99
100Adds ZapfChancery-MediumItalic as a copy of ZapfChancery-Oblique.
101
102Interpreter
103-----------
104
105Fixes bugs:
106 - A value with l_new set could 'escape' to save level 0 on a
107stack; if stored, it prevented the slot from being saved and restored
108properly.
109 - 16#7fffffff + 1 gave the floating point equivalent of -2^31, not
1102^31.
111 - The PFBDecode filter computed the packet length incorrectly if
112the 0x8000-bit of the length was set.
113 - 5-byte numbers in Type 1 CharStrings complained of a rangecheck
114if they exceeded 16 bits, rather than if they exceeded the integer part of
115a fixed.
116 - (, ), and \ appearing in file name arguments in the command
117line did not work properly.
118
119Adds 'const' in many places.
120
121Changes the random number generator to be the same as the one used in
122Level 2 PostScript (as reported by Ed Taft on comp.lang.postscript).
123
124Exits with code 1 rather than code 0 on an unrecoverable error detected at
125the PostScript level.
126
127Makes dictionaries expand automatically when they fill up.
128
129Adds gp_exit to complement gp_init.
130
131Changes dictionaries to always allocate a power of 2 entries on
13232-bit machines. Changes the name table to allocate indices
133scattered, so dictionary lookup doesn't have to do a multiply to
134scramble the index.
135
136Changes the handling of currentfile to do "shallow binding" so stack
137searching is almost never required.
138
139Library
140-------
141
142Fixes bugs:
143 - arc and arcn got a numeric exception if the radius was zero.
144 - The undocumented 15 opcode in Type 1 fonts wasn't ignored.
145 - PaintType 3 wasn't allowed. (It isn't clear what it should
146mean; we treat it as equivalent to 0.)
147 - The VAX/VMS C compiler was generating incorrect code for the
148chi_bits and cmask macros in gdevmem, producing incorrect output.
149 - If the result of the slow algorithm for intersecting clipping
150paths was a rectangle, the wrong thing happened (cbox didn't get set).
151 - gx_path_is_rectangle didn't recognize open rectangles.
152 - clist_change_tile didn't check properly whether the tile
153size had changed, so changing the screen could produce invalid band
154files.
155 - The image operators did the wrong thing in the 1-for-1
156case, interleaving N bytes of data with 7*N bytes of garbage.
157 - stroke sometimes handled bevel and miter joins wrong in
158reflected coordinate systems.
159 - init_ht checked incorrectly whether there was enough room
160to Y-replicate tiles, so sometimes it did it when it shouldn't have.
161 - stroke sometimes thought lines were thin when they weren't.
162
163Adds 'const' in many places.
164
165Adds support for 2- and 4-bit-per-pixel memory devices.
166
167Version 2.4 (3/25/92)
168===========
169
170This is a major release that adds SuperVGA support, support for Metrics,
171settable device properties, and incremental font loading. It also
172includes important performance improvements, based on rewrites of some key
173algorithms, and quite a few new Level 2 / Display PostScript facilities.
174
175Procedures
176----------
177
178Fixes bugs:
179 - The rule for compiling gconfig.c didn't include the -I switches.
180 - .bat files were being distributed with a \n line terminator
181rather than \r\n.
182 - A CLOSE MODULE_LIST was needed after END_COMPILE: in the VMS
183command files.
184 - Unix systems couldn't handle multiple drivers with overlapping
185sets of files.
186 - -s<name> defined <name> as a null, rather than as an empty string.
187
188Adds gconfig.ps to the list of needed configuration files.
189
190Changes the way that the makefile handles nested .h files, so that it
191doesn't have to `touch' them.
192
193Adds the loadallfonts procedure to gs_fonts.ps.
194
195Changes the standard DOS configuration to include VGA, EGA, VESA, Epson,
196BubbleJet, and H-P printer drivers.
197
198Renames ghost.mak as gs.mak, and gdevs.mak as devs.mak.
199
200Adds a USE_ASM flag so that one can build a DOS version of Ghostscript
201without having an assembler.
202
203Splits off common code from the two MS-DOS makefiles into tccommon.mak.
204
205Replaces the COPYING and LICENSE files with a new LICENSE file containing
206version 2 of the GNU General Public License.
207
208Removes DEVICES and DEVICE_OBJS from the makefiles, since they are no
209longer needed.
210
211Adds a GS_DEVICE environment variable to supply a default device name if
212desired.
213
214Adds ansihead.mak and unix-ansi.mak, to parallel [g]cc-head.mak and
215unix-[g]cc.mak, for other ANSI C compilers.
216
217Changes the way that optional features are defined in the makefiles, so
218that they actually work.
219
220Adds support for the Watcom C/386 compiler.
221
222Allows # in the command line as equivalent to =, to compensate for
223brain-damaged MS-DOS shell.
224
225Adds -sOUTPUTFILE= to set the output file or pipe.
226
227Adds -dWRITESYSTEMDICT to leave systemdict writable.
228
229Utilities
230---------
231
232Fixes bugs:
233 - pcharstr.ps insisted on having Subrs be present in the font.
234 - pcharstr.ps decoded negative numbers between -108 and -1131
235incorrectly.
236 - pfbtogs.ps didn't handle packets longer than 64K correctly.
237
238Changes the bdftops utility so that it makes entries for UnderlinePosition
239and UnderlineThickness in FontInfo, and so that it always records a
240FullName (the FontName if no other is provided).
241
242Changes the name of the pfbtops utility to pfbtogs, because groff already
243includes a program called pfbtops.
244
245Adds the gslp utility for doing "line printing" of text files, similar to
246enscript + lpr.
247
248Adds a new variable DITHERPPI that enables a different dither pattern,
249claimed to be better for printers.
250
251Adds the font2c utility for compiling Type 1 fonts into C, so they can be
252linked into an executable rather than loaded dynamically.
253
254Drivers
255-------
256
257Fixes bugs:
258 - gdev_prn_copy_scan_lines was erroneously masking the last byte
259of data even on color printers, as was paintjet_print_page.
260 - The TruFax driver had a couple of compilation errors, since it
261hadn't been compiled in a while.
262 - The BGI driver sometimes didn't consult BGIPATH when looking for
263.BGI files.
264 - initclip did the wrong thing with memory devices.
265 - The BGI driver didn't look in BGIDIR for .BGI files.
266 - The Epson driver didn't set the right margin properly with
267ESC+Q.
268 - The BJ-10e driver was badly broken.
269 - gdev_prn_open/close_printer didn't reset the command list file,
270so it was taking quadratic time to print multi-page documents.
271
272Adds color to the SunView driver.
273
274Adds selectable resolution (75, 100, 150, or 300 DPI) to the
275DeskJet/LaserJet driver.
276
277Changes gssetdev so that drivers can specify special libraries to be
278loaded, as well as object files.
279
280Adds a driver for VESA-compliant SuperVGA displays. This driver handles
281all resolutions from 640 x 400 up to 1280 x 1024, in 256-color mode. The
282default is VGA resolution (640 x 480).
283
284Adds a driver for the ATI Wonder SuperVGA card, and for SuperVGA cards
285using the Tseng Labs ET3000 or ET4000 chip such as the STB VGA EM-16 and
286the Orchid ProDesigner II (256-color modes only).
287
288Adds a driver for Trident and Tseng Labs SuperVGA cards in 800 x 600,
28916-color modes (for cards with only 256K of memory).
290
291Adds user-contributed drivers for the Ricoh 4081, DEC LN03, Canon LBP-8II,
292and H-P DeskJet 500C printers.
293
294Adds Tim Theisen's Ghostview changes to the X11 driver.
295
296MAKES NON-BACKWARD-COMPATIBLE CHANGES TO THE DRIVER PROCEDURE INTERFACE as
297follows:
298
299 - Changes map_rgb_color and map_color_rgb to always work in a
300 16-bit color value space, rather than a space defined by the
301 maximum number of distinct colors provided by the device.
302
303 - Adds an argument to the output_page procedure to indicate
304 whether the procedure is being called for copypage or
305 showpage, and a num_copies argument.
306
307 - Adds a gx_bitmap_id to the copy_ and tile_ procedures, so that
308 drivers can cache bitmaps in the server or device if they want
309 to.
310
311 - Removes fill_trapezoid and tile_trapezoid.
312
313 - Adds a new get_bits procedure for reading the bits back from the
314 driver buffer (when possible), replacing copy_scan_lines.
315 This procedure takes a new argument describing padding and
316 byte swapping, and returns a different value from
317 copy_scan_lines.
318
319 - Adds get_props and put_props procedures for accessing arbitrary
320 additional properties of devices. The interface is quite
321 complex, but provides a great deal of flexibility.
322
323See drivers.doc for details.
324
325Changes gdev_mem_bytes_per_scan_line to gdev_prn_bytes_per_scan_line.
326
327Adds a user-contributed driver for DigiBoard, Inc.'s fax software.
328
329Fonts
330-----
331
332Changes Type1BuildChar so it uses the information from the Metrics
333dictionary in the font, if Metrics is present.
334
335Changes findfont (.loadfont) so it recognizes .PFB fonts and can load them
336directly. Also changes .loadfont to disable packing temporarily, because
337some fonts rely on procedures being writable (!).
338
339Interpreter
340-----------
341
342Fixes bugs:
343 - The hypot function is not available on some Unix systems.
344 - Ghostscript didn't flush and close files when exiting.
345 - In statusdict, the /margins procedure used .leftmargin, but
346/setmargins used .lmargin.
347 - An out-of-range putinterval would simply do nothing, rather than
348reporting an error.
349 - If an attempt to allocate a block larger than the allocator's
350chunk size (20K) failed, the allocator would erroneously think it had
351succeeded.
352 - The bind operator made the top-level procedure read-only, as
353well as interior procedures.
354 - gs.c copied 1 extra character for the value of strings defined
355on the command line with -s...=, which could smash the first byte of the
356next object in memory.
357 - copying a dictionary erroneously required the maxlength of the
358destination to be greater than or equal to the maxlength of the source,
359rather than the length of the source.
360 - undef didn't correctly decide when to mark a deleted entry as
361deleted vs. free; as a result, some keys couldn't be looked up properly
362after an undef.
363 - type1encrypt and type1decrypt didn't set the size of the result
364properly.
365 - cvi and cvr didn't allow leading or trailing whitespace in
366strings.
367 - cvs didn't cause an error if the destination string was too
368short.
369 - Many operators didn't check correctly for stack underflow (off
370by 1).
371 - `for' used reals, rather than integers, if the limit was a real,
372even if the initial value and increment were integers.
373 - `restore' didn't properly invalidate copies of the save object
374being restored from; `save dup restore restore' would crash.
375 - `restore' sometimes didn't undo stores into matrices that were
376stored into by operators. (The identity matrix always had l_new set.)
377 - readline gave a rangecheck if the input line exactly filled the
378string.
379 - `--' as the last switch on the command line caused a crash
380rather than an error message.
381 - On MS-DOS systems, filenameforall didn't handle patterns with a
382drive or directory specifier properly.
383 - stroke sometimes called gz_draw_line_fixed even if the line went
384outside the clipping box by 1 pixel.
385
386Changes the loop that binds procedure "operators" to entirely disable the
387handling of the typecheck error, rather than to use stopped. This cuts
388initialization time significantly, and also eliminates about 35K of wasted
389space (for saving the stacks).
390
391Changes the version "operator" so it returns 47.0. Adds "revision" to
392define the Ghostscript version # x 100.
393
394Adds gscurrentresolution and gssetresolution procedures for getting and
395setting the device resolution.
396
397Adds -r<res> and -r<xres>x<yres> as command line options for setting
398device resolution.
399
400Adds a facility for incrementally loading the individual CharStrings of a
401Ghostscript font from the disk. This can save a lot of memory, at the
402expense of slower rendering. (It is intended primarily for MS-DOS
403systems.)
404
405Changes findlibfile to return the name of the file that was actually
406opened, as well as the file itself, when the operation succeeds.
407
408Changes the name of the main entry to the interpreter from interpret to
409gs_interpret, because of a conflict with a Data General library procedure.
410
411Adds the .setmetrics operator to set the metrics for the current
412character for Type 1 fonts.
413
414Adds more LaserWriter-specific entries to statusdict.
415
416Gives names to all the internal `operators', so they will print out
417reasonably when an error occurs.
418
419Extends the status operator to accept a string and return file
420information, as defined for Level 2 PostScript.
421
422Adds the filter operator and some specific filters: ASCII85Encode,
423ASCII85Decode, ASCIIHexEncode, ASCIIHexDecode, eexecDecode, NullEncode,
424PFBDecode, and the null case of SubFileDecode.
425
426Extends the scanner to recognize the Level 2 << and >> tokens.
427
428Adds a facility for extracting the text strings from a PostScript file and
429writing them out in a simple format (selected by -dASCIIOUT, implemented
430by gs_2asc.ps).
431
432Implements all of the remaining Display PostScript facilities that are
433also in Level 2 (i.e., everything in section A.1.3 of the PostScript
434Language Reference Manual, Second Edition, that is not also in section
435A.1.2). The virtual memory operations are all stubs; the new halftone
436options are not fully implemented.
437
438Changes makeimagedevice to use a string of gray or RGB values, rather than
439an array of color objects, to specify the palette. Removes
440currentgscolor and setgscolor from the interpreter, but leaves t_color
441objects in, since they may be useful later.
442
443Adds getdeviceprops and putdeviceprops for manipulating device properties.
444Currently defined properties for all devices: InitialMatrix, HWResolution,
445HWSize, Name. Currently defined properties for printers: BufferSpace,
446MaxBitmap, OutputFile. OutputFile allows |command for piping on Unix
447systems.
448
449Removes deviceparams and makedevice. Adds devicedefaultmatrix.
450
451Implements reversepath.
452
453Makes copy work on devices.
454
455MS-DOS specific
456- - - - - - - -
457
458Fixes bugs:
459 - iutilasm.asm wouldn't assemble with newer versions of MASM if
460CPU_TYPE was set to 286 or above.
461 - CPU_TYPE=386 didn't properly substitute the faster
462multiply/divide routines under Turbo C++ or Borland C++, only under the
463original Turbo C.
464
465Library
466-------
467
468Fixes bugs:
469 - A curve whose first and last points were the same wouldn't get
470drawn at all.
471 - A bug in the Turbo C++ compiler generated bad code when shifting
472a long right by 1 bit.
473 - If stroking a dashed line ever encountered a segment that was
474completely blank, Ghostscript would indirect through a null pointer.
475 - arc and arcn gave an error if the radius was negative.
476 - stroke always used the general algorithm, even if the line was
477guaranteed to be thin.
478 - arc and arcn erroneously reduced the angles mod 360.
479 - Very large or negative 32-bit numbers in Type 1 fonts didn't
480work properly on MS-DOS systems (the ff0000 bits got set to zero).
481 - Color printer devices rendering entirely in memory only
482allocated a monochrome-sized bitmap.
483 - clip and eoclip didn't intersect the paths properly in the
484general case.
485 - charpath erroneously rounded the current point to an integral
486value, causing characters to be spaced improperly.
487 - The definition of max_color_param got some compilers confused.
488 - charpath always used quadratic time and space, and dropped all
489but the last character when used with a Type 3 font.
490 - Stroking a path with a 180 degree angle would incorrectly miter
491instead of beveling.
492 - Type 1 fonts used the current flatness for curves, which could
493produce bad (and inconsistent) results.
494 - Stroking a degenerate line segment produced incorrect results.
495
496Changes the character cache to use the UniqueID as the key, when
497available, instead of the font pointer. This dramatically improves
498performance when fonts are getting removed and reloaded because of page
499isolation with save/restore.
500
501Removes some unnecessary casts to (float) from gsmatrix.c and gscoord.c.
502
503Changes the Type 1 interpreter so that it rounds line and curve endpoints
504to the center of the nearest half-pixel, and omits null line segments.
505This both speeds up rendering at small sizes and improves output quality.
506
507Changes gs_deviceparams to return resolution as well as extent; changes
508gs_makedevice to accept resolution as well as extent.
509
510Replaces the algorithm for approximating circular arcs with curves with a
511more accurate one.
512
513Changes gs_point and gs_rect to use doubles rather than floats.
514
515Adds gs_setmetrics, for overriding Type 1 font metrics for the current
516character.
517
518Changes clipping to use lists of rectangles rather than path intersection.
519 This makes a big difference when clipping bitmaps (including characters).
520
521Changes the character cache to discard entries incrementally, rather than
522clearing the entire cache when it fills up.
523
524Changes the implementation of transfer functions to use a cached map,
525built when the transfer function is set. This makes transfer functions
526work properly in all situations, including images.
527
528Defines a .quit operator that takes an exit code, and redefines quit in
529terms of it.
530
531Adds support for 16-bit-per-pixel devices in gdevmem.
532
533Adds gs_copydevice and gs_deviceinitialmatrix; removes gs_deviceparams and
534gs_makedevice.
535
536Changes setscreen to ensure that the cell is always at least 4x4 pixels in
537size.
538
539Version 2.3 (8/28/91)
540===========
541
542This is a minor release to fix two bugs and add the PaintJet driver, which
543didn't make it into 2.2.
544
545Utilities
546---------
547
548Changes the pstoppm utility so it counts pages correctly even in the
549presence of arbitrary saves and restores.
550
551Drivers
552-------
553
554Adds a new, "supported" PaintJet driver.
555
556Changes the Epson driver to use ESC+D rather than ESC+\ for horizontal
557positioning, since many printers don't support the latter.
558
559Adds horizontal double-density (two-pass) printing to the Epson driver, so
560it can do 240 x 60 and 360 x 180 densities. (Vertical double density is
561not supported yet.)
562
563Version 2.2 (6/1/91)
564===========
565
566The purpose of this release is to add save/restore, and a few
567miscellaneous Level 2 P*stScr*pt features such as undef. It also includes
568major improvements in graphics quality and in handling of high-resolution
569printers.
570
571Procedures
572----------
573
574Changes the version numbering to M.mpp rather than M.m.p, so that
575`version' can be a real number for those programs that insist on it.
576
577Renames ghost.ps as gs_init.ps, gfonts.ps as gs_fonts.ps, and statusd.ps
578as gs_statd.ps. The initialization files now all are named gs_*.ps.
579
580Renames gdevs.{c,h,tl} as gconfig.{c,h,tl}.
581
582Changes the relevant makefiles and command files so that a single build
583can contain several drivers that share code, e.g., the Epson driver and
584the DeskJet driver.
585
586Changes gs_init.ps so it relies on an external gconfig.ps file rather than
587making a specific test for the presence of Level 2 features.
588
589Adds an entry for uglyr.gsf to the makefile.
590
591Removes the distinction between CCA and CCNA, since most of the files now
592contain constructs that require non-ANSI compilation on MS-DOS platforms.
593
594Adds a `man' page for the ansi2knr utility.
595
596Changes the documentation (use.doc) to show how to use -sDEVICE=<device>,
597or the selectdevice procedure, to select devices by name.
598
599Adds DEVICE_DEVS to the makefiles (analogous to DEVICES and DEVICE_OBJS).
600This finally makes the make procedure fully automatic.
601
602Adds the name of the initialization file (gs_init.ps) as a
603platform-specific makefile parameter, GS_INIT.
604
605Removes the test program gt.{c,tr} from the fileset, since it is not
606useful to users.
607
608Moves the Symbol encoding vector to a separate file (symbol_e.ps), from
609which it is loaded when first used.
610
611Changes the error handler so it can handle errors that occur while reading
612the initialization files.
613
614Extends ansi2knr so it can handle `void' and `...' in parameter lists.
615
616Adds quit.ps to the set of installed files.
617
618MS-DOS-specific changes
619- - - - - - - - - - - -
620
621Adds the VGA and BGI drivers to the standard MS-DOS configuration, and
622makes VGA the default.
623
624Adds a `+' and a newline at the end of gs.tr, to avoid problems with file
625transfer programs or editors that add a newline at the end of files.
626
627Changes the name of msdos.mak to turboc.mak, and creates a new tbcplus.mak
628makefile for use with Turbo C++ and Borland C++.
629
630Changes the extension of the loader response files from .tl to .tr.
631
632Changes the default search path from c:/ghost and c:/ghost/fonts to c:/gs
633and c:/gs/fonts.
634
635Changes the directory separator from `|' back to ';', since it appears
636that DOS can handle a ; in a command line if it is prefixed with \.
637
638Unix-specific changes
639- - - - - - - - - - -
640
641Changes the uses of install in unixtail.mak so they only install a single
642file at a time, which is all that the standard Unix install allows.
643
644Removes the duplicate files (README/readme, LICENSE/license,
645COPYING/copying, Fontmap/fontmap).
646
647Changes the ld flags from LDPLAT to LDFLAGS.
648
649Adds XCFLAGS and XLDFLAGS. These are concatenated with CFLAGS and LDFLAGS
650respectively. The intention is that they be set from the `make' command
651line if desired.
652
653VMS-specific changes
654- - - - - - - - - -
655
656Repairs the omission of ZPACKED from the VMS build lists.
657
658Drivers
659-------
660
661Fixes bugs:
662 - The SunView driver produced semi-garbage on little-endian
663platforms (Sun-386i) because it didn't swap the bit order.
664 - The X driver would dump core if it couldn't open the display and
665the DISPLAY environment variable wasn't set.
666 - The X driver relied on white = 0, black = ones in a couple of
667places;
668 - The X driver would return an error, instead of clipping, if
669asked to display outside the window.
670 - The X driver would create inappropriately sized windows, because
671it believed the server's report of the screen resolution.
672
673Adds Fran Taylor's Private Eye driver to gdevs.mak and the fileset (not
674supported by Aladdin Enterprises).
675
676Adds Neil Ostroff's TruFax driver to gdevs.mak and the fileset (not
677supported by Aladdin Enterprises).
678
679Makes the scratch file template for the printer drivers a per-platform
680quantity (gp_scratch_file_name_template). Puts the default scratch files
681for Unix in /usr/tmp rather than /tmp.
682
683Changes the SunView driver to prevent the Ghostscript window from being
684destroyed (which badly confuses the interpreter).
685
686Extends the Epson driver to handle a variety of print densities in both X
687and Y, to handle 24-pin as well as 8-pin graphics, and to allow optional
688specification of default density in the makefile (gdevs.mak).
689
690Refactors the printer drivers so that a single driver handles both DeskJet
691and LaserJet. Adds LaserJet drivers that use the new compression modes on
692the LJ IId/IIp and LJ III.
693
694Changes all the printer drivers to use band lists rather than bitmap
695paging as the buffering method. (The individual drivers need only a
696one-line change to replace mem_copy_scan_lines with
697gdev_prn_copy_scan_lines with a different argument.)
698
699Adds the halftone phase as additional arguments to tile_rectangle and
700tile_trapezoid.
701
702Adds an entirely new and much simpler PaintJet driver, using the new band
703list interface.
704
705Adds margin information to the device structure. This is currently only
706relevant for printer devices.
707
708Adds BGIPATH and BGIUSER environment variables, allowing additional
709control of the BGI driver.
710
711Changes the x/y_pixels_per_inch member of the device structure from int to
712float.
713
714Fonts
715-----
716
717Patches gs_fonts.ps so definefont will add an isFixedPitch entry to
718FontInfo if there isn't one there.
719
720Removes the old "type 7 path" encoding code from gs_fonts.ps.
721
722Changes bdftops so it puts isFixedWidth and ItalicAngle entries in the
723FontInfo dictionary of the fonts it creates, since some P*stScr*pt
724programs rely on this.
725
726Changes bdftops so it synthesizes as many missing characters as possible
727out of the ones that are there (in particular: synthesizes accents out of
728punctuation marks, and accented characters using seac.) The results
729aren't all that good, but they're a lot better than having characters
730missing out of the font.
731
732Utilities
733---------
734
735Adds a pfbtops utility for converting .PFB fonts to standard Ghostscript
736fonts.
737
738Fixes bugs:
739 - ps2image didn't reset things properly between pages for
740multi-page documents.
741
742Interpreter
743-----------
744
745Makes Ghostscript recognize `-' alone as meaning that it should read from
746standard input as though it were a file. This allows Ghostscript to
747accept a pipe as input.
748
749Fixes bugs:
750 - seac in type1addpath used the current font's encoding, not
751StandardEncoding.
752 - type1decryptfile (eexec) didn't recognize binary (as opposed to
753hex) representation.
754 - Mentioning a name whose value was a no-access object caused an
755invalidaccess error.
756 - There was a bogus definition of `run' in zfile.c.
757 - The interpreter didn't handle end-of-file on stdin properly.
758 - Real numbers with an 'e' or 'E' but no decimal point were not
759recognized.
760 - On MS-DOS systems, inside strings, \ followed by a newline was
761not discarded properly.
762 - On MS-DOS systems, the long unsigned divide routine sometimes
763gave incorrect answers. Among other things, this caused alternate-radix
764numbers sometimes to crash the interpreter.
765 - cvrs didn't do the right thing about reals or negative integers.
766 - .echo.mode was being reset with def instead of store, and was
767defined in systemdict rather than userdict.
768 - setgray and settransfer didn't interact properly.
769 - 16#80000000 was being interpreted as a signed integer (and
770converted to a real) rather than an unsigned one.
771 - atan returned 0 sometimes when it should have returned 180.
772 - currentcmykcolor was defined wrong.
773
774Removes the filename operator, since no standard Ghostscript code used it,
775and it caused problems with some P*stScr*pt files.
776
777Implements new operators: filenameforall, selectfont (as a procedure),
778stringmatch, undef.
779
780Adds new standard procedures: selectdevice.
781
782For MS-DOS, requires that the operand and execution stacks be located in
783the data segment, and uses short pointers to address them. This produces
784significantly smaller and faster code. (These changes are not visible to
785users or library clients.)
786
787Changes the assignment of attribute bits, and adds new bits for
788save/restore and the garbage collector. Changes many of the macros in
789store.h to support save/restore. (These changes are not visible to users
790or library clients.) Implements save and restore.
791
792Moves type names from gs_init.ps to ghost.h and ztype.c.
793
794Moves error names from gs_init.ps to errors.h and iinit.c.
795
796Introduces gp.h as a documented interface to the platform-specific files.
797
798Adds the -- switch, which allows Ghostscript programs to take arguments
799from the command line.
800
801Changes many uses of the name `name' to something else, to avoid upsetting
802the Microsoft C compiler.
803
804Really implements packed arrays -- they took the same amount of space as
805ordinary arrays in previous versions.
806
807Changes exitserver in serverdict so that it just clears the stacks. (This
808isn't the correct fix, but it will do as a workaround.)
809
810Makes many miscellaneous small changes to pacify various compilers.
811
812Changes gs_fonts.ps so that when "quiet" mode is selected (-q switch),
813Ghostscript doesn't print anything when loading fonts or when substituting
814for undefined characters.
815
816Defines the name consisting of just a control-D as a no-op, because some
817P*stScr*pt-generating applications put control-Ds in their output.
818
819Implements halftone phase (sethalftonephase and currenthalftonephase
820operators).
821
822Removes the -E switch, since it is no longer useful.
823
824Changes the -w and -h switches to a single -g (geometry) switch, with
825usage -g<width>x<height>. Makes the -h switch, and a new -? switch, print
826usage help.
827
828Implements correct handling of stack overflow errors (makes an array out
829of the contents of the overflowing stack, and resets the stack, before
830invoking the error handler).
831
832Adds t_oparray (`operators' defined as procedures) and the makeoperator
833operator. This is so that programs like the Distillery that rely on all
834operators being bound by `bind' will work properly.
835
836Adds a new NOPAUSE flag to suppress the prompt and pause at copypage and
837showpage.
838
839Library
840-------
841
842Fixes bugs:
843 - gs_type1_interpret didn't store the encryption state or the skip
844count before returning to let the client handle a seac or an endchar in
845the middle of a seac.
846 - The definition of the Type 1 operator ce_testadd was based on
847wrong information; the operator takes only 2 operands and does something
848unknown.
849 - mem_true24_copy_mono wasn't incrementing the destination pointer
850if the color was transparent, leading to garbled characters.
851 - gx_lookup_fm_pair would sometimes look at one entry beyond the
852end of the cached font/matrix pair area. (This probably had no practical
853effect.)
854 - gs_type1_interpret didn't save the current point when returning
855to the client for a callothersubr, causing some characters to be rendered
856displaced (such as some of the chess pieces in chess.ps).
857 - gs_setgray, gs_sethsbcolor, gs_setrgbcolor, gs_setflat, and
858gs_setlinewidth gave errors for out-of-range operands rather than forcing
859them into range.
860 - Transfer functions were not actually supported.
861 - The area fill algorithm failed on certain complex paths.
862 - The current point was sometimes defined when a BuildChar
863procedure was called.
864 - Stroking a degenerate line didn't display anything for round
865caps or joins.
866 - If the ends of a curve had exactly the same X coordinate, the
867curve sometimes wouldn't be displayed.
868 - Very thin lines that went outside the clipping region would
869sometimes be displayed as dashed, or not at all.
870 - The translation in a FontMatrix was ignored.
871 - Very wide, shallow lines would color extraneous pixels when
872using bevel or miter joins.
873 - Dashed lines didn't join properly at the beginning of a closed
874path.
875 - 0-degree arcs didn't add the appropriate line (possibly
876degenerate) to the path.
877 - gs_type1_interpret didn't reset the callsubr stack when starting
878the base character of a seac, which caused confusion if the accent's
879endchar fell inside a Subr.
880 - Non-monochrome memory memory devices weren't checking the
881arguments of the drawing procedures properly.
882 - The initial clipping rectangle for memory devices was being
883computed wrong.
884 - Null devices had a semi-infinite clipping rectangle instead of
885an empty one.
886 - gs_setlinewidth was treating negative arguments as zero, instead
887of taking the absolute value.
888 - imagemask with a dithered color used a solid color rather than
889the dithered one.
890
891Tweaks the area fill and image rendering algorithms to be a little more
892liberal with paint when being used to render characters.
893
894Changes the name of the 8-bit mapped color memory device from
895mem_mapped_color_device to mem_mapped8_color_device.
896
897Changes the memory devices so that on little-endian platforms, they can
898store the bytes within a word in either order. (Little-endian order
899allows efficient 32-bit updating, big-endian is required when displaying
900or writing to a printer or a file.)
901
902Implements halftone phase.
903
904Replaces the trapezoid fill algorithm with a much more accurate one
905inspired by a contribution from Paul Haeberli. This also changes the
906graphics convention back to filling only pixels whose center falls within
907the region to be filled.
908
909Changes the character cache to allocate headers and bits contiguously out
910of a single ring buffer.
911
912Changes gs_imagemask and gs_imagemask_init to take a thickness adjustment
913parameter.
914
915Changes gs_setcachedevice and gs_setcharwidth to take the graphics state
916as a parameter.
917
918Renames gx_device_memory_bitmap_size as gdev_mem_bitmap_size,
919mem_copy_scan_lines as gdev_mem_copy_scan_lines, and
920mem_bytes_per_scan_line as gdev_mem_bytes_per_scan_line.
921
922Version 2.1.1 (1/15/91)
923=============
924
925This is a sub-release distributed to fix a few early bugs in 2.1, just in
926time for the new GNU master tape.
927
928Build procedures
929----------------
930
931Removes all of the (undebugged) Level 2 code from the fileset, as well as
932the (unused) file gdevvga.c.
933
934Changes the tar file so that the files are stored in the directory
935gs<version> rather than simply gs, e.g., gs211.
936
937Interpreter
938-----------
939
940Changes the scanner so that \ is recognized within strings regardless of
941whether the scanner is reading from a string or from a file. This is
942compatible with newer P*stScr*pt interpreters, and with the newer
943P*stSc*pt language specification, but not with the older specification in
944the original PostScript Language Reference Manual.
945
946Drivers
947-------
948
949Fixes the max_value macro in gdevmem.c so that compilers won't complain
950about a left shift by 32.
951
952Adds 'byte' to the list of types that gdevx.c must sidestep because header
953files use them.
954
955Library
956-------
957
958Changes the computation of penum->unpack in gsimage.c so as not to upset
959compilers that don't treat procedures and pointers to procedures as
960compatible types for conditional expressions.
961
962Version 2.1 (12/31/90)
963===========
964
965This is primarily a bug fix release to clean up problems in 2.0. It also
966implements a first cut at the new color operators.
967
968Build procedures
969----------------
970
971Changes the separator for multiple directories in MS-DOS from ';' to '|',
972since there is no way to include a ';' in a command line.
973
974Adds <dir>/fonts to the default search path, where <dir> is c:/ghost for
975MS-DOS systems and `pwd` for Unix systems.
976
977Adds new documentation describing how to direct output to the printer.
978
979Changes the PROCTYPE and USE8087 options in MSDOS.MAK to CPU_TYPE and
980FPU_TYPE. The latter now indicates the type of FPU to generate code for,
981if any.
982
983Drivers
984-------
985
986Adds a driver for the Canon BubbleJet BJ10e.
987
988Modifies the EGA driver to handle (non-standard) frame buffers larger than
98964K. Adds drivers for the VGA and for the EIZO MDB-10 (a 1024 x 768 frame
990buffer).
991
992Changes the X driver so that it clips to the window dimensions, rather
993than reporting an error.
994
995Notes that the H-P LaserJet driver, like the DeskJet driver, works under
996Unix as well as MS-DOS.
997
998Adds support for 120 X DPI mode, and for the LQ-1500, to the Epson driver.
999
1000Fonts
1001-----
1002
1003Fixes bugs in bdftops:
1004 - It was using /UniqueId instead of /UniqueID as the key for the
1005font unique ID. This effectively disabled the font cache.
1006 - The definition for .notdef was bogus -- an invalid CharString.
1007
1008Changes ghost.ps and gfonts.ps so that NullFont is the initial font,
1009rather than Ugly.
1010
1011Arranges things so that when attempting a font substitution, if the
1012default font is not found, NullFont is used instead.
1013
1014Extends bdftops so that if certain easily synthesized characters are
1015missing from a font, it will attempt to synthesize them using available
1016characters.
1017
1018Interpreter
1019-----------
1020
1021Extends the -T switch to allow specifying a printf template for the
1022arguments of the procedure being traced.
1023
1024Fixes bugs:
1025 - /0 was interpreted as equivalent to 0 (a number) rather than a
1026literal name.
1027 - packedarray was defined as being like array, instead of like
1028array followed by astore.
1029 - Many minor and harmless type mismatches (and a couple of very
1030minor genuine bugs) were upsetting the Apollo C compiler.
1031 - exp was incorrectly failing in certain cases with a negative
1032first argument.
1033 - copyscanlines incorrectly required at least 4 elements on the
1034operand stack, although it correctly only used the top 3.
1035 - readhexstring incorrectly read 1 byte even if the string length
1036was zero.
1037 - Not every place that expected an array would accept a packed
1038array.
1039 - Very complex paths (and infrequently other things) could produce
1040a 'memory leak'.
1041 - / alone would skip following whitespace and gather following
1042characters, rather than creating an empty name.
1043 - ghost.ps left newerror defined as true in $error, which resulted
1044in an erroneous error report if a program executed a 'stop'.
1045 - The definition of exitserver in serverdict didn't clear the
1046stack.
1047 - currentfile returned an executable file, rather than a literal
1048one.
1049 - setfont for Type 1 fonts didn't check the UniqueID in the font
1050dictionary against the one in the font's Private dictionary.
1051 - A value stored in a dictionary under the key /xxx couldn't be
1052retrieved using the key (xxx), and vice versa.
1053 - charpath with a Type 1 font on a string containing a 'space'
1054would produce garbage (it released the parent path inappropriately).
1055 - bytesavailable did not work properly for terminal input.
1056
1057Changes the interface to the memory allocator so that it always takes an
1058element size and an element count, like calloc instead of malloc (but note
1059that alloc does *not* clear just-allocated blocks). Gets rid of the
1060special 'dynamic' allocation procedures.
1061
1062Changes the random number operators to use a better implementation.
1063
1064Changes the idiv operator so it will accept any numbers, not just
1065integers, as arguments. (The PostScript manual doesn't allow this, but
1066implementations apparently do.)
1067
1068Provides semi-fake but usable definitions for all of the color PostScript
1069extensions, including a real implementation of colorimage.
1070
1071No longer uses the name 'null', which is apparently reserved by Microsoft
1072C. Makes a number of other minor changes required to pacify the Microsoft
1073C compiler.
1074
1075Implements %statementedit and %lineedit. (%statementedit is equivalent to
1076%lineedit, which is wrong.) Changes the interactive interpreter to use
1077%statementedit.
1078
1079Changes the scanner to accept null, ctrl-K (vertical tab), and ctrl-L
1080(form feed) as whitespace. Ctrl-L terminates a comment, null and ctrl-K
1081do not.
1082
1083Allows a literal string as the 'proc' argument(s) for image, imagemask,
1084and colorimage.
1085
1086Adds the following operators/procedures: arct, cleardictstack, deletefile,
1087renamefile.
1088
1089Defines =print as a synonym for =, for the benefit of LaserPrep.
1090
1091Implements non-zero PaintType for the show operators (but not for
1092charpath) for Type 1 fonts.
1093
1094Adds the ISOLatin1Encoding encoding vector.
1095
1096Renames currentcolor and setcolor as currentgscolor and setgscolor, to
1097avoid conflict with the Level 2 PostScript names. Removes colorhsb,
1098colorrgb, hsbcolor, and rgbcolor.
1099
1100Library
1101-------
1102
1103Fixes bugs:
1104 - In a couple of places, a 0 was being passed as a pointer
1105argument without casting, which confused the Microsoft C compiler.
1106 - Image devices were not recognized properly in debugging
1107configurations.
1108 - Inverted-color monochrome image devices were not recognized
1109properly.
1110 - Images that exactly fill the drawing area rendered very slowly,
1111because they erroneously used the general clipping algorithm.
1112 - Images that are 1-for-1 with the device were incorrectly scaled
1113by a factor of 8 in X.
1114 - Rounding artifacts sometimes caused characters to be unevenly
1115offset vertically by 1 pixel.
1116 - Type 1 fonts that used the Flex feature resulted in garbled
1117images.
1118 - The show operator routines would incorrectly fill or stroke a
1119path that existed at the time the show was started.
1120 - setscreen truncated the cell size instead of rounding, which
1121could produce off-by-1 anomalies.
1122 - stroke would sometimes produce garbage (or nothing at all) for
1123very narrow lines.
1124 - path filling would only color the pixels whose centers fell
1125inside the path: the Adobe specification requires coloring a pixel if any
1126part of it falls inside the path.
1127
1128Changes the Epson printer driver so that it drives the printer directly
1129rather than writing to a file.
1130
1131Changes pathbbox so that if the path is empty but there is a current
1132point, it returns a null rectangle at the current point.
1133
1134Changes gs_image_init to take an additional parameter (after bps) giving
1135the number of samples per pixel (1, 3, or 4), and an indication of whether
1136the samples for each pixel are together or separated (-3 or -4).
1137
1138Renames the gs_image_data and gs_imagemask_data procedures as gs_image and
1139gs_imagemask, and removes the old versions of the latter.
1140
1141Adds gs_colorimage.
1142
1143Replaces Snoopy's color dithering algorithm with one contributed by Paul
1144Haeberli.
1145
1146Changes gs_setgray, gs_[set]hsbcolor, and gs_[set]rgbcolor so that they
1147coerce arguments outside the range [0..1] back into the range, instead of
1148signalling an error.
1149
1150Makes a number of minor changes required to pacify the Microsoft C
1151compiler.
1152
1153Changes gs_arcto so that if the last argument is a null pointer, the
1154tangent points are not returned.
1155
1156Removes gs_type1addpath, which is not useful. (Clients must call
1157gs_type1_init and gs_type1_interpret directly.)
1158
1159Implements the 'seac' opcode for Type 1 fonts, allowing fonts with accented
1160characters to display properly.
1161
1162Implements the undocumented 'testadd' opcode for Type 1 fonts, which is
1163used by some Adobe fonts.
1164
1165Renames gs_currentcolor and gs_setcolor as gs_currentgscolor and
1166gs_setgscolor. Removes gs_colorhsb, gs_colorrgb, gs_hsbcolor, and
1167gs_rgbcolor.
1168
1169Version 2.0 (9/12/90)
1170===========
1171
1172The main purpose of this release is to add fonts, support for multiple
1173devices, and imaging into memory. It also fixes a number of miscellaneous
1174bugs. (Unfortunately, accurate records of the bugs fixed are not
1175available.) The changes were so extensive that we chose to increment the
1176major version number.
1177
1178Miscellaneous
1179-------------
1180
1181Doesn't attempt to open the .MAP file on Unix systems.
1182
1183Adds mention of statusd.ps to interp.doc.
1184
1185Notes that Turbo C 2.0, not 1.5, is required for building the MS-DOS
1186version.
1187
1188Adds a DEVICES= line to the makefile, and allows multiple devices.
1189
1190Documents, in interp.doc, the X Windows resources that Ghostscript
1191recognizes.
1192
1193Adds three PostScript masters to the fileset: chess.ps (+ cheq.ps),
1194golfer.ps, and escher.ps.
1195
1196Drivers
1197-------
1198
1199Changes the names of all the device drivers. See gdevs.mak for the
1200updated list.
1201
1202Adds a (working) driver for SunView.
1203
1204Adds drivers for the Sony NeWS frame buffer, and the Sony Microsystems
1205NWP533 printers. These drivers were contributed by users, so we aren't
1206prepared to answer questions about them.
1207
1208Adds a driver for the Borland Graphics Interface (BGI) for MS-DOS systems.
1209Note that to use this driver with a non-EGA/VGA display, you need a .BGI
1210file appropriate for your hardware. (The Ghostscript executable includes
1211the EGA/VGA driver.)
1212
1213Adds a driver for Epson printers. The driver has only been tested on an
1214LX-800, and on an H-P DeskJet in FX-80 emulation mode, but may work on
1215other models. The driver could be adapted to work on Unix systems, but as
1216distributed, it only works on MS-DOS systems.
1217
1218Adds a driver for the Hewlett-Packard DeskJet printer. The driver could
1219be adapted to work on Unix systems, but as distributed, it only works on
1220MS-DOS systems.
1221
1222The X Windows driver no longer waits for the user to type a character
1223before bringing up the initial display.
1224
1225Adds information to drivers.doc describing how to change the definition of
1226the device structure and procedure table.
1227
1228Extends the tile_rectangle and tile_trapezoid driver procedures to
1229interpret color0 = color1 = gx_no_color_index as meaning that the tile is
1230actually colored, not a mask.
1231
1232Build procedures
1233----------------
1234
1235Changes the tar file so it puts everything in a directory called gs.
1236
1237Removes the -ansi switch for gcc (this was causing problems with <math.h>
1238on some systems).
1239
1240Changes LDPLAT to the string -X, which is appropriate for most Unix
1241systems (but not for SunOS 4.n).
1242
1243Adds EXTRALIBS to the makefile, for specifying additional libraries to be
1244linked in.
1245
1246Adds a 'clean' target for 'make', to get rid of all temporary files, the
1247binaries, and the executable.
1248
1249Changes names of system-specific files from gp-xxx.c to gp_xxx.c.
1250
1251Adds support for VMS (gp_vms.c and ghost.dcl).
1252
1253Creates a new file gdevs.mak, and reorganizes the other makefiles, so that
1254the choice of which device driver(s) to include is isolated in a single
1255line in the platform-specific makefile.
1256
1257Changes the standard MS-DOS makefile so it builds for 8088/86 (not 80386),
1258with neither -DNOPRIVATE nor -DDEBUG.
1259
1260Changes the name of the MS-DOS makefile from dos-ega.mak to msdos.mak, and
1261the Unix makefiles from ux-[g]cc-x.mak to unix-[g]cc.mak.
1262
1263Updates drivers.doc to describe how to add new drivers in gdevs.mak.
1264
1265Removes gdevs.ps: the drivers are now responsible for specifying the size
1266of the imaging region.
1267
1268Interpreter
1269-----------
1270
1271Adds a makefile macro GS_LIB_DEFAULT and an environment variable GS_LIB to
1272define a search path for the library (initialization and font) files, and
1273implements the -I switch for the same purpose (replacing -sLIB=, which was
1274never actually implemented). See interp.doc for details.
1275
1276No longer clears the operand stack between interactive inputs. No longer
1277prints the contents of the operand stack after every input in debug mode.
1278
1279Doesn't "eat" the character that the user types to proceed after a
1280showpage, unless it's an isolated <return>.
1281
1282Changes the prompt so that it says
1283 GS>
1284if the operand stack is empty, or
1285 GS<n>
1286if there are n > 0 elements on the operand stack.
1287
1288Adds -w and -h switches to the command line, equivalent to -dWIDTH= and
1289-dHEIGHT= except that they require numeric arguments.
1290
1291Adds -q (quiet startup) switch to the command line, which suppresses some
1292initial messages and also has an effect equivalent to -dQUIET.
1293
1294Fixes bugs:
1295 - = and == caused an error on some kinds of objects if the object
1296didn't have read access.
1297 - cvs didn't print operator names.
1298 - The definition of dynamic_begin in iscan.c caused the DEC VMS C
1299compiler to produce incorrect code.
1300 - mul didn't return a correct (real) result when multiplying a
1301very large integer by an integer that wasn't very large.
1302 - eq and ne didn't work on files, fonts, save objects, and some
1303operators.
1304 - The scanner would sometimes blow up on floating point numbers
1305beginning with a '.'.
1306 - flushfile didn't pop its argument from the stack.
1307 - put and putinterval would store into a packed array.
1308 - a few operators didn't check properly for stack underflow.
1309 - cvrs produced wrong output for radix values greater than 10.
1310 - The scanner would convert upper-case letters in alternate-radix
1311numbers wrong on Unix systems.
1312 - String comparisons other than equality often produced the wrong
1313result if the strings were of different lengths.
1314 - An ifelse as the last thing inside a forall would confuse the
1315execution stack.
1316 - There were some omitted casts and 'private' declarations that
1317made the GNU compiler unhappy.
1318 - There was a memory leak in the image[mask] operators that caused
1319516 bytes to be permanently lost each time one of them was used.
1320 - Quoted strings of length greater than 50 and less than 100 would
1321get mangled when being read in.
1322 - The scanner didn't consume the whitespace character following a
1323token, so programs that read data out of the program file could get
1324confused.
1325 - Under rare circumstances, an object of size between 249 and 255
1326bytes could get allocated on top of another object.
1327
1328Allows bind to bind packed arrays, even though they aren't normally
1329writable.
1330
1331Changes the length operator to allow a name as the argument. (The
1332PostScript manual doesn't allow this, but implementations apparently do.)
1333
1334Changes the setcachedevice operator to allow the bounding box to be
1335specified as a 4-element array instead of 4 scalars. (The PostScript
1336manual doesn't allow this, but implementations apparently do.)
1337
1338Removes a line from ghost.ps that accidentally disabled the font cache.
1339
1340Implements memory devices (makeimagedevice, copyscanlines, and makedevice
1341for image devices). makeimagedevice is implemented only for 1, 8, 24, and
134232 bits per pixel.
1343
1344Changes the deviceparams operator so it pushes a mark on the stack below
1345the parameters. This is to allow for devices that have more than the
1346standard set of parameters.
1347
1348Replaces defaultdevicename with two new operators, getdevice and
1349devicename.
1350
1351Adds a flushpage operator that flushes any outstanding buffered output to
1352the screen. This is not the same as copypage: on printers, copypage
1353actually prints a page, whereas flushpage may do nothing; on displays,
1354flushpage and copypage may both flush output to a server.
1355
1356Adds an unread operator for pushing back a character into a file.
1357
1358Adds a description of proposed grayimage and colorimage operators to
1359ghost.doc, even though they aren't implemented yet.
1360
1361Changes the name of the currentfileposition operator to fileposition.
1362
1363Removes the framedevice operator, since the new device operators supersede
1364it.
1365
1366Adds a writeppmfile operator, for writing the contents of a memory device
1367to a ppm file.
1368
1369Makes Ghostscript work even when the >> operator doesn't sign-extend
1370negative numbers. (This has not been tested.)
1371
1372Adds the Symbol encoding to ghost.ps.
1373
1374Adds two new file-related operators, filename and findlibfile. See
1375ghost.doc and interp.doc for details.
1376
1377Adds type1encrypt and type1decrypt operators for manipulating Adobe Type 1
1378encoded fonts.
1379
1380Changes the imagecharpath and addcharpath operators to type1imagepath and
1381type1addpath. These operators now work with the Adobe Type 1 font
1382encoding.
1383
1384Adds the type1decryptfile operator for reading Adobe Type 1 encrypted
1385fonts.
1386
1387Library
1388-------
1389
1390Fixes bugs:
1391 - curveto and lineto didn't check for the current point being
1392defined.
1393 - stringwidth would fail if there was no current point.
1394 - There were omitted casts that made the GNU compiler unhappy.
1395 - Line caps and joins didn't always work.
1396 - Dashed lines didn't work at all.
1397 - If you read out the current matrix while inside a BuildChar
1398procedure, the result was garbage.
1399 - image[mask] would crash if you gave it a single string with more
1400than 64K-1 pixels (MS-DOS only).
1401 - Filling with a gray pattern sometimes wrote into pixels beyond
1402the right edge of the region (MS-DOS only).
1403 - The font cache would mistake fonts for each other if both fonts
1404had a default (unsupplied) "unique ID".
1405 - When a character was entered into the font cache for the first
1406time, sometimes it would display as garbage and/or displaced vertically
1407from its proper position.
1408
1409Implements gs_makeimagedevice, gs_copyscanlines, gs_getdevice,
1410gs_devicename, gs_flushpage, gs_writeppmfile, gs_type1encrypt,
1411gs_type1decrypt, gs_type1imagepath, and gs_type1addpath procedures
1412corresponding to the new operators in the interpreter (see preceding
1413section).
1414
1415Changes [gs_]setdevice so that it does an erasepage when it first opens
1416the device.
1417
1418Changes definition of gx_device structure as follows. NOTE: THIS AFFECTS
1419ALL DRIVERS.
1420
1421 - Removes bits_from_MSB (which wasn't actually used, in any case).
1422 Ghostscript now assumes officially, as it always did in
1423 practice, that device bitmaps are stored MSB first, i.e., X=0
1424 corresponds to the 0x80 bit in the first byte.
1425
1426 - Removes the initial_matrix member, which wasn't actually being
1427 set up.
1428
1429 - Adds a new member 'name', a string giving the device name.
1430
1431 - Adds new members 'x_pixels_per_inch' and 'y_pixels_per_inch'.
1432 These are only used by the default initial_matrix procedure
1433 (see below).
1434
1435 - Adds a new procedure 'output_page'. The default implementation
1436 (gx_default_output_page) just calls the sync_output procedure.
1437
1438 - Adds a new procedure 'get_initial_matrix'. The default
1439 procedure uses the width, height, and x/y_pixels_per_inch
1440 members to compute the matrix, assuming that X values run from
1441 right to left, and Y values run from top to bottom.
1442
1443Changes the names of the allocation procedure types gs_proc_alloc and
1444gs_proc_free to proc_alloc_t and proc_free_t, and moves them from gs.h to
1445std.h.
1446
1447Makes Ghostscript work even when the >> operator doesn't sign-extend
1448negative numbers. (This has not been tested.)
1449
1450Version 1.3 (6/20/89)
1451===========
1452
1453This release should have had a lot more things in it, but time pressure
1454and the already long delay in getting it out made it necessary to push it
1455out the door in an incomplete state (e.g., no testing on X systems
1456whatsoever).
1457
1458Interpreter
1459-----------
1460
1461Makes -d and -D equivalent on the command line. Adds a new switch -s / -S
1462that defines a name as a string rather than a token.
1463
1464Arranges things so that if -sLIB=_a_prefix_ is defined on the command
1465line, (filename) run will look for _a_prefix_filename before giving up if
1466filename isn't the name of an accessible file.
1467
1468Changes showpage from an operator to a procedure. The definition of
1469showpage in ghost.ps does a copypage, beeps the console, waits for the
1470user to type a character (normally a <return>, since line buffering is
1471always enabled), and then does an erasepage and an initgraphics.
1472
1473Adds a new initialization file, gdevs.ps, containing device-dependent
1474parameters. The default window size for X Windows is properly set to 612
1475x 792, i.e., 8.5" x 11".
1476
1477Adds a new optional initialization file, statusd.ps, that provides dummy
1478definitions for the names found in statusdict on LaserWriters.
1479
1480Adds a new operator, getenv, to get information from the shell
1481environment.
1482
1483Adds a new predefined operator, defaultdevicename, that returns either (X)
1484or (EGA) according to how the interpreter was built.
1485
1486Adds a new type, devicetype, and new operators deviceparams, getscanlines,
1487makedevice, makeimagedevice, and setdevice. Changes currentdevice to
1488return a device object rather than a set of parameters.
1489
1490Makes the scanner recognize reals with 'e' exponent notation, and handle
1491reals with more than 9 digits.
1492
1493Fixes a bug that made names starting with digits read incorrectly.
1494
1495Fixes a bug in the exp operator that made it not pop its first argument
1496from the stack.
1497
1498Fixes a bug in the rand operator that made it return negative values about
1499half the time.
1500
1501Fixes a bug in equality comparison (eq, ne, and several other operators)
1502that made unequal operator objects occasionally appear to be equal on DOS
1503systems.
1504
1505Fixes a bug in the bind operator that made it not work on packed arrays.
1506
1507Changes the internal representation of dictionaries so they can be
1508expanded or contracted dynamically. Adds a new operator, setmaxlength, to
1509change the allocated size of a dictionary.
1510
1511Changes sstorei.h so that non-DOS compilers don't encounter the #pragma
1512directive used by Turbo C.
1513
1514Restores the display mode (on MS-DOS systems) when exiting.
1515
1516Fonts
1517-----
1518
1519Makes undefined characters in the standard font display as tilde rather
1520than blank (or causing an error). Unmapped character codes (those mapped
1521to .notdef in the encoding) still display as nothing, per the PostScript
1522manual.
1523
1524Library
1525-------
1526
1527Adds a new header file, gxbitmap.h, with some new documentation describing
1528the internal storage format for bitmaps.
1529
1530Makes numerous internal changes in the character / font cache, affecting
1531many of the routines in gxcache.c.
1532
1533Fixes a bug in gz_draw_line / gz_fill_trapezoid that made nearly
1534horizontal lines display wrong.
1535
1536Fixes a bug in gs_scale that made scaling not work if the coordinate
1537system was rotated or skewed.
1538
1539Extends the font cache so it will handle characters rotated by multiples
1540of 90 degrees.
1541
1542Changes the second argument of gx_path_bbox and gx_path_is_rectangle to be
1543a gs_fixed_rect * rather than a fixed [4].
1544
1545Changes gs_matrix_rotate so it handles multiples of 90 degrees as a
1546special case.
1547
1548Changes the definition of the gx_device structure to accommodate the new
1549device operators, and adds corresponding library calls.
1550
1551Changes the type for a device color index from int to gx_color_index
1552(equivalent to unsigned long). ***NOTE***: this affects existing clients
1553and drivers in a non-trivial way on MS-DOS systems.
1554
1555Changes gs_malloc and gs_free to take a client name string as an argument.
1556
1557Usage procedures
1558----------------
1559
1560Changes the compilation rules for Unix systems to not use the -o and -c
1561compiler flags together, to be compatible with more versions of cc.
1562
1563Changes the gcc makefile to use $(GCC) rather than gcc as the compiler
1564name.
1565
1566Moves the -1 flag for the MS-DOS compiler from the cc*.bat files to the
1567makefile.
1568
1569Changes CCDEBUG to CCFLAGS, and adds ASMFLAGS, in DOS makefile.
1570
1571Adds -DFOR80386 and /DFOR80386 to enable use of 80386 instructions in
1572assembly code on DOS systems.
1573
1574Merges the DEBUG and gs_DEBUG switches. There is now only a single DEBUG
1575switch that affects both the interpreter and the library.
1576
1577Adds a new compilation switch, -DNOPRIVATE, that makes private (static)
1578variables and procedures public for debugging and profiling (only needed
1579on DOS systems).
1580
1581Adds the DOS executable (gs.exe and gs.map) to the distribution fileset.
1582
1583Adds new platform-specific code files, gp-*.c, for a few things like
1584reading the clock.
1585
1586Adds a new documentation file, drivers.doc, that describes the interface
1587between Ghostscript and device drivers.
1588
1589Version 1.2 (2/22/89)
1590===========
1591
1592Interpreter
1593-----------
1594
1595Adds the new facilities in version 25 of PostScript: //name for immediate
1596lookup, packed arrays (setpacking, currentpacking, packedarray operators),
1597and new font cache parameters (setcacheparams, currentcacheparams
1598operators).
1599
1600Adds new operators (setfileposition, currentfileposition) for random
1601access to files.
1602
1603Extends readhexstring to take either a string or a file, just like token.
1604
1605Fixes a bug that caused the 'for' operator (and a couple of others) to
1606randomly smash memory locations on PC platforms.
1607
1608Library
1609-------
1610
1611Renames the init_device driver procedure as open_device, and adds a
1612corresponding close_device.
1613
1614Adds new procedures to read and set the cache limit values (implementing
1615the currentcacheparams and setcacheparams operators).
1616
1617Usage procedures
1618----------------
1619
1620Changes the name of the Unix makefile to ux-cc-x.mak, and adds a new Unix
1621makefile, ux-gcc-x.mak, for using gcc instead of cc. (The latter doesn't
1622actually work yet.)
1623
1624Changes the name of the single built-in font from uglyfont.cp to
1625ugly10.cp.
1626
1627Version 1.1 (2/12/89)
1628===========
1629
1630Interpreter
1631-----------
1632
1633Makes the scanner treat ^Z (ASCII code 26) as whitespace: it erroneously
1634treated ^R (ASCII code 22, or octal 26) as whitespace.
1635
1636Makes the token and readline operators, and the syntax for comments,
1637recognize \r (code 13), \n (code 10), and \r\n as equivalent end-of-line
1638indicators. The token and readline operators will skip over any of these
1639sequences at the end of a token or line respectively, and a comment will
1640read through any of these sequences. The other file operators (read,
1641write, readstring, writestring) do nothing special with these characters.
1642
1643Changes the debug switch name from -D to -Z. Adds a -D switch for
1644defining names in systemdict from the command line. Defines -DDEBUG for
1645printing out debugging information during initialization, and -DNODISPLAY
1646for suppressing display output.
1647
1648Corrects a bug that prevented the error machinery from working -- in
1649version 1.0, errors always dumped the stacks and aborted interpretation.
1650
1651Corrects a bug that made eq and ne not work for strings.
1652
1653Makes the atan (arctangent) operator normalize its results according to
1654the PostScript convention.
1655
1656Makes the div operator check for zero divisor.
1657
1658Makes unimplemented operators (resetfile, echo, save, restore, strokepath,
1659reversepath) truly undefined.
1660
1661Makes the interactive loop exit gracefully on end-of-file: in version 1.0
1662this caused an infinite loop.
1663
1664Implements the status operator.
1665
1666Corrects a bug that made the 'for' operator deliver garbage values if one
1667or more of the operands (start, increment, end) was a real.
1668
1669Corrects a bug that made the arc and arcn operators not pop their operands
1670from the stack.
1671
1672Corrects a bug that made the kshow operator crash the interpreter.
1673
1674Corrects a bug that made the print operator fail on machines that don't
1675pass structure arguments by simply pushing the contents of the structure.
1676
1677Adds a new operator, imagecharpath, to convert images to
1678addcharpath-compatible outlines.
1679
1680Changes alloc and alloc_free to use char * rather than byte *, and
1681alloc_free to return void rather than int, making them compatible with the
1682library's expectations and with malloc/free.
1683
1684Explicitly casts all expressions of the form (ptr1 - ptr2) used as
1685procedure arguments to unsigned, to handle an incompatibility between
1686Turbo C versions 1.5 and 2.0.
1687
1688Changes some of the internal conventions for operators: operators that
1689push on the operand stack must check for overflow explicitly, and
1690operators that modify the execution stack must return a special code.
1691(See oper.h for details.)
1692
1693Initialization (ghost.ps, gfonts.ps)
1694--------------
1695
1696Modifies ghost.ps and gfonts.ps so they print debugging information only
1697if the name DEBUG is defined. (Presumably the user will set this from the
1698command line with -DDEBUG.)
1699
1700Changes ghost.ps so it initializes the nominal screen size to 640 x 350 on
1701MS-DOS systems as before, but to 612 x 792 on Unix systems, which is an
17028.5" x 11" page at 72 pixels per inch.
1703
1704Library
1705-------
1706
1707Corrects a bug that made the fill and eofill operators (gs_fill and
1708gs_eofill) not perform a newpath afterward.
1709
1710Corrects the bug that made thin, nearly horizontal lines display wrong (as
1711a series of disconnected dots) in the MS-DOS implementation.
1712
1713Fixes a bug in the EGA driver that often made it fill rectangular regions
1714with black around information being displayed in white.
1715
1716Completely changes the internal representation of outline fonts, and
1717changes btoi.ps (a Ghostscript language program for converting bitmaps to
1718outlines) to use a new library call, gs_imagecharpath.
1719
1720Changes the extension for outline font files from .gf to .cp.
1721
1722Adds a new debugging switch, q, that traces all rectangle fill operations.
1723
1724Adds a new debugging switch, v, that traces all device-level output calls.
1725
1726Explicitly casts pointer differences passed as procedure arguments, as in
1727the interpreter.
1728
1729Makes stringwidth work if there is no current point. In version 1.0, this
1730gave a nocurrentpoint error.
1731
1732Usage procedures
1733----------------
1734
1735Changes the name of the 'read me' file from READ.ME to README.
1736
1737Removes a bogus line (invoking the 'mcopy' utility) from the makefile.
1738
1739Splits up the makefile into a generic part (ghost.mak) and
1740platform-specific parts (dos-ega.mak, unix-x11.mak). The latter are what
1741is actually executed.
1742
1743Puts the definitions of the DEBUG and gs_DEBUG compilation flags into the
1744makefile instead of in ghost.h and gx.h respectively.
1745
1746Changes the names of the documentation files to be a little less cryptic.
1747Changes all the file names to lower-case in the documentation. Adds
1748installation information to make.doc.
1749
1750Changes all function definitions (but not prototype declarations) to ANSI
1751syntax, and adds a preprocessing step (ansi2knr) to convert them to K&R
1752syntax on Unix systems.
1753
1754Changes the normal MS-DOS link configuration to not assume the presence of
1755an 80x87 coprocessor, and describes how to increase performance if a
1756coprocessor is present.
1757
1758Changes the names of all the interpreter .c files, except stream.c, to
1759begin with 'i'.
1760
1761Version 1.0 (8/11/88)
1762===========
1763
1764First version released to the public.