| History of Ghostscript versions 2.n |
|---|
- Version 2.9.10-beta (7/28/94)
- Version 2.9.9-beta (6/23/94)
- Version 2.9.8 (6/20/94)
- Version 2.9.7-beta (6/5/94)
- Version 2.9.6-beta (5/23/94, not distributed to the public)
- Version 2.9.5-beta (4/11/94)
- Version 2.9.4-beta (2/19/94)
- Version 2.9.3-beta (1/19/94)
- Version 2.9.2-beta (1/2/94)
- Version 2.9.1-beta (12/7/93)
- Version 2.9-beta (12/6/93)
- Version 2.8-beta (11/10/93)
- Version 2.7.2-beta (10/11/93)
- Version 2.7.1-beta (10/4/93, not distributed to the public)
- Version 2.7-beta (9/20/93, not distributed to the public)
- Version 2.6.1 (5/28/93)
- Version 2.6 (5/9/93)
- Version 2.5.2 (9/20/92)
- Version 2.5.1 (9/11/92)
- Version 2.5 (8/18/92)
- Version 2.4.2 (5/8/92)
- Version 2.4.1 (4/21/92)
- Version 2.4 (3/25/92)
- Version 2.3 (8/28/91)
- Version 2.2 (6/1/91)
- Version 2.1.1 (1/15/91)
- Version 2.1 (12/31/90)
- Version 2.0 (9/12/90)
This document is a history of Ghostscript releases numbered 2.n. For more recent changes, see the the other history documents and, for the latest versions, the new:
News
History of Ghostscript versions 4.n
History of Ghostscript versions 3.n
History of Ghostscript versions 2.n (this document)
History of Ghostscript versions 1.n
For other information, see the Ghostscript overview.
Version 2.9.10-beta (7/28/94)
This is the last 2.9 beta, since 3.0 will be released on July 31.Documentation
Fixes bugs: - A | in gs.1 had a \ in front of it instead of \\. Adds a paragraph in gs.1 that tells how to select paper size. Notes in devs.mak that the cdj550 driver is the best one for the H-P DeskJet 520, and the pjxl300 driver is the right one for the H-P DeskJet 1200C. Notes in make.doc that Watcom C++ 10.0 may require a change in a makefile.Procedures
Removes ICCINIT from MODULES.LIS for VMS systems. Updates VMS.MAK to support Motif V1.2. Updates jpeg.mak to work with version 5alpha4 of the IJG JPEG code.Utilities
Fixes bugs: - font2c didn't leave extra room in Type 0 font dictionaries for entries added by definefont. - font2c left extra information on the stack. - ansi2knr would remove newline characters within formal argument lists. - font2c got an Error: /undefined in makefontprocname. Updates ansi2knr to work better with the GNU configure program. Updates ansi2knr to handle procedure formal arguments automatically.Drivers
Fixes bugs: - If a file contained color or gray-scale information followed by a masked image, the X driver would sometimes invert the polarity of the image.Platforms
Fixes bugs: - Unix systems with a 2-argument gettimeofday returned garbage values for the current time. - The VMS build script for compiled fonts omitted the requirement to load gs_ccfnt.ps. - memory_.h didn't note that System V Unix platforms need memmove. On Unix systems, changes the subdirectory of $datadir/ghostscript to just be the version number (e.g., 2.9.10 rather than gs-2.9.9).Fonts
Adds support code for the Wadalab (University of Tokyo) free Kanji font. Notes in the documentation in Fontmap that .pfa and .pfb fonts are compatible with ATM, but .gsf fonts are not. Changes the names of Thomas Wolff's expanded Hershey fonts, replacing .gsf with .pfa.Interpreter
Fixes bugs: - The scanner became confused if the literal names /<< or />> straddled an input buffer boundary. - .setlanguagelevel gave an invalidaccess error when switching from level 2 to level 1. - currentgstate, setgstate, and copy for gstates didn't do the necessary access checks. - The Category resource category didn't define .ResourceFile, so /Category resourcestatus gave an error. - The garbage collector didn't trace the structures used by filenameforall properly on most platforms. - Automatically expanding systemdict didn't work, but didn't give an error. - Automatically expanding a dictionary usually expanded it by too much. - systemdict was created too small. - The garbage collector didn't trace the structures referenced only from allocator objects, leading to attempts to access freed storage. - If a chunk was empty, the GC tried to free it even if it had inner chunks. * - The outer loop in dict_find_name_by_index() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - The heap_available procedure in gsmemory.c didn't convert properly to non-ANSI syntax. (New bug in 2.9.9.) - The ledgertray procedure wasn't implemented. - The xxxtray procedures didn't set the page size. - The settumble operator wasn't implemented, even as a dummy. - glyphshow didn't work with Type 3 fonts. - Supplying a RenderTable for a CIE color space caused an error. - The DCT filter code had the jpeg/ subdirectory name "wired in" to the source files. Adds experimental filters for Burrows/Wheeler block sorting compression (BWBlockSortEncode/Decode), described in DEC SRC Research Report #124, move-to-front coding (MoveToFrontEncode/Decode), and a simple form of Huffman coding (BoundedHuffmanEncode/Decode). These are experimental -- do not rely on them remaining the same (or existing at all) in future releases! Adds all function prototypes needed to pacify strict compilers. Removes all explicit references to userdict from the C code. Changes the SAFER switch so that it disallows not only explicit writing, deleting, or renaming of files, but also disallows specifying an explicit OutputFile for any device (except for the initial device, by means of -sOutputFile= on the command line).Streams
Fixes bugs: - Hex decoding (ASCIIHexDecode stream and <> literals) didn't treat the data source as read-only (although it restored it to its original contents). Implements move-to-front coding, a simple form of Huffman coding, and Burrows/Wheeler block sorting compression.Library
Fixes bugs: * - (The following bug fix was actually implemented somewhere around version 2.7.) restore didn't purge character cache entries whose keys were names created more recently than the save. - gstype1.h declared gs_type1_state_sizeof as an extern, but this wasn't defined anywhere. - gs_makeimagedevice didn't set the size of the palette correctly, which confused the GC. - gs_makeimagedevice didn't set num_components to 1 for mapped-color devices with only gray values. * - The two-color halftoning algorithms truncated when computing the halftone level, rather than rounding it. * - If a path being filled had line segments that fell entirely to the right of the clipping region, part of the path might not be filled. - The optimized code for 24-bit color didn't ensure properly that 32-bit accesses would be aligned appropriately. - The miter join check had gotten reversed somewhere along the way. * - Because x and y were interchanged in the miter check computation, in some situations the check was inverted. (This is a very old bug!) - It was believed that strokepath didn't work with dashed lines; the problem appears to have been an incorrect testing program. Adds all function prototypes needed to pacify strict compilers. Changes fixed2float so it doesn't cast the result to float, and removes fixed2double. This produces slightly more accurate results in many places, and may even be faster (for FPUs that normally generate double rather than single precision results).Version 2.9.9-beta (6/23/94)
Documentation
Puts a pointer to devs.mak in the section of use.doc that talks about MS-DOS displays.Platforms
Fixes bugs: - The %pipe% IODevice was omitted on System V platforms. - The AXP VMS build script needed /NESTED_INCLUDE=PRIMARY in CC_QUAL to work around a bug in the DEC C compiler.Fonts
Fixes bugs: - gs_lev2.ps redefined .loadFontmap incorrectly.Interpreter
Fixes bugs: - stream_compact used memcpy even though the source and destination might overlap. - filter applied to a closed file could cause a crash.Library
Fixes bugs: - putdeviceparams to a printer didn't close and reopen the device if only the page size or resolution was changed.Version 2.9.8 (6/20/94)
This is the first version that claims to be a full Level 2 implementation. It was distributed to satisfy a contractual requirement.Documentation
In make.doc: - Adds a reference to the generic System V section at the end of the SCO section. - Notes that DEC OSF/1 systems may require changing the name of the install program to installbsd. Updates drivers.doc to reflect the change from "properties" to "parameters". Updates the Aladdin Enterprises Free Public License to version 1. In language.doc, notes that certain device parameters will be phased out.Procedures
Fixes bugs: - The file aa.ps was included in the distribution by mistake. Notes in the Unix makefiles that X11R6 probably needs SM and ICE added to XLIBS.Utilities
Fixes bugs: - viewjpeg.ps used a non-existent file as its example. - A temporary string in wrfont.ps was allocated too small. Upgrades font2c.ps so it will handle (simple) Type 0 fonts as well as Type 1.Drivers
Fixes bugs: - The TIFF drivers didn't byte-align each scan line. - gdevtfax.c applied & to an array member of a structure. Changes the param_list interface slightly: Implementations of the put_params driver procedure should now use param_signal_error to report errors, and should not give up at the first error. (Even though this is a non-backward-compatible change, old implementations will continue to work; they just won't deliver complete results to the setpagedevice Policies machinery.)Platforms
Fixes bugs: - Removes the time zone adjustment from gp_get_clock in gp_unix.c, since the value returned by all Unix systems is bogus. - The DV/X makefile still included the dfaxhigh and dfaxlow drivers. - gssetmod.com (VMS command file) didn't work properly if the argument list was empty. - vms.mak, vms-axp.mak, and modules.lis hadn't been updated to reflect changes in 2.9.7. - The MS Windows version wouldn't link (overflowed the 64K primary data segment).Fonts
Makes the font substitution algorithm somewhat more intelligent.Interpreter
Fixes bugs: - Enumerating the pointers of a zero-length array of structures caused a divide by zero. - iref.h didn't protect itself against multiple inclusion. - The CCITTFaxEncode filter didn't byte-align the final end-of-block code if EndOfBlock and EncodedByteAlign were both true. - make_initial_dict in iinit.c used `name' as a formal parameter name, which some compilers believe conflicts with a typedef. - Not all internal operators had registered names. - The GC used memcpy, rather than bytes_copy, when compacting objects, even though the source and destination might overlap. - When debugging was enabled, gc_string_mark could give a spurious error indication. - vmstatus returned too small a value for the maximum VM. - The scanner could get into a loop when reading a radix-85 string. - The GC could get into a state where it was called after every allocation (because of the patch setting global = true in ireclaim). - The general path filling algorithm didn't skip regions that were completely outside the clipping box. - The gs_screen_enum structure contained a pointer (porder) that pointed into the middle of a structure, confusing the GC. Implements the BitmapWidths flag in fonts. The default of false means that we use scalable widths even with xfonts. Changes the Generic resource category so that ResourceFileName is optional. Changes the .getdeviceparams operator so that it takes an optional dictionary giving the set of keys whose values are wanted. Changes the .putdeviceparams operator so that it takes an optional policy dictionary specifying the action to be taken on errors, and returns a list of keys and errors if it fails, rather than causing an error. These are non-backward-compatible changes, but ordinary programs do not use these operators. Changes the names of some internal operators and procedures by adding a . to the beginning: currenttime devicename Implements currentpagedevice, and a small subset of setpagedevice. Only the following keys in the page device dictionary are known to the current implementation, and the ones marked with * are not actually processed: PageSize InputAttributes MediaColor, MediaWeight, MediaType, InsertSheet (for InputAttributes matching only) *ImagingBBox OutputAttributes OutputType (for OutputAttributes matching only) NumCopies HWResolution *Margins *Orientation (for all devices, not just roll devices) Policies Install BeginPage EndPage Does not implement: - Updating InputAttributes or OutputAttributes by sensing the state of the device; - Retrying media matching after an initial failure; - Automatic handling of portrait vs. landscape page size; - Recording the CTM after Install as the one to be used for defaultmatrix, initmatrix, and initgraphics. Also, media matching is normally disabled (with InputAttributes = null) for all devices. ****** We had to disable setpagedevice just before shipping this release, because of interactions with the older device handling machinery that we could not fix in the time available.Library
Fixes bugs: - 24-bit color (mem_true24_fill_rectangle and _copy_mono) had algorithm bugs. - A complex conditional expression in gx_render_gray wouldn't compile properly with the DECStation 3100 Ultrix 4.3 compiler. - The GC routines for gx_device_clip didn't handle the case where the 'current' pointer pointed to list.single. - gx_add_char_bits used memcpy, rather than bytes_copy, for compressing character bitmaps, even though the source and destination might overlap. - Some compilers require the definition of st_gstate_contents to precede the definitions of the GC procedures. - Filling a large rectangle (more than 1K of bitmap) with a colored halftone overwrote random areas of the stack. Changes gs_setcachedevice[2] to take a pointer to an array of floats, rather than 6 or 10 individual floats. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Implements the BitmapWidths flag in fonts.Version 2.9.7-beta (6/5/94)
Yet another pre-3.0 beta. The main features are a fairly reliable garbage collector, and function prototypes almost everywhere they are needed.Documentation
Fixes bugs: - The comment at the beginning of the zfindlibfile procedure was incorrect. Replaces the GNU License (the COPYING file) with version 0 of the new Aladdin Enterprises Free Public License (the PUBLIC file).Procedures
Fixes bugs: - The definition of cmykread.dev in gs.mak was incorrect (it modified color.dev). Adds the ability to specify a value for FONTPATH on the command line (-sFONTPATH=), overriding GS_FONTPATH. Replaces the -oper2 configuration resource type with the ability to specify in the op_def list the dictionary in which operators will be defined. (See opdef.h for more details.) This is an internal change only.Utilities
Fixes bugs: - viewgif.ps got an error on interlaced GIF files whose height wasn't a multiple of 8. Changes traceop.ps so it stores the traced operator in the same dictionary where the operator is currently defined, if possible.Drivers
Fixes bugs: - The new G3 fax drivers crashed on page widths greater than 2623 (40 * 64 + 63) pixels. (We fixed this by disallowing page widths greater than approximately twice this.) - The 24-bit PCX driver had some debugging code accidentally left in it that produced large volumes of useless console output. Removes the previous (Leffler) TIFF/F driver and the TruFax driver.Platforms
Fixes bugs: - time_.h, gp_unix.c, and gp_sysv.c didn't do the right thing on SVR4 platforms, where gettimeofday only takes 1 argument. - The final linking command on Turbo C platforms didn't specify the COMPDIR directory for the linker.Fonts
Changes the standard Fontmap to use the URW contributed fonts as work-alikes for Helvetica and Times Roman.Interpreter
Fixes bugs: - The garbage collector wasn't in a consistent state. - In Level 2 mode, statusdict was allocated in global VM rather than local VM. - resourceforall gave an error on the built-in categories such as Filter. - The file searching algorithm didn't check the current directory first. - When opening a file failed, it didn't return a different error depending on the problem. - The CCITTFaxEncode filter crashed on widths larger than 2623 (64 * 40 + 63) pixels. (We fixed this by disallowing page widths greater than approximately twice this.) - The .type1getsbw operator gave an invalidfont error if a CharString started with anything other than a [h]sbw. (Adobe's published specs say this is invalid, but some Adobe MultiMaster fonts start with a callsubr and/or a callothersubr.) - When printing out the stack with == after an error, the error handler got a repeated (and ultimately fatal) typecheck error if it encountered an object of non-standard type. - The token operator could incorrectly attempt to free a structure on the stack if it encountered an input buffer boundary. - string_to_ref didn't correctly set the a_local flag in the string object it created. - If the -c switch was the last switch on the command line, Ghostscript always exited without going into interactive mode. - copy didn't check for errors when copying a dictionary. Makes many minor changes (mostly adding prototypes) to reduce error and warning messages from gcc and other strict compilers. Adds files containing the 4 predefined PDF encodings (MacRoman, MacExpert, WinAnsi, and PDFDoc).Library
Fixes bugs: - image_bbox in gxccman.c could produce a division by 0 if a 0-width character was being entered into the cache. - gx_image_cached_char incorrectly specified a scale of 2x2 rather than 1x1 if it had to read bits from an xfont. - Stale pointers in the halftone cache weren't cleared properly by a restore. (We fixed this by making grestoreall clear the halftone cache.) - setdash used gs_malloc, rather than the current allocator, for allocating the dash pattern. - If one attempted to fill a very wide region with a colored halftone, gx_dc_ht_colored_fill_rectangle would loop indefinitely. - The container_offset in clipping devices was set incorrectly, causing the garbage collector to mangle pointers. Changes the fopen routine in IODevices so that it can return an arbitrary error code, rather than simply succeeding or failing. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It only affects IODevice implementations, of which there are very few. (It doesn't affect ordinary device drivers.) Changes the char_metrics xfont procedure so it returns the width as floating point numbers rather than integers. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It only affects xfont implementations, of which there are very few. Makes many minor changes (mostly adding prototypes) to reduce error and warning messages from gcc and other strict compilers.Version 2.9.6-beta (5/23/94, not distributed to the public)
This, too, was supposed to be the last beta release for public release 3.0. It was created primarily for a user who desperately needed a Level 1 system that would run properly on a 64-bit hardware architecture. The garbage collector is badly broken (it's in the middle of an architectural change); setpagedevice is still not implemented.Documentation
Documents the standard location of Type 1 fonts on AIX. Changes the last few mentions of Ghostview for Microsoft Windows to GSview for Windows. Notes that Solaris 2.n provides the X11 header files in a different place. Changes README to reflect the differentiation between Aladdin Ghostscript and GNU Ghostscript.Procedures
Fixes bugs: - The compilation rules for the modules that call the IJG library used -Ijpeg rather than -I$(JPEGSRC). - The rule for gslib.dev omitted echogs$(XE) as a prerequisite. Makes it possible to define the values of buildtime, copyright, revision, revisiondate, and serialnumber in the makefile.Utilities
Fixes bugs: - The viewgif.ps utility didn't handle local color tables. Updates ps2ai.ps to version 1.81.Drivers
Fixes bugs: - The TIFF and fax devices used some identical names, causing linker complaints. - The bj10e/bj200 driver inadvertently disabled the sheet feeder. (The change may not actually fix this bug, since we don't have either of these printers with a sheet feeder to test it on.) - The 'bit' device didn't map colors to pixel values correctly. - The monochrome PCL driver didn't work around the fact that the Canon LBP4i printer didn't clear its seed row correctly. Adds new drivers: - A user-contributed driver for the H-P DesignJet 650C. - A user-contributed driver for the Canon LIPS III printer. - A completely new tiffg3 driver with one based on the new, fast faxg3 code. This driver does not include any external code, and carries an Aladdin copyright. - A tiffg4 driver, also based on the fast CCITT filter code. Removes the tiffg3x driver that appeared briefly in 2.9.5, and renames the previous (Leffler) tiffg3 driver as tiffg3x. Adds support for A0, A1, and A2 paper sizes to PCL drivers. Changes all the names involving "props" to "params", for consistency with the header files, some other internal interfaces, and Adobe's terminology. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. However, it only affects devices that implement their own get_props and put_props procedures, of which there aren't very many.Platforms
Fixes bugs: - The DV/X makefile used X11 rather than X for the X11 library name. - The DV/X makefile incorrectly included the PC display drivers. - The DV/X makefile omitted gp_dosfs.$(OBJ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn't defined in Level 1 configurations. - setpagedevice didn't pop its argument. - Definitions in statusdict didn't change according to the current language level. - Separation color spaces didn't allow strings as color space names. - Due to a bug in chunk_locate_ptr, the garbage collector sometimes decided incorrectly that a pointer was pointing outside collectable space. - (Many other garbage collector bugs were fixed.) Implements additional Level 2 features: - Garbage collection for strings. - Expandable operand and dictionary stacks, and the ability to set the maximum size of these stacks. - Additional user and system parameters. The following are dummies: AccurateScreens, JobName, JobTimeout, WaitTimeout. - Procedure-based filters usable with cvx/exec and token. - Separation color spaces (always using the alternate space). (These were theoretically implemented in version 2.6, but they were never tested and were actually missing most of the implementation.) - VMThreshold and VMReclaim for invoking GC automatically. Adds a hook in iscan.c for parsing DSC comments. Adds encoding and decoding filters for the BCP and TBCP protocols. These are not fully implemented yet: - The interrupt and status request characters are ignored on input, and never generated on output; - The TBCP encoder doesn't emit the start-of-protocol string; - The TBCP decoder doesn't recognize the end-of-protocol string. Factors out Type 1 font capability as a separate feature. Changes the names of some files: packed.h to ipacked.h; bnum.h to ibnum.h. Changes the name of the value.index member of a ref to value.boolval. (Internal change only.)Library
Fixes bugs: - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile properly with non-ANSI compilers. - The JPEG library wouldn't compile properly with non-ANSI compilers. * - The platform font machinery gave up too easily in some cases. - CMYK devices needing halftoning converted the CMYK color to RGB. - The debugging code in arc_add (gspath.c) didn't print the output values correctly. Factors out Type 1 font capability as a separate feature.Version 2.9.4-beta (2/19/94)
Procedures
Changes Ghostscript's path searching algorithm so that it does not automatically look in the current directory first. (The former algorithm was more MS-DOS-like; the new one is more Unix-like.) If you want to include the current directory, you must include '.' in the search path. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Adds two new resource types for genconf.c: - -header filexxx.h adds #include "filexxx.h" to gconfig.h. - -libpath dir adds dir to the list of library search paths.Utilities
Fixes bugs: - impath.ps (used by bdftops) computed the starting X coordinate incorrectly, typically causing characters to be displaced slightly to the right. - pstoppm.ps didn't handle local and global VM properly. Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary PostScript files into a form compatible with Adobe Illustrator.Drivers
Adds new drivers: - A user-contributed driver for Imagen Impress laser printers. - A user-contributed driver for the DEC LA75plus printer.Platforms
Under OS/2, adds the ability to keep Ghostscript in memory for a specified number of minutes. Adds support for Win32 and Win32s. Changes the MS Windows platform font interface so that it does not attempt to render fonts at sizes smaller than 6 pixels. Changes the X Windows interface, which already did this for 4-point and smaller fonts, to also use a lower limit of 6 pixels. Also changes the X Windows platform font machinery so it does not render fonts at sizes larger than 36 pixels: at large sizes, Ghostscript does a perfectly good job, and some X font servers rasterize the entire font and lock up the entire window system while doing so.Interpreter
Fixes bugs: - currentdash always returned a new array of reals, rather than the actual argument of setdash. - Strings in binary object sequences read in as integers. - Because of a bug in chunk_locate_ptr, some large objects didn't get freed properly. - If an error occurred while processing an image, Ghostscript would attempt to free random blocks of storage. - Input filters discarded trailing data, rather than filling it out with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's not clear what other filters it should affect.) - The ASCII85Encode filter produced garbage output for the final 1-4 bytes before EOD. * - The TIFF output driver produced incorrect output for the second and subsequent pages if the output was being produced on multiple files. * - The default handleerror did a 'stop', which was not correct. - gpcheck.h converted all positive return codes to 0 if interrupt checking was enabled. - Images with multiple data sources didn't work. - Images with 12-bit sample values didn't work. - Images with a file as the data source read additional data beyond what was required. - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. - If %lineedit was opened multiple times, characters from later openings overwrote characters from earlier ones. - token returned garbage for the "remaining string" result when reading from a string, if it ) from the list of platform-specific files. - The DV/X makefile used : rather than ; for separating directory names in GS_LIB_DEFAULT. - x_.h omitted a needed alias for XtAppSetFallbackResources. - The makefile entry for System V Unix systems didn't include gp_unifn.$(OBJ). - The comment before LDFLAGS in the gcc makefiles incorrectly suggested using the -x switch on Ultrix platforms. - The forward declaration of quant_params in zfdct.c upset the Sun compiler because it declared a parameter as float rather than floatp. * - The Microsoft C compiler, like the Borland C compilers, only compares the offset part of segmented pointers.Fonts
Adds a fontmap suitable for use with Adobe Type Basics.Interpreter
Fixes bugs: - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on segmented systems. - The end_phase procedure in igc.c didn't work correctly on segmented systems. - Indexed color spaces didn't mark their base space properly when garbage collecting. - The garbage collector didn't work on segmented systems, because it smashed the lsize field of large objects with mark/reloc information. - Some structures didn't have correct associated GC procedures: gs_indexed_map, gs_client_pattern, gs_pattern_instance. - restore could free names or stack segments that were still referenced. * - If a packed object caused an error, the error object could be set to garbage rather than the correct object. * - Badly designed error handlers which use $error for temporary storage could cause a dictfull error. - Some compilers objected to the use of "dict" as a variable name in a scope where it was defined as a type. - IODevices were declared const and non-const inconsistently. - setpagedevice popped one object too many off the stack if the request included any subdictionaries that needed to be merged. - More garbage collector bugs were fixed. - If the current stack block was empty, Level 2 restore would give a spurious typecheck error. - The CCITTFaxEncode filter could get confused if it emptied the input and filled the output at the same time. - The CCITTFaxEncode filter could insert an extra EOL if it had to suspend at certain times. - The new parser for literal strings (as of 2.9.5) could mis-count internal parentheses if a parenthesis caused the internal buffer collecting the string to overflow. - If the current stack block had fewer than 3 elements, .type1addpath could report a spurious typecheck error. - Text rendering operations (show, stringwidth, etc.) caused a crash if the current color was a Pattern that hadn't already been rasterized. - If a program did a grestore when the graphics state stack was empty, the graphics state was initialized to unexpected (and, in some cases, invalid) values. - pathforall could cause a bogus stackoverflow if it overflowed the current stack block. - Closing an encoding filter with a procedure as target left the filter on the stack. * - The outer loop in dict_lookup() could cause an addressing fault on segmented machines when looking up Level 2 operators, because the offset could get decremented past 0. - There was an = instead of an == in a test in scanner_reloc_ptrs. - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted the last (gcst) argument. (Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs in it. Adds DiffEncode and DiffDecode filters that implement color prediction for the PDF variant of the LZWDecode filter. Changes the specification of .oserrorstring to be similar to getenv, where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written code should be using .oserrorstring. Adds oversampling for better character rasterizing.Library
Fixes bugs: - gx_dc_ht_colored_fill_rectangle gave a compiler warning because of a problem with const pointers. - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on big-endian platforms, causing compilation errors. - IODevices were declared const and non-const inconsistently. - The Type 1 rasterizer never enabled overshoot suppression. - stroke didn't fatten the line properly if stroke adjustment was enabled, or if the line was horizontal or vertical. * - The clipping test for characters was too strict by almost 1 pixel, leading to unnecessary clipping of text at the edge of the clipping box. * - The initial clipping box was computed incorrectly for devices whose initial transformation matrix included a rotation. Changed the implementation of clipping lists and show enumerators to use separate objects rather than embedded objects, to pacify the GC. (This is an internal change, not visible at the PostScript or API level.) Makes the character cache trim off left and right blank areas, as well as top and bottom. (Internal change.) Adds oversampling for better character rasterizing.Version 2.9.5-beta (4/11/94)
This was supposed to be the last beta release before 3.0, but it won't be. The only known major defects are the unreliable garbage collector, and the dummy implementation of setpagedevice/currentpagedevice.Documentation
Fixes bugs: - The file commnew.doc didn't belong in the fileset. Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. Adds a user-contributed `man' page for the ps2epsi utility.Procedures
Fixes bugs: - The IJG files didn't compile properly by themselves, because they didn't have $(AK) in their dependency list. Changes back the handling of files named on the command line, so that they are first sought in the current directory, and if that fails, use the search path. (2.9.4-beta changed things so that files on the command line did not use the search path, because as of that version, the search path doesn't necessarily include the current directory. I consider the "check the current directory and then use the search path" rule, which is the MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious mistake, since it is one of the best-known security holes in Unix and can also produce confusing and unexpected results depending on the current directory; I would much rather have a clear distinction between user-specified files, which should not use any path searching, and system files, that only use the defined search path. However, as of this moment, users seem to want the convenience at the expense of insecurity and confusion.) Adds '.' to the beginning of the search path for MS-DOS platforms, to conform to the usual MS-DOS file searching convention. Adds a -c ("code") switch, which interprets following arguments (until the next switch) as PostScript tokens. Changes the handling of FEATURE_DEVS so that either level1.dev or level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty definition.Utilities
Fixes bugs: - bench.ps didn't switch back to local VM properly before running the program being benchmarked. Adds a ppmsetpagesize command to the pstoppm utility.Drivers
Fixes bugs: - The PCX and GIF drivers used an incorrect algorithm for computing the blue component of the color palette, which could cause colors to come out with not quite enough blue. - The SPARCprinter driver wouldn't compile with non-ANSI compilers. Adds new drivers: - A user-contributed driver for DEC sixel displays like the VT240 (sxlcrt, in gdevln03.c, which has a FSF copyright.) - A much larger and supposedly faster version of the TIFF/F driver (tiffg3x, in gdevtifx.c), contributed by a user. This has the same copyright as the TIFF/F driver (gdevtiff.c). - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax output with no header, using the CCITTFaxEncode filter to do the work. (This is around 2.5-3 times as fast as the other fax drivers distributed with Ghostscript.) - A user-contributed driver for the Mitsubishi CP50 color printer. Changes the `bit' driver so one can set the Colors and *Values properties. Makes the color mapping for PC displays, PCX files, and GIF files identical (they differed slightly before).Platforms
Fixes bugs: - VMS used DISPLAY rather than DECW$DISPLAY to get the display name if opening the display failed. - Many minor bugs relating to OS/2 and Win32 were fixed. - On Unix and DV/X platforms, the install script didn't mkdir $(gsdir), and didn't mkdir the intermediate directory for the man page. - On BSD and UTek platforms, the declaration of memset in memory_.h, and the definition in gsmisc.c, conflicted with the ANSI declaration. - One of the SPARC compilers compiled the intersection computation in arc_either (gspath.c) incorrectly. - The temporary file names created under OS/2 could exceed the 8.3 length limit.Interpreter
Fixes bugs: - The test files for the IJG library had been damaged by EOL conversion. - The garbage collector didn't mark some of the most recently created names. - The interpreter would sometimes report a typecheck instead of a stackunderflow. - If aload didn't have enough room on the stack, it would report a rangecheck rather than a stackoverflow. - zcontext wouldn't compile, because it hadn't been updated to the new GC interfaces. - The definition of private_st_stream_proc_state in ifilter.h ended with a semicolon, which upset some compilers. - load didn't check to make sure that the dictionaries it examined had read access. - cvrs didn't handle negative numbers in radix 2 or 3 properly. - The allocator could become confused if it was asked to allocate a large array. - readline gave an ioerror rather than a rangecheck if it overflowed the string. - The allocator didn't free packed arrays properly. - The allocator's check for LIFO freeing of arrays was off by 1, so it never succeeded. - The undercolor removal and black generation procedures weren't initialized properly. - If the interpreter couldn't find gs_init.ps, it returned a random exit code. - If an operator expected a procedure and didn't get one, it sometimes gave an invalidaccess rather than a typecheck. - Unix file enumeration often did the wrong thing if there were directories in the pattern. - The ASCIIHexDecode filter read an extra character after the terminating >. - scalefont didn't fill in ScaleMatrix properly. - The CCITTFaxEncode filter crashed if the width of the page wasn't a multiple of 8 bits. - The error printing code used .languagelevel, which wasn'