home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 February / PCWK0296.iso / sharewar / dos / program / gs300sr1 / gs300sr1.exe / HISTORY.DOC < prev    next >
Text File  |  1994-07-27  |  123KB  |  3,246 lines

  1.    Copyright (C) 1992, 1993, 1994 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of Aladdin Ghostscript.
  4.   
  5.   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  6.   or distributor accepts any responsibility for the consequences of using it,
  7.   or for whether it serves any particular purpose or works at all, unless he
  8.   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  9.   License (the "License") for full details.
  10.   
  11.   Every copy of Aladdin Ghostscript must include a copy of the License,
  12.   normally in a plain ASCII text file named PUBLIC.  The License grants you
  13.   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  14.   under certain conditions described in the License.  Among other things, the
  15.   License requires that the copyright notice and this notice be preserved on
  16.   all copies.
  17.  
  18. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  19.  
  20. This file, history.doc, describes the changes in older releases of
  21. Ghostscript.  For more recent changes, see the NEWS file.
  22.  
  23. For an overview of Ghostscript and a list of the documentation files, see
  24. README.
  25.  
  26. Version 2.6.1 (5/28/93)
  27. =============
  28.  
  29. This is primarily a bug-fix release for 2.6, with a couple of minor
  30. additions.
  31.  
  32. Documentation
  33. -------------
  34.  
  35. Adds proper `man' pages ansi2knr.1 and gs.1.
  36.  
  37. Procedures
  38. ----------
  39.  
  40. Fixes bugs:
  41.     - The Unix makefile produced an incorrect linker command if
  42. EXTRALIBS was not empty.
  43.     - The Unix install commands didn't copy devices.doc,
  44. ps2epsi.doc, and xfonts.doc to the documentation directory.
  45.     - echogs.c didn't include <sys/types.h>, which is needed for
  46. time_t on some systems.
  47.     - malloc_.h used <malloc.h> rather than <stdlib.h> on
  48. NeXTStep systems.
  49.  
  50. Changes the configuration procedure to use a C program rather than
  51. complex shell scripts.
  52.  
  53. Utilities
  54. ---------
  55.  
  56. Fixes bugs:
  57.     - The boilerplate produced by ps2image used the 'max'
  58. operator, which is not a standard PostScript operator.
  59.     - The winmaps.ps utility had 'floring' instead of 'florin' in
  60. the OEMEncoding table.
  61.     - quit.ps was omitted from the PC distribution.
  62.  
  63. Changes the name of the dicttomark procedure to .dicttomark.
  64.  
  65. Renames gs_2asc.ps as ps2ascii.ps, so it matches the names of the
  66. script files.
  67.  
  68. Drivers
  69. -------
  70.  
  71. Fixes bugs:
  72.     - The pbmraw driver was writing out RGG instead of RGB values.
  73.     - The X11 driver used NULL in a place where it should have
  74. used None.
  75.     - For multi-file output, the GIF driver didn't write a header
  76. at the beginning of each file.
  77.     - The Epson driver didn't honor the -A4 compilation switch,
  78. didn't put (0,0) at the physical corner of the page, and was too
  79. liberal about using tabs instead of spaces.
  80.  
  81. Replaces the color handling algorithms in the X Windows driver with
  82. new, much better ones.
  83.  
  84. Makes the PC display drivers recognize the -A4 compilation switch,
  85. like the printer drivers.
  86.  
  87. Adds new user-contributed drivers:
  88.     - A driver for Epson printers that use the ESC/P 2 control
  89. language, such as the Stylus 800.
  90.     - A driver for the Apple Dot Matrix Printer and Imagewriter.
  91.  
  92. Adds a new get_xfont_device driver procedure.  This is a
  93. backward-compatible change, since there is a sensible default.
  94.  
  95. Platforms
  96. ---------
  97.  
  98. Fixes bugs:
  99.     - On VMS, gconfig.h didn't have #include "gsconfig.h" as its
  100. first line.
  101.     - gconfig.c compiled incorrectly on the RS/6000 because the
  102. compiler evaluated a constant of the form (x<<y)+z incorrectly.
  103.     - Quite a few files that used the mem... functions didn't
  104. include memory_.h, which caused trouble on some bsd4.2 systems.
  105.     - The definition of zfont_char_xglyph confused one of the AIX
  106. compilers.
  107.     - On VMS, DEC C allows extra arguments for fopen, but gcc doesn't.
  108.     - On the MS Windows platform, 2.6 used gdevwddb rather than
  109. gdevwdib; the latter is almost always faster.
  110.     - The PC .zip files didn't include the Windows .ICO and .RES
  111. files in either GSEXE.ZIP or GSFILES.ZIP.
  112.  
  113. On PC platforms, adds an option (FPU_TYPE=-1) to optimize for
  114. machines lacking a floating point processor.
  115.  
  116. Fonts
  117. -----
  118.  
  119. Adds 4 new fonts contributed by URW.  These have a URW copyright and
  120. are governed by the GNU License.
  121.  
  122. Documents the fact that font names in Fontmap can be strings, not
  123. only names.
  124.  
  125. Adds DingbatsEncoding as a predefined encoding (in addition to
  126. Standard, ISOLatin1, and Symbol).
  127.  
  128. Interpreter
  129. -----------
  130.  
  131. Fixes bugs:
  132.     - memchr (used in zfile.c) isn't available on all platforms.
  133.     - languagelevel was defined as an operator rather than an
  134. integer.
  135.     - iccfont.c referred to name_StandardEncoding instead of
  136. #include'ing font.h and referring just to StandardEncoding.
  137.     - The CCITTFaxDecode filter didn't work on 32- (or 64-) bit
  138. machines, because of a bug in more_bits().
  139.     - The structures recording an allocation within the scope of
  140. a save could get allocated unnecessarily, because they weren't
  141. properly marked as free when an array was freed.
  142.  
  143. Renames the following Ghostscript-specific operators by adding a '.'
  144. at the front: makeoperator, setdebug, setmaxlength, stringmatch,
  145. type1decrypt, type1encrypt.
  146.  
  147. Adds a real implementation of glyphshow.
  148.  
  149. Library
  150. -------
  151.  
  152. Fixes bugs:
  153.     - Discarding fractional character coordinates in the Type 1
  154. rasterizer led to some rendering anomalies (e.g., characters 1 pixel
  155. too high).
  156.     - If a font had a non-standard encoding (i.e., not
  157. StandardEncoding, ISOLatin1Encoding, or SymbolEncoding), Ghostscript
  158. would never invoke the platform font code.
  159.     - The RGB to HSB color conversion algorithms produced
  160. nonsensical values.
  161.     - struct cached_char_s was defined redundantly in gxcdir.h,
  162. causing compilation problems on some systems.
  163.     - 32-bit color devices didn't work properly on little-endian
  164. machines (arrange_bytes in gdevmem2 was wrong).
  165.     - The scaled font cache could confuse two fonts with the same
  166. UniqueID and different Encodings.
  167.     - Under many common circumstances (first use of a character
  168. was with stringwidth, the font was renamed, the font encoding was
  169. changed), xfonts would not be used.
  170.  
  171. Adds gs_glyphshow.
  172.  
  173. Version 2.6 (5/9/93)
  174. ===========
  175.  
  176. The main new feature in this release is the ability to use platform
  177. fonts.  It also adds many more Level 2 PostScript facilities.
  178.  
  179. Documentation
  180. -------------
  181.  
  182. Corrects some errors in the documentation of the makeimagedevice operator.
  183.  
  184. Adds operand and result types to the comments at the beginning of all the
  185. operators.
  186.  
  187. Adds new sections on installation in use.doc.
  188.  
  189. Reinstates history.doc as a repository for old and no longer interesting
  190. history information.
  191.  
  192. Adds a new file, devices.doc, with documentation for specific devices.
  193.  
  194. Points out that font2c must be run with a Fontmap that includes the fonts
  195. being converted, and that its arguments must be quoted with "" on VMS
  196. systems.
  197.  
  198. Notes that the font name in the Fontmap must be the same as the FontName
  199. in the font.
  200.  
  201. Adds a list of the Level 2 facilities not provided by Ghostscript.
  202.  
  203. Identifies bug-ghostscript@prep.ai.mit.edu as an alias for the
  204. gnu.ghostscript.bug newsgroup.
  205.  
  206. Points out explicitly that -sOutputFile=- sends output to stdout, and
  207. requires using the -q switch.
  208.  
  209. Documents the use of tar_cat to construct the Unix makefiles.
  210.  
  211. Adds a new file, xfonts.doc, that describes the external font interface.
  212.  
  213. Documents the fact that drivers must use gs_malloc and gs_free rather than
  214. malloc and free.
  215.  
  216. Documents the *.sh (shell script) files.
  217.  
  218. Adds brief documentation on some additional development tool .ps files.
  219.  
  220. Documents the TEMP and GS_OPTIONS environment variable.
  221.  
  222. Points out the need to run Windows in 386 Enhanced mode on machines
  223. that have less than 6 Mb of RAM.
  224.  
  225. Consolidates documentation on compiler switches in make.doc (some of
  226. it had been in the unix*.mak files).
  227.  
  228. Procedures
  229. ----------
  230.  
  231. Fixes bugs:
  232.     - \'s in arguments following -- were doubled.
  233.  
  234. Includes the full set of filters automatically if the level2 feature
  235. is selected.
  236.  
  237. Extends DEVICE_DEVS... up to DEVS9.  Adds DEVICE_DEVS1 as well.
  238.  
  239. Renames turboc.mak and tbcplus.mak as tc.mak and bc.mak.
  240.  
  241. Makes @-files use the library path (GS_LIB, -I).
  242.  
  243. Changed the Unix install script to use install <file> <destfile>
  244. rather than install <file> <directory>.
  245.  
  246. Adds a GS_OPTIONS environment variable that acts like an implicit @-file
  247. at the beginning of the command line (i.e., may contain switches and
  248. initialization files).
  249.  
  250. Renames sym__enc.ps as gs_sym_e.ps.
  251.  
  252. Adds a user-contributed shell script for using Ghostscript with an
  253. H-P printer spooler.
  254.  
  255. Adds level1.ps to the set of installed utility files.
  256.  
  257. Extends the TEMP environment variable (the directory for scratch
  258. files) to work on Unix as well as MS-DOS.
  259.  
  260. Changes the MS Windows makefile to generate gswin.exe rather than
  261. gs.exe, and the Watcom makefile to generate gs386.exe.
  262.  
  263. Moves the "product" string from gs_init.ps to iinit.c.
  264.  
  265. Adds a GS macro to the makefiles, to allow choosing the name of the
  266. executable.
  267.  
  268. Utilities
  269. ---------
  270.  
  271. Fixes bugs:
  272. *    - font2c did the wrong thing (still) for fonts that didn't
  273. use StandardEncoding, ISOLatin1Encoding, or SymbolEncoding.
  274. *    - impath.ps had a fatal bug (wrong operand order for
  275. charstack_write) that caused bdftops to fail.
  276.     - gslp didn't wrap or truncate lines.
  277.     - gslp didn't handle tabs in a second or subsequent column
  278. properly.
  279.     - The definition of ashow in gs_2asc.ps incorrectly undid the
  280. increment following the last character.
  281.     - The definition of awidthshow in gs_2asc.ps failed to pop
  282. two entries from the stack, and also tested the character against the
  283. wrong value.
  284.  
  285. Adds a shell script (sysvlp.sh) that interfaces Ghostscript with the
  286. System V 3.2 lp interface.
  287.  
  288. Adds ps2ascii and ps2epsi script/batch files.
  289.  
  290. Adds a new utility, mergeini.ps, for concatenating all the
  291. Ghostscript initialization files into a single file, optionally
  292. removing comments and blank lines.
  293.  
  294. Adds new switches to gslp:
  295.     -q: suppress all printed output.
  296.     --detect: check whether the file begins with %!, and if so,
  297.         interpret it directly as a PostScript file.
  298.     --first-page <page#>: replaces the former -P switch.
  299.     --last-page <page#>: replaces the former -Q switch.
  300.     --(heading|footing)-(left|center|right) <string>: define
  301.         headers/footers.  # inserts the page number.
  302.     --margin-(top|bottom|left|right) <inches>: define margins.
  303.     --spacing <n>: for double, triple, etc. spacing.
  304. Also makes gslp ignore all the enscript flags it doesn't implement.
  305.  
  306. Adds an option to wrfont.ps to do encryption at read-in time.  (This
  307. allows much better compression of the standard Ghostscript fonts.)
  308. Changes bdftops to use this option.
  309.  
  310. Changes gslp to accept wild cards in file names.
  311.  
  312. Replaces landscap.ps with a new one contributed by a user.
  313.  
  314. Changes the compression scheme used in ps2image to a much more
  315. effective one.  Writing images is much slower than with the previous
  316. scheme, but reading is not.
  317.  
  318. Platforms
  319. ---------
  320.  
  321. Fixes bugs:
  322.     - SCFDTAB and SCFTAB were omitted from the VMS module lists.
  323.     - Function prototypes were not being used with the Watcom
  324. compiler.
  325.     - On MS-DOS platforms, if the value of the TEMP variable had
  326. a trailing : or \, Ghostscript appended a \ anyway.
  327.     - Under Windows, changing the size or resolution of the image
  328. closed and reopened the window.
  329.     - Ghostscript would not build correctly with the Watcom compiler
  330. if DOS4G=quiet was not set, because the DOS4GW copyright message was sent
  331. to stdout.
  332. *    - Finally gets Ghostscript to run properly on the RS/6000, by
  333. adding a compiler bug workaround to arc_add and arc_either.
  334. *    - Finally gets Ghostscript to compile properly on Sun SPARC
  335. systems, by adding a compiler bug workaround in scan_number.
  336.  
  337. Changes the default MS-DOS configuration from 8086/8088 to 80286.
  338.  
  339. Adds all the SuperVGA drivers to the BC++ and Watcom executables
  340. (except for the VESA driver in the Watcom executable).
  341.  
  342. Adds a makefile (msc.mak) for the Microsoft C/C++ 7.0 platform.  This
  343. is currently a MS-DOS, not a MS Windows, platform.
  344.  
  345. Changes gp_enumerate_files_init so it takes a gs_memory_procs *, not
  346. separate proc_alloc_t and proc_free_t arguments; also, it must
  347. enumerate precisely the requested set of files, not a superset.  THIS
  348. IS A NON-BACKWARD-COMPATIBLE CHANGE.  It affects all gp_*.c files.
  349.  
  350. Adds the P*M drivers and bit.dev to the standard configuration on
  351. Unix platforms.
  352.  
  353. Changes the Watcom makefile so it uses the WATCOM environment variable (by
  354. default) as the base directory for the Watcom executables.
  355.  
  356. Adds the MS Windows COMMDLG.DLL and SHELL.DLL files to the set of
  357. files incorporated in GSEXE.ZIP, since the new MS Windows code uses
  358. them, and they aren't provided with Windows 3.0.
  359.  
  360. Makes major revisions to the MS Windows platform and driver code, to
  361. support the gsview front end, and also to remove the dependence on the
  362. Borland EasyWin library.  NOTE: Compiling the MS Windows code now requires
  363. Borland C++ 3.1 (not 3.0).
  364.  
  365. Changes time_.h so that Ghostscript will compile and run on A/UX.
  366.  
  367. Changes the MS-DOS implementation of file enumeration so it always
  368. treats \s in the file name as literal characters, not escapes, unless
  369. there are two \\s in a row.  This does the most sensible thing given
  370. the DOS file naming conventions.
  371.  
  372. Adds a %pipe% file device under Unix.
  373.  
  374. Adds a makefile for Watcom C under MS Windows.  This is very preliminary;
  375. in particular, NO display output is supported.
  376.  
  377. Fonts
  378. -----
  379.  
  380. Fixes bugs:
  381.     - fonts.mak referred to ncri and puti rather than ncrri and
  382. putri.
  383.     - cyr and cyri had the wrong protection.
  384.     - The Hershey fonts left the font on the stack when they were
  385. loaded.
  386. *    - The FontName of an aliased font was the original FontName
  387. from the file, not the alias.
  388. *    - Fontmap.BTS had incorrect entries for AvantGarde-Demi and
  389. AvantGarde-DemiOblique.
  390.     - Ghostscript pushed userdict, rather than an empty writable
  391. dictionary, onto the stack when loading a font, leading to name clashes.
  392.  
  393. Adds a new cfonts.mak with a full set of rules for compiling all the
  394. standard Ghostscript fonts (except the Hershey fonts) into C.
  395.  
  396. Adds UniqueIDs to the Hershey fonts, and removes the UniqueIDs from
  397. the Hershey entries in the Fontmap.
  398.  
  399. Adds a new Fontmap for VAX/VMS with DECWindows/Motif.
  400.  
  401. Changes MakeHersheyFont so it takes the encoding as an additional
  402. parameter, and changes the Hershey-Symbol font to use SymbolEncoding.
  403.  
  404. Drivers
  405. -------
  406.  
  407. Fixes bugs:
  408.     - The !@*&^%#@$ PCL drivers *still* didn't do the right thing
  409. about vertical spacing: the <ESC>*p+<n>Y command works on all PCL 3,
  410. 4, and 5 printers *except* the LaserJet IIp.
  411.     - The cdj driver used recursive macros (height, t_margin,
  412. b_margin) that not all compilers handled correctly.
  413.     - The djtc driver used some assignments including =*, which
  414. some compilers dislike.
  415.     - The S3 driver wouldn't compile correctly with the Watcom
  416. compiler.
  417.     - The makefile entry for the S3 driver was wrong.
  418.     - The SuperVGA drivers returned an error, rather than using
  419. the highest available resolution, if a too-high resolution was
  420. requested.
  421.     - The GIF driver produced an incorrect header for images
  422. wider or taller than 32K pixels.
  423.     - The GIF driver wasn't able to handle multi-page documents
  424. correctly.
  425.     - The margins on the DeskJet were still not correct.
  426.     - Some ANSI C compilers rejected a complex expression in
  427. gdevpccm.c.
  428.     - Printer drivers didn't recover cleanly from problems in
  429. opening the scratch files.
  430.     - The BJ-10e driver used the same name `out' for a label and
  431. a variable.
  432.     - The SCO ODT compiler couldn't handle sizeof(ppdev->fname).
  433.     - The Epson driver used the wrong value for ESC in the
  434. initialization string.
  435.  
  436. Adds new drivers:
  437.     - Drivers to produce MS Windows .BMP format output.
  438.     - A new ATI Wonder display driver (800x600, 16 colors) and a
  439. 1024x768 mode for the existing driver.
  440.  
  441. Adds new user-contributed drivers:
  442.     - A driver for the Tektronix 4693d color printer.  This carries a
  443. university copyright.
  444.     - A driver for the SPARCprinter.
  445.     - A driver for the Canon BJ200 printer.
  446.     - A driver for the IBM ProPrinter.
  447.     - A driver for the DEC LJ250 printer, which has a
  448. PaintJet-compatible mode.
  449.     - A replacement driver for the Sony NWP533.
  450.     - A driver that writes TIFF/F (Group 3 fax) files.  This carries
  451. an external copyright.
  452.     - A driver for the C.Itoh M8510 printer.
  453.     - A driver for the Okidata MicroLine 182 9-pin dot-matrix printer.
  454.     - A Hercules Graphics driver.
  455.     - A driver for printers under MS Windows.
  456.     - A driver for direct frame buffer addressing under SCO Unix
  457. and Xenix and AT&T SVR4.
  458.  
  459. Changes the get_bits driver procedure so it always reads a single
  460. scan line, and optionally does not copy the data.  THIS IS A
  461. NON-BACKWARD-COMPATIBLE CHANGE.  However, this change does not affect
  462. any existing printer driver, since these all go through intermediate
  463. routines in gdevprn.c.
  464.  
  465. Changes gdevprn.h, and the relevant printer drivers, so that -DA4
  466. will change the default paper size for any printer driver.
  467.  
  468. Allows the use of NULL or 0 for default procedures in the driver
  469. procedure vector.
  470.  
  471. Adds an optional map_cmyk_color procedure to the driver procedure
  472. vector.
  473.  
  474. Changes the Epson driver so that the minimum amount of white space
  475. required to use a tab is an easily changed parameter.
  476.  
  477. Changes the BGI driver to use separate segments for the Borland
  478. device drivers, to reduce the risk of overflowing a segment.
  479.  
  480. Adds an optimization option (normally enabled) to the PGM and PPM drivers
  481. such that they revert to PBM or (for PPM) PGM if the page can be
  482. represented that way.
  483.  
  484. Adds a new (optional) driver procedure to get the procedure vector
  485. for external fonts.
  486.  
  487. Adds an argument to gp_open_printer to indicate whether the file should be
  488. opened in binary or text mode.  THIS IS A NON-BACKWARD-COMPATIBLE CHANGE.
  489. However, this change does not affect any existing printer driver, since
  490. these all go through intermediate routines in gdevprn.c.
  491.  
  492. Changes the LN03/LA50/LA75 driver so it uses a text record mode to open
  493. the output file under VMS (by adding an argument to gp_open_printer to
  494. indicate this.)
  495.  
  496. Allows (indeed, encourages) drivers to use far_data to declare the device
  497. structure, primarily to avoid overflowing the 64K data segment under MS
  498. Windows.  Changes the file output drivers and many of the printer drivers
  499. to declare their device structures as far_data.
  500.  
  501. Replaces the AT&T 3B1 driver with an updated version (from the same
  502. contributor).
  503.  
  504. Changes the Epson BJ driver and the SPARCprinter driver so they align
  505. the (0,0) point of the page with the physical corner of the paper
  506. rather than with the origin of the printable area.
  507.  
  508. Removes the EIZO MDB-10 driver, since it caused complications for the
  509. EGA and VGA drivers and is not a widely used device.
  510.  
  511. Interpreter
  512. -----------
  513.  
  514. Fixes bugs:
  515.     - The entry for the copydevice operator in the operator table
  516. was initialized incorrectly.
  517.     - printobject and writeobject didn't handle nested arrays.
  518.     - restore didn't properly close the current file (if
  519. appropriate), causing an invalidaccess error.
  520.     - buildfont required the presence of a valid, 4-element
  521. FontBBox.  (The Red Books say it's required, but Adobe interpreters
  522. don't require it; some DEC software generates a 3-element FontBBox.)
  523.     - resourceforall had several bugs; it didn't do even
  524. approximately the right thing.  There were quite a few other problems
  525. with the implementation of resources.
  526.     - setfont, makefont, and scalefont would accept a font with
  527. no FID entry.
  528. *    - Loading a .PFB font left the file open (until the next
  529. restore or quit).
  530.     - The default (null) font didn't include a PaintType entry,
  531. which some PostScript files expected.
  532. *    - The ASCIIHexDecode filter sometimes thought the underlying
  533. stream was at EOF even when there was (at most one buffer's worth of)
  534. data left.
  535.     - iscan.c included <ctype.h> before std.h, causing type name
  536. clashes on some systems.
  537. *    - save and restore didn't handle the pointers in the graphics
  538. state correctly; for example, the current font wasn't restored
  539. properly.
  540.     - Binary object sequences at the top interpreter level didn't
  541. get executed immediately.
  542.     - On high-resolution devices, the default transfer function
  543. converted almost-white grays to very light grays rather than white.
  544.     - The `string' operator was checking the string length
  545. against max_uint rather than max_ushort, which could cause invalid
  546. lengths to be accepted.
  547. *    - deviceinfo caused a stackunderflow error.
  548. *    - idiv could give incorrect results for quotients or
  549. remainders that didn't fit in 24 bits.
  550. *    - The ASCII85Encode filter padded trailing bytes with 1's
  551. rather than 0's.
  552. *    - The ASCII85Decode filter had a typo that produced incorrect
  553. results if there were exactly 2 trailing bytes.
  554.     - findlibfile didn't push a copy of the file name if it was
  555. the name of a special (%) file.
  556.     - setduplexmode was not defined in statusdict, causing
  557. /undefined errors from some poorly designed input files.
  558. *    - The CCITTFaxDecode filter had several bugs in 2-D decoding.
  559. *    - The ASCII85Decode filter didn't read ahead to detect EOD if
  560. it fell precisely on a buffer boundary.
  561.     - If a file mentioned on the command line redefined `start',
  562. Ghostscript would run the new definition rather than the built-in one
  563. after processing all the files on the command line.
  564.     - The SCO ODT compiler couldn't handle the conditionals in the
  565. ngetc (iscan.c) and sgetc* (stream.h) macros.
  566.     - makefont and scalefont didn't cache the PostScript dictionaries
  567. for scaled fonts.
  568.     - Changing the elements of the Encoding of a font dynamically
  569. didn't take effect if the character was already cached.
  570.     - makefont and scalefont didn't add the (undocumented) OrigFont
  571. and ScaleMatrix entries to the new font.
  572. *    - findfont insisted that the font name be a string or a name.
  573.     - filenameforall could cause an incorrect transfer of control
  574. if no files matched the pattern.
  575. *    - ISOLatin1Encoding had hyphen instead of minus at code 45.
  576.     - restore didn't reset saved_cbot and saved_ctop correctly;
  577. as a result, some freed blocks could get abandoned rather than put on
  578. the free list.
  579.     - Some numerical constants in zarith.c assumed that longs
  580. occupied 32 bits.
  581.  
  582. Implements additional Level 2 features:
  583.     - %device%file names (only the "os" device is provided).
  584.     - <~ ~> for ASCII-85 strings.
  585.     - Binary error messages.
  586.     - BuildGlyph.
  587.     - CCITTFaxDecode filter entries EndOfBlock, Rows, and
  588.     (undocumented) FirstBitLowOrder.
  589.     - {set/current}{color/colorspace/overprint/colorrendering/
  590.     blackgeneration/undercolorremoval}.  (See below under library
  591.     for limitations.)
  592.     - Decode for the dictionary form of image.
  593.     - File access modes a, r/w/a+.
  594.     - Font entries CDevProc, Metrics2, and WMode.
  595.     - Font operators cshow, findencoding, rootfont, and
  596.     setcachedevice2.
  597.     - glyphshow (emulated with PostScript code).
  598.     - languagelevel.
  599.     - realtime.
  600.     - setbbox.
  601.     - (Subset of) system and user parameters.
  602.     - xshow, yshow, and xyshow.
  603.     - XUIDs for fonts.
  604.  
  605. Moves the installation of systemdict and the initial allocation of
  606. globaldict (if relevant) and userdict from gs_init.ps to iinit.c.
  607.  
  608. Makes Level 2 features dynamically selectable through the
  609. .setlanguagelevel operator; disables all Level 2 features
  610. (specifically including automatic dictionary expansion) unless the
  611. level2 feature is included and active.
  612.  
  613. Adds the .knownget operator for speeding up system procedures.
  614.  
  615. Renames the type1addpath operator as .type1addpath; adds an optional
  616. left side bearing argument; changes it so it does not do the
  617. setcachedevice, fill, or stroke, but does do a moveto for the
  618. character width.  Changes Type1BuildChar appropriately.  (All this is
  619. needed to make WMode work.)
  620.  
  621. Removes the .setmetrics operator, which is no longer needed.
  622.  
  623. * Changes the meaning of the user_errors argument to gs_run_file and
  624. gs_run_string so that -1 means always return on an error, 0 means
  625. only return on an error not within a `stopped'.
  626.  
  627. Adds all the necessary checks and operators for local/global VM, but
  628. doesn't actually implement local/global mode.
  629.  
  630. Changes setcachedevice back so that it requires 4 numbers on the
  631. stack rather than a 4-element array.  (It was changed to be the other
  632. way in release 2.0, but that was because I didn't realize that fonts
  633. had to have an executable FontBBox, and some of the Ghostscript fonts
  634. didn't.)
  635.  
  636. Changes all the filter operators from .filterxxx to .filter_xxx, and
  637. removes the need to enumerate them in gs_init.ps.
  638.  
  639. Adds .oserrno and .oserrorstring operators for getting the last OS
  640. error (in the current context).
  641.  
  642. Changes gs_finit similarly to gp_exit.  Adds gs_exit_with_code that
  643. takes both an exit status and a Ghostscript error code.
  644.  
  645. Changes the name of name.h to iname.h.
  646.  
  647. Adds support for the `interrupt' error (but doesn't provide any standard
  648. way of generating one, other than through the gp_check_interrupts polling
  649. function).
  650.  
  651. Adds copyright to systemdict.
  652.  
  653. Changes the spot halftone screen to an elliptical screen supplied by
  654. Berthold K. P. Horn.
  655.  
  656. Adds a check that the first token in gs_init.ps is an integer.  In
  657. conjunction with other code in gs_init.ps, this should catch all attempts
  658. to run Ghostscript with a gs_init.ps that doesn't match the executable.
  659.  
  660. Changes all relevant occurrences of sizeof to size_of in order to
  661. work with the buggy SVR4.2 C compiler.
  662.  
  663. Changes gp_exit so it is passed both the Ghostscript error code and
  664. the exit status code as arguments.  This is backward-compatible for
  665. all but the pickiest compilers.
  666.  
  667. Adds a call on gp_check_interrupts() after fwrite calls in the stream
  668. machinery.  This prevents lengthy console output from locking out
  669. other programs.
  670.  
  671. Changes a couple of occurrences of op_def_ptr in iinit.c to work around a
  672. `const' bug in Sun's SC1.0 compiler.
  673.  
  674. Adds a special hack in the 'where' operator to work around a bug in Aldus
  675. Freehand 2.x.
  676.  
  677. Changes all empty argument lists from () to (void), which is the ANSI
  678. C syntax.
  679.  
  680. Adds a hack to ignore ^[ and ^D^[ tokens, to work around the prologue
  681. and epilogue emitted by the MS Windows LaserJet IV driver.
  682.  
  683. Defines the processcolors operator, which should not be needed, but
  684. is required because of bugs in Lotus 1-2-3 and Adobe PhotoShop.
  685.  
  686. Changes the allocator (ialloc) to fill all allocated and/or freed
  687. blocks with a marker if gs_alloc_debug is set, as gs_malloc and
  688. gs_free already do.
  689.  
  690. Library
  691. -------
  692.  
  693. Fixes bugs:
  694.     - 16-bit memory devices stored the bytes of each pixel in the
  695. wrong order.
  696.     - copy_mono did the wrong thing when copying 1 source chunk
  697. to 2 destination chunks with polarity inverted.  (This probably
  698. didn't affect any actual uses of Ghostscript.)
  699. *    - The compile-time check for ints being 2 or 4 bytes used the
  700. #error directive, which most compilers don't recognize.
  701.     - arc and arcn didn't do the right thing for degenerate
  702. (single-point) arcs, or for arcs drawn in the "wrong" direction that
  703. were multiples of 360 degrees.
  704.     - charpath did the wrong thing with Type 3 fonts.
  705.     - copyscanlines gave an error if the buffer was too large.
  706.     - The copy_mono procedure (used for text and halftones) for
  707. 2- and 4-bit-per-pixel memory and printer devices incorrectly
  708. incremented the destination pointer after every pixel, instead of
  709. only after every byte.
  710.     - The fill_rectangle procedure (used for graphics) for 2- and
  711. 4-bit-per-pixel memory and printer devices, if given any color other
  712. than all 0's or all 1's, multiplied the X coordinate and width by 2
  713. or 4, thereby filling the wrong area.
  714.     - The use of 'data' in both gs_type1_data and gs_font upset
  715. the VMS compiler.
  716.     - The `Flex' feature wasn't implemented for Type 1 fonts,
  717. which caused serious errors in rendering some fonts that use it.
  718. (Unfortunately, some Adobe fonts violate the specification, so we had
  719. to implement Flex to always use a curve.)
  720. *    - Stem width adjustment was too eager, producing very strange
  721. effects on small characters with tight curves (a curve point could
  722. get snapped to the other side of the open area).
  723.     - The allocator didn't align structures adequately on
  724. machines where sizeof(long) or sizeof(char *) was 8 bytes.
  725.     - The test for IEEE floating point gave an incorrect
  726. (negative) result on machines where sizeof(long) was 8 bytes.
  727.     - genarch.c assumed that the result of subtracting two
  728. pointers was an int, leading to a garbage arch.h file on systems
  729. where this was false.
  730. *    - The Type 1 font interpreter incorrectly reset the adjusted
  731. path position to be the same as the unadjusted path position whenever
  732. it returned control to the client (in particular, for callothersubr),
  733. leading to discontinuities and distortions in the character shapes.
  734. *    - Accented characters in Type 1 fonts often misplaced the
  735. accent to the left.
  736.     - gsmisc.c wouldn't compile on machines with 64-bit pointers,
  737. because _pad was 0, and ANSI compilers don't accept 0-length arrays.
  738.     - pathforall got confused if the client procedures modified
  739. the path.
  740.     - The command list file representation limited X and Y
  741. coordinates to 15 bits.
  742. *    - stroke could produce spikes or other garbage for mitered
  743. joins as a result of stroke adjustment.
  744.     - The params_size field of the null device was wrong, so
  745. scaling the null device produced unpredictable results.
  746.  
  747. Changes monobit memory devices to always store data big-endian.  This
  748. eliminates byte-swapping, at the cost of slightly slower rendering.
  749.  
  750. Removes the memswab* routines, since they are no longer needed.
  751.  
  752. Implements gs_cshow_[n_]init, which provides support for cshow, and
  753. gs_xyshow_[n_]init, which provides support for {x,y,xy}show.
  754.  
  755. Adds an optional left side bearing argument to gs_type1_interpret.
  756.  
  757. Changes gs_type1_interpret so it does not do a setcachedevice, fill,
  758. or stroke, but only appends the character outline to the path
  759. (including a moveto for the character width.)
  760.  
  761. Removes gs_setmetrics, which is no longer needed.
  762.  
  763. Implements gs_setcachedevice2, which provides support for
  764. setcachedevice2.
  765.  
  766. Speeds up gsave/grestore by allocating, deallocating, and copying as
  767. much as possible of the graphics state in a single operation.
  768.  
  769. Implements gs_{set/current}{color/colorspace/overprint/colorrendering/
  770. blackgeneration/undercolorremoval}.  Device, indexed (with table, not
  771. with procedure), CIE, and (substituted) separation colors are
  772. supported; some of the setup code for patterns is also present.
  773.  
  774. Increases the size of temporary file names in gdevprn.h from 30
  775. characters to 60.
  776.  
  777. Changes the character cache to be allocated dynamically in chunks.
  778.  
  779. Splits gxcache.c into gxccache.c (fast "hit" code) and gxccman.c (all
  780. other code).
  781.  
  782. Changes all occurrences of sizeof to size_of in order to work with the
  783. buggy SVR4.2 C compiler.
  784.  
  785. Adds a new concept of "external fonts", which allow a driver to
  786. substitute its own fonts for the ones obtained through the normal
  787. font machinery.
  788.  
  789. Changes all empty argument lists from () to (void), which is the ANSI
  790. C syntax.
  791.  
  792. Version 2.5.2 (9/20/92)
  793. =============
  794.  
  795. This is yet another bug fix release to (finally!) get the PCL drivers
  796. working again.
  797.  
  798. Procedures
  799. ----------
  800.  
  801. Fixes bugs:
  802.     - The comment in devs.mak for cdjcolor said it used 8 bits
  803. per pixel, rather than the correct 24.
  804.  
  805. Adds gsbj/dj/lj/lp and gslp.ps to the installed files on Unix
  806. systems.
  807.  
  808. Removes dps.dev and level2.dev from the standard configurations on
  809. all platforms, since the presence of the setcolor operator was
  810. causing the output of some common applications to fail.
  811.  
  812. Utilities
  813. ---------
  814.  
  815. Fixes bugs:
  816.     - font2c produced invalid output for any font that didn't use
  817. StandardEncoding or ISOLatin1Encoding.
  818.  
  819. Platforms
  820. ---------
  821.  
  822. Fixes bugs:
  823.     - gp_sysv.c required an extern long timezone.
  824.  
  825. Drivers
  826. -------
  827.  
  828. Fixes bugs:
  829.     - The PCL drivers were *still* doing the wrong thing about
  830. zeroing the seed row for Mode 3 compression.
  831.     - Setting the resolution with -r didn't work under Windows.
  832.     - The Windows driver got a stack overflow if it was ever
  833. asked to display a bit image wider than 32 pixels.
  834.     - The Tseng driver didn't sense the model (ET3000 vs. ET4000)
  835. correctly.
  836.  
  837. Adds the eps9high device to the standard MS-DOS makefiles.
  838.  
  839. Interpreter
  840. -----------
  841.  
  842. Fixes bugs:
  843.     - gs_run_string used gs_user_errors (a global) rather than
  844. user_errors (its argument) to control error handling.  (This does not
  845. affect normal operation of Ghostscript, only use as a server.)
  846.     - eexec popped the top element of the dictionary stack
  847. afterwards even if the encrypted code had pushed something onto it.
  848. This caused problems for some badly written PostScript code.
  849.     - The printed form of real numbers didn't always include a
  850. decimal point, causing compatibility problems.
  851.  
  852. Makes -s and -d work for device properties.
  853.  
  854. Increases the cache limit on large-memory systems.
  855.  
  856. Adds a check to ensure that the revision of gs_init.ps matches that
  857. of the interpreter.
  858.  
  859. Adds the .knownget operator.
  860.  
  861. Library
  862. -------
  863.  
  864. Fixes bugs:
  865.     - The raster computation in clist_render_init, and the
  866. computation of state_size in clist_open, didn't widen an operand to
  867. long, leading to possibly incorrect operation for 24-bit-per-pixel
  868. printers on MS-DOS systems.
  869.     - The flatness was set too large for Type 1 characters,
  870. leading to visible straight edges instead of curves at large sizes.
  871.     - Type 1 fonts that contained out-of-range coordinates would
  872. produce garbled output.  (This was not a problem with the standard
  873. Ghostscript fonts, or with Adobe Type Manager fonts.)
  874.     - gschar0.c wouldn't compile, because it referred to a
  875. non-existing structure member penum->chr.  (This had no effect on
  876. Ghostscript's operation.)
  877.     - The curve flattener required line segments to be no more
  878. than 8 x the flatness in length, leading to an enormous number of
  879. segments.
  880.     - pathforall would cause an addressing fault if the path
  881. consisted of only a moveto.
  882.  
  883. Refactors some header files so that std.h is always included before
  884. any system header file that might include sys/types.h.
  885.  
  886. Adds logic for removing top and bottom blank rows in cached
  887. characters.  (This is the beginning of compression for the cache.)
  888.  
  889. Changes the arguments of memswab2/4 from char * to byte *, for more
  890. accurate type conformance.
  891.  
  892. Version 2.5.1 (9/11/92)
  893. =============
  894.  
  895. This is the usual bug fix re-release.
  896.  
  897. Procedures
  898. ----------
  899.  
  900. Fixes bugs:
  901.     - The makefile rules for compiled fonts had a circular
  902. dependency.
  903.     - `make begin' didn't work properly on all platforms.
  904.  
  905. Ensures that all batch files end with a newline.  (The absence of the
  906. newline was confusing the GNU diff program.)
  907.  
  908. Documents the fact that the -dASCIIOUT switch no longer exists.
  909.  
  910. Utilities
  911. ---------
  912.  
  913. Fixes bugs:
  914.     - pstoppm didn't `bind' its internal procedures.
  915.     - grestoreall would undo the output device selected by
  916. pstoppm.
  917.  
  918. Changes the utilities for reading and writing Type 1 character
  919. outlines so they can work with stack representations as well as
  920. arrays.
  921.  
  922. Removes the pfbtogs.ps, phonbook.ps, and showpbm.ps utilities from
  923. the distribution.
  924.  
  925. Adds a gslj utility to parallel gslp and gsdj.
  926.  
  927. Platforms
  928. ---------
  929.  
  930. Adds the DeskJet 500C drivers (cdeskjet/cdj*) to the MS-DOS / Borland
  931. C++, MS-DOS / Watcom C/386, and MS-Windows configurations.
  932.  
  933. Removes the PCX file driver from the MS Windows executable, because
  934. the static data segment exceeded 64K.
  935.  
  936. Makes some changes in the Unix System V platform file (gp_sysv.c) and
  937. in time_.h and unixtail.mak to accommodate the 3B1.
  938.  
  939. Fonts
  940. -----
  941.  
  942. Fixes bugs:
  943.     - The Charter-Italic font was named bchi.pfa rather than
  944. bchri.pfa.
  945.     - The Cyrillic fonts (cyr.gsf, cyri.gsf) were omitted from
  946. the fileset.
  947.     - Ghostscript incorrectly assumed that all Type 1 fonts had a
  948. FontInfo dictionary.
  949.     - .loadfont used false PFBDecode, so a few .PFB fonts would
  950. get errors because the first eexec byte would be whitespace.
  951.  
  952. Changes font2c and its supporting code so that compiled fonts are
  953. location-independent.
  954.  
  955. Drivers
  956. -------
  957.  
  958. Fixes bugs:
  959.     - The margins for the H-P printers were still wrong.
  960.     - The H-P drivers accidentally cleared the compression seed
  961. row when switching compression modes.
  962.     - Some of the H-P drivers used the wrong control codes for
  963. skipping blank lines.
  964.  
  965. Adds user-supported drivers for the AT&T 3B1 console device, and for
  966. the NEC P6+ printer.
  967.  
  968. Updates the SunView driver with a new version supplied by a(nother)
  969. user.
  970.  
  971. Changes the X Windows driver so the Ghostscript window doesn't get
  972. input focus.
  973.  
  974. Changes the common code for the printer drivers so that if it can
  975. allocate a full bitmap but there isn't at least a minimum amount of
  976. memory left afterwards, it switches to banding.
  977.  
  978. Changes the Windows driver so it handles devices with more than 8
  979. bits per pixel.  (We haven't been able to test this.)
  980.  
  981. Adds a read-only PageCount device property (for printer devices
  982. only).
  983.  
  984. Changes all Aladdin-supported drivers to clip drawing requests to the
  985. ((0,0), (width,height)) rectangle of device space.
  986.  
  987. Interpreter
  988. -----------
  989.  
  990. Fixes bugs:
  991.     - Closing a NullEncode filter always gave an ioerror.
  992.     - If a single-character name occurred 1 character before the
  993. end of an input buffer, the character would be doubled.
  994.     - The procedures in gs_statd.ps didn't use "bind".
  995.     - Setting the page size didn't work properly with devices
  996. with rotated coordinate systems.
  997.     - If an error occurred, and the error object wasn't the last
  998. element of its procedure, the interpreter would re-execute the error
  999. object after running the error handler.
  1000.     - Memory devices didn't get resized if HWSize was changed,
  1001. leading to out-of-bounds memory accesses.
  1002.  
  1003. Moves revision and revisiondate from gs_init.ps to iinit.c.  Adds a
  1004. -v switch that just prints these out.
  1005.  
  1006. Arranges things so that if Ghostscript is reading from a pipe (`-'
  1007. switch on the command line) and encounters an error, it exits with
  1008. status 1 rather than 0.
  1009.  
  1010. Changes the interpreter interface so the caller explicitly passes a
  1011. pointer for storing an error object.
  1012.  
  1013. Library
  1014. -------
  1015.  
  1016. Fixes bugs:
  1017.     - The automatic adjustment of the scaling for variant paper
  1018. sizes caused the image to get expanded when it should have been
  1019. contracted, and vice versa.
  1020.     - The curve flattener insisted that each line segment be no
  1021. more than 2 x the flatness in length, leading to an enormous number
  1022. of segments even when not necessary for accuracy.
  1023.     - flattenpath and strokepath discarded a trailing moveto.
  1024.     - strokepath treated "0-width" lines as really having a width
  1025. of zero, rather than one pixel.
  1026.     - Buffered devices weren't closed and reopened if the amount
  1027. of buffer space was changed.
  1028.     - stroke used the line cap at the beginning of each subpath
  1029. even if the subpath was closed.
  1030.  
  1031. Removes the requirement that the clipping rectangle fall in the
  1032. non-negative quadrant of device space.  (This was causing problems
  1033. for Ghostview, but removing it required adding the extra clipping
  1034. step to the drawing routines in the drivers.)
  1035.  
  1036. Version 2.5 (8/18/92)
  1037. ===========
  1038.  
  1039. This version adds Type 1 hinting, CCITTFax encoding and decoding, and
  1040. Microsoft Windows support, as well as the usual minor improvements
  1041. and bug fixes.
  1042.  
  1043. Procedures
  1044. ----------
  1045.  
  1046. Fixes bugs:
  1047.     - GSIMPATH, SLZWD, and SLZWE were omitted from the VMS
  1048. makefiles, and GSIM2OUT was not removed.
  1049.     - landscap.ps messed up the current path.
  1050.  
  1051. Adds new switches:
  1052.     -dSAFER disables file writing and directory modification.
  1053.     -dESTACKPRINT causes errors to print the execution stack with
  1054. == instead of =.
  1055.     -sOutputFile=<string> replaces -sOUTPUTFILE (which is still
  1056. recognized) for setting the output file or pipe for the default
  1057. (printer) device.
  1058.     -sPAPERSIZE=<sizename> initializes the paper size.
  1059.     -dBufferSpace=<number> sets the buffer size for the default
  1060. (printer) device.
  1061.  
  1062. For Unix systems, changes the directories in GS_LIB_DEFAULT from
  1063. `pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where
  1064. datadir is normally /usr/local/lib.
  1065.  
  1066. Adds a note in the header file to the effect that the X Windows
  1067. driver expects to find header files in $(XINCLUDE)/X11, not in
  1068. $(XINCLUDE).
  1069.  
  1070. Changes -q so it defines QUIET as true instead of null (so it can be
  1071. used in the middle of the command line as well as at the beginning).
  1072.  
  1073. Renames the history.doc file as NEWS.
  1074.  
  1075. Utilities
  1076. ---------
  1077.  
  1078. Platforms
  1079. ---------
  1080.  
  1081. Fixes bugs:
  1082.     - The stack size was not getting increased on the Watcom
  1083. platform.
  1084.  
  1085. Removes "b" from the scratch file opening modes in gp_unix.c and
  1086. (conditionally) in gdevprn.c, to pacify the DECstation Ultrix system.
  1087.  
  1088. Adds a makefile (bcwin.mak) and a platform file (gp_mswin.c) for
  1089. Microsoft Windows.
  1090.  
  1091. On MS-DOS platforms (including Windows), uses the TEMP environment
  1092. variable to designate the directory for scratch files.
  1093.  
  1094. Changes std.h so that the VMS C compiler uses function prototypes and
  1095. 'const'.
  1096.  
  1097. Changes the VMS cc makefile so it doesn't use ansi2knr.
  1098.  
  1099. Fonts
  1100. -----
  1101.  
  1102. Fixes bugs:
  1103.     - findfont left an extra entry on the stack if it couldn't
  1104. find the default font.
  1105.  
  1106. Renames bchi, ncri, and puti as bchri, ncrri, and putri, to conform
  1107. with the naming scheme for other fonts.
  1108.  
  1109. Adds $(CCFLAGS) to the command line used for compiling fonts.
  1110.  
  1111. Converts the .pfa fonts (CharterBT, IBM Courier, and Utopia) to .gsf,
  1112. by removing eexec encryption and also removing some mysterious
  1113. unmapped characters from Courier.  This makes these fonts work with
  1114. DISKFONTS.
  1115.  
  1116. Changes the implementation of compiled fonts so they are read-only
  1117. and sharable (no external references).  (They are, however, not
  1118. position-independent.)
  1119.  
  1120. Provides a way to use compiled fonts on platforms that limit the
  1121. number of characters in an identifier.
  1122.  
  1123. Adds public-domain Cyrillic and Cyrillic-Italic fonts.
  1124.  
  1125. Adds a 'userdict begin' to .loadfont, because Type 3 fonts produced
  1126. by Fontographer expect a writable dictionary on the top of the stack.
  1127.  
  1128. Changes definefont for Type 1 fonts to insert UnderlinePosition and
  1129. UnderlineThickness entries in FontInfo if they are absent, because
  1130. many word processors incorrectly assume these entries are present.
  1131.  
  1132. Drivers
  1133. -------
  1134.  
  1135. Fixes bugs:
  1136.     - The documentation in use.doc said that the densities for
  1137. 9-pin Epson printers were 60x60 to 240x60, rather than 60x72 to
  1138. 240x72.
  1139.     - gdevprn.c smashed one byte beyond the end of the string
  1140. given as the OutputFile device property.
  1141.     - The X11 driver used XVisualIDFromVisual, which is not
  1142. defined in X11R3.
  1143.     - The SunView driver modified the input data, which was
  1144. declared as const.
  1145.     - The LaserJet IIP and III drivers shifted the page 185
  1146. pixels to the left and 0.25" down, because the initialization string
  1147. was incorrect.
  1148.     - The PCX driver wrote 16-bit values using the byte ordering
  1149. of the platform, rather than always LSB first.
  1150.     - For vertical spacing, the LaserJet and DeskJet drivers used
  1151. a command that spaces N/300", rather than N scan lines, but gave it a
  1152. parameter in scan lines.
  1153.     - The VESA driver didn't allocate a full 256-byte buffer for
  1154. reading the mode information from the BIOS, causing the stack to get
  1155. smashed by newer VESA implementations.
  1156.     - The VESA driver didn't use the scan line length returned by
  1157. the BIOS, causing garbage output for some cards and some resolutions.
  1158.     - The generic printer driver didn't free the bitmap when
  1159. closing the device, if it fit entirely in memory.
  1160.     - The PaintJet driver allocated its data areas on the stack
  1161. instead of with gs_malloc.
  1162.     - The generic printer driver didn't attempt to increase the
  1163. buffer size if it was too small.
  1164.     - The band list driver didn't split large bitmaps properly,
  1165. leading to garbled characters at high resolutions.
  1166.     - The GIF and PCX drivers used a color map that often turned
  1167. gray colors into non-grays.
  1168.  
  1169. Changes the default put_props procedure so that if the device is
  1170. open, setting HWSize and/or HWResolution closes the device and
  1171. reopens it.
  1172.  
  1173. Adds a driver for Microsoft Windows 3.n.
  1174.  
  1175. Updates the 'cdj' and 'dj500c' DeskJet 500C drivers with new versions.
  1176. (This are user-contributed drivers.)
  1177.  
  1178. Changes gdev_prn_put_props so OutputFile can be changed dynamically.
  1179.  
  1180. Updates the DEC LN03 driver to also handle the LA50 and LA75.  (This
  1181. is a user-contributed driver with a FSF copyright.)
  1182.  
  1183. Changes the LaserJet/DeskJet driver so that -DA4 in the makefile
  1184. makes A4 paper the default.  The driver now also sends an appropriate
  1185. page size selection command to the printer if the printer supports it.
  1186.  
  1187. Changes all the Aladdin-supported drivers to return appropriate error
  1188. codes rather than -1.
  1189.  
  1190. Adds a driver for the S3 86C911, a PC graphics accelerator used in
  1191. the popular Diamond Stealth board.  This is the first driver that
  1192. uploads character bitmaps to a device; others will probably follow.
  1193.  
  1194. Adds user-supplied code to the Epson driver so it will do triple
  1195. passes on 9-pin printers for higher resolution.
  1196.  
  1197. Adds user-supplied code for the PaintJet XL to the PaintJet driver.
  1198.  
  1199. Interpreter
  1200. -----------
  1201.  
  1202. Fixes bugs:
  1203.     - zdps1.c didn't include alloc.h.
  1204.     - On 32-bit systems, if maxlength of a dictionary was less
  1205. than the actual allocated space, length could become larger than
  1206. maxlength.
  1207.     - flushfile didn't actually flush data when reading.
  1208.     - The ASCII85Decode filter signalled EOF prematurely.
  1209.     - The scanner interpreted .3D.glorp as the number 0.3, rather
  1210. than as a name.
  1211.     - Closing a file freed the stream structure, creating
  1212. dangling references if there were other file objects pointing to the
  1213. same stream.
  1214.     - eexec called handleerror if an error occurred, instead of
  1215. letting the error propagate to an enclosing stopped.
  1216.     - gs.h made perror illegal, instead of defining it in terms
  1217. of strerror.
  1218.     - One-character names weren't being allocated at
  1219. initialization, so they could be left dangling after a restore.
  1220.     - Internal gsaves (i.e., the ones in show and setcachedevice)
  1221. didn't also save istate, so setfont inside a BuildChar procedure
  1222. might cause the font outside to get changed.
  1223.     - The allocator incorrectly freed objects in the current
  1224. chunk that were older than the current save.
  1225.     - mark was just an object, rather than an operator, so 'bind'
  1226. didn't bind it.  (This is theoretically a problem for null, true, and
  1227. false also, but even more unlikely to be a problem in practice.)
  1228.     - packed_get didn't cast packed integers to int, so negative
  1229. integer elements of packed arrays came out wrong.
  1230.     - quit just did a gs_exit, instead of returning to the driver
  1231. in an orderly way.
  1232.     - Because check_type_access checked for errors in the wrong
  1233. order, sometimes type errors were reported as access errors.
  1234.     - eq didn't check for stack underflow.
  1235.     - Some of the stream_procs structures weren't properly
  1236. declared const, leading to link errors on VMS.
  1237.  
  1238. Implements currentcolor, currentcolorspace, setcolor, and
  1239. setcolorspace (for DeviceGray, DeviceRGB, and DeviceCMYK only).
  1240.  
  1241. Implements the dictionary form of image and imagemask.  All the pairs
  1242. in the Decode array must be the same; Interpolate is ignored.  The
  1243. only supported color spaces are DeviceGray, DeviceRGB, and
  1244. DeviceCMYK.
  1245.  
  1246. Implements files as allowable sources for the image operators.
  1247.  
  1248. Removes the index field from the name structure, moving it to the
  1249. 'size' field of name refs.
  1250.  
  1251. Changes the unread/sungetc operation to require that the character be
  1252. the same as the last one read from the file.
  1253.  
  1254. Adds fflush calls to some debugging printout routines, because Unix
  1255. sometimes buffers terminal output.
  1256.  
  1257. Implements the CCITTFaxEncode and CCITTFaxDecode filters.  Implements
  1258. the general case of the SubFileDecode filter.
  1259.  
  1260. Changes definefont to treat a UniqueID of 0 as equivalent to no
  1261. UniqueID, because Fontographer output apparently often violates the
  1262. specification in this way.
  1263.  
  1264. Changes the default printer screen from 32.5 to 46 cells/inch.  (The
  1265. old value was appropriate for a hand-rotated cell with two spots in
  1266. it.)
  1267.  
  1268. Changes the utility routines to allow an integral real wherever an
  1269. integer parameter is expected in a dictionary, because Fontographer
  1270. produces fonts that violate the Adobe specification in this way.
  1271.  
  1272. Adds a `dosio' feature that provides direct access to memory and to
  1273. I/O ports under MS-DOS.  (This feature is not included in the
  1274. standard executables, of course.)
  1275.  
  1276. Changes the default character cache limit to a 1/4" x 1/4" character
  1277. at the default resolution, rather than basing it on the preallocated
  1278. cache size.
  1279.  
  1280. Removes support for t_color objects, which haven't actually been used
  1281. for several releases.
  1282.  
  1283. Implements setcmykcolor and currentcmykcolor as operators, so they
  1284. will interact properly with setcolorspace and currentcolorspace.
  1285.  
  1286. Changes the name of the file.h header file to files.h, to work around
  1287. a bug in the VMS header library.
  1288.  
  1289. Adds command line switches @file (to treat file as more command line,
  1290. to get around the DOS 128-character command line limit) and -ffile
  1291. (so one can specify file names that begin with - or @).
  1292.  
  1293. Changes the PFBDecode filter so it takes an additional boolean that
  1294. says whether or not to convert binary packets to hex.  (Conversion to
  1295. hex and back to binary accounted for a substantial amount of the time
  1296. required to load .PFB fonts.)
  1297.  
  1298. Splits off `copydevice' as a separate operator again.
  1299.  
  1300. Library
  1301. -------
  1302.  
  1303. Fixes bugs:
  1304.     - In the VMS environment, string_.h used its own prototypes
  1305. for the str... and mem... functions instead of <string.h>
  1306.     - gx_alloc_char_bits declared cdsize as long, but didn't
  1307. shorten it when passing it to shorten_cached_char.
  1308.     - Stroking didn't suppress fattening of the lines.
  1309.     - kshow didn't update the cached CTM information in the show
  1310. enumerator when returning from the callout, so further characters
  1311. could get drawn in the wrong place.
  1312.     - When a memory device returned its initial matrix, it
  1313. smashed the padding fields, which contained the interpreter's type
  1314. information.
  1315.     - setcachedevice didn't set the initial matrix in the cache
  1316. memory device.
  1317.     - image_set_rgb (in the image operators) didn't do a
  1318. gx_color_from_rgb, so in principle one could sometimes get incorrect
  1319. colors in an image.
  1320.     - The decision about whether or not to cache a character
  1321. bitmap incorrectly compared the character size against cmax rather
  1322. than cdata_size.
  1323.     - show didn't reset the in_cachedevice flag in the graphics
  1324. state, so characters rendered by a recursive show were never cached.
  1325.     - clip and eoclip didn't release the intermediate flattened
  1326. clip path, causing memory to be lost.
  1327.     - The tile_diff routine didn't handle the case of two
  1328. identical tiles properly; this produced garbage in the band list
  1329. file.
  1330.     - stringwidth didn't round the character origin to an
  1331. integral pixel; this interacted badly with hinting, causing
  1332. improperly hinted characters to wind up in the cache.
  1333.     - Bitmaps (including characters) were displaced, as well as
  1334. being clipped, if they intersected the top of a clipping region.
  1335.     - In gxclist and gdevmem1, the raster computation (although
  1336. not the result) could overflow an int on 16-bit machines.
  1337.  
  1338. Implements decoding (sample mapping) for image and imagemask.
  1339.  
  1340. Implements hinting for Type 1 fonts, based on (but not copying) the
  1341. algorithms from the X11R5 tape.
  1342.  
  1343. Changes curve rasterizing to use sampling, rather than recursive
  1344. subdivision, for characters.  This produces noticeably better output.
  1345. Speed penalty for non-cached characters is less than 10% at display
  1346. resolutions, up to 50% for 300 dpi printers.
  1347.  
  1348. Implements gs_setcmykcolor and gs_currentcmykcolor.  These are
  1349. semi-fake, since they simply convert the color to and from RGB, but
  1350. the former does set the current color space properly.
  1351.  
  1352. Changes clipping regions so they use the any-part-of-pixel rule
  1353. rather than the center-of-pixel rule.  This helps avoid dropouts when
  1354. using very small regions.
  1355.  
  1356. Implements stroke adjustment.
  1357.  
  1358. Version 2.4.2 (5/8/92)
  1359. =============
  1360.  
  1361. This is another quick release.  It finally fixes rotated halftone
  1362. screens, and cleans up a few minor problems from 2.4.1.
  1363.  
  1364. This release is being distributed only to beta testers and commercial
  1365. licensees, since I don't want to be distracted from working on 2.5.
  1366.  
  1367. Procedures
  1368. ----------
  1369.  
  1370. Fixes bugs:
  1371.     - UTRACE still appeared in the VMS makefiles.
  1372.     - The support files (*.bat, *.doc, *.gsf, *.ps, Fontmap,
  1373. COPYING, README) weren't included in the MS-DOS tar file.
  1374.     - The Unix install script didn't install landscap.ps.
  1375.  
  1376. Replaces the type1imagepath operator with PostScript code (impath.ps,
  1377. type1ops.ps) based on the new .imagepath operator.
  1378.  
  1379. Renames LICENSE as COPYING.
  1380.  
  1381. Utilities
  1382. ---------
  1383.  
  1384. Fixes bugs:
  1385.     - pcharstr.ps had an occurrence of Subrs rather than /Subrs,
  1386. causing it to not print the Subrs, or to get an error if there were
  1387. none.
  1388.     - font2c.ps didn't get the const declarations for string
  1389. dictionaries quite right.
  1390.     - The missing newline at the end of gsbj.bat confused GNU
  1391. diff.
  1392.     - ansi2knr would go into an infinite loop if a statement
  1393. exceeded its internal buffer size.
  1394.     - Compiled fonts would get processed by ansi2knr, which
  1395. messed them up.
  1396.  
  1397. Platforms
  1398. ---------
  1399.  
  1400. Fixes bugs:
  1401.     - Ghostscript didn't supply equivalents for rename and
  1402. gettimeofday, which some System V platforms lack.
  1403.     - The missing newline at the end of gp_dosfb.c confused GNU
  1404. diff.
  1405.  
  1406. Changes the Borland makefiles so that stack checking is only enabled
  1407. if DEBUG or TDEBUG is set.
  1408.  
  1409. Fonts
  1410. -----
  1411.  
  1412. Changes the names of the Utopia fonts from utrg/utb/utbi/uti to
  1413. putr/putb/putbi/puti, for consistency with the rest of the font names.
  1414. Changes cour/courb/courbi/couri to ncrr/ncrb/ncrbi/ncri likewise.
  1415.  
  1416. Replaces the Charter fonts with the CharterBT fonts donated by
  1417. Bitstream to the X11R5 distribution.
  1418.  
  1419. Adds font aliasing capability to Fontmap.  Replaces
  1420. Courier-[Bold]Oblique and ZapfChancery-MediumItalic by aliases.
  1421.  
  1422. Changes the FontBBox of the Hershey fonts to be an executable, rather
  1423. than a literal, array.
  1424.  
  1425. Drivers
  1426. -------
  1427.  
  1428. Fixes bugs:
  1429.     - The GIF driver omitted a `private' on the definition of
  1430. gif_print_page.
  1431.     - The GIF driver wrote 16-bit values using the byte ordering
  1432. of the platform, rather than always LSB first.
  1433.     - George Cameron's DeskJet 500C driver had an incorrect
  1434. control sequence for skipping blank lines.
  1435.  
  1436. Adds 'const' in many places, including the tile and bitmap arguments
  1437. of the tile_rectangle, copy_mono, and copy_color driver routines.
  1438. THIS IS A DRIVER INTERFACE CHANGE.  (Printer drivers are not
  1439. affected, since they don't implement these routines.)
  1440.  
  1441. Adds a driver for the Trident TVGA.
  1442.  
  1443. Interpreter
  1444. -----------
  1445.  
  1446. Fixes bugs:
  1447.     - alloc_free sometimes incorrectly chose to put an unaligned
  1448. block in an old segment on a freelist.
  1449.     - The default undercolor removal function returned its
  1450. argument rather than returning 0.
  1451.  
  1452. Adds NullEncode and SubFileDecode to the standard filters, since
  1453. bdftops uses the latter.
  1454.  
  1455. Adds RunLengthEncode and RunLengthDecode to the optional filters.
  1456.  
  1457. Removes the type1imagepath operator.  (It is still available as
  1458. PostScript code, impath.ps.)  Replaces it with a simpler outline
  1459. tracing operator .imagepath.
  1460.  
  1461. Adds 'const' in many places.
  1462.  
  1463. Makes fileposition (but not setfileposition) legal for NullEncode
  1464. filters.
  1465.  
  1466. Changes the default transfer function for high-resolution devices
  1467. from the identity function to the square root function.
  1468.  
  1469. Moves array_get from zgeneric.c to iutil.c.
  1470.  
  1471. Changes uses of fopen to add a "b" to the access mode, rather than
  1472. relying on the _fmode global variable on MS-DOS platforms.
  1473.  
  1474. Allows use of the -Z switch even when gsmain.c wasn't compiled with
  1475. -DDEBUG, since other modules might have been.
  1476.  
  1477. Reorganizes gs.c and gsmain.c so that the latter can be used in
  1478. server environments.
  1479.  
  1480. Replaces all uses of stdin/out/err with gs_stdin/out/err.
  1481.  
  1482. Makes the number of permanent entries on the dictionary stack a
  1483. parameter, to allow inserting globaldict in the future.
  1484.  
  1485. Changes BlueShift in the Type 1 font Private dictionary to allow real
  1486. numbers.  (This differs from the Adobe specification, but at least
  1487. one commercial font has a real number for BlueShift.)
  1488.  
  1489. Library
  1490. -------
  1491.  
  1492. Fixes bugs:
  1493.     - The doubling check in init_ht (gxht.c) still sometimes
  1494. thought there was enough room to double the tile when there actually
  1495. wasn't.
  1496.     - Rotated halftone screens didn't work.
  1497.     - gxarith.h used #ifdef vax, rather than #if
  1498. !arch_floats_are_IEEE, to test whether IEEE floats were being used.
  1499.     - pathforall didn't report a trailing moveto.
  1500.  
  1501. Replaces gs_type1imagepath with gs_imagepath.
  1502.  
  1503. Allows sOUTPUTFILE=-, meaning output to stdout.
  1504.  
  1505. Adds 'const' in many places.
  1506.  
  1507. Replaces all uses of stdin/out/err with gs_stdin/out/err.
  1508.  
  1509. Version 2.4.1 (4/21/92)
  1510. =============
  1511.  
  1512. This is a quick release to fix minor problems discovered in 2.4, and
  1513. to add a few improvements that didn't quite make it into 2.4.  It
  1514. also adds GIF and PCX file support.
  1515.  
  1516. Procedures
  1517. ----------
  1518.  
  1519. Fixes bugs:
  1520.     - Some makefile dependencies, and the ccgs script, caused trouble
  1521. for parallel versions of `make'.
  1522.     - Compiling genarch with -O with gcc on the RS/6000 produced a
  1523. buggy executable.
  1524.  
  1525. Fixes some minor problems in make.doc.
  1526.  
  1527. Adds DEVICE_DEVS2..5 to handle long device lists.
  1528.  
  1529. Removes the need to set GS_RUN_EXE when using the Watcom compiler on
  1530. MS-DOS systems.
  1531.  
  1532. Gets rid of gs_ccfnt.ps, merging its function into gs_fonts.ps.
  1533.  
  1534. Gets rid of gconfig.ps; this information is now compiled in gconfig.c.
  1535.  
  1536. Utilities
  1537. ---------
  1538.  
  1539. Fixes bugs:
  1540.     - The palette for pstoppm in 8-bit mode didn't contain all 8
  1541. primary colors.
  1542.     - font2c used just values_ to mean &values_[0]; some compilers
  1543. couldn't handle this.
  1544.  
  1545. Makes font2c insert `const' in many appropriate places.
  1546.  
  1547. Drivers
  1548. -------
  1549.  
  1550. Fixes bugs:
  1551.     - The SunView driver had not been updated properly for 2.4 and was
  1552. pretty thoroughly broken.
  1553.     - None of the printer drivers worked properly with the Watcom
  1554. compiler, because stdprn was doing \n -> \r\n substitution.
  1555.     - If the generic printer driver couldn't allocate the requested
  1556. size command list buffer, it gave up rather than trying to allocate a
  1557. smaller buffer.
  1558.     - The SuperVGA drivers (except for the VESA driver) didn't
  1559. work with the Watcom compiler, because a couple of places in the
  1560. drivers weren't truncating the offset of "segmented" pointers
  1561. properly.
  1562.     - Some of the H-P used <esc>*b#Y rather than <esc>*p+#Y for
  1563. vertical positioning; this apparently is wrong, at least for the
  1564. LJIIp.
  1565.  
  1566. Removes the dependence of the X Windows driver on Xt, Xext, and Xmu.  As a
  1567. result, Ghostscript will not install a standard colormap itself, but it
  1568. will use one if one is already installed.
  1569.  
  1570. Adds a set of drivers for Portable Bitmap, Graymap, and Pixmap file
  1571. formats.
  1572.  
  1573. Adds drivers for monochrome, EGA/VGA-style, and SuperVGA-style PCX
  1574. file formats.
  1575.  
  1576. Adds drivers for monochrome and 256-color GIF file formats.
  1577.  
  1578. Fonts
  1579. -----
  1580.  
  1581. Adds ZapfChancery-MediumItalic as a copy of ZapfChancery-Oblique.
  1582.  
  1583. Interpreter
  1584. -----------
  1585.  
  1586. Fixes bugs:
  1587.     - A value with l_new set could 'escape' to save level 0 on a
  1588. stack; if stored, it prevented the slot from being saved and restored
  1589. properly.
  1590.     - 16#7fffffff + 1 gave the floating point equivalent of -2^31, not
  1591. 2^31.
  1592.     - The PFBDecode filter computed the packet length incorrectly if
  1593. the 0x8000-bit of the length was set.
  1594.     - 5-byte numbers in Type 1 CharStrings complained of a rangecheck
  1595. if they exceeded 16 bits, rather than if they exceeded the integer part of
  1596. a fixed.
  1597.     - (, ), and \ appearing in file name arguments in the command
  1598. line did not work properly.
  1599.  
  1600. Adds 'const' in many places.
  1601.  
  1602. Changes the random number generator to be the same as the one used in
  1603. Level 2 PostScript (as reported by Ed Taft on comp.lang.postscript).
  1604.  
  1605. Exits with code 1 rather than code 0 on an unrecoverable error detected at
  1606. the PostScript level.
  1607.  
  1608. Makes dictionaries expand automatically when they fill up.
  1609.  
  1610. Adds gp_exit to complement gp_init.
  1611.  
  1612. Changes dictionaries to always allocate a power of 2 entries on
  1613. 32-bit machines.  Changes the name table to allocate indices
  1614. scattered, so dictionary lookup doesn't have to do a multiply to
  1615. scramble the index.
  1616.  
  1617. Changes the handling of currentfile to do "shallow binding" so stack
  1618. searching is almost never required.
  1619.  
  1620. Library
  1621. -------
  1622.  
  1623. Fixes bugs:
  1624.     - arc and arcn got a numeric exception if the radius was zero.
  1625.     - The undocumented 15 opcode in Type 1 fonts wasn't ignored.
  1626.     - PaintType 3 wasn't allowed.  (It isn't clear what it should
  1627. mean; we treat it as equivalent to 0.)
  1628.     - The VAX/VMS C compiler was generating incorrect code for the
  1629. chi_bits and cmask macros in gdevmem, producing incorrect output.
  1630.     - If the result of the slow algorithm for intersecting clipping
  1631. paths was a rectangle, the wrong thing happened (cbox didn't get set).
  1632.     - gx_path_is_rectangle didn't recognize open rectangles.
  1633.     - clist_change_tile didn't check properly whether the tile
  1634. size had changed, so changing the screen could produce invalid band
  1635. files.
  1636.     - The image operators did the wrong thing in the 1-for-1
  1637. case, interleaving N bytes of data with 7*N bytes of garbage.
  1638.     - stroke sometimes handled bevel and miter joins wrong in
  1639. reflected coordinate systems.
  1640.     - init_ht checked incorrectly whether there was enough room
  1641. to Y-replicate tiles, so sometimes it did it when it shouldn't have.
  1642.     - stroke sometimes thought lines were thin when they weren't.
  1643.  
  1644. Adds 'const' in many places.
  1645.  
  1646. Adds support for 2- and 4-bit-per-pixel memory devices.
  1647.  
  1648. Version 2.4 (3/25/92)
  1649. ===========
  1650.  
  1651. This is a major release that adds SuperVGA support, support for Metrics,
  1652. settable device properties, and incremental font loading.  It also
  1653. includes important performance improvements, based on rewrites of some key
  1654. algorithms, and quite a few new Level 2 / Display PostScript facilities.
  1655.  
  1656. Procedures
  1657. ----------
  1658.  
  1659. Fixes bugs:
  1660.     - The rule for compiling gconfig.c didn't include the -I switches.
  1661.     - .bat files were being distributed with a \n line terminator
  1662. rather than \r\n.
  1663.     - A CLOSE MODULE_LIST was needed after END_COMPILE: in the VMS
  1664. command files.
  1665.     - Unix systems couldn't handle multiple drivers with overlapping
  1666. sets of files.
  1667.     - -s<name> defined <name> as a null, rather than as an empty string.
  1668.  
  1669. Adds gconfig.ps to the list of needed configuration files.
  1670.  
  1671. Changes the way that the makefile handles nested .h files, so that it
  1672. doesn't have to `touch' them.
  1673.  
  1674. Adds the loadallfonts procedure to gs_fonts.ps.
  1675.  
  1676. Changes the standard DOS configuration to include VGA, EGA, VESA, Epson,
  1677. BubbleJet, and H-P printer drivers.
  1678.  
  1679. Renames ghost.mak as gs.mak, and gdevs.mak as devs.mak.
  1680.  
  1681. Adds a USE_ASM flag so that one can build a DOS version of Ghostscript
  1682. without having an assembler.
  1683.  
  1684. Splits off common code from the two MS-DOS makefiles into tccommon.mak.
  1685.  
  1686. Replaces the COPYING and LICENSE files with a new LICENSE file containing
  1687. version 2 of the GNU General Public License.
  1688.  
  1689. Removes DEVICES and DEVICE_OBJS from the makefiles, since they are no
  1690. longer needed.
  1691.  
  1692. Adds a GS_DEVICE environment variable to supply a default device name if
  1693. desired.
  1694.  
  1695. Adds ansihead.mak and unix-ansi.mak, to parallel [g]cc-head.mak and
  1696. unix-[g]cc.mak, for other ANSI C compilers.
  1697.  
  1698. Changes the way that optional features are defined in the makefiles, so
  1699. that they actually work.
  1700.  
  1701. Adds support for the Watcom C/386 compiler.
  1702.  
  1703. Allows # in the command line as equivalent to =, to compensate for
  1704. brain-damaged MS-DOS shell.
  1705.  
  1706. Adds -sOUTPUTFILE= to set the output file or pipe.
  1707.  
  1708. Adds -dWRITESYSTEMDICT to leave systemdict writable.
  1709.  
  1710. Utilities
  1711. ---------
  1712.  
  1713. Fixes bugs:
  1714.     - pcharstr.ps insisted on having Subrs be present in the font.
  1715.     - pcharstr.ps decoded negative numbers between -108 and -1131
  1716. incorrectly.
  1717.     - pfbtogs.ps didn't handle packets longer than 64K correctly.
  1718.  
  1719. Changes the bdftops utility so that it makes entries for UnderlinePosition
  1720. and UnderlineThickness in FontInfo, and so that it always records a
  1721. FullName (the FontName if no other is provided).
  1722.  
  1723. Changes the name of the pfbtops utility to pfbtogs, because groff already
  1724. includes a program called pfbtops.
  1725.  
  1726. Adds the gslp utility for doing "line printing" of text files, similar to
  1727. enscript + lpr.
  1728.  
  1729. Adds a new variable DITHERPPI that enables a different dither pattern,
  1730. claimed to be better for printers.
  1731.  
  1732. Adds the font2c utility for compiling Type 1 fonts into C, so they can be
  1733. linked into an executable rather than loaded dynamically.
  1734.  
  1735. Drivers
  1736. -------
  1737.  
  1738. Fixes bugs:
  1739.     - gdev_prn_copy_scan_lines was erroneously masking the last byte
  1740. of data even on color printers, as was paintjet_print_page.
  1741.     - The TruFax driver had a couple of compilation errors, since it
  1742. hadn't been compiled in a while.
  1743.     - The BGI driver sometimes didn't consult BGIPATH when looking for
  1744. .BGI files.
  1745.     - initclip did the wrong thing with memory devices.
  1746.     - The BGI driver didn't look in BGIDIR for .BGI files.
  1747.     - The Epson driver didn't set the right margin properly with
  1748. ESC+Q.
  1749.     - The BJ-10e driver was badly broken.
  1750.     - gdev_prn_open/close_printer didn't reset the command list file,
  1751. so it was taking quadratic time to print multi-page documents.
  1752.  
  1753. Adds color to the SunView driver.
  1754.  
  1755. Adds selectable resolution (75, 100, 150, or 300 DPI) to the
  1756. DeskJet/LaserJet driver.
  1757.  
  1758. Changes gssetdev so that drivers can specify special libraries to be
  1759. loaded, as well as object files.
  1760.  
  1761. Adds a driver for VESA-compliant SuperVGA displays.  This driver handles
  1762. all resolutions from 640 x 400 up to 1280 x 1024, in 256-color mode.  The
  1763. default is VGA resolution (640 x 480).
  1764.  
  1765. Adds a driver for the ATI Wonder SuperVGA card, and for SuperVGA cards
  1766. using the Tseng Labs ET3000 or ET4000 chip such as the STB VGA EM-16 and
  1767. the Orchid ProDesigner II (256-color modes only).
  1768.  
  1769. Adds a driver for Trident and Tseng Labs SuperVGA cards in 800 x 600,
  1770. 16-color modes (for cards with only 256K of memory).
  1771.  
  1772. Adds user-contributed drivers for the Ricoh 4081, DEC LN03, Canon LBP-8II,
  1773. and H-P DeskJet 500C printers.
  1774.  
  1775. Adds Tim Theisen's Ghostview changes to the X11 driver.
  1776.  
  1777. MAKES NON-BACKWARD-COMPATIBLE CHANGES TO THE DRIVER PROCEDURE INTERFACE as
  1778. follows:
  1779.  
  1780.     - Changes map_rgb_color and map_color_rgb to always work in a
  1781.         16-bit color value space, rather than a space defined by the
  1782.         maximum number of distinct colors provided by the device.
  1783.  
  1784.     - Adds an argument to the output_page procedure to indicate
  1785.         whether the procedure is being called for copypage or
  1786.         showpage, and a num_copies argument.
  1787.  
  1788.     - Adds a gx_bitmap_id to the copy_ and tile_ procedures, so that
  1789.         drivers can cache bitmaps in the server or device if they want
  1790.         to.
  1791.  
  1792.     - Removes fill_trapezoid and tile_trapezoid.
  1793.  
  1794.     - Adds a new get_bits procedure for reading the bits back from the
  1795.         driver buffer (when possible), replacing copy_scan_lines.
  1796.         This procedure takes a new argument describing padding and
  1797.         byte swapping, and returns a different value from
  1798.         copy_scan_lines.
  1799.  
  1800.     - Adds get_props and put_props procedures for accessing arbitrary
  1801.         additional properties of devices.  The interface is quite
  1802.         complex, but provides a great deal of flexibility.
  1803.  
  1804. See drivers.doc for details.
  1805.  
  1806. Changes gdev_mem_bytes_per_scan_line to gdev_prn_bytes_per_scan_line.
  1807.  
  1808. Adds a user-contributed driver for DigiBoard, Inc.'s fax software.
  1809.  
  1810. Fonts
  1811. -----
  1812.  
  1813. Changes Type1BuildChar so it uses the information from the Metrics
  1814. dictionary in the font, if Metrics is present.
  1815.  
  1816. Changes findfont (.loadfont) so it recognizes .PFB fonts and can load them
  1817. directly.  Also changes .loadfont to disable packing temporarily, because
  1818. some fonts rely on procedures being writable (!).
  1819.  
  1820. Interpreter
  1821. -----------
  1822.  
  1823. Fixes bugs:
  1824.     - The hypot function is not available on some Unix systems.
  1825.     - Ghostscript didn't flush and close files when exiting.
  1826.     - In statusdict, the /margins procedure used .leftmargin, but
  1827. /setmargins used .lmargin.
  1828.     - An out-of-range putinterval would simply do nothing, rather than
  1829. reporting an error.
  1830.     - If an attempt to allocate a block larger than the allocator's
  1831. chunk size (20K) failed, the allocator would erroneously think it had
  1832. succeeded.
  1833.     - The bind operator made the top-level procedure read-only, as
  1834. well as interior procedures.
  1835.     - gs.c copied 1 extra character for the value of strings defined
  1836. on the command line with -s...=, which could smash the first byte of the
  1837. next object in memory.
  1838.     - copying a dictionary erroneously required the maxlength of the
  1839. destination to be greater than or equal to the maxlength of the source,
  1840. rather than the length of the source.
  1841.     - undef didn't correctly decide when to mark a deleted entry as
  1842. deleted vs. free; as a result, some keys couldn't be looked up properly
  1843. after an undef.
  1844.     - type1encrypt and type1decrypt didn't set the size of the result
  1845. properly.
  1846.     - cvi and cvr didn't allow leading or trailing whitespace in
  1847. strings.
  1848.     - cvs didn't cause an error if the destination string was too
  1849. short.
  1850.     - Many operators didn't check correctly for stack underflow (off
  1851. by 1).
  1852.     - `for' used reals, rather than integers, if the limit was a real,
  1853. even if the initial value and increment were integers.
  1854.     - `restore' didn't properly invalidate copies of the save object
  1855. being restored from; `save dup restore restore' would crash.
  1856.     - `restore' sometimes didn't undo stores into matrices that were
  1857. stored into by operators.  (The identity matrix always had l_new set.)
  1858.     - readline gave a rangecheck if the input line exactly filled the
  1859. string.
  1860.     - `--' as the last switch on the command line caused a crash
  1861. rather than an error message.
  1862.     - On MS-DOS systems, filenameforall didn't handle patterns with a
  1863. drive or directory specifier properly.
  1864.     - stroke sometimes called gz_draw_line_fixed even if the line went
  1865. outside the clipping box by 1 pixel.
  1866.  
  1867. Changes the loop that binds procedure "operators" to entirely disable the
  1868. handling of the typecheck error, rather than to use stopped.  This cuts
  1869. initialization time significantly, and also eliminates about 35K of wasted
  1870. space (for saving the stacks).
  1871.  
  1872. Changes the version "operator" so it returns 47.0.  Adds "revision" to
  1873. define the Ghostscript version # x 100.
  1874.  
  1875. Adds gscurrentresolution and gssetresolution procedures for getting and
  1876. setting the device resolution.
  1877.  
  1878. Adds -r<res> and -r<xres>x<yres> as command line options for setting
  1879. device resolution.
  1880.  
  1881. Adds a facility for incrementally loading the individual CharStrings of a
  1882. Ghostscript font from the disk.  This can save a lot of memory, at the
  1883. expense of slower rendering.  (It is intended primarily for MS-DOS
  1884. systems.)
  1885.  
  1886. Changes findlibfile to return the name of the file that was actually
  1887. opened, as well as the file itself, when the operation succeeds.
  1888.  
  1889. Changes the name of the main entry to the interpreter from interpret to
  1890. gs_interpret, because of a conflict with a Data General library procedure.
  1891.  
  1892. Adds the .setmetrics operator to set the metrics for the current
  1893. character for Type 1 fonts.
  1894.  
  1895. Adds more LaserWriter-specific entries to statusdict.
  1896.  
  1897. Gives names to all the internal `operators', so they will print out
  1898. reasonably when an error occurs.
  1899.  
  1900. Extends the status operator to accept a string and return file
  1901. information, as defined for Level 2 PostScript.
  1902.  
  1903. Adds the filter operator and some specific filters: ASCII85Encode,
  1904. ASCII85Decode, ASCIIHexEncode, ASCIIHexDecode, eexecDecode, NullEncode,
  1905. PFBDecode, and the null case of SubFileDecode.
  1906.  
  1907. Extends the scanner to recognize the Level 2 << and >> tokens.
  1908.  
  1909. Adds a facility for extracting the text strings from a PostScript file and
  1910. writing them out in a simple format (selected by -dASCIIOUT, implemented
  1911. by gs_2asc.ps).
  1912.  
  1913. Implements all of the remaining Display PostScript facilities that are
  1914. also in Level 2 (i.e., everything in section A.1.3 of the PostScript
  1915. Language Reference Manual, Second Edition, that is not also in section
  1916. A.1.2).  The virtual memory operations are all stubs; the new halftone
  1917. options are not fully implemented.
  1918.  
  1919. Changes makeimagedevice to use a string of gray or RGB values, rather than
  1920. an array of color objects, to specify the palette.  Removes
  1921. currentgscolor and setgscolor from the interpreter, but leaves t_color
  1922. objects in, since they may be useful later.
  1923.  
  1924. Adds getdeviceprops and putdeviceprops for manipulating device properties.
  1925. Currently defined properties for all devices: InitialMatrix, HWResolution,
  1926. HWSize, Name.  Currently defined properties for printers: BufferSpace,
  1927. MaxBitmap, OutputFile.  OutputFile allows |command for piping on Unix
  1928. systems.
  1929.  
  1930. Removes deviceparams and makedevice.  Adds devicedefaultmatrix.
  1931.  
  1932. Implements reversepath.
  1933.  
  1934. Makes copy work on devices.
  1935.  
  1936. MS-DOS specific
  1937. - - - - - - - -
  1938.  
  1939. Fixes bugs:
  1940.     - iutilasm.asm wouldn't assemble with newer versions of MASM if
  1941. CPU_TYPE was set to 286 or above.
  1942.     - CPU_TYPE=386 didn't properly substitute the faster
  1943. multiply/divide routines under Turbo C++ or Borland C++, only under the
  1944. original Turbo C.
  1945.  
  1946. Library
  1947. -------
  1948.  
  1949. Fixes bugs:
  1950.     - A curve whose first and last points were the same wouldn't get
  1951. drawn at all.
  1952.     - A bug in the Turbo C++ compiler generated bad code when shifting
  1953. a long right by 1 bit.
  1954.     - If stroking a dashed line ever encountered a segment that was
  1955. completely blank, Ghostscript would indirect through a null pointer.
  1956.     - arc and arcn gave an error if the radius was negative.
  1957.     - stroke always used the general algorithm, even if the line was
  1958. guaranteed to be thin.
  1959.     - arc and arcn erroneously reduced the angles mod 360.
  1960.     - Very large or negative 32-bit numbers in Type 1 fonts didn't
  1961. work properly on MS-DOS systems (the ff0000 bits got set to zero). 
  1962.     - Color printer devices rendering entirely in memory only
  1963. allocated a monochrome-sized bitmap.
  1964.     - clip and eoclip didn't intersect the paths properly in the
  1965. general case.
  1966.     - charpath erroneously rounded the current point to an integral
  1967. value, causing characters to be spaced improperly.
  1968.     - The definition of max_color_param got some compilers confused.
  1969.     - charpath always used quadratic time and space, and dropped all
  1970. but the last character when used with a Type 3 font.
  1971.     - Stroking a path with a 180 degree angle would incorrectly miter
  1972. instead of beveling.
  1973.     - Type 1 fonts used the current flatness for curves, which could
  1974. produce bad (and inconsistent) results.
  1975.     - Stroking a degenerate line segment produced incorrect results.
  1976.  
  1977. Changes the character cache to use the UniqueID as the key, when
  1978. available, instead of the font pointer.  This dramatically improves
  1979. performance when fonts are getting removed and reloaded because of page
  1980. isolation with save/restore.
  1981.  
  1982. Removes some unnecessary casts to (float) from gsmatrix.c and gscoord.c.
  1983.  
  1984. Changes the Type 1 interpreter so that it rounds line and curve endpoints
  1985. to the center of the nearest half-pixel, and omits null line segments.
  1986. This both speeds up rendering at small sizes and improves output quality.
  1987.  
  1988. Changes gs_deviceparams to return resolution as well as extent; changes
  1989. gs_makedevice to accept resolution as well as extent.
  1990.  
  1991. Replaces the algorithm for approximating circular arcs with curves with a
  1992. more accurate one.
  1993.  
  1994. Changes gs_point and gs_rect to use doubles rather than floats.
  1995.  
  1996. Adds gs_setmetrics, for overriding Type 1 font metrics for the current
  1997. character.
  1998.  
  1999. Changes clipping to use lists of rectangles rather than path intersection.
  2000.  This makes a big difference when clipping bitmaps (including characters).
  2001.  
  2002. Changes the character cache to discard entries incrementally, rather than
  2003. clearing the entire cache when it fills up.
  2004.  
  2005. Changes the implementation of transfer functions to use a cached map,
  2006. built when the transfer function is set.  This makes transfer functions
  2007. work properly in all situations, including images.
  2008.  
  2009. Defines a .quit operator that takes an exit code, and redefines quit in
  2010. terms of it.
  2011.  
  2012. Adds support for 16-bit-per-pixel devices in gdevmem.
  2013.  
  2014. Adds gs_copydevice and gs_deviceinitialmatrix; removes gs_deviceparams and
  2015. gs_makedevice.
  2016.  
  2017. Changes setscreen to ensure that the cell is always at least 4x4 pixels in
  2018. size.
  2019.  
  2020. Version 2.3 (8/28/91)
  2021. ===========
  2022.  
  2023. This is a minor release to fix two bugs and add the PaintJet driver, which
  2024. didn't make it into 2.2.
  2025.  
  2026. Utilities
  2027. ---------
  2028.  
  2029. Changes the pstoppm utility so it counts pages correctly even in the
  2030. presence of arbitrary saves and restores.
  2031.  
  2032. Drivers
  2033. -------
  2034.  
  2035. Adds a new, "supported" PaintJet driver.
  2036.  
  2037. Changes the Epson driver to use ESC+D rather than ESC+\ for horizontal
  2038. positioning, since many printers don't support the latter.
  2039.  
  2040. Adds horizontal double-density (two-pass) printing to the Epson driver, so
  2041. it can do 240 x 60 and 360 x 180 densities.  (Vertical double density is
  2042. not supported yet.)
  2043.  
  2044. Version 2.2 (6/1/91)
  2045. ===========
  2046.  
  2047. The purpose of this release is to add save/restore, and a few
  2048. miscellaneous Level 2 P*stScr*pt features such as undef.  It also includes
  2049. major improvements in graphics quality and in handling of high-resolution
  2050. printers.
  2051.  
  2052. Procedures
  2053. ----------
  2054.  
  2055. Changes the version numbering to M.mpp rather than M.m.p, so that
  2056. `version' can be a real number for those programs that insist on it.
  2057.  
  2058. Renames ghost.ps as gs_init.ps, gfonts.ps as gs_fonts.ps, and statusd.ps
  2059. as gs_statd.ps.  The initialization files now all are named gs_*.ps.
  2060.  
  2061. Renames gdevs.{c,h,tl} as gconfig.{c,h,tl}.
  2062.  
  2063. Changes the relevant makefiles and command files so that a single build
  2064. can contain several drivers that share code, e.g., the Epson driver and
  2065. the DeskJet driver.
  2066.  
  2067. Changes gs_init.ps so it relies on an external gconfig.ps file rather than
  2068. making a specific test for the presence of Level 2 features.
  2069.  
  2070. Adds an entry for uglyr.gsf to the makefile.
  2071.  
  2072. Removes the distinction between CCA and CCNA, since most of the files now
  2073. contain constructs that require non-ANSI compilation on MS-DOS platforms.
  2074.  
  2075. Adds a `man' page for the ansi2knr utility.
  2076.  
  2077. Changes the documentation (use.doc) to show how to use -sDEVICE=<device>,
  2078. or the selectdevice procedure, to select devices by name.
  2079.  
  2080. Adds DEVICE_DEVS to the makefiles (analogous to DEVICES and DEVICE_OBJS).
  2081. This finally makes the make procedure fully automatic.
  2082.  
  2083. Adds the name of the initialization file (gs_init.ps) as a
  2084. platform-specific makefile parameter, GS_INIT.
  2085.  
  2086. Removes the test program gt.{c,tr} from the fileset, since it is not
  2087. useful to users.
  2088.  
  2089. Moves the Symbol encoding vector to a separate file (symbol_e.ps), from
  2090. which it is loaded when first used.
  2091.  
  2092. Changes the error handler so it can handle errors that occur while reading
  2093. the initialization files.
  2094.  
  2095. Extends ansi2knr so it can handle `void' and `...' in parameter lists.
  2096.  
  2097. Adds quit.ps to the set of installed files.
  2098.  
  2099. MS-DOS-specific changes
  2100. - - - - - - - - - - - -
  2101.  
  2102. Adds the VGA and BGI drivers to the standard MS-DOS configuration, and
  2103. makes VGA the default.
  2104.  
  2105. Adds a `+' and a newline at the end of gs.tr, to avoid problems with file
  2106. transfer programs or editors that add a newline at the end of files.
  2107.  
  2108. Changes the name of msdos.mak to turboc.mak, and creates a new tbcplus.mak
  2109. makefile for use with Turbo C++ and Borland C++.
  2110.  
  2111. Changes the extension of the loader response files from .tl to .tr.
  2112.  
  2113. Changes the default search path from c:/ghost and c:/ghost/fonts to c:/gs
  2114. and c:/gs/fonts.
  2115.  
  2116. Changes the directory separator from `|' back to ';', since it appears
  2117. that DOS can handle a ; in a command line if it is prefixed with \.
  2118.  
  2119. Unix-specific changes
  2120. - - - - - - - - - - -
  2121.  
  2122. Changes the uses of install in unixtail.mak so they only install a single
  2123. file at a time, which is all that the standard Unix install allows.
  2124.  
  2125. Removes the duplicate files (README/readme, LICENSE/license,
  2126. COPYING/copying, Fontmap/fontmap).
  2127.  
  2128. Changes the ld flags from LDPLAT to LDFLAGS.
  2129.  
  2130. Adds XCFLAGS and XLDFLAGS.  These are concatenated with CFLAGS and LDFLAGS
  2131. respectively.  The intention is that they be set from the `make' command
  2132. line if desired.
  2133.  
  2134. VMS-specific changes
  2135. - - - - - - - - - -
  2136.  
  2137. Repairs the omission of ZPACKED from the VMS build lists.
  2138.  
  2139. Drivers
  2140. -------
  2141.  
  2142. Fixes bugs:
  2143.     - The SunView driver produced semi-garbage on little-endian
  2144. platforms (Sun-386i) because it didn't swap the bit order.
  2145.     - The X driver would dump core if it couldn't open the display and
  2146. the DISPLAY environment variable wasn't set.
  2147.     - The X driver relied on white = 0, black = ones in a couple of
  2148. places;
  2149.     - The X driver would return an error, instead of clipping, if
  2150. asked to display outside the window.
  2151.     - The X driver would create inappropriately sized windows, because
  2152. it believed the server's report of the screen resolution.
  2153.  
  2154. Adds Fran Taylor's Private Eye driver to gdevs.mak and the fileset (not
  2155. supported by Aladdin Enterprises).
  2156.  
  2157. Adds Neil Ostroff's TruFax driver to gdevs.mak and the fileset (not
  2158. supported by Aladdin Enterprises).
  2159.  
  2160. Makes the scratch file template for the printer drivers a per-platform
  2161. quantity (gp_scratch_file_name_template).  Puts the default scratch files
  2162. for Unix in /usr/tmp rather than /tmp.
  2163.  
  2164. Changes the SunView driver to prevent the Ghostscript window from being
  2165. destroyed (which badly confuses the interpreter).
  2166.  
  2167. Extends the Epson driver to handle a variety of print densities in both X
  2168. and Y, to handle 24-pin as well as 8-pin graphics, and to allow optional
  2169. specification of default density in the makefile (gdevs.mak).
  2170.  
  2171. Refactors the printer drivers so that a single driver handles both DeskJet
  2172. and LaserJet.  Adds LaserJet drivers that use the new compression modes on
  2173. the LJ IId/IIp and LJ III.
  2174.  
  2175. Changes all the printer drivers to use band lists rather than bitmap
  2176. paging as the buffering method.  (The individual drivers need only a
  2177. one-line change to replace mem_copy_scan_lines with
  2178. gdev_prn_copy_scan_lines with a different argument.)
  2179.  
  2180. Adds the halftone phase as additional arguments to tile_rectangle and
  2181. tile_trapezoid.
  2182.  
  2183. Adds an entirely new and much simpler PaintJet driver, using the new band
  2184. list interface.
  2185.  
  2186. Adds margin information to the device structure.  This is currently only
  2187. relevant for printer devices.
  2188.  
  2189. Adds BGIPATH and BGIUSER environment variables, allowing additional
  2190. control of the BGI driver.
  2191.  
  2192. Changes the x/y_pixels_per_inch member of the device structure from int to
  2193. float.
  2194.  
  2195. Fonts
  2196. -----
  2197.  
  2198. Patches gs_fonts.ps so definefont will add an isFixedPitch entry to
  2199. FontInfo if there isn't one there.
  2200.  
  2201. Removes the old "type 7 path" encoding code from gs_fonts.ps.
  2202.  
  2203. Changes bdftops so it puts isFixedWidth and ItalicAngle entries in the
  2204. FontInfo dictionary of the fonts it creates, since some P*stScr*pt
  2205. programs rely on this.
  2206.  
  2207. Changes bdftops so it synthesizes as many missing characters as possible
  2208. out of the ones that are there (in particular: synthesizes accents out of
  2209. punctuation marks, and accented characters using seac.)  The results
  2210. aren't all that good, but they're a lot better than having characters
  2211. missing out of the font.
  2212.  
  2213. Utilities
  2214. ---------
  2215.  
  2216. Adds a pfbtops utility for converting .PFB fonts to standard Ghostscript
  2217. fonts.
  2218.  
  2219. Fixes bugs:
  2220.     - ps2image didn't reset things properly between pages for
  2221. multi-page documents.
  2222.  
  2223. Interpreter
  2224. -----------
  2225.  
  2226. Makes Ghostscript recognize `-' alone as meaning that it should read from
  2227. standard input as though it were a file.  This allows Ghostscript to
  2228. accept a pipe as input.
  2229.  
  2230. Fixes bugs:
  2231.     - seac in type1addpath used the current font's encoding, not
  2232. StandardEncoding.
  2233.     - type1decryptfile (eexec) didn't recognize binary (as opposed to
  2234. hex) representation.
  2235.     - Mentioning a name whose value was a no-access object caused an
  2236. invalidaccess error.
  2237.     - There was a bogus definition of `run' in zfile.c.
  2238.     - The interpreter didn't handle end-of-file on stdin properly.
  2239.     - Real numbers with an 'e' or 'E' but no decimal point were not
  2240. recognized.
  2241.     - On MS-DOS systems, inside strings, \ followed by a newline was
  2242. not discarded properly.
  2243.     - On MS-DOS systems, the long unsigned divide routine sometimes
  2244. gave incorrect answers.  Among other things, this caused alternate-radix
  2245. numbers sometimes to crash the interpreter.
  2246.     - cvrs didn't do the right thing about reals or negative integers.
  2247.     - .echo.mode was being reset with def instead of store, and was
  2248. defined in systemdict rather than userdict.
  2249.     - setgray and settransfer didn't interact properly.
  2250.     - 16#80000000 was being interpreted as a signed integer (and
  2251. converted to a real) rather than an unsigned one.
  2252.     - atan returned 0 sometimes when it should have returned 180.
  2253.     - currentcmykcolor was defined wrong.
  2254.  
  2255. Removes the filename operator, since no standard Ghostscript code used it,
  2256. and it caused problems with some P*stScr*pt files.
  2257.  
  2258. Implements new operators: filenameforall, selectfont (as a procedure),
  2259. stringmatch, undef.
  2260.  
  2261. Adds new standard procedures: selectdevice.
  2262.  
  2263. For MS-DOS, requires that the operand and execution stacks be located in
  2264. the data segment, and uses short pointers to address them.  This produces
  2265. significantly smaller and faster code.  (These changes are not visible to
  2266. users or library clients.)
  2267.  
  2268. Changes the assignment of attribute bits, and adds new bits for
  2269. save/restore and the garbage collector.  Changes many of the macros in
  2270. store.h to support save/restore.  (These changes are not visible to users
  2271. or library clients.)  Implements save and restore.
  2272.  
  2273. Moves type names from gs_init.ps to ghost.h and ztype.c.
  2274.  
  2275. Moves error names from gs_init.ps to errors.h and iinit.c.
  2276.  
  2277. Introduces gp.h as a documented interface to the platform-specific files.
  2278.  
  2279. Adds the -- switch, which allows Ghostscript programs to take arguments
  2280. from the command line.
  2281.  
  2282. Changes many uses of the name `name' to something else, to avoid upsetting
  2283. the Microsoft C compiler.
  2284.  
  2285. Really implements packed arrays -- they took the same amount of space as
  2286. ordinary arrays in previous versions.
  2287.  
  2288. Changes exitserver in serverdict so that it just clears the stacks.  (This
  2289. isn't the correct fix, but it will do as a workaround.)
  2290.  
  2291. Makes many miscellaneous small changes to pacify various compilers.
  2292.  
  2293. Changes gs_fonts.ps so that when "quiet" mode is selected (-q switch),
  2294. Ghostscript doesn't print anything when loading fonts or when substituting
  2295. for undefined characters.
  2296.  
  2297. Defines the name consisting of just a control-D as a no-op, because some
  2298. P*stScr*pt-generating applications put control-Ds in their output.
  2299.  
  2300. Implements halftone phase (sethalftonephase and currenthalftonephase
  2301. operators).
  2302.  
  2303. Removes the -E switch, since it is no longer useful.
  2304.  
  2305. Changes the -w and -h switches to a single -g (geometry) switch, with
  2306. usage -g<width>x<height>.  Makes the -h switch, and a new -? switch, print
  2307. usage help.
  2308.  
  2309. Implements correct handling of stack overflow errors (makes an array out
  2310. of the contents of the overflowing stack, and resets the stack, before
  2311. invoking the error handler).
  2312.  
  2313. Adds t_oparray (`operators' defined as procedures) and the makeoperator
  2314. operator.  This is so that programs like the Distillery that rely on all
  2315. operators being bound by `bind' will work properly.
  2316.  
  2317. Adds a new NOPAUSE flag to suppress the prompt and pause at copypage and
  2318. showpage.
  2319.  
  2320. Library
  2321. -------
  2322.  
  2323. Fixes bugs:
  2324.     - gs_type1_interpret didn't store the encryption state or the skip
  2325. count before returning to let the client handle a seac or an endchar in
  2326. the middle of a seac.
  2327.     - The definition of the Type 1 operator ce_testadd was based on
  2328. wrong information; the operator takes only 2 operands and does something
  2329. unknown.
  2330.     - mem_true24_copy_mono wasn't incrementing the destination pointer
  2331. if the color was transparent, leading to garbled characters.
  2332.     - gx_lookup_fm_pair would sometimes look at one entry beyond the
  2333. end of the cached font/matrix pair area.  (This probably had no practical
  2334. effect.)
  2335.     - gs_type1_interpret didn't save the current point when returning
  2336. to the client for a callothersubr, causing some characters to be rendered
  2337. displaced (such as some of the chess pieces in chess.ps).
  2338.     - gs_setgray, gs_sethsbcolor, gs_setrgbcolor, gs_setflat, and
  2339. gs_setlinewidth gave errors for out-of-range operands rather than forcing
  2340. them into range.
  2341.     - Transfer functions were not actually supported.
  2342.     - The area fill algorithm failed on certain complex paths.
  2343.     - The current point was sometimes defined when a BuildChar
  2344. procedure was called.
  2345.     - Stroking a degenerate line didn't display anything for round
  2346. caps or joins.
  2347.     - If the ends of a curve had exactly the same X coordinate, the
  2348. curve sometimes wouldn't be displayed.
  2349.     - Very thin lines that went outside the clipping region would
  2350. sometimes be displayed as dashed, or not at all.
  2351.     - The translation in a FontMatrix was ignored.
  2352.     - Very wide, shallow lines would color extraneous pixels when
  2353. using bevel or miter joins.
  2354.     - Dashed lines didn't join properly at the beginning of a closed
  2355. path.
  2356.     - 0-degree arcs didn't add the appropriate line (possibly
  2357. degenerate) to the path.
  2358.     - gs_type1_interpret didn't reset the callsubr stack when starting
  2359. the base character of a seac, which caused confusion if the accent's
  2360. endchar fell inside a Subr.
  2361.     - Non-monochrome memory memory devices weren't checking the
  2362. arguments of the drawing procedures properly.
  2363.     - The initial clipping rectangle for memory devices was being
  2364. computed wrong.
  2365.     - Null devices had a semi-infinite clipping rectangle instead of
  2366. an empty one.
  2367.     - gs_setlinewidth was treating negative arguments as zero, instead
  2368. of taking the absolute value.
  2369.     - imagemask with a dithered color used a solid color rather than
  2370. the dithered one.
  2371.  
  2372. Tweaks the area fill and image rendering algorithms to be a little more
  2373. liberal with paint when being used to render characters.
  2374.  
  2375. Changes the name of the 8-bit mapped color memory device from
  2376. mem_mapped_color_device to mem_mapped8_color_device.
  2377.  
  2378. Changes the memory devices so that on little-endian platforms, they can
  2379. store the bytes within a word in either order.  (Little-endian order
  2380. allows efficient 32-bit updating, big-endian is required when displaying
  2381. or writing to a printer or a file.)
  2382.  
  2383. Implements halftone phase.
  2384.  
  2385. Replaces the trapezoid fill algorithm with a much more accurate one
  2386. inspired by a contribution from Paul Haeberli.  This also changes the
  2387. graphics convention back to filling only pixels whose center falls within
  2388. the region to be filled.
  2389.  
  2390. Changes the character cache to allocate headers and bits contiguously out
  2391. of a single ring buffer.
  2392.  
  2393. Changes gs_imagemask and gs_imagemask_init to take a thickness adjustment
  2394. parameter.
  2395.  
  2396. Changes gs_setcachedevice and gs_setcharwidth to take the graphics state
  2397. as a parameter.
  2398.  
  2399. Renames gx_device_memory_bitmap_size as gdev_mem_bitmap_size,
  2400. mem_copy_scan_lines as gdev_mem_copy_scan_lines, and
  2401. mem_bytes_per_scan_line as gdev_mem_bytes_per_scan_line.
  2402.  
  2403. Version 2.1.1 (1/15/91)
  2404. =============
  2405.  
  2406. This is a sub-release distributed to fix a few early bugs in 2.1, just in
  2407. time for the new GNU master tape.
  2408.  
  2409. Build procedures
  2410. ----------------
  2411.  
  2412. Removes all of the (undebugged) Level 2 code from the fileset, as well as
  2413. the (unused) file gdevvga.c.
  2414.  
  2415. Changes the tar file so that the files are stored in the directory
  2416. gs<version> rather than simply gs, e.g., gs211.
  2417.  
  2418. Interpreter
  2419. -----------
  2420.  
  2421. Changes the scanner so that \ is recognized within strings regardless of
  2422. whether the scanner is reading from a string or from a file.  This is
  2423. compatible with newer P*stScr*pt interpreters, and with the newer
  2424. P*stSc*pt language specification, but not with the older specification in
  2425. the original PostScript Language Reference Manual.
  2426.  
  2427. Drivers
  2428. -------
  2429.  
  2430. Fixes the max_value macro in gdevmem.c so that compilers won't complain
  2431. about a left shift by 32.
  2432.  
  2433. Adds 'byte' to the list of types that gdevx.c must sidestep because header
  2434. files use them.
  2435.  
  2436. Library
  2437. -------
  2438.  
  2439. Changes the computation of penum->unpack in gsimage.c so as not to upset
  2440. compilers that don't treat procedures and pointers to procedures as
  2441. compatible types for conditional expressions.
  2442.  
  2443. Version 2.1 (12/31/90)
  2444. ===========
  2445.  
  2446. This is primarily a bug fix release to clean up problems in 2.0.  It also
  2447. implements a first cut at the new color operators.
  2448.  
  2449. Build procedures
  2450. ----------------
  2451.  
  2452. Changes the separator for multiple directories in MS-DOS from ';' to '|',
  2453. since there is no way to include a ';' in a command line.
  2454.  
  2455. Adds <dir>/fonts to the default search path, where <dir> is c:/ghost for
  2456. MS-DOS systems and `pwd` for Unix systems.
  2457.  
  2458. Adds new documentation describing how to direct output to the printer.
  2459.  
  2460. Changes the PROCTYPE and USE8087 options in MSDOS.MAK to CPU_TYPE and
  2461. FPU_TYPE.  The latter now indicates the type of FPU to generate code for,
  2462. if any.
  2463.  
  2464. Drivers
  2465. -------
  2466.  
  2467. Adds a driver for the Canon BubbleJet BJ10e.
  2468.  
  2469. Modifies the EGA driver to handle (non-standard) frame buffers larger than
  2470. 64K.  Adds drivers for the VGA and for the EIZO MDB-10 (a 1024 x 768 frame
  2471. buffer).
  2472.  
  2473. Changes the X driver so that it clips to the window dimensions, rather
  2474. than reporting an error.
  2475.  
  2476. Notes that the H-P LaserJet driver, like the DeskJet driver, works under
  2477. Unix as well as MS-DOS.
  2478.  
  2479. Adds support for 120 X DPI mode, and for the LQ-1500, to the Epson driver.
  2480.  
  2481. Fonts
  2482. -----
  2483.  
  2484. Fixes bugs in bdftops:
  2485.     - It was using /UniqueId instead of /UniqueID as the key for the
  2486. font unique ID.  This effectively disabled the font cache.
  2487.     - The definition for .notdef was bogus -- an invalid CharString.
  2488.  
  2489. Changes ghost.ps and gfonts.ps so that NullFont is the initial font,
  2490. rather than Ugly.
  2491.  
  2492. Arranges things so that when attempting a font substitution, if the
  2493. default font is not found, NullFont is used instead.
  2494.  
  2495. Extends bdftops so that if certain easily synthesized characters are
  2496. missing from a font, it will attempt to synthesize them using available
  2497. characters.
  2498.  
  2499. Interpreter
  2500. -----------
  2501.  
  2502. Extends the -T switch to allow specifying a printf template for the
  2503. arguments of the procedure being traced.
  2504.  
  2505. Fixes bugs:
  2506.     - /0 was interpreted as equivalent to 0 (a number) rather than a
  2507. literal name.
  2508.     - packedarray was defined as being like array, instead of like
  2509. array followed by astore.
  2510.     - Many minor and harmless type mismatches (and a couple of very
  2511. minor genuine bugs) were upsetting the Apollo C compiler.
  2512.     - exp was incorrectly failing in certain cases with a negative
  2513. first argument.
  2514.     - copyscanlines incorrectly required at least 4 elements on the
  2515. operand stack, although it correctly only used the top 3.
  2516.     - readhexstring incorrectly read 1 byte even if the string length
  2517. was zero.
  2518.     - Not every place that expected an array would accept a packed
  2519. array.
  2520.     - Very complex paths (and infrequently other things) could produce
  2521. a 'memory leak'.
  2522.     - / alone would skip following whitespace and gather following
  2523. characters, rather than creating an empty name.
  2524.     - ghost.ps left newerror defined as true in $error, which resulted
  2525. in an erroneous error report if a program executed a 'stop'.
  2526.     - The definition of exitserver in serverdict didn't clear the
  2527. stack.
  2528.     - currentfile returned an executable file, rather than a literal
  2529. one.
  2530.     - setfont for Type 1 fonts didn't check the UniqueID in the font
  2531. dictionary against the one in the font's Private dictionary.
  2532.     - A value stored in a dictionary under the key /xxx couldn't be
  2533. retrieved using the key (xxx), and vice versa.
  2534.     - charpath with a Type 1 font on a string containing a 'space'
  2535. would produce garbage (it released the parent path inappropriately).
  2536.     - bytesavailable did not work properly for terminal input.
  2537.  
  2538. Changes the interface to the memory allocator so that it always takes an
  2539. element size and an element count, like calloc instead of malloc (but note
  2540. that alloc does *not* clear just-allocated blocks).  Gets rid of the
  2541. special 'dynamic' allocation procedures.
  2542.  
  2543. Changes the random number operators to use a better implementation.
  2544.  
  2545. Changes the idiv operator so it will accept any numbers, not just
  2546. integers, as arguments.  (The PostScript manual doesn't allow this, but
  2547. implementations apparently do.)
  2548.  
  2549. Provides semi-fake but usable definitions for all of the color PostScript
  2550. extensions, including a real implementation of colorimage.
  2551.  
  2552. No longer uses the name 'null', which is apparently reserved by Microsoft
  2553. C.  Makes a number of other minor changes required to pacify the Microsoft
  2554. C compiler.
  2555.  
  2556. Implements %statementedit and %lineedit.  (%statementedit is equivalent to
  2557. %lineedit, which is wrong.)  Changes the interactive interpreter to use
  2558. %statementedit.
  2559.  
  2560. Changes the scanner to accept null, ctrl-K (vertical tab), and ctrl-L
  2561. (form feed) as whitespace.  Ctrl-L terminates a comment, null and ctrl-K
  2562. do not.
  2563.  
  2564. Allows a literal string as the 'proc' argument(s) for image, imagemask,
  2565. and colorimage.
  2566.  
  2567. Adds the following operators/procedures: arct, cleardictstack, deletefile,
  2568. renamefile.
  2569.  
  2570. Defines =print as a synonym for =, for the benefit of LaserPrep.
  2571.  
  2572. Implements non-zero PaintType for the show operators (but not for
  2573. charpath) for Type 1 fonts.
  2574.  
  2575. Adds the ISOLatin1Encoding encoding vector.
  2576.  
  2577. Renames currentcolor and setcolor as currentgscolor and setgscolor, to
  2578. avoid conflict with the Level 2 PostScript names.  Removes colorhsb,
  2579. colorrgb, hsbcolor, and rgbcolor.
  2580.  
  2581. Library
  2582. -------
  2583.  
  2584. Fixes bugs:
  2585.     - In a couple of places, a 0 was being passed as a pointer
  2586. argument without casting, which confused the Microsoft C compiler.
  2587.     - Image devices were not recognized properly in debugging
  2588. configurations.
  2589.     - Inverted-color monochrome image devices were not recognized
  2590. properly.
  2591.     - Images that exactly fill the drawing area rendered very slowly,
  2592. because they erroneously used the general clipping algorithm.
  2593.     - Images that are 1-for-1 with the device were incorrectly scaled
  2594. by a factor of 8 in X.
  2595.     - Rounding artifacts sometimes caused characters to be unevenly
  2596. offset vertically by 1 pixel.
  2597.     - Type 1 fonts that used the Flex feature resulted in garbled
  2598. images.
  2599.     - The show operator routines would incorrectly fill or stroke a
  2600. path that existed at the time the show was started.
  2601.     - setscreen truncated the cell size instead of rounding, which
  2602. could produce off-by-1 anomalies.
  2603.     - stroke would sometimes produce garbage (or nothing at all) for
  2604. very narrow lines.
  2605.     - path filling would only color the pixels whose centers fell
  2606. inside the path: the Adobe specification requires coloring a pixel if any
  2607. part of it falls inside the path.
  2608.  
  2609. Changes the Epson printer driver so that it drives the printer directly
  2610. rather than writing to a file.
  2611.  
  2612. Changes pathbbox so that if the path is empty but there is a current
  2613. point, it returns a null rectangle at the current point.
  2614.  
  2615. Changes gs_image_init to take an additional parameter (after bps) giving
  2616. the number of samples per pixel (1, 3, or 4), and an indication of whether
  2617. the samples for each pixel are together or separated (-3 or -4).
  2618.  
  2619. Renames the gs_image_data and gs_imagemask_data procedures as gs_image and
  2620. gs_imagemask, and removes the old versions of the latter.
  2621.  
  2622. Adds gs_colorimage.
  2623.  
  2624. Replaces Snoopy's color dithering algorithm with one contributed by Paul
  2625. Haeberli.
  2626.  
  2627. Changes gs_setgray, gs_[set]hsbcolor, and gs_[set]rgbcolor so that they
  2628. coerce arguments outside the range [0..1] back into the range, instead of
  2629. signalling an error.
  2630.  
  2631. Makes a number of minor changes required to pacify the Microsoft C
  2632. compiler.
  2633.  
  2634. Changes gs_arcto so that if the last argument is a null pointer, the
  2635. tangent points are not returned.
  2636.  
  2637. Removes gs_type1addpath, which is not useful.  (Clients must call
  2638. gs_type1_init and gs_type1_interpret directly.)
  2639.  
  2640. Implements the 'seac' opcode for Type 1 fonts, allowing fonts with accented
  2641. characters to display properly.
  2642.  
  2643. Implements the undocumented 'testadd' opcode for Type 1 fonts, which is
  2644. used by some Adobe fonts.
  2645.  
  2646. Renames gs_currentcolor and gs_setcolor as gs_currentgscolor and
  2647. gs_setgscolor.  Removes gs_colorhsb, gs_colorrgb, gs_hsbcolor, and
  2648. gs_rgbcolor.
  2649.  
  2650. Version 2.0 (9/12/90)
  2651. ===========
  2652.  
  2653. The main purpose of this release is to add fonts, support for multiple
  2654. devices, and imaging into memory.  It also fixes a number of miscellaneous
  2655. bugs.  (Unfortunately, accurate records of the bugs fixed are not
  2656. available.)  The changes were so extensive that we chose to increment the
  2657. major version number.
  2658.  
  2659. Miscellaneous
  2660. -------------
  2661.  
  2662. Doesn't attempt to open the .MAP file on Unix systems.
  2663.  
  2664. Adds mention of statusd.ps to interp.doc.
  2665.  
  2666. Notes that Turbo C 2.0, not 1.5, is required for building the MS-DOS
  2667. version.
  2668.  
  2669. Adds a DEVICES= line to the makefile, and allows multiple devices.
  2670.  
  2671. Documents, in interp.doc, the X Windows resources that Ghostscript
  2672. recognizes.
  2673.  
  2674. Adds three PostScript masters to the fileset: chess.ps (+ cheq.ps),
  2675. golfer.ps, and escher.ps.
  2676.  
  2677. Drivers
  2678. -------
  2679.  
  2680. Changes the names of all the device drivers.  See gdevs.mak for the
  2681. updated list.
  2682.  
  2683. Adds a (working) driver for SunView.
  2684.  
  2685. Adds drivers for the Sony NeWS frame buffer, and the Sony Microsystems
  2686. NWP533 printers.  These drivers were contributed by users, so we aren't
  2687. prepared to answer questions about them.
  2688.  
  2689. Adds a driver for the Borland Graphics Interface (BGI) for MS-DOS systems.
  2690. Note that to use this driver with a non-EGA/VGA display, you need a .BGI
  2691. file appropriate for your hardware.  (The Ghostscript executable includes
  2692. the EGA/VGA driver.)
  2693.  
  2694. Adds a driver for Epson printers.  The driver has only been tested on an
  2695. LX-800, and on an H-P DeskJet in FX-80 emulation mode, but may work on
  2696. other models.  The driver could be adapted to work on Unix systems, but as
  2697. distributed, it only works on MS-DOS systems.
  2698.  
  2699. Adds a driver for the Hewlett-Packard DeskJet printer.  The driver could
  2700. be adapted to work on Unix systems, but as distributed, it only works on
  2701. MS-DOS systems.
  2702.  
  2703. The X Windows driver no longer waits for the user to type a character
  2704. before bringing up the initial display.
  2705.  
  2706. Adds information to drivers.doc describing how to change the definition of
  2707. the device structure and procedure table.
  2708.  
  2709. Extends the tile_rectangle and tile_trapezoid driver procedures to
  2710. interpret color0 = color1 = gx_no_color_index as meaning that the tile is
  2711. actually colored, not a mask.
  2712.  
  2713. Build procedures
  2714. ----------------
  2715.  
  2716. Changes the tar file so it puts everything in a directory called gs.
  2717.  
  2718. Removes the -ansi switch for gcc (this was causing problems with <math.h>
  2719. on some systems).
  2720.  
  2721. Changes LDPLAT to the string -X, which is appropriate for most Unix
  2722. systems (but not for SunOS 4.n).
  2723.  
  2724. Adds EXTRALIBS to the makefile, for specifying additional libraries to be
  2725. linked in.
  2726.  
  2727. Adds a 'clean' target for 'make', to get rid of all temporary files, the
  2728. binaries, and the executable.
  2729.  
  2730. Changes names of system-specific files from gp-xxx.c to gp_xxx.c.
  2731.  
  2732. Adds support for VMS (gp_vms.c and ghost.dcl).
  2733.  
  2734. Creates a new file gdevs.mak, and reorganizes the other makefiles, so that
  2735. the choice of which device driver(s) to include is isolated in a single
  2736. line in the platform-specific makefile.
  2737.  
  2738. Changes the standard MS-DOS makefile so it builds for 8088/86 (not 80386),
  2739. with neither -DNOPRIVATE nor -DDEBUG.
  2740.  
  2741. Changes the name of the MS-DOS makefile from dos-ega.mak to msdos.mak, and
  2742. the Unix makefiles from ux-[g]cc-x.mak to unix-[g]cc.mak.
  2743.  
  2744. Updates drivers.doc to describe how to add new drivers in gdevs.mak.
  2745.  
  2746. Removes gdevs.ps: the drivers are now responsible for specifying the size
  2747. of the imaging region.
  2748.  
  2749. Interpreter
  2750. -----------
  2751.  
  2752. Adds a makefile macro GS_LIB_DEFAULT and an environment variable GS_LIB to
  2753. define a search path for the library (initialization and font) files, and
  2754. implements the -I switch for the same purpose (replacing -sLIB=, which was
  2755. never actually implemented).  See interp.doc for details.
  2756.  
  2757. No longer clears the operand stack between interactive inputs.  No longer
  2758. prints the contents of the operand stack after every input in debug mode.
  2759.  
  2760. Doesn't "eat" the character that the user types to proceed after a
  2761. showpage, unless it's an isolated <return>.
  2762.  
  2763. Changes the prompt so that it says
  2764.     GS>
  2765. if the operand stack is empty, or
  2766.     GS<n>
  2767. if there are n > 0 elements on the operand stack.
  2768.  
  2769. Adds -w and -h switches to the command line, equivalent to -dWIDTH= and
  2770. -dHEIGHT= except that they require numeric arguments.
  2771.  
  2772. Adds -q (quiet startup) switch to the command line, which suppresses some
  2773. initial messages and also has an effect equivalent to -dQUIET.
  2774.  
  2775. Fixes bugs:
  2776.     - = and == caused an error on some kinds of objects if the object
  2777. didn't have read access.
  2778.     - cvs didn't print operator names.
  2779.     - The definition of dynamic_begin in iscan.c caused the DEC VMS C
  2780. compiler to produce incorrect code.
  2781.     - mul didn't return a correct (real) result when multiplying a
  2782. very large integer by an integer that wasn't very large.
  2783.     - eq and ne didn't work on files, fonts, save objects, and some
  2784. operators.
  2785.     - The scanner would sometimes blow up on floating point numbers
  2786. beginning with a '.'.
  2787.     - flushfile didn't pop its argument from the stack.
  2788.     - put and putinterval would store into a packed array.
  2789.     - a few operators didn't check properly for stack underflow.
  2790.     - cvrs produced wrong output for radix values greater than 10.
  2791.     - The scanner would convert upper-case letters in alternate-radix
  2792. numbers wrong on Unix systems.
  2793.     - String comparisons other than equality often produced the wrong
  2794. result if the strings were of different lengths.
  2795.     - An ifelse as the last thing inside a forall would confuse the
  2796. execution stack.
  2797.     - There were some omitted casts and 'private' declarations that
  2798. made the GNU compiler unhappy.
  2799.     - There was a memory leak in the image[mask] operators that caused
  2800. 516 bytes to be permanently lost each time one of them was used.
  2801.     - Quoted strings of length greater than 50 and less than 100 would
  2802. get mangled when being read in.
  2803.     - The scanner didn't consume the whitespace character following a
  2804. token, so programs that read data out of the program file could get
  2805. confused.
  2806.     - Under rare circumstances, an object of size between 249 and 255
  2807. bytes could get allocated on top of another object.
  2808.  
  2809. Allows bind to bind packed arrays, even though they aren't normally
  2810. writable.
  2811.  
  2812. Changes the length operator to allow a name as the argument.  (The
  2813. PostScript manual doesn't allow this, but implementations apparently do.)
  2814.  
  2815. Changes the setcachedevice operator to allow the bounding box to be
  2816. specified as a 4-element array instead of 4 scalars.  (The PostScript
  2817. manual doesn't allow this, but implementations apparently do.)
  2818.  
  2819. Removes a line from ghost.ps that accidentally disabled the font cache.
  2820.  
  2821. Implements memory devices (makeimagedevice, copyscanlines, and makedevice
  2822. for image devices).  makeimagedevice is implemented only for 1, 8, 24, and
  2823. 32 bits per pixel.
  2824.  
  2825. Changes the deviceparams operator so it pushes a mark on the stack below
  2826. the parameters.  This is to allow for devices that have more than the
  2827. standard set of parameters.
  2828.  
  2829. Replaces defaultdevicename with two new operators, getdevice and
  2830. devicename.
  2831.  
  2832. Adds a flushpage operator that flushes any outstanding buffered output to
  2833. the screen.  This is not the same as copypage: on printers, copypage
  2834. actually prints a page, whereas flushpage may do nothing; on displays,
  2835. flushpage and copypage may both flush output to a server.
  2836.  
  2837. Adds an unread operator for pushing back a character into a file.
  2838.  
  2839. Adds a description of proposed grayimage and colorimage operators to
  2840. ghost.doc, even though they aren't implemented yet.
  2841.  
  2842. Changes the name of the currentfileposition operator to fileposition.
  2843.  
  2844. Removes the framedevice operator, since the new device operators supersede
  2845. it.
  2846.  
  2847. Adds a writeppmfile operator, for writing the contents of a memory device
  2848. to a ppm file.
  2849.  
  2850. Makes Ghostscript work even when the >> operator doesn't sign-extend
  2851. negative numbers.  (This has not been tested.)
  2852.  
  2853. Adds the Symbol encoding to ghost.ps.
  2854.  
  2855. Adds two new file-related operators, filename and findlibfile.  See
  2856. ghost.doc and interp.doc for details.
  2857.  
  2858. Adds type1encrypt and type1decrypt operators for manipulating Adobe Type 1
  2859. encoded fonts.
  2860.  
  2861. Changes the imagecharpath and addcharpath operators to type1imagepath and
  2862. type1addpath.  These operators now work with the Adobe Type 1 font
  2863. encoding.
  2864.  
  2865. Adds the type1decryptfile operator for reading Adobe Type 1 encrypted
  2866. fonts.
  2867.  
  2868. Library
  2869. -------
  2870.  
  2871. Fixes bugs:
  2872.     - curveto and lineto didn't check for the current point being
  2873. defined.
  2874.     - stringwidth would fail if there was no current point.
  2875.     - There were omitted casts that made the GNU compiler unhappy.
  2876.     - Line caps and joins didn't always work.
  2877.     - Dashed lines didn't work at all.
  2878.     - If you read out the current matrix while inside a BuildChar
  2879. procedure, the result was garbage.
  2880.     - image[mask] would crash if you gave it a single string with more
  2881. than 64K-1 pixels (MS-DOS only).
  2882.     - Filling with a gray pattern sometimes wrote into pixels beyond
  2883. the right edge of the region (MS-DOS only).
  2884.     - The font cache would mistake fonts for each other if both fonts
  2885. had a default (unsupplied) "unique ID".
  2886.     - When a character was entered into the font cache for the first
  2887. time, sometimes it would display as garbage and/or displaced vertically
  2888. from its proper position.
  2889.  
  2890. Implements gs_makeimagedevice, gs_copyscanlines, gs_getdevice,
  2891. gs_devicename, gs_flushpage, gs_writeppmfile, gs_type1encrypt,
  2892. gs_type1decrypt, gs_type1imagepath, and gs_type1addpath procedures
  2893. corresponding to the new operators in the interpreter (see preceding
  2894. section).
  2895.  
  2896. Changes [gs_]setdevice so that it does an erasepage when it first opens
  2897. the device.
  2898.  
  2899. Changes definition of gx_device structure as follows.  NOTE: THIS AFFECTS
  2900. ALL DRIVERS.
  2901.  
  2902.     - Removes bits_from_MSB (which wasn't actually used, in any case).
  2903.         Ghostscript now assumes officially, as it always did in
  2904.         practice, that device bitmaps are stored MSB first, i.e., X=0
  2905.         corresponds to the 0x80 bit in the first byte.
  2906.  
  2907.     - Removes the initial_matrix member, which wasn't actually being
  2908.         set up.
  2909.  
  2910.     - Adds a new member 'name', a string giving the device name.
  2911.  
  2912.     - Adds new members 'x_pixels_per_inch' and 'y_pixels_per_inch'.
  2913.         These are only used by the default initial_matrix procedure
  2914.         (see below).
  2915.  
  2916.     - Adds a new procedure 'output_page'.  The default implementation
  2917.         (gx_default_output_page) just calls the sync_output procedure.
  2918.  
  2919.     - Adds a new procedure 'get_initial_matrix'.  The default
  2920.         procedure uses the width, height, and x/y_pixels_per_inch
  2921.         members to compute the matrix, assuming that X values run from
  2922.         right to left, and Y values run from top to bottom.
  2923.  
  2924. Changes the names of the allocation procedure types gs_proc_alloc and
  2925. gs_proc_free to proc_alloc_t and proc_free_t, and moves them from gs.h to
  2926. std.h.
  2927.  
  2928. Makes Ghostscript work even when the >> operator doesn't sign-extend
  2929. negative numbers.  (This has not been tested.)
  2930.  
  2931. Version 1.3 (6/20/89)
  2932. ===========
  2933.  
  2934. This release should have had a lot more things in it, but time pressure
  2935. and the already long delay in getting it out made it necessary to push it
  2936. out the door in an incomplete state (e.g., no testing on X systems
  2937. whatsoever).
  2938.  
  2939. Interpreter
  2940. -----------
  2941.  
  2942. Makes -d and -D equivalent on the command line.  Adds a new switch -s / -S
  2943. that defines a name as a string rather than a token.
  2944.  
  2945. Arranges things so that if -sLIB=_a_prefix_ is defined on the command
  2946. line, (filename) run will look for _a_prefix_filename before giving up if
  2947. filename isn't the name of an accessible file.
  2948.  
  2949. Changes showpage from an operator to a procedure.  The definition of
  2950. showpage in ghost.ps does a copypage, beeps the console, waits for the
  2951. user to type a character (normally a <return>, since line buffering is
  2952. always enabled), and then does an erasepage and an initgraphics.
  2953.  
  2954. Adds a new initialization file, gdevs.ps, containing device-dependent
  2955. parameters.  The default window size for X Windows is properly set to 612
  2956. x 792, i.e., 8.5" x 11".
  2957.  
  2958. Adds a new optional initialization file, statusd.ps, that provides dummy
  2959. definitions for the names found in statusdict on LaserWriters.
  2960.  
  2961. Adds a new operator, getenv, to get information from the shell
  2962. environment.
  2963.  
  2964. Adds a new predefined operator, defaultdevicename, that returns either (X)
  2965. or (EGA) according to how the interpreter was built.
  2966.  
  2967. Adds a new type, devicetype, and new operators deviceparams, getscanlines,
  2968. makedevice, makeimagedevice, and setdevice.  Changes currentdevice to
  2969. return a device object rather than a set of parameters.
  2970.  
  2971. Makes the scanner recognize reals with 'e' exponent notation, and handle
  2972. reals with more than 9 digits.
  2973.  
  2974. Fixes a bug that made names starting with digits read incorrectly.
  2975.  
  2976. Fixes a bug in the exp operator that made it not pop its first argument
  2977. from the stack.
  2978.  
  2979. Fixes a bug in the rand operator that made it return negative values about
  2980. half the time.
  2981.  
  2982. Fixes a bug in equality comparison (eq, ne, and several other operators)
  2983. that made unequal operator objects occasionally appear to be equal on DOS
  2984. systems.
  2985.  
  2986. Fixes a bug in the bind operator that made it not work on packed arrays.
  2987.  
  2988. Changes the internal representation of dictionaries so they can be
  2989. expanded or contracted dynamically.  Adds a new operator, setmaxlength, to
  2990. change the allocated size of a dictionary.
  2991.  
  2992. Changes sstorei.h so that non-DOS compilers don't encounter the #pragma
  2993. directive used by Turbo C.
  2994.  
  2995. Restores the display mode (on MS-DOS systems) when exiting.
  2996.  
  2997. Fonts
  2998. -----
  2999.  
  3000. Makes undefined characters in the standard font display as tilde rather
  3001. than blank (or causing an error).  Unmapped character codes (those mapped
  3002. to .notdef in the encoding) still display as nothing, per the PostScript
  3003. manual.
  3004.  
  3005. Library
  3006. -------
  3007.  
  3008. Adds a new header file, gxbitmap.h, with some new documentation describing
  3009. the internal storage format for bitmaps.
  3010.  
  3011. Makes numerous internal changes in the character / font cache, affecting
  3012. many of the routines in gxcache.c.
  3013.  
  3014. Fixes a bug in gz_draw_line / gz_fill_trapezoid that made nearly
  3015. horizontal lines display wrong.
  3016.  
  3017. Fixes a bug in gs_scale that made scaling not work if the coordinate
  3018. system was rotated or skewed.
  3019.  
  3020. Extends the font cache so it will handle characters rotated by multiples
  3021. of 90 degrees.
  3022.  
  3023. Changes the second argument of gx_path_bbox and gx_path_is_rectangle to be
  3024. a gs_fixed_rect * rather than a fixed [4].
  3025.  
  3026. Changes gs_matrix_rotate so it handles multiples of 90 degrees as a
  3027. special case.
  3028.  
  3029. Changes the definition of the gx_device structure to accommodate the new
  3030. device operators, and adds corresponding library calls.
  3031.  
  3032. Changes the type for a device color index from int to gx_color_index
  3033. (equivalent to unsigned long).  ***NOTE***: this affects existing clients
  3034. and drivers in a non-trivial way on MS-DOS systems.
  3035.  
  3036. Changes gs_malloc and gs_free to take a client name string as an argument.
  3037.  
  3038. Usage procedures
  3039. ----------------
  3040.  
  3041. Changes the compilation rules for Unix systems to not use the -o and -c
  3042. compiler flags together, to be compatible with more versions of cc.
  3043.  
  3044. Changes the gcc makefile to use $(GCC) rather than gcc as the compiler
  3045. name.
  3046.  
  3047. Moves the -1 flag for the MS-DOS compiler from the cc*.bat files to the
  3048. makefile.
  3049.  
  3050. Changes CCDEBUG to CCFLAGS, and adds ASMFLAGS, in DOS makefile.
  3051.  
  3052. Adds -DFOR80386 and /DFOR80386 to enable use of 80386 instructions in
  3053. assembly code on DOS systems.
  3054.  
  3055. Merges the DEBUG and gs_DEBUG switches.  There is now only a single DEBUG
  3056. switch that affects both the interpreter and the library.
  3057.  
  3058. Adds a new compilation switch, -DNOPRIVATE, that makes private (static)
  3059. variables and procedures public for debugging and profiling (only needed
  3060. on DOS systems).
  3061.  
  3062. Adds the DOS executable (gs.exe and gs.map) to the distribution fileset.
  3063.  
  3064. Adds new platform-specific code files, gp-*.c, for a few things like
  3065. reading the clock.
  3066.  
  3067. Adds a new documentation file, drivers.doc, that describes the interface
  3068. between Ghostscript and device drivers.
  3069.  
  3070. Version 1.2 (2/22/89)
  3071. ===========
  3072.  
  3073. Interpreter
  3074. -----------
  3075.  
  3076. Adds the new facilities in version 25 of PostScript: //name for immediate
  3077. lookup, packed arrays (setpacking, currentpacking, packedarray operators),
  3078. and new font cache parameters (setcacheparams, currentcacheparams
  3079. operators).
  3080.  
  3081. Adds new operators (setfileposition, currentfileposition) for random
  3082. access to files.
  3083.  
  3084. Extends readhexstring to take either a string or a file, just like token.
  3085.  
  3086. Fixes a bug that caused the 'for' operator (and a couple of others) to
  3087. randomly smash memory locations on PC platforms.
  3088.  
  3089. Library
  3090. -------
  3091.  
  3092. Renames the init_device driver procedure as open_device, and adds a
  3093. corresponding close_device.
  3094.  
  3095. Adds new procedures to read and set the cache limit values (implementing
  3096. the currentcacheparams and setcacheparams operators).
  3097.  
  3098. Usage procedures
  3099. ----------------
  3100.  
  3101. Changes the name of the Unix makefile to ux-cc-x.mak, and adds a new Unix
  3102. makefile, ux-gcc-x.mak, for using gcc instead of cc.  (The latter doesn't
  3103. actually work yet.)
  3104.  
  3105. Changes the name of the single built-in font from uglyfont.cp to
  3106. ugly10.cp.
  3107.  
  3108. Version 1.1 (2/12/89)
  3109. ===========
  3110.  
  3111. Interpreter
  3112. -----------
  3113.  
  3114. Makes the scanner treat ^Z (ASCII code 26) as whitespace: it erroneously
  3115. treated ^R (ASCII code 22, or octal 26) as whitespace.
  3116.  
  3117. Makes the token and readline operators, and the syntax for comments,
  3118. recognize \r (code 13), \n (code 10), and \r\n as equivalent end-of-line
  3119. indicators.  The token and readline operators will skip over any of these
  3120. sequences at the end of a token or line respectively, and a comment will
  3121. read through any of these sequences.  The other file operators (read,
  3122. write, readstring, writestring) do nothing special with these characters.
  3123.  
  3124. Changes the debug switch name from -D to -Z.  Adds a -D switch for
  3125. defining names in systemdict from the command line.  Defines -DDEBUG for
  3126. printing out debugging information during initialization, and -DNODISPLAY
  3127. for suppressing display output.
  3128.  
  3129. Corrects a bug that prevented the error machinery from working -- in
  3130. version 1.0, errors always dumped the stacks and aborted interpretation.
  3131.  
  3132. Corrects a bug that made eq and ne not work for strings.
  3133.  
  3134. Makes the atan (arctangent) operator normalize its results according to
  3135. the PostScript convention.
  3136.  
  3137. Makes the div operator check for zero divisor.
  3138.  
  3139. Makes unimplemented operators (resetfile, echo, save, restore, strokepath,
  3140. reversepath) truly undefined.
  3141.  
  3142. Makes the interactive loop exit gracefully on end-of-file: in version 1.0
  3143. this caused an infinite loop.
  3144.  
  3145. Implements the status operator.
  3146.  
  3147. Corrects a bug that made the 'for' operator deliver garbage values if one
  3148. or more of the operands (start, increment, end) was a real.
  3149.  
  3150. Corrects a bug that made the arc and arcn operators not pop their operands
  3151. from the stack.
  3152.  
  3153. Corrects a bug that made the kshow operator crash the interpreter.
  3154.  
  3155. Corrects a bug that made the print operator fail on machines that don't
  3156. pass structure arguments by simply pushing the contents of the structure.
  3157.  
  3158. Adds a new operator, imagecharpath, to convert images to
  3159. addcharpath-compatible outlines.
  3160.  
  3161. Changes alloc and alloc_free to use char * rather than byte *, and
  3162. alloc_free to return void rather than int, making them compatible with the
  3163. library's expectations and with malloc/free.
  3164.  
  3165. Explicitly casts all expressions of the form (ptr1 - ptr2) used as
  3166. procedure arguments to unsigned, to handle an incompatibility between
  3167. Turbo C versions 1.5 and 2.0.
  3168.  
  3169. Changes some of the internal conventions for operators: operators that
  3170. push on the operand stack must check for overflow explicitly, and
  3171. operators that modify the execution stack must return a special code.
  3172. (See oper.h for details.)
  3173.  
  3174. Initialization (ghost.ps, gfonts.ps)
  3175. --------------
  3176.  
  3177. Modifies ghost.ps and gfonts.ps so they print debugging information only
  3178. if the name DEBUG is defined.  (Presumably the user will set this from the
  3179. command line with -DDEBUG.)
  3180.  
  3181. Changes ghost.ps so it initializes the nominal screen size to 640 x 350 on
  3182. MS-DOS systems as before, but to 612 x 792 on Unix systems, which is an
  3183. 8.5" x 11" page at 72 pixels per inch.
  3184.  
  3185. Library
  3186. -------
  3187.  
  3188. Corrects a bug that made the fill and eofill operators (gs_fill and
  3189. gs_eofill) not perform a newpath afterward.
  3190.  
  3191. Corrects the bug that made thin, nearly horizontal lines display wrong (as
  3192. a series of disconnected dots) in the MS-DOS implementation.
  3193.  
  3194. Fixes a bug in the EGA driver that often made it fill rectangular regions
  3195. with black around information being displayed in white.
  3196.  
  3197. Completely changes the internal representation of outline fonts, and
  3198. changes btoi.ps (a Ghostscript language program for converting bitmaps to
  3199. outlines) to use a new library call, gs_imagecharpath.
  3200.  
  3201. Changes the extension for outline font files from .gf to .cp.
  3202.  
  3203. Adds a new debugging switch, q, that traces all rectangle fill operations.
  3204.  
  3205. Adds a new debugging switch, v, that traces all device-level output calls.
  3206.  
  3207. Explicitly casts pointer differences passed as procedure arguments, as in
  3208. the interpreter.
  3209.  
  3210. Makes stringwidth work if there is no current point.  In version 1.0, this
  3211. gave a nocurrentpoint error.
  3212.  
  3213. Usage procedures
  3214. ----------------
  3215.  
  3216. Changes the name of the 'read me' file from READ.ME to README.
  3217.  
  3218. Removes a bogus line (invoking the 'mcopy' utility) from the makefile.
  3219.  
  3220. Splits up the makefile into a generic part (ghost.mak) and
  3221. platform-specific parts (dos-ega.mak, unix-x11.mak).  The latter are what
  3222. is actually executed.
  3223.  
  3224. Puts the definitions of the DEBUG and gs_DEBUG compilation flags into the
  3225. makefile instead of in ghost.h and gx.h respectively.
  3226.  
  3227. Changes the names of the documentation files to be a little less cryptic.
  3228. Changes all the file names to lower-case in the documentation.  Adds
  3229. installation information to make.doc.
  3230.  
  3231. Changes all function definitions (but not prototype declarations) to ANSI
  3232. syntax, and adds a preprocessing step (ansi2knr) to convert them to K&R
  3233. syntax on Unix systems.
  3234.  
  3235. Changes the normal MS-DOS link configuration to not assume the presence of
  3236. an 80x87 coprocessor, and describes how to increase performance if a
  3237. coprocessor is present.
  3238.  
  3239. Changes the names of all the interpreter .c files, except stream.c, to
  3240. begin with 'i'.
  3241.  
  3242. Version 1.0 (8/11/88)
  3243. ===========
  3244.  
  3245. First version released to the public.
  3246.